Upload Tizen:Main source 2.0alpha master 2.0_alpha
authorKim Kibum <kb0929.kim@samsung.com>
Mon, 21 May 2012 09:00:37 +0000 (18:00 +0900)
committerKim Kibum <kb0929.kim@samsung.com>
Mon, 21 May 2012 09:00:37 +0000 (18:00 +0900)
861 files changed:
ABOUT-NLS [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
TODO [new file with mode: 0644]
acinclude.m4 [new file with mode: 0644]
aclocal.m4 [new file with mode: 0644]
config.guess [new file with mode: 0755]
config.h.in [new file with mode: 0644]
config.rpath [new file with mode: 0755]
config.sub [new file with mode: 0755]
configure [new file with mode: 0755]
configure.in [new file with mode: 0644]
contrib/Makefile.am [new file with mode: 0644]
contrib/Makefile.in [new file with mode: 0644]
contrib/README [new file with mode: 0644]
contrib/adduser-old.c [new file with mode: 0644]
contrib/adduser.c [new file with mode: 0644]
contrib/adduser.sh [new file with mode: 0755]
contrib/adduser2.sh [new file with mode: 0755]
contrib/atudel [new file with mode: 0755]
contrib/groupmems.shar [new file with mode: 0644]
contrib/pwdauth.c [new file with mode: 0644]
contrib/shadow-anonftp.patch [new file with mode: 0644]
contrib/udbachk.tgz [new file with mode: 0644]
depcomp [new file with mode: 0755]
doc/HOWTO [new file with mode: 0644]
doc/Makefile.am [new file with mode: 0644]
doc/Makefile.in [new file with mode: 0644]
doc/README.limits [new file with mode: 0644]
doc/README.platforms [new file with mode: 0644]
doc/WISHLIST [new file with mode: 0644]
doc/console.c.spec.txt [new file with mode: 0644]
doc/cracklib26.diff [new file with mode: 0644]
etc/Makefile.am [new file with mode: 0644]
etc/Makefile.in [new file with mode: 0644]
etc/limits [new file with mode: 0644]
etc/login.access [new file with mode: 0644]
etc/login.defs [new file with mode: 0644]
etc/pam.d/Makefile.am [new file with mode: 0644]
etc/pam.d/Makefile.in [new file with mode: 0644]
etc/pam.d/chage [new file with mode: 0644]
etc/pam.d/chfn [new file with mode: 0644]
etc/pam.d/chgpasswd [new file with mode: 0644]
etc/pam.d/chpasswd [new file with mode: 0644]
etc/pam.d/chsh [new file with mode: 0644]
etc/pam.d/groupadd [new file with mode: 0644]
etc/pam.d/groupdel [new file with mode: 0644]
etc/pam.d/groupmems [new file with mode: 0644]
etc/pam.d/groupmod [new file with mode: 0644]
etc/pam.d/login [new file with mode: 0644]
etc/pam.d/newusers [new file with mode: 0644]
etc/pam.d/passwd [new file with mode: 0644]
etc/pam.d/su [new file with mode: 0644]
etc/pam.d/useradd [new file with mode: 0644]
etc/pam.d/userdel [new file with mode: 0644]
etc/pam.d/usermod [new file with mode: 0644]
etc/useradd [new file with mode: 0644]
install-sh [new file with mode: 0755]
lib/.indent.pro [new file with mode: 0644]
lib/Makefile.am [new file with mode: 0644]
lib/Makefile.in [new file with mode: 0644]
lib/commonio.c [new file with mode: 0644]
lib/commonio.h [new file with mode: 0644]
lib/defines.h [new file with mode: 0644]
lib/encrypt.c [new file with mode: 0644]
lib/exitcodes.h [new file with mode: 0644]
lib/faillog.h [new file with mode: 0644]
lib/fputsx.c [new file with mode: 0644]
lib/get_gid.c [new file with mode: 0644]
lib/get_pid.c [new file with mode: 0644]
lib/get_uid.c [new file with mode: 0644]
lib/getdef.c [new file with mode: 0644]
lib/getdef.h [new file with mode: 0644]
lib/getlong.c [new file with mode: 0644]
lib/getulong.c [new file with mode: 0644]
lib/groupio.c [new file with mode: 0644]
lib/groupio.h [new file with mode: 0644]
lib/groupmem.c [new file with mode: 0644]
lib/gshadow.c [new file with mode: 0644]
lib/gshadow_.h [new file with mode: 0644]
lib/lockpw.c [new file with mode: 0644]
lib/nscd.c [new file with mode: 0644]
lib/nscd.h [new file with mode: 0644]
lib/pam_defs.h [new file with mode: 0644]
lib/port.c [new file with mode: 0644]
lib/port.h [new file with mode: 0644]
lib/prototypes.h [new file with mode: 0644]
lib/pwauth.c [new file with mode: 0644]
lib/pwauth.h [new file with mode: 0644]
lib/pwio.c [new file with mode: 0644]
lib/pwio.h [new file with mode: 0644]
lib/pwmem.c [new file with mode: 0644]
lib/sgetgrent.c [new file with mode: 0644]
lib/sgetpwent.c [new file with mode: 0644]
lib/sgetspent.c [new file with mode: 0644]
lib/sgroupio.c [new file with mode: 0644]
lib/sgroupio.h [new file with mode: 0644]
lib/shadow.c [new file with mode: 0644]
lib/shadowio.c [new file with mode: 0644]
lib/shadowio.h [new file with mode: 0644]
lib/shadowmem.c [new file with mode: 0644]
lib/utent.c [new file with mode: 0644]
libmisc/.indent.pro [new file with mode: 0644]
libmisc/Makefile.am [new file with mode: 0644]
libmisc/Makefile.in [new file with mode: 0644]
libmisc/addgrps.c [new file with mode: 0644]
libmisc/age.c [new file with mode: 0644]
libmisc/audit_help.c [new file with mode: 0644]
libmisc/basename.c [new file with mode: 0644]
libmisc/chkname.c [new file with mode: 0644]
libmisc/chkname.h [new file with mode: 0644]
libmisc/chowndir.c [new file with mode: 0644]
libmisc/chowntty.c [new file with mode: 0644]
libmisc/cleanup.c [new file with mode: 0644]
libmisc/cleanup_group.c [new file with mode: 0644]
libmisc/cleanup_user.c [new file with mode: 0644]
libmisc/console.c [new file with mode: 0644]
libmisc/copydir.c [new file with mode: 0644]
libmisc/entry.c [new file with mode: 0644]
libmisc/env.c [new file with mode: 0644]
libmisc/failure.c [new file with mode: 0644]
libmisc/failure.h [new file with mode: 0644]
libmisc/fields.c [new file with mode: 0644]
libmisc/find_new_gid.c [new file with mode: 0644]
libmisc/find_new_uid.c [new file with mode: 0644]
libmisc/getdate.c [new file with mode: 0644]
libmisc/getdate.h [new file with mode: 0644]
libmisc/getdate.y [new file with mode: 0644]
libmisc/getgr_nam_gid.c [new file with mode: 0644]
libmisc/getrange.c [new file with mode: 0644]
libmisc/hushed.c [new file with mode: 0644]
libmisc/isexpired.c [new file with mode: 0644]
libmisc/limits.c [new file with mode: 0644]
libmisc/list.c [new file with mode: 0644]
libmisc/log.c [new file with mode: 0644]
libmisc/loginprompt.c [new file with mode: 0644]
libmisc/mail.c [new file with mode: 0644]
libmisc/motd.c [new file with mode: 0644]
libmisc/myname.c [new file with mode: 0644]
libmisc/obscure.c [new file with mode: 0644]
libmisc/pam_pass.c [new file with mode: 0644]
libmisc/pam_pass_non_interractive.c [new file with mode: 0644]
libmisc/pwd2spwd.c [new file with mode: 0644]
libmisc/pwd_init.c [new file with mode: 0644]
libmisc/pwdcheck.c [new file with mode: 0644]
libmisc/rlogin.c [new file with mode: 0644]
libmisc/salt.c [new file with mode: 0644]
libmisc/setugid.c [new file with mode: 0644]
libmisc/setupenv.c [new file with mode: 0644]
libmisc/shell.c [new file with mode: 0644]
libmisc/strtoday.c [new file with mode: 0644]
libmisc/sub.c [new file with mode: 0644]
libmisc/sulog.c [new file with mode: 0644]
libmisc/system.c [new file with mode: 0644]
libmisc/ttytype.c [new file with mode: 0644]
libmisc/tz.c [new file with mode: 0644]
libmisc/ulimit.c [new file with mode: 0644]
libmisc/user_busy.c [new file with mode: 0644]
libmisc/utmp.c [new file with mode: 0644]
libmisc/valid.c [new file with mode: 0644]
libmisc/xgetXXbyYY.c [new file with mode: 0644]
libmisc/xgetgrgid.c [new file with mode: 0644]
libmisc/xgetgrnam.c [new file with mode: 0644]
libmisc/xgetpwnam.c [new file with mode: 0644]
libmisc/xgetpwuid.c [new file with mode: 0644]
libmisc/xgetspnam.c [new file with mode: 0644]
libmisc/xmalloc.c [new file with mode: 0644]
libmisc/yesno.c [new file with mode: 0644]
ltmain.sh [new file with mode: 0755]
man/Makefile.am [new file with mode: 0644]
man/Makefile.in [new file with mode: 0644]
man/chage.1 [new file with mode: 0644]
man/chage.1.xml [new file with mode: 0644]
man/chfn.1 [new file with mode: 0644]
man/chfn.1.xml [new file with mode: 0644]
man/chgpasswd.8 [new file with mode: 0644]
man/chgpasswd.8.xml [new file with mode: 0644]
man/chpasswd.8 [new file with mode: 0644]
man/chpasswd.8.xml [new file with mode: 0644]
man/chsh.1 [new file with mode: 0644]
man/chsh.1.xml [new file with mode: 0644]
man/config.xml.in [new file with mode: 0644]
man/cs/Makefile.am [new file with mode: 0644]
man/cs/Makefile.in [new file with mode: 0644]
man/cs/expiry.1 [new file with mode: 0644]
man/cs/faillog.5 [new file with mode: 0644]
man/cs/faillog.8 [new file with mode: 0644]
man/cs/gpasswd.1 [new file with mode: 0644]
man/cs/groupadd.8 [new file with mode: 0644]
man/cs/groupdel.8 [new file with mode: 0644]
man/cs/groupmems.8 [new file with mode: 0644]
man/cs/groupmod.8 [new file with mode: 0644]
man/cs/groups.1 [new file with mode: 0644]
man/cs/grpck.8 [new file with mode: 0644]
man/cs/gshadow.5 [new file with mode: 0644]
man/cs/id.1 [new file with mode: 0644]
man/cs/lastlog.8 [new file with mode: 0644]
man/cs/logoutd.8 [new file with mode: 0644]
man/cs/nologin.8 [new file with mode: 0644]
man/cs/passwd.5 [new file with mode: 0644]
man/cs/shadow.5 [new file with mode: 0644]
man/cs/su.1 [new file with mode: 0644]
man/cs/vipw.8 [new file with mode: 0644]
man/de/Makefile.am [new file with mode: 0644]
man/de/Makefile.in [new file with mode: 0644]
man/de/chfn.1 [new file with mode: 0644]
man/de/chsh.1 [new file with mode: 0644]
man/de/groups.1 [new file with mode: 0644]
man/de/login.1 [new file with mode: 0644]
man/de/newgrp.1 [new file with mode: 0644]
man/de/passwd.1 [new file with mode: 0644]
man/de/passwd.5 [new file with mode: 0644]
man/de/su.1 [new file with mode: 0644]
man/de/vigr.8 [new file with mode: 0644]
man/de/vipw.8 [new file with mode: 0644]
man/es/Makefile.am [new file with mode: 0644]
man/es/Makefile.in [new file with mode: 0644]
man/expiry.1 [new file with mode: 0644]
man/expiry.1.xml [new file with mode: 0644]
man/faillog.5 [new file with mode: 0644]
man/faillog.5.xml [new file with mode: 0644]
man/faillog.8 [new file with mode: 0644]
man/faillog.8.xml [new file with mode: 0644]
man/fi/Makefile.am [new file with mode: 0644]
man/fi/Makefile.in [new file with mode: 0644]
man/fi/chfn.1 [new file with mode: 0644]
man/fi/chsh.1 [new file with mode: 0644]
man/fi/su.1 [new file with mode: 0644]
man/fr/Makefile.am [new file with mode: 0644]
man/fr/Makefile.in [new file with mode: 0644]
man/fr/chage.1 [new file with mode: 0644]
man/fr/chfn.1 [new file with mode: 0644]
man/fr/chpasswd.8 [new file with mode: 0644]
man/fr/chsh.1 [new file with mode: 0644]
man/fr/expiry.1 [new file with mode: 0644]
man/fr/faillog.5 [new file with mode: 0644]
man/fr/faillog.8 [new file with mode: 0644]
man/fr/getspnam.3 [new file with mode: 0644]
man/fr/gpasswd.1 [new file with mode: 0644]
man/fr/groupadd.8 [new file with mode: 0644]
man/fr/groupdel.8 [new file with mode: 0644]
man/fr/groupmod.8 [new file with mode: 0644]
man/fr/groups.1 [new file with mode: 0644]
man/fr/grpck.8 [new file with mode: 0644]
man/fr/grpconv.8 [new file with mode: 0644]
man/fr/grpunconv.8 [new file with mode: 0644]
man/fr/gshadow.5 [new file with mode: 0644]
man/fr/id.1 [new file with mode: 0644]
man/fr/lastlog.8 [new file with mode: 0644]
man/fr/limits.5 [new file with mode: 0644]
man/fr/login.1 [new file with mode: 0644]
man/fr/login.access.5 [new file with mode: 0644]
man/fr/login.defs.5 [new file with mode: 0644]
man/fr/logoutd.8 [new file with mode: 0644]
man/fr/newgrp.1 [new file with mode: 0644]
man/fr/newusers.8 [new file with mode: 0644]
man/fr/passwd.1 [new file with mode: 0644]
man/fr/passwd.5 [new file with mode: 0644]
man/fr/porttime.5 [new file with mode: 0644]
man/fr/pwck.8 [new file with mode: 0644]
man/fr/pwconv.8 [new file with mode: 0644]
man/fr/pwunconv.8 [new file with mode: 0644]
man/fr/sg.1 [new file with mode: 0644]
man/fr/shadow.3 [new file with mode: 0644]
man/fr/shadow.5 [new file with mode: 0644]
man/fr/su.1 [new file with mode: 0644]
man/fr/suauth.5 [new file with mode: 0644]
man/fr/useradd.8 [new file with mode: 0644]
man/fr/userdel.8 [new file with mode: 0644]
man/fr/usermod.8 [new file with mode: 0644]
man/fr/vigr.8 [new file with mode: 0644]
man/fr/vipw.8 [new file with mode: 0644]
man/generate_mans.deps [new file with mode: 0644]
man/generate_mans.mak [new file with mode: 0644]
man/generate_translations.mak [new file with mode: 0644]
man/getspnam.3 [new file with mode: 0644]
man/gpasswd.1 [new file with mode: 0644]
man/gpasswd.1.xml [new file with mode: 0644]
man/groupadd.8 [new file with mode: 0644]
man/groupadd.8.xml [new file with mode: 0644]
man/groupdel.8 [new file with mode: 0644]
man/groupdel.8.xml [new file with mode: 0644]
man/groupmems.8 [new file with mode: 0644]
man/groupmems.8.xml [new file with mode: 0644]
man/groupmod.8 [new file with mode: 0644]
man/groupmod.8.xml [new file with mode: 0644]
man/groups.1 [new file with mode: 0644]
man/groups.1.xml [new file with mode: 0644]
man/grpck.8 [new file with mode: 0644]
man/grpck.8.xml [new file with mode: 0644]
man/grpconv.8 [new file with mode: 0644]
man/grpunconv.8 [new file with mode: 0644]
man/gshadow.5 [new file with mode: 0644]
man/gshadow.5.xml [new file with mode: 0644]
man/hu/Makefile.am [new file with mode: 0644]
man/hu/Makefile.in [new file with mode: 0644]
man/hu/chsh.1 [new file with mode: 0644]
man/hu/gpasswd.1 [new file with mode: 0644]
man/hu/groups.1 [new file with mode: 0644]
man/hu/lastlog.8 [new file with mode: 0644]
man/hu/login.1 [new file with mode: 0644]
man/hu/newgrp.1 [new file with mode: 0644]
man/hu/passwd.1 [new file with mode: 0644]
man/hu/passwd.5 [new file with mode: 0644]
man/hu/sg.1 [new file with mode: 0644]
man/hu/su.1 [new file with mode: 0644]
man/id.1 [new file with mode: 0644]
man/id.1.xml [new file with mode: 0644]
man/id/Makefile.am [new file with mode: 0644]
man/id/Makefile.in [new file with mode: 0644]
man/id/chsh.1 [new file with mode: 0644]
man/id/login.1 [new file with mode: 0644]
man/id/useradd.8 [new file with mode: 0644]
man/it/Makefile.am [new file with mode: 0644]
man/it/Makefile.in [new file with mode: 0644]
man/it/chage.1 [new file with mode: 0644]
man/it/chfn.1 [new file with mode: 0644]
man/it/chpasswd.8 [new file with mode: 0644]
man/it/chsh.1 [new file with mode: 0644]
man/it/expiry.1 [new file with mode: 0644]
man/it/faillog.5 [new file with mode: 0644]
man/it/faillog.8 [new file with mode: 0644]
man/it/getspnam.3 [new file with mode: 0644]
man/it/gpasswd.1 [new file with mode: 0644]
man/it/groupadd.8 [new file with mode: 0644]
man/it/groupdel.8 [new file with mode: 0644]
man/it/groupmod.8 [new file with mode: 0644]
man/it/groups.1 [new file with mode: 0644]
man/it/grpck.8 [new file with mode: 0644]
man/it/grpconv.8 [new file with mode: 0644]
man/it/grpunconv.8 [new file with mode: 0644]
man/it/id.1 [new file with mode: 0644]
man/it/lastlog.8 [new file with mode: 0644]
man/it/login.1 [new file with mode: 0644]
man/it/logoutd.8 [new file with mode: 0644]
man/it/newgrp.1 [new file with mode: 0644]
man/it/newusers.8 [new file with mode: 0644]
man/it/passwd.1 [new file with mode: 0644]
man/it/passwd.5 [new file with mode: 0644]
man/it/porttime.5 [new file with mode: 0644]
man/it/pwck.8 [new file with mode: 0644]
man/it/pwconv.8 [new file with mode: 0644]
man/it/pwunconv.8 [new file with mode: 0644]
man/it/sg.1 [new file with mode: 0644]
man/it/shadow.3 [new file with mode: 0644]
man/it/shadow.5 [new file with mode: 0644]
man/it/su.1 [new file with mode: 0644]
man/it/useradd.8 [new file with mode: 0644]
man/it/userdel.8 [new file with mode: 0644]
man/it/usermod.8 [new file with mode: 0644]
man/it/vigr.8 [new file with mode: 0644]
man/it/vipw.8 [new file with mode: 0644]
man/ja/Makefile.am [new file with mode: 0644]
man/ja/Makefile.in [new file with mode: 0644]
man/ja/chage.1 [new file with mode: 0644]
man/ja/chfn.1 [new file with mode: 0644]
man/ja/chpasswd.8 [new file with mode: 0644]
man/ja/chsh.1 [new file with mode: 0644]
man/ja/expiry.1 [new file with mode: 0644]
man/ja/faillog.5 [new file with mode: 0644]
man/ja/faillog.8 [new file with mode: 0644]
man/ja/gpasswd.1 [new file with mode: 0644]
man/ja/groupadd.8 [new file with mode: 0644]
man/ja/groupdel.8 [new file with mode: 0644]
man/ja/groupmod.8 [new file with mode: 0644]
man/ja/groups.1 [new file with mode: 0644]
man/ja/grpck.8 [new file with mode: 0644]
man/ja/grpconv.8 [new file with mode: 0644]
man/ja/grpunconv.8 [new file with mode: 0644]
man/ja/id.1 [new file with mode: 0644]
man/ja/lastlog.8 [new file with mode: 0644]
man/ja/limits.5 [new file with mode: 0644]
man/ja/login.1 [new file with mode: 0644]
man/ja/login.access.5 [new file with mode: 0644]
man/ja/login.defs.5 [new file with mode: 0644]
man/ja/logoutd.8 [new file with mode: 0644]
man/ja/newgrp.1 [new file with mode: 0644]
man/ja/newusers.8 [new file with mode: 0644]
man/ja/passwd.1 [new file with mode: 0644]
man/ja/passwd.5 [new file with mode: 0644]
man/ja/porttime.5 [new file with mode: 0644]
man/ja/pwck.8 [new file with mode: 0644]
man/ja/pwconv.8 [new file with mode: 0644]
man/ja/pwunconv.8 [new file with mode: 0644]
man/ja/sg.1 [new file with mode: 0644]
man/ja/shadow.3 [new file with mode: 0644]
man/ja/shadow.5 [new file with mode: 0644]
man/ja/su.1 [new file with mode: 0644]
man/ja/suauth.5 [new file with mode: 0644]
man/ja/sulogin.8 [new file with mode: 0644]
man/ja/useradd.8 [new file with mode: 0644]
man/ja/userdel.8 [new file with mode: 0644]
man/ja/usermod.8 [new file with mode: 0644]
man/ja/vigr.8 [new file with mode: 0644]
man/ja/vipw.8 [new file with mode: 0644]
man/ko/Makefile.am [new file with mode: 0644]
man/ko/Makefile.in [new file with mode: 0644]
man/ko/chfn.1 [new file with mode: 0644]
man/ko/chsh.1 [new file with mode: 0644]
man/ko/groups.1 [new file with mode: 0644]
man/ko/login.1 [new file with mode: 0644]
man/ko/passwd.5 [new file with mode: 0644]
man/ko/su.1 [new file with mode: 0644]
man/ko/vigr.8 [new file with mode: 0644]
man/ko/vipw.8 [new file with mode: 0644]
man/lastlog.8 [new file with mode: 0644]
man/lastlog.8.xml [new file with mode: 0644]
man/limits.5 [new file with mode: 0644]
man/limits.5.xml [new file with mode: 0644]
man/login.1 [new file with mode: 0644]
man/login.1.xml [new file with mode: 0644]
man/login.access.5 [new file with mode: 0644]
man/login.access.5.xml [new file with mode: 0644]
man/login.defs.5 [new file with mode: 0644]
man/login.defs.5.xml [new file with mode: 0644]
man/login.defs.d/CHFN_AUTH.xml [new file with mode: 0644]
man/login.defs.d/CHFN_RESTRICT.xml [new file with mode: 0644]
man/login.defs.d/CHSH_AUTH.xml [new file with mode: 0644]
man/login.defs.d/CONSOLE.xml [new file with mode: 0644]
man/login.defs.d/CONSOLE_GROUPS.xml [new file with mode: 0644]
man/login.defs.d/CREATE_HOME.xml [new file with mode: 0644]
man/login.defs.d/DEFAULT_HOME.xml [new file with mode: 0644]
man/login.defs.d/ENCRYPT_METHOD.xml [new file with mode: 0644]
man/login.defs.d/ENVIRON_FILE.xml [new file with mode: 0644]
man/login.defs.d/ENV_HZ.xml [new file with mode: 0644]
man/login.defs.d/ENV_PATH.xml [new file with mode: 0644]
man/login.defs.d/ENV_SUPATH.xml [new file with mode: 0644]
man/login.defs.d/ENV_TZ.xml [new file with mode: 0644]
man/login.defs.d/ERASECHAR.xml [new file with mode: 0644]
man/login.defs.d/FAILLOG_ENAB.xml [new file with mode: 0644]
man/login.defs.d/FAIL_DELAY.xml [new file with mode: 0644]
man/login.defs.d/FAKE_SHELL.xml [new file with mode: 0644]
man/login.defs.d/FTMP_FILE.xml [new file with mode: 0644]
man/login.defs.d/GID_MAX.xml [new file with mode: 0644]
man/login.defs.d/HUSHLOGIN_FILE.xml [new file with mode: 0644]
man/login.defs.d/ISSUE_FILE.xml [new file with mode: 0644]
man/login.defs.d/KILLCHAR.xml [new file with mode: 0644]
man/login.defs.d/LASTLOG_ENAB.xml [new file with mode: 0644]
man/login.defs.d/LOGIN_RETRIES.xml [new file with mode: 0644]
man/login.defs.d/LOGIN_STRING.xml [new file with mode: 0644]
man/login.defs.d/LOGIN_TIMEOUT.xml [new file with mode: 0644]
man/login.defs.d/LOG_OK_LOGINS.xml [new file with mode: 0644]
man/login.defs.d/LOG_UNKFAIL_ENAB.xml [new file with mode: 0644]
man/login.defs.d/MAIL_CHECK_ENAB.xml [new file with mode: 0644]
man/login.defs.d/MAIL_DIR.xml [new file with mode: 0644]
man/login.defs.d/MAX_MEMBERS_PER_GROUP.xml [new file with mode: 0644]
man/login.defs.d/MD5_CRYPT_ENAB.xml [new file with mode: 0644]
man/login.defs.d/MOTD_FILE.xml [new file with mode: 0644]
man/login.defs.d/NOLOGINS_FILE.xml [new file with mode: 0644]
man/login.defs.d/OBSCURE_CHECKS_ENAB.xml [new file with mode: 0644]
man/login.defs.d/PASS_ALWAYS_WARN.xml [new file with mode: 0644]
man/login.defs.d/PASS_CHANGE_TRIES.xml [new file with mode: 0644]
man/login.defs.d/PASS_MAX_DAYS.xml [new file with mode: 0644]
man/login.defs.d/PASS_MAX_LEN.xml [new file with mode: 0644]
man/login.defs.d/PASS_MIN_DAYS.xml [new file with mode: 0644]
man/login.defs.d/PASS_WARN_AGE.xml [new file with mode: 0644]
man/login.defs.d/PORTTIME_CHECKS_ENAB.xml [new file with mode: 0644]
man/login.defs.d/QUOTAS_ENAB.xml [new file with mode: 0644]
man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml [new file with mode: 0644]
man/login.defs.d/SULOG_FILE.xml [new file with mode: 0644]
man/login.defs.d/SU_NAME.xml [new file with mode: 0644]
man/login.defs.d/SU_WHEEL_ONLY.xml [new file with mode: 0644]
man/login.defs.d/SYSLOG_SG_ENAB.xml [new file with mode: 0644]
man/login.defs.d/SYSLOG_SU_ENAB.xml [new file with mode: 0644]
man/login.defs.d/SYS_GID_MAX.xml [new file with mode: 0644]
man/login.defs.d/SYS_UID_MAX.xml [new file with mode: 0644]
man/login.defs.d/TTYGROUP.xml [new file with mode: 0644]
man/login.defs.d/TTYTYPE_FILE.xml [new file with mode: 0644]
man/login.defs.d/UID_MAX.xml [new file with mode: 0644]
man/login.defs.d/ULIMIT.xml [new file with mode: 0644]
man/login.defs.d/UMASK.xml [new file with mode: 0644]
man/login.defs.d/USERDEL_CMD.xml [new file with mode: 0644]
man/login.defs.d/USERGROUPS_ENAB.xml [new file with mode: 0644]
man/logoutd.8 [new file with mode: 0644]
man/logoutd.8.xml [new file with mode: 0644]
man/newgrp.1 [new file with mode: 0644]
man/newgrp.1.xml [new file with mode: 0644]
man/newusers.8 [new file with mode: 0644]
man/newusers.8.xml [new file with mode: 0644]
man/nologin.8 [new file with mode: 0644]
man/nologin.8.xml [new file with mode: 0644]
man/passwd.1 [new file with mode: 0644]
man/passwd.1.xml [new file with mode: 0644]
man/passwd.5 [new file with mode: 0644]
man/passwd.5.xml [new file with mode: 0644]
man/pl/Makefile.am [new file with mode: 0644]
man/pl/Makefile.in [new file with mode: 0644]
man/pl/chage.1 [new file with mode: 0644]
man/pl/chfn.1 [new file with mode: 0644]
man/pl/chgpasswd.8 [new file with mode: 0644]
man/pl/chpasswd.8 [new file with mode: 0644]
man/pl/chsh.1 [new file with mode: 0644]
man/pl/expiry.1 [new file with mode: 0644]
man/pl/faillog.5 [new file with mode: 0644]
man/pl/faillog.8 [new file with mode: 0644]
man/pl/getspnam.3 [new file with mode: 0644]
man/pl/gpasswd.1 [new file with mode: 0644]
man/pl/groupadd.8 [new file with mode: 0644]
man/pl/groupdel.8 [new file with mode: 0644]
man/pl/groupmems.8 [new file with mode: 0644]
man/pl/groupmod.8 [new file with mode: 0644]
man/pl/groups.1 [new file with mode: 0644]
man/pl/grpck.8 [new file with mode: 0644]
man/pl/grpconv.8 [new file with mode: 0644]
man/pl/grpunconv.8 [new file with mode: 0644]
man/pl/id.1 [new file with mode: 0644]
man/pl/lastlog.8 [new file with mode: 0644]
man/pl/limits.5 [new file with mode: 0644]
man/pl/login.access.5 [new file with mode: 0644]
man/pl/login.defs.5 [new file with mode: 0644]
man/pl/logoutd.8 [new file with mode: 0644]
man/pl/newgrp.1 [new file with mode: 0644]
man/pl/newusers.8 [new file with mode: 0644]
man/pl/passwd.1 [new file with mode: 0644]
man/pl/passwd.5 [new file with mode: 0644]
man/pl/porttime.5 [new file with mode: 0644]
man/pl/pwck.8 [new file with mode: 0644]
man/pl/pwconv.8 [new file with mode: 0644]
man/pl/pwunconv.8 [new file with mode: 0644]
man/pl/sg.1 [new file with mode: 0644]
man/pl/shadow.3 [new file with mode: 0644]
man/pl/shadow.5 [new file with mode: 0644]
man/pl/suauth.5 [new file with mode: 0644]
man/pl/sulogin.8 [new file with mode: 0644]
man/pl/useradd.8 [new file with mode: 0644]
man/pl/userdel.8 [new file with mode: 0644]
man/pl/usermod.8 [new file with mode: 0644]
man/pl/vigr.8 [new file with mode: 0644]
man/pl/vipw.8 [new file with mode: 0644]
man/po/LINGUAS [new file with mode: 0644]
man/po/Makefile.in.in [new file with mode: 0644]
man/po/Makevars [new file with mode: 0644]
man/po/POTFILES.in [new file with mode: 0644]
man/po/de.po [new file with mode: 0644]
man/po/fr.po [new file with mode: 0644]
man/po/it.po [new file with mode: 0644]
man/po/pl.po [new file with mode: 0644]
man/po/remove-potcdate.sin [new file with mode: 0644]
man/po/ru.po [new file with mode: 0644]
man/po/shadow-man-pages.pot [new file with mode: 0644]
man/po/stamp-po [new file with mode: 0644]
man/po/sv.po [new file with mode: 0644]
man/porttime.5 [new file with mode: 0644]
man/porttime.5.xml [new file with mode: 0644]
man/pt_BR/Makefile.am [new file with mode: 0644]
man/pt_BR/Makefile.in [new file with mode: 0644]
man/pt_BR/gpasswd.1 [new file with mode: 0644]
man/pt_BR/groupadd.8 [new file with mode: 0644]
man/pt_BR/groupdel.8 [new file with mode: 0644]
man/pt_BR/groupmod.8 [new file with mode: 0644]
man/pt_BR/passwd.5 [new file with mode: 0644]
man/pt_BR/shadow.5 [new file with mode: 0644]
man/pwck.8 [new file with mode: 0644]
man/pwck.8.xml [new file with mode: 0644]
man/pwconv.8 [new file with mode: 0644]
man/pwconv.8.xml [new file with mode: 0644]
man/pwunconv.8 [new file with mode: 0644]
man/ru/Makefile.am [new file with mode: 0644]
man/ru/Makefile.in [new file with mode: 0644]
man/ru/chage.1 [new file with mode: 0644]
man/ru/chfn.1 [new file with mode: 0644]
man/ru/chgpasswd.8 [new file with mode: 0644]
man/ru/chpasswd.8 [new file with mode: 0644]
man/ru/chsh.1 [new file with mode: 0644]
man/ru/expiry.1 [new file with mode: 0644]
man/ru/faillog.5 [new file with mode: 0644]
man/ru/faillog.8 [new file with mode: 0644]
man/ru/getspnam.3 [new file with mode: 0644]
man/ru/gpasswd.1 [new file with mode: 0644]
man/ru/groupadd.8 [new file with mode: 0644]
man/ru/groupdel.8 [new file with mode: 0644]
man/ru/groupmems.8 [new file with mode: 0644]
man/ru/groupmod.8 [new file with mode: 0644]
man/ru/groups.1 [new file with mode: 0644]
man/ru/grpck.8 [new file with mode: 0644]
man/ru/grpconv.8 [new file with mode: 0644]
man/ru/grpunconv.8 [new file with mode: 0644]
man/ru/gshadow.5 [new file with mode: 0644]
man/ru/id.1 [new file with mode: 0644]
man/ru/lastlog.8 [new file with mode: 0644]
man/ru/limits.5 [new file with mode: 0644]
man/ru/login.1 [new file with mode: 0644]
man/ru/login.access.5 [new file with mode: 0644]
man/ru/login.defs.5 [new file with mode: 0644]
man/ru/logoutd.8 [new file with mode: 0644]
man/ru/newgrp.1 [new file with mode: 0644]
man/ru/newusers.8 [new file with mode: 0644]
man/ru/nologin.8 [new file with mode: 0644]
man/ru/passwd.1 [new file with mode: 0644]
man/ru/passwd.5 [new file with mode: 0644]
man/ru/porttime.5 [new file with mode: 0644]
man/ru/pwck.8 [new file with mode: 0644]
man/ru/pwconv.8 [new file with mode: 0644]
man/ru/pwunconv.8 [new file with mode: 0644]
man/ru/sg.1 [new file with mode: 0644]
man/ru/shadow.3 [new file with mode: 0644]
man/ru/shadow.5 [new file with mode: 0644]
man/ru/su.1 [new file with mode: 0644]
man/ru/suauth.5 [new file with mode: 0644]
man/ru/sulogin.8 [new file with mode: 0644]
man/ru/useradd.8 [new file with mode: 0644]
man/ru/userdel.8 [new file with mode: 0644]
man/ru/usermod.8 [new file with mode: 0644]
man/ru/vigr.8 [new file with mode: 0644]
man/ru/vipw.8 [new file with mode: 0644]
man/sg.1 [new file with mode: 0644]
man/sg.1.xml [new file with mode: 0644]
man/shadow.3 [new file with mode: 0644]
man/shadow.3.xml [new file with mode: 0644]
man/shadow.5 [new file with mode: 0644]
man/shadow.5.xml [new file with mode: 0644]
man/su.1 [new file with mode: 0644]
man/su.1.xml [new file with mode: 0644]
man/suauth.5 [new file with mode: 0644]
man/suauth.5.xml [new file with mode: 0644]
man/sulogin.8 [new file with mode: 0644]
man/sulogin.8.xml [new file with mode: 0644]
man/sv/Makefile.am [new file with mode: 0644]
man/sv/Makefile.in [new file with mode: 0644]
man/sv/chage.1 [new file with mode: 0644]
man/sv/chfn.1 [new file with mode: 0644]
man/sv/chgpasswd.8 [new file with mode: 0644]
man/sv/chpasswd.8 [new file with mode: 0644]
man/sv/chsh.1 [new file with mode: 0644]
man/sv/expiry.1 [new file with mode: 0644]
man/sv/faillog.5 [new file with mode: 0644]
man/sv/faillog.8 [new file with mode: 0644]
man/sv/getspnam.3 [new file with mode: 0644]
man/sv/gpasswd.1 [new file with mode: 0644]
man/sv/groupadd.8 [new file with mode: 0644]
man/sv/groupdel.8 [new file with mode: 0644]
man/sv/groupmems.8 [new file with mode: 0644]
man/sv/groupmod.8 [new file with mode: 0644]
man/sv/groups.1 [new file with mode: 0644]
man/sv/grpck.8 [new file with mode: 0644]
man/sv/grpconv.8 [new file with mode: 0644]
man/sv/grpunconv.8 [new file with mode: 0644]
man/sv/gshadow.5 [new file with mode: 0644]
man/sv/lastlog.8 [new file with mode: 0644]
man/sv/limits.5 [new file with mode: 0644]
man/sv/login.1 [new file with mode: 0644]
man/sv/login.access.5 [new file with mode: 0644]
man/sv/login.defs.5 [new file with mode: 0644]
man/sv/logoutd.8 [new file with mode: 0644]
man/sv/newgrp.1 [new file with mode: 0644]
man/sv/newusers.8 [new file with mode: 0644]
man/sv/nologin.8 [new file with mode: 0644]
man/sv/passwd.1 [new file with mode: 0644]
man/sv/passwd.5 [new file with mode: 0644]
man/sv/porttime.5 [new file with mode: 0644]
man/sv/pwck.8 [new file with mode: 0644]
man/sv/pwconv.8 [new file with mode: 0644]
man/sv/pwunconv.8 [new file with mode: 0644]
man/sv/sg.1 [new file with mode: 0644]
man/sv/shadow.3 [new file with mode: 0644]
man/sv/shadow.5 [new file with mode: 0644]
man/sv/su.1 [new file with mode: 0644]
man/sv/suauth.5 [new file with mode: 0644]
man/sv/useradd.8 [new file with mode: 0644]
man/sv/userdel.8 [new file with mode: 0644]
man/sv/usermod.8 [new file with mode: 0644]
man/sv/vigr.8 [new file with mode: 0644]
man/sv/vipw.8 [new file with mode: 0644]
man/tr/Makefile.am [new file with mode: 0644]
man/tr/Makefile.in [new file with mode: 0644]
man/tr/chage.1 [new file with mode: 0644]
man/tr/chfn.1 [new file with mode: 0644]
man/tr/groupadd.8 [new file with mode: 0644]
man/tr/groupdel.8 [new file with mode: 0644]
man/tr/groupmod.8 [new file with mode: 0644]
man/tr/login.1 [new file with mode: 0644]
man/tr/passwd.1 [new file with mode: 0644]
man/tr/passwd.5 [new file with mode: 0644]
man/tr/shadow.5 [new file with mode: 0644]
man/tr/su.1 [new file with mode: 0644]
man/tr/useradd.8 [new file with mode: 0644]
man/tr/userdel.8 [new file with mode: 0644]
man/tr/usermod.8 [new file with mode: 0644]
man/useradd.8 [new file with mode: 0644]
man/useradd.8.xml [new file with mode: 0644]
man/userdel.8 [new file with mode: 0644]
man/userdel.8.xml [new file with mode: 0644]
man/usermod.8 [new file with mode: 0644]
man/usermod.8.xml [new file with mode: 0644]
man/vigr.8 [new file with mode: 0644]
man/vipw.8 [new file with mode: 0644]
man/vipw.8.xml [new file with mode: 0644]
man/zh_CN/Makefile.am [new file with mode: 0644]
man/zh_CN/Makefile.in [new file with mode: 0644]
man/zh_CN/chfn.1 [new file with mode: 0644]
man/zh_CN/chpasswd.8 [new file with mode: 0644]
man/zh_CN/chsh.1 [new file with mode: 0644]
man/zh_CN/groupadd.8 [new file with mode: 0644]
man/zh_CN/groupdel.8 [new file with mode: 0644]
man/zh_CN/groupmod.8 [new file with mode: 0644]
man/zh_CN/newgrp.1 [new file with mode: 0644]
man/zh_CN/passwd.5 [new file with mode: 0644]
man/zh_CN/su.1 [new file with mode: 0644]
man/zh_CN/useradd.8 [new file with mode: 0644]
man/zh_CN/userdel.8 [new file with mode: 0644]
man/zh_CN/usermod.8 [new file with mode: 0644]
man/zh_TW/Makefile.am [new file with mode: 0644]
man/zh_TW/Makefile.in [new file with mode: 0644]
man/zh_TW/chfn.1 [new file with mode: 0644]
man/zh_TW/chpasswd.8 [new file with mode: 0644]
man/zh_TW/chsh.1 [new file with mode: 0644]
man/zh_TW/groupadd.8 [new file with mode: 0644]
man/zh_TW/groupdel.8 [new file with mode: 0644]
man/zh_TW/groupmod.8 [new file with mode: 0644]
man/zh_TW/newgrp.1 [new file with mode: 0644]
man/zh_TW/passwd.5 [new file with mode: 0644]
man/zh_TW/su.1 [new file with mode: 0644]
man/zh_TW/useradd.8 [new file with mode: 0644]
man/zh_TW/userdel.8 [new file with mode: 0644]
man/zh_TW/usermod.8 [new file with mode: 0644]
missing [new file with mode: 0755]
packaging/shadow-4.0.17-login.defs [new file with mode: 0644]
packaging/shadow-4.0.18.1-useradd [new file with mode: 0644]
packaging/shadow-4.1.4-redhat.patch [new file with mode: 0644]
packaging/shadow-4.1.4.1-goodname.patch [new file with mode: 0644]
packaging/shadow-4.1.4.1-largeGroup.patch [new file with mode: 0644]
packaging/shadow-4.1.4.1-ldap.patch [new file with mode: 0644]
packaging/shadow-4.1.4.1-sysacc.patch [new file with mode: 0644]
packaging/shadow-4.1.4.2-fixes.patch [new file with mode: 0644]
packaging/shadow-4.1.4.2-leak.patch [new file with mode: 0644]
packaging/shadow-4.1.4.2-redhat.patch [new file with mode: 0644]
packaging/shadow-utils.changes [new file with mode: 0644]
packaging/shadow-utils.spec [new file with mode: 0644]
po/LINGUAS [new file with mode: 0644]
po/Makefile.in.in [new file with mode: 0644]
po/Makevars [new file with mode: 0644]
po/POTFILES.in [new file with mode: 0644]
po/Rules-quot [new file with mode: 0644]
po/boldquot.sed [new file with mode: 0644]
po/bs.gmo [new file with mode: 0644]
po/bs.po [new file with mode: 0644]
po/ca.gmo [new file with mode: 0644]
po/ca.po [new file with mode: 0644]
po/cs.gmo [new file with mode: 0644]
po/cs.po [new file with mode: 0644]
po/da.gmo [new file with mode: 0644]
po/da.po [new file with mode: 0644]
po/de.gmo [new file with mode: 0644]
po/de.po [new file with mode: 0644]
po/dz.gmo [new file with mode: 0644]
po/dz.po [new file with mode: 0644]
po/el.gmo [new file with mode: 0644]
po/el.po [new file with mode: 0644]
po/en@boldquot.header [new file with mode: 0644]
po/en@quot.header [new file with mode: 0644]
po/es.gmo [new file with mode: 0644]
po/es.po [new file with mode: 0644]
po/eu.gmo [new file with mode: 0644]
po/eu.po [new file with mode: 0644]
po/fi.gmo [new file with mode: 0644]
po/fi.po [new file with mode: 0644]
po/fr.gmo [new file with mode: 0644]
po/fr.po [new file with mode: 0644]
po/gl.gmo [new file with mode: 0644]
po/gl.po [new file with mode: 0644]
po/he.gmo [new file with mode: 0644]
po/he.po [new file with mode: 0644]
po/hu.gmo [new file with mode: 0644]
po/hu.po [new file with mode: 0644]
po/id.gmo [new file with mode: 0644]
po/id.po [new file with mode: 0644]
po/insert-header.sin [new file with mode: 0644]
po/it.gmo [new file with mode: 0644]
po/it.po [new file with mode: 0644]
po/ja.gmo [new file with mode: 0644]
po/ja.po [new file with mode: 0644]
po/kk.gmo [new file with mode: 0644]
po/kk.po [new file with mode: 0644]
po/km.gmo [new file with mode: 0644]
po/km.po [new file with mode: 0644]
po/ko.gmo [new file with mode: 0644]
po/ko.po [new file with mode: 0644]
po/nb.gmo [new file with mode: 0644]
po/nb.po [new file with mode: 0644]
po/ne.gmo [new file with mode: 0644]
po/ne.po [new file with mode: 0644]
po/nl.gmo [new file with mode: 0644]
po/nl.po [new file with mode: 0644]
po/nn.gmo [new file with mode: 0644]
po/nn.po [new file with mode: 0644]
po/pl.gmo [new file with mode: 0644]
po/pl.po [new file with mode: 0644]
po/pt.gmo [new file with mode: 0644]
po/pt.po [new file with mode: 0644]
po/pt_BR.gmo [new file with mode: 0644]
po/pt_BR.po [new file with mode: 0644]
po/quot.sed [new file with mode: 0644]
po/remove-potcdate.sin [new file with mode: 0644]
po/ro.gmo [new file with mode: 0644]
po/ro.po [new file with mode: 0644]
po/ru.gmo [new file with mode: 0644]
po/ru.po [new file with mode: 0644]
po/shadow.pot [new file with mode: 0644]
po/sk.gmo [new file with mode: 0644]
po/sk.po [new file with mode: 0644]
po/sq.gmo [new file with mode: 0644]
po/sq.po [new file with mode: 0644]
po/stamp-po [new file with mode: 0644]
po/sv.gmo [new file with mode: 0644]
po/sv.po [new file with mode: 0644]
po/tl.gmo [new file with mode: 0644]
po/tl.po [new file with mode: 0644]
po/tr.gmo [new file with mode: 0644]
po/tr.po [new file with mode: 0644]
po/uk.gmo [new file with mode: 0644]
po/uk.po [new file with mode: 0644]
po/vi.gmo [new file with mode: 0644]
po/vi.po [new file with mode: 0644]
po/zh_CN.gmo [new file with mode: 0644]
po/zh_CN.po [new file with mode: 0644]
po/zh_TW.gmo [new file with mode: 0644]
po/zh_TW.po [new file with mode: 0644]
shadow.spec.in [new file with mode: 0644]
src/.indent.pro [new file with mode: 0644]
src/Makefile.am [new file with mode: 0644]
src/Makefile.in [new file with mode: 0644]
src/chage.c [new file with mode: 0644]
src/chfn.c [new file with mode: 0644]
src/chgpasswd.c [new file with mode: 0644]
src/chpasswd.c [new file with mode: 0644]
src/chsh.c [new file with mode: 0644]
src/expiry.c [new file with mode: 0644]
src/faillog.c [new file with mode: 0644]
src/gpasswd.c [new file with mode: 0644]
src/groupadd.c [new file with mode: 0644]
src/groupdel.c [new file with mode: 0644]
src/groupmems.c [new file with mode: 0644]
src/groupmod.c [new file with mode: 0644]
src/groups.c [new file with mode: 0644]
src/grpck.c [new file with mode: 0644]
src/grpconv.c [new file with mode: 0644]
src/grpunconv.c [new file with mode: 0644]
src/id.c [new file with mode: 0644]
src/lastlog.c [new file with mode: 0644]
src/login.c [new file with mode: 0644]
src/login_nopam.c [new file with mode: 0644]
src/logoutd.c [new file with mode: 0644]
src/newgrp.c [new file with mode: 0644]
src/newusers.c [new file with mode: 0644]
src/nologin.c [new file with mode: 0644]
src/passwd.c [new file with mode: 0644]
src/pwck.c [new file with mode: 0644]
src/pwconv.c [new file with mode: 0644]
src/pwunconv.c [new file with mode: 0644]
src/su.c [new file with mode: 0644]
src/suauth.c [new file with mode: 0644]
src/sulogin.c [new file with mode: 0644]
src/useradd.c [new file with mode: 0644]
src/userdel.c [new file with mode: 0644]
src/usermod.c [new file with mode: 0644]
src/vipw.c [new file with mode: 0644]
ylwrap [new file with mode: 0755]

diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644 (file)
index 0000000..ec20977
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,1101 @@
+1 Notes on the Free Translation Project
+***************************************
+
+Free software is going international!  The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages.  A few packages already provide translations for their
+messages.
+
+   If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site.  But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+   Installers will find here some useful hints.  These notes also
+explain how users should proceed for getting the programs to use the
+available translations.  They tell how people wanting to contribute and
+work on translations can contact the appropriate team.
+
+   When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used.  The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+1.1 Quick configuration advice
+==============================
+
+If you want to exploit the full power of internationalization, you
+should configure it using
+
+     ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed.  So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation.  Future versions of GNU `gettext' will
+very likely convey even more functionality.  So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+   So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+1.2 INSTALL Matters
+===================
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language.  Most such
+packages use GNU `gettext'.  Other packages have their own ways to
+internationalization, predating GNU `gettext'.
+
+   By default, this package will be installed to allow translation of
+messages.  It will automatically detect whether the system already
+provides the GNU `gettext' functions.  If not, the included GNU
+`gettext' library will be used.  This library is wholly contained
+within this package, usually in the `intl/' subdirectory, so prior
+installation of the GNU `gettext' package is _not_ required.
+Installers may use special options at configuration time for changing
+the default behaviour.  The commands:
+
+     ./configure --with-included-gettext
+     ./configure --disable-nls
+
+will, respectively, bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+   When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this.  This might not be desirable.  You should use
+the more recent version of the GNU `gettext' library.  I.e. if the file
+`intl/VERSION' shows that the library which comes with this package is
+more recent, you should use
+
+     ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+   The configuration process will not test for the `catgets' function
+and therefore it will not be used.  The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+   Internationalized packages usually have many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language.  Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package.  However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+1.3 Using This Package
+======================
+
+As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination.  Here `LL' is an ISO 639 two-letter language code,
+and `CC' is an ISO 3166 two-letter country code.  For example, let's
+suppose that you speak German and live in Germany.  At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+   You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries.  For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil.  The
+country code serves to distinguish the dialects.
+
+   The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc.  On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'.  You can get the list of
+locales supported by your system for your language by running the
+command `locale -a | grep '^LL''.
+
+   Not all programs have translations for all languages.  By default, an
+English message is shown in place of a nonexistent translation.  If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'.  GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries.  For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+   Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003).  During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
+   In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect.  For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+1.4 Translating Teams
+=====================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list.  The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
+area.
+
+   If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended.  For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+     subscribe
+
+   Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around.  If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation@iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+   The English team is special.  It works at improving and uniformizing
+the terminology in use.  Proven linguistic skills are praised more than
+programming skills, here.
+
+1.5 Available Packages
+======================
+
+Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of October
+2006.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+     Ready PO files       af am ar az be bg bs ca cs cy da de el en en_GB eo
+                        +----------------------------------------------------+
+     GNUnet             |                                  []                |
+     a2ps               |             []                [] [] []     []      |
+     aegis              |                                  ()                |
+     ant-phone          |                                  ()                |
+     anubis             |                                  []                |
+     ap-utils           |                                                    |
+     aspell             |                      [] []    [] []        []      |
+     bash               |                      []          []             [] |
+     batchelor          |                                  []                |
+     bfd                |                                                    |
+     bibshelf           |                                  []                |
+     binutils           |                               []                   |
+     bison              |                               [] []                |
+     bison-runtime      |                                                    |
+     bluez-pin          | []                      []       [] []          [] |
+     cflow              |                               []                   |
+     clisp              |                                  []    []          |
+     console-tools      |                         []       []                |
+     coreutils          |                []    []          []                |
+     cpio               |                                                    |
+     cpplib             |                      []       [] []                |
+     cryptonit          |                                  []                |
+     darkstat           |                []             () []                |
+     dialog             |                      [] [] [] [] [] []             |
+     diffutils          |                      [] []    [] [] []          [] |
+     doodle             |                                  []                |
+     e2fsprogs          |                         []       []                |
+     enscript           |                      []       [] []        []      |
+     error              |                      []       [] []        []      |
+     fetchmail          |                      []       [] () []             |
+     fileutils          |                               [] []                |
+     findutils          |                []    []       []                   |
+     flex               |                      []       [] []                |
+     fslint             |                                  []                |
+     gas                |                                                    |
+     gawk               |                      []       [] []                |
+     gbiff              |                                  []                |
+     gcal               |                      []                            |
+     gcc                |                                  []                |
+     gettext-examples   | []                   []          [] []          [] |
+     gettext-runtime    |             []       []       [] []             [] |
+     gettext-tools      |                      []          []                |
+     gimp-print         |                         []    [] []        []      |
+     gip                |                []                                  |
+     gliv               |                                  []                |
+     glunarclock        |                []                                  |
+     gmult              | []                               []                |
+     gnubiff            |                                  ()                |
+     gnucash            |                                  () ()     []      |
+     gnucash-glossary   |                               [] ()                |
+     gnuedu             |                                                    |
+     gnulib             | []          [] []    []       [] []                |
+     gnunet-gtk         |                                                    |
+     gnutls             |                                                    |
+     gpe-aerial         |                         []       []                |
+     gpe-beam           |                         []       []                |
+     gpe-calendar       |                                                    |
+     gpe-clock          |                         []       []                |
+     gpe-conf           |                         []       []                |
+     gpe-contacts       |                                                    |
+     gpe-edit           |                         []                         |
+     gpe-filemanager    |                                                    |
+     gpe-go             |                         []                         |
+     gpe-login          |                         []       []                |
+     gpe-ownerinfo      |                         []       []                |
+     gpe-package        |                                                    |
+     gpe-sketchbook     |                         []       []                |
+     gpe-su             |                         []       []                |
+     gpe-taskmanager    |                         []       []                |
+     gpe-timesheet      |                         []                         |
+     gpe-today          |                         []       []                |
+     gpe-todo           |                                                    |
+     gphoto2            |                         []    [] []        []      |
+     gprof              |                               [] []                |
+     gpsdrive           |                                  ()    ()          |
+     gramadoir          | []                               []                |
+     grep               | []          [] []    []          [] []             |
+     gretl              |                                                    |
+     gsasl              |                                                    |
+     gss                |                                                    |
+     gst-plugins        | []                   [] []    []                   |
+     gst-plugins-base   |                []    []       []                   |
+     gst-plugins-good   | []       []    []    [] []    []           []      |
+     gstreamer          | []             []    [] []    [] []        []      |
+     gtick              |                                  ()                |
+     gtkam              |                         []    [] []                |
+     gtkorphan          |                []                []                |
+     gtkspell           |             []                   [] []          [] |
+     gutenprint         |                               []                   |
+     hello              |                []    []       [] []             [] |
+     id-utils           |                               [] []                |
+     impost             |                                                    |
+     indent             |                      []          []             [] |
+     iso_3166           |                                  []             [] |
+     iso_3166_2         |                                                    |
+     iso_4217           |                                  []                |
+     iso_639            |                                  []             [] |
+     jpilot             |                         []                         |
+     jtag               |                                                    |
+     jwhois             |                                                    |
+     kbd                |                         []    [] [] []             |
+     keytouch           |                                                    |
+     keytouch-editor    |                                                    |
+     keytouch-keyboa... |                                                    |
+     latrine            |                                  ()                |
+     ld                 |                               []                   |
+     leafpad            |                []    [] []       [] []             |
+     libc               |                      [] []    [] [] []             |
+     libexif            |                                  []                |
+     libextractor       |                                  []                |
+     libgpewidget       |                         []    [] []                |
+     libgpg-error       |                                  []                |
+     libgphoto2         |                               [] []                |
+     libgphoto2_port    |                               [] []                |
+     libgsasl           |                                                    |
+     libiconv           |                                  []             [] |
+     libidn             |                               []                [] |
+     lifelines          |                               [] ()                |
+     lilypond           |                                  []                |
+     lingoteach         |                                                    |
+     lynx               |                      [] []    [] []                |
+     m4                 |                         []    [] [] []             |
+     mailutils          |                      []                            |
+     make               |                               [] []                |
+     man-db             |                      [] ()    [] []                |
+     minicom            |                         []    [] []                |
+     mysecretdiary      |                               [] []                |
+     nano               |                []    []          []                |
+     nano_1_0           |                      [] ()    [] []                |
+     opcodes            |                                  []                |
+     parted             |                                                    |
+     pilot-qof          |                                            []      |
+     psmisc             |                []                                  |
+     pwdutils           |                                                    |
+     python             |                                                    |
+     qof                |                                                    |
+     radius             |                      []                            |
+     recode             |             []       []       [] [] []          [] |
+     rpm                |                         []    []                   |
+     screem             |                                                    |
+     scrollkeeper       |          [] []       [] [] [] [] []        []      |
+     sed                |                      []          []             [] |
+     sh-utils           |                               [] []                |
+     shared-mime-info   |                []       []                 []   [] |
+     sharutils          |                []    [] []    [] [] []             |
+     shishi             |                                                    |
+     silky              |                                                    |
+     skencil            |                               [] ()                |
+     sketch             |                               [] ()                |
+     solfege            |                                                    |
+     soundtracker       |                               [] []                |
+     sp                 |                                  []                |
+     stardict           |                         []                         |
+     system-tools-ba... |       []       [] [] [] []    [] [] []     []      |
+     tar                |                []                                  |
+     texinfo            |                               [] []             [] |
+     textutils          |                      []       [] []                |
+     tin                |                                  ()        ()      |
+     tp-robot           |                                  []                |
+     tuxpaint           | []             []             [] []        []      |
+     unicode-han-tra... |                                                    |
+     unicode-transla... |                                                    |
+     util-linux         |                      [] []    [] []                |
+     vorbis-tools       |             []          []    []           []      |
+     wastesedge         |                                  ()                |
+     wdiff              |                      []       [] []        []      |
+     wget               |                      []          []                |
+     xchat              |             [] []    []          [] []     []      |
+     xkeyboard-config   |                                                    |
+     xpad               |                []             []                   |
+                        +----------------------------------------------------+
+                          af am ar az be bg bs ca cs cy da de el en en_GB eo
+                          10  0  1  2  9 22  1 42 41  2 60 95 16  1  17   16
+
+                          es et eu fa fi fr  ga gl gu he hi hr hu id is it
+                        +--------------------------------------------------+
+     GNUnet             |                                                  |
+     a2ps               |    []       [] []                             () |
+     aegis              |                                                  |
+     ant-phone          |                []                                |
+     anubis             |                []                                |
+     ap-utils           |             [] []                                |
+     aspell             |                []  []                         [] |
+     bash               | []             []                    []          |
+     batchelor          |                []  []                            |
+     bfd                | []                                               |
+     bibshelf           | []                 []                         [] |
+     binutils           | []          [] []                                |
+     bison              | [] []          []  []                   []    [] |
+     bison-runtime      |    []          []  []                   []    [] |
+     bluez-pin          |             [] []  []                [] []       |
+     cflow              |                    []                            |
+     clisp              | []             []                                |
+     console-tools      |                                                  |
+     coreutils          | [] []       [] []  []                []          |
+     cpio               | []             []  []                            |
+     cpplib             | []             []                                |
+     cryptonit          |                []                                |
+     darkstat           | []             ()  []                [] []       |
+     dialog             | [] [] []    [] []  []                []       [] |
+     diffutils          | []          [] []  [] []    []       [] []    [] |
+     doodle             |                    []                         [] |
+     e2fsprogs          | []             []                             [] |
+     enscript           |                []  []             []             |
+     error              | []          [] []  []                []          |
+     fetchmail          | []                                               |
+     fileutils          | [] []          []  []                []       [] |
+     findutils          |    []          []  []                []          |
+     flex               | []             []  []                            |
+     fslint             |                []                                |
+     gas                | []             []                                |
+     gawk               | []             []  []       []                   |
+     gbiff              |                []                                |
+     gcal               | []             []                                |
+     gcc                | []                                               |
+     gettext-examples   | []             []  []                [] []    [] |
+     gettext-runtime    | []          [] []  []                   []    [] |
+     gettext-tools      | []             []                             [] |
+     gimp-print         | []             []                                |
+     gip                | []    []       []                                |
+     gliv               |                ()                                |
+     glunarclock        |             []     []                []          |
+     gmult              |       []       []                             [] |
+     gnubiff            |                ()                             () |
+     gnucash            | ()             ()                    ()          |
+     gnucash-glossary   | []                                            [] |
+     gnuedu             | []                                               |
+     gnulib             | [] [] []    [] []  [] []             []          |
+     gnunet-gtk         |                                                  |
+     gnutls             |                                                  |
+     gpe-aerial         | []             []                                |
+     gpe-beam           | []             []                                |
+     gpe-calendar       |                                                  |
+     gpe-clock          | []          [] []                    []          |
+     gpe-conf           |                []                                |
+     gpe-contacts       | []             []                                |
+     gpe-edit           | []             []                    [] []       |
+     gpe-filemanager    | []                                               |
+     gpe-go             | []             []                    []          |
+     gpe-login          | []             []                    []          |
+     gpe-ownerinfo      | []          [] []                    [] []       |
+     gpe-package        | []                                               |
+     gpe-sketchbook     | []             []                                |
+     gpe-su             | []          [] []                    []          |
+     gpe-taskmanager    | []          [] []                                |
+     gpe-timesheet      | []             []  []                   []       |
+     gpe-today          | []          [] []  []                            |
+     gpe-todo           | []                                               |
+     gphoto2            | []          [] []                    []       [] |
+     gprof              | []             []  []                   []       |
+     gpsdrive           | ()             ()                    []       () |
+     gramadoir          |                []  []                            |
+     grep               | [] [] []    [] []  [] []    []    [] [] []    [] |
+     gretl              | []             []                             [] |
+     gsasl              |                    []                   []       |
+     gss                |                []                                |
+     gst-plugins        |                []                    []       [] |
+     gst-plugins-base   |                                      []       [] |
+     gst-plugins-good   |       []                             []       [] |
+     gstreamer          |             []                       []       [] |
+     gtick              |                    []                            |
+     gtkam              | []             []                    []       [] |
+     gtkorphan          |                []                             [] |
+     gtkspell           | []    []    [] []  []                         [] |
+     gutenprint         |                                      []          |
+     hello              | [] [] [] [] [] []  [] []    []    [] [] []    [] |
+     id-utils           |                []  []                [] []    [] |
+     impost             |                []  []                            |
+     indent             | [] [] []    [] []  [] []             [] []    [] |
+     iso_3166           |             [] []                    []          |
+     iso_3166_2         |                []                                |
+     iso_4217           |    []       []        []             []          |
+     iso_639            |          [] [] []  []                []          |
+     jpilot             | []             []                                |
+     jtag               |                []                                |
+     jwhois             | []             []                    [] []    [] |
+     kbd                | []             []                                |
+     keytouch           |                    []                            |
+     keytouch-editor    |                    []                            |
+     keytouch-keyboa... |                    []                            |
+     latrine            |                []  []                         [] |
+     ld                 | []             []                                |
+     leafpad            | []             []  []       []       []       [] |
+     libc               | []          [] []     []             []          |
+     libexif            | []                                               |
+     libextractor       |                    []                            |
+     libgpewidget       | []             []  []                [] []       |
+     libgpg-error       |                                                  |
+     libgphoto2         | []             []                             [] |
+     libgphoto2_port    |                []                             [] |
+     libgsasl           |                []  []                            |
+     libiconv           |    []              []                            |
+     libidn             |                []                             [] |
+     lifelines          |                ()                                |
+     lilypond           |                []                                |
+     lingoteach         |                []                       []    [] |
+     lynx               |    []                                []       [] |
+     m4                 |                []  [] []                []       |
+     mailutils          | []             []                                |
+     make               | []          [] []  [] []    []    []    []       |
+     man-db             | ()                                               |
+     minicom            | []          [] []                    []          |
+     mysecretdiary      | []             []                       []       |
+     nano               | []    []       []  []                []       [] |
+     nano_1_0           | []             []     []                []    [] |
+     opcodes            | []          [] []  []                            |
+     parted             | []             []                       []    [] |
+     pilot-qof          |                                                  |
+     psmisc             |       []                             []       [] |
+     pwdutils           |                                                  |
+     python             |                                                  |
+     qof                |                                         []       |
+     radius             | []             []                                |
+     recode             | []             []  [] []    []       [] []    [] |
+     rpm                |                []                       []       |
+     screem             |                                                  |
+     scrollkeeper       | []          []                       []          |
+     sed                | [] []          []  []                []          |
+     sh-utils           | [] []       [] []  []                []       [] |
+     shared-mime-info   | []    []    [] []                    []       [] |
+     sharutils          | [] []       [] []  [] []             []       [] |
+     shishi             |                                                  |
+     silky              |                []                                |
+     skencil            | []             []                                |
+     sketch             | []             []                                |
+     solfege            |                                               [] |
+     soundtracker       | []             []                             [] |
+     sp                 |                []                                |
+     stardict           |                                      []          |
+     system-tools-ba... | []    []    [] []                 [] [] []    [] |
+     tar                | [] []       [] []  []                []       [] |
+     texinfo            |                []           []                   |
+     textutils          | []             []  [] []             []          |
+     tin                |    []          ()                                |
+     tp-robot           |             [] []  []                []          |
+     tuxpaint           |                    []                []          |
+     unicode-han-tra... |                                                  |
+     unicode-transla... |                []  []                            |
+     util-linux         | [] []       [] []                    [] []    [] |
+     vorbis-tools       | []             []                                |
+     wastesedge         |                ()                                |
+     wdiff              | [] []          []  [] []             [] []    [] |
+     wget               |    []       [] []  []             [] [] []    [] |
+     xchat              | []    []    [] []        []    []    []       [] |
+     xkeyboard-config   |             [] []                    []       [] |
+     xpad               | []                 []                []          |
+                        +--------------------------------------------------+
+                          es et eu fa fi fr  ga gl gu he hi hr hu id is it
+                          88 22 14  2 40 115 61 14  1  8  1  6 59 31  0 52
+
+                          ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no
+                        +-------------------------------------------------+
+     GNUnet             |                                                 |
+     a2ps               |    ()                      []          []    () |
+     aegis              |                                        ()       |
+     ant-phone          |                                        []       |
+     anubis             |                            []    []    []       |
+     ap-utils           |                            []                   |
+     aspell             |                         []             []       |
+     bash               |                                        []       |
+     batchelor          |                            []          []       |
+     bfd                |                                                 |
+     bibshelf           |                            []                   |
+     binutils           |                                                 |
+     bison              |                            []    []    []       |
+     bison-runtime      |                            []    []    []       |
+     bluez-pin          |       []                   []          []       |
+     cflow              |                                                 |
+     clisp              |                                        []       |
+     console-tools      |                                                 |
+     coreutils          |                                        []       |
+     cpio               |                                                 |
+     cpplib             |                                        []       |
+     cryptonit          |                                        []       |
+     darkstat           |                            []          []       |
+     dialog             |                            []          []       |
+     diffutils          | []                         []          []       |
+     doodle             |                                                 |
+     e2fsprogs          |                                        []       |
+     enscript           |                                        []       |
+     error              |                                        []       |
+     fetchmail          | []                                     []       |
+     fileutils          | []          []                                  |
+     findutils          |                                        []       |
+     flex               |    []                                  []       |
+     fslint             |                            []          []       |
+     gas                |                                                 |
+     gawk               | []                                     []       |
+     gbiff              |                                        []       |
+     gcal               |                                                 |
+     gcc                |                                                 |
+     gettext-examples   | []                                     []       |
+     gettext-runtime    | [] []                                  []       |
+     gettext-tools      | [] []                                           |
+     gimp-print         | []                                     []       |
+     gip                |                            []          []       |
+     gliv               |                                        []       |
+     glunarclock        |                            []          []       |
+     gmult              | []                         []                   |
+     gnubiff            |                                                 |
+     gnucash            | ()                               ()             |
+     gnucash-glossary   |                                        []       |
+     gnuedu             |                                                 |
+     gnulib             | [] []                      []          []       |
+     gnunet-gtk         |                                                 |
+     gnutls             |                                                 |
+     gpe-aerial         |                                        []       |
+     gpe-beam           |                                        []       |
+     gpe-calendar       | []                                              |
+     gpe-clock          | [] []                                  []       |
+     gpe-conf           |    []                                  []       |
+     gpe-contacts       |    []                                           |
+     gpe-edit           | [] []                                  []       |
+     gpe-filemanager    | [] []                                           |
+     gpe-go             | [] []                                  []       |
+     gpe-login          | [] []                                  []       |
+     gpe-ownerinfo      | []                                     []       |
+     gpe-package        | [] []                                           |
+     gpe-sketchbook     |    []                                  []       |
+     gpe-su             | [] []                                  []       |
+     gpe-taskmanager    | [] [] []                               []       |
+     gpe-timesheet      |                                        []       |
+     gpe-today          | []                                     []       |
+     gpe-todo           | []                                              |
+     gphoto2            | []                                     []       |
+     gprof              |                                                 |
+     gpsdrive           | ()                                     ()    () |
+     gramadoir          |                                        ()       |
+     grep               | []       []                      []    []       |
+     gretl              |                                                 |
+     gsasl              |                                        []       |
+     gss                |                                                 |
+     gst-plugins        |                                        []       |
+     gst-plugins-base   |                                                 |
+     gst-plugins-good   |                                        []       |
+     gstreamer          |                                        []       |
+     gtick              |                                                 |
+     gtkam              | []                                              |
+     gtkorphan          |                                        []       |
+     gtkspell           |                         []             []       |
+     gutenprint         |                                                 |
+     hello              | [] []                      []    []    [] []    |
+     id-utils           |                                        []       |
+     impost             |                                                 |
+     indent             | []                                     []       |
+     iso_3166           |                                        []       |
+     iso_3166_2         |                                        []       |
+     iso_4217           | []                      []             []       |
+     iso_639            | []                                     []       |
+     jpilot             | ()                                     ()    () |
+     jtag               |                                                 |
+     jwhois             |                                        []       |
+     kbd                |                                        []       |
+     keytouch           |                                        []       |
+     keytouch-editor    |                                                 |
+     keytouch-keyboa... |                                                 |
+     latrine            |                                        []       |
+     ld                 |                                                 |
+     leafpad            | []             []                               |
+     libc               | [] []                            []    []    [] |
+     libexif            |                                                 |
+     libextractor       |                                                 |
+     libgpewidget       |                                        []       |
+     libgpg-error       |                                                 |
+     libgphoto2         | []                                              |
+     libgphoto2_port    | []                                              |
+     libgsasl           |                                        []       |
+     libiconv           |                                                 |
+     libidn             | []                                     []       |
+     lifelines          |                                        []       |
+     lilypond           |                                                 |
+     lingoteach         |                                        []       |
+     lynx               | []                                     []       |
+     m4                 | []                                     []       |
+     mailutils          |                                                 |
+     make               | [] []                                  []       |
+     man-db             | ()                                              |
+     minicom            | []                                              |
+     mysecretdiary      |                                        []       |
+     nano               |                            []    []    []       |
+     nano_1_0           |                            []    []       []    |
+     opcodes            |                                        []       |
+     parted             | []                                     []       |
+     pilot-qof          |                                                 |
+     psmisc             | []                               []    []       |
+     pwdutils           |                                                 |
+     python             |                                                 |
+     qof                |                                                 |
+     radius             |                                                 |
+     recode             |                                        []       |
+     rpm                | [] []                                           |
+     screem             | []                                              |
+     scrollkeeper       |                                  [] [] [] []    |
+     sed                | []                                     []       |
+     sh-utils           | []                               []             |
+     shared-mime-info   |    []          []                []    [] []    |
+     sharutils          | []                                     []       |
+     shishi             |                                                 |
+     silky              |                                        []       |
+     skencil            |                                                 |
+     sketch             |                                                 |
+     solfege            |                                                 |
+     soundtracker       |                                                 |
+     sp                 | ()                                              |
+     stardict           |                      []                []       |
+     system-tools-ba... | [] []          []                      []       |
+     tar                | []       []                            []       |
+     texinfo            | []                               []    []       |
+     textutils          | [] []                            []             |
+     tin                |                                                 |
+     tp-robot           |                                        []       |
+     tuxpaint           |                                           []    |
+     unicode-han-tra... |                                                 |
+     unicode-transla... |                                                 |
+     util-linux         | []                                     []       |
+     vorbis-tools       |                                        []       |
+     wastesedge         |                                        []       |
+     wdiff              |                            []    []             |
+     wget               | []                                     []       |
+     xchat              | [] []                []                []       |
+     xkeyboard-config   |                                        []       |
+     xpad               |    []                      []          []       |
+                        +-------------------------------------------------+
+                          ja ko ku ky lg lt lv mk mn ms mt nb ne nl nn no
+                          52 24  2  2  1  3  0  2  3 21  0 15  1 97  5  1
+
+                          nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv  ta
+                        +------------------------------------------------------+
+     GNUnet             |                                                      |
+     a2ps               |           ()     []      [] []       []    [] []     |
+     aegis              |                          () ()                       |
+     ant-phone          |                          []                   []     |
+     anubis             |           []             [] []                       |
+     ap-utils           |           ()                                         |
+     aspell             |                          [] []                       |
+     bash               |                  []      [] []                       |
+     batchelor          |                          []                   []     |
+     bfd                |                                                      |
+     bibshelf           |                                               []     |
+     binutils           |                             []                []     |
+     bison              |           []     []      [] []                []     |
+     bison-runtime      |           []             []          []       []     |
+     bluez-pin          |           []     []   [] [] []    [] []    [] []     |
+     cflow              |           []                                         |
+     clisp              |                             []                       |
+     console-tools      |                             []                       |
+     coreutils          |           []                []       []       []     |
+     cpio               |           []                []                []     |
+     cpplib             |                                               []     |
+     cryptonit          |                  []                           []     |
+     darkstat           |           []     []      []       []       [] []     |
+     dialog             |           [] []  []   [] [] [] []          [] []     |
+     diffutils          |           []     []      [] []             [] []     |
+     doodle             |                                         []    []     |
+     e2fsprogs          |           []                                  []     |
+     enscript           |                  []      [] []       []       []     |
+     error              |                  []      []       []          []     |
+     fetchmail          |           []                []          []           |
+     fileutils          |           []             [] []       []       []     |
+     findutils          |           [] []          []       [] []       []     |
+     flex               |           []     []      [] []                []     |
+     fslint             |                  []      []                [] []     |
+     gas                |                                                      |
+     gawk               |           []     []      []                   []     |
+     gbiff              |                          []                          |
+     gcal               |                                               []     |
+     gcc                |                                               []     |
+     gettext-examples   |           [] []          [] []    [] []    [] []     |
+     gettext-runtime    |           [] []          [] []    [] []    [] []     |
+     gettext-tools      |           []             [] []    [] []    [] []     |
+     gimp-print         |                                   []          []     |
+     gip                |                       []          []       [] []     |
+     gliv               |                  []      []       []          []     |
+     glunarclock        |                  []      [] []    []       [] []     |
+     gmult              |                       [] []                [] []     |
+     gnubiff            |                          ()                          |
+     gnucash            |           ()                                  []     |
+     gnucash-glossary   |              []                   []          []     |
+     gnuedu             |                                                      |
+     gnulib             |           []             [] []       []       []     |
+     gnunet-gtk         |                                               []     |
+     gnutls             |           []                                  []     |
+     gpe-aerial         |              []  []      [] []       []    [] []     |
+     gpe-beam           |              []  []      [] []       []    [] []     |
+     gpe-calendar       |                             []                       |
+     gpe-clock          |              []  []      [] []    [] []    [] []     |
+     gpe-conf           |              []  []      [] []    [] []       []     |
+     gpe-contacts       |                          [] []       []    [] []     |
+     gpe-edit           |              []  []      [] []    [] []    [] []     |
+     gpe-filemanager    |                                      []       []     |
+     gpe-go             |                  []      [] []       []    [] []     |
+     gpe-login          |              []  []      [] []    [] []    [] []     |
+     gpe-ownerinfo      |              []  []      [] []    [] []    [] []     |
+     gpe-package        |                                      []       []     |
+     gpe-sketchbook     |              []  []      [] []    [] []    [] []     |
+     gpe-su             |              []  []      [] []    [] []    [] []     |
+     gpe-taskmanager    |              []  []      [] []    [] []    [] []     |
+     gpe-timesheet      |              []  []      [] []    [] []    [] []     |
+     gpe-today          |              []  []      [] []    [] []    [] []     |
+     gpe-todo           |                             []       []    [] []     |
+     gphoto2            |           []             []       []       [] []     |
+     gprof              |                  []      []                   []     |
+     gpsdrive           |        []                []                   []     |
+     gramadoir          |                                   []          []     |
+     grep               |           [] []  []      [] []       []    [] []     |
+     gretl              |           []                                         |
+     gsasl              |           []                               [] []     |
+     gss                |           []             []                   []     |
+     gst-plugins        |     []                                  [] [] []     |
+     gst-plugins-base   |                                               []     |
+     gst-plugins-good   |     []                                  [] [] []     |
+     gstreamer          |                                         [] [] []     |
+     gtick              |                             []                       |
+     gtkam              |           []     []         []                []     |
+     gtkorphan          |                                               []     |
+     gtkspell           |                  []   [] [] []    [] []    [] []     |
+     gutenprint         |                                               []     |
+     hello              |           []     []      [] []    [] []    [] []     |
+     id-utils           |                  []      [] []                []     |
+     impost             |                                               []     |
+     indent             |                  []      [] []    []       [] []     |
+     iso_3166           |              []                []    [] [] [] []     |
+     iso_3166_2         |                                                      |
+     iso_4217           |                                []    []    [] []     |
+     iso_639            |                                []    []    [] []     |
+     jpilot             |                                                      |
+     jtag               |                                   []                 |
+     jwhois             |           []     []      []                   []     |
+     kbd                |           []             []                   []     |
+     keytouch           |                                               []     |
+     keytouch-editor    |                                               []     |
+     keytouch-keyboa... |                                               []     |
+     latrine            |                          []                   []     |
+     ld                 |                                               []     |
+     leafpad            |           [] []             []    []          []  [] |
+     libc               |           []     []         []    []          []     |
+     libexif            |           []                                         |
+     libextractor       |                          []                   []     |
+     libgpewidget       |              []  []      []       [] []    [] []     |
+     libgpg-error       |           []             []                          |
+     libgphoto2         |           []                                         |
+     libgphoto2_port    |           []                []                []     |
+     libgsasl           |           []             []                [] []     |
+     libiconv           |                                      []    []        |
+     libidn             |           []                               [] ()     |
+     lifelines          |           []                                  []     |
+     lilypond           |                                                      |
+     lingoteach         |                  []                                  |
+     lynx               |                  []         []                []     |
+     m4                 |           []     []      [] []                []     |
+     mailutils          |           []             [] []                []     |
+     make               |           []     []         []                []     |
+     man-db             |                          []                   []     |
+     minicom            |           []     []      [] []                []     |
+     mysecretdiary      |                  []      [] []                []     |
+     nano               |                  []      []                   []     |
+     nano_1_0           |           []             [] []                []     |
+     opcodes            |                          []                   []     |
+     parted             |           []                                         |
+     pilot-qof          |                                               []     |
+     psmisc             |           []                                  []     |
+     pwdutils           |           []                                  []     |
+     python             |                                                      |
+     qof                |                  []                           []     |
+     radius             |           []                []                       |
+     recode             |           [] []  []      [] []       []       []     |
+     rpm                |           [] []             []                []     |
+     screem             |                                                      |
+     scrollkeeper       |           []             [] []    []    [] [] []     |
+     sed                |           [] []  []      [] []    [] []    [] []     |
+     sh-utils           |                             []       []    []        |
+     shared-mime-info   |              []  []                     [] [] []     |
+     sharutils          |           []                []             [] []     |
+     shishi             |           []                                         |
+     silky              |                                   []                 |
+     skencil            |              []  []                           []     |
+     sketch             |              []  []                           []     |
+     solfege            |                                               []     |
+     soundtracker       |                                   []          []     |
+     sp                 |                                                      |
+     stardict           |                             []    []          []     |
+     system-tools-ba... |        [] [] []  []      []             [] [] []  [] |
+     tar                |           []             [] []       []       []     |
+     texinfo            |           []             [] []                []     |
+     textutils          |                             []       []       []     |
+     tin                |                             ()                       |
+     tp-robot           |                             []                       |
+     tuxpaint           |              []                      [] [] [] []     |
+     unicode-han-tra... |                                                      |
+     unicode-transla... |                                                      |
+     util-linux         |                  []         []       []       []     |
+     vorbis-tools       |                          [] []                       |
+     wastesedge         |                                                      |
+     wdiff              |           []     []      [] []    []          []     |
+     wget               |              []             []    []          []     |
+     xchat              |        []                   []    [] [] [] [] []     |
+     xkeyboard-config   |                                      []       []     |
+     xpad               |                                   [] []       []     |
+                        +------------------------------------------------------+
+                          nso or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv  ta
+                           0   2  3 58 30  54    5 73 72  4 40 46 11 50 128  2
+
+                          tg th tk tr uk ven vi  wa xh zh_CN zh_HK zh_TW zu
+                        +---------------------------------------------------+
+     GNUnet             |                    []                             |  2
+     a2ps               |          [] []     []                             | 19
+     aegis              |                                                   |  0
+     ant-phone          |          []        []                             |  6
+     anubis             |          [] []     []                             | 11
+     ap-utils           |             ()     []                             |  4
+     aspell             |             []     []  []                         | 15
+     bash               |                    []                             | 11
+     batchelor          |          []        []                             |  9
+     bfd                |                                                   |  1
+     bibshelf           |                    []                             |  7
+     binutils           |          []        []                     []      |  9
+     bison              |          []        []                     []      | 19
+     bison-runtime      |                    []         []          []      | 15
+     bluez-pin          |          [] []     []  []     []          []      | 28
+     cflow              |             []     []                             |  5
+     clisp              |                                                   |  6
+     console-tools      |          []        []                             |  5
+     coreutils          |          []        []                             | 16
+     cpio               |          [] []     []                             |  9
+     cpplib             |          []        []         []          []      | 11
+     cryptonit          |                                                   |  5
+     darkstat           |                    []         ()          ()      | 15
+     dialog             |          [] []     []         []          []      | 30
+     diffutils          |          []        []         []          []      | 28
+     doodle             |                    []                             |  6
+     e2fsprogs          |          []        []                             | 10
+     enscript           |          [] []     []                             | 16
+     error              |          []        []         []          []      | 18
+     fetchmail          |          []        []                             | 12
+     fileutils          |          []                   []          []      | 18
+     findutils          |          []        []                     []      | 17
+     flex               |          []        []                             | 15
+     fslint             |                    []                             |  9
+     gas                |          []                                       |  3
+     gawk               |          []        []                             | 15
+     gbiff              |                    []                             |  5
+     gcal               |          []                                       |  5
+     gcc                |          []                   []          []      |  6
+     gettext-examples   |          [] []     []         []    []    []      | 27
+     gettext-runtime    |          [] []     []         []    []    []      | 28
+     gettext-tools      |          [] []     []         []          []      | 19
+     gimp-print         |             []     []                             | 12
+     gip                |                    []                     []      | 12
+     gliv               |          []        []                             |  8
+     glunarclock        |                    []  []                 []      | 15
+     gmult              |          []        []         []          []      | 15
+     gnubiff            |                    []                             |  1
+     gnucash            |          ()                                       |  2
+     gnucash-glossary   |                    []                     []      |  9
+     gnuedu             |                    []                             |  2
+     gnulib             |          [] []     []         []          []      | 28
+     gnunet-gtk         |                                                   |  1
+     gnutls             |                                                   |  2
+     gpe-aerial         |                    []         []                  | 14
+     gpe-beam           |                    []         []                  | 14
+     gpe-calendar       |                    []                             |  3
+     gpe-clock          |          []        []  []     []                  | 21
+     gpe-conf           |                    []         []                  | 14
+     gpe-contacts       |                    []         []                  | 10
+     gpe-edit           |          []        []  []                 []      | 20
+     gpe-filemanager    |                    []                             |  6
+     gpe-go             |          []        []                             | 15
+     gpe-login          |          []        []  []     []          []      | 21
+     gpe-ownerinfo      |          []        []         []          []      | 21
+     gpe-package        |                    []                             |  6
+     gpe-sketchbook     |          []        []                             | 16
+     gpe-su             |          []        []         []                  | 20
+     gpe-taskmanager    |          []        []         []                  | 20
+     gpe-timesheet      |          []        []         []          []      | 18
+     gpe-today          |          []        []  []     []          []      | 21
+     gpe-todo           |                    []                             |  7
+     gphoto2            |             []     []         []          []      | 20
+     gprof              |          []        []                             | 11
+     gpsdrive           |                                                   |  4
+     gramadoir          |                    []                             |  7
+     grep               |          [] []     []                     []      | 34
+     gretl              |                                                   |  4
+     gsasl              |                    []         []                  |  8
+     gss                |                    []                             |  5
+     gst-plugins        |             []     []                     []      | 15
+     gst-plugins-base   |             []     []         []                  |  9
+     gst-plugins-good   |             []     []         []    []    []      | 20
+     gstreamer          |          [] []     []                             | 17
+     gtick              |                    []                             |  3
+     gtkam              |                    []                             | 13
+     gtkorphan          |                    []                             |  7
+     gtkspell           |             []     []  []     []    []    []      | 26
+     gutenprint         |                                                   |  3
+     hello              |          [] []     []         []          []      | 37
+     id-utils           |          []        []                             | 14
+     impost             |                    []                             |  4
+     indent             |          []        []         []          []      | 25
+     iso_3166           |       [] []        []               []            | 16
+     iso_3166_2         |                                                   |  2
+     iso_4217           |          []        []                             | 14
+     iso_639            |                    []                             | 14
+     jpilot             |          [] []     []         []                  |  7
+     jtag               |                    []                             |  3
+     jwhois             |          []        []                     []      | 13
+     kbd                |          []        []                             | 12
+     keytouch           |                    []                             |  4
+     keytouch-editor    |                                                   |  2
+     keytouch-keyboa... |                    []                             |  3
+     latrine            |          []        []                             |  8
+     ld                 |          []        []         []          []      |  8
+     leafpad            |          []        []         []          []      | 23
+     libc               |          []                   []          []      | 23
+     libexif            |                    []                             |  4
+     libextractor       |                    []                             |  5
+     libgpewidget       |                    []  []     []                  | 19
+     libgpg-error       |                    []                             |  4
+     libgphoto2         |             []                                    |  8
+     libgphoto2_port    |             []     []                     []      | 11
+     libgsasl           |                    []                             |  8
+     libiconv           |                    []                             |  7
+     libidn             |                    []         []                  | 10
+     lifelines          |                                                   |  4
+     lilypond           |                                                   |  2
+     lingoteach         |                    []                             |  6
+     lynx               |          [] []     []                             | 15
+     m4                 |                    []         []          []      | 18
+     mailutils          |             []                                    |  8
+     make               |          []        []         []                  | 20
+     man-db             |                    []                             |  6
+     minicom            |                    []                             | 14
+     mysecretdiary      |          []        []                             | 12
+     nano               |                    []                     []      | 17
+     nano_1_0           |          [] []     []                             | 18
+     opcodes            |          []        []                             | 10
+     parted             |          [] []                            []      | 10
+     pilot-qof          |                    []                             |  3
+     psmisc             |                    []                             | 10
+     pwdutils           |                    []                             |  3
+     python             |                                                   |  0
+     qof                |                    []                             |  4
+     radius             |             []                                    |  6
+     recode             |          []        []         []                  | 25
+     rpm                |          [] []     []                     []      | 14
+     screem             |                    []                             |  2
+     scrollkeeper       |          [] []     []                     []      | 26
+     sed                |          []        []                     []      | 22
+     sh-utils           |          []                                       | 15
+     shared-mime-info   |             []     []         []          []      | 24
+     sharutils          |          []        []                     []      | 23
+     shishi             |                                                   |  1
+     silky              |                    []                             |  4
+     skencil            |                    []                             |  7
+     sketch             |                                                   |  6
+     solfege            |                                                   |  2
+     soundtracker       |          []        []                             |  9
+     sp                 |          []                                       |  3
+     stardict           |             []     []         []          []      | 11
+     system-tools-ba... |    []    [] []     []     []  []          []      | 37
+     tar                |          [] []     []                     []      | 20
+     texinfo            |          []        []         []                  | 15
+     textutils          |          []                   []          []      | 17
+     tin                |                                                   |  1
+     tp-robot           |                    []         []          []      | 10
+     tuxpaint           |                    []  []                 []      | 16
+     unicode-han-tra... |                                                   |  0
+     unicode-transla... |                                                   |  2
+     util-linux         |          [] []     []                             | 20
+     vorbis-tools       |             []     []                             | 11
+     wastesedge         |                                                   |  1
+     wdiff              |          []        []                             | 22
+     wget               |          []        []                     []      | 19
+     xchat              |             []     []         []          []      | 29
+     xkeyboard-config   |          [] []     []                     []      | 11
+     xpad               |                    []         []          []      | 14
+                        +---------------------------------------------------+
+       77 teams           tg th tk tr uk ven vi  wa xh zh_CN zh_HK zh_TW zu
+      170 domains          0  1  1 77 39  0  136 10  1  48     5    54    0  2028
+
+   Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect.  This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+   For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer.  There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+   If October 2006 seems to be old, you may fetch a more recent copy of
+this `ABOUT-NLS' file on most GNU archive sites.  The most up-to-date
+matrix with full percentage details can be found at
+`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+
+1.6 Using `gettext' in new packages
+===================================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package.  Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library.  This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+   Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations.  The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project.  Therefore the information given above
+applies also for every other Free Software Project.  Contact
+`translation@iro.umontreal.ca' to make the `.pot' files available to
+the translation teams.
+
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..3597c1e
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,118 @@
+NOTE:
+  This license has been obsoleted by the change to the BSD-style copyright.
+  You may continue to use this license if you wish, but you are under no
+  obligation to do so.
+
+(*
+This document is freely plagiarised from the 'Artistic Licence',
+distributed as part of the Perl v4.0 kit by Larry Wall, which is
+available from most major archive sites.  I stole it from CrackLib.
+
+       $Id: COPYING 1342 2007-11-10 23:46:11Z nekral-guest $
+*)
+
+This documents purpose is to state the conditions under which this
+Package (See definition below) viz: "Shadow", the Shadow Password Suite
+which is held by Julianne Frances Haugh, may be copied, such that the
+copyright holder maintains some semblance of artistic control over the
+development of the package, while giving the users of the package the
+right to use and distribute the Package in a more-or-less customary
+fashion, plus the right to make reasonable modifications. 
+
+So there.
+
+***************************************************************************
+
+Definitions:
+
+
+A "Package" refers to the collection of files distributed by the
+Copyright Holder, and derivatives of that collection of files created
+through textual modification, or segments thereof. 
+
+"Standard Version" refers to such a Package if it has not been modified,
+or has been modified in accordance with the wishes of the Copyright
+Holder.
+
+"Copyright Holder" is whoever is named in the copyright or copyrights
+for the package.
+
+"You" is you, if you're thinking about copying or distributing this
+Package.
+
+"Reasonable copying fee" is whatever you can justify on the basis of
+media cost, duplication charges, time of people involved, and so on.
+(You will not be required to justify it to the Copyright Holder, but
+only to the computing community at large as a market that must bear the
+fee.)
+
+"Freely Available" means that no fee is charged for the item itself,
+though there may be fees involved in handling the item.  It also means
+that recipients of the item may redistribute it under the same
+conditions they received it.
+
+
+1.  You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated
+disclaimers.
+
+2.  You may apply bug fixes, portability fixes and other modifications
+derived from the Public Domain or from the Copyright Holder.  A Package
+modified in such a way shall still be considered the Standard Version.
+
+3.  You may otherwise modify your copy of this Package in any way,
+provided that you insert a prominent notice in each changed file stating
+how and when AND WHY you changed that file, and provided that you do at
+least ONE of the following:
+
+a) place your modifications in the Public Domain or otherwise make them
+Freely Available, such as by posting said modifications to Usenet or an
+equivalent medium, or placing the modifications on a major archive site
+such as uunet.uu.net, or by allowing the Copyright Holder to include
+your modifications in the Standard Version of the Package.
+
+b) use the modified Package only within your corporation or organization.
+
+c) rename any non-standard executables so the names do not conflict with
+standard executables, which must also be provided, and provide separate
+documentation for each non-standard executable that clearly documents
+how it differs from the Standard Version.
+
+d) make other distribution arrangements with the Copyright Holder.
+
+4.  You may distribute the programs of this Package in object code or
+executable form, provided that you do at least ONE of the following:
+
+a) distribute a Standard Version of the executables and library files,
+together with instructions (in the manual page or equivalent) on where
+to get the Standard Version.
+
+b) accompany the distribution with the machine-readable source of the
+Package with your modifications.
+
+c) accompany any non-standard executables with their corresponding
+Standard Version executables, giving the non-standard executables
+non-standard names, and clearly documenting the differences in manual
+pages (or equivalent), together with instructions on where to get the
+Standard Version.
+
+d) make other distribution arrangements with the Copyright Holder.
+
+5.  You may charge a reasonable copying fee for any distribution of this
+Package.  You may charge any fee you choose for support of this Package. 
+YOU MAY NOT CHARGE A FEE FOR THIS PACKAGE ITSELF.  However, you may
+distribute this Package in aggregate with other (possibly commercial)
+programs as part of a larger (possibly commercial) software distribution
+provided that YOU DO NOT ADVERTISE this package as a product of your
+own. 
+
+6.  The name of the Copyright Holder may not be used to endorse or
+promote products derived from this software without specific prior
+written permission.
+
+7.  THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+                               The End
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..6606c8c
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,12488 @@
+2009-07-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, configure.in: Prepare for the next release 4.1.4.2.
+       * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+       * po/*.po, man/po/*.po: Updated PO files.
+
+2009-07-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: Fixed definition of the SHELL configuration.
+
+2009-07-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * etc/login.defs: SYS_GID_MIN /SYS_UID_MIN changed from 100 to
+       101. GID 100 seems to be used statically.
+
+2009-07-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/shell.c, src/su.c: Execute the scripts with "sh -"
+       rather than "sh".
+
+2009-07-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in, libmisc/shell.c, libmisc/setupenv.c, src/newgrp.c,
+       src/su.c: Let the system shell be configurable.
+
+2009-07-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/su.c, libmisc/shell.c: Added support for shells being a
+       shell script without a shebang.
+
+2009-07-19  Jean-Louis Dupond  <info@dupondje.be>
+
+       * po/nl.po: Fix obvious mistake in Dutch translation.
+
+2009-07-18  Peter Vrabec  <pvrabec@redhat.com>
+
+       * NEWS, libmisc/find_new_gid.c, libmisc/find_new_uid.c: Do not use
+       getpwent / getgrent for system accounts. Trying the low-IDs with
+       getpwuid / getgrgid should be more efficient on LDAP configured
+       systems with many accounts.
+       * NEWS, libmisc/find_new_gid.c, libmisc/find_new_uid.c: Since
+       system accounts are allocated from SYS_?ID_MIN to SYS_?ID_MAX in
+       reverse order, accounts are packed close to SYS_?ID_MAX if
+       SYS_?ID_MIN is already used but there are still dome gaps.
+
+2009-07-05  Piarres Beobide  <pi+debian@beobide.net>
+
+       * po/eu.po: Updated Basque translation.
+
+2009-06-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/fi/Makefile.am: Stop distributing the Finnish translation of
+       passwd.1 (outdated).
+
+2009-06-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/pwck.8.xml: The shadow file is optional.
+       * man/pwck.8.xml: Updated description of the checks. Added
+       description of the shadow checks.
+       * man/pwck.8.xml: Updated description of the checks.
+
+2009-06-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/po/fr.po: Fixed typo (forunis)
+
+2009-06-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/fputsx.c: Compare the result of fgets() with the provided
+       buffer instead of NULL.
+
+2009-06-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/gshadow.c: Removed limitation on the length of the gshadow
+       lines.
+       * lib/gshadow.c: Compare the result of fgetsx() with the provided
+       buffer instead of NULL.
+
+2009-06-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/xgetXXbyYY.c, libmisc/xgetpwnam.c, libmisc/xgetgrnam.c,
+       libmisc/xgetpwuid.c, libmisc/xgetgrgid.c, libmisc/xgetspnam.c: Do
+       not limit the size of the buffer to hold the group or user
+       structure. It used to be limited to 16k, which caused issues with
+       groups having many users.
+
+2009-06-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/su.c, man/su.1.xml: The default behavior (without -p or
+       --login) is to copy most of the environment variables. Revert a
+       previous change and update the documentation.
+
+2009-06-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/passwd.5.xml, man/shadow.5.xml: Document the passwd- and
+       shadow- files.
+
+2009-06-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/su.c: Preserve the DISPLAY and XAUTHORITY environment
+       variables, even with --login. This was not the case before in the
+       PAM version.
+
+2009-06-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c, src/groupmod.c, src/groupadd.c, src/faillog.c:
+       Fix typos. Take this opportunity to split the usage messages into
+       smaller messages (one per option).
+       * src/pwck.c: Fix typo.
+
+2009-06-05  Petri Koistinen  <petri.koistinen@iki.fi>
+
+       * man/passwd.1.xml: The short option for --mindays is -n, not -m.
+
+2009-06-04  Mike Frysinger  <vapier@gentoo.org>
+
+       * .gitignore, man/.gitignore, src/.gitignore: Added .gitignore
+       files.
+
+2009-06-04  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/su.1.xml: Use <option> for the login.defs options.
+       * man/su.1.xml: Improve the documentation of the su behavior
+       regarding environment variables.
+       * man/su.1.xml: Document that the login.defs file is used.
+
+2009-06-04  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.1.xml: Document that the login.defs file is used.
+
+2009-06-04  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.d/ENVIRON_FILE.xml: Document the format for
+       comments.
+
+2009-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/gpasswd.1.xml: Ease the translation of the refpurpose.
+       * man/gpasswd.1.xml: Fix typo, shorten sentences.
+
+2009-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/pwck.8.xml, man/grpck.8.xml: Move the SEE ALSO section at
+       the end.
+
+2009-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/vipw.c: Make sure opened files are closed.
+
+2009-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/chpasswd.8.xml, man/grpck.8.xml, man/newgrp.1.xml,
+       man/passwd.1.xml, man/sg.1.xml: Avoid a spurious comma.
+
+2009-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS: New placeholder for the next release.
+
+2009-05-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * po/fr.po: Updated French translation.
+
+2009-05-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS: Prepare the next release.
+       * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+       * po/*.po, man/po/*.po: Updated PO files.
+
+2009-05-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/passwd.1.xml: passwd -u does not reset the expiry field.
+
+2009-05-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/po/fr.po: Updated some strings.
+
+2009-05-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newgrp.c: Return the exit status of the child. Thanks
+       to Lionel Elie Mamane.
+
+2009-05-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Added warnings for absolute symlinks which could
+       be broken by rename().
+
+2009-05-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/userdel.c: Report errors to remove the user's mailbox.
+       * NEWS, src/userdel.c: When USERGROUPS_ENAB is enabled, remove the
+       user's group when the user was the only member. This is still not
+       complete, as the user could have been specified twice in the
+       members.
+       * NEWS, src/userdel.c: Do not fail when -r is used and the home
+       directory does not exist.
+
+2009-05-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/copydir.c: Added warning for relative symlinks.
+       * libmisc/copydir.c (remove_tree): There is no need to check if
+       the root argument exist. opendir() will report this.
+
+2009-05-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/faillog.8.xml: Minor updates.
+
+2009-05-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/faillog.5.xml: Split a long paragraph. Typo fixes.
+
+2009-05-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/gpasswd.1.xml: Minor updates.
+
+2009-05-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/gshadow.5.xml: Updated documentation.
+
+2009-05-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/usermod.8.xml, man/userdel.8.xml, man/useradd.8.xml:
+       Harmonize formatting of login.defs and default/useradd variables.
+       Use an <option> tag.
+       * man/usermod.8.xml: Added reference to gshadow(5).
+       * man/login.defs.d/USERDEL_CMD.xml: Shorten the lines of the
+       USERDEL_CMD example.
+
+2009-05-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/su.c: Use a boolean instead of 0.
+
+2009-05-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/usermod.8.xml: Fixed typos.
+
+2009-05-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: Next version will be 4.1.4.1.
+
+2009-05-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/newusers.8.xml: Added notes regarding the ownership of
+       files.
+
+2009-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/groupmod.8.xml: Split the -g option description into smaller
+       paragraphs.
+
+2009-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/usermod.8.xml: Ownership of the mailbox is also changed with
+       the -u option.
+
+2009-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/useradd.8.xml: When no passwords are provided, the password
+       is disabled, not the account.
+
+2009-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/newusers.8.xml, man/chpasswd.8.xml, man/useradd.8.xml,
+       man/groupadd.8.xml, man/usermod.8.xml, man/chgpasswd.8.xml,
+       man/groupmod.8.xml: Added warning: passwords set with these tools
+       may not respect the password policy.
+
+2009-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/groupadd.8.xml: Fixed formatting issue.
+
+2009-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/userdel.8.xml: Added warning for files that could remain
+       owner by the removed user.
+
+2009-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/useradd.8.xml: Fix formatting typo.
+
+2009-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/groupdel.8.xml: Move the warning on filesystems checks to
+       the CAVEAT section.
+
+2009-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.d/GID_MAX.xml: Fixed typo. useradd was specified
+       twice.
+
+2009-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/groupadd.8.xml, man/useradd.8.xml: names may also contain
+       digits.
+
+2009-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/shadow.5.xml: What is important in shadow is not the
+       encryption, but that the file is not world readable.
+
+2009-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/po/fr.po: Updated French translation. Thanks to ABBAS
+       Belkacem for the login.defs update.
+
+2009-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/usermod.8.xml: Split the CAVEAT section in paragraphs.
+       Updated information on the user_busy check.
+
+2009-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/userdel.8.xml: Document tat -f may force teh deletion of a
+       busy user.
+
+2009-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/usermod.c: Check if the user is busy when the user's
+       UID, name or home directory is changed.
+
+2009-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c, libmisc/user_busy.c, libmisc/Makefile.am,
+       lib/prototypes.h: Move user_busy() to libmisc/user_busy.c.
+       * NEWS, libmisc/user_busy.c: On Linux, do not check if an user is
+       logged in with utmp, but check if the user is running some
+       processes. If not on Linux, continue to search for an utmp record,
+       but make sure the process recorded in the utmp entry is still
+       running.
+
+2009-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/usermod.8.xml: Document the -m/--move-home option.
+
+2009-05-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c (user_busy): Check if the process registered in
+       utmp is still running. This avoids rejecting the removal of an
+       user when UTMP was not updated and indicate that the user is still
+       logged in.
+
+2009-05-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, libmisc/console.c (console): Remove the leading /dev/ from
+       the tty before comparing with the lines specified by CONSOLE.
+       * src/su.c: Do not remove the /dev/ prefix since it is done by
+       console().
+
+2009-05-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.d/CONSOLE.xml: Document the format of the CONSOLE
+       file.
+
+2009-05-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/login.c: Fix failure of non PAM enabled versions when
+       an empty username is entered after a first prompt.
+
+2009-05-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Added missing end of line at the end of success
+       messages.
+
+2009-05-16  sacha  <sachall@infonie.fr>
+
+       * po/fr.po: Fixed typo in the vipw usage string.
+
+2009-05-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/shell.c: Removed invalid code that executed the user's
+       shell as a shell script when the direct execution of the user's
+       shell failed with ENOEXEC and the user's shell has a shebang. The
+       interpreter might not be the right one.  Executing the user's
+       shell with sh -c might be better, but I'm not sure we should try
+       harder when there is a failure. Note: the removed code was only
+       included #ifndef __linux__.
+
+2009-05-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/userdel.8.xml: The USERGROUPS_ENAB group may not be removed
+       when the group is used by other users, not the user.
+
+2009-05-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c, man/login.defs.d/USERDEL_CMD.xml: Move the
+       USERDEL_CMD script example from the source code to the
+       documentation.
+
+2009-05-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/newusers.8.xml: PAM enabled version: describe how passwords
+       are updated and how newusers behave in case of error.
+
+2009-05-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, configure.in: New release will be 4.1.4.
+       * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+       * po/*.po, man/po/*.po: Updated PO files.
+
+2009-05-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/copydir.c: Added prototype of readlink_malloc(), and
+       readlink_malloc() changed to static.
+
+2009-05-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/su.c: Avoid redeclaration of root_pw.
+
+2009-05-10  NAKANO Takeo  <nakano@webmasters.gr.jp>
+
+       * po/ja.po: Updated Japanese translation.
+
+2009-05-10  Jean-Luc Coulon (f5ibh)  <jean-luc.coulon@wanadoo.fr>
+
+       * po/fr.po: Updated French translation.
+
+2009-05-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c: Avoid PATH_MAX. On glibc, we can use realpath
+       with a NULL argument.
+       * src/useradd.c: Replace PATH_MAX by a fixed constant. The buffer
+       was not meant as a storage for a path.
+       * src/useradd.c, src/newusers.c, src/chpasswd.c: Better detection
+       of fgets errors. Lines shall end with a \n, unless we reached the
+       end of file.
+       * libmisc/copydir.c: Avoid PATH_MAX. Support file paths with any
+       length. Added readlink_malloc().
+
+2009-05-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwck.c: Warn if an user has an entry in passwd and shadow,
+       and the password field in passwd is not 'x'.
+       * src/grpck.c: Warn if a group has an entry in group and gshadow,
+       and the password field in group is not 'x'.
+
+2009-05-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.d/ENCRYPT_METHOD.xml,
+       man/login.defs.d/MD5_CRYPT_ENAB.xml,
+       man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml: Updated note for PAM
+       enabled versions. These variables are only used for group
+       passwords in this case.
+
+2009-05-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/chpasswd.8.xml: Sorted options alphabetically.
+
+2009-05-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newusers.c, src/Makefile.am: Added support for
+       changing the passwords with PAM.
+       * src/newusers.c: Split the usage string in smaller parts to
+       allow enabling single parts.
+       * man/newusers.8.xml: Indicate the options and configuration
+       variables valid for PAM and non-PAM versions.
+       * man/newusers.8.xml: Added pointer to /etc/pam.d/chpasswd.
+
+2009-05-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c: Remove duplicate definitions of exit codes.
+
+2009-05-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/non_interactive_pam_conv.c,
+       libmisc/pam_pass_non_interractive.c, libmisc/Makefile.am: Renamed.
+       * libmisc/pam_pass_non_interractive.c, lib/prototypes.h:
+       non_interactive_password and non_interactive_pam_conv do not need
+       to be externally visible.
+       * libmisc/pam_pass_non_interractive.c: Added declaration of
+       ni_conv.
+       * libmisc/pam_pass_non_interractive.c: Only compile ifdef USE_PAM.
+       * libmisc/pam_pass_non_interractive.c, lib/prototypes.h:
+       Added do_pam_passwd_non_interractive().
+       * src/chpasswd.c: Use do_pam_passwd_non_interractive().
+
+2009-05-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/pam_pass.c: Removed comment regarding pam_misc. This is
+       checked by configure.in.
+
+2009-05-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.5.xml: PAM enabled chpasswd do not use any
+       configuration variable from login.defs.
+
+2009-05-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/passwd.1.xml: Differentiate the files used for PAM and
+       non-PAM versions.
+
+2009-05-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/chpasswd.8.xml: Describe how chpasswd behaves in case of error.
+       * man/chpasswd.8.xml: Describe the PAM enabled chpasswd behavior.
+       * man/chpasswd.8.xml: Differentiate the files and configurations
+       used for PAM and non-PAM versions.
+
+2009-05-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: failcount does not need to be signed.
+
+2009-05-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/Makefile.am: PAM enabled chpasswd now needs to be linked to
+       the PAM library, even if --enable-account-tools-setuid is not
+       used.
+
+2009-05-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chpasswd.c: Added the line number when an error is reported
+       instead of only the username.
+       * src/chpasswd.c: PAM enabled chpasswd may change the password
+       database (for the user where the password update succeeded) even
+       if there were a failure for one user. Do not indicate that changes
+       were ignored.
+
+2009-05-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Exit immediately when unlocking a password would
+       result in a passwordless account. This avoid printing a success
+       message after the warning.
+
+2009-05-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/nologin.c: Include <stdlib.h> to get EXIT_FAILURE.
+
+2009-05-04  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, configure.in: Fix build failure on non-PAM enabled system
+       when --without-pam is not specified.
+
+2009-04-30  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c: Ignore teh return values of fclose() and
+       unlink() in case of failure of fopen_set_perms() or
+       create_backup().
+       * lib/commonio.c: Should the backup file be unlink'ed in case of
+       failure of create_backup()?
+
+2009-04-30  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/getulong.c: Added splint annotations.
+
+2009-04-30  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newgrp.c, src/chfn.c, src/groupmems.c, src/usermod.c,
+       src/userdel.c, src/chpasswd.c, src/grpck.c, src/gpasswd.c,
+       src/groupdel.c, src/chgpasswd.c, src/vipw.c, src/useradd.c,
+       src/su.c, src/groupmod.c, src/passwd.c, src/pwck.c,
+       src/groupadd.c, src/chage.c, src/login.c, src/faillog.c,
+       src/sulogin.c, src/chsh.c, src/pwconv.c: Added splint annotations.
+       * src/userdel.c, src/pwconv.c, src/lastlog.c, src/grpck.c,
+       src/vipw.c, src/groupmod.c, src/passwd.c, src/pwck.c, src/login.c,
+       src/sulogin.c, src/usermod.c: Use return instead of exit at the
+       end of main().
+       * src/gpasswd.c, src/passwd.c, src/faillog.c: Use the exitcodes.h
+       exit codes.
+       * src/chpasswd.c: Added missing ||.
+       * src/nologin.c: Do not include exitcodes.h.
+       * src/nologin.c: Added brackets.
+       * src/nologin.c: Avoid assignments in comparisons.
+
+2009-04-30  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/getgr_nam_gid.c, lib/get_gid.c, lib/get_pid.c,
+       lib/get_uid.c: Added splint annotations.
+
+2009-04-30  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/exitcodes.h: Define E_SUCCESS as EXIT_SUCCESS. Added FIXMEs.
+       * libmisc/chowntty.c, libmisc/rlogin.c, libmisc/sub.c,
+       src/newusers.c, libmisc/sulog.c, libmisc/system.c, src/logoutd.c,
+       src/groups.c, src/id.c, lib/encrypt.c, libmisc/audit_help.c,
+       libmisc/limits.c: Return EXIT_FAILURE instead of 1, and
+       EXIT_SUCCESS instead of 0.
+       * libmisc/audit_help.c: Replace an fprintf() by fputs().
+       * libmisc/audit_help.c: Remove documentation of the audit_logger
+       returned values. The function returns void.
+       * libmisc/system.c: Only return status if waitpid succeeded.
+       Return -1 otherwise.
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/chpasswd.c: Added support for changing the passwords
+       with PAM.
+       * src/chpasswd.c: Split the usage string in smaller parts to
+       allow enabling single parts.
+       * src/chpasswd.c: Do not set a global lock on the password files.
+       This is done by PAM each time a password is updated.
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/defines.h: Include <utmpx.h> and <utmp.h> to define
+       USER_NAME_MAX_LENGTH.
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Change a snprintf() to strncpy(). There are no
+       format.
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Harmonize status report at the end of passwd.
+       Prefix the messages with "passwd: ", only indicate a password
+       change if the password was actually changed, and password
+       properties changed otherwise.
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chgpasswd.c, src/newusers.c: There is no need to test for 0
+       after getopt_long. No options have flag != NULL.
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h: Replace #if by #ifdef
+       * libmisc/Makefile.am, lib/prototypes.h,
+       libmisc/non_interactive_pam_conv.c: Added
+       non_interactive_pam_conv() and non_interactive_password.
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c, src/userdel.c, src/logoutd.c: Replace #if by #ifdef
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/vipw.c: Harmonize messages.
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/lastlog.c: Replace atoi() by getulong().
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/failure.h: Replace HAVE_UTMPX_H by USE_UTMPX.
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/rlogin.c: Replace atoi() by getulong().
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/failure.c: Replace HAVE_UTMPX_H by USE_UTMPX.
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/chkname.c: Do not include <utmp.h> and <utmpx.h>. There
+       are no more needed.
+
+2009-04-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/limits.c: Replace strtol() by getlong().
+       * libmisc/limits.c: Replace HAVE_UTMPX_H by USE_UTMPX.
+
+2009-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/groupmod.8.xml, man/usermod.8.xml, man/groupadd.8.xml,
+       man/useradd.8.xml: Added note to warn about insecurity in using
+       --password.
+       * man/groupmod.8.xml: Removed not regarding default if --password
+       is not used. This was a cut&paste from groupadd.8.xml.
+       * man/passwd.1.xml: Split some paragraphs.
+       * man/passwd.1.xml: Recommend other encryption methods than DES.
+
+2009-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Move update_utmp() after the PID or session ID
+       changed in order to get more accurate data in UTMP. This also
+       fixes "exec login" when login in installed setuid.
+
+2009-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Reuse a string and avoid an untranslated message
+       "Login incorrect".
+
+2009-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Replace HAVE_UTMPX_H by USE_UTMPX.
+       * src/login.c: Avoid name clash between global variables and the
+       update_utmp() arguments.
+
+2009-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupadd.c, lib/commonio.c, lib/groupio.c: Added missing
+       include of <assert.h>
+
+2009-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h: Replace HAVE_UTMPX_H by USE_UTMPX.
+       * lib/prototypes.h, libmisc/log.c: Added splint annotations.
+       * libmisc/log.c: Added SYSLOG warning when lseek fails (should not
+       happen).
+
+2009-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/mail.c, libmisc/copydir.c: Added missing include of
+       <assert.h>
+
+2009-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/env.c: Added assertions on the snprintf results.
+
+2009-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, configure.in: Added configure option --enable-utmpx,
+       disabled by default. This defines USE_UTMPX, which should be used
+       instead of HAVE_UTMPX_H.
+       * libmisc/utmp.c: Replace HAVE_UTMPX_H by USE_UTMPX.
+       * libmisc/utmp.c: Removed old comment on HAVE_STRUCT_UTMP_UT_ID
+       and UTMPX support.
+
+2009-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/po/fr.po: Fix typo.
+
+2009-04-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newgrp.c: Close the databases before changing the UDI and
+       GID.
+
+2009-04-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/myname.c: Updated splint annotations.
+
+2009-04-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c: Added splint annotations.
+       * lib/commonio.c: old_context should be local to commonio_close(),
+       not global.
+
+2009-04-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Do not freecon strings duplicated with strdup.
+       Also avoid allocation of memory.
+       * src/passwd.c: Use SYSLOG instead of syslog.
+
+2009-04-25  Miroslav Kure  <kurem@upcase.inf.upol.cz>
+
+       * po/cs.po: Updated to 352T7f8u
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.h, lib/commonio.c: Added splint annotations.
+       * lib/commonio.c: Do not assumes eptr is always notnull.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, po/pt.po: Updated Portuguese translation.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/copydir.c: Added splint annotations.
+       * libmisc/copydir.c: Added assert to help splint.
+       * libmisc/copydir.c: Free allocated structures in cas of failure.
+       * libmisc/copydir.c: Avoid implicit conversion of pointers to
+       booleans.
+       * libmisc/copydir.c: Use buffers of size PATH_MAX instead of 1024
+       for filenames.
+       * libmisc/copydir.c: Use fchmod and fchown to change the mode of
+       the opened file.
+       * libmisc/copydir.c: Indicate the mode to open(), even if we chmod
+       later.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h: Added prototypes of getulong() and get_pid().
+       * lib/prototypes.h: Added splint annotations.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c: Use get_pid() instead of strtol.
+       * lib/commonio.c: Replace an int by a size_t.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.h: Added splint annotations.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/sgroupio.c: Free allocated structures on failure.
+       * lib/sgroupio.c: Added splint annotations.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/Makefile.am, lib/get_pid.c, lib/getulong.c: Added get_pid()
+       and getulong().
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/getlong.c: Do not check for NULL string but empty string.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/groupio.c: Updated splint annotations.
+       * lib/groupio.c: Added assert to help splint.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Check assumptions on snprintf().
+       * src/useradd.c: Replace peror by an strerror and avoid an
+       intermediate buffer.
+       * src/useradd.c: Save errno between the failure and the report by
+       perror/strerror.
+       * src/useradd.c: Prefer xmalloc to malloc.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/lastlog.c: Remove function calls from within assert().
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/obscure.c: Change some int to size_t.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/console.c: Use a less disturbing construct for splint.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/limits.c: Parse the limits, umask, nice, maxlogin, file
+       limit with getlog() / getulong(). This also means, in case of
+       non-PAM enabled systems, that the umask specified on the GECOS
+       fields should start with a 0 if specified in octal. (it used to be
+       force to octal). Do the appropriate cast and range checking.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/salt.c: In case gettimeofday() fails, get some entropy
+       from the PID.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/setupenv.c: Prefer snprintf to sprintf, even if a small
+       context indicates no issues.
+       * libmisc/setupenv.c: Avoid implicit conversion of pointers to
+       booleans.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/loginprompt.c: Prefer snprintf to sprintf, even if a
+       small context indicates no issues.
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/faillog.c: Remove function calls from within assert().
+
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/mail.c: Ignore the return value of puts().
+       * libmisc/mail.c: Prefer snprintf to sprintf, even if a small
+       context indicates no issues.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c, lib/commonio.h, lib/groupio.c, lib/groupio.h,
+       lib/pwio.c, lib/pwio.h, lib/shadowio.c, lib/shadowio.h: Added
+       splint annotations. The *_locate() and *_next() functions
+       currently return an observer. As the structure are often modified
+       by the caller, it could maybe be changed to exposed later. (and
+       non-const)
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/pwauth.c: Use a boolean for wipe_clear_pass and use_skey.
+       * lib/pwauth.c: Added splint annotations.
+       * lib/pwauth.c: Added brackets and parenthesis.
+       * lib/pwauth.c: Avoid assignments in comparisons.
+       * lib/pwauth.c: Avoid implicit conversion of pointers or
+       characters to booleans.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmod.c: Cast ID to ulongs and use ulong formats for IDs.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newgrp.c: Added splint annotations.
+       * src/newgrp.c: audit_buf is only used in newgrp. Make it static.
+       * src/newgrp.c: Ignore the return value of fputs().
+       * src/newgrp.c: Use exit(EXIT_FAILURE) instead of exit(1).
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/pwdcheck.c (passwd_check): The progname is not used.
+       * libmisc/pwdcheck.c: Ignore the return value of sleep().
+       * libmisc/pwdcheck.c: Use exit(EXIT_FAILURE) instead of exit(1).
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/setupenv.c: Avoid assignments in comparisons.
+       * libmisc/setupenv.c: Added brackets and parenthesis.
+       * libmisc/setupenv.c: Ignore the return value of fclose (file
+       opened read-only)
+       * libmisc/setupenv.c: Ignore the return value of puts().
+       * libmisc/setupenv.c: Avoid implicit conversion of pointers to
+       booleans.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/find_new_gid.c, libmisc/find_new_uid.c,
+       libmisc/isexpired.c, src/groupadd.c, lib/pwauth.h, lib/groupmem.c,
+       lib/shadowmem.c, lib/pwmem.c, lib/prototypes.h: Added splint
+       annotations.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/loginprompt.c: Use exit(EXIT_FAILURE) instead of
+       exit(1).
+       * libmisc/loginprompt.c: Avoid implicit conversion of pointers to
+       booleans.
+       * libmisc/loginprompt.c: Ignore return value of putc().
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/env.c, libmisc/age.c: Added splint annotations.
+       * libmisc/age.c: Added brackets and parenthesis.
+       * libmisc/age.c: Ignore the return value of fclose (file opened
+       read-only)
+       * libmisc/age.c: Ignore puts() return value.
+       * libmisc/age.c: Use exit(EXIT_FAILURE) instead of exit(1).
+       * libmisc/age.c: Avoid assignments in comparisons.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/fputsx.c, lib/gshadow.c, lib/commonio.h: Added splint
+       annotations.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/get_gid.c: gidstr should not be NULL, but the check was
+       meant to make sure it is not empty.
+       * lib/get_uid.c: Likewise.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/getdef.c: Added splint annotations.
+       * lib/getdef.c: Ignore fputs() return value.
+       * lib/getdef.c: Use EXIT_FAILURE / EXIT_SUCCESS for exit()
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/faillog.c: Added splint annotations.
+       * src/faillog.c: Cast ID to ulongs and use ulong formats for IDs.
+       * src/faillog.c: Ignore fflush() return value.
+       * src/faillog.c: Added parenthesis.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/grpck.c: Ignore puts return value.
+       * src/grpck.c: Avoid variable format string.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/lastlog.c: Use EXIT_FAILURE / EXIT_SUCCESS for exit()
+       * src/lastlog.c: Added splint annotations.
+       * src/lastlog.c: Avoid global pwent.
+       * src/lastlog.c: Cast ID to ulongs and use ulong formats for IDs.
+       * src/lastlog.c: Avoid assignment in comparisons.
+       * src/lastlog.c: Ignore fclose() return value since the file is
+       only opened for reading.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newgrp.c: Added assertion to guide splint (and me).
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/find_new_gid.c: Use booleans instead of char fo
+       used_gids.
+       * libmisc/find_new_gid.c: Use getdef_ulong and cast to git_t to
+       get GID values.
+       * libmisc/find_new_gid.c: Use UL as a prefix for ulong values.
+       * libmisc/find_new_uid.c: Likewise.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/yesno.c: Ignore the return value of puts.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/age.c: Use exit(EXIT_FAILURE) instead of exit(1).
+       * libmisc/age.c: The return value of execl() is not used.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/xgetXXbyYY.c, libmisc/myname.c, libmisc/getgr_nam_gid.c,
+       libmisc/salt.c, libmisc/list.c, libmisc/cleanup.c, src/login.c,
+       lib/getdef.h, lib/groupio.c, lib/getlong.c, lib/gshadow_.h,
+       lib/sgroupio.c, lib/shadowio.c, lib/pwio.c, lib/commonio.h,
+       lib/fputsx.c, lib/prototypes.h: Added splint annotations.
+       * lib/groupio.c: Avoid implicit conversion of pointers to
+       booleans.
+       * lib/groupio.c: Free allocated buffers in case of failure.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/defines.h: Added splint definitions to replace <locale.h>
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c, libmisc/age.c, libmisc/shell.c, lib/groupio.c,
+       lib/groupio.h, lib/sgroupio.c, lib/sgroupio.h, lib/shadowio.c,
+       lib/pwio.c, lib/commonio.c, lib/shadowio.h, lib/pwio.h,
+       lib/commonio.h, lib/prototypes.h: Added splint annotations.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c: Only set ut_time and ut_tv if gettimeofday()
+       succeeds.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c: Fix the check for empty host in prepare_utmp()
+       and prepare_utmpx().
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c: The ut argument of prepare_utmp() and
+       prepare_utmpx () might be NULL. ut_id needs to be forged in that
+       case.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c: Removed old documentation of setutmp().
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c: Use xmalloc() rather than malloc().
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c: The name returned by ttyame() needs to be copied
+       locally.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Added assert()s for NULL (or ! NULL) username, and
+       pwd. This helps splint.
+       * src/login.c: Added splint annotations.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: After login_prompt(), do not check for unset
+       username, but for empty username.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/defines.h: Define USER_NAME_MAX_LENGTH, based on utmp and
+       default to 32.
+       * libmisc/chkname.c: Use USER_NAME_MAX_LENGTH.
+       * src/login.c: Use USER_NAME_MAX_LENGTH instead of the default 32.
+       username also needs to be bigger than USER_NAME_MAX_LENGTH because
+       it has to be nul-terminated.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Use xmalloc() instead of malloc().
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Ignore the return value of puts(), fputs(),
+       strftime().
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: timeout, delay, and retries should be unsigned.
+       * src/login.c: Ignore the return value of alarm() and sleep().
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: If we cannot get the terminal configuration, do not
+       change the terminal configuration. setup_tty() is just a best
+       effort configuration of the terminal.
+       * src/login.c: Ignore failures when setting the terminal
+       configuration.
+       * src/login.c: Fail if the ERASECHAR or KILLCHAR configurations
+       are not compatible with a cc_t type.
+
+2009-04-22  Paul Szabo  <psz@maths.usyd.edu.au>
+
+       * src/login.c: utent might be NULL after get_current_utmp().
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Removed temp_shell. No more used.
+       * src/login.c: lastlog is only used #ifndef USE_PAM
+       * src/login.c: Rename lastlog to ll to avoid name clash with the
+       lastlog type.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Added update_utmp() to group the prepare_utmp and
+       setutmp (and the utmpx versions).
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Do not include netdb.h. gethostbyname() is no more
+       called from within login.c. Also UT_ADDR does not exist anymore.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Check if login is run with effective root
+       privileges. This should be more helpful to users than a failure to
+       find an utmp entry or failure to access a file.
+
+2009-04-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c: Reworked. Get rid of Linux specific stuff. Get rid
+       of global utent/utxent variables. Only reuse the ut_id and maybe
+       the ut_host fields from utmp.
+       * lib/prototypes.h, libmisc/utmp.c: Removed checkutmp(),
+       setutmp(), setutmpx().
+       * lib/prototypes.h, libmisc/utmp.c: Added get_current_utmp(),
+       prepare_utmp(), prepare_utmpx(), setutmp(), setutmpx().
+       * libmisc/utmp.c (is_my_tty): Only compare the name of the utmp
+       line with ttyname(). (No stat of the two terminals to compare the
+       devices).
+       * libmisc/utmp.c: Use getaddrinfo() to get the address of the
+       host.
+       * configure.in: Check for getaddrinfo().
+       * configure.in: Use AC_CHECK_MEMBERS to check for the existence of
+       fields in the utmp/utmpx structures.
+       * configure.in: Reject systems with utmpx support but no ut_id
+       field in utmp. This could be fixed later if needed.
+       * src/login.c: Use the new utmp functions. This also simplifies
+       the failtmp() handling.
+       * src/login.c: passwd_free() renamed to pw_free() and
+       shadow_free() renamed to spw_free()
+
+2009-04-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, configure.in: Enable --enable-account-tools-setuid by
+       default for PAM builds, as it used to be before the introduction
+       of this option.
+
+2009-04-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * etc/pam.d/Makefile.am: Distribute all pam.d files, even if
+       ACCT_TOOLS_SETUID is not enabled.
+
+2009-04-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/shadowmem.c: Added spw_free().
+       * lib/shadowio.c: Use spw_free() for shadow_free().
+       * lib/groupmem.c: Added gr_free().
+       * lib/groupio.c: Use gr_free() for group_free().
+       * lib/pwmem.c: Include define.h before prototypes.h
+       * lib/pwmem.c: Added pw_free().
+       * lib/pwio.c: Use pw_free() for passwd_free().
+       * lib/sgroupio.c: Added sgr_free().
+       * lib/sgroupio.c: Use sgr_free() for gshadow_free().
+       * lib/prototypes.h: Added gr_free(), pw_free(), sgr_free(),
+       spw_free().
+
+2009-04-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/shell.c: Add brackets and parenthesis.
+       * libmisc/shell.c: Avoid assignments in comparisons.
+       * libmisc/shell.c: Re-indent.
+
+2009-04-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/defines.h: Added MIN and MAX macros.
+       * libmisc/salt.c: Removed MIN and MAX macros.
+
+2009-04-20  Sven Joachim  <svenjoac@gmx.de>
+
+       * NEWS, src/lastlog.c: Fix regression causing empty reports.
+       Get the size of the file before printing the entries.
+
+2009-04-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Get rid of pwent. pwd is sufficient as long as it
+       is always coming from xgetpwnam. There is no need to copy pwd to
+       pwent, this was not a good idea anyway as the strings from pwd
+       were not duplicated.
+       * src/login.c: Always free the pwd and spwd structure when we
+       retrieve a new one. This will clear the password of the previous
+       user from the memory.
+       * src/login.c: user_passwd is used to keep point to the password
+       of the user being authenticated.
+       * src/login.c: (non PAM) Fail if the user's entry cannot be found
+       after the user updated her password (if expire() requested an
+       update).
+       * src/login.c: If the user does not exist on the system, there is
+       no need to build a pwd structure (with shell).
+
+2009-04-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: ttytype already checks for TTYTYPE_FILE and TERM.
+       Just call ttytype.
+
+2009-04-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Open the PAM session before pam_setcred and before
+       initgroups. This is more consistent with rfc86.0.
+
+2009-04-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Added helper functions get_pam_user() and
+       get_failent_user().
+
+2009-04-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Added parameter to check_nologin. This will help
+       getting rid of the global pwent variable.
+
+2009-04-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Added comments.
+       * src/login.c: Close the user and group files before dropping root
+       privileges.
+
+2009-04-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: We do not need to keep the old umask. Discard the
+       umask() return value.
+
+2009-04-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/hushed.c, lib/prototypes.h, src/login.c: Change the
+       hushed() prototype to take a username instead of a passwd
+       structure in argument. The passwd entry is retrieved withing
+       hushed().
+
+2009-04-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/setugid.c: Updated comments.
+
+2009-04-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/failure.h, libmisc/failure.c, src/login.c: Added
+       username as first parameter of failtmp to avoid issues with
+       non-null terminated ut_user, unavailability of ut_user, incomplete
+       username (that should not happen currently).
+
+2009-04-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/ttytype.c: Add brackets and parenthesis.
+       * libmisc/ttytype.c: Avoid assignments in comparisons.
+
+2009-04-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/pwio.c, lib/shadowio.c, lib/groupio.c, lib/sgroupio.c: Fill
+       the password fields with zeros before they are freed.
+
+2009-04-19  Changwoo Ryu  <cwryu@debian.org>
+
+       * po/ko.po: Updated Korean translation.
+
+2009-04-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/login.c: Also check if the authentication token of the
+       user has to be updated in case the user was already authenticated.
+
+2009-04-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: fflg is already restricted to root. Move
+       pam_acct_mgmt(), in case of fflg, earlier. This is equivalent and
+       simplifies the code.
+
+2009-04-19  Paul Szabo  <psz@maths.usyd.edu.au>
+
+       * libmisc/utmp.c: Always call endutent or endutxent when setutent
+       or setutxent were used.
+
+2009-04-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Added comment to make sure PAM_RHOST or PAM_TTY do
+       not get set to unsanitized values.
+
+2009-04-17  Paul Szabo  <psz@maths.usyd.edu.au>
+
+       * NEWS, src/login.c: Do not trust the current utmp entry's ut_line
+       to set PAM_TTY.
+       * libmisc/utmp.c: Do not trust the current utmp entry's ut_line.
+       Always set ut_line based on ttyname(0).
+
+2009-04-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+       * po/*.po, man/po/*.po: Updated PO files.
+       * configure.in: Updated version number.
+
+2009-04-15  Peter Vrabec  <pvrabec@redhat.com>
+
+       * NEWS, src/userdel.c: Fixed SE Linux support. semanage should be
+       called at the end.
+       * src/useradd.c: Always call selinux_update_mapping() (i.e.
+       semanage), not only when -Z is used.
+
+2009-04-15  Peter Vrabec  <pvrabec@redhat.com>
+
+       * NEWS, srclib/getlong.c: Fix parsing of octal numbers.
+
+2009-04-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/login.c: Fix segfault when no user is provided on the
+       command line.
+
+2009-04-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * README, libmisc/system.c: Was contributed by Dan Walsh.
+
+2009-04-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEW, src/vipw.c: SE Linux: Set the default context to the
+       context of the file being edited. This ensures that the backup
+       file inherit from the file's context.
+
+2009-04-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/usermod.8.xml: There are no default values for --inactive
+       and --gid. If the options are no provided, the original values are
+       not changed.
+
+2009-04-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * po/shadow.pot, man/po/shadow-man-pages.pot: Regenerated.
+       * po/*.po, man/po/*.po: Updated PO files.
+
+2009-04-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/su.c: If there are no root account, or if the root account
+       has an UID != 0, default to the first UID 0 account.
+
+2009-04-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Restore the echoctl, echoke, onclr flags to the
+       terminal termio flags. Reset echoprt, noflsh, tostop. This
+       behavior seems to have change by mistake in earlier releases
+       (4.0.8, for no obvious reason).
+
+2009-04-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Fix the count of failures before login exits in
+       case of PAM enabled configurations.
+
+2009-04-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/passwd.1.xml: Document that passwd uses PAM to authenticate
+       and change passwords on PAM-enabled builds.
+
+2009-04-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newusers.c: Add more information to the mkdir and chown
+       failure messages.
+
+2009-04-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/po/fr.po: Updated some login.defs entries. Thanks to
+       Belkacem Abbas.
+
+2009-04-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.d/MAX_MEMBERS_PER_GROUP.xml,
+       man/login.defs.d/CONSOLE_GROUPS.xml: Fix typos.
+
+2009-04-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/es/Makefile.am: Disable the distribution of Spanish
+       manpages. They are outdated. Please contact
+       pkg-shadow-devel@lists.alioth.debian.org if you wish to provide
+       updates.
+
+2009-04-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c, src/useraddd.c: Fix the usage string so that it
+       does not change depending on the configure option. Use a format.
+
+2009-04-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c: Fix the usage of the unused macro.
+
+2009-04-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h, libmisc/age.c, src/expiry.c, src/login.c: A
+       shadow entry is now sufficient for agecheck. Remove the first
+       passwd entry parameter.
+
+2009-04-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c, src/usermod.c: Only call selinux_update_mapping()
+       if Zflg is set.
+       * src/userdel.c: Rename argv to args to avoid nameclash with the
+       main() parameters.
+
+2009-04-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/getgr_nam_gid.c: Added support for NULL argument.
+       * libmisc/chowntty.c: Reuse getgr_nam_gid(), and get rid of atol().
+
+2009-04-11  Peter Vrabec  <pvrabec@redhat.com>
+
+       * libmisc/find_new_gid.c, libmisc/find_new_uid.c: For system
+       accounts, return the first unused ID, starting from the max value.
+       This could be useful later to increase the static IDs range.
+
+2009-04-11  Peter Vrabec  <pvrabec@redhat.com>
+
+       * NEWS, src/useradd.c, man/useradd.8.xml: add -Z option to map
+       SELinux user for user's login.
+       * NEWS, src/usermod.c, man/usermod.8.xml: Likewise.
+       * libmisc/system.c, libmisc/Makefile.am, lib/prototypes.h: Added
+       safe_system(). Used to run semanage.
+       * lib/prototypes.h, libmisc/copydir.c: Make a
+       selinux_file_context() an extern function.
+       * libmisc/copydir.c: Reset SELinux to create files with default
+       contexts at the end of copy_tree().
+       * NEWS, src/userdel.c: Delete the SELinux user mapping for user's
+       login.
+
+2009-04-11  Peter Vrabec  <pvrabec@redhat.com>
+
+       * src/useradd.c (get_defaults): Close the default file after the
+       default values were read.
+
+2009-04-11  Christian Perrier  <bubulle@debian.org>
+
+       * po/sk.po: Slovak translation updated. Thanks to Ivan Masár
+
+2009-04-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/Makefile.am, lib/prototypes.h: Added sgetspent.c.
+
+2009-04-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * po/POTFILES.in: Added missing files. Sorted.
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/getdef.c: Use getlong instead of strtol/strtoul.
+       * libmisc/getlong, lib/getlong.c, libmisc/Makefile.am,
+       lib/Makefile.am: getlong.c moved from libmisc/ to lib/.
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/shadow.c: Replace strtol() by getlong(). Also detect more
+       issues in a numerical shadow entry field.
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/sgetspent.c: Only compile ifndef HAVE_SGETSPENT
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/sgetspent.c: Replace strtol() by getlong(). Also detect more
+       issues in a numerical shadow entry field.
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chage.c: More strtol() replaced by getlong().
+       * src/chage.c: expdays renamed to expdate. It is a date, even if
+       expressed in a number of days since Jan 1, 1970.
+       * src/chage.c: Likewise: lastday renamed to lstchgdate. Also fix
+       the --lastday documentation.
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h: pwd_to_spwd() should be declared if USE_PAM is
+       NOT defined.
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Replace getnumber() by getlong(). This permits to
+       get rid of another strtol().
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/getlong.c: Include both <stdlib.h> and <errno.h> needed
+       for strtol and errno, and do not include "defines.h" (not needed).
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c, src/usermod.c, libmisc/getgr_nam_gid.c,
+       libmisc/Makefile.am, lib/prototypes.h: Moved getgr_nam_gid() from
+       src/useradd.c and src/usermod.c to libmisc/getgr_nam_gid.c.
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Re-indent.
+       * src/useradd.c: Use getlong instead of get_number.
+       * src/useradd.c: Get rid of strtol.
+       * src/useradd.c: Provide better warning in case a default GROUP or
+       INACTIVE value is not valid in /etc/default/useradd.
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Re-indent.
+       * src/usermod.c: Specifying a inactivity value < -1 is not valid.
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: Prepare the next 4.1.3 release.
+       * po/*.po, man/po/*.po: Updated PO files.
+
+2009-04-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h, libmisc/addgrps.c: restrict add_groups() to
+       ifndef USE_PAM.
+       * lib/prototypes.h: Remove the declaration of add_cons_grps(). The
+       function does not exist.
+       * libmisc/setugid.c libmisc/age.c (setup_uid_gid): is_console is
+       never set ifndef USE_PAM. Change the prototype of setup_uid_gid()
+       when USE_PAM is not defined. This permits to remove add_groups
+       from PAM builds.  setup_uid_gid is already subject to
+       HAVE_INITGROUPS.
+       * libmisc/pwd2spwd.c (pwd_to_spwd): pwd_to_spwd() is not used in
+       PAM builds.
+
+2009-04-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: do_update_age is only used ifndef USE_PAM. Make it
+       more explicit.
+
+2009-04-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Set errno to 0 before calling strtol.
+
+2009-04-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/isexpired.c: If there are no shadow entry, there is no
+       need to convert the password entry to a shadow entry. The password
+       is valid.
+
+2009-04-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/usermod.8.xml: Split some paragraphs into smaller units.
+
+2009-04-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/shadow.5.xml: Rewrote to mention the meaning of special
+       values.
+
+2009-04-04  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/pwd2spwd.c, src/chpasswd.c, src/newusers.c,
+       src/passwd.c, src/pwck.c, src/pwconv.c, src/useradd.c,
+       src/usermod.c: On Jan 01, 1970, do not set the sp_lstchg field to
+       0 (which means that the password shall be changed during the next
+       login), but use -1 (password aging disabled).
+       * src/passwd.c: Do not check sp_min if sp_lstchg is null or -1.
+
+2009-04-04  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chage.c: When no shadow entry exist, the default sp_lstchg
+       value should be -1 (no aging) rather than 0 (password must be
+       changed).
+       * src/chage.c: For password expiration and inactivity, indicate
+       that the password must be changed when sp_lstchg is null rather
+       than indicating that expiration and inactivity are not enabled.
+
+2009-04-04  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/isexpired.c: Document the isexpired return value.
+
+2009-04-04  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/age.c: Return a specific message when sp_lstchg is null.
+
+2009-03-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/sgetpwent.c, lib/sgetgrent.c: Use get_uid and get_gid to
+       validate the UIDs or GIDs instead of atoi/strtol.
+
+2009-03-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/get_gid.c, libmisc/get_uid.c, libmisc/Makefile.am,
+       lib/get_gid.c, lib/get_uid.c, lib/Makefile.am: get_uid.c and
+       get_gid.c moved from libmisc/ to lib/.
+
+2009-03-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/grpck.c (check_members): When a member is removed, do not
+       increase the index.
+       * src/grpck.c: Fix typo in messages and comments.
+
+2009-03-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c: Call fsync before closing the backup file. This
+       ensures that the backup file is flushed to the storage medium.
+       * src/useradd.c: Likewise for the default file, faillog, lastlog,
+       and mail spool.
+       * src/usermod.c: Likewise for the faillog and lastlog file.
+       * src/vipw.c: Likewise for the backup file.
+       * libmisc/sulog.c: Likewise for the su log.
+
+2009-03-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmod.c: Embed gshadow related cleanup in #ifdef
+       SHADOWGRP.
+
+2009-03-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: get_number() replaced by getlong().
+       * src/usermod.c: When the user is renamed, make sure we do not
+       override an user with the same name (in passwd or shadow).
+
+2009-03-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c: log_gpasswd_success_gshadow is in the cleanup
+       stack only when the shadow group file is present.
+
+2009-03-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/userdel.c: Make sure the user exists in the shadow
+       database before calling spw_remove().
+       * NEWS, src/userdel.c: When the user's group is removed, make sure
+       the group is in the gshadow database before calling sgr_remove().
+       * src/userdel.c: Improve warning's wording.
+
+2009-03-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/cleanup.c: Fix del_cleanup. The arguments were not
+       desynchronized with the cleanup functions.
+       * libmisc/cleanup.c: cleanup_function_args is an array of void
+       pointer, not strings.
+
+2009-03-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/find_new_gid.c: Fix find_new_gid() the current group
+       database was not taken into account.
+
+2009-03-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/addgrps.c: Fix compilation warnings.
+
+2009-03-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/po/Makefile.in.in: xml2po cannot exclude one entity for
+       expansion. Make sure config.xml does not exist when the POT file
+       is created in order to keep the configurations in the POT file
+       * man/generate_translations.mak: make sure config.xml does not
+       exist neither when the translated XML is generated. Add the
+       missing %config; (strip out by xml2po). and make sure config.xml
+       is present when the translated manpage is generated.
+       * man/generate_mans.mak: config.xml is needed for the generation
+       of manpages (already in the .deps for the English manpages, but
+       needed for the translations).
+       * man/Makefile.am: Added missing CREATE_HOME.xml.
+
+2009-03-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * etc/login.defs: Added note for PAM enabled configurations.
+
+2009-03-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/Makefile.am: Compute the dependencies for building the
+       manpages.
+       * man/generate_mans.deps: Added Makefile dependency rules.
+
+2009-03-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/addgrps.c: Fix warnings.
+
+2009-03-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/po/fr.po: Added missing space.
+
+2009-03-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/lastlog.8.xml: Document that there might be entries, for
+       deleted users, that are not displayed.
+
+2009-03-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/chgpasswd.8.xml, man/chpasswd.8.xml: Fix the man page in
+       case SHA crypt is not supported.
+
+2009-03-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/vipw.8.xml: MAX_MEMBERS_PER_GROUP is not used by vipw and
+       vigr.
+
+2009-03-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.5.xml: Indicate that sg uses the same variables
+       as newgrp.
+       * man/login.defs.5.xml: vipw does not use any variable.
+       * man/login.defs.5.xml: In PAM enabled configurations, login still
+       uses some login.defs variables.
+
+2009-03-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/usermod.8.xml: use a <replaceable> instead of a
+       <emphasis remap='I'>.
+
+2009-03-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/newusers.8.xml: Document the behavior of newusers for each
+       field.
+       * man/newusers.8.xml: Do not add the note on PAM on non-PAM
+       enabled configurations.
+
+2009-03-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newusers.c: Make sure the SHA related variables are not
+       compiled when disabled at configuration time.
+       * src/newusers.c: Added FIXME
+       * src/chpasswd.c: Make sure the SHA related variables is not
+       compiled when disabled at configuration time.
+       * src/chgpasswd.c: Make sure the SHA related variables is not
+       compiled when disabled at configuration time.
+       * src/chgpasswd.c: Fix the test for getlong() failure.
+       * src/useradd.c, man/useradd.8.xml: Added long name for the -l
+       option: --no-log-init.
+       * src/faillog.c: Added support for the specification of a range of
+       users with -u.
+       * src/faillog.c: Do not call print_one() for users which do not
+       exist.
+       * src/faillog.c: Make sure the user's entry is not outside the
+       faillog file and initialize the faillog structure in that case.
+       * src/faillog.c: Move print_one() closer to print().
+       * src/faillog.c: reset(), setmax(), set_locktime() can also change
+       entries of user which do not exist.
+       * src/faillog.c: reset(), setmax() and set_locktime() shall not
+       create entries for users which have no entries if the value has to
+       be set to 0.
+       * src/faillog.c: reset(), setmax() and set_locktime(): better
+       handling of users whose entry is outside the faillog file.
+       * src/faillog.c: Improved option handling. Options can now be
+       specified in any order.
+       * src/faillog.c: Improved warnings when options are not
+       compatible or when the faillog cannot be open with the right mode.
+       * src/faillog.c: Only fstat the faillog file once.
+       * man/faillog.8.xml: Improved documentation.
+
+2009-03-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c: Remove the documentation of options from the
+       main() documentation. It will always be outdated here.
+
+2009-03-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/lastlog.c: lastlog variable renamed to ll to avoid name
+       clash with the structure.
+       * src/lastlog.c: check the offset in print_one() so that it is
+       used for the display of one entry or a set of entries.
+       * src/lastlog.c: Do not loop over the whole user database when -u
+       is used with a single user.
+       * src/lastlog.c: Check the size of the lastlog file so that we
+       can identify failures to read.
+
+2009-03-13  Mike Frysinger  <vapier@gentoo.org>
+
+       * libmisc/salt.c: Removed l64a prototype. The libc declaration is
+       non static, but the internal definition is static.
+
+2009-03-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c: log_gpasswd_success_gshadow only exists ifdef
+       SHADOWGRP.
+
+2009-03-08  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/getlong.c: Make sure the getlong argument is not empty.
+       * libmisc/get_gid.c, libmisc/get_uid.c, libmisc/Makefile.am,
+       lib/prototypes.h: Added get_uid() and get_gid() to parse user and
+       group IDs.
+       * NEWS, src/grpck.c, src/pwck.c: Issue a warning if an ID is set
+       to -1.
+       * NEWS, src/newusers.c, src/usermod.c, src/useradd.c,
+       src/groupmod.c, src/groupadd.c: Make sure no user or group are
+       created with an ID set to -1.
+
+2009-03-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * contrib/adduser-old.c, contrib/adduser.c: Do not use the target
+       of snprintf in one of the format's parameters.
+
+2009-03-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/groupmems.8.xml: groupmems does not create new user.
+
+2009-03-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, po/LINGUAS, po/kk.po: Added Kazakh translation. Thanks to
+       Timur Birsh <taem@linukz.org>.
+
+2009-02-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/find_new_gid.c, libmisc/find_new_uid.c: Avoid calling
+       getgrent()/getpwent() after they return NULL. This caused LDAP to
+       return at the beginning of the group/user entries.
+
+2009-01-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/nologin.8.xml: Fix typo (HYSTORY -> HISTORY).
+
+2009-01-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/gpasswd.c: Only report success to audit and syslog
+       when the changes are committed to the system. Do not log failure
+       for on-memory changes to audit or syslog. Make sure failures and
+       inconsistencies will be reported in case of unexpected failures
+       (e.g. malloc failures). Only specify an audit message if it is not
+       implicitly implied by the type argument. Removed fail_exit
+       (replaced by atexit(do_cleanups)). Log failures in case of
+       permission denied.
+
+2009-01-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.d/UMASK.xml: Indicate how UMASK is used and
+       limitations.
+       * man/limits.5.xml: Remove space before an end of tag.
+       * man/useradd.8.xml, man/login.defs.d/CREATE_HOME.xml,
+       man/login.defs.5.xml: Document the CREATE_HOME variable.
+       * etc/login.defs: Improve the documentation of UMASK.
+
+2009-01-06  Sebastian Rick Rijkers  <srrijkers@gmail.com>
+
+       * NEWS, src/su.c: Preserve COLORTERM in addition to TERM when su
+       is called with the -l option.
+
+2008-12-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/chkname.c: Use a bool when possible instead of integers.
+       * libmisc/chkname.c: Add brackets and parenthesis.
+
+2008-12-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/groupadd.8.xml, configure.in, man/config.xml.in: Use the
+       real group name length limit in the documentation.
+
+2008-12-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/Makefile.am: Only link with the needed library. When
+       compiled with PAM support, chfn, chsh, login, newgrp, passwd, and
+       su do not need the libcrypt library.
+
+2008-12-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/cleanup_group.c: Fix compilation when compiled without
+       shadow group support.
+
+2008-12-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupdel.c: Remove the fail_exit () declaration.
+
+2008-12-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c: Fix the support for usernames with arbitrary
+       length.
+
+2008-12-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupadd.c, src/groupdel.c, src/groupmod.c: Re-indent.
+       * src/groupmod.c: Do not add the command synopsis to the main ()
+       documentation. This avoids outdated information.
+       * libmisc/chkname.c: Remove outdated comments.
+
+2008-12-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/audit_help.c: Added audit_logger_message() to log
+       messages not related to an account.
+       * lib/prototypes.h, libmisc/cleanup.c, libmisc/cleanup_group.c,
+       libmisc/cleanup_user.c, libmisc/Makefile.am: Added stack of
+       cleanup functions to be executed on exit.
+       * NEWS, src/groupadd.c, src/groupdel.c, src/groupmod.c: Only
+       report success to audit and syslog when the changes are committed
+       to the system. Do not log failure for on-memory changes to audit
+       or syslog. Make sure failures and inconsistencies will be reported
+       in case of unexpected failures (e.g. malloc failures). Only
+       specify an audit message if it is not implicitly implied by the
+       type argument. Removed fail_exit (replaced by atexit(do_cleanups)).
+
+2008-12-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/gpasswd.c: Added support usernames with arbitrary
+       length.
+
+2008-11-27  Mike Frysinger  <vapier@gentoo.org>
+
+       * configure.in: Fix the "$enable_acct_tools_setuid" = "yes" test.
+
+2008-11-27  Mike Frysinger  <vapier@gentoo.org>
+
+       * NEWS, configure.in, libmisc/chkname.c: make group max length a
+       configure option.  The configure behavior encoded is:
+       <no option> -> default of 16 (like today);
+       --with-group-name-max-length -> default of 16;
+       --without-group-name-max-length -> no max length;
+       --with-group-name-max-length=n > max is set to n.
+
+2008-11-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/su.c: (!USE_PAM) Provide visible information indicating that
+       su was denied.
+
+2008-11-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/su.1.xml: Fix the su synopsis. username is referenced in the
+       manpage, not LOGIN.
+       * man/ja/login.1: Fix the path of the utmp and wtmp files.
+
+2008-11-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/chowntty.c: Improve the logs for fchown and fchmod
+       failures.
+       * libmisc/chowntty.c: Only closelog() when failure cause an exit.
+
+2008-11-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, libmisc/chowntty.c: Fix a race condition that could lead to
+       gaining ownership or changing mode of arbitrary files.
+       * NEWS, libmisc/chowntty.c, libmisc/utmp.c: is_my_tty() moved from
+       utmp.c to chowntty.c. checkutmp() now only uses an existing utmp
+       entry if the pid matches and ut_line matches with the current tty.
+       This fixes a possible DOS when entries can be forged in the utmp
+       file.
+       * libmisc/chowntty.c, src/login.c, lib/prototypes.h: Remove the
+       tty argument from chown_tty. chown_tty always changes stdin and
+       does not need this argument anymore.
+
+2008-10-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/gshadow.5.xml, man/shadow.5.xml, man/passwd.5.xml,
+       man/grpck.8.xml: Sorted SEE ALSO references.
+       * man/gshadow.5.xml: Added reference to grpck(8) and grpconv(8).
+       * man/pwck.8.xml: Added reference to grpck(8).
+       * man/shadow.5.xml: Added reference to pwck(8).
+       * man/passwd.5.xml: Added reference to pwck(8).
+       * man/grpck.8.xml: Added reference to pwck(8).
+
+2008-10-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/*.xml, man/login.defs.d/*.xml: Added copyright and licence
+       header.
+
+2008-09-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Always check the return value of the pam_* APIs.
+
+2008-09-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Use a dynamic buffer for usernames.
+       * src/login.c: Copy the name of the user authenticated by PAM to
+       username. This simplify later logging (avoid USE_PAM
+       conditional).
+       * src/login.c: Check that no username is specified with -r.
+       * src/login.c: Make sure a username is specified with -f.
+       * src/login.c: Explicitly tag the end of the #ifdef RLOGIN
+       sections.
+       * src/login.c: Erase the username later since it it used for the
+       fake password check (in case of empty password).
+       * src/login.c, man/login.1.xml: the username is not an optional
+       parameter of -f. Fix the getopt optstring, remove the parsing of
+       username in the -f processing block, and remove unnecessary checks
+       (username cannot be parsed twice anymore), better documentation of
+       the synopsis.
+
+2008-09-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Existence of pam_user was already checked. pwd was
+       already copied to pwent. Remove duplicated code.
+
+2008-09-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: check_flags() renamed process_flags(). All flag
+       processing blocs moved to process_flags().
+
+2008-09-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/logoutd.c, src/userdel.c: Re-indent. This helps pmccabe.
+
+2008-09-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Add missing closing }. This was probably never
+       noticed because UT_ADDR is never defined.
+       * src/login.c: Re-indent.
+
+2008-09-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Do not mix USE_PAM and !USE_PAM code.
+
+2008-09-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Use failent_user to log to audit. username is the
+       caller, not the user login tries to authenticate.
+       * src/login.c: Use pwd->pw_name instead of pwd->pw_uid. This might
+       be more precise (name must be unique, uid might not be).
+
+2008-09-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/passwd.1.xml: passwd cannot change the full name of the
+       user, the user's login shell; but it can change the account or
+       password validity period. Thanks to Reuben Thomas.
+
+2008-09-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Added missing declaration of Mflg.
+       * src/pwck.c: Only unlock files if they were locked before (e.g.
+       not in read-only mode).
+       * src/pwck.c: Quote the username in error messages (harmonization
+       with other messages).
+       * libmisc/find_new_gid.c: Fixed typo (s/grp->gr_gid/group_id/).
+       * libmisc/find_new_gid.c: Likewise.
+
+2008-09-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/setugid.c, src/login_nopam.c, src/suauth.c,
+       lib/getdef.c: Replace the %m format string by strerror(). This
+       avoids errno to be reset between the system call error and the
+       report function.
+
+2008-09-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c: Ignore the return value of umask() when the mask
+       is set to the old value.
+
+2008-09-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, etc/login.defs: New CREATE_HOME variable to tell useradd
+       to create a home directory for new users.
+       * src/useradd.c, man/useradd.8.xml: New -M/--no-create-home option
+       and CREATE_HOME usage. System accounts are not impacted by
+       CREATE_HOME.
+       * man/useradd.8.xml: Indicate that a new group is created by
+       default.
+       * src/useradd.c: Removed TODO item (moved to the TODO file).
+
+2008-09-11  Miroslav Kuře  <kurem@debian.cz>
+
+       * po/cs.po: Updated Czech translation.
+
+2008-09-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.d/USERGROUPS_ENAB.xml: Fix typo: new <para> tag
+       before the previous one is closed. This caused a missng
+       explanation for USERGROUPS_ENAB.
+
+2008-09-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/groupadd.8.xml: Remove the list of (short) options from the
+       SYNOPSIS. Replaced with [options] for consistency with other tools
+       and maintainability.
+
+2008-09-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       From RedHat's patch shadow-4.1.2-sysAccountDownhill.patch
+       Thanks to Peter Vrabec.
+       * NEWS, libmisc/find_new_gid.c, libmisc/find_new_uid.c: Build an
+       index of used IDs to avoid a database request for each id in the
+       allowed range (when the highest allowed ID is already used).
+       This speedups the addition of users or groups when the highest
+       allowed ID is already used. The additional memory usage of the
+       tools should be acceptable when UID_MAX/SYS_UID_MAX are set to a
+       reasonable number.
+
+2008-09-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: Fix the dependency of ACCT_TOOLS_SETUID on
+       USE_PAM. Build failed with --without-libpam.
+
+2008-09-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/copydir.c, configure.in: Check for the presence of
+       st_mtim and st_mtimensec, as for st_atim and st_atimensec.
+       * libmisc/copydir.c: Call utimes() after closing the file.
+
+2008-09-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c: Document the long options in the usage.
+
+2008-09-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS: Added configure --enable-account-tools-setuid (default) /
+       --disable-account-tools-setuid options. This permits to disable
+       the PAM authentication of the caller for chage, chgpasswd,
+       chpasswd, groupadd, groupdel, groupmod, newusers, useradd,
+       userdel, and usermod.  This authentication is not necessary when
+       these tools are not installed setuid root.
+       * configure.in: Added option --enable-account-tools-setuid to
+       enable/disable the usage of PAM to authenticate the callers of
+       account management tools: chage, chgpasswd, chpasswd, groupadd,
+       groupdel, groupmod, useradd, userdel, usermod.
+       * src/Makefile.am: Do not link the above tools with libpam if
+       account-tools-setuid is disabled.
+       * src/userdel.c, src/newusers.c, src/chpasswd.c, src/usermod.c,
+       src/groupdel.c, src/chgpasswd.c, src/useradd.c, src/groupmod.c,
+       src/groupadd.c, src/chage.c: Implement ACCT_TOOLS_SETUID
+       (--enable-account-tools-setuid).
+       * etc/pam.d/Makefile.am: Install the pam service file for the
+       above tools only when needed.
+
+2008-09-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/tz.c: tz() is only used when USE_PAM is not defined.
+       * lib/prototypes.h: Indicate functions whose presence depends on
+       the USE_PAM flag.
+
+2008-09-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Call open_files() and close_files().
+       * src/groupmems.c: Always call check_perms(), which takes care of
+       checking if --list is used.
+
+2008-09-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/obscure.c: Compare characters to '\0', not NULL.
+
+2008-09-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/defines.h: Do not include <config.h>. This complicate
+       undefining some configuration macros when the file is included
+       multiple times.
+       * libmisc/xgetXXbyYY.c, libmisc/xgetpwnam.c, libmisc/xgetpwuid.c,
+       libmisc/xgetgrgid.c, libmisc/xgetgrnam.c, libmisc/xgetspnam.c:
+       Include <config.h> from teh compiled C file, not the included
+       getXXbyYY.c.
+
+2008-09-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c, src/newusers.c, src/chpasswd.c, src/chfn.c,
+       src/groupmems.c, src/usermod.c, src/groupdel.c, src/chgpasswd.c,
+       src/useradd.c, src/groupmod.c, src/groupadd.c, src/chage.c,
+       src/chsh.c: Simplify the PAM error handling. Do not keep the pamh
+       handle, but terminate the PAM transaction as soon as possible if
+       there are no PAM session opened. If the username cannot be
+       determined, report it as such (not a PAM authentication failure).
+       * src/useradd.c, src/userdel.c, src/usermod.c: It is no more
+       needed to initialize retval to PAM_SUCCESS.
+
+2008-09-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newgrp.c, src/userdel.c, src/grpck.c, src/gpasswd.c,
+       src/newusers.c, src/pwconv.c, src/chpasswd.c, src/logoutd.c,
+       src/chfn.c, src/groupmems.c, src/usermod.c, src/pwunconv.c,
+       src/expiry.c, src/groupdel.c, src/chgpasswd.c, src/useradd.c,
+       src/su.c, src/groupmod.c, src/passwd.c, src/pwck.c,
+       src/groupadd.c, src/chage.c, src/login.c, src/grpconv.c,
+       src/groups.c, src/grpunconv.c, src/chsh.c: Prog is now global (not
+       static to the file) so that it can be used by the helper functions
+       of libmisc.
+       * lib/prototypes.h: Added extern char *Prog.
+       * libmisc/find_new_gid.c, libmisc/find_new_uid.c: Indicate the
+       program name with the warning.
+
+2008-09-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: Check if AUDIT_ADD_USER, AUDIT_DEL_USER,
+       AUDIT_ADD_GROUP, and AUDIT_DEL_GROUP are defined in <libaudit.h>.
+
+2008-09-04  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Fix comment of lflg: it is also used for faillog.
+
+2008-09-04  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/groupmems.c, man/groupmems.8.xml: Document the long
+       options.
+
+2008-09-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h, libmisc/audit_help.c: Define new type
+       shadow_audit_result for the result argument of audit_logger().
+       This permits stronger type checking and a better readability of
+       the results (SHADOW_AUDIT_FAILURE/SHADOW_AUDIT_SUCCESS constants).
+       * src/groupadd.c, src/groupdel.c, src/useradd.c, src/userdel.c:
+       Use the SHADOW_AUDIT_FAILURE/SHADOW_AUDIT_SUCCESS results instead
+       of 0 or 1 in audit_logger().
+
+2008-09-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c: Log failures to remove the mailbox to syslog and
+       audit.
+       * src/userdel.c: Log successful removal of home directory to audit
+       only in case of success.
+       * src/userdel.c: Move the audit log of failure to remove the home
+       directory before the call to function that may exit.
+       * src/userdel.c: Document that errors is only used to count errors
+       during the removal of the home directory.
+
+2008-09-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Log errors to syslog in grp_update() since
+       changes have started to be reported to syslog.
+       * src/userdel.c: Fix some result parameters sent to
+       audit_logger().
+
+2008-09-02  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS: Following changes from a patch contributed by Steve Grubb
+       <sgrubb@redhat.com>
+       * src/groupadd.c: Log to audit with type AUDIT_ADD_GROUP instead
+       of AUDIT_USER_CHAUTHTOK.
+       * src/groupdel.c: Log to audit with type AUDIT_DEL_GROUP instead 
+       of AUDIT_USER_CHAUTHTOK.
+       * src/useradd.c: Log to audit with type AUDIT_ADD_USER /
+       AUDIT_ADD_GROUP / AUDIT_USYS_CONFIG instead of
+       AUDIT_USER_CHAUTHTOK.
+       * src/useradd.c: Add missing logs to audit.
+       * src/userdel.c: Log to audit with type AUDIT_DEL_USER /
+       AUDIT_DEL_GROUP instead of AUDIT_USER_CHAUTHTOK.
+       * src/userdel.c: Add missing logs to audit.
+
+2008-08-31  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Remove duplicated gr_open().
+
+2008-08-30  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/useradd.8.xml: Document the /etc/default/useradd variables.
+       * man/useradd.8.xml: Fix the documentation of the GROUP variable
+       (and -g/--gid option).
+       * man/useradd.8.xml: Document that -o is only valid with -u
+
+2008-08-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * shadow.spec.in: Fix the source (new FTP).
+
+2008-08-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/su.c: Add brackets and parenthesis.
+       * src/su.c: Avoid implicit conversion of pointers to booleans.
+
+2008-08-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/list.c: Remove historical comment.
+       * libmisc/list.c: Added assertions for non NULL parameters.
+
+2008-08-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwconv.c, src/pwunconv.c: Fail if unexpected parameters are
+       provided.
+
+2008-08-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Add brackets and parenthesis.
+       * src/passwd.c: Avoid implicit conversion of pointers to booleans.
+       * src/passwd.c: Avoid assignments in comparisons.
+
+2008-08-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/groupmems.c, man/groupmems.8.xml: Added support for
+       shadow groups.
+       * src/groupmems.c: Use fail_exit() instead of exit().
+
+2008-08-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: The grp structure returned by gr_locate is a
+       const. Duplicate this structure before working on it.
+       * src/groupmems.c: Do not fail and do not display warnings if a
+       close failure happens with the --list option. (Files are opened
+       read-only).
+       * src/groupmems.c: Avoid mixed declarations and code.
+
+2008-08-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c: Replace the 'valid' variable by is_valid to avoid
+       clashes with the valid() function.
+
+2008-08-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/obscure.c: Add brackets and parenthesis.
+       * libmisc/obscure.c: Avoid implicit conversion of pointers / chars to
+       booleans.
+       * libmisc/obscure.c: Simplify the list of if.
+
+2008-08-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Fix a typo in the Usage string.
+
+2008-08-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/grpconv.c, src/groups.c: Name the parameters in the
+       prototypes of the static functions.
+       * src/grpconv.c, src/grpunconv.c, src/logoutd.c: Fail if
+       unexpected parameters are provided.
+       * src/grpconv.c, src/grpunconv.c: Indicate that argc is not used
+       in the no SHADOWGRP version.
+
+2008-08-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chgpasswd.c, src/chpasswd.c: Removed variable ok, which is
+       no more used.
+
+2008-08-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chage.c: Fix the format for long integers (from %ul to %lu).
+
+2008-08-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c: Mark the line and host arguments of setutmp() as
+       not used in the __linux__ version.
+
+2008-08-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/nscd.c: Avoid redefinition of _GNU_SOURCE.
+
+2008-08-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: Indentation fix.
+       * configure.in, src/login.c: Do not use HAVE_PAM_FAIL_DELAY, but
+       HAS_PAM_FAIL_DELAY, to avoid a redefinition with Linux PAM.
+
+2008-08-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Added functions add_user(), remove_user(), and
+       purge_members() to ease the support of gshadow.
+
+2008-08-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/expiry.c: Use Basename for Prog.
+       * src/expiry.c: Added missing OPENLOG.
+
+2008-08-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/nscd.c: Make sure the file is not empty when configured
+       without nscd support.
+
+2008-08-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: Remove the USE_NSCD AM_CONDITIONAL (USE_NSCD is
+       not used in any Makefile.am).
+       * configure.in: Make sure posix_spawn is present when configured
+       with nscd support.
+
+2008-08-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/groupmem.c, lib/pwmem.c, lib/shadowmem.c: Added brackets and
+       parenthesis.
+       * lib/groupmem.c, lib/pwmem.c, lib/shadowmem.c: Avoid assignments
+       in comparisons.
+
+2008-08-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/mail.c: Added brackets and parenthesis.
+       * libmisc/mail.c: Avoid assignments in comparisons.
+
+2008-08-26  Tobias Poschwatta  <tp@fonz.de>
+
+       * NEWS: Added support for uclibc.
+       * configure.in, libmisc/copydir.c: futimes() and lutimes() are not
+       standard. Check if they are implemented before using them. Do not
+       set the time of links if lutimes() does not exist, and use
+       utimes() as a replacement for futimes().
+       * configure.in, lib/nscd.h, lib/nscd.c: Added --with-nscd and
+       --without-nscd flags to support systems without nscd.
+       * lib/groupio.h, lib/prototypes.h, lib/pwio.h, lib/sgetgrent.c:
+       Include <sys/types.h> before <pwd.h> and <grp.h>. It is necessary
+       for the definition of uid_t and gid_t.
+       * lib/pwmem.c: do not include <pwd.h>, "pwio.h" is sufficient
+       here.
+       * configure.in: Check if the stat structure has a st_atim or
+       st_atimensec field.
+       * libmisc/copydir.c: Conditionally use the stat's st_atim and
+       st_atimensec fields.
+
+2008-08-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Handle the options alphabetically.
+
+2008-08-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: When removing an user, check if deluser is on
+       the list, not adduser. This fixes a segmentation fault for every
+       call of groupmems -d.
+       * libmisc/list.c: Add assertions to help identifying these issues.
+       * libmisc/list.c: Avoid implicit conversion of pointers to
+       booleans.
+
+2008-08-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/groupmems.c: Use the "groupmems" PAM service name
+       instead of "groupmod".
+
+2008-08-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chfn.c: Merge some translated messages.
+       * src/groupmems.c, src/groupadd.c, src/gpasswd.c, src/chsh.c,
+       src/chfn.c: Harmonize *_update() failure messages.
+       * src/groupmems.c: Harmonize gr_close() failure messages.
+       * src/newgrp.c: Harmonize "unknown GID" messages.
+       * src/newusers.c: Move the pwd declaration to a inner block scope.
+
+2008-08-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Harmonize some error messages.
+       * src/userdel.c: Add log to syslog when the mail file could not be
+       removed.
+       * src/userdel.c: Give more context an error message (merge with
+       perror()).
+       * src/usermod.c: Harmonize some error messages.
+
+2008-08-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Check the return value of gr_update().
+       * src/chage.c, src/chfn.c, src/chgpasswd.c, src/chpasswd.c,
+       src/chsh.c, src/gpasswd.c, src/groupadd.c, src/groupmems.c,
+       src/groupmod.c, src/grpck.c, src/grpconv.c, src/grpunconv.c,
+       src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c,
+       src/useradd.c, src/userdel.c, src/usermod.c: Harmonize the error
+       message sent to stderr in case of *_update () failure.
+       * src/chage.c, src/chsh.c, src/groupadd.c, src/passwd.c: Do not
+       log to syslog when pw_update() or spw_update() fail.
+       * src/newusers.c: Do not log specific error message to stderr when
+       sgr_update() fails.
+       * src/pwconv.c: Remove duplicated definition of Prog.
+
+2008-08-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chfn.c, src/chsh.c, src/expiry.c, src/gpasswd.c,
+       src/newgrp.c, src/passwd.c, src/su.c: Use the same stderr and
+       syslog warnings when the username cannot be determined.
+       * src/newgrp.c: Reuse the same stderr message for groups which do
+       not exist in the system.
+
+2008-08-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Log errors while *_close to syslog.
+
+2008-08-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/grpconv.c: Use Basename for the definition of Prog. Prog
+       needs a file visibility.
+       * src/grpunconv.c: Likewise.
+
+2008-08-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chfn.c: Do not exit on pw_unlock failures.
+       * src/grpconv.c, src/grpunconv.c, src/pwconv.c, src/pwunconv.c,
+       src/vipw.c: Open syslog with the right identification name.
+       * src/vipw.c: Log unlock errors to syslog.
+       * src/vipw.c: Log edits to syslog.
+       * src/chage.c, src/chfn.c, src/chsh.c, src/gpasswd.c,
+       src/groupadd.c, src/groupdel.c, src/groupmod.c, src/grpconv.c,
+       src/grpunconv.c, src/passwd.c, src/pwck.c, src/pwunconv.c,
+       src/useradd.c, src/usermod.c: Harmonize the syslog levels. Failure
+       to close or unlock are errors. Failure to open files are warnings.
+
+2008-08-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newusers.c: Open syslog with the right identification name.
+       * src/newusers.c: Mark the files as locked only if they are really
+       locked (i.e. if shadow is not enabled, the files are not locked).
+
+2008-08-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/gpasswd.c: Use getopt_long instead of getopt. Added
+       support for long options --add (-a), --delete (-d),
+       --remove-password (-r), --restrict (-R), --administrators (-A),
+       and --members (-M) 
+       * man/gpasswd.1.xml: Document the new long options.
+       * src/gpasswd.c: The sgrp structure is only used if SHADOWGRP is
+       defined.
+
+2008-08-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/grpck.c: Added function fail_exit(). Check failure to unlock
+       files. Report errors to stderr and syslog, but continue.
+       * src/grpconv.c: Check failure to unlock files. Report errors to
+       stderr and syslog, but continue.
+
+2008-08-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Check failure to unlock files. Report errors to
+       stderr and syslog, but continue.
+
+2008-08-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chfn.c, src/chgpasswd.c, src/chpasswd.c, src/gpasswd.c,
+       src/groupadd.c, src/groupdel.c, src/groupmems.c, src/groupmod.c,
+       src/grpconv.c, src/grpunconv.c, src/newusers.c, src/pwconv.c,
+       src/pwunconv.c, src/useradd.c, src/userdel.c: Harmonize the name
+       of the variables keeping the lock status, to match the shadow
+       library prefixes.
+
+2008-08-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chage.c, src/chgpasswd.c, src/chpasswd.c, src/chsh.c,
+       src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmems.c,
+       src/groupmod.c, src/grpck.c, src/grpconv.c, src/grpunconv.c,
+       src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c,
+       src/pwunconv.c, src/useradd.c, src/userdel.c, src/usermod.c: In
+       case of a lock failure, indicate to the user that she can try
+       again later. Do not log to syslog.
+
+2008-08-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/passwd.c: For compatibility with other passwd version,
+       the --lock an --unlock options do not lock or unlock the user
+       account anymore.  They only lock or unlock the user's password.
+       * man/passwd.1.xml: Document above change. Document how an account
+       can be locked and what a password lock means.
+
+2008-08-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/groupadd.8.xml: Fix the regular expression for group policy.
+       The final $ character is optional.
+       * man/groupadd.8.xml: Likewise.
+       * man/groupadd.8.xml: Indicate the maximum size of usernames.
+
+2008-08-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/po/pl.po: Fix typo in the Polish translation (see
+       http://bugs.debian.org/491460)
+
+2008-08-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/pl/Makefile.am: Do not build the Polish translation of
+       login.1 and su.1 (not enough translated). See
+       http://bugs.debian.org/491460
+
+2008-08-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/shadow.5.xml: Fix typo. The password must be changed before
+       the maximum number of days, not after.
+
+2008-08-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Harmonize the unlock failure messages.
+
+2008-08-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwck.c: Added fail_exit().
+       * src/pwck.c: Report failure to unlock files to stderr and
+       syslog.
+       * src/pwck.c: Report failure to sort to stderr, and exit with
+       E_CANTSORT.
+       * man/pwck.8.xml: Document return code 6 (E_CANTSORT).
+
+2008-08-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/vipw.c: Report failures to remove files to stderr.
+       * src/vipw.c: Report failures to unlock files to stderr.
+
+2008-08-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/groupmems.c: Added syslog support.
+       * src/groupmems.c: members() renamed display_members() to
+       avoid name clash with its members argument.
+       * src/groupmems.c: Report failure to unlock to syslog.
+       * src/groupmems.c: Harmonize error messages.
+       * src/groupmems.c: Report failures to write the new group file to
+       syslog (gr_close() failure).
+       * src/groupmems.c: Don't use fail_exit for non-failure exit.
+
+2008-08-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chsh.c: Added fail_exit().
+       * src/chsh.c: Use fail_exit() instead of exit(), this avoid
+       calling closelog() every times.
+       * src/chsh.c: Ignore the return value or pam_end().
+       * src/chsh.c: Simplify the PAM error handling.
+       * src/chsh.c: Report failure to unlock files to stderr and
+       syslog.
+
+2008-08-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chpasswd.c: Added fail_exit().
+       * src/chpasswd.c: Added support for syslog.
+       * src/chpasswd.c: Report failure to unlock files to stderr and
+       syslog.
+       * src/chpasswd.c: Simplify the PAM error handling.
+       * src/chpasswd.c: Report failure during *_close() to syslog.
+       * src/chpasswd.c: Ignore the return value or pam_end().
+
+2008-08-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chgpasswd.c: Added fail_exit().
+       * src/chgpasswd.c: Added support for syslog.
+       * src/chgpasswd.c: Report failure to unlock files to stderr and
+       syslog.
+       * src/chgpasswd.c: Simplify the PAM error handling.
+       * src/chgpasswd.c: Report failure during *_close() to syslog.
+       * src/chgpasswd.c: Ignore the return value or pam_end().
+
+2008-08-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c: Report failure to remove entries from group or
+       gshadow to stderr.
+       * src/userdel.c: Fail in case of failure during the write of a
+       user or group database. Report errors to syslog.
+       * src/userdel.c: Do not unlock non locked files.
+       * src/userdel.c: Report failure to unlock the passwd or shadow
+       file to stderr and syslog.
+
+2008-08-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwunconv.c: Report failure to unlock the passwd or shadow
+       file to stderr and syslog.
+
+2008-08-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Report failure to unlock files to stderr and
+       syslog.
+
+2008-08-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newusers.c: Report failure to unlock files to stderr and
+       syslog.
+       * src/newusers.c: In case of error when files are open or closed,
+       indicate the failing file.
+       * src/newusers.c: Do not try to unlock the files manually since
+       this is done in fail_exit.
+
+2008-08-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chage.c: Report failure to unlock the passwd or shadow file
+       to stderr and syslog.
+
+2008-08-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwconv.c: Report failure to unlock the passwd or shadow file
+       to stderr and syslog.
+       * src/pwconv.c: Report failure to chmod the backup file.
+
+2008-08-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/grpunconv.c: Report failure to unlock the group or gshadow
+       files to stderr and syslog.
+
+2008-08-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chfn.c: Added fail_exit(). Check if the passwd file is
+       locked. Report failures to unlock to stderr and syslog.
+       * src/chfn.c: Is case of failure, use fail_exit() rather than
+       exit().
+       * src/chfn.c: Ignore the return value of pam_end().
+
+2008-08-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/groupio.c, lib/groupio.h, lib/pwio.c, lib/pwio.h,
+       lib/sgroupio.c, lib/sgroupio.h, lib/shadowio.c, lib/shadowio.h:
+       Added *_dbname() functions to retrieve the name of the databases.
+       * lib/groupio.c, lib/groupio.h, lib/pwio.c, lib/pwio.h,
+       lib/sgroupio.c, lib/sgroupio.h, lib/shadowio.c, lib/shadowio.h:
+       *_name() functions renamed *setname().
+       * src/grpck.c, src/pwck.c: Likewise.
+       * lib/groupio.h, lib/pwio.h, lib/sgroupio.h, lib/shadowio.h: Added
+       the name of the arguments to the prototypes.
+       * src/chage, src/chfn.c, src/chgpasswd.c, src/chpasswd.c,
+       src/chsh.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c,
+       src/groupmod.c, src/grpck.c, src/grpconv.c, src/grpunconv.c,
+       src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c,
+       src/pwunconv.c, src/useradd.c, src/userdel.c, src/usermod.c:
+       Harmonize the erro & syslog messages in case of failure of the
+       *_lock(), *_open(), *_close(), *_unlock(), *_remove() functions.
+       * src/chgpasswd.c, src/chpasswd.c, src/usermod.c: Avoid
+       capitalized messages.
+       * src/chpasswd.c, src/useradd.c, src/usermod.c: Harmonize messages
+       in case of inexistent entries.
+       * src/usermod.c:  Harmonize messages in case of already existing
+       entries.
+       * src/newusers.c, src/useradd.c: Simplify PAM error handling.
+       * src/useradd.c: Report failures to unlock files (stderr, syslog,
+       and audit). But do not fail (continue).
+       * src/useradd.c (open_files): Do not report to syslog & audit
+       failures to lock or open the databases. This might be harmless,
+       and the logs were not already informed that a change was
+       requested.
+       * src/usermod.c: It's not the account which is unlocked, but its
+       password.
+
+2008-08-02  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupadd.c: Harmonize error & syslog messages.
+       * src/groupadd.c: Add logging to syslog & audit on lock/unlock
+       failures.
+       * src/groupadd.c: Only call gr_unlock() and sgr_unlock() in the
+       group or gshadow files were previously locked.
+       * src/groupadd.c: Make sure failures are reported to syslog/audit
+       after the change is mentioned.
+       * src/groupmod.c: Harmonize error & syslog messages.
+       * src/groupmod.c: Add logging to syslog & audit on lock/unlock
+       failures.
+       * src/groupmod.c: Make sure issues are reported to syslog or audit
+       after the change is mentioned.
+       * src/groupdel.c: Harmonize error & syslog messages.
+       * src/groupdel.c: Add logging to syslog & audit on lock/unlock
+       failures.
+       * src/groupdel.c: Only call gr_unlock() and sgr_unlock() in the
+       group or gshadow files were previously locked.
+       * src/groupdel.c: Simplify the handling of PAM errors.
+
+2008-08-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c: Harmonize error & syslog messages.
+       * src/gpasswd.c: Warn and log to syslog and audit when group or
+       gshadow cannot be unlocked, but do not fail.
+
+2008-08-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chfn.c, src/chsh.c, src/groupdel.c, src/groupmems.c,
+       src/groupmod.c, src/grpck.c, src/login.c, src/logoutd.c,
+       src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c,
+       src/suauth.c, src/useradd.c, src/userdel.c, src/usermod.c,
+       src/vipw.c: Complete the switch from the `' quotation style to ''.
+       Do it also in SYSLOG messages. Quote some parameters. All this
+       permits to merge some messages.
+
+2008-07-30  Lukáš Kuklínek  <lkukline@redhat.com>
+
+       * src/groupmems.c: Only check if the adduser user exists when an
+       user is specified with -a.
+
+2008-07-30  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Fix the groupmems' usage message. The -D option
+       is in fact -p.
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Replace an if test by an else.
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Ignore the return value of fputs().
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c (whoami): Make sure usr and grp are not NULL
+       before dereferencing them.
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Use xstrdup() rather than strdup().
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Add parenthesis.
+       * src/groupmems.c: Avoid implicit conversion of pointers / chars to
+       booleans.
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/groupmems.c: Allow everybody to list the users of a group.
+       This information is publicly available in /etc/group.
+       * NEWS, src/groupmems.c: Open /etc/group read only for the -l option.
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/groupmems.8.xml: Sort options alphabetically.
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c (check_perms): Simplify. Always call pam_end()
+       at the end of the authentication.
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Add fail_exit() to remove the group lock file
+       in case of failure. Replace the calls to exit() by fail_exit().
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Reduce the number of checks. Isolate the
+       parameters setting and permissions checking.
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Add functions process_flags() and check_perms()
+       from code of main().
+       * src/groupmems.c: Harmonize the failure message in case of PAM
+       failure with the other programs.
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Remove isgroup(), which always returns TRUE.
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Reuse the functions from libmisc/list.c to deal
+       with user lists. addtogroup() was broken when realloc() move the
+       memory area.
+       * src/groupmems.c: Report failures with the name of the program.
+
+2008-07-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: EXIT_READ_GROUP changed to EXIT_INVALID_GROUP.
+       * src/groupmems.c: EXIT_INVALID_USERNAME changed to EXIT_INVALID_USER.
+
+2008-07-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Really use booleans.
+       * src/groupmems.c: Change isroot() to a macro that returns a
+       boolean.
+
+2008-07-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/defines.h: Make sure the booleans are defined before using
+       them.
+
+2008-07-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Added Prog global variable to indicate the name
+       of the program in error messages.
+
+2008-07-22  Lukáš Kuklínek  <lkukline@redhat.com>
+
+       * NEWS, src/groupmems.c: Check if the user added to group actually
+       exist. RedHat bug #455603
+       * NEWS, src/groupmems.c: Check if the group exists in the group
+       local database (/etc/group). RedHat bug #456088
+
+2008-07-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h: Fix getrange prototype.
+
+2008-07-21  Seraphim Mellos  <mellos@ceid.upatras.gr>
+
+       * README, NEWS, configure.in, lib/pam_defs.h, src/login.c: Add
+       support for OpenPAM.
+
+2008-07-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chage.c: Ignore the return value of pam_end() before exiting.
+       * src/chage.c: Ignore return values of strftime(), snprintf(),
+       puts(), printf(), and fputs().
+       * src/chage.c: Check the return value of asctime().
+
+2008-07-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/gshadow.c: Avoid assignments in comparison.
+
+2008-07-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * ChangeLog, NEWS, src/login.c: Re-inject the changes from 4.1.2.1.
+
+2008-07-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Do not call usr_update() if it will have no
+       effects. This avoid checking if the user exists in the local passwd
+       file if not necessary, and thus allow to add LDAP users to local
+       groups. (The user is already checked against the system
+       configuration with getpwnam()). Thanks to Dan Kopecek.
+
+2008-07-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Split update_files() into update_lastlog() and
+       update_faillog(). Report errors (but don't fail) if the file
+       exist, but open(), lseek(), read(), write(), or close() fails.
+       * src/usermod.c: Add brackets and parenthesis.
+       * src/usermod.c: Ignore the return value of pam_end() before
+       exiting.
+       * src/usermod.c: Ignore the return value of strftime(),
+       snprintf(), and puts().
+       * src/usermod.c: Check the return value of gmtime() and asctime(),
+       and output the raw time_t on failures.
+
+2008-07-11  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/setugid.c: Add brackets.
+
+2008-06-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/env.c: Avoid implicit conversion of pointers / chars to
+       booleans.
+       * libmisc/env.c: Add brackets and parenthesis.
+       * libmisc/env.c: Ignore the return value of puts() and fputs().
+       * libmisc/env.c: Avoid multi-statements lines.
+
+2008-06-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c: Avoid implicit conversion of pointers / chars to
+       booleans.
+       * libmisc/utmp.c: Add brackets and parenthesis.
+       * libmisc/utmp.c: Exit with the EXIT_FAILURE status code in case
+       of failure.
+       * libmisc/utmp.c: Avoid assignments in comparisons.
+       * lib/prototypes.h, libmisc/utmp.c: Change setutmp()'s prototype
+       to return an int because pututline() and pututxline() may fail.
+
+2008-06-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/audit_help.c: Added one string for translation.
+       * po/POTFILES.in: Added libmisc/audit_help.c,
+       libmisc/find_new_gid.c, libmisc/find_new_uid.c, libmisc/getlong.c,
+       libmisc/getrange.c, libmisc/xgetXXbyYY.c, and libmisc/yesno.c.
+       Removed libmisc/find_new_ids.c
+
+2008-06-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: If the faillog file exist, warn in case of
+       failure when open(), lssek(), write() or close() fails when the
+       new user's faillog entry is reset.
+       * src/useradd.c: Ditto for the lastlog entry.
+
+2008-06-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/limits.c: Add brackets and parenthesis.
+       * libmisc/limits.c: Avoid implicit conversion of pointers /
+       integers to booleans.
+       * libmisc/limits.c: Ignore the return value of umask(). We will
+       never return to the original umask.
+       * libmisc/limits.c: Avoid multi-statements lines.
+       * libmisc/limits.c: Added default to a switch(). Report invalid
+       limit strings to syslog.
+       * libmisc/limits.c: Ignore the return value of fclose().
+       /etc/limits is open read-only.
+       * libmisc/limits.c: Ignore the return value of fputs() and
+       sleep().
+       * libmisc/limits.c: Check the return value of nice() and
+       set_filesize_limit(), and report errors to syslog.
+
+2008-06-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/ulimit.c, lib/prototypes.h: Return failures of
+       set_filesize_limit(). Change the prototype to return an int
+       instead of void.
+
+2008-06-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/failure.c: Try to close the open file if a failure
+       occured during lseek(), read() or write().
+
+2008-06-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/log.c: Check return values. If lseek() failed, avoid
+       reading or writing at an unspecified location. Log to syslog in
+       case of failure.
+       * libmisc/log.c: Use the right casts.
+
+2008-06-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/find_new_ids.c, libmisc/find_new_gid.c,
+       libmisc/find_new_uid.c, libmisc/Makefile.am, lib/prototypes.h:
+       Split find_new_ids.c into find_new_gid.c and find_new_uid.c to
+       ease the description of login.defs variables in the different
+       tools.
+
+2008-06-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/failure.c: Ignore the return value of strftime() and
+       printf().
+       * libmisc/failure.c: Fix syslog call. The UID is not available.
+       User the username specified in the utmp/utmpx entry.
+
+2008-06-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/defines.h: Avoid implicit conversion of pointers to
+       booleans.
+       * lib/defines.h: Ignore return values of setlocale() except the
+       first call.
+       * lib/defines.h: Fix a splint observer warning by using an
+       intermediate variable (old_locale).
+
+2008-06-15  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/failure.c: Check return values. If lseek() failed, avoid
+       reading or writing at an unspecified location. Log to syslog in
+       case of failure when reading a faillog entry or writing in
+       faillog or btmp.
+       * libmisc/failure.c: Check if the file exist before opening it.
+       * libmisc/failure.c: Log failures of open() and close() when
+       necessary.
+
+2008-06-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h: Add the getrange() prototype.
+       * lib/prototypes.h: Fix the valid_field() prototype (does not
+       return an bool).
+       * lib/prototypes.h: Fix the valid() prototype (it does return a
+       bool).
+
+2008-06-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/getdef.c: Fix the getdef_ulong() prototype.
+       * lib/getdef.h: Fix the getdef_ulong() prototype.
+
+2008-06-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/lastlog.c: Use getrange to parse the range of users.
+       * src/lastlog.c: umin and umax do not need to be signed long. Use
+       an unsigned long which might be needed to parse a GID or UID. Add
+       the has_umin and has_umax to replace the -1 values.
+       * src/lastlog.c: Cast dates to time_t.
+       * src/lastlog.c: Prefix lastlog errors with "lastlog: ".
+
+2008-06-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/getlong.c: Reset errno before calling strtol().
+       Otherwise, errno could be already set to ERANGE.
+
+2008-06-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/Makefile.am, libmisc/getrange.c: Added function to parse
+       a range (useful for lastlog).
+
+2008-06-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chsh.c: <signal.h> is not needed.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h: Define AUDIT_NO_ID to (unsigned int) -1. This
+       value should be used when the ID should not be considered.
+       * lib/prototypes.h: Fix the prototype of do_rlogin() according to
+       earlier changes.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/shadow.c: Use SHADOW_SP_FLAG_UNSET for the initial
+       value of spwd.sp_flag.
+       * lib/shadow.c: Add brackets.
+       * lib/shadow.c: Avoid implicit conversion of pointers to
+       booleans.
+       * lib/shadow.c: The size argument of fgets is an int, not a
+       size_t.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c: len should be typed ssize_t as it is the return
+       of read(), and is compared to 0. Cast to size_t when necessary.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/find_new_ids.c: Use getdef_ulong to retrieve UIDs/GIDs
+       from login.defs. Type constants to long integers.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/gshadow.c: Use a bool when possible instead of int integers.
+       * lib/gshadow.c: Remove __setsgNIS() -never used).
+       * lib/gshadow.c: Avoid multi-statements lines.
+       * lib/gshadow.c: Avoid assignments in comparisons.
+       * lib/gshadow.c: ptr[nelem] is a string. Initialize it to NULL
+       instead of '\0'.
+       * lib/gshadow.c: Add brackets and parenthesis.
+       * lib/gshadow.c: The size argument of strncpy is a size_t and the
+       size argument of fgets is an int.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/groupio.c: Add brackets.
+       * lib/groupio.c: Make sure malloc receives a size_t.
+       * lib/groupio.c: Avoid multi-statements lines.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/sgetspent.c: Use SHADOW_SP_FLAG_UNSET for the initial
+       value of spwd.sp_flag.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/getdef.h, lib/getdef.c: Add getdef_ulong().
+       * lib/getdef.c: Added TODOs because of lack of error checking.
+       * lib/getdef.c: The size argument of fgets is an int, not a
+       size_t.
+       * lib/getdef.c: Avoid multi-statements lines.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/id.c: Make sure malloc receives a size_t.
+       * src/id.c: Use a %lu format and cast group and user IDs to
+       unsigned long integers.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/sulogin.c: Ignore the return value of signal().
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groups.c: sys_ngroups is only used when HAVE_GETGROUPS is
+       defined.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/faillog.c: Ignore return value of time() when use with a
+       non NULL argument.
+       * src/faillog.c: Use a %lu format and cast number of days to
+       unsigned long integers.
+       * src/faillog.c: Cast dates to time_t.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Ignore the return value of signal().
+       * src/login.c: Use a %lu format and cast group and user IDs to
+       unsigned long integers.
+       * src/login.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chage.c: Add the arguments' names in the functions
+       prototypes.
+       * src/chage.c: The ID argument of audit_logger is an unsigned
+       int. Use AUDIT_NO_ID instead of -1.
+       * src/chage.c: print_date() received a time_t.
+       * src/chage.c: Use SHADOW_SP_FLAG_UNSET for the initial
+       value of spwent.sp_flag.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupadd.c: The ID argument of audit_logger is an unsigned
+       int. Use AUDIT_NO_ID instead of -1.
+       * src/groupadd.c: Cast the parsed GID/UID to a gid_t/uid_t.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwck.c: Use a %lu format and cast group and user IDs to
+       unsigned long integers.
+       * src/pwck.c: Cast number of days to a long integer.
+       * src/pwck.c: Use the SCALE macro instead of (24L * 3600L)
+       for the values to be set in /etc/shadow.
+       * src/pwck.c: Use SHADOW_SP_FLAG_UNSET for the initial
+       value of spent.sp_flag.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Ignore return value of time() when use with a
+       non NULL argument.
+       * src/passwd.c: Cast number of days to a long integer.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmod.c: The ID argument of audit_logger is an unsigned
+       int. Use AUDIT_NO_ID instead of -1.
+       * src/groupmod.c:  Use a %lu format and cast group and user IDs to
+       unsigned long integers.
+       * src/groupmod.c: Cast the parsed GID/UID to a gid_t/uid_t.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: The ID argument of audit_logger is an unsigned
+       int. Use AUDIT_NO_ID instead of -1.
+       * src/useradd.c: Cast the parsed GID/UID to a gid_t/uid_t.
+       * src/useradd.c: The size argument of fgets is an int, not a
+       size_t.
+       * src/useradd.c: Cast number of days to a long integer.
+       * src/useradd.c: Use SHADOW_SP_FLAG_UNSET for the initial
+       value of spent.sp_flag.
+       * src/useradd.c: Use a %lu format and cast group and user IDs to
+       unsigned long integers.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/su.c: fork() and waitpid() return a pid_t, not an int.
+       * src/su.c: Add brackets and parenthesis.
+       * src/su.c: Ignore the return value of signal().
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupdel.c: The ID argument of audit_logger is an unsigned
+       int. Use AUDIT_NO_ID instead of -1.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/expiry.c: Ignore the return value of signal().
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newusers.c: Fix the check for GID/UID validity.
+       * src/newusers.c: Comment why we use both getgrgid() and
+       gr_locate_gid().
+       * src/newusers.c: Cast the parsed GID/UID to a gid_t/uid_t.
+       * src/newusers.c: Cast the number of days to a long integer.
+       * src/newusers.c: Use SHADOW_SP_FLAG_UNSET for the initial
+       value of spent.sp_flag.
+       * src/newusers.c: The size argument of fgets is an int, not a
+       size_t.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Cast dates to time_t, and number of days to a
+       long integer.
+       * src/usermod.c: Cast UIDs and GIDs to uid_t and gid_t after
+       checking the ranges.
+       * src/usermod.c: The ID argument of audit_logger is an unsigned
+       int.
+       * src/usermod.c: read() returns a ssize_t.
+       * src/usermod.c: Cast the return value of malloc and make sure it
+       receives a size_t.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/logoutd.c: Ignore return value of time() when use with a
+       non NULL argument.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwconv.c: Use SHADOW_SP_FLAG_UNSET for the initial
+       value of sp.sp_flag.
+       * src/pwconv.c: Cast number of days to a long integer.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c: The ID argument of audit_logger is an unsigned
+       int.
+       * src/gpasswd.c: Ignore the return value of signal(). The signal
+       handlers are only changed for the last steps of gpasswd, and there
+       is no need to restore them.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c: The ID argument of audit_logger is an unsigned
+       int.
+       * src/userdel.c: fork() and wait() return a pid_t, not an int.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newgrp.c: Use a %lu format and cast group and user IDs to
+       unsigned long integers.
+       * src/newgrp.c: The ID argument of audit_logger is an unsigned
+       int.
+       * src/newgrp.c: Ignore the return value of signal() (the signal
+       handlers are assumed to be the default one and are restored
+       later).
+       * src/newgrp.c: Do not checl if a pid_t is < 0, check if equal
+       to (pid_t)-1.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/isexpired.c: Cast number of days to a long integer.
+       * libmisc/isexpired.c: Add brackets and parenthesis.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/copydir.c: Do not specify a size of arrays in the
+       prototypes.
+       * libmisc/copydir.c: Use a size_t for the length of strings.
+       * libmisc/copydir.c: Cast the return value of malloc().
+       * libmisc/copydir.c: The size argument of write() is a size_t.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/pwd2spwd.c: Cast number of days to a long integer.
+       * libmisc/pwd2spwd.c: Use SHADOW_SP_FLAG_UNSET for the initial
+       value of sp.sp_flag.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/defines.h: Include <config.h> since it uses the macro that
+       might be defined in this header file.
+       * lib/defines.h: Prefer checking if HAVE_LOCALE_H or ENABLE_NLS
+       are defined (rather than set to non 0).
+       * lib/defines.h: The dummy implementations of bindtextdomain() and
+       textdomain() should return a pointer. Return NULL instead of
+       /* empty */
+       * lib/defines.h: Define SHADOW_SP_FLAG_UNSET, to be used for the
+       initialization of sp_flag field of the shadow structures.
+       * lib/defines.h: Define LC_ALL, needed even if HAVE_LOCALE_H is
+       not defined.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/sulog.c: Ignore the return value of umask() when the
+       mask is restored.
+       * libmisc/sulog.c: Add brackets.
+       * libmisc/sulog.c: Ignore return value of time() when use with a
+       non NULL argument.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/log.c: Avoid assignments in comparisons.
+       * libmisc/log.c: Add brackets and parenthesis.
+       * libmisc/log.c: read() returns a ssize_t (note size_t).
+       * libmisc/log.c: Avoid implicit conversion of pointers to
+       booleans.
+       * libmisc/log.c: Ignore return value of time() when use with a
+       non NULL argument.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/strtoday.c: Avoid implicit conversion of pointers to
+       booleans.
+       * libmisc/strtoday.c: Add brackets and parenthesis.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/salt.c: Use a size_t for the size of strings instead of
+       unsigned int.
+       * libmisc/salt.c: Add brackets and parenthesis.
+       * libmisc/salt.c: Avoid assignments in comparisons.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/age.c: fork() and wait() return a pid_t, not an int.
+       * libmisc/age.c: Avoid implicit conversion of pointers to
+       booleans.
+       * libmisc/age.c: Avoid assignments in comparisons.
+       * libmisc/age.c: Ignore the return value of printf(), puts(),
+       fputs() and fflush().
+       * libmisc/age.c: Add brackets and parenthesis.
+       * libmisc/age.c: Cast the return value of time() to long and
+       converted to a date.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/rlogin.c: The size argument of read() is a size_t.
+       Propagate this time to the callers (the get_remote_string() and
+       do_rlogin() functions).
+       * libmisc/rlogin.c: Add brackets and parenthesis.
+       * libmisc/rlogin.c: Avoid multi-statements lines.
+       * libmisc/rlogin.c: Avoid assignments in comparisons.
+       * libmisc/rlogin.c: Avoid implicit conversion of pointers to
+       booleans.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/failure.c: Avoid assignments in comparisons.
+       * libmisc/failure.c: read() returns a ssize_t.
+       * libmisc/failure.c: Add brackets and parenthesis.
+       * libmisc/failure.c: Ignore return value of time() when use with a
+       non NULL argument.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/chowntty.c: Avoid assignments in comparisons.
+       * libmisc/chowntty.c: Avoid implicit conversion of pointers to
+       booleans.
+       * libmisc/chowntty.c: Add brackets and parenthesis.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/audit_help.c: Add brackets.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/addgrps.c: Avoid implicit conversion of pointers to
+       booleans.
+       * libmisc/addgrps.c: Add brackets.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c: Avoid implicit conversion of pointers to
+       booleans.
+
+2008-06-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/console.c, libmisc/hushed.c, libmisc/yesno.c,
+       libmisc/loginprompt.c, libmisc/ttytype.c, libmisc/tz.c,
+       src/login_nopam.c, src/chpasswd.c, src/chgpasswd.c, lib/port.c:
+       The size argument of fgets is an int, not a size_t.
+       * libmisc/loginprompt.c: Ignore the return value from signal()
+       when the signal handlers are restored.
+       * src/chpasswd.c: Cast the return value of time() to a long
+       integer.
+       * src/chpasswd.c: Use the SCALE macro instead of (24L * 3600L)
+       for the values to be set in /etc/shadow.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwck.c: Use a bool when possible instead of int integers.
+       * src/pwck.c: Avoid implicit conversion of integers to booleans.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/su.c: Use a bool when possible instead of int integers.
+       * src/su.c: Add brackets and parenthesis.
+       * src/su.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/su.c: Ignore the return value of pam_end() before
+       exiting.
+       * src/su.c: Avoid assignments in comparisons.
+       * src/su.c: Avoid multi-statements lines.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h, libmisc/valid.c: Change the prototype of
+       valid() to return a bool.
+       * libmisc/valid.c: Add parenthesis.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c: Add brackets and parenthesis.
+       * lib/commonio.c: Check the result of fgets().
+       * lib/commonio.c: Avoid implicit conversion of pointers to
+       booleans.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h: Fix the prototypes to match earlier changes.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/nscd.c: Include defines.h.
+       * lib/nscd.c: Always warn when the nscd cache cannot be flushed.
+       * lib/nscd.c: Avoid assignments in comparisons.
+       * lib/nscd.c: Ignore the return value of fputs() when printing
+       errors.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/port.c: Add brackets and parenthesis.
+       * lib/port.c: Change isttytime() prototype to return a bool.
+       * lib/port.c: Ignore the return value of fclose () (file open
+       read-only).
+       * lib/port.c: Avoid multi-statements lines.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/id.c: Ignore the return value of fputs(), puts(), putchar(),
+       and printf().
+       * src/id.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/id.c: Add brackets and parenthesis.
+       * src/id.c: Avoid implicit conversion of pointers / integers
+       to booleans.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chsh.c: Use a bool when possible instead of int integers.
+       * src/chsh.c: restricted_shell() renamed is_restricted_shell().
+       check_shell() renamed shell_is_listed().
+       * src/chsh.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/chsh.c: Avoid implicit conversion of pointers / integers
+       to booleans.
+       * src/chsh.c: Ignore the return value of pam_end() before
+       exiting.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/grpunconv.c: Use a bool when possible instead of int
+       integers.
+       * src/grpunconv.c: Add brackets and parenthesis.
+       * src/grpunconv.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/grpunconv.c: Avoid implicit conversion of pointers / integers
+       to booleans.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/sulogin.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/sulogin.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/sulogin.c: Avoid assignments in comparisons.
+       * src/sulogin.c: Ignore the return value of alarm().
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groups.c: Use a bool when possible instead of int integers.
+       * src/groups.c: Add brackets and parenthesis.
+       * src/groups.c: Avoid implicit conversion of pointers / integers
+       to booleans.
+       * src/groups.c: Avoid assignments in comparisons.
+       * src/groups.c: Ignore the return value of putchar(), printf()
+       * src/groups.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/grpconv.c: Use a bool when possible instead of int integers.
+       * src/grpconv.c: Add brackets and parenthesis.
+       * src/grpconv.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/grpconv.c: Avoid implicit conversion of pointers / integers
+       to booleans.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/faillog.c: Use a bool when possible instead of int integers.
+       * src/faillog.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/faillog.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/faillog.c: Add brackets and parenthesis.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Avoid multi-statements lines.
+       * src/login.c: Ignore the return value of pam_end() before
+       exiting.
+       * src/login.c: Use a bool when possible instead of int integers.
+       * src/login.c: Add brackets and parenthesis.
+       * src/login.c: Ignore the return values of fflush(), putchar(), puts().
+       * src/login.c: Ignore the return value of fclose() for read-only
+       files.
+       * src/login.c: Avoid assignments in comparisons.
+       * src/login.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/login.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chage.c: Use a bool when possible instead of int integers.
+       * src/chage.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupadd.c: Use a bool when possible instead of int
+       integers.
+       * src/groupadd.c: Add brackets and parenthesis.
+       * src/groupadd.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/groupadd.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/groupadd.c: Ignore the return value of pam_end() before
+       exiting.
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwck.c: Use a bool when possible instead of int integers.
+       * src/pwck.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Use a bool when possible instead of int integers.
+       * src/passwd.c: Avoid assignments in comparisons.
+       * src/passwd.c: Add brackets and parenthesis.
+       * src/passwd.c: Avoid implicit conversion of pointers / integers /
+       chars to booleans.
+       * src/passwd.c: Move the "context_t c" declaration at the
+       beginning check_selinux_access.
+       * src/passwd.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+
+2008-06-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmod.c: Use a bool when possible instead of int
+       integers.
+       * src/groupmod.c: Avoid assignments in comparisons.
+       * src/groupmod.c: Add brackets and parenthesis.
+       * src/groupmod.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/groupmod.c: Use a %lu format to print GIDs, and cast the GID
+       to (unsigned long int).
+       * src/groupmod.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/groupmod.c: Ignore the return value of pam_end() before
+       exiting.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/su.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Use a bool when possible instead of int integers.
+       * src/useradd.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/useradd.c: Add brackets and parenthesis.
+       * src/useradd.c: Avoid assignments in comparisons.
+       * src/useradd.c: Ignore the return value of fclose() for read-only
+       files.
+       * src/useradd.c: Ignore the return value of fflush() before
+       closing the files.
+       * src/useradd.c: Avoid multi-statements lines.
+       * src/useradd.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/useradd.c: Ignore the return value of pam_end() before
+       exiting.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/vipw.c: Use a bool when possible instead of int integers.
+       * src/vipw.c: Ignore the return value of umask(), when the mask is
+       set again to the old value.
+       * src/vipw.c: Avoid implicit conversion of pointers / integers to
+       booleans.
+       * src/vipw.c: Add brackets and parenthesis.
+       * src/vipw.c: Avoid assignments in comparisons.
+       * src/vipw.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/vipw.c: Add missing termination of the longopts parameter
+       for getopt_long().
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chgpasswd.c: Use a bool when possible instead of int
+       integers.
+       * src/chgpasswd.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/chgpasswd.c: Avoid implicit conversion of integers to
+       booleans.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupdel.c: Use a bool when possible instead of int
+       integers.
+       * src/groupdel.c: Avoid implicit conversion of pointers / integers to
+       booleans.
+       * src/groupdel.c: Avoid assignments in comparisons.
+       * src/groupdel.c: Ignore the return value of pam_end() before
+       exiting.
+       * src/groupdel.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/expiry.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/expiry.c: Add brackets and parenthesis.
+       * src/expiry.c: Avoid assignments in comparisons.
+       * src/expiry.c: Avoid implicit conversion of pointers to booleans.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwunconv.c: Use a bool when possible instead of int
+       integers.
+       * src/pwunconv.c: Add brackets and parenthesis.
+       * src/pwunconv.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/pwunconv.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/pwunconv.c: Avoid assignments in comparisons.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Use a bool when possible instead of int integers.
+       * src/usermod.c: Add brackets and parenthesis.
+       * src/usermod.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/usermod.c: Avoid assignments in comparisons.
+       * src/usermod.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/usermod.c: Ignore the return value of pam_end() before
+       exiting.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmems.c: Move the declaration of option_index and
+       long_options before the blocks of code.
+       * src/groupmems.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/groupmems.c: Ignore the return value of pam_end() before
+       exiting.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chfn.c: Use a bool when possible instead of int integers.
+       * src/chfn.c: Avoid implicit conversion of integers / chars to
+       booleans.
+       * src/chfn.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/logoutd.c: Use a bool when possible instead of int integers.
+       * src/logoutd.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/logoutd.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/logoutd.c: Add brackets and parenthesis.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chpasswd.c: Use a bool when possible instead of int
+       integers.
+       * src/chpasswd.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/chpasswd.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwconv.c: Use a bool when possible instead of int integers.
+       * src/pwconv.c: Add brackets and parenthesis.
+       * src/pwconv.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/pwconv.c: Avoid implicit conversion of pointers / integers /
+       chars to booleans.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newusers.c: Implement the -r, --system option.
+       * src/newusers.c: Use a bool when possible instead of int
+       integers.
+       * src/newusers.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/newusers.c: Ignore the return value of pam_end() before
+       exiting.
+       * src/newusers.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/newusers.c: Avoid multi-statements lines.
+       * src/newusers.c: Add brackets and parenthesis.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c: Use a bool when possible instead of int integers.
+       * src/gpasswd.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/gpasswd.c: Ignore the return value of putchar() and fflush()
+       before exiting.
+       * src/gpasswd.c: check_list() renamed is_valid_user_list(), and
+       return a bool.
+       * src/gpasswd.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/grpck.c: Use a bool when possible instead of int integers.
+       * src/grpck.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/lastlog.c: Use a bool when possible instead of int integers.
+       * src/lastlog.c: Avoid implicit conversion of pointers / integers
+       / chars to booleans.
+       * src/lastlog.c: Add brackets and parenthesis.
+       * src/lastlog.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c: Use a bool for the is_shadow_pwd, is_shadow_grp,
+       deleted_user_group, was_member, was_admin, and the
+       options' flags.
+       * src/userdel.c: Change path_prefix() prototype to return a bool.
+       * src/userdel.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/userdel.c: Ignore the return value from pam_end() since we
+       are exiting anyway just afterwards.
+       * src/userdel.c: Avoid implicit conversion of pointers /
+       integers / chars to booleans.
+       * src/userdel.c: Add brackets and parenthesis.
+       * src/userdel.c: Avoid assignments in comparisons.
+       * src/userdel.c: Do not ignore the return value of the *_unlock()
+       functions.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login_nopam.c: Do not use the YES and NO macros. Use the
+       booleans true and false instead. Change the prototypes of
+       list_match(), user_match(), from_match(), and string_match()
+       accordingly. Also use booleans internally.
+       * src/login_nopam.c: Add brackets and parenthesis.
+       * src/login_nopam.c: Avoid implicit conversion of pointers /
+       integers / chars to booleans.
+       * src/login_nopam.c: Avoid assignments in comparisons.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newgrp.c: Use a bool for is_newgrp, notfound, needspasswd,
+       initflag, and cflag.
+       * src/newgrp.c: Add brackets and parenthesis.
+       * src/newgrp.c: Avoid implicit conversion of pointers / integers /
+       chars to booleans.
+       * src/newgrp.c: Avoid multi-statements lines.
+       * src/newgrp.c: Ignore return value of setlocale(),
+       bindtextdomain(), and textdomain().
+       * src/newgrp.c: Avoid assignments in comparisons.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/list.c: Change is_on_list() prototype to return a bool.
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/find_new_ids.c: Change find_new_uid() and find_new_gid()
+       prototypes to use a bool for their first argument (sys_user /
+       sys_group).
+
+2008-06-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/console.c: Change is_listed() prototype to return a bool.
+       The default parameter should also be a bool.
+       * libmisc/console.c: Add brackets and parenthesis.
+       * libmisc/console.c: Avoid assignments in comparisons.
+       * libmisc/console.c: Change console() prototype to return a bool.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/sgetspent.c: Add brackets and parenthesis.
+       * lib/sgetspent.c: Avoid assignments in comparisons.
+       * lib/sgetspent.c: Avoid implicit conversion of pointers / chars
+       to booleans.
+       * lib/sgetspent.c: Avoid multi-statements lines.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/sgetpwent.c: Avoid implicit conversion of pointers / chars to
+       booleans.
+       * lib/sgetpwent.c: Add brackets and parenthesis.
+       * lib/sgetpwent.c: Return NULL instead of 0.
+       * lib/sgetpwent.c: Do not check twice if fields[2] and fields[3]
+       are not empty.
+       * lib/sgetpwent.c: Avoid assignments in comparisons.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/getdate.y: abbrev is a bool.
+       * libmisc/getdate.y: Avoid implicit conversion of pointers / chars /
+       integers to booleans.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h: Fix prototypes according to earlier changes
+       (usage of the bool type).
+       * lib/prototypes.h: Add the arguments' name to the prototypes.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/groupio.h: Add protection against multiple inclusions.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/pwio.h: Add protection against multiple inclusions.
+       * lib/pwio.c: The changed, isopen, locked, and readonly fields
+       of the db are booleans.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/shadowio.h, lib/shadowio.c: spw_file_present returns a bool.
+       * lib/shadowio.h: Add protection against multiple inclusions.
+       * lib/shadowio.c: The changed, isopen, locked, and readonly fields
+       of the db are booleans.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/sgroupio.c: Avoid assignments in comparisons.
+       * lib/sgroupio.c: Add brackets.
+       * lib/sgroupio.c: Avoid implicit conversion of pointers / integers
+       to booleans.
+       * lib/sgroupio.c: The changed, isopen, locked, and readonly fields
+       of the db are booleans.
+       * lib/sgroupio.h, lib/sgroupio.c: sgr_file_present returns a bool.
+       * lib/sgroupio.h: Add protection against multiple inclusions.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/gshadow.c: nis_used and nis_bound are booleans.
+       * lib/gshadow.c: Avoid implicit conversion of pointers / integers
+       to booleans.
+       * lib/gshadow.c: Avoid assignments in comparisons.
+       * lib/gshadow.c: Add brackets.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/groupio.c: The changed, isopen, locked, and readonly fields
+       of the db are booleans.
+       * lib/groupio.h: Add protection against multiple inclusion.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/sgetgrent.c: Avoid implicit conversion of pointers / chars
+       to booleans.
+       * lib/sgetgrent.c: Avoid assignments in comparisons.
+       * lib/sgetgrent.c: Add brackets.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/encrypt.c: Avoid implicit conversion of pointers to
+       booleans.
+       * lib/encrypt.c: Add parenthesis.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/port.c: Avoid implicit conversion of pointers / integers /
+       chars to booleans.
+       * lib/port.c: Avoid multiple statement on the same line.
+       * lib/port.c: Add brackets and parenthesis.
+       * lib/port.c: Avoid assignments in comparisons.
+       * lib/port.c: Fix typo comparision -> comparison (in comment).
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/fputsx.c: Add brackets.
+       * lib/fputsx.c: Avoid assignments in comparisons.
+       * lib/fputsx.c: Avoid implicit conversion of pointers / integers /
+       chars to booleans.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.h: commonio_entry.changed, commonio_db.changed,
+       commonio_db.isopen, commonio_db.locked, and commonio_db.readonly
+       are no booleans.
+       * lib/commonio.h: Include defines.h to get the definition of bool.
+       * lib/commonio.h: commonio_present returns a bool
+       * lib/commonio.c: Implement above changes.
+       * lib/commonio.c: add argument names in prototypes.
+       * lib/commonio.c: name_is_nis returns a bool.
+       * lib/commonio.c: nscd_need_reload is a bool.
+       * lib/commonio.c: Improve types (use size_t / pid_t when needed
+       instead of int).
+       * lib/commonio.c: Avoid assignments in comparisons.
+       * lib/commonio.c: Add brackets and parenthesis.
+       * lib/commonio.c: Avoid implicit conversion of pointers / integers
+       to booleans
+       * lib/commonio.c: The return values of utime is not checked on
+       purpose.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/isexpired.c: ARGSUSED is no more needed (shadow is
+       always supported).
+       * libmisc/isexpired.c: Avoid implicit conversion of pointers to
+       booleans.
+       * libmisc/isexpired.c: Add brackets and parenthesis.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/sulog.c (sulog): The success argument is a bool.
+       * libmisc/sulog.c: The return values of fflush is not checked on
+       purpose.
+       * libmisc/sulog.c: Indicate that some return values should be
+       checked.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/ttytype.c: Avoid implicit conversion of pointers /
+       integers to booleans.
+       * libmisc/ttytype.c: Avoid assignments in comparisons.
+       * libmisc/ttytype.c: Add brackets and parenthesis.
+       * libmisc/ttytype.c: The return values of fclose is not checked on
+       purpose.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/mail.c: Avoid implicit conversion of pointers to
+       booleans.
+       * libmisc/mail.c: Avoid assignments in comparisons.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/loginprompt.c: Avoid implicit conversion of pointers /
+       chars to booleans.
+       * libmisc/loginprompt.c: Add brackets.
+       * libmisc/loginprompt.c: Avoid assignments in comparisons.
+       * libmisc/loginprompt.c: The return values of fclose and fflush
+       are not checked on purpose.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/setupenv.c: Avoid implicit conversion of chars to
+       booleans.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/copydir.c: selinux_checked, selinux_enabled, and set_orig
+       are now booleans.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/setugid.c (setup_uid_gid): The is_console argument is now
+       a bool.
+       * libmisc/setugid.c: Avoid implicit conversion of integers /
+       pointers to booleans.
+       * libmisc/setugid.c: Add brackets.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/pam_pass.c (do_pam_passwd): The silent and
+       change_expired are no booleans instead of int.
+       * libmisc/pam_pass.c: The return value of pam_end is not checked
+       on purpose.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/getlong.c: Avoid implicit conversion of pointers / chars
+       to booleans.
+       * libmisc/getlong.c: Add brackets.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/valid.c: Avoid implicit conversion of pointers / chars
+       to booleans.
+       * libmisc/valid.c: Add brackets.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/yesno.c: yes_or_no returns a bool instead of int.
+       * libmisc/yesno.c: Avoid implicit conversion of pointers to
+       booleans.
+       * libmisc/yesno.c: The return value of fflush is not checked
+       on purpose.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/age.c: Avoid implicit conversion of integers to
+       booleans.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/rlogin.c: Avoid assignments in comparisons.
+       * libmisc/rlogin.c: Avoid implicit conversion of integers to
+       booleans.
+       * libmisc/rlogin.c: Add brackets.
+
+2008-05-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/failure.c (failcheck): The failed argument is a bool.
+       * libmisc/failure.h: Likewise.
+       * libmisc/failure.c (too_many_failures): too_many_failures returns
+       a bool.
+       * libmisc/failure.c: Add notes about unchecked return values.
+       * libmisc/failure.c: Avoid assignments in comparisons.
+       * libmisc/failure.c: Add brackets.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/myname.c: Avoid assignments in comparisons.
+       * libmisc/myname.c: Avoid implicit conversion of pointers / chars
+       to booleans.
+       * libmisc/myname.c: Add brackets.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/utmp.c (checkutmp): Change picky argument's type to
+       bool.
+       * libmisc/utmp.c: Use bool when possible (found_utmpx,
+       found_utmp).
+       * libmisc/utmp.c: Add note about unchecked return values.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/addgrps.c: Change type of added to bool.
+       * libmisc/addgrps.c: Avoid implicit conversion of pointers to
+       booleans.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/hushed.c: hushed returns a bool instead of int.
+       * libmisc/hushed.c: Avoid assignments in comparisons.
+       * libmisc/hushed.c (hushed): Change type of found to bool.
+       * libmisc/hushed.c: Add brackets.
+       * libmisc/hushed.c: Always check if the user or the shell is in
+       the file. Do not check the first character of the line first. This
+       is simpler and match better with the HUSHLOGIN_FILE documentation.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/getdef.h, lib/getdef.c: getdef_bool returns a bool instead
+       of int.
+       * lib/getdef.c: Change typo of def_loaded to bool.
+       * lib/getdef.c: Add brackets.
+       * lib/getdef.c: Avoid assignments in comparisons.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/chowntty.c: is_my_tty returns a bool.
+       * libmisc/chowntty.c: Avoid implicit conversion of integers to
+       booleans.
+       * libmisc/chowntty.c: Add brackets.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/chowndir.c: Avoid assignment in comparisons, implicit
+       comparison of integers to booleans.
+       * libmisc/chowndir.c: The return value of closedir is not checked
+       on purpose.
+       * libmisc/chowndir.c: Add brackets.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/chkname.h, libmisc/chkname.c: check_group_name (resp.
+       check_user_name) renamed to is_valid_user_name (resp.
+       is_valid_group_name). is_valid_user_name and is_valid_group_name
+       return a bool.
+       * src/grpck.c, src/newusers.c, src/usermod.c, src/useradd.c,
+       src/groupmod.c, src/pwck.c, src/groupadd.c: Use is_valid_user_name
+       and is_valid_group_name, following above change.
+       * libmisc/chkname.c: Avoid implicit conversion of chars to
+       booleans. Add brackets and parenthesis.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/xmalloc.c: Avoid implicit conversion of integers /
+       pointers to booleans.
+       * libmisc/xgetXXbyYY.c: Likewise.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in, lib/defines.h: Allow usage of booleans in the
+       source.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: Allow --disable-man and --enable-man=no.
+
+2008-06-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Prepare the 4.1.2.1 release
+       * NEWS: set the release date.
+       * man/po/*.po, po/*.po: Updated PO files.
+       * configure.in: Set the version to 4.1.2.1.
+
+2008-06-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/login.c: Fix an "audit log injection" vulnerability in
+       login. This is similar to CVE-2008-1926 (util-linux-ng's login).
+       This vulnerability makes it easier for attackers to hide
+       activities by modifying portions of log events, e.g. by appending
+       an addr= statement to the login name.
+       * lib/prototypes.h: Added definition of AUDIT_NO_ID.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Prepare the 4.1.2 release
+       * NEWS: set the release date.
+       * man/po/*.po, po/*.po: Updated PO files.
+       * configure.in: Set the version to 4.1.2.
+
+2008-05-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * po/Makevars, man/po/Makefile.in.in: Run msgmerge with
+       --previous. (This requires gettext >= 0.16)
+
+2008-05-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/copydir.c (remove_tree): As we always use remove_tree
+       followed by rmdir to remove the directory itself, delete also the
+       root directory in remove_tree.
+       * src/userdel.c, src/usermod.c: Do not call rmdir after
+       remove_tree.
+
+2008-05-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/copydir.c (remove_tree): Make sure unlink is successful
+       when removing files.
+
+2008-05-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/pwdcheck.c: Simply passwd_check since it's never used
+       when configured with PAM support.
+
+2008-05-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Fix compiler warnings:
+       * libmisc/audit_help.c: Include prototypes.h to get the prototype
+       of audit_help_open.
+       * libmisc/salt.c: Use booleans instead of negating integers.
+       * src/passwd.c: Declare the check_selinux_access prototype and
+       avoid name clashes (change_user -> changed_user; change_uid ->
+       changed_uid; access -> requested_access)
+       * libmisc/list.c: Avoid assignments in comparisons, assignments
+       with post increments (x++), use of integers as booleans, and
+       explicitly mark blocks with brackets.
+       * libmisc/fields.c: Likewise.
+       * libmisc/copydir.c: Likewise.
+       * libmisc/fields.c: Add comments.
+       * libmisc/copydir.c: Mark function whose return value is not
+       checked as such.
+
+2008-05-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/pam_pass.c: Use fputs rather than fprintf for constant
+       strings.
+
+2008-05-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.1.xml: Indicate that login should be executed with
+       "exec login" if called from a shell.
+
+2008-05-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/passwd.1.xml: Remove the advices for the choice of a good
+       password (they are debatable). Point to
+       http://en.wikipedia.org/wiki/Password_strength instead.
+
+2008-05-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, libmisc/salt.c (SHA_salt_size): Seed the RNG, and fix a
+       overflow. These caused the SHA salt size to always be 8 bytes,
+       instead of being in the 8-16 range. Thanks to Peter Vrabec
+       pvrabec@redhat.com for noticing.
+       * NEWS, libmisc/salt.c (SHA_salt_rounds): Seed the RNG with
+       seedRNG instead of srand, and fix the same overflow. This caused
+       the number of rounds to always be the smallest one.
+
+2008-05-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/newusers.8.xml man/groupmems.8.xml man/groupdel.8.xml
+       man/useradd.8.xml man/groupadd.8.xml man/newgrp.1.xml man/sg.1.xml
+       man/chgpasswd.8.xml man/groupmod.8.xml: Tag the section which
+       require --enable-shadowgrp accordingly.
+
+2008-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.5.xml: SHA_CRYPT_MAX_ROUNDS and
+       SHA_CRYPT_MIN_ROUNDS can only exist if configured with
+       --with-sha-crypt.
+
+2008-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, man/useradd.8.xml: Document the -k, --skel option, and
+       update the -m, --create-home documentation.
+
+2008-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/useradd.8.xml: Sort options.
+
+2008-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/getdef.c: SHA_CRYPT_MAX_ROUNDS and SHA_CRYPT_MIN_ROUNDS can
+       only exist if configured with --with-sha-crypt.
+       * man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml: Likewise.
+
+2008-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/salt.c: Document the section closed by #endif
+
+2008-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Fix formatting.
+
+2008-05-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, man/useradd.8.xml: Document the -r, --system option.
+       * NEWS, man/groupadd.8.xml: Document the -r, --system option.
+       * NEWS, man/newusers.8.xml: Document the -r, --system option.
+       * NEWS, man/newusers.8.xml: Document the -c, --crypt-method and
+       -s, --sha-rounds options.
+
+2008-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Import Debian patch 487_passwd_chauthtok_failed_message
+       * libmisc/pam_pass.c: Be more verbose and indicate that the
+       password was not changed when pam_chauthtok fails (in addition to
+       the PAM error, which may not be comprehensible for the users).
+
+2008-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Import Debian patch 434_login_stop_checking_args_after--
+       * NEWS, src/login.c (check_flags): Stop checking the arguments
+       after --. The later options will be sent to the shell, and do not
+       need to be checked.
+
+2008-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/vipw.c, src/su.c, src/newgrp.c: Harmonize the children's
+       SIGSTOP handling. Raise the signal which stopped the child instead
+       of always SIGSTOP.
+
+2008-05-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Import Debian patch 406_vipw_resume_properly.
+       Thanks to Dean Gaudet.
+       * NEWS, src/vipw.c: Resume properly after ^Z.
+
+2008-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/getdef.c, lib/lockpw.c, lib/utent.c, lib/sgetgrent.c,
+       lib/getdef.h, lib/pwauth.c, lib/sgetspent.c, lib/pwauth.h,
+       lib/port.c, lib/encrypt.c, lib/groupio.c, lib/shadowmem.c,
+       lib/port.h, lib/groupio.h, lib/groupmem.c, lib/exitcodes.h,
+       lib/gshadow.c, lib/gshadow_.h, lib/sgroupio.c, lib/sgroupio.h,
+       lib/shadowio.c, lib/pwio.c, lib/sgetpwent.c, lib/commonio.c,
+       lib/faillog.h, lib/shadowio.h, lib/pwio.h, lib/pam_defs.h,
+       lib/pwmem.c, lib/commonio.h, lib/shadow.c, lib/fputsx.c,
+       lib/prototypes.h, libmisc/xmalloc.c, libmisc/limits.c,
+       libmisc/entry.c, libmisc/console.c, libmisc/ulimit.c,
+       libmisc/xgetXXbyYY.c, libmisc/chkname.c, libmisc/pwd2spwd.c,
+       libmisc/xgetpwnam.c, libmisc/basename.c, libmisc/chkname.h,
+       libmisc/chowndir.c, libmisc/audit_help.c, libmisc/chowntty.c,
+       libmisc/hushed.c, libmisc/xgetpwuid.c, libmisc/getdate.h,
+       libmisc/addgrps.c, libmisc/xgetgrgid.c, libmisc/utmp.c,
+       libmisc/myname.c, libmisc/failure.c, libmisc/find_new_ids.c,
+       libmisc/env.c, libmisc/rlogin.c, libmisc/age.c, libmisc/failure.h,
+       libmisc/xgetgrnam.c, libmisc/yesno.c, libmisc/valid.c,
+       libmisc/getlong.c, libmisc/obscure.c, libmisc/pam_pass.c,
+       libmisc/motd.c, libmisc/salt.c, libmisc/setugid.c,
+       libmisc/fields.c, libmisc/xgetspnam.c, libmisc/shell.c,
+       libmisc/copydir.c, libmisc/setupenv.c, libmisc/strtoday.c,
+       libmisc/loginprompt.c, libmisc/list.c, libmisc/pwd_init.c,
+       libmisc/log.c, libmisc/mail.c, libmisc/ttytype.c,
+       libmisc/pwdcheck.c, libmisc/sub.c, libmisc/sulog.c,
+       libmisc/isexpired.c, libmisc/tz.c, src/newgrp.c, src/userdel.c,
+       src/lastlog.c, src/grpck.c, src/gpasswd.c, src/newusers.c,
+       src/pwconv.c, src/chpasswd.c, src/logoutd.c, src/chfn.c,
+       src/groupmems.c, src/usermod.c, src/pwunconv.c, src/expiry.c,
+       src/groupdel.c, src/chgpasswd.c, src/vipw.c, src/useradd.c,
+       src/su.c, src/groupmod.c, src/passwd.c, src/pwck.c,
+       src/groupadd.c, src/nologin.c, src/chage.c, src/login.c,
+       src/suauth.c, src/faillog.c, src/grpconv.c, src/groups.c,
+       src/sulogin.c, src/grpunconv.c, src/chsh.c, src/id.c: Make sure
+       every source files are distributed with a copyright and license.
+       Files with no license use the default 3-clauses BSD license. The
+       copyright were mostly not recorded; they were updated according to
+       the Changelog. "Julianne Frances Haugh and contributors" changed
+       to "copyright holders and contributors".
+
+2008-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, libmisc/sulog.c: If the SULOG_FILE does not exist when an
+       su session is logged, make sure the file is created with group
+       root, instead of using the group of the caller.
+
+2008-04-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, libmisc/fields.c, src/chfn.c, man/chfn.1.xml: Allow
+       non-US-ASCII characters in the GECOS fields ("name", "room
+       number", and "other info" fields).
+
+2008-04-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newgrp.c: Fix compilation failure when compiled with
+       audit support. Thanks to Mike Frysinger for reporting it.
+
+2008-04-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Ensure that getpwent() is used in setpwent(), getpwent(),
+       endpwend() sequences (ditto for getgrent(), getspent(), and
+       getsgent()). The only real (minor) issue was in login, which kept
+       the passwd file open.
+       * libmisc/entry.c: Remove unneeded setspent() and endspent() (only
+       getspnam is called in the middle).
+       * libmisc/find_new_ids.c: Make sure to close the password and
+       group files with endpwent() and endgrent().
+       * libmisc/pwdcheck.c: Remove unneeded endspent() (only getspnam()
+       is called before).
+       * src/lastlog.c, src/passwd.c, src/groupmod.c, src/faillog.c,
+       src/groups.c: Make sure to close
+       the password file with endpwent().
+       * src/login.c: Remove unneeded setpwent() (only xgetpwnam is
+       called before).
+       * src/login.c, src/newgrp.c: Fix typos in comments.
+
+2008-04-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, configure.in: Fix the detection of the audit, pam, and
+       selinux. Fail if the feature is requested but the library (or
+       header file) could not be found. If nothing is specified, enable
+       the feature only if we can find the library (or header file).
+       * configure.in: Document --with-selinux as "yes if found" rather
+       than "autodetected" for consistency with other options.
+
+2008-04-04  Mark Rosenstand  <mark@borkware.net>
+
+       * NEWS, etc/pam.d/Makefile.am: Add chfn, chsh, and userdel to
+       $(pamd_files). Remove the duplicate useradd. And sort
+       alphabetically.
+
+2008-04-04  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS: Prepare next release, 4.1.2.
+
+2008-04-02  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, configure.in: Prepare release 4.1.1
+       * NEWS: Fix the release date of 4.1.0. Was in 2007, not 2008.
+
+2008-04-02  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * po/fr.po: Update according to the file under review.
+       Thanks to Jean-Luc Coulon.
+
+2008-04-01  Holger Wansing  <linux@wansing-online.de>
+
+       * po/de.po: updated to 431t
+
+2008-03-31  Piarres Beobide  <pi+debian@beobide.net>
+
+       * po/eu.po: updated to 431t
+
+2008-03-30  Leandro Azevedo  <leorock182@gmail.com>
+
+       * po/pt_BR.po: updated to 360t71f
+
+2008-03-30  Mehmet Türker <mturker@innova.com.tr>
+
+       * po/tr.po: updated to 431t
+
+2008-03-30  Clytie Siddall  <clytie@riverland.net.au>
+
+       * po/vi.po: updated to 431t
+
+2008-03-30  Daniel Nylander  <yeager@ubuntu.com>
+
+       * po/sv.po: updated to 431t
+
+2008-03-29  helix84 <helix84@centrum.sk>
+
+       * po/sk.po: updated to 431t
+
+2008-03-27  Danilo Piazzalunga  <danilopiazza@gmail.com>
+
+       * po/it.po: updated to 431t
+
+2008-03-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * TODO: Added entries regarding SE Linux.
+
+2008-03-26  Russell Coker  <russell@coker.com.au>
+
+       * src/passwd.c, NEWS: Make SE Linux tests more strict, when the
+       real UID is 0 SE Linux checks will be performed.
+
+2008-03-24  Yuri Kozlov  <kozlov.y@gmail.com>
+
+       * po/ru.po: updated to 431t
+
+2008-03-23  Miguel Figueiredo  <elmig@debianpt.org>
+
+       * po/pt.po: updated to 431t
+
+2008-03-21  Changwoo Ryu  <cwryu@debian.org>
+
+       * po/ko.po: updated to 431t
+
+2008-03-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.5.xml: Fix manpages generation. The SYS_GID_MAX
+       and SYS_UID_MAX entities were not defined.
+
+2008-03-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/faillog.c: Fix minor compilation warning (assignment used as
+       a comparison).
+
+2008-03-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h, src/login.c: login_access() is used in
+       src/login.c, and defined in src/login_nopam.c (which lacks a
+       prototype). Move its prototype from src/login.c to
+       lib/prototypes.h.
+
+2008-03-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c, src/groupmod.c: Compilation fix. gshadow_locked
+       should only be used if SHADOWGRP is defined.
+
+2008-03-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/grpck.c: Fix some warnings. compare_members_lists() is only
+       used if SHADOWGRP is defined.
+
+2008-03-08  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/groupmod.c: Make sure the passwd, group, and gshadow
+       files are unlocked on exit. Unlock locked files in fail_exit().
+       Prefer fail_exit() over exit().
+       * NEWS, src/groupmod.c: When the GID of a group is changed, update
+       also the GID of the passwd entries of the users whose primary
+       group is the group being modified.
+
+2008-03-08  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c (commonio_remove): Fail when the name to be
+       removed is used by different entries (like commonio_update does).
+       * NEWS: This fix the behavior of groupdel when the system is not
+       configured to support split group but different group entries
+       have the name of the group to be deleted.
+
+2008-03-08  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/useradd.c: Make sure the passwd, group, shadow, and
+       gshadow files are unlocked on exit. Unlock locked files in
+       fail_exit(). Prefer fail_exit() over exit().
+
+2008-03-08  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/groupdel.c: Make sure the group, and gshadow files are
+       unlocked on exit. Add function fail_exit(). Use fail_exit()
+       instead of exit().
+       * src/groupdel.c: Fail immediately instead of increasing errors.
+       Better handling of error cases, like locked group or gshadow file.
+
+2008-03-08  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newusers.c: Make sure the passwd, group, shadow, and
+       gshadow files are unlocked on exit. Add function fail_exit(). Use
+       fail_exit() instead of exit().
+
+2008-03-08  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/gpasswd.c: Make sure the group and gshadow files are
+       unlocked on exit. Add function fail_exit(). Use fail_exit()
+       instead of exit().
+
+2008-03-08  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/groupdel.c: Do not rewrite the group and gshadow file
+       in case of error.
+
+2008-03-08  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupdel.c: Do not log that the group was deleted if an
+       error occurred.
+
+2008-03-08  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/groupdel.c: Do not raise an error if the group does
+       not exist in the gshadow file.
+
+2008-03-08  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * etc/login.defs: Document MAX_MEMBERS_PER_GROUP.
+
+2008-03-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newgrp.c: Add missing end of line in message.
+       * src/newgrp.c: Add audit events for the authentication
+       (AUDIT_GRP_AUTH). Thansk to Peter Vrabec.
+
+2008-03-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/faillog.c: Only reset the entries of existing users
+       with faillog -r (not all numeric IDs starting from 0). Thanks to
+       Peter Vrabec.
+
+2008-03-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwunconv.c: Fix typo. One "can't open" message is a "can't
+       lock".
+
+2008-02-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c: When a password is moved to the gshadow file, use
+       "x" instead of "x" to indicate that the password is shadowed
+       (consistency with grpconv).
+
+2008-02-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS: Fix failures when the gshadow file is not present. Thanks
+       to Christian Henz (http://bugs.debian.org/467488)
+       * src/gpasswd.c (get_group): Do not fail if gshadow is not present. Just use
+       the group file and set the grent structure
+       * src/gpasswd.c (check_perms): The permissions should be checked
+       using both the gshadow and group file. Add a <struct group *>
+       parameter, and check if the gshadow file exists (is_shadowgrp).
+       * src/gpasswd.c (main): Do not use sgent.sg_mem or sgent.sg_adm if
+       the gshadow file is not present (sgent is not initialized in that
+       case). The fields of sgent can be set, but not used.
+
+2008-02-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c: Fix typo in comment.
+       * src/gpasswd.c: Move comment regarding FIRST_MEMBER_IS_ADMIN to
+       where it belongs.
+       * src/gpasswd.c: Indicate the end of the #ifdef FIRST_MEMBER_IS_ADMIN
+       section.
+
+2008-02-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/po/Makefile.in.in: Use --previous when merging PO files of
+       the manpages.
+
+2008-02-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.d/SYS_UID_MAX.xml, man/login.defs.d/SYS_GID_MAX.xml:
+       Document new variables.
+       * man/newusers.8.xml, man/login.defs.5.xml,
+       man/login.defs.d/GID_MAX.xml, man/login.defs.d/UID_MAX.xml:
+       newusers uses now the GID_MAX, GID_MIN, UID_MAX, UID_MIN,
+       SYS_GID_MAX, SYS_GID_MIN, SYS_UID_MAX, and SYS_UID_MIN variables.
+       * man/groupadd.8.xml, man/login.defs.5.xml: groupadd uses now the
+       SYS_GID_MAX, and SYS_GID_MIN variables.
+       * man/login.defs.5.xml: useradd uses now the SYS_GID_MAX,
+       SYS_GID_MIN, SYS_UID_MAX, and SYS_UID_MIN variables.
+       * man/Makefile.am: Add the new XML documentation files to EXTRA_DIST.
+
+2008-02-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/getdef.c: Added missing SYS_GID_MAX, SYS_GID_MIN,
+       SYS_UID_MAX, and SYS_UID_MIN.
+
+2008-02-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/useradd.c, man/useradd.8.xml: Added options
+       --user-group (-U, Uflg) and --no-user-group (-N, Nflg) to replace
+       nflg.
+       * man/login.defs.d/USERGROUPS_ENAB.xml: useradd now also uses
+       USERGROUPS_ENAB.
+
+2008-02-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupmod.c: Add missing 'p' to the getopt_long's optstring.
+
+2008-02-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupadd.c: Add missing 'p' to the getopt_long's optstring.
+       * src/groupadd.c: Fix --non-unique's has_arg field to no_argument
+       instead of required_argument.
+       * src/groupadd.c: Add missing -p, --password description to the
+       Usage message.
+
+2008-02-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, etc/login.defs: Set GID_MIN to the same value as UID_MIN
+       by default (1000).
+       * NEWS, etc/login.defs: Added variables SYS_UID_MIN (100),
+       SYS_UID_MAX (999), SYS_GID_MIN (100), SYS_GID_MAX (999) for system
+       accounts.
+       * libmisc/find_new_ids.c: Added support for system accounts in
+       find_new_uid() and find_new_gid().
+       * NEWS, src/newusers.c, src/useradd.c, src/groupadd.c: Added new
+       option -r, --system for system accounts in useradd, groupadd, and
+       newusers.
+
+2008-02-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/groupmems.c: Fix buffer overflow when adding an user
+       to a group. Thanks to Peter Vrabec.
+
+2008-02-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, etc/useradd: Change the default HOME directory in
+       /etc/default/useradd according FHS (/home instead of /home/users).
+       This fixes Alioth's bug #310559. Thanks to Dale E. Edmons.
+
+2008-02-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newgrp.c: Use the correct AUDIT_CHGRP_ID event instead of
+       AUDIT_USER_START, when changing the user space group ID with
+       newgrp or sg. Thanks to sgrubb@redhat.com for the patch.
+
+2008-02-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Reset oflg with uflg if the new UID is equal to
+       the old one.
+       * src/usermod.c: Reset mflg with dflg if the new home directory is
+       the same as the old one.
+
+2008-02-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/usermod.c: Fix the handling of -a when a user is being
+       renamed (with -l). The new name of the user was used for the new
+       supplementary groups, but not in the existing ones.
+
+2008-02-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newusers.c: Set the shadow's password instead of the
+       passwd's password. Fix wrong cut&paste.
+
+2008-02-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Use a function to convert the dates from
+       /etc/shadow to human readable dates.
+       * src/usermod.c: Really log the expiration date change as human
+       readable strings instead of integers.
+       * src/usermod.c: No need to check audit_fd, audit_logger() will
+       take care of this.
+
+2008-02-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Do not translate the fromhost variable. It is
+       always used for syslog messages.
+
+2008-02-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, lib/defines.h: Switch to the C locale before sending
+       messages to syslog. The messages sent by shadow were not
+       translated, but error messages from PAM returned by pam_strerror()
+       were translated in the users's locale.
+
+2008-02-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS: newusers will behave more like useradd.
+       * src/newusers.c: The user's ID must be found before the group ID
+       to mimic useradd's behavior choices of UID and GID.
+       * src/newusers.c: Reuse the generic find_new_uid() and
+       find_new_gid() functions. This permits to respect the
+       UID_MIN/UID_MAX and GID_MIN/GID_MAX variables, should 
+       * src/newusers.c: Check if the user or group exist using the
+       external databases (with the libc getpwnam/getgrnam functions).
+       Refuse to update an user which exist in an external database but
+       does not exist in the local database.
+       * src/newusers.c: Check the usernames and groupnames with
+       check_user_name() and check_group_name()
+       * src/newusers.c: Use isdigit() for readability.
+       * src/newusers.c: Check if numerical IDs are valid (no remaining
+       chars).
+
+2008-02-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newusers.c: Fix the support for the NONE crypt method.
+
+2008-02-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newusers.c: Fix shadow group support (the list of admins was
+       not defined; it is now set to an empty list).
+
+2008-02-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, libmisc/salt.c: Do not seed the random number generator
+       each time, and use the time in microseconds to avoid having the
+       same salt for different passwords generated in the same second.
+       This permits to avoid using the same salt for different passwords
+       in newusers.
+
+2008-02-03  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/pwio.c, lib/pwio.h: New function to find an user by
+       its UID on the local database.
+       * lib/groupio.c, lib/groupio.h: New function to find a group by
+       its GID on the local database.
+       * libmisc/find_new_ids.c, lib/prototypes.h: Add new generic
+       functions to find the next user or group ID available:
+       find_new_uid() and find_new_gid(). They work the same way as the
+       functions with the same name of useradd or groupadd, except that
+       they check in the local database to make sure an ID was not
+       reserved in an uncommitted change (this is needed to be used in
+       newusers), they report a status instead of calling exit(), and
+       they can receive a preferred ID. They should later support system
+       IDs. This should be a little bit slower, but not too much (if the
+       database is not open the checks against the local database will
+       exit immediately, and if it is already open, all the checks will be
+       done regarding the data in memory).
+       * po/POTFILES.in: The new libmisc/find_new_ids.c file contains
+       translatable strings.
+       * libmisc/Makefile.am: Add libmisc/find_new_ids.c to the sources
+       of the libmisc library.
+       * src/useradd.c, src/groupadd.c: Use the find_new_uid() and
+       find_new_gid() from the library instead of the local functions.
+
+2008-02-02  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * po/*.po: Updated PO files.
+       * libmisc/age.c, libmisc/yesno.c, src/lastlog.c, src/grpck.c,
+       src/chfn.c, src/passwd.c, src/chage.c, src/login.c, src/sulogin.c,
+       src/chsh.c: Fix call to puts (remove end of line, or use fputs).
+       * po/*.po: Unfuzzy PO files according to above change.
+
+2008-01-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Fix build failures with --disable-shadowgrp. Thanks to Jürgen
+       Daubert for the patch.
+       * libmisc/salt.c: Include <stdio.h>, needed for stderr and printf
+       functions.
+       * lib/encrypt.c: Include <stdio.h>, needed for perror, stderr and
+       printf functions
+       * src/usermod.c: sgr_locked exists only if SHADOWGRP is defined.
+       * src/chgpasswd.c: Only check is the gshadow file exists if
+       SHADOWGRP is defined.
+
+2008-01-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/gpasswd.c, src/chfn.c, src/chage.c, src/chsh.c, src/grpck.c,
+       src/vipw.c, src/pwck.c, src/sulogin.c, src/newgrp.c,
+       src/userdel.c, src/lastlog.c, src/groupmems.c, src/usermod.c,
+       src/expiry.c, src/groupdel.c, src/useradd.c, src/su.c,
+       src/groupmod.c, src/passwd.c, src/groupadd.c, src/login.c,
+       src/suauth.c, src/faillog.c, src/id.c, libmisc/limits.c,
+       libmisc/addgrps.c, libmisc/env.c, libmisc/age.c, libmisc/yesno.c,
+       lib/getdef.c: Replace printf by puts for fixed strings. This would
+       avoid issues caused by formats introduced in translated strings.
+
+2008-01-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Strings improvement s/can't get unique/no more
+       available/.
+
+2008-01-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/usermod.c: Check that the new fields set with -u, -s,
+       -l, -g, -f, -e, -d, and -c differ from the old ones. If a
+       requested new value is equal to the old one, no changes will
+       be performed for that field. If no fields are changed, usermod
+       will exist successfully with a warning. This avoids logging
+       changes to syslog when there are actually no changes.
+
+2008-01-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Always define user_newcomment, user_newshell,
+       user_newexpire, and user_newinactive. It is more simple to always
+       have user_<x> as the old field, and user_new<x> as the new field
+       (even if the field did not change) instead of changing the
+       algorithm depending on WITH_AUDIT.
+
+2008-01-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: user_newname can only be used in WITH_AUDIT code
+       or when lflg is set. This issue was introduced in the code
+       refactoring of usermod.
+
+2008-01-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupadd.c: Fix typo in comment: s/find_new_uid/find_new_gid/
+
+2008-01-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: s/gid/GID/ in message string.
+       * src/useradd.c: Set this string for translation.
+
+2008-01-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/grpck.8.xml: Fix typo. Remove "the" from "All entries in the
+       <filename></filename> are checked [...]"
+       * man/grpck.8.xml: Conditionally include the parts mentioning the
+       gshadow file (based on SHADOWGRP).
+       * man/grpck.8.xml: Add reference to the gshadow(5) manpage
+       (conditionally included).
+
+2008-01-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/grpck.8.xml, man/pwck.8.xml: Indicate that the shadow
+       parameter is optional (i.e. a passwd file can be specified without
+       a shadow file, and the group file can be specified without the
+       gshadow file).
+
+2008-01-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/grpck.8.xml: Document the options with a list of options,
+       as in the pwck(8) manpage.
+
+2008-01-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newgrp.c: Fix segfault when an user returns to an
+       unknown GID (either the user was deleted during the user's newgrp
+       session or the user's passwd entry referenced an invalid group).
+       Add a syslog warning in that case.
+       * src/newgrp.c: Add an end of line when reporting an invalid
+       password.
+
+2008-01-12  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/useradd.c: Fix the handling of the --defaults option
+       (it required an argument, but should behave as -D)
+       * NEWS, man/useradd.8.xml: Document the --defaults option, which
+       was already described in the useradd's Usage information.
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Avoid setting the password to a const empty
+       string, but set the first char to \0. This avoids a warning.
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/salt.c: Add prototype for l64a(), gensalt(),
+       SHA_salt_size(), and SHA_salt_rounds().
+       * libmisc/salt.c: l64a() and gensalt() are static.
+       * libmisc/salt.c: The `meth' parameter of crypt_make_salt() is a
+       const. (ditto for the method variable).
+       * libmisc/salt.c: SHA_salt_rounds returns a const string.
+       * libmisc/salt.c: Avoid warnings with cast of random() to double.
+       * libmisc/salt.c: Replace rand() by random().
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/Makefile.am: Do not link libshadow.la with the intl, crypt,
+       skey and md libraries...
+       * src/Makefile.am: ...Specify for each binary which library is
+       required. skey and md are required for the binaries with
+       authentication of the user (chfn, chsh, login, passwd, su). intl
+       is required for all. mcrypt is required for user (chfn, chsh,
+       login, passwd, su, sulogin) and group (newgrp, gpasswd)
+       authentication and for the creation of passwords (chpasswd,
+       chgpasswd, gpasswd, newusers, passwd).
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/nscd.c, lib/nscd.h: Set the service parameter of
+       nscd_flush_cache() to const. This avoids a lot of warnings.
+       * lib/nscd.c: Include "nscd.h" to avoid inconsistent prototypes.
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/encrypt.c: Set the method string as a constant string.
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/port.c: Assume <errno.h> declares errno.
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/po/fr.po: Fix typo: s/rend compte indiqué/rend le compte
+       indiqué/
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/suauth.c: Remove prototype of check_su_auth(). It is
+       redundant with prototypes.h.
+       * src/suauth.c: isgrp() is static.
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/obscure.c: Tag the `old' parameter of palindrome(),
+       similar(), and simple() as unused.
+       * libmisc/loginprompt.c: Tag the `sig' parameter of login_exit()
+       as unused.
+       * src/expiry.c: Tag the `sig' parameter of catch_signals() as
+       unused.
+       * src/su.c: Tag the `sig' parameter of catch_signals() as unused.
+       * src/su.c: Add int parameter to the prototype of oldsig().
+       * src/login.c: Tag the `sig' parameter of alarm_handler() as
+       unused.
+       * src/sulogin.c: Tag the `sig' parameter of catch_signals() as
+       unused.
+       * libmisc/getdate.y: Tag the `string' parameter of yyerror() as
+       unused.
+       * libmisc/getdate.y: The string provided to yyerror() is const.
+       * libmisc/getdate.y: Fix the prototypes of yylex() and yyerror().
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/defines.h: Remove teh macro definition of SETXXENT_TYPE,
+       SETXXENT_RET, and SETXXENT_TEST. They were used by the now
+       removed pwent.c and grent.c.
+       * lib/defines.h: Remove the definition of PASSWD_PAG_FILE,
+       GROUP_PAG_FILE, SHADOW_PAG_FILE, and SGROUP_PAG_FILE. They are
+       never used.
+       * lib/defines.h: Don't include "snprintf.h". The file does not
+       exist in shadow.
+       * lib/defines.h: Add new macro unused to tag unused parameters.
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c, src/groupmems.c: Assume optarg and optind are
+       declared in <getopt.h>.
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Remove the pw_name argument of new_pw_passwd. Use
+       the user_newname global variable instead. This avoid using a
+       parameter with the same name as a function.
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newgrp.c: Removed unused gid parameter of syslog_sg().
+       * src/newgrp.c: The loginname and tty buffers are never changed.
+       Add the const qualifier.
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chpasswd.c, src/chgpasswd.c: The crypt_method string always
+       points to a constant string. Add the const qualifier.
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwunconv.c: Remove prototype of l64a() (not used in
+       pwunconv).
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login_nopam.c: Use an ANSI prototype for resolve_hostname()
+       instead of K&R prototype.
+       * src/login_nopam.c: Fix the prototypes of list_match(),
+       user_match(), from_match(), string_match(). There were no
+       parameters in the prototypes.
+       * src/login_nopam.c: Fix the prototypes of the function parameter
+       match_fn of list_match().
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/copydir.c: Remove the src parameter of copy_special().
+       The entry's information are taken from the stat structure.
+
+2008-01-06  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/console.c, libmisc/ulimit.c, lib/sgetgrent.c,
+       lib/sgetpwent.c: Include "prototypes.h" to make
+       sure the exported prototypes are the ones used for the definition
+       of functions.
+       * lib/prototypes.h: Added prototypes for __gr_del_entry(),
+       __gr_get_db(), __gr_get_head(), __gr_set_changed(), __gr_dup(),
+       __pw_del_entry(), __pw_get_db(), __pw_get_head(), __pw_dup(),
+       sgetgrent(), sgetpwent(), __sgr_del_entry(), __sgr_dup(),
+       __sgr_get_head(), __sgr_set_changed(), __spw_get_head(),
+       __spw_del_entry(), __spw_dup().
+       * lib/prototypes.h: Removed prototype for is_listed().
+       * lib/prototypes.h: Added name of the check_su_auth()'s parameters.
+       * lib/groupio.h: Removed prototypes for __gr_dup() and
+       __gr_set_changed().
+       * lib/sgroupio.c: Removed prototypes for putsgent(), sgetsgent(),
+       and __gr_get_db().
+       * lib/sgroupio.h: Removed prototypes for __sgr_dup() and
+       __sgr_set_changed().
+       * lib/shadowio.c: Removed prototype for __pw_get_db().
+       * lib/pwio.c: Removed prototype for sgetpwent() and putpwent().
+       * lib/shadowio.h: Removed prototypes for __spw_dup() and
+       __spw_set_changed().
+       * lib/pwio.h: Removed prototypes for __pw_dup() and
+       __pw_set_changed().
+       * lib/commonio.h: Add protection against multiple inclusions.
+       * lib/prototypes.h: Include commonio.h (needed for the
+       __xx_del_entry() functions).
+       * src/grpck.c: Remove prototypes for __gr_del_entry(),
+       __gr_get_head(), __sgr_del_entry(), and __sgr_get_head().
+       * src/pwck.c: Remove prototypes for __pw_del_entry(),
+       __pw_get_head(), __spw_del_entry(), and __spw_get_head().
+       * lib/groupio.c: Remove prototype for sgetgrent().
+       * lib/groupio.c: Add the name of the parameters for
+       merge_group_entries() and split_groups().
+       * lib/groupio.h: Remove prototypes for __gr_dup() and
+       __gr_set_changed().
+
+2008-01-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/groupadd.8.xml, man/groupmod.8.xml: Add documentation for
+       the new --password options.
+
+2008-01-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Fix find_new_gid() prototype. Add a void
+       parameter.
+
+2008-01-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h: Add the dolastlog() prototype.
+       * lib/prototypes.h: Typo: login.c -> loginprompt.c
+       * src/login.c: Remove declaration of dolastlog().
+       * lib/prototypes.h: Include <lastlog.h> for the declaration of
+       struct lastlog.
+       * lib/prototypes.h: Remove old comments in the header.
+
+2008-01-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/pwdcheck.c: Do not include <pwd.h>. Include <shadow.h>
+       and "pwauth.h" only when compiled without PAM support.
+       * src/chfn.c, src/chsh.c: Do not include <shadow.h>
+       * lib/commonio.c: Do not include <shadow.h>. Do not include
+       <pwd.h>. Include "nscd.h" instead of <nscd.h>.
+
+2008-01-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: Do not check if shadow.h exist, but make sure it
+       exists.
+       * libmisc/pwdcheck.c, src/chfn.c, src/chsh.c, lib/defines.h,
+       lib/shadowmem.c, lib/shadowio.c, lib/commonio.c:
+       HAVE_SHADOW_H is no more needed (shadow.h should always exist).
+
+2008-01-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/groupio.c: Remove prototype of putgrent(), add parameter's
+       name of sgetgrent().
+       * lib/prototypes.h: Fix the do_pam_passwd() prototype (it returns
+       void).
+
+2008-01-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/groupmod.c, src/groupadd.c: Add option --password to
+       groupadd and groupmod (similar to useradd and usermod).
+
+2008-01-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h: grent.c does not exist anymore. Remove the
+       putgrent prototype.
+       * lib/prototypes.h: "shadowio.h" was included for the definition
+       of the spwd structure. Replace this include by <shadow.h>
+       * libmisc/xmalloc.c, libmisc/utmp.c, libmisc/strtoday.c,
+       libmisc/pwd_init.c, libmisc/tz.c, lib/port.c, lib/fputsx.c,
+       libmisc/pam_pass.c, libmisc/log.c: Include "prototypes.h" to make
+       sure the exported prototypes are the ones used for the definition
+       of functions.
+       * libmisc/console.c: Define is_listed() as static and add its
+       prototype.
+       * libmisc/xgetXXbyYY.c, libmisc/yesno.c: Include config.h as a
+       system include, as recommended by the autoconf documentation.
+       * src/chage.c: Define isnum() as static and add its prototype.
+       * libmisc/xgetspnam.c: Add missing include "shadowio.h". (This was
+       OK as long as prototypes.h included this file.)
+       * src/nologin.c: Make a proper prototype for the main() function
+       declaration. (add void)
+       * src/login.c: login_prompt is the name of a function, use
+       loginprompt for the internal variable.
+       * src/chsh.c: loginsh is a global variable, use newshell for the
+       update_shell()'s parameter.
+       * lib/gshadow.c: The prototypes of fgetsx() and fputsx() are
+       already defined in prototypes.h. Remove the declaration of these
+       functions.
+       * lib/gshdow.c: list() is an external function. DO not shadow it
+       with a static function. The internal list() was renamed
+       build_list().
+       * lib/commonio.c: stat shadows another stat variable. Remove this
+       variable, and directly check the result of getfscreatecon().
+       * libmisc/utmp.c: Remove the declaration of getutent(),
+       getutline(), setutent(), and endutent() which are declared in
+       <utmp.h>
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newgrp.c: Remove duplicate logging to syslog.
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newgrp.c: Avoid assignments in conditionals.
+       * src/newgrp.c: Split check_perms(), syslog_sg() out of main().
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/shadow.c: Avoid assignments in conditionals.
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/groupio.c (split_groups): Test the pointer returned by malloc.
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c: Document add_one_entry_nis(), write_all(),
+       commonio_remove(), commonio_locate(), and commonio_rewind().
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwck.c: Avoid implicit brackets.
+       * src/pwck.c: Avoid implicit conversions to booleans.
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/grpck.c: Avoid implicit brackets.
+       * src/grpck.c: Avoid implicit conversions to booleans.
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS: No functional changes were introduced by the previous pwck
+       and grpck changes, except for the following bug fix: no syslog
+       logging if a passwd or group file was specified on the command
+       line without a shadowed database file, even if the system shadowed
+       database was changed).
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwck.c: Fix typos in comments (gshadow/shadow).
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/pwck.c: Split process_flags(), open_files(), close_files()
+       check_pw_file(), and check_spw_file() out of main(). New global
+       variables is_shadow, sort_mode, use_system_pw_file, and
+       use_system_spw_file.
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/xgetXXbyYY.c: De-comment code (duplicate the entry when
+       the _R function is not present on the system).
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/lastlog.c: Remove statbuf, not used.
+       * src/lastlog.c: Fix types, cast umin and umax to uid_t.
+       * src/lastlog.c: (option -u) user needs to be a signed long, not
+       uid_t (to accept rangees like -<uid>
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Avoid ?: construct without the middle term.
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/copydir.c, src/usermod.c, lib/prototypes.h: The uid and
+       gid parameters can be set to -1 to indicate that the original
+       owners must be kept. Change the types from uid_t/gid_t to a
+       long int (signed).
+       * libmisc/copydir.c: Change the copy_entry(), copy_dir(),
+       copy_symlink(), copy_special(), and copy_file() prototypes
+       accordingly.
+       * lib/prototypes.h: Add the parameters' name for the
+       libmisc/copydir.c functions.
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/limits.c, libmisc/obscure.c, src/login_nopam.c,
+       lib/pwauth.c: Avoid empty file when USE_PAM is set.
+       * libmisc/audit_help.c: Avoid empty file when WITH_AUDIT is not set.
+       * src/login_nopam.c: Fix warnings: resolve_hostname takes and
+       returns a constant string.
+
+2008-01-01  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/grpck.c: Split process_flags(), open_files(), and
+       close_files() out of main(). New global variables is_shadow,
+       sort_mode, use_system_grp_file, and use_system_sgr_file.
+       * src/grpck.c: Split check_grp_file() and check_sgr_file() out of
+       main().
+       * src/grpck.c: Split check_members() and compare_members_lists()
+       out of check_grp_file() and check_sgr_file().
+
+2007-12-31  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/po/Makefile.in.in: If remove-potcdate.sin does not exist,
+       use the one from teh po directory (it is not installed
+       automatically by autopoint.
+
+2007-12-31  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.h: Fix the type of the bitfields in the commonio_entry
+       and commonio_db structures to unsigned int (instead of int).
+
+2007-12-31  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chsh.c: Split process_flags(), check_perms(), and update_shell()
+       out of main().
+       * src/chsh.c: Before pam_end(), the return value of the previous
+       pam API was already checked. No need to validate it again.
+       * src/chsh.c: Avoid implicit brackets.
+       * src/chsh.c: Avoid assignments in comparisons.
+
+2007-12-31  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chfn.c: New function: process_flags() split out of main().
+       The flags variables are now global.
+       * src/chfn.c: New functions: check_perms(), update_gecos(),
+       get_old_fields(), and check_fields() split out of main().
+       * src/chfn.c: Before pam_end(), the return value of the previous
+       pam API was already checked. No need to validate it again.
+       * src/chfn.c: Avoid implicit brackets.
+       * src/chfn.c: Document may_change_field().
+       * src/chfn.c: Avoid implicit conversions to booleans.
+       * src/chfn.c: Avoid assignments in comparisons.
+
+2007-12-31  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newusers.c: Compilation fix for PAM support (pamh needs to be
+       global since the function split).
+       * src/chpasswd.c: Likewise.
+       * src/chgpasswd.c: Likewise.
+       * src/chpasswd.c: Avoid implicit conversions to booleans.
+
+2007-12-31  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chage.c: Fix typo: s/maximim/maximum/
+       * src/chage.c: New function: fail_exit(). Change most of the exit()
+       to a fail_exit, which makes sure the files are unlocked (new global
+       variables: pw_locked, spw_locked), the PAM transaction is ended, and
+       the failure is logged to libaudit (use a global user_name and user_uid
+       for logging).
+       * src/chage.c: Compilation fix for PAM support (pamh needs to be
+       global since the function split).
+       * src/chage.c: Document process_flags(), check_flags(), check_perms(),
+       open_files(), and close_files().
+       * src/chage.c: Split update_age() and get_defaults() out of main()
+       * src/chage.c: Drop the privileges just after opening the files.
+       * src/chage.c: Do not log to audit only if the user has an entry in
+       the shadow file.
+       * NEWS, src/chage.c (open_files): Also open the password file for
+       writing. This fix chage when the user only has a password entry (and
+       no shadow entries).
+       * src/chage.c (get_defaults): Use default values that don't change the
+       behavior of the account for the fields that are not specified when the
+       user has no shadow entry.
+
+2007-12-30  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupadd.c: Compilation fix for PAM support (pamh needs to be
+       global since the function split).
+       * src/groupadd.c: End the PAM transaction in fail_exit().
+       * src/groupadd.c: Document check_flags().
+
+2007-12-30  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/vipw.c: Compilation fix for non-gshadow support.
+
+2007-12-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newusers.c: Added support for gshadow.
+
+2007-12-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newusers.c: Do not add the new user to the group's
+       members, because the group is already the primary group of the new
+       user.
+
+2007-12-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       newusers cleanups
+       * src/newusers.c: main() split in new functions: process_flags(),
+       check_flags(), check_perms(), open_files(), and close_files().
+       * src/newusers.c: Before pam_end(), the return value of the previous
+       pam API was already checked. No need to validate it again.
+       * src/newusers.c: Avoid implicit brackets.
+       * src/newusers.c: Avoid assignments in comparisons.
+       * src/newusers.c: Avoid variables with the name of a type.
+
+2007-12-29  Nicolas François  <nicolas.francois@centraliens.net>
+
+       chage cleanups
+       * src/chage.c: Before pam_end(), the return value of the previous
+       pam API was already checked. No need to validate it again.
+       * src/chage.c: main() split in new functions: process_flags(),
+       check_flags(), check_perms(), open_files(), and close_files().
+       * src/chage.c: Avoid using a variable with the same name as a type.
+       * src/chage.c: Remove dead code. It was probably put here to add more
+       information to the audit_logger.
+       * src/chage.c: Avoid implicit brackets.
+       * src/chage.c: Avoid implicit conversion to booleans.
+       * src/chage.c: Avoid assignments in comparisons.
+
+2007-12-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Same changes for chgpasswd:
+       * src/chgpasswd.c: Before pam_end(), the return value of the previous
+       pam API was already checked. No need to validate it again.
+       * src/chgpasswd.c: main() split in process_flags(), check_flags(),
+       check_perms(), open_files(), and close_files().
+       * src/chgpasswd.c: Avoid assignments in comparisons.
+       * src/chgpasswd.c: Avoid implicit brackets.
+       * src/chgpasswd.c: Fix comments to match chgpasswd (group instead of
+       user's passwords are changed).
+
+2007-12-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chpasswd.c: Before pam_end(), the return value of the previous
+       pam API was already checked. No need to validate it again.
+       * src/chpasswd.c: New functions: process_flags(), check_flags(),
+       check_perms(). Split out of main().
+       * src/chpasswd.c: Other new functions: open_files(), close_files().
+       This force flushing the password database after the password file is
+       unlocked.
+       * src/chpasswd.c: Avoid assignments in comparisons.
+       * src/chpasswd.c: Avoid implicit brackets.
+
+2007-12-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/groupadd.c (find_new_gid): A group with the specified name
+       cannot exist at that time. Remove the check.
+       * src/groupadd.c (find_new_gid): If oflg is set, gflg is also set.
+       Use (!gflg), which is clearer than (!gflg || !oflg).
+       * src/groupadd.c (find_new_gid): find_new_gid is never called when an
+       GID is specified with -g. Simplify find_new_gid accordingly.
+       * src/groupadd.c (process_flags): prefer fail_exit to exit. This avoid
+       an explicit call to audit_logger().
+       * src/groupadd.c (main): Before pam_end(), the return value of the
+       previous pam API was already checked. No need to validate it again.
+       * src/groupadd.c (main, check_perms): New function check_perms().
+       Split the validation of the user's permissions out of main()
+
+2007-12-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       src/groupadd.c cleanup
+       * src/groupadd.c (fail_exit): When compiled without AUDIT support, if
+       the return code was E_SUCCESS, fail_exit() wouldn't have exited. Fix
+       the scope of #idef WITH_AUDIT.
+       * src/groupadd.c: Avoid implicit brackets.
+       * src/groupadd.c: Split the processing and checking of options out of
+       main() (process_flags).
+       * src/groupadd.c: New function check_flags(). Split the validation of
+       options and arguments out of process_flags.
+       * src/groupadd.c: Add the parameters' names in the prototypes.
+
+2007-12-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       libmisc/copydir.c cleanup
+       * libmisc/copydir.c: Split copy_tree() in more maintainable functions:
+       copy_entry(), copy_dir(), copy_symlink(), copy_hardlink(),
+       copy_special(), and copy_file().
+       * libmisc/copydir.c: -1 is used to indicate an error, directly set err
+       to -1, instead of incrementing it, and checking if not nul at the
+       end.
+       * libmisc/copydir.c: Avoid assignments in comparisons.
+       * libmisc/copydir.c: Document selinux_file_context.
+       * libmisc/copydir.c: Avoid implicit brackets.
+       * libmisc/copydir.c: Avoid implicit conversions to booleans.
+
+2007-12-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       gpasswd cleanup
+       * src/gpasswd.c: Add argument name to the internal function
+       prototypes.
+       * src/gpasswd.c: Document global variables.
+       * src/gpasswd.c: New function: process_flags(). Split the processing
+       of options out of main().
+       * src/gpasswd.c: New functions: open_files(), close_files(),
+       update_group(). Split out from main() to simplify this (too) big
+       function.
+       * src/gpasswd.c: New functions: check_perms(), get_group(),
+       change_passwd(), check_flags(). Split out of main() to simplify main().
+       * src/gpasswd.c: Avoid implicit brackets.
+       * src/gpasswd.c: Avoid assignments in comparisons.
+       * src/gpasswd.c: Avoid implicit conversions to booleans.
+
+2007-12-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Merge Debian's patch 462_warn_to_edit_shadow
+       * NEW, src/vipw.c: Recommend editing the shadowed (resp. regular) file
+       if the regular (resp. shadowed) file was edited.
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Merge Debian's patch 451_login_PATH
+       * NEWS, libmisc/setupenv.c: Export PATH according to ENV_PATH and
+       ENV_SUPATH, as for su. This impacts login.
+       * man/login.1.xml: PATH and SUPATH are now used both when PAM support
+       is disabled and enabled.
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Merge Debian's patch 496_login_init_session
+       * src/login.c, src/sulogin.c: If started as init, start a new session.
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Merge Debian's patch 408_passwd_check_arguments
+       * NEWS, src/passwd.c: Make sure that no more than one username
+       argument was provided.
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Merge Debian's patch 412_lastlog_-u_numerical_range
+       * NEWS, src/lastlog.c, man/lastlog.8.xml: Accept numerical user, or
+       ranges with the -u option.
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Merge Debian's patch 466_fflush-prompt
+       * libmisc/Makefile.am, lib/prototypes.h, libmisc/yesno.c, src/grpck.c,
+       src/pwck.c: move yes_or_no() from grpck/pwck to a separate
+       libmisc/yesno.c (with a read_only argument).
+       * libmisc/fields.c, libmisc/yesno.c: Make sure stdout is flushed before
+       reading the user's answer.
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Merge Debian's patch 480_getopt_args_reorder
+       * NEWS, src/su.c: su's arguments are now reordered.
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Merge RedHat's patch shadow-4.0.18.1-mtime.patch:
+       * NEWS: Document that usermod will now preserve user's file modification
+       and access time.
+       * libmisc/copydir.c: Preserve the access and modification time of copied
+       files. This is important for usermod. This will also impact useradd, for
+       the skeleton files, but this is not important.
+       * libmisc/copydir.c: Stop and return an error if a file could not be
+       closed after during a copy.
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Cleanups:
+       * src/useradd.c (find_new_gid): Check that gflg is not set (assert).
+       * src/useradd.c (find_new_gid): Do not check the group name uniqueness
+       (already checked in main).
+       * src/useradd.c (find_new_gid): Avoid a "continue" in the loop.
+       * src/useradd.c (find_new_gid): Remove irrelevant comments.
+       * src/useradd.c (find_new_gid): Fix the function definition's comment.
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Merge RedHat's patch shadow-4.0.18.1-findNewUidOnce.patch:
+       * src/useradd.c (usr_update): Do not call find_new_uid(). The UID was
+       already either specified or found by another call to find_new_uid().
+       * src/useradd.c (find_new_uid): Always start with uid_min (find_new_uid()
+       is never called when user_id was already specified).
+       * src/useradd.c (find_new_uid): Fix the comments (find_new_uid() is not
+       called when the UID is specified (uflg)).
+       * src/useradd.c (main): Only call find_new_uid() if (!oflg) and (!uflg).
+       If uflg is set (but not oflg), check the UID uniqueness.
+       * src/useradd.c (find_new_uid): Don't check the uid and user name
+       uniqueness in find_new_uid(). The user name uniqueness is already checked
+       during the parameter validation. UID uniqueness is also checked (see
+       above).
+       * src/useradd.c (find_new_uid): Don't check uflg in find_new_uid().
+       * src/useradd.c (find_new_uid): Make sure that find_new_uid() is not
+       called when uflg is set (assert).
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Merge RedHat's patch shadow-4.1.0-lOption.patch
+       * NEWS, src/useradd.c, man/useradd.8.xml: Add option -l to avoid adding
+       the user to the lastlog and faillog databases.
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c, src/groupadd.c: NO_GETPWENT is no more supported. Remove
+       associated chunks of code.
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/groupadd.8.xml: Document the long options (--force, --gid, --key,
+       --non-unique).
+
+2007-12-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Merge RedHat's patch shadow-4.0.3-noinst.patch
+       * NEWS, lib/Makefile.am: Do not install the shadow library per default.
+       lib_LTLIBRARIES changed to noinst_LTLIBRARIES.
+
+2007-12-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, configure.in: Prepare the 4.1.0 release.
+
+2007-12-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/chgpasswd.c: Use chgpasswd PAM policy file instead of
+       chpasswd's one.
+
+2007-12-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/pwconv.8.xml: Fix typos.
+       * man/chpasswd.8.xml, man/chgpasswd.8.xml: Document the NONE crypt
+       method.
+       * man/login.defs.d/MAIL_DIR.xml: Add comment regarding useradd not
+       using MAIL_FILE.
+       * man/login.defs.d/ERASECHAR.xml, man/login.defs.d/KILLCHAR.xml,
+       man/login.defs.d/CONSOLE_GROUPS.xml, man/login.defs.d/ENV_HZ.xml,
+       man/login.defs.d/ENV_PATH.xml, man/login.defs.d/ENV_SUPATH.xml:
+       These variables are also used by some tools when compiled with PAM
+       support.
+       * man/login.defs.d/ENV_HZ.xml: Add note that it is only used by
+       sulogin when compiled with PAM support.
+       * man/login.defs.d/ENV_SUPATH.xml: Typos: ENV_PATH -> ENV_SUPATH,
+       and mention sbin in the path.
+       * man/login.defs.d/LOGIN_STRING.xml: Fix typo: confition ->
+       condition.
+       * man/sg.1.xml: Add CONFIGURATION section (SYSLOG_SG_ENAB).
+       * man/su.1.xml: ENV_HZ, LOGIN_STRING, MAIL_DIR, USERGROUPS_ENAB
+       are only used when su is compiled without PAM support.
+       * man/login.defs.5.xml: Added variables: OBSCURE_CHECKS_ENAB
+       PASS_ALWAYS_WARN PASS_CHANGE_TRIES SULOG_FILE SU_NAME
+       SU_WHEEL_ONLY SYSLOG_SG_ENAB SYSLOG_SU_ENAB.
+       * man/login.defs.5.xml: ENVIRON_FILE is only used when compiled
+       without PAM support.
+       * man/login.defs.5.xml: sulogin uses variables even when compiled
+       with PAM support.
+       * man/login.1.xml: ENV_HZ ENV_PATH ENV_SUPATH MAIL_DIR UMASK are
+       only used when login is not compiled with PAM support.
+
+2007-12-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Make sure is_console is only defined when USE_PAM
+       is not defined.
+
+2007-12-09  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/pwd2spwd.c: Fix time() prototype.
+
+2007-12-08  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.d/CONSOLE_GROUPS.xml,
+       man/login.defs.d/CONSOLE.xml, man/login.defs.d/DEFAULT_HOME.xml,
+       man/login.defs.d/ENV_HZ.xml, man/login.defs.d/ENVIRON_FILE.xml,
+       man/login.defs.d/ENV_PATH.xml, man/login.defs.d/ENV_SUPATH.xml,
+       man/login.defs.d/ENV_TZ.xml, man/login.defs.d/ERASECHAR.xml,
+       man/login.defs.d/FAIL_DELAY.xml,
+       man/login.defs.d/FAILLOG_ENAB.xml,
+       man/login.defs.d/FAKE_SHELL.xml, man/login.defs.d/FTMP_FILE.xml,
+       man/login.defs.d/HUSHLOGIN_FILE.xml,
+       man/login.defs.d/ISSUE_FILE.xml, man/login.defs.d/KILLCHAR.xml,
+       man/login.defs.d/LASTLOG_ENAB.xml, man/login.defs.d/LOGIN_RETRIES.xml,
+       man/login.defs.d/LOGIN_TIMEOUT.xml, man/login.defs.d/LOG_OK_LOGINS.xml,
+       man/login.defs.d/LOG_UNKFAIL_ENAB.xml,
+       man/login.defs.d/MAIL_CHECK_ENAB.xml, man/login.defs.d/MOTD_FILE.xml,
+       man/login.defs.d/NOLOGINS_FILE.xml,
+       man/login.defs.d/OBSCURE_CHECKS_ENAB.xml,
+       man/login.defs.d/PASS_ALWAYS_WARN.xml,
+       man/login.defs.d/PASS_CHANGE_TRIES.xml,
+       man/login.defs.d/PASS_MAX_LEN.xml,
+       man/login.defs.d/PORTTIME_CHECKS_ENAB.xml,
+       man/login.defs.d/QUOTAS_ENAB.xml, man/login.defs.d/SULOG_FILE.xml,
+       man/login.defs.d/SU_NAME.xml, man/login.defs.d/SU_WHEEL_ONLY.xml,
+       man/login.defs.d/SYSLOG_SG_ENAB.xml,
+       man/login.defs.d/SYSLOG_SU_ENAB.xml,
+       man/login.defs.d/TTYGROUP.xml, man/login.defs.d/TTYTYPE_FILE.xml,
+       man/login.defs.d/ULIMIT.xml, man/login.defs.d/USERGROUPS_ENAB.xml:
+       New documentation of login.defs variables.
+       * man/login.defs.d/MAIL_DIR.xml: Updated. It now contains the
+       MAIL_FILE documentation.
+       * man/login.defs.d/LOGIN_STRING.xml: Updated. Mentions %s.
+       * man/pwconv.8.xml, man/groupmems.8.xml, man/groupdel.8.xml,
+       man/useradd.8.xml, man/pwck.8.xml, man/groupadd.8.xml,
+       man/sulogin.8.xml, man/newgrp.1.xml, man/usermod.8.xml,
+       man/su.1.xml, man/vipw.8.xml, man/passwd.1.xml,
+       man/groupmod.8.xml, man/login.1.xml, man/userdel.8.xml,
+       man/grpck.8.xml: Added CONFIGURATION section.
+       * man/generate_mans.mak: The generations of manpages depends on
+       the variables from the Makefiles. Add the dependency on Makefile.
+       * man/login.defs.5.xml: New login.defs variable documented.
+       * man/Makefile.am: Added XML variable documentation to the
+       distributed files.
+
+2007-12-05  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/gshadow.5.xml: Fix the newgrp section in the gshadow.5
+       manpage. Thanks to Andre Majorel <aym-naibed@teaser.fr>.
+
+2007-11-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/Makefile.am: Added the login.defs variables description to
+       the man's EXTRA_DIST.
+
+2007-11-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/chfn.1.xml: Uses CHFN_AUTH, CHFN_RESTRICT, LOGIN_STRING.
+       * man/chgpasswd.8.xml: Uses ENCRYPT_METHOD, MAX_MEMBERS_PER_GROUP,
+       MD5_CRYPT_ENAB, SHA_CRYPT_MIN_ROUNDS (SHA_CRYPT_MAX_ROUNDS).
+       * man/chpasswd.8.xml: Switch to using entities for ENCRYPT_METHOD,
+       MD5_CRYPT_ENAB, SHA_CRYPT_MIN_ROUNDS (SHA_CRYPT_MAX_ROUNDS).
+       * man/chsh.1.xml: Uses CHSH_AUTH, LOGIN_STRING.
+       * man/expiry.1.xml: Does not use any login.defs parameter.
+       * man/gpasswd.1.xml: Uses ENCRYPT_METHOD, MAX_MEMBERS_PER_GROUP,
+       MD5_CRYPT_ENAB, SHA_CRYPT_MIN_ROUNDS.
+       * man/login.defs.5.xml: Added CHSH_AUTH.
+       * man/login.defs.5.xml: Cross reference -> cross references.
+       * man/login.defs.5.xml: chfn only uses CHFN_AUTH when no_pam.
+       * man/login.defs.5.xml: chsh uses CHSH_AUTH, not CHFN_AUTH.
+       * man/login.defs.d/CHSH_AUTH.xml: Added.
+       * man/login.defs.5.xml: chsh uses parameters only when no_pam.
+       * man/login.defs.5.xml: expiry does not use CONSOLE_GROUPS, even
+       if linked in the binary.
+       * man/newusers.8.xml: Uses ENCRYPT_METHOD, MAX_MEMBERS_PER_GROUP,
+       MD5_CRYPT_ENAB, PASS_MAX_DAYS, PASS_MIN_DAYS, PASS_WARN_AGE,
+       SHA_CRYPT_MIN_ROUNDS, UMASK.
+
+2007-11-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/generate_translations.mak, man/po/Makefile.in.in: Add
+       --expand-all-entities to the call to xml2po to avoid translating
+       the external entities separately.
+
+2007-11-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.d/, man/login.defs.d/CHFN_RESTRICT.xml,
+       man/login.defs.d/MAIL_DIR.xml, man/login.defs.d/PASS_MAX_DAYS.xml,
+       man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml,
+       man/login.defs.d/CHFN_AUTH.xml, man/login.defs.d/MD5_CRYPT_ENAB.xml,
+       man/login.defs.d/PASS_WARN_AGE.xml, ·man/login.defs.d/UMASK.xml,
+       man/login.defs.d/PASS_MIN_DAYS.xml, man/login.defs.d/UID_MAX.xml,
+       man/login.defs.d/LOGIN_STRING.xml, man/login.defs.d/GID_MAX.xml,
+       man/login.defs.d/ENCRYPT_METHOD.xml, man/login.defs.d/USERDEL_CMD.xml,
+       man/login.defs.d/MAX_MEMBERS_PER_GROUP.xml, man/login.defs.5.xml:
+       Put each variable description in an external entities. This will permit
+       to reference them in the various utils manpages.
+       * man/login.defs.5.xml: Describe the usage of variables by each
+       tools when compiled without PAM support.
+
+2007-11-26  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * po/stats: Do not generate gmo files.
+
+2007-11-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/po/LINGUAS: Added missing LINGUAS.
+       * man/po/de.po, man/po/fr.po, man/po/it.po, man/po/pl.po,
+       man/po/ru.po, man/po/sv.po: Updated.
+
+2007-11-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in, man/po/Makefile.in.in, man/po/Makevars,
+       man/po/POTFILES.in, man/Makefile.am: Generate the PO files for the
+       manpages in the man/po directory (instead of man/<lang>). Use a
+       Makefile.in.in based on gettext's one. This ensure that the PO are
+       generated before being used in the <lang> directories.
+       * man/generate_mans.mak, man/generate_translations.mak,
+       man/Makefile.am: New makefile for the generation of manpages from
+       XML (generate_mans.mak). This avoid duplicate chunks in
+       generate_translations.mak and Makefile.am
+       * man/de/de.po, man/fr/fr.po, man/it/it.po, man/pl/pl.po,
+       man/ru/ru.po, man/sv/sv.po: Moved to...
+       * man/po/de.po, man/po/fr.po, man/po/it.po, man/po/pl.po,
+       man/po/ru.po, man/po/sv.po: ... here.
+
+2007-11-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c, src/lastlog.c, src/newusers.c, src/chpasswd.c,
+       src/usermod.c, src/chgpasswd.c, src/vipw.c, src/useradd.c,
+       src/su.c, src/groupmod.c, src/passwd.c, src/groupadd.c,
+       src/chage.c, src/faillog.c, src/chsh.c: Do not use tabulations in
+       Usage strings.
+       * po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po,
+       po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/hu.po, po/id.po,
+       po/it.po, po/ja.po, po/nb.po, po/pl.po, po/pt_BR.po, po/pt.po,
+       po/ro.po, po/ru.po, po/sk.po, po/sv.po, po/tl.po, po/tr.po,
+       po/uk.po, po/vi.po: Unfuzzy previous changes.
+       * po/bs.po, po/he.po, po/nn.po, po/sq.po: No Usage string
+       translated. Just updated PO.
+       * po/dz.po, po/km.po, po/ko.po, po/ne.po, po/nl.po, po/zh_CN.po,
+       po/zh_TW.po: It would be too error prone for me to unfuzzy these
+       ones. Updated PO. (km and ne should be reviewed: options are
+       translated).
+
+2007-11-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * po/ne.po, po/bs.po, po/cs.po, po/pt_BR.po, po/km.po, po/es.po,
+       po/eu.po, po/ko.po, po/hu.po, po/sk.po, po/vi.po, po/uk.po,
+       po/ro.po, po/sq.po, po/ru.po, po/id.po, po/nb.po, po/el.po,
+       po/gl.po, po/fr.po, po/nl.po, po/pl.po, po/nn.po, po/it.po,
+       po/dz.po, po/tl.po, po/pt.po, po/ca.po, po/da.po, po/tr.po,
+       po/sv.po, po/de.po, po/ja.po, po/zh_TW.po, po/he.po, po/fi.po,
+       po/zh_CN.po: Run "make update-po" in the po directory.
+
+2007-11-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: New configure option: --with-sha-crypt enabled by
+       default. Keeping the feature enabled is safe. Disabling it permits
+       to disable the references to the SHA256 and SHA512 password
+       encryption algorithms from the usage help and manuals (in addition
+       to the support for these algorithms in the code).
+       * libmisc/obscure.c, libmisc/salt.c, src/newusers.c,
+       src/chpasswd.c, src/chgpasswd.c, src/passwd.c: ENCRYPT_METHOD is
+       always supported in login.defs. Remove the ENCRYPTMETHOD_SELECT
+       preprocessor condition.
+       * libmisc/obscure.c, libmisc/salt.c, src/newusers.c,
+       src/chpasswd.c, src/chgpasswd.c, src/passwd.c: Disable SHA256 and
+       SHA512 if USE_SHA_CRYPT is not defined (this corresponds to a
+       subset of the ENCRYPTMETHOD_SELECT sections).
+
+2007-11-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/encrypt.c: If we requested a non DES encryption, make sure
+       crypt returned a encrypted password longer than 13 chars. This
+       protects against the GNU crypt() which does not return NULL if the
+       algorithm is not supported, and return a DES encrypted password.
+
+2007-11-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/groupio.c: Add missing #include "getdef.h"
+
+2007-11-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newusers.c: Provide the crypt method to all the
+       crypt_make_salt invocations.
+       * src/newusers.c: Tag the ENCRYPTMETHOD_SELECT dependent code
+       accordingly.
+
+2007-11-24  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/salt.c: Make sure method is not NULL, defaulting to DES.
+       Thanks to Dan Kopecek <dkopecek@redhat.com>.
+       * src/chpasswd.c, src/chgpasswd.c: Do not use DES by default, but
+       the system default define in /Etc/login.defs. Thanks to Dan
+       Kopecek <dkopecek@redhat.com>.
+       * NEWS, man/chpasswd.8.xml, man/chgpasswd.8.xml: Do not mention
+       DES as the default algorithm.
+       * src/chpasswd.c, src/chgpasswd.c: Tag the ENCRYPTMETHOD_SELECT
+       dependent code accordingly.
+
+2007-11-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/salt.c: Move the srandom call to gensalt.
+       * libmisc/salt.c (gensalt): Replace the test on salt_size by an
+       assert.
+
+2007-11-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Patch contributed by Dan Kopecek <dkopecek@redhat.com>
+       * src/chpasswd.c, src/chgpasswd.c, src/newusers.c: Fix compilation
+       when ENCRYPTMETHOD_SELECT is not defined.
+       * libmisc/salt.c (MAGNUM): The nul char was put on (array)[2]
+       instead of (array)[3].
+       * libmisc/salt.c: MAGNUM should be defined even if
+       ENCRYPTMETHOD_SELECT is not defined.
+       * libmisc/salt.c: Use random instead of rand.
+       * libmisc/salt.c (gensalt): New function to generate a salt
+       (instead of using gettimeofday).
+
+2007-11-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newusers.c: New options -c/--crypt-method
+       -s/--sha-rounds.
+
+2007-11-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chpasswd.c: Added crypt method: NONE.
+       * src/chpasswd.c: Added --sha-rounds to the usage().
+       * libmisc/Makefile.am, libmisc/getlong.c, src/chgpasswd.c,
+       src/chpasswd.c, lib/prototypes.h: New getlong function. Replace
+       chpasswd's and chgpasswd's getnumber.
+
+2007-11-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/groupio.c: Removed unused variable 'member'.
+
+2007-11-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/chpasswd.8.xml: Document the variables used by chpasswd.
+       The definitions are copied from login.defs. I should try to use a
+       less error prone process for this.
+
+2007-11-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/login.defs.5.xml: Use <replaceable> for the values set by
+       users. (was sometimes <emphasis remap='I'>)
+       * man/login.defs.5.xml: Use <option> vor the variable names. This
+       makes the manpage much more readable.
+       * man/login.defs.5.xml (ENCRYPT_METHOD, MD5_CRYPT_ENAB,
+       SHA_CRYPT_MIN_ROUNDS, SHA_CRYPT_MAX_ROUNDS): Mention that command
+       line option may supersede the system setting.
+       * man/login.defs.5.xml: Document the variables used by chpasswd
+       and chgpasswd.
+
+2007-11-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/shadowmem.c, lib/groupmem.c, lib/pwmem.c:
+       svn propset svn:keywords Id
+
+2007-11-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, lib/getdef.c, man/login.defs.5.xml: New login.defs
+       variable: MAX_MEMBERS_PER_GROUP. Used for the split groups support.
+       * lib/commonio.c, lib/commonio.h: Add an open_hook and close_hook
+       operation. They are called after the database is actually opened
+       and parse, or before it is closed.
+       * lib/groupio.c: Add an open_hook to merge split groups, and an
+       close group to split groups if MAX_MEMBERS_PER_GROUP is set.
+       This fixes gpasswd and chgpasswd when split groups are used.
+       * lib/sgroupio.c, lib/shadowio.c, lib/pwio.c: No open or close
+       hooks for these databases. (unsure about what should be the gshadow
+       behavior for split groups)
+
+2007-11-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/gpasswd.c: Read the group and shadow groups using
+       gr_locate and sgr_locate. gpasswd write in the file database. Thus
+       it should read information from the file database, not using
+       getgrnam. The change to sgr_locate is just for consistency. This
+       requires opening the group databases (read only) using
+       gr_open/sgr_open.
+
+2007-11-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: SHADOWGRP added to AM_CONDITIONAL for the
+       generation of manpages.
+       * man/generate_translations.mak: Added pam/no_pam condition (like
+       in man/Makefile.am).
+       * man/Makefile.am, man/generate_translations.mak: Added
+       gshadow/no_gshadow condition.
+       * man/gpasswd.1.xml: Use the gshadow/no_gshadow condition to
+       change the manpage depending on the shadow group support.
+       * NEWS: Indicate that manpages should be re-generated if configure
+       option are changed, due to conditions.
+
+2007-11-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * po/ru.po: Updated to 399t. Thanks to Yuri Kozlov <kozlov.y@gmail.com>.
+       * man/po/ru.po: Updated to 757t. Thanks also to Yuri Kozlov
+       <kozlov.y@gmail.com>.
+
+2007-11-22  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/Makefile.am: Add support for conditionally including
+       paragraphs. (e.g. to support the documentation of PAM and !PAM
+       features).
+
+2007-11-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/newusers.8.xml: Added /etc/gshadow, /etc/group, /etc/shadow,
+       and /etc/passwd to section FILES.
+       * man/newusers.8.xml: Mentions that PAM is not used to set the
+       passwords.
+       * man/chpasswd.8.xml: Added section FILES (/etc/passwd,
+       /etc/shadow, /etc/login.defs).
+       * man/chpasswd.8.xml: Use the same paragraph as in newusers.8.xml
+       to indicate that PAM is not used.
+       * man/chgpasswd.8.xml: Added section FILES (/etc/group,
+       /etc/gshadow, /etc/login.defs).
+
+2007-11-21  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newusers.c: Try harder to get the GID equal to the UID.
+       This was not the case when the GID is not specified, and a GID
+       exist with an ID higher than the all the UIDs.
+       * src/newusers.c: Typo in comment: contrained -> constrained.
+
+2007-11-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chgpasswd.c: If the shadow group file is not present, do not
+       try to locate the group entry from /etc/gshadow, and set the
+       password in /etc/group.
+
+2007-11-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/obscure.c, libmisc/salt.c, src/passwd.c: Match DES, MD5,
+       SHA256, and SHA512 exactly (not only the first 3/6 chars).
+       * libmisc/salt.c (SHA_salt_rounds): Set rounds to the specified
+       prefered_rounds value, if specified.
+       * src/gpasswd.c, libmisc/salt.c: Fix compilation warnings (use
+       size_t for lengths).
+       * src/chpasswd.c, src/chgpasswd.c: Add missing parenthesis.
+
+2007-11-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/sv, man/de, man/fr, man/pl, man/ru, man/it: Ignore the
+       generated manpages. Add *.[1358] to the svn:ignore property.
+
+2007-11-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/chgpasswd.c, src/chpasswd.c: The -c, -e, and -m options are
+       exclusives.
+
+2007-11-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/chpasswd.8.xml, man/chgpasswd.8.xml: Document how the
+       encryption algorithm is chosen for the passwords. Document the new
+       -c and -s options. Add a reference to login.defs(5).
+       * man/login.defs.5.xml: Document the ENCRYPT_METHOD,
+       MD5_CRYPT_ENAB, SHA_CRYPT_MIN_ROUNDS, and SHA_CRYPT_MAX_ROUNDS
+       variables.
+       * etc/login.defs: Indicate that MD5_CRYPT_ENAB is deprecated.
+       Document the relationship with PAM for MD5_CRYPT_ENAB and
+       ENCRYPT_METHOD.
+
+2007-11-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Increase the size of crypt_passwd from 128 to 256
+       to avoid overflow in case of SHA512 (161 should be sufficient).
+
+2007-11-20  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h, libmisc/salt.c: Add parameters to
+       crypt_make_salt to force the crypt method and number of rounds.
+       * libmisc/salt.c: Add parameter to SHA_salt_rounds to force the
+       number of rounds.
+       * libmisc/salt.c, lib/getdef.c: ENCRYPT_METHOD and MD5_CRYPT_ENAB
+       are needed also when USE_PAM (e.g. for chpasswd).
+       * src/passwd.c, src/newusers.c, src/gpasswd.c: Use the new
+       crypt_make_salt prototype
+       * src/chpasswd.c, src/chgpasswd.c: Add option -c, --crypt-method
+       and -s, --sha-rounds to specify the crypt method and number of
+       rounds in case of one of the SHA methods. The new prototype of
+       crypt_make_salt simplifies the handling of -m, --md5.
+
+2007-11-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/salt.c: The salt has a random size (between 8 and 16
+       bytes).
+       * lib/getdef.c, etc/login.defs: Add definitions for
+       SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS.
+       * libmisc/salt.c: Use SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS
+       to add a random number of rounds if needed.
+
+2007-11-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/salt.c (MAGNUM): Terminate the array with nul (the array
+       is then used with strcat).
+       * libmisc/salt.c (crypt_make_salt): Initialize result[0] to nul at
+       the beginning (was not initialized when USE_PAM).
+       * libmisc/salt.c (crypt_make_salt): Check that ENCRYPT_METHOD is a
+       valid crypt method.
+
+2007-11-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, libmisc/obscure.c, libmisc/salt.c, src/passwd.c,
+       lib/getdef.c, etc/login.defs: Add support for SHA256 and SHA512
+       encrypt methods. Apply RedHat's patch shadow-4.0.18.1-sha256.patch.
+       Thanks to Peter Vrabec. Hardly no changes except re-indent and
+       changes related to recent modifications (max_salt_len in
+       crypt_make_salt). Changes in lib/defines.h not applied (definition
+       of ENCRYPTMETHOD_SELECT). I will add a configure check or flag.
+
+2007-11-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/de/Makefile.am: Add su.1 to the generated manpages.
+       * man/fr/Makefile.am: Add id.1 to EXTRA_DIST. It will be
+       generated.
+       * man/pl/Makefile.am: Add groupmems.8 to the generated manpages.
+       * man/it/Makefile.am: Add logoutd.8 to EXTRA_DIST. It will be
+       generated.
+       * man/de/su.1, man/fr/id.1, man/pl/groupmems.8, man/it/logoutd.8:
+       Removed, since auto-generated.
+
+2007-11-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Fix some compilation warnings:
+       * src/login.c: "dereferencing type-punned pointer will break
+       strict-aliasing rules", add a variable indirection: ptr_pam_user.
+       * lib/commonio.c: do not initialize the sb stat structure.
+       * lib/pwio.c, lib/shadowio.c, lib/sgroupio.c, lib/groupio.c:
+       initialize the security context if WITH_SELINUX.
+       * lib/nscd.c: The service argument is not const (used in the exec*
+       parameters). This matches with the prototype definition.
+       * src/groupmems.c: Avoid ++i when i is also used in the same line.
+       * src/newusers.c: i is positive every time it is compared. Add
+       cast to unsigned int.
+       * src/nologin.c: Use a main() prototype with no arguments.
+       * libmisc/getdate.y: Initialize the type and value fields of the
+       terminating entry for each TABLE.
+       * libmisc/tz.c: Use "TZ=CST6CDT" as the default timezone.
+
+2007-11-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/pl/Makefile.am: Add getspnam.3 to EXTRA_DIST since it is
+       generated with shadow.3.
+       * man/generate_translations.mak: Clean all the manpages, based on
+       $(EXTRA_DIST), not $(man_MANS).
+
+2007-11-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/sv/getspnam.3, man/sv/faillog.5, man/sv/faillog.8,
+       man/sv/grpconv.8, man/sv/chsh.1, man/sv/shadow.3,
+       man/sv/grpunconv.8, man/sv/shadow.5, man/sv/newgrp.1,
+       man/sv/limits.5, man/sv/gpasswd.1, man/sv/sg.1, man/sv/userdel.8,
+       man/sv/lastlog.8, man/sv/login.access.5, man/sv/grpck.8,
+       man/sv/chfn.1, man/sv/expiry.1, man/sv/newusers.8,
+       man/sv/chpasswd.8, man/sv/pwconv.8, man/sv/logoutd.8,
+       man/sv/groupmems.8, man/sv/usermod.8, man/sv/pwunconv.8,
+       man/sv/su.1, man/sv/groupdel.8, man/sv/chgpasswd.8,
+       man/sv/login.defs.5, man/sv/vipw.8, man/sv/useradd.8,
+       man/sv/gshadow.5, man/sv/passwd.1, man/sv/groupmod.8,
+       man/sv/passwd.5, man/sv/chage.1, man/sv/porttime.5,
+       man/sv/login.1, man/sv/pwck.8, man/sv/nologin.8,
+       man/sv/groupadd.8, man/sv/suauth.5, man/sv/vigr.8,
+       man/sv/groups.1, man/de/passwd.1, man/de/newgrp.1, man/de/chsh.1,
+       man/de/passwd.5, man/de/login.1, man/de/vipw.8, man/de/chfn.1,
+       man/de/vigr.8, man/de/groups.1, man/fr/getspnam.3,
+       man/fr/faillog.5, man/fr/faillog.8, man/fr/grpconv.8,
+       man/fr/chsh.1, man/fr/shadow.3, man/fr/grpunconv.8,
+       man/fr/shadow.5, man/fr/newgrp.1, man/fr/limits.5,
+       man/fr/gpasswd.1, man/fr/sg.1, man/fr/userdel.8,
+       man/fr/login.access.5, man/fr/lastlog.8, man/fr/grpck.8,
+       man/fr/chfn.1, man/fr/expiry.1, man/fr/newusers.8,
+       man/fr/chpasswd.8, man/fr/pwconv.8, man/fr/logoutd.8,
+       man/fr/usermod.8, man/fr/pwunconv.8, man/fr/su.1,
+       man/fr/groupdel.8, man/fr/login.defs.5, man/fr/vipw.8,
+       man/fr/useradd.8, man/fr/gshadow.5, man/fr/passwd.1,
+       man/fr/groupmod.8, man/fr/passwd.5, man/fr/porttime.5,
+       man/fr/chage.1, man/fr/login.1, man/fr/pwck.8, man/fr/groupadd.8,
+       man/fr/suauth.5, man/fr/vigr.8, man/fr/groups.1, man/pl/faillog.5,
+       man/pl/faillog.8, man/pl/chsh.1, man/pl/grpconv.8,
+       man/pl/grpunconv.8, man/pl/shadow.5, man/pl/newgrp.1,
+       man/pl/limits.5, man/pl/gpasswd.1, man/pl/sg.1, man/pl/userdel.8,
+       man/pl/login.access.5, man/pl/lastlog.8, man/pl/grpck.8,
+       man/pl/chfn.1, man/pl/expiry.1, man/pl/newusers.8,
+       man/pl/pwconv.8, man/pl/chpasswd.8, man/pl/logoutd.8,
+       man/pl/usermod.8, man/pl/pwunconv.8, man/pl/su.1,
+       man/pl/groupdel.8, man/pl/vipw.8, man/pl/login.defs.5,
+       man/pl/useradd.8, man/pl/passwd.1, man/pl/groupmod.8,
+       man/pl/passwd.5, man/pl/porttime.5, man/pl/chage.1,
+       man/pl/login.1, man/pl/pwck.8, man/pl/groupadd.8, man/pl/suauth.5,
+       man/pl/vigr.8, man/pl/groups.1, man/ru/getspnam.3,
+       man/ru/faillog.5, man/ru/faillog.8, man/ru/grpconv.8,
+       man/ru/chsh.1, man/ru/shadow.3, man/ru/grpunconv.8,
+       man/ru/shadow.5, man/ru/newgrp.1, man/ru/limits.5,
+       man/ru/gpasswd.1, man/ru/sg.1, man/ru/userdel.8,
+       man/ru/login.access.5, man/ru/lastlog.8, man/ru/grpck.8,
+       man/ru/chfn.1, man/ru/expiry.1, man/ru/newusers.8,
+       man/ru/chpasswd.8, man/ru/pwconv.8, man/ru/logoutd.8,
+       man/ru/groupmems.8, man/ru/usermod.8, man/ru/pwunconv.8,
+       man/ru/su.1, man/ru/groupdel.8, man/ru/chgpasswd.8,
+       man/ru/login.defs.5, man/ru/vipw.8, man/ru/useradd.8,
+       man/ru/gshadow.5, man/ru/passwd.1, man/ru/groupmod.8,
+       man/ru/passwd.5, man/ru/chage.1, man/ru/porttime.5,
+       man/ru/login.1, man/ru/pwck.8, man/ru/nologin.8,
+       man/ru/groupadd.8, man/ru/suauth.5, man/ru/vigr.8,
+       man/ru/groups.1, man/it/getspnam.3, man/it/faillog.5,
+       man/it/faillog.8, man/it/grpconv.8, man/it/chsh.1,
+       man/it/shadow.3, man/it/grpunconv.8, man/it/shadow.5,
+       man/it/newgrp.1, man/it/gpasswd.1, man/it/sg.1, man/it/userdel.8,
+       man/it/lastlog.8, man/it/grpck.8, man/it/chfn.1, man/it/expiry.1,
+       man/it/newusers.8, man/it/chpasswd.8, man/it/pwconv.8,
+       man/it/usermod.8, man/it/pwunconv.8, man/it/su.1,
+       man/it/groupdel.8, man/it/vipw.8, man/it/useradd.8,
+       man/it/passwd.1, man/it/groupmod.8, man/it/passwd.5,
+       man/it/porttime.5, man/it/chage.1, man/it/login.1, man/it/pwck.8,
+       man/it/groupadd.8, man/it/vigr.8, man/it/groups.1,
+       man/pl/shadow.3, man/pl/sulogin.8, man/pl/id.1, man/ru/sulogin.8,
+       man/ru/id.1, man/it/id.1: Remove generated translated manpages.
+       They are still distributed with the shadow tarballs.
+
+2007-11-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/pl/chgpassw.8: Remove chgpassw.8 since the real manpage
+       should be named chgpasswd.8.
+
+2007-11-19  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/vigr.8.xml: Remove file. The vigr man page is generated from
+       the vipw XML file.
+
+2007-11-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/prototypes.h, configure.in, libmisc/Makefile.am,
+       libmisc/xgetXXbyYY.c, libmisc/xgetpwnam.c, libmisc/xgetpwuid.c,
+       libmisc/xgetgrnam.c, libmisc/xgetgrgid.c, libmisc/xgetspnam.c:
+       Added functions xgetpwnam(), xgetpwuid(), xgetgrnam(),
+       xgetgrgid(), and xgetspnam(). They allocate memory for the
+       returned structure and are more robust to successive calls. They
+       are implemented with the libc's getxxyyy_r() functions if
+       available.
+       * NEWS, libmisc/limits.c, libmisc/entry.c, libmisc/chowntty.c,
+       libmisc/addgrps.c, libmisc/myname.c, libmisc/rlogin.c,
+       libmisc/pwdcheck.c, src/newgrp.c, src/login_nopam.c, src/login.c,
+       src/userdel.c, src/lastlog.c, src/grpck.c, src/gpasswd.c,
+       src/newusers.c, src/chpasswd.c, src/chfn.c, src/groupmems.c,
+       src/usermod.c, src/expiry.c, src/groupdel.c, src/chgpasswd.c,
+       src/su.c, src/useradd.c, src/groupmod.c, src/passwd.c, src/pwck.c,
+       src/groupadd.c, src/chage.c, src/login.c, src/suauth.c,
+       src/faillog.c, src/groups.c, src/chsh.c, src/id.c: Review all the
+       usage of one of the getpwnam(), getpwuid(), getgrnam(),
+       getgrgid(), and getspnam() functions. It was noticed on
+       http://bugs.debian.org/341230 that chfn and chsh use a passwd
+       structure after calling a pam function, which result in using
+       information from the passwd structure requested by pam, not the
+       original one. It is much easier to use the new xget... functions
+       to avoid these issues. I've checked which call to the original
+       get... functions could be left (reducing the scope of the
+       structure if possible), and I've left comments to ease future
+       reviews (e.g. /* local, no need for xgetpwnam */).
+       Note: the getpwent/getgrent calls should probably be checked also.
+       * src/groupdel.c, src/expiry.c: Fix typos in comments.
+       * src/groupmod.c: Re-indent.
+       * lib/Makefile.am, lib/groupmem.c, lib/groupio.c, lib/pwmem.c,
+       lib/pwio.c, lib/shadowmem.c, lib/shadowio.c: Move the __<xx>_dup
+       functions (used by the xget... functions) from the <xx>io.c files
+       to the new <xx>mem.c files. This avoid linking some utils against
+       the SELinux library.
+
+2007-11-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/pl/pl.po: Fix typo: chgpassw -> chgpasswd.
+       * man/pl/Makefile.am: Fix typo: chgpassw -> chgpasswd.
+       * man/de/de.po: groups shall not be translated (for command,
+       refname, or refentrytitle).
+
+2007-11-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Fix typo introduced while fixing
+       http://bugs.debian.org/451521 (compile fix).
+
+2007-11-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/Makefile.am: Fix typo: EXTRA_DOST -> EXTRA_DIST.
+
+2007-11-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login_nopam.c: Fix a typo in a comment.
+
+2007-11-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Do not document the behavior compared to old
+       versions.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/usermod.8.xml: Document the differences between locking an
+       account and locking a password.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/usermod.c: Refuse to unlock an account when it would
+       result in a passwordless account.  Based on Openwall's patch
+       shadow-4.0.4.1-owl-usermod-unlock.diff.
+       * NEWS, src/passwd.c: Likewise.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c (path_prefix): Make sure that the prefix is the
+       name of a directory (not only the beginning of a directory).
+       Openwall patch shadow-4.0.4.1-owl-userdel-path_prefix.diff.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newgrp.c: Do not give an indication that the group has no
+       password.
+       * src/newgrp.c: Do not only bail on syslog if the password is not
+       valid. Also give an indication to the user on stderr.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Fixes from Openwall patch shadow-4.0.4.1-owl-chage-drop-priv.diff:
+       * src/chage.c: Remove cleanup(). pw_lock is never called. Replace
+       cleanup(2) by spw_unlock and remove the calls to cleanup(1).
+       * src/chage.c: Remove variable pwrw. It is always set to 0. The
+       password database is always read only.
+       * src/chage.c: Make chage -l also drop the saved GID.
+       * src/chage.c: Prefer setregid/setreuid to setgid/setuid.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       Fixes from Openwall patch shadow-4.0.4.1-alt-man.diff:
+       * man/useradd.8.xml: Indicate that the NIS caveats is also valid
+       for any external database as LDAP.
+       * man/groupadd.8.xml: Likewise.
+       * man/groupadd.8.xml: Reorder and reformat the caveats bullets.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS: Applied Debian patch 409_man_generate_from_PO to
+       automatically generate the translated manpages from the POs.
+       * man/Makefile.am: Replace the individual rules for the generation
+       of the manpages (from XML) by a generic Makefile rule an
+       dependencies for the linked manpages.
+       * man/generate_translations.mak: Generic rules for all the
+       generated translated manpages (if ENABLE_REGENERATE_MAN).
+       * man/Makefile.am: Removed rules for all the generated translated
+       manpages.
+       * man/sv/Makefile.am, man/de/Makefile.am, man/fr/Makefile.am,
+       man/pl/Makefile.am, man/ru/Makefile.am, man/it/Makefile.am:
+       Include generate_translations.mak to handle the generated
+       translations (XML and roff files).
+       * man/Makefile.am: Translated XML files moved from the CLEANFILES
+       variable of man/Makefile.am to the various languages Makefiles.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/chpasswd.8.xml: Document that chpasswd does not use PAM to
+       update the passwords. This fixes http://bugs.debian.org/396726.
+       Debian patch 411_chpasswd_document_no_pam.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/su.c: Avoid terminating the PAM library in the forked
+       child.  This is done later in the parent after closing the PAM
+       session. This fixes http://bugs.debian.org/412061.
+       Debian patch 405_su_no_pam_end_before_exec.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/newgrp.1.xml: Mention sg in the newgrp manpage.
+       This fixes http://bugs.debian.org/396690.
+       Debian patch 410_newgrp_man_mention_sg.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/passwd.c: Fix typo: the warndays option was called warning.
+       This is now warndays, as documented in the manpage and usage.
+       This fixes http://bugs.debian.org/445481.
+       Debian patch 417_passwd_warndays.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/pwck.c: Remove the preprocessor check SHADOWPWD. The
+       variable is no more defined (and always assumed).
+       Debian patch 493_pwck_no_SHADOWPWD.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/passwd.c, man/passwd.1.xml: -l/-u options: edit the
+       shadow account expiry field *in addition* to editing the password
+       field.  This fixes http://bugs.debian.org/389183.
+       Debian patch 494_passwd_lock.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newgrp.c: Do not request a password when a user uses
+       newgrp to switch to her primary group.
+       This fixes http://bugs.debian.org/396691.
+       Debian patch 497_newgrp_primary_group.
+       * src/newgrp.c: Remove a comment which states otherwise.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/login.c: Log an error if the password entry could not be
+       found (respect LOG_UNKFAIL_ENAB to avoid logging a password). This
+       fixes the Debian bug http://bugs.debian.org/451521
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/useradd.8.xml: -b documenation: Use the same notation for
+       the -d argument as in the -d documentation.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Allow the -b option even without the -D option.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Use the same error message for the below errors.
+       (option working ONLY if another is specified).
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Make usermod -o and -u work independently of the
+       argument order.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Validate that two of the -L, -p, and -U options
+       are not used at the same time after the parsing of options. -U
+       used to be allowed after -p or -L, but not before.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c: Make usermod -d and -m work independently of the
+       argument order. Thanks to Justin Pryzby <jpryzby+d@quoininc.com>
+       for the patch. This fixes http://bugs.debian.org/451518.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, lib/nscd.c: Execute nscd -i instead of using the private
+       glibc socket to flush the nscd tables. This comes from the RedHat
+       patch shadow-4.0.16-nscd.c.
+       * lib/commonio.c: Forbid inheritance of the passwd and group files
+       to the spawed processes (like nscd). This comes from the RedHat
+       patch shadow-4.0.17-notInheritFd.patch.
+       * lib/nscd.h: Update header.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/usermod.c (fail_exit): Add static variables pw_locked,
+       spw_locked, gr_locked, and sgr_locked to indicate which files must
+       be unlocked.
+       * src/usermod.c (open_files, close_files): Open and close the
+       group files as well as the passwd files. This permit to check if
+       the group files modification are allowed before writing the passwd
+       files.
+       * src/usermod.c (grp_update, update_gshadow, update_group): Do not
+       return a status code, but call fail_exit() in case of error. The
+       group files are no more opened and closed in update_gshadow() and
+       update_group().
+       * src/usermod.c (main): move the call to grp_update between
+       open_files and close_files.
+       * src/usermod.c: Differentiate failure to add a group entry and
+       failure to add a shadow group entry.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c: Differentiate failure to update a group entry and
+       failure to update a shadow group entry.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/userdel.c, src/usermod.c, src/useradd.c: Inform the user if
+       out of memory while updating a group database.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/usermod.c: Update the group database before flushing
+       the nscd caches.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/userdel.c: Abort if an error is found while updating the
+       user or group database. No changes will be written in the
+       databases.
+
+2007-11-17  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: It is no more needed to check that the user's
+       groups are specified only once in the group file. This is checked
+       by gr_update().
+
+2007-11-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/commonio.c (next_entry_by_name): New function.
+       * NEWS, lib/commonio.c (commonio_update): When an entry is updated, make
+       sure that there are no other entry with the same name. This fixes
+       an infinite loop in userdel and usermod when an (erroneous) group
+       file contains two entries with the same name.
+       (https://bugzilla.redhat.com/show_bug.cgi?id=240915)
+
+2007-11-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/salt.c: Make sure the salt string is terminated at the
+       right place (either 8th, or 11th position).
+       * NEWS, src/chgpasswd.c, src/chpasswd.c: The protocol + salt does
+       not need 15 chars. No need for a temporary buffer.
+       This change the fix committed on 2007-11-10. The salt provided to
+       pw_encrypt could have been too long.
+
+2007-11-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/fr/fr.po: Fix typo: missing / in <placeholder-1/>. This
+       caused the gpasswd title to be incomplete in the French manpage.
+
+2007-11-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: Check if the l64a function exists instead of a64l
+       which we do not use.
+       * libmisc/salt.c: Add support for uClibc with no l64a().
+
+2007-11-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: Check if the netdb.h header file and the innetgr
+       function exist.
+       * src/login_nopam.c, NEWS: Add support for systems with no
+       innetgr().  On those systems, username with an @ will be treated
+       like any other username (i.e. lookup in the local database for an
+       user with an @). Thanks to Mike Frysinger for the patch.
+
+2007-11-16  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/useradd.c: Indentation fix.
+
+2007-11-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/newgrp.c, NEWS: Declare the child and pid variable at the
+       beginning of a block. This fixes a compilation issue with gcc 2.95.
+       The intent is the same as Gentoo's patch shadow-4.0.12-gcc2.patch.
+
+2007-11-14  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * src/Makefile, NEWS: Add a suidperms variable. This should ease
+       the change of permission of suid binaries for distributors (not
+       recommended).
+
+2007-11-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * ./, libmisc/, src/, contrib/, doc/, lib/, man/, man/sv/,
+       man/de/, man/ja/, man/fi/, man/pt_BR/, man/fr/, man/pl/, man/hu/,
+       man/tr/, man/ru/, man/zh_TW/, man/id/, man/zh_CN/, man/cs/,
+       man/es/, man/ko/, man/it/, etc/, etc/pam.d/, po/: Restore the
+       ignore patterns from the previous repository.
+
+       * libmisc/*.c, libmisc/*.h, libmisc/getdate.y, shadow.spec.in,
+       src/*.c, contrib/groupmems.shar, contrib/pwdauth.c,
+       doc/README.platforms, doc/WISHLIST, doc/console.c.spec.txt,
+       lib/*.c, lib/*.h, COPYING, man/*.xml, man/sv/*.[1358],
+       man/de/*.[1358], man/ja/*.[1358], man/fi/*.[1358],
+       man/fr/*.[1358], man/pt_BR/*.[1358], man/pl/*.[1358],
+       man/hu/*.[1358], man/tr/*.[1358], man/ru/*.[1358],
+       man/zh_TW/*.[1358], man/id/*.[1358], man/zh_CN/*.[1358],
+       man/cs/*.[1358], man/es/*.[1358], man/ko/*.[1358],
+       man/it/*.[1358], etc/login.access, etc/login.defs, NEWS: Added the
+       subversion svn:keywords property (Id) for proper identification.
+
+2007-11-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/sv/sv.po, man/de/de.po, man/fr/fr.po, man/pl/pl.po,
+       man/ru/ru.po, man/it/it.po: Run "make update-po" in the man
+       directory.
+
+       * po/ne.po, po/bs.po, po/cs.po, po/pt_BR.po, po/km.po, po/es.po,
+       po/eu.po, po/ko.po, po/hu.po, po/sk.po, po/vi.po, po/uk.po,
+       po/ro.po, po/sq.po, po/ru.po, po/id.po, po/nb.po, po/el.po,
+       po/gl.po, po/fr.po, po/nl.po, po/pl.po, po/nn.po, po/it.po,
+       po/dz.po, po/tl.po, po/pt.po, po/ca.po, po/da.po, po/tr.po,
+       po/sv.po, po/de.po, po/ja.po, po/zh_TW.po, po/he.po, po/fi.po,
+       po/zh_CN.po: Run "make update-po" in the po directory.
+
+2007-11-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/newgrp.c: Don't ask for a password if there are no
+       group passwords. Just directly give up. This comes from the
+       Fedora's patch shadow-4.0.13-newgrpPwd.patch, and seems to be the
+       only part with an effect.
+
+2007-11-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/chgpasswd.c, src/chpasswd.c: Fix chpasswd and
+       chgpasswd stack overflow. Based on Fedora's
+       shadow-4.0.18.1-overflow.patch.
+
+2007-11-10  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/useradd.c: Allow non numerical group identifier to be
+       specified with useradd's -g option. Applied Debian patch
+       397_non_numerical_identifier. Thanks also to Greg Schafer
+       <gschafer@zip.com.au>.
+
+2007-10-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * configure.in: Prepare the next release: 4.0.18.2. The gettext
+       version used for the configuration will be 0.16.
+
+2007-10-28  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * po/ja.po: Remove a plural form. nplurals=1 for japanese.
+       Moreover, msgstr[0] was identical to msgstr[1].
+
+2007-10-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * libmisc/limits.c, man/limits.5.xml, etc/limits: Apply patch sent
+       by Justin Bronder <jsbronder@gmail.com>. See Debian bug #442334.
+       This adds support to 2 new resource limits: max nice value, and
+       max real time priority. This is only used when shadow is not
+       compiled with PAM support.
+
+2007-10-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * man/gpasswd.1.xml: Describe the options separately in the
+       OPTIONS section. Simplify the synopsis.
+
+2007-10-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * README, po/Makevars: Update contact information.
+
+2007-10-27  Christian Perrier  <bubulle@debian.org
+
+       * src/newgrp.c, src/passwd.c, src/su.c:
+       No longer 'apologize' to users when they use incorrect passwords
+       Remove "Sorry" from programs display
+       Imported from Debian's patch 413_no-sorry-in-passwd and
+       102_de-fix-sorry
+       * man/fr/fr.po: fix translation errors. Imported from Debian's
+       patch 201_fix_man_su_fr and 416_man-fr_newgrp
+       * man/it/it.po, man/Makefile.am, man/it/Makefile.am:
+       Use gettext for the Italian man pages translation. Imported from
+       Debian's patch 202_it_man_uses_gettext. Thanks to Giuseppe
+       Sacco who contributed the Italian translation.
+       * man/de/de.po: (nearly) complete German translation of man pages
+       Imported from Debian's patch 203_de-man-update. Thanks to 
+       Simon Brandmair
+       * src/usermod.c: Clarify the online help of usermod for "-a"
+       Imported from Debian's patch 402-clarify_usermod_usage
+       * man/shadow.5.xml: fix spelling error. Imported from Debian's
+       patch 433_shadow.5-typo_312430
+       * src/su.c: Be up front on the origin of su and mention the GNU
+       origin. Imported from Debian's patch 438_su_GNU_origin
+
+2007-10-27  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, po/zh_CN.po: Updated Chinese translation. Imported from
+       Debian's patch 105_zh_CN. Thanks to Ming Hua for the update.
+
+2007-10-13  Tommi Vainikainen  <thv+debian@iki.fi>
+
+       * NEWS, po/fi.po: Updated Finish translation (400t).
+
+2007-10-13  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/su.c: If compiled without PAM support, enforce the
+       limits from /etc/limits when one of the -, -l, or --login options
+       is set, even if called by root. Thanks to Justin Bronder.
+
+2007-10-07  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, Changelog: Convert the Changelog and NEWS files to UTF-8
+       (it was partially ISO-8859-2).
+
+2007-02-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/groupadd.8.xml, man/groupmod.8.xml, man/login.1.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml:
+       groupadd.8, groupmod.8, login.1, useradd.8, userdel.8, usermod.8: grammar
+       mistakes and other correctstions (by Schulenberg <bensberg@justemail.net>).
+
+2007-01-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/usermod.c:
+       fixed handle -a option in usermod (by Benno Schulenberg <bensberg@justemail.net>).
+
+2006-12-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/sv/sv.po:
+       more UTF8 fixe (by Mikael Magnusson <mikma@users.sourceforge.net>).
+
+       * man/sv/sv.po:
+       UTF8 fixes (by Mikael Magnusson <mikma@users.sourceforge.net>).
+
+2006-11-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/Makefile.am, man/pl/chgpassw.8, man/pl/chpasswd.8, man/pl/pl.po:
+       translation chpasswd.8 and chgpassw.8 finished.
+
+2006-11-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/pl.po: resolve fuzzy entries.
+
+       * contrib/adduser.c, contrib/groupmems.shar, po/it.po, src/groupmems.c, src/usermod.c, man/chfn.1.xml, man/chsh.1.xml, man/de/de.po, man/fr/fr.po, man/groupmems.8.xml, man/passwd.1.xml, man/pl/pl.po, man/ru/ru.po, man/shadow.3.xml, man/su.1.xml, man/sv/sv.po:
+       spelling fixes 's/super user/superuser/' (by Benno Schulenberg <bensberg@justemail.net>).
+
+       * man/sv/sv.po, man/de/de.po, man/fr/fr.po, man/pl/pl.po, man/ru/ru.po:
+       run "make update-po".
+
+       * man/newusers.8.xml, man/su.1.xml:
+       fixed wrong word, a few typos, some grammar mistakes, and puts in a comma here
+       and there for clarity (by Benno Schulenberg <bensberg@justemail.net>).
+
+       * man/pl/groupmod.8, man/pl/chage.1, man/pl/chsh.1, man/pl/lastlog.8, man/pl/vipw.8:
+       regenerated.
+
+       * man/de/de.po: run "make update-po".
+
+       * man/Makefile.am:
+       added de to LINGUAS but man/de/de.po still need many work.
+
+2006-11-04  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/useradd.c: indent code.
+
+       * NEWS, src/useradd.c:
+       improved auditing support (https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=211659).
+
+2006-11-03  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/km.po, po/ko.po, po/nb.po, po/ne.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+       run "make update-po".
+
+       * NEWS, po/nl.po:
+       updated (by cobaco (aka Bart Cornelis) <cobaco@skolelinux.no>).
+
+       * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po, man/sv/sv.po:
+       "make update-po".
+
+2006-11-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/su.1.xml:
+       added sg(1) to the SEE ALSO section (Debian Bug#396690).
+
+2006-10-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/newusers.8.xml: clarify pw_gid fileld content description.
+
+       * man/it/Makefile.am, man/sv/Makefile.am:
+       s/man_nonpam/man_nopam/ (merged 498_man_nonpam_undefined Debian patch).
+
+       * po/nl.po:
+       fixed https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=212892
+
+2006-10-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/newusers.8.xml: there is no pw_age fileld in passwd.
+
+       * man/fr/fr.po:
+       Fix an error in the passwd.1 French translation (fixed Debian bug #395537).
+
+       * man/chfn.1.xml, man/chgpasswd.8.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/fr/fr.po, man/gpasswd.1.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/id.1.xml, man/login.1.xml, man/newgrp.1.xml, man/newusers.8.xml, man/nologin.8.xml, man/passwd.1.xml, man/pl/pl.po, man/pwck.8.xml, man/pwconv.8.xml, man/su.1.xml, man/sulogin.8.xml, man/sv/sv.po, man/vipw.8.xml:
+       cleanups on begin DESCRIPTION section.
+
+       * man/pl/pl.po: typos.
+
+2006-10-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po: cleanups.
+
+2006-10-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/pl.po: more translations.
+
+       * NEWS:
+       UTF-8 corrections (by Benno Schulenberg <bensberg@justemail.net>).
+
+2006-10-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/groupdel.8.xml: added description for exit code 6.
+
+2006-08-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/de/de.po: copy & paste some msgid to msgstr.
+
+       * man/de/de.po:
+       kill some fuzzy (by Nicolas François <nicolas.francois@centraliens.net>).
+
+2006-08-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po, man/sv/sv.po, man/passwd.1.xml:
+       s/change password/password change/ in passwd(1) (by Simon Brandmair <sbrandmair@gmx.net>).
+
+       * man/de/de.po:
+       initial version based on partial translations only for passwd(1) by
+       Simon Brandmair <sbrandmair@gmx.net>.
+
+       * NEWS, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/useradd.c, src/userdel.c, src/usermod.c:
+       flush nscd cashes after close /etc/{group,passwd} files.
+
+2006-08-14  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/tl.po: updated (by Eric Pareja <xenos@upm.edu.ph>).
+
+2006-08-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/ja.po: updated (by Takeo Nakano <nakano@webmasters.gr.jp>).
+
+2006-08-03  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/fr/Makefile.am:
+       removed whitespaces following trailing backslashes.
+
+       * NEWS, configure.in: release 4.0.18.1.
+
+       * man/Makefile.am, man/fr/Makefile.am, man/it/Makefile.am, man/ja/Makefile.am, man/pl/Makefile.am, man/ru/Makefile.am, man/sv/Makefile.am, NEWS:
+       fixed missing man pages in dist tar ball necessary on build when PAM is disabled.
+
+       * NEWS, src/groupmems.c:
+       fixed groupmems compilation when PAM is disabled (by Johannes Winkelmann <jw@smts.ch>).
+
+       * configure.in:
+       typo s/followig/following/ (by Johannes Winkelmann <jw@smts.ch>).
+
+2006-08-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: release date corrected.
+
+       * NEWS, src/su.c:
+       fixed set enviroment too early when using PAM, so move it to !USE_PAM
+       (patch submitted by Mike Frysinger <vapier@gentoo.org>).
+
+2006-07-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/fr/chage.1, man/fr/chfn.1, man/fr/chpasswd.8, man/fr/chsh.1, man/fr/expiry.1, man/fr/faillog.5, man/fr/faillog.8, man/fr/gpasswd.1, man/fr/groupadd.8, man/fr/groupdel.8, man/fr/groupmod.8, man/fr/groups.1, man/fr/grpck.8, man/fr/gshadow.5, man/fr/lastlog.8, man/fr/limits.5, man/fr/login.1, man/fr/login.access.5, man/fr/login.defs.5, man/fr/logoutd.8, man/fr/newgrp.1, man/fr/newusers.8, man/fr/passwd.1, man/fr/passwd.5, man/fr/porttime.5, man/fr/pwck.8, man/fr/pwconv.8, man/fr/sg.1, man/fr/shadow.3, man/fr/shadow.5, man/fr/su.1, man/fr/suauth.5, man/fr/useradd.8, man/fr/userdel.8, man/fr/usermod.8, man/fr/vipw.8, NEWS:
+       fr man pages are now up to date.
+
+       * man/fr/fr.po:
+       more updates for 4.0.18 (by Nicolas François <nicolas.francois@centraliens.net>).
+
+       * man/fr/fr.po:
+       updated for 4.0.18 (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+2006-07-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po, po/nb.po, po/ne.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po:
+       updated.
+
+       * src/useradd.c, src/usermod.c:
+       fixed UID/GID overflow (fixed http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=198920).
+       Fixed expiredate/inactive/mindays/warndays/maxdays overflow (simillar to RH#198920).
+
+       * src/passwd.c:
+       fixed inactive/mindays/warndays/maxdays overflow (similar to RH#198920).
+
+       * src/groupadd.c, src/groupmod.c:
+       fixed GID overflow (fixed http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=198920).
+
+2006-07-27  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/.cvsignore: groupmems added.
+
+2006-07-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fr.po:
+       updated for 4.0.18 (by ean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+       * po/uk.po: break lines longer than 80 cols and add missing \n.
+
+       * po/uk.po:
+       updated for 4.0.18 (by Eugeniy Meshcheryakov <eugen@univ.kiev.ua>).
+
+       * man/pl/pl.po, man/ru/ru.po, man/sv/sv.po, man/chgpasswd.8.xml, man/chpasswd.8.xml, man/fr/fr.po:
+       s/instead DES/instead of DES/
+
+       * NEWS: sv man pages are partially translated.
+
+2006-07-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/groupmems.c: fix compilation warnings.
+
+       * po/ko.po: use \t.
+
+       * po/nl.po: break lines longer than 80 cols and add missing \n.
+
+2006-07-22  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/ru/faillog.5: regenerated.
+
+       * po/ko.po: updated for 4.0.18 (by Changwoo Ryu <cwryu@debian.org>).
+
+2006-07-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/faillog.5.xml, man/fr/fr.po, man/pl/pl.po, man/ru/ru.po, man/sv/sv.po:
+       added <refmiscinfo class="sectdesc"> tag for faillog.5.xml.
+
+       * man/sv/Attic/grupper.1: removed.
+
+       * man/sv/Makefile.am, man/sv/chage.1, man/sv/chfn.1, man/sv/chgpasswd.8, man/sv/chpasswd.8, man/sv/chsh.1, man/sv/expiry.1, man/sv/faillog.5, man/sv/faillog.8, man/sv/gpasswd.1, man/sv/groupadd.8, man/sv/groupdel.8, man/sv/groupmems.8, man/sv/groupmod.8, man/sv/groups.1, man/sv/grpck.8, man/sv/gshadow.5, man/sv/lastlog.8, man/sv/limits.5, man/sv/login.1, man/sv/login.access.5, man/sv/login.defs.5, man/sv/logoutd.8, man/sv/newgrp.1, man/sv/newusers.8, man/sv/nologin.8, man/sv/passwd.1, man/sv/passwd.5, man/sv/porttime.5, man/sv/pwck.8, man/sv/pwconv.8, man/sv/sg.1, man/sv/shadow.3, man/sv/shadow.5, man/sv/su.1, man/sv/suauth.5, man/sv/sv.po, man/sv/useradd.8, man/sv/userdel.8, man/sv/usermod.8, man/sv/vipw.8:
+       corrected text charset and other minor cleanups (by Daniel Nylander <info@danielnylander.se>).
+
+       * po/tr.po: break lines longer than 80 cols.
+
+       * po/tr.po:
+       updated for 4.0.18 (by Mehmet TURKER <mturker@innova.com.tr>).
+
+       * configure.in, man/Makefile.am, man/sv/Makefile.am:
+       fixes for "make {dist|distchec}" and sv man pages.
+
+       * man/sv/Attic/grupper.1, man/sv/groupmems.8, man/sv/groupmod.8, man/sv/grpck.8, man/sv/grpconv.8, man/sv/grpunconv.8, man/sv/gshadow.5, man/sv/lastlog.8, man/sv/limits.5, man/sv/login.1, man/sv/login.access.5, man/sv/login.defs.5, man/sv/logoutd.8, man/sv/newgrp.1, man/sv/newusers.8, man/sv/nologin.8, man/sv/passwd.1, man/sv/passwd.5, man/sv/porttime.5, man/sv/pwck.8, man/sv/pwconv.8, man/sv/pwunconv.8, man/sv/sg.1, man/sv/shadow.3, man/sv/shadow.5, man/sv/su.1, man/sv/suauth.5, man/sv/sv.po, man/sv/useradd.8, man/sv/userdel.8, man/sv/usermod.8, man/sv/vigr.8, man/sv/vipw.8, NEWS, man/Makefile.am, man/sv/Makefile.am, man/sv/chage.1, man/sv/chfn.1, man/sv/chgpasswd.8, man/sv/chpasswd.8, man/sv/chsh.1, man/sv/expiry.1, man/sv/faillog.5, man/sv/faillog.8, man/sv/getspnam.3, man/sv/gpasswd.1, man/sv/groupadd.8, man/sv/groupdel.8:
+       full sv man pages set added (by Daniel Nylander <info@danielnylander.se>).
+       This man pages are translated using new XML/xml2po/gettext infrastructure.
+
+       * po/pl.po: updated for 4.0.18.
+
+2006-07-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pt.po:
+       updated for 4.0.18 (by Miguel Figueiredo <mfigueiredo@gmail.com>).
+
+       * po/gl.po, NEWS:
+       updated for 4.0.18 (by Jacobo Tarrio <jacobo@tarrio.org>).
+
+       * NEWS, po/eu.po:
+       updated for 4.0.18 (by Piarres Beobide <pi@beobide.net>).
+
+       * man/ru/chsh.1, man/ru/faillog.5, man/ru/groupmems.8, man/ru/groupmod.8, man/ru/ru.po, man/ru/su.1, man/ru/useradd.8, man/ru/usermod.8, man/ru/vipw.8, NEWS, po/ru.po:
+       updated for 4.0.18 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+       * po/vi.po, NEWS:
+       updated for 4.0.18 (by Clytie Siddall <clytie@riverland.net.au>).
+
+       * NEWS, po/cs.po:
+       updated for 4.0.18 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+       * NEWS, po/sv.po:
+       updated for 4.0.18 (by Daniel Nylander <info@danielnylander.se>).
+
+       * NEWS, po/ca.po:
+       updated for 4.0.18 (by Guillem Jover <guillem@debian.org>).
+
+2006-07-18  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/hu.po: cleanups.
+
+       * NEWS, po/da.po:
+       updated for 4.0.18 (by Claus Hindsgaul <claus.hindsgaul@gmail.com>).
+
+       * po/hu.po, NEWS: updated for 4.0.18 (by SZERVÁC Attila <sas@321.hu>).
+
+       * NEWS: typos.
+
+       * man/ru/ru.po, man/fr/fr.po, man/pl/pl.po: run "make update-po".
+
+       * man/su.1.xml: fixes in <refsynopsisdiv>.
+
+       * src/groupmems.c: indent soutrce code.
+
+       * src/groupmems.c: use shadow Copyright.
+
+       * po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po, po/nb.po, po/ne.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/POTFILES.in, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po:
+       added src/groupmems.c to POTFILES.in.
+
+       * NEWS, etc/pam.d/Makefile.am, etc/pam.d/groupmems, man/Makefile.am, man/groupmems.8.xml, src/Makefile.am, src/groupmems.c:
+       groupmems rewrited for use PAM and getopt_long() nad now it is enabled
+       for build and install (patch by George Kraft <gk4@swbell.net>).
+
+       * NEWS, configure.in: start prepare for 4.0.18.
+
+2006-07-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po, po/nb.po, po/ne.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+       run "make update-po" and some cleanups (added missing \n and use tabs instead spaces).
+
+       * src/su.c: s#[login]#[LOGIN]# in help message.
+
+       * man/useradd.8.xml:
+       added missing --<foo> long options names in "Changing the default values" section.
+
+       * po/tr.po: updated (by Murat Şenel <muratasenel@gmail.com>).
+
+2006-07-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po: updated.
+
+       * man/useradd.8.xml: added newusers(8) to SEE ALSO section.
+
+       * etc/login.defs:
+       removed GETPASS_ASTERISKS (patch by Mike Frysinger <vapier@gentoo.org>).
+
+2006-07-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/pl/chsh.1, man/pl/pl.po: pl chage(1): translation finished.
+
+       * NEWS:
+       s#fix by Mike Frysinger <vapier@gentoo.org>)#(patch by Ulrich Mueller <ulm@kph.uni-mainz.de>; http://bugs.gentoo.org/139966#
+
+       * NEWS, configure.in:
+       S/Key: removed assign getpass() to libshadow_getpass() on autoconf level
+       (fix by Mike Frysinger <vapier@gentoo.org>).
+
+2006-07-14  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/vipw.8.xml: make options <replaceable> in SYNOPSIS.
+
+       * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po, po/nb.po, po/ne.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/groupadd.c:
+       s/group/GROUP/ in groupadd help message.
+
+       * src/su.c (main):
+       move **envcp declaration to #ifdef USE_PAM (fixed warning about unused
+       variable when shadow is builded with PAM didabled).
+
+       * man/pl/pl.po, NEWS, man/pl/chage.1: pl chage(1) translation finished.
+
+       * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po: updated.
+
+       * man/chsh.1.xml: updated after rewrite chsh for use getopt_long().
+
+       * po/pl.po: kill fuzzy.
+
+2006-07-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/chsh.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po, po/nb.po, po/ne.po:
+       one \t more in help message.
+
+       * po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po, po/nb.po, po/ne.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po:
+       updated.
+
+       * NEWS, src/chsh.c: chsh rewrited for use getopt_long().
+
+2006-07-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/groupmod.8, man/pl/pl.po: finish translation groupmod(8).
+
+       * man/fr/fr.po, man/groupmod.8.xml, man/pl/groupmod.8, man/pl/pl.po, man/ru/ru.po:
+       cleanups in groupmod(8).
+
+       * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po, man/usermod.8.xml, src/usermod.c, NEWS:
+       back to previouse usermod -a option sematics and clarify -a behavior
+       on documentation level (by Greg Schafer <gschafer@zip.com.au>).
+
+       * man/fr/fr.po, man/groupmod.8.xml, man/pl/pl.po, man/ru/ru.po:
+       updated groupmod man page.
+
+2006-07-11  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/groupmod.c: too many \t in help message.
+
+       * man/ru/chage.1, man/ru/passwd.1, man/ru/ru.po, man/chage.1.xml, man/fr/fr.po, man/passwd.1.xml, man/pl/pl.po:
+       updated.
+
+       * po/nb.po, po/ne.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/dz.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/km.po, po/ko.po:
+       run "make update-po".
+
+       * src/groupmod.c: cleunps in help message.
+
+       * src/chage.c: s/user/\[LOGIN\]/ in help message.
+
+       * src/passwd.c: s/\[login\]/\[LOGIN\]/ in help message.
+
+       * NEWS, src/groupmod.c: groupmod rewrited for use getopt_log().
+
+2006-07-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/sv.po:
+       added missing \n in help messages and few other minor cleanups.
+
+       * NEWS, po/sv.po:
+       updated for 4.0.17 (by Daniel Nylander <info@danielnylander.se>).
+
+       * NEWS: 4.0.17 release date i 10-07-2006.
+
+       * NEWS, libmisc/copydir.c:
+       fixed segfault usermod/userdel on remove home directory when it can't
+       be removed; for example when it is /dev/null (fixed http://bugs.gentoo.org/139148).
+
+       * src/login.c, src/logoutd.c, src/userdel.c, libmisc/limits.c:
+       remove USER_PROCESS conditionsi (code simplifications).
+
+2006-07-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/km.po: kill all fuzzy (Sokhem <khoemsokhem@khmeros.info>).
+
+2006-07-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/de.po: kill fuzzy (by Holger Wansing <linux@wansing-online.de>).
+
+2006-07-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Makefile.am: removed duplicated all target.
+
+       * NEWS, po/LINGUAS, po/ne.po:
+       new Nepali translation (by Paras Pradhan <pradhanparas@gmail.com>).
+
+       * NEWS, po/LINGUAS, po/dz.po: new Dzongkha translation.
+
+       * NEWS, po/de.po:
+       updated for 4.0.17 (by Holger Wansing <linux@wansing-online.de>).
+
+       * NEWS, po/nl.po:
+       updated for 4.0.17 (by "cobaco (aka Bart Cornelis)" <cobaco@skolelinux.no>)
+
+2006-06-25  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ko.po: cleanups (by darehanl <darehanl@gmail.com>).
+
+       * src/usermod.c: fixes in getopt_long() optstring: s/a/a:/ and added h.
+
+       * src/faillog.c:
+       fixed long_options[] entries: s/no_argument/required_argument/ for lock-secs,
+       maximum, time and user options.
+
+       * NEWS, configure.in:
+       improved SELinux detection on autoconf level (based on patch by
+       Dan Yefimov <dan@D00M.lightwave.net.ru>).
+
+       * po/ro.po, NEWS:
+       updated for 4.0.17 (by Sorin Batariuc <sorin@bonbon.net>).
+
+2006-06-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: cleanups.
+
+       * man/pl/pl.po: more translations for chage(1).
+
+       * TODO: remove done things.
+
+       * NEWS, lib/Attic/getpass.c, lib/Makefile.am, lib/getdef.c, lib/pwauth.c, po/POTFILES.in:
+       removed using private implementatuon getpass() libc function (now getpass() is
+       used also when S/KEY support is enabled).
+
+       * NEWS, src/Makefile.am: move nologin do $(sbindir).
+
+       * man/pl/pl.po: more work.
+
+       * man/pl/pl.po: more translations.
+
+       * po/pl.po: s/KEY=VALUE/KLUCZ=WARTOŚĆ/
+
+       * po/pl.po: s/SEC/SEK/
+
+       * src/chpasswd.c: added missing #include "exitcodes.h".
+
+       * src/chpasswd.c: s/exit (1)/exit (E_USAGE)/
+
+       * man/Makefile.am:
+       move all current i18n man pages automation inside "if ENABLE_REGENERATE_MAN .. endif".
+
+       * man/Makefile.am:
+       add an error message so people don't have to go digging through
+       source to find out what's up (by Mike Frysinger <vapier@gentoo.org>).
+
+       * NEWS, man/ru/chage.1, man/ru/chfn.1, man/ru/chgpasswd.8, man/ru/chpasswd.8, man/ru/chsh.1, man/ru/expiry.1, man/ru/faillog.5, man/ru/faillog.8, man/ru/gpasswd.1, man/ru/groupadd.8, man/ru/groupdel.8, man/ru/groupmems.8, man/ru/groupmod.8, man/ru/groups.1, man/ru/grpck.8, man/ru/gshadow.5, man/ru/lastlog.8, man/ru/limits.5, man/ru/login.1, man/ru/login.access.5, man/ru/login.defs.5, man/ru/logoutd.8, man/ru/newgrp.1, man/ru/newusers.8, man/ru/nologin.8, man/ru/passwd.1, man/ru/passwd.5, man/ru/porttime.5, man/ru/pwck.8, man/ru/pwconv.8, man/ru/ru.po, man/ru/sg.1, man/ru/shadow.3, man/ru/shadow.5, man/ru/su.1, man/ru/suauth.5, man/ru/useradd.8, man/ru/userdel.8, man/ru/usermod.8, man/ru/vipw.8:
+       updated ru man pages (regenerated from man/ru/ru.po -> man/ru/*xml -> roff).
+
+       * NEWS, po/ru.po:
+       updated for 4.0.17 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+       * NEWS, po/LINGUAS, po/km.po:
+       new km translation (Sokhem <khoemsokhem@khmeros.info>).
+
+       * po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, src/groupadd.c:
+       cleanups in groupadd help message.
+
+       * NEWS, po/nb.po:
+       updated for 4.0.17 (by Bjørn Steensrud <bjornst@powertech.no>).
+
+       * NEWS, po/da.po:
+       updated for 4.0.17 (by Claus Hindsgaul <claus.hindsgaul@gmail.com>).
+
+       * po/pl.po:
+       s/twóş/twĂłrz/ (fix by Michał Łomnicki <michal.lomnicki@gmail.com>).
+
+       * NEWS, po/pt.po:
+       updated for 4.0.17 (by Miguel Figueiredo <mfigueiredo@gmail.com>).
+
+       * NEWS, po/vi.po:
+       updated for 4.0.17 (by Clytie Siddall <clytie@riverland.net.au>).
+
+       * NEWS, po/cs.po:
+       updated for 4.0.17 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+       * po/eu.po, po/fr.po, po/gl.po, po/pl.po:
+       Project-Id-Version: shadow 4.0.17
+
+       * NEWS, po/sk.po:
+       updated for 4.0.17 (by Peter Mann <Peter.Mann@tuke.sk>).
+
+       * NEWS, po/ko.po:
+       updated for 4.0.17 (by Changwoo Ryu <cwryu@debian.org>).
+
+2006-06-22  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in: schedule release 40.17 on 26-06-2006.
+
+       * src/useradd.c:
+       adjust last fix for leave some fix mail spool creation after rewrite internal
+       configuration API.
+
+       * src/useradd.c, NEWS:
+       fixed mail spool file creation (bug cached by Frans Pop <elendil@planet.nl>,
+       fixed http://bugs.debian.org/374705).
+
+2006-06-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/chage.c, src/chgpasswd.c, src/chpasswd.c, src/faillog.c, src/groupadd.c, src/lastlog.c, src/passwd.c, src/su.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c:
+       better looking help messages output. Added one empty line at end of help message.
+
+       * po/ru.po, po/sk.po, po/sv.po, po/tl.po, po/uk.po, po/ro.po, po/pt_BR.po:
+       break help messages lines before col 80.
+
+       * man/pl/pl.po: more work on usermod.
+
+       * po/pl.po: cleanups.
+
+2006-06-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/vipw.8:
+       regenerated using fixed DocBook XSL Stylesheets v1.70.1 (I must submit my
+       fixes common/pl.xml do DocBook XSL Stylesheets mantainer).
+
+       * man/fr/fr.po, man/ru/ru.po: updated.
+
+       * man/pl/lastlog.8, man/pl/pl.po: finish translate lastlog(8).
+
+       * man/lastlog.8.xml: improved NOTE section content.
+
+       * po/pl.po: iprove lastlog help message.
+
+       * man/fr/fr.po, man/lastlog.8.xml, man/pl/pl.po, man/ru/ru.po:
+       Better lastlog short description. Now it is:
+       lastlog - reports the most recent login of all users or of a given user
+
+       * man/Makefile.am, man/fr/fr.po, man/lastlog.8.xml, man/pl/pl.po, man/ru/ru.po:
+       Fixed CAVEATS section (what the hell is mmdf ? :)
+
+       * man/ru/ru.po, NEWS, man/faillog.5.xml, man/fr/fr.po, man/pl/pl.po:
+       added missing information about fail_locktime element of faillog struct
+       in faillog(5) man page (by Thorsten Kukuk <kukuk@suse.de>).
+
+2006-06-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/ru/chage.1, man/ru/chfn.1, man/ru/chgpasswd.8, man/ru/chpasswd.8, man/ru/chsh.1, man/ru/expiry.1, man/ru/faillog.5, man/ru/faillog.8, man/ru/gpasswd.1, man/ru/groupadd.8, man/ru/groupdel.8, man/ru/groupmems.8, man/ru/groupmod.8, man/ru/groups.1, man/ru/grpck.8, man/ru/gshadow.5, man/ru/lastlog.8, man/ru/limits.5, man/ru/login.1, man/ru/login.access.5, man/ru/login.defs.5, man/ru/logoutd.8, man/ru/newgrp.1, man/ru/newusers.8, man/ru/nologin.8, man/ru/passwd.1, man/ru/passwd.5, man/ru/porttime.5, man/ru/pwck.8, man/ru/pwconv.8, man/ru/sg.1, man/ru/shadow.3, man/ru/shadow.5, man/ru/su.1, man/ru/suauth.5, man/ru/useradd.8, man/ru/userdel.8, man/ru/usermod.8, man/ru/vipw.8:
+       fully regenerated man pages.
+
+       * man/Makefile.am:
+       hack for generate translated xml files with lang="<lang> in <refentry> tag.
+       Now is possible testing correctnes of XSLT sheets languages definition.
+
+2006-06-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/eu.po: updated (by Piarres Beobide <pi@beobide.net>).
+
+2006-06-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/zh_TW.po, po/da.po, po/el.po, po/es.po, po/eu.po, po/id.po, po/ja.po, po/ko.po, po/nb.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/tr.po, po/uk.po, po/zh_CN.po:
+       s/ \\n"/\\n"/ in translated strings.
+
+       * man/pl/pl.po: more translations for usermod.
+
+       * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po, man/usermod.8.xml:
+       added <command> tags for at and crontab.
+
+       * man/fr/fr.po, man/pl/pl.po, man/ru/ru.po, man/usermod.8.xml:
+       remove /etc/login.defs from FILES section.
+
+       * po/gl.po: updated (by Jacobo Tarrio <jtarrio@trasno.net>).
+
+       * po/fr.po: updated (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+       * po/pl.po:
+       updated usermod help message and fixed few other things introduced during
+       copy&paset from useradd help message.
+
+       * po/vi.po, po/zh_CN.po, po/zh_TW.po, src/usermod.c, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/bs.po:
+       fixes in help message:
+       s/login/LOGIN/
+       s/new login directory/new home directory/
+       s/new initial login group/new primary group/
+       s/tlist of supplementary/new tlist of supplementary/
+       s/LOGIN/NEW_LOGIN/
+
+       * po/da.po, po/id.po, po/nb.po, po/nl.po, po/pl.po, po/pt.po, po/ro.po, po/sk.po, po/sv.po:
+       cleanups in usermod help message.
+
+       * po/es.po, po/eu.po, po/fi.po, po/tl.po: cleanups.
+
+       * po/nb.po, po/nl.po, po/pt.po, po/uk.po, po/cs.po, po/el.po, po/eu.po, po/fi.po, po/hu.po:
+       s/\\\t /\\\t/
+
+2006-06-11  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in, man/Makefile.am:
+       reverte using docbook.sourceforge.net in XSLT url.
+
+       * po/pl.po: cleanups.
+
+2006-06-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Makefile.am:
+       improved gen-xmls target: now this target generates only missing xml files.
+
+2006-06-04  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/sk.po:
+       updated for 4.0.16 (by Peter Mann <Peter.Mann@tuke.sk>).
+
+       * NEWS, po/es.po:
+       updated for 4.0.16 (by Ruben Porras <nahoo82@gmail.com>).
+
+       * NEWS, po/fi.po:
+       updated for 4.0.16 (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+       * NEWS, man/cs/Makefile.am, man/cs/groupmems.8, man/cs/groupmod.8, man/cs/grpck.8, man/cs/gshadow.5:
+       new cs man pages: groupmems(8), groupmod(8), grpck(8), gshadow(5)
+       (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+       * NEWS, po/cs.po:
+       updated for 4.0.16 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+2006-06-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in, man/Makefile.am:
+       regenerate roff man pages using docbook-style-xsl-1.70.1.
+       This version uses new base URL: http://docbook.sf.net/release/xsl/current/
+
+       * man/.cvsignore: shadow-man-pages.pot added.
+
+       * man/Makefile.am:
+       added temporary gen-xmls targed and dependencies beetwen .pot and .po files.
+
+       * man/chgpasswd.8.xml: removed <!DOCTYPE> tag (isn't neccessary).
+
+2006-05-31  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/pl.po: chage(1) translation.
+
+       * man/pl/Attic/chage.1.xml: removed.
+
+       * man/chage.1.xml, man/fr/fr.po, man/pl/pl.po, man/ru/ru.po:
+       chage requires shadow access and can't work without this.
+
+       * po/da.po:
+       updated for 4.0.16 (by Claus Hindsgaul <claus.hindsgaul@gmail.com>).
+
+       * po/pl.po: s/_DAYS/_DNI/
+
+2006-05-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: s/OWL/Owl/
+
+       * NEWS: new release date for 4.0.16 is 05-06-2006.
+
+       * NEWS: fixed last usermod changes comment. Current is:
+       better fix for old CERT VU#312962 (which was fixed in shadow 4.0.8):
+       fixed forgoten checking of the return value from fchown() before
+       proceeding with the fchmod() (based on Owl patch prepared by
+       Rafal Wojtczuk <nergal@owl.openwall.com>)
+
+       * src/useradd.c (create_mail):
+       move checking create_mail_spool is "yes" on top function.
+
+       * man/pl/pl.po: cleanups.
+
+       * po/fr.po:
+       plugged fuzzy (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+       * po/fr.po:
+       updated (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+2006-05-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Makefile.am:
+       simplifications in update-po target and fixes in dist-po-files target.
+
+       * NEWS, po/eu.po:
+       updated for 4.0.16 (by Piarres Beobide <pi@beobide.net>).
+
+2006-05-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/ru/ru.po, NEWS, man/chfn.1.xml, man/faillog.8.xml, man/fr/fr.po, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupmems.8.xml, man/limits.5.xml, man/login.1.xml, man/login.defs.5.xml, man/newgrp.1.xml, man/passwd.1.xml, man/passwd.5.xml, man/pl/pl.po, man/su.1.xml:
+       bunch of cleanups in chfn(1), faillog(8), gpasswd(1), groupadd(8),
+       groupmems(8), limits(5), login(1), login.defs(5), newgrp(1), passwd(1),
+       passwd(5) and su(1) (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+       * man/Makefile.am, man/ru/ru.po: added ru to LINGUAS.
+
+       * po/ru.po: updated for 4.0.16 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2006-05-27  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/fr/fr.po, man/pl/pl.po, man/chage.1.xml, man/passwd.1.xml:
+       s/-n/-m/ in passwd(1). Improved -m, --mindays description in chage(1) and passwd(1).
+       More pl translations.
+
+       * po/vi.po: updated (by Clytie Siddall <clytie@riverland.net.au>).
+
+       * NEWS, po/hu.po:
+       updated for 4.0.16 (by Gabor Kelemen <kelemeng@gnome.hu>).
+
+2006-05-25  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/cs/Makefile.am, man/it/Makefile.am, man/ru/Makefile.am:
+       id and sulogin executables are not installed by "make install",
+       but a few translated man pages are still installed.
+       (patch by Lasse Collin <lasse.collin@tukaani.org>)
+
+2006-05-22  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/vi.po:
+       updates for 4.0.16 (by Clytie Siddall <clytie@riverland.net.au>).
+
+       * po/gl.po: updated for 4.0.16 (by Jacobo Tarrio <jtarrio@debian.org>).
+
+2006-05-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po: more cleanups.
+
+       * po/fr.po:
+       updated for 4.0.16 (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+       * man/chage.1.xml, man/chfn.1.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/fr/fr.po, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/login.1.xml, man/login.access.5.xml, man/logoutd.8.xml, man/newgrp.1.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/pl/pl.po, man/pl/vipw.8, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/sg.1.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml:
+       use common style in FILES sections.
+
+       * man/fr/fr.po, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/id.1.xml, man/limits.5.xml, man/login.access.5.xml, man/pl/pl.po, man/suauth.5.xml, man/userdel.8.xml, man/usermod.8.xml, man/faillog.5.xml:
+       begin <refpurpose> text from lowercase.
+
+       * man/fr/fr.po, man/pl/pl.po, man/pwconv.8.xml, man/vipw.8.xml:
+       remove "." from <refpurpose>.
+
+       * po/pl.po: cleanups.
+
+       * po/pl.po: typo.
+
+       * man/pl/.cvsignore, man/pt_BR/.cvsignore, man/ru/.cvsignore, man/tr/.cvsignore, man/zh_CN/.cvsignore, man/zh_TW/.cvsignore, man/cs/.cvsignore, man/de/.cvsignore, man/es/.cvsignore, man/fi/.cvsignore, man/fr/.cvsignore, man/hu/.cvsignore, man/id/.cvsignore, man/it/.cvsignore, man/ja/.cvsignore, man/ko/.cvsignore:
+       *.xml added.
+
+       * man/cs/.cvsignore, man/de/.cvsignore, man/es/.cvsignore, man/fi/.cvsignore, man/fr/.cvsignore, man/hu/.cvsignore, man/id/.cvsignore, man/it/.cvsignore, man/ja/.cvsignore, man/ko/.cvsignore, man/pl/.cvsignore, man/pt_BR/.cvsignore, man/ru/.cvsignore, man/tr/.cvsignore, man/zh_CN/.cvsignore, man/zh_TW/.cvsignore, man/.cvsignore:
+       .xml2po.mo added.
+
+       * NEWS, man/pl/vipw.8: update pl vipw(8) man page.
+
+       * src/useradd.c: s/mailbox/mailbox file/
+
+       * man/pl/pl.po: seems vipw finished.
+
+       * man/fr/fr.po, man/vipw.8.xml: s/Quiet mode database./Quiet mode./
+
+       * man/pl/pl.po: more entries.
+
+       * po/vi.po, po/zh_CN.po, po/zh_TW.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po:
+       /mailbox/mailbox file/
+
+       * man/pl/pl.po: fill few entries.
+
+       * man/Makefile.am: fixes in dist-po-files target.
+
+       * man/Makefile.am: pl added to Linguas. Some mprovements.
+
+       * man/fr/fr.po:
+       initial version based on ond version submited by Christian Perrier <bubulle@debian.org>.
+
+       * man/pl/pl.po: initial version.
+
+       * man/Makefile.am:
+       implemet update-po target and dist, dist-check hooks for put .po and
+       .pot files in dist tar ball.
+
+       * src/chgpasswd.c:
+       reverte struct group newgr declaration but use them only conditionaly (#ifndef SHADOWGRP).
+
+2006-05-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in: schedule release 4.0.16 to 29.05.06.
+
+       * po/pl.po: updated.
+
+       * po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po:
+       run "make update-po".
+
+       * NEWS, src/useradd.c:
+       fixed userdel CERT VU#312962: fixed forgoten checking of the return
+       value from fchown() before proceeding with the fchmod() (prepared
+       based on OWL fix submited by Solar Designer <solar@openwall.com>),
+       Use in userdel login.defs::MAIL_DIR instead hardcoded /var/mail on created
+       mailbox path (based on OWL fixes submited by Solar Designer <solar@openwall.com>).
+
+2006-05-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/.cvsignore: added *.[1358]
+
+       * NEWS, man/ru/Makefile.am, man/ru/chgpasswd.8:
+       added chgpasswd(8) ru man page (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+       * po/gl.po: updated (by Jacobo Tarrio <jtarrio@debian.org>).
+
+       * NEWS, man/ru/login.defs.5, man/ru/passwd.1, man/ru/userdel.8, man/ru/usermod.8:
+       updated ru login.defs(5), passwd(1), userdel(8), usermod(8) man pages
+       (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+       * NEWS, po/ru.po: updated (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+       * NEWS, po/pt.po: updated (by Miguel Figueiredo <elmig@debianpt.org>).
+
+2006-05-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/Makefile.am, man/ja/Attic/pw_auth.3, man/ja/Makefile.am, man/pl/Attic/pw_auth.3, man/pl/Makefile.am, man/ru/Attic/pw_auth.3, man/ru/Makefile.am:
+       pw_auth(3) man page removed (outdated).
+
+       * man/Makefile.am, man/fr/Makefile.am, man/it/Makefile.am, man/ja/Makefile.am, man/pl/Makefile.am, man/ru/Makefile.am, NEWS, autogen.sh:
+       install limits(5), login.access(5) and porttime(5) man pages only when
+       shadow is builded with PAM support disabled.
+
+       * NEWS: cleanups.
+
+       * autogen.sh:
+       by default in development enviroment use CFLAGS="-O2 -Wall".
+
+       * src/chgpasswd.c (main): remove two unused variables (newgr and now).
+
+       * src/userdel.c (main): removed unused arg variable.
+
+       * libmisc/setupenv.c (setup_env):
+       move *cp varable to #ifndef PAM part (fixed compilation
+       warning about unused variable).
+
+       * lib/getdef.c: now GETPASS_ASTERISKS is SKEY #define dependent.
+
+       * configure.in, NEWS, lib/Attic/getpass.c, lib/pwauth.c:
+       by default do not use libshadow_getpass() as getpass() replacemement.
+       Use libshadow_getpass() only when S/KEY support is enabled.
+       Current glibc getpass() handles correctly longer than 8 characters
+       passwords and libshadow_getpass() is used only because libc getpass()
+       do not handles password prompting with echo enabled.
+
+       * src/sulogin.c: break long line.
+
+       * lib/pwauth.c:
+       added #include <unistd.h> and remove localy defined getpass() prototype.
+
+2006-05-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Makefile.am: removed dupplicated sulogin.8.xml from EXTRA_DIST.
+
+       * man/Attic/pw_auth.3.xml, man/Makefile.am: remove pw_auth(3) man page.
+
+       * NEWS, lib/getdef.c: move login.defs::MD5_CRYPT_ENAB to non-PAM part.
+
+       * po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/userdel.c, po/bs.po:
+       typo (s/removel/removal/)
+
+2006-05-11  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/userdel.8.xml:
+       updated (after add getopt_log() support for userdel).
+
+       * po/pl.po: updated.
+
+       * po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/userdel.c, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po:
+       userdel rewrited for use getopt_log().
+
+       * po/pl.po: cleanups.
+
+       * etc/pam.d/Makefile.am, etc/pam.d/chgpasswd: new file.
+
+2006-05-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/da.po:
+       updated (by Claus Hindsgaul <claus.hindsgaul@gmail.com>).
+
+2006-05-08  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/sv.po: updated (by Daniel Nylander <yeager@lidkoping.net>).
+
+       * NEWS, configure.in, etc/Makefile.am, etc/pam.d/Makefile.am:
+       install default/template configuration files:
+       - if shadow is configured with use PAM install /etc/pam.d/* files,
+       - if shadow do not uses PAM install /etc/{limits,login.acces} files,
+       - install /etc/login.defs and /etc/default/useradd files.
+
+       COMMENT: it is possible to extend this for install above files for specified
+       distribution. For example: if exist /etc/fedora-release install Fedora specyfic
+       default configuration files and this files can be distributed in dist tar ball.
+
+       * NEWS, po/gl.po: updated (by Jacobo Tarrio <jtarrio@trasno.net>).
+
+2006-05-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/fr.po:
+       updated (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+       * NEWS, lib/commonio.c:
+       fixed handle relative symlinks too in lib/commonio.c (merge patch from Fedora).
+
+       * NEWS, lib/nscd.c: properly notify nscd to flush its cache
+       (https://bugzilla.redhat.com/bugzilla/186803).
+
+       * NEWS, libmisc/copydir.c (copy_tree):
+       fixes for verify return values mkdir() and chown()
+       on copy files (merge 482_libmisc_copydir_check_return_values Debian patch).
+
+       * po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/chfn.c, src/chsh.c, src/grpck.c, src/login.c, src/pwck.c, src/useradd.c, src/usermod.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po:
+       use '%s' cytation instead `%s'.
+
+       * NEWS, src/su.c:
+       reverte http://bugs.debian.org/276419 (this is Debian specyfic).
+
+       * libmisc/setupenv.c, libmisc/sub.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/chfn.c:
+       use '%s' cytation instead \"%s\".
+
+       * po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, src/grpck.c:
+       typo.
+
+       * po/pl.po: updated.
+
+       * NEWS, libmisc/setupenv.c (setup_env):
+       export MAIL only when MAIL_CHECK_ENAB is enabled
+       (Mike Frysinger <vapier@gentoo.org>).
+
+       * po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/hu.po, po/id.po, po/it.po, src/grpck.c, src/pwck.c:
+       warn when the members of a group differ in /etc/groups and /etc/gshadow
+       (fixed http://bugs.debian.org/75181).
+
+       * NEWS, src/su.c:
+       concatenate the non-su arguments and provide them to the shell with
+       the -c option (fixes for http://bugs.debian.org/317264 and
+       http://bugs.debian.org/276419).
+
+2006-05-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/passwd.1.xml:
+       better document how password strength is checked (fixed http://bugs.debian.org/115380).
+
+2006-04-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/usermod.8.xml:
+       added missing -a option description (by Christian Perrier <bubulle@debian.org>).
+
+2006-04-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/hu/chsh.1, man/hu/login.1, man/hu/newgrp.1:
+       fixed typos (by Koblinger Egmont <egmont@uhulinux.hu>).
+
+2006-04-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/LINGUAS, po/hu.po:
+       new hu translation (by SZERVÁC Attila <sas@321.hu>).
+
+2006-04-08  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/userdel.8.xml:
+       minior fixes for the note under the -f option (Mike Frysinger <vapier@gentoo.org>).
+
+2006-04-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/id.po: updatd (by Parlin Imanuel <pimanuel@gmail.com>).
+
+2006-04-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/su.c: indent code.
+
+       * NEWS, src/su.c:
+       fixed exit with a status 0 when the invoked command is terminated
+       by a signal which was not catched
+       (fixed by Eero Häkkinen <eero17@bigfoot.com>)
+
+       * README:
+       simple patch to fixup grammar and Gentoo distfile URL (by Mike Frysinger <vapier@gentoo.org>).
+
+2006-03-31  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/pw_auth.3.xml, man/chage.1.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newgrp.1.xml, man/newusers.8.xml, man/nologin.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/sg.1.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml:
+       removed <!DOCTYPE> tag (require strict DocBook XML V4.3//EN DTD isn't neccessary).
+
+       * NEWS, src/login.c:
+       cancel login timeout after authentication so that patient people
+       timing out on network directory services can log in with local
+       accounts (http://bugs.debian.org/107148).
+
+       * man/fr/login.defs.5, man/ja/login.defs.5, man/pl/useradd.8, man/ru/login.defs.5:
+       remove CREATE_HOME.
+
+       * NEWS, man/login.defs.5.xml:
+       CREATE_HOME is not supported by useradd (patch by Mike Frysinger <vapier@gentoo.org>).
+
+2006-03-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/nl.po:
+       s/wachtwoord is mes succes aangepast/wachtwoord is met succes aangepast/
+       (typo reported by Wim De Smet <wdesmet@yucom.be>).
+
+2006-03-26  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/passwd.c:
+       removed GPASSWD_PROGRAM, CHFN_PROGRAM CHFN_PROGRAM #defines (not used now).
+
+       * NEWS, man/Makefile.am, man/chgpasswd.8.xml:
+       chgpasswd(8): new man page.
+
+2006-03-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/vigr.8, man/Attic/vipw.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/getspnam.3, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/grpconv.8, man/Attic/grpunconv.8, man/Attic/gshadow.5, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/nologin.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/pwunconv.8, man/Attic/sg.1, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8:
+       remove english roff man pages from repo.
+
+2006-03-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/chgpasswd.c:
+       fixes for build correctly with --disable-shadowgrp
+       (patch by Johannes Winkelmann <jw@tks6.net>)
+
+2006-03-22  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/chage.1: fixed typo.
+
+2006-03-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/it.po:
+       updated for 4.0.15 (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+2006-03-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/nb.po:
+       updated for 4.0.15 (by Bjørn Steensrud <bjornst@powertech.no>).
+
+       * po/pt.po:
+       updated for 4.0.15 (by Miguel Figueiredo <mfigueiredo@gmail.com>).
+
+       * man/Makefile.am, NEWS, configure.in:
+       do not install translated man pages if shadow is configured with --disable-nls
+       (based patch submited by Mike Frysinger <vapier@gentoo.org>).
+
+       * NEWS, po/pt_BR.po:
+       updated for 4.0.15 (by Andre Luis Lopes <andrelop@debian.org>).
+
+       * po/fr.po:
+       updated for 4.0.15 (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+2006-03-11  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in, lib/pwauth.c:
+       added fixes for detect BSD's S/Key with updated the skeychallenge() function
+       for take a fourth argument in case BSD version
+       (patch submited by Mike Frysinger <vapier@gentoo.org>)
+
+       * README: added paragragraph about S/Key support.
+
+       * po/sk.po: updated for 4.0.15 (by Peter Mann <Peter.Mann@tuke.sk>).
+
+       * NEWS: newgrp: do not link with libselinux.
+
+       * NEWS, po/zh_CN.po:
+       updated for 4.0.15 (by Carlos Z.F. Liu <carlosliu@users.sourceforge.net>).
+
+       * po/ru.po: updated for 4.0.15 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+       * src/Makefile.am:
+       removed $(LIBSELINUX) from newgrp_LDADD (newgrp does not need to be linked
+       with SELinux libraries).
+
+       * man/ru/Attic/pw_auth.3, man/ru/chsh.1, man/ru/expiry.1, man/ru/faillog.5, man/ru/faillog.8, man/ru/gpasswd.1, man/ru/groupadd.8, man/ru/groupdel.8, man/ru/groupmems.8, man/ru/groupmod.8, man/ru/groups.1, man/ru/grpck.8, man/ru/gshadow.5, man/ru/id.1, man/ru/lastlog.8, man/ru/limits.5, man/ru/login.1, man/ru/login.access.5, man/ru/login.defs.5, man/ru/logoutd.8, man/ru/newgrp.1, man/ru/newusers.8, man/ru/nologin.8, man/ru/passwd.1, man/ru/passwd.5, man/ru/porttime.5, man/ru/pwck.8, man/ru/pwconv.8, man/ru/sg.1, man/ru/shadow.3, man/ru/shadow.5, man/ru/su.1, man/ru/suauth.5, man/ru/sulogin.8, man/ru/useradd.8, man/ru/userdel.8, man/ru/usermod.8, man/ru/vipw.8, NEWS, man/ru/Makefile.am, man/ru/chage.1, man/ru/chfn.1, man/ru/chpasswd.8:
+       ru man pages: added new nologin(8) and updated all other man pages
+       (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2006-03-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/nl.po:
+       updated for 4.0.15 (by cobaco (aka Bart Cornelis) <cobaco@linux.be>).
+
+       * po/vi.po:
+       updated for 4.0.15 (by Clytie Siddall <clytie@riverland.net.au>).
+
+       * po/sv.po:
+       updated for 4.0.15 (by Daniel Nylander <po@danielnylander.se>).
+
+2006-03-08  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/eu.po: updated for 4.0.15 (by pi <pi@beobide.net>).
+
+       * po/ro.po: cleanups.
+
+       * NEWS, po/tl.po:
+       updated for 4.0.15 (by Eric Pareja <xenos@upm.edu.ph>).
+
+       * po/ro.po: updated for 4.0.15 (by Sorin B. <sorin@bonbon.net>).
+
+       * NEWS, po/es.po:
+       updated for 4.0.15 (by Ruben Porras <nahoo82@gmail.com>).
+
+2006-03-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/da.po:
+       updated for 4.0.15 (by Claus Hindsgaul <claus.hindsgaul@gmail.com>).
+
+       * NEWS, man/fi/chsh.1, man/fi/su.1:
+       update fi chsh(1), su(1) man pages generated from XML files
+       (Tommi Vainikainen <thv+debian@iki.fi>).
+
+       * NEWS, po/fi.po:
+       updated for 4.0.15 (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+       * NEWS, po/cs.po:
+       updated for 4.0.15 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+       * NEWS, man/cs/Makefile.am, man/cs/expiry.1, man/cs/faillog.5, man/cs/faillog.8, man/cs/gpasswd.1, man/cs/groupadd.8, man/cs/groupdel.8, man/cs/logoutd.8, man/cs/nologin.8, man/cs/vipw.8:
+       added new cs man pages: expiry(1), faillog(5), faillog(8), gpasswd(1),
+       groupadd(8), groupdel(8), logoutd(8), nologin(8), vipw(8).
+
+       * NEWS: typo.
+
+       * src/useradd.c, NEWS, lib/getdef.h, man/Attic/login.defs.5, man/login.defs.5.xml, src/login.c, src/newusers.c:
+       default UMASK if not specified in login.defs is 022.
+
+2006-03-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po: updated for 4.0.15.
+
+       * NEWS, po/gl.po:
+       updated for 4.0.15 (by Jacobo Tarrio <jtarrio@trasno.net>).
+
+       * NEWS, configure.in: schedule release 4.0.15 to 13-03-2006.
+
+2006-03-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: typo (s/onas Meurer/Jonas Meurer/)
+
+       * src/.cvsignore: added chgpasswd.
+
+       * po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/Makefile.am, src/chgpasswd.c, NEWS, po/POTFILES.in, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po:
+       chgpasswd: new tool (by Jonas Meurer <mejo@debian.org>).
+
+       * src/lastlog.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+       s/Unexpected/unexpected/
+
+       * po/fr.po, po/gl.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/lastlog.c, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po:
+       print the usage and exit if an additional argument is profided to
+       lastlog (merge 488_laslog_verify_arguments Debian patch).
+
+2006-03-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/chpasswd.8, man/chpasswd.8.xml:
+       fixed CAVEATS section (by Justin Pryzby <justinpryzby@users.sourceforge.net>)
+
+2006-02-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/passwd.1, man/passwd.1.xml:
+       fixed SYNOPSIS section (http://bugs.debian.org/352136).
+
+2006-02-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ro.po: updated (by Sorin Batariuc <sorin@bonbon.net>).
+
+2006-02-21  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, lib/Makefile.am, src/Makefile.am:
+       login, nologin, su: do not link with libselinux
+       (merge 490_link_selinux_only_when_needed Debian patch).
+
+       * NEWS, src/chage.c, src/chfn.c, src/chsh.c, src/passwd.c:
+       fixed confusing error message if /proc is not mounted
+       (http://bugs.debian.org/352494
+       patch Nicolas François <nicolas.francois@centraliens.net>)
+
+       * po/ro.po:
+       updated (commited http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=347755).
+
+       * NEWS, po/ca.po: updated (by Jordi Mallach <jordi@debian.org>).
+
+2006-02-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/gpasswd.1.xml, man/passwd.1.xml, man/passwd.5.xml, man/pwck.8.xml, man/sg.1.xml, man/useradd.8.xml:
+       cleanups.
+
+       * po/gl.po: updated (Jacobo Tarrio <jtarrio@trasno.net>).
+
+       * NEWS, po/pt.po:
+       updated (by Miguel Figueiredo <mfigueiredo@gmail.com>).
+
+2006-02-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/it.po:
+       update (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+       * po/vi.po: update (by Clytie Siddall <clytie@riverland.net.au>).
+
+       * po/sv.po: updated (by Daniel Nylander <yeager@lidkoping.net>).
+
+2006-02-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fr.po: updated (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+       * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+       run "make update-po".
+
+       * po/pl.po: updated.
+
+       * po/sk.po: updated (by Peter Mann <Peter.Mann@tuke.sk>).
+
+       * po/eu.po: update (by ^pi^ <pi@beobide.net>).
+
+2006-02-08  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/login.c:
+       merge 433_login_more_LOG_UNKFAIL_ENAB Debian patch:
+       - TOO MANY LOGIN... logged if PAM_MAXTRIES or failcount >= retries
+         (was onl test PAM_MAXTRIES),
+       - print to stderr (in addition to syslog) in case of maximum number of
+         tries exceeded,
+       - always prints the number of tries in the syslog entry.
+       - add special handling for PAM_ABORT
+       - add an entry to failog, as when USE_PAM is not defined. (#53164)
+       - changed pam_end to PAM_END. This is certainly was a mistake.
+         PAM_END is pam_close_seesion + pam_end. Here, the session is still not
+         open, we don't have to close it.
+       - a HAVE_PAM_FAIL_DELAY is missing
+
+       * po/ro.po: kill one fuzzy.
+
+       * po/ro.po, NEWS: updated (by Sorin B. <sorin@bonbon.net>).
+
+       * src/gpasswd.c: s/die/catch_signals/
+
+       * src/expiry.c, src/sulogin.c: s/catch/catch_signals/
+
+       * src/su.c: /su_catch_sig/chatch_signals/
+
+2006-02-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/id.c, src/groups.c, libmisc/getdate.y: lint code using CC=g++.
+
+       * NEWS, src/su.c:
+       fixed pam session support (patch from Topi Miettinen; fixed #57526, #55873,
+       #57532 Debian bugs).
+
+       * NEWS:
+       fixed pam session support (patch from Topi Miettinen; fixed #57526,
+       #55873, #57532 Debian bugs).
+
+       * NEWS, src/userdel.c:
+       user's group is already removed by update_groups(). remove_group()
+       is not needed (bug introduced in 4.0.14 on merge FC fixes). Fixed by Nicolas
+       François <nicolas.francois@centraliens.net>
+
+       * NEWS, src/useradd.c: allways remove group and gshadow databases lock,
+       Fixed by Nicolas François <nicolas.francois@centraliens.net>
+       (http://bugs.debian.org/348250)
+
+       * NEWS, src/userdel.c: fixed excess audit_logger() argument.
+
+       * NEWS, lib/prototypes.h:
+       corrected prototypes in lib/prototypes.h (thre is no audit_help_log(); added
+       audit_logger() prototype).
+
+       * src/login.c: fixed missing ";" in declaration.
+
+       * man/Attic/limits.5, man/limits.5.xml:
+       fixed example limits string (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2006-02-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/chage.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/gl.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po:
+       added missing \n on display password status if password must be chaged.
+
+2006-02-04  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/useradd.c, NEWS:
+       fixed allow non-unique UID (http://bugs.debian.org/351281).
+
+2006-02-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/cs.po: updated (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+2006-01-27  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/vi.po:
+       updated (by Clytie Siddall <clytie@riverland.net.au>).
+
+2006-01-26  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fr.po:
+       typo (fixed by Christian Perrier <bubulle@kheops.frmug.org>).
+
+       * po/sk.po: updated (by Peter Mann <Peter.Mann@tuke.sk>).
+
+2006-01-25  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/grpck.8, man/pl/login.defs.5, man/pl/passwd.1, man/pl/pwck.8, man/de/passwd.1, man/es/login.1, man/es/vipw.8, man/fi/passwd.1, man/hu/passwd.1, man/id/login.1, man/it/grpck.8, man/it/pwck.8, man/ja/grpck.8, man/ja/passwd.1, man/ja/pwck.8, man/ko/login.1, man/ko/su.1:
+       fixes some issues that cause warnings when the manpages are
+       displayed (by Nicolas François <nicolas.francois@centraliens.net>).
+
+2006-01-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/eu.po: updated (by pi <pi@beobide.net>).
+
+       * libmisc/addgrps.c, libmisc/xmalloc.c, src/groups.c:
+       fixes after linting code using CC=g++: cast {m,re}alloc() return value to
+       proper type.
+
+2006-01-22  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/chage.1, man/Attic/passwd.5, man/Attic/su.1, man/Attic/useradd.8, man/chage.1.xml, man/passwd.5.xml, man/su.1.xml, man/useradd.8.xml:
+       uniformity and grammar fixes (by Christine Spang <spangarang@twcny.rr.com>).
+
+       * NEWS, po/ru.po: updated (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2006-01-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fr.po, NEWS:
+       updated (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+2006-01-18  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, libmisc/setupenv.c, src/chage.c, src/chsh.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/login.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/usermod.c, src/vipw.c:
+       variouse code cleanups for make possible compilation of shadow with
+       -Wall -Werror (by Alexander Gattin <xrgtn@yandex.ru>).
+
+       * libmisc/age.c, libmisc/shell.c, src/login.c, src/newgrp.c, src/su.c, src/sulogin.c, src/userdel.c, NEWS, lib/prototypes.h:
+       move exit() outside libmisc/shell.c::shell() for handle shell() errors
+       on higher level (now is better visable where some programs exit with 126 and
+       127 exit codes); added new shell() parameter (char *const envp[]) which allow
+       fix preserving enviloment in su on using -p.
+       (patch by Alexander Gattin <xrgtn@yandex.ru>)
+
+       * NEWS, po/el.po:
+       updated (by Konstantinos Margaritis <markos@debian.org>).
+
+2006-01-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/exitcodes.h: new #defines:
+       #define E_CMD_NOEXEC           126     /* can't run command/shell */
+       #define E_CMD_NOTFOUND         127     /* can't find command/shell to run */
+
+2006-01-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/passwd.1, man/passwd.1.xml:
+       fixes after reviewed for grammatical and other small errors that detract from the
+       polish of the content to native English speakers.
+       I also went ahead and changed all gender references to be a consistent
+       "his/her" (or equivalent) - the original had a mix of just "his", just
+       "her", and occasionally "his/her".
+       (by Christine Spang <spangarang@twcny.rr.com>).
+
+       * po/it.po: updated (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+2006-01-14  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: updated.
+
+       * libmisc/shell.c: remove DEBUG code.
+
+       * po/LINGUAS, po/gl.po, NEWS:
+       added new gl translation (by Jacobo Tarrio <jtarrio@trasno.net>).
+
+2006-01-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/eu.po: small update (by pi <pi@beobide.net>).
+
+2006-01-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/su.c: fixed compilation error.
+
+2006-01-08  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/sv.po: updated (by Daniel Nylander <yeager@lidkoping.net>)
+       http://bugs.debian.org/346449
+
+2006-01-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/Attic/useradd.8, man/useradd.8.xml:
+       better document useradd -d option: will not add the user's home directory
+       if it does not already exist (http://bugs.debian.org/154996)
+
+       * man/Attic/su.1, man/su.1.xml, po/zh_CN.po, po/zh_TW.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, src/su.c:
+       added handle -c,--command option for GNU su compliance (merge
+       437_su_-c_option Debian Patch).
+
+       * man/Attic/login.1, man/Attic/passwd.1, man/Attic/su.1, man/login.1.xml, man/passwd.1.xml, man/su.1.xml:
+       man pages cleanups.
+       (http://bugs.debian.org/341489)
+
+       * NEWS, man/Attic/nologin.8, man/Makefile.am, man/nologin.8.xml:
+       nologin(8) man pages added (merge 478_nologin.8.xml Debian patch).
+
+       * po/sk.po: updated (by Peter Mann <Peter.Mann@tuke.sk>)
+       http://bugs.debian.org/346376
+
+2006-01-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/id.po: updated (by Parlin Imanuel <parlin_i@yahoo.com>)
+       http://bugs.debian.org/345514
+
+       * NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/login.c:
+       added translate login prompt string (suggested by Evgeniy Dushistov).
+
+2006-01-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in: start work on 4.1.0.
+
+       * po/sv.po: updated (by Daniel Nylander <yeager@lidkoping.net>).
+       http://bugs.debian.org/346017
+
+2006-01-03  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: correct 4.0.14 release date (03-01-2006).
+
+       * src/Makefile.am: reverte install nologin in sbindir and use usbindir.
+
+       * po/POTFILES.in: removed src/chsh_chkshell.c.
+
+       * lib/prototypes.h: remove grdbm.c prototypes.
+
+       * lib/prototypes.h, src/Attic/chsh_chkshell.c, src/Makefile.am, src/chsh.c:
+       move check_shell() from src/chsh_chkshell.c to src/chsh.c.
+
+       * configure.in:
+       s/libpam_misc is missing/libpam_misc is missing for enable PAM support/
+
+2006-01-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * etc/pam.d/.cvsignore: added.
+
+       * src/su.c: indent code.
+
+       * src/su.c:
+       without it, $(su - user -c "echo \$SHELL") wont return the good value, but
+       $(su user -c "echo \$SHELL") will.
+       I think LOGNAME can also be set (this is done in setup_env, in the
+       fakelogin case).
+       (by Nicolas François <nicolas.francois@centraliens.net>)
+
+       * src/su.c:
+       simplifies how -p is handled (at least for its documentation).
+       (by Nicolas François <nicolas.francois@centraliens.net>)
+
+       * src/su.c: fixes "su - -- root" or "su - root -- -c" (it is needed if
+       the second patch is applied).
+       (by Nicolas François <nicolas.francois@centraliens.net>)
+
+       * src/su.c:
+       This second patch changes the way options are handled by getopt. Once a
+       non-su option is found, the getopt processing is stopped.
+       Whithout this patch, "su root -c ls" won't work (getopt will complain that
+       -c is not an su option).
+       (by Nicolas François <nicolas.francois@centraliens.net>).
+
+       * etc/pam.d/chage, etc/pam.d/chfn, etc/pam.d/chpasswd, etc/pam.d/chsh, etc/pam.d/groupadd, etc/pam.d/groupdel, etc/pam.d/groupmod, etc/pam.d/login, etc/pam.d/newusers, etc/pam.d/passwd, etc/pam.d/su, etc/pam.d/useradd, etc/pam.d/userdel, etc/pam.d/usermod:
+       prepare for use on Fedora Core.
+
+       * po/cs.po, po/pl.po: run "make update-po".
+
+       * src/Makefile.am: move nologin to sbindir.
+
+       * man/Attic/groupadd.8, man/groupadd.8.xml: s/gid/GID/
+
+       * man/Attic/lastlog.8, man/Attic/useradd.8, man/lastlog.8.xml, man/useradd.8.xml:
+       s/uid/UID/
+
+2005-12-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/tl.po: updated for 4.0.14 (by Eric Pareja <xenos@upm.edu.ph>).
+
+2005-12-27  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/ca.po:
+       updated for 4.0.14 (by Guillem Jover <guillem@debian.org>).
+
+2005-12-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/el.po:
+       updated for 4.0.14 (by Konstantinos Margaritis <markos@debian.org>).
+
+2005-12-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * doc/.cvsignore, etc/.cvsignore, lib/.cvsignore, po/.cvsignore, src/.cvsignore, .cvsignore, contrib/.cvsignore:
+       added a lot of generated files they are not listed in .cvsignore files
+       (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+       * src/su.c:
+       fixed some comments and replace getuid() by !amroot. This removes a system
+       call and may be more readable (Nicolas François <nicolas.francois@centraliens.net>).
+
+       * man/Attic/su.1, man/su.1.xml:
+       added forgoten the SHELL argument description (by Nicolas François <nicolas.francois@centraliens.net>).
+
+       * man/Attic/useradd.8, man/useradd.8.xml:
+       s/group/user/ (cached by Nicolas François).
+
+2005-12-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/ko/vigr.8: added.
+
+       * po/it.po:
+       updated for 4.0.14 (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+2005-12-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/pt.po:
+       updated for 4.0.14 (by Miguel Figueiredo <mfigueiredo@gmail.com>).
+
+       * src/useradd.c:
+       s/grp_update/grp_add/ in comment (by Nicolas François <nicolas.francois@centraliens.net>).
+
+       * man/Attic/login.1, man/login.1.xml:
+       added use <envar></envar> tags instead <emphasis></emphasis>.
+
+       * man/Attic/su.1, man/su.1.xml: added use <envar></envar>.
+
+       * man/Attic/su.1, man/su.1.xml:
+       updated man page after change su for use getopt_long()
+       (by Nicolas François <nicolas.francois@centraliens.net>)
+
+2005-12-14  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/fi.po:
+       updated for 4.0.14 (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+       * po/ru.po: updated for 4.0.14 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+       * man/ru/login.1, man/ru/passwd.1, man/ru/pwck.8, man/ru/vipw.8:
+       updated (by Yuri Kozlov <kozlov.y@gmail.com>_.
+
+       * doc/Attic/README.linux, doc/Makefile.am: removed.
+
+       * README, doc/Attic/README.linux:
+       move contributors list from doc/README.linux to README.
+
+       * doc/Attic/LSM, doc/Attic/README, doc/Makefile.am:
+       removed (outdated content).
+
+       * NEWS, po/cs.po:
+       updated cs.po for 4.0.14 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+       * po/pl.po: updated.
+
+       * po/fr.po:
+       kill one fuzzy (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+       * NEWS, po/da.po:
+       updated da.po for 4.0.14 (by Claus Hindsgaul <claus_h@image.dk>).
+
+       * po/eu.po: updated for 4.0.14 (by pi <pi@beobide.net>).
+
+       * NEWS, po/vi.po:
+       updated vi.po fo 4.0.14 (by Clytie Siddall <clytie@riverland.net.au>).
+
+2005-12-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: set release day for 4.0.14 to 19-12-2005.
+
+       * src/login.c:
+       removed #include "libaudit.h" (it is conditionaly included in "defines.h").
+
+       * src/su.c:
+       replaced "shell" by "shellstr". "shell" is also the name of a function.
+       (Nicolas François <nicolas.francois@centraliens.net>).
+
+       * src/vipw.c: - added missing break in case 'q'.
+
+       * NEWS, man/es/Makefile.am, man/es/vigr.8, man/es/vipw.8, man/hu/Makefile.am, man/hu/lastlog.8, man/ko/Makefile.am, man/ko/vipw.8, man/zh_CN/Makefile.am, man/zh_CN/su.1, man/zh_TW/Makefile.am, man/zh_TW/chpasswd.8, man/zh_TW/su.1:
+       added es, ko vigr(8) and vipw(8), hu lastlog(8), ko vipw(8), zh_CN su(1),
+       zh_TW chpasswd(8) and su(1),
+
+2005-12-11  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * doc/Attic/LICENSE, doc/Makefile.am, COPYING:
+       move doc/LICENSE to COPYING.
+
+       * doc/WISHLIST: remove some outdated/finished things.
+
+       * doc/Attic/README.nls, doc/Attic/README.pam, doc/Makefile.am: removed.
+
+2005-12-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+       run "make update-po" (merge changes in su messages).
+
+       * NEWS, src/su.c:
+       added handle -s/--shell, -m/-p/preserve-environment options like GNU su
+       (based on patches from Debian submited by
+       Nicolas François <nicolas.francois@centraliens.net>)
+
+       * NEWS: updated.
+
+       * src/su.c:
+       added handle -s/--shell option like in GNU su (based on Debian patch sublmited
+       by Nicolas François <nicolas.francois@centraliens.net>).
+
+       * src/su.c:
+       make -, -l , --login option as no_argument (based on fix by Nicolas François).
+
+       * po/it.po:
+       cosmetic fixes (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+2005-12-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/es/Makefile.am: s/patches/passwd/
+
+2005-12-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in, man/Makefile.am, man/tr/.cvsignore, man/tr/Makefile.am, man/tr/chage.1, man/tr/chfn.1, man/tr/groupadd.8, man/tr/groupdel.8, man/tr/groupmod.8, man/tr/login.1, man/tr/passwd.1, man/tr/passwd.5, man/tr/shadow.5, man/tr/su.1, man/tr/useradd.8, man/tr/userdel.8, man/tr/usermod.8:
+       added tr man pages.
+
+       * man/pt_BR/Makefile.am, man/pt_BR/passwd.5, man/zh_CN/Makefile.am, man/zh_CN/passwd.5, man/zh_TW/Makefile.am, man/zh_TW/passwd.5, NEWS, man/es/Makefile.am, man/es/passwd.5, man/hu/Makefile.am, man/hu/passwd.5:
+       added es, hu, pt_BR, zh_CN zh_TW translations passwd(5).
+
+       * man/Attic/id.1, man/Attic/pw_auth.3, man/Attic/sulogin.8:
+       regenerated.
+
+       * man/ko/Makefile.am: added su.1 to man_MANS.
+
+       * man/Makefile.am: reverte incorrect commit.
+
+       * man/Attic/pwconv.8, man/Attic/shadow.3, man/Attic/vipw.8, man/Makefile.am, man/fr/Makefile.am, man/fr/chage.1, man/fr/chfn.1, man/fr/chpasswd.8, man/fr/chsh.1, man/fr/expiry.1, man/fr/faillog.5, man/fr/faillog.8, man/fr/getspnam.3, man/fr/gpasswd.1, man/fr/groupadd.8, man/fr/groupdel.8, man/fr/groupmod.8, man/fr/groups.1, man/fr/grpck.8, man/fr/grpconv.8, man/fr/grpunconv.8, man/fr/gshadow.5, man/fr/lastlog.8, man/fr/limits.5, man/fr/login.1, man/fr/login.access.5, man/fr/login.defs.5, man/fr/logoutd.8, man/fr/newgrp.1, man/fr/newusers.8, man/fr/passwd.1, man/fr/passwd.5, man/fr/porttime.5, man/fr/pwck.8, man/fr/pwconv.8, man/fr/pwunconv.8, man/fr/sg.1, man/fr/shadow.3, man/fr/shadow.5, man/fr/su.1, man/fr/suauth.5, man/fr/useradd.8, man/fr/userdel.8, man/fr/usermod.8, man/fr/vigr.8, man/fr/vipw.8, NEWS:
+       added full set (up to date) fr man pages (by Nicolas François <nicolas.francois@centraliens.net>).
+
+2005-12-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ca.po, po/cs.po, po/da.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/it.po, po/nl.po, po/ro.po, po/sk.po, po/sv.po:
+       cleanups.
+
+       * src/groupadd.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+       s/--force /--force/
+
+       * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/useradd.c:
+       s/--skel SKEL_DIR /--skel SKEL_DIR/
+
+       * po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/passwd.c, po/bs.po, po/ca.po, po/cs.po, po/da.po:
+       s/--delete /--delete/
+
+       * NEWS, po/ru.po:
+       updated ru translatios for 4.0.14 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+       * po/eu.po: finish update for 4.0.14 (by pi <pi@beobide.net>).
+
+       * po/it.po:
+       updated for 4.0.14 (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+2005-12-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fr.po: updated (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+       * NEWS, po/eu.po: Basque translation updated (by pi <pi@beobide.net>).
+
+       * po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/su.c, src/usermod.c, po/bs.po:
+       s/LOGIN/login/ in usage() output.
+
+2005-12-03  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/vipw.c, NEWS, man/Attic/vipw.8, man/vipw.8.xml, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po:
+       rewrited vipw for use getopt_long().
+
+       * man/Attic/passwd.1, man/passwd.1.xml: cleanups.
+
+       * man/ko/Makefile.am: commented newgrp.1 (must be updated).
+
+2005-12-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Makefile.am: update-po target added.
+
+       * man/Attic/pwck.8, man/pwck.8.xml: document -q option.
+
+       * NEWS, lib/getdef.c:
+       $MAIL_FILE is used in userdel and usermod, $MD5_CRYPT_ENAB
+       is used by crypt_make_salt, which is used by chpasswd, gpasswd and newusers.
+       Both variables moved to PAM not dependent (447_missing_login.defs_variables
+       Debian patch).
+
+       * NEWS, src/su.c:
+       export $USER and $SHELL as well as $HOME (http://bugs.debian.org/11003 and
+       http://bugs.debian.org/11189).
+
+       * NEWS, man/Attic/login.1, man/login.1.xml:
+       document how to initiate a trusted path on linux
+       (http://bugs.debian.org/305600).
+
+       * NEWS, src/chage.c:
+       fix chage display when the last change field is set to 0.
+       This is consistent with PAM (merge 427_chage_expiry_0 Debian patch).
+
+2005-12-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in: added man/fi/Makefile to AC_CONFIG_FILES().
+
+       * man/zh_TW/chfn.1, man/zh_TW/chsh.1, man/zh_TW/groupadd.8, man/zh_TW/groupdel.8, man/zh_TW/groupmod.8, man/zh_TW/newgrp.1, man/zh_TW/useradd.8, man/zh_TW/userdel.8, man/zh_TW/usermod.8, man/pt_BR/gpasswd.1, man/pt_BR/groupadd.8, man/pt_BR/groupdel.8, man/pt_BR/groupmod.8, man/pt_BR/shadow.5, man/ru/Attic/pw_auth.3, man/ru/chage.1, man/ru/chfn.1, man/ru/chpasswd.8, man/ru/chsh.1, man/ru/expiry.1, man/ru/faillog.5, man/ru/faillog.8, man/ru/gpasswd.1, man/ru/groupadd.8, man/ru/groupdel.8, man/ru/groupmems.8, man/ru/groupmod.8, man/ru/groups.1, man/ru/grpck.8, man/ru/gshadow.5, man/ru/id.1, man/ru/lastlog.8, man/ru/limits.5, man/ru/login.1, man/ru/login.access.5, man/ru/login.defs.5, man/ru/logoutd.8, man/ru/newgrp.1, man/ru/newusers.8, man/ru/passwd.1, man/ru/passwd.5, man/ru/porttime.5, man/ru/pwck.8, man/ru/pwconv.8, man/ru/sg.1, man/ru/shadow.3, man/ru/shadow.5, man/ru/su.1, man/ru/suauth.5, man/ru/sulogin.8, man/ru/useradd.8, man/ru/userdel.8, man/ru/usermod.8, man/ru/vipw.8, man/zh_CN/chfn.1, man/zh_CN/chpasswd.8, man/zh_CN/chsh.1, man/zh_CN/groupadd.8, man/zh_CN/groupdel.8, man/zh_CN/groupmod.8, man/zh_CN/newgrp.1, man/zh_CN/useradd.8, man/zh_CN/userdel.8, man/zh_CN/usermod.8, man/ko/chfn.1, man/ko/chsh.1, man/ko/groups.1, man/ko/id.1, man/ko/login.1, man/ko/newgrp.1, man/ko/passwd.5, man/ko/su.1, man/pl/Attic/pw_auth.3, man/pl/chage.1, man/pl/chfn.1, man/pl/chpasswd.8, man/pl/chsh.1, man/pl/expiry.1, man/pl/faillog.5, man/pl/faillog.8, man/pl/gpasswd.1, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmems.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/lastlog.8, man/pl/limits.5, man/pl/login.1, man/pl/login.access.5, man/pl/login.defs.5, man/pl/logoutd.8, man/pl/newgrp.1, man/pl/newusers.8, man/pl/passwd.1, man/pl/passwd.5, man/pl/porttime.5, man/pl/pwck.8, man/pl/pwconv.8, man/pl/shadow.3, man/pl/shadow.5, man/pl/su.1, man/pl/suauth.5, man/pl/sulogin.8, man/pl/useradd.8, man/pl/userdel.8, man/pl/usermod.8, man/pl/vipw.8, man/it/chage.1, man/it/chfn.1, man/it/chpasswd.8, man/it/chsh.1, man/it/expiry.1, man/it/faillog.5, man/it/faillog.8, man/it/gpasswd.1, man/it/groupadd.8, man/it/groupdel.8, man/it/groupmod.8, man/it/groups.1, man/it/grpck.8, man/it/id.1, man/it/lastlog.8, man/it/login.1, man/it/newgrp.1, man/it/newusers.8, man/it/passwd.1, man/it/passwd.5, man/it/porttime.5, man/it/pwck.8, man/it/pwconv.8, man/it/shadow.3, man/it/shadow.5, man/it/su.1, man/it/useradd.8, man/it/userdel.8, man/it/usermod.8, man/ja/Attic/pw_auth.3, man/ja/chage.1, man/ja/chfn.1, man/ja/chpasswd.8, man/ja/chsh.1, man/ja/expiry.1, man/ja/faillog.5, man/ja/faillog.8, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/groups.1, man/ja/grpck.8, man/ja/id.1, man/ja/lastlog.8, man/ja/limits.5, man/ja/login.1, man/ja/login.access.5, man/ja/login.defs.5, man/ja/logoutd.8, man/ja/newgrp.1, man/ja/newusers.8, man/ja/passwd.1, man/ja/passwd.5, man/ja/porttime.5, man/ja/pwck.8, man/ja/pwconv.8, man/ja/shadow.3, man/ja/shadow.5, man/ja/su.1, man/ja/suauth.5, man/ja/sulogin.8, man/ja/useradd.8, man/ja/userdel.8, man/ja/usermod.8, man/ja/vipw.8, man/de/chfn.1, man/de/chsh.1, man/de/groups.1, man/de/login.1, man/de/newgrp.1, man/de/passwd.1, man/de/passwd.5, man/de/su.1, man/de/vipw.8, man/es/login.1, man/es/newgrp.1, man/es/passwd.1, man/es/su.1, man/fi/chfn.1, man/fi/chsh.1, man/fi/passwd.1, man/fr/chage.1, man/fr/chpasswd.8, man/fr/chsh.1, man/fr/faillog.5, man/fr/gpasswd.1, man/fr/groups.1, man/fr/id.1, man/fr/newgrp.1, man/fr/passwd.1, man/fr/passwd.5, man/fr/shadow.5, man/fr/su.1, man/fr/useradd.8, man/fr/userdel.8, man/fr/usermod.8, man/hu/chfn.1, man/hu/chsh.1, man/hu/gpasswd.1, man/hu/groups.1, man/hu/id.1, man/hu/login.1, man/hu/newgrp.1, man/hu/passwd.1, man/hu/su.1, NEWS, man/cs/groups.1, man/cs/id.1, man/cs/lastlog.8, man/cs/passwd.5, man/cs/shadow.5, man/cs/su.1:
+       convert all translated man pages to UFT-8.
+
+       * NEWS, src/userdel.c:
+       fix incorrect audit record in userdel (https://bugzilla.redhat.com/bugzilla/174392).
+
+       * po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, src/passwd.c:
+       s/--all /--all/
+
+       * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+       update by some informations about translators (by Christian Perrier) and run "make update-po".
+
+2005-11-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/su.c:
+       if an password is expired, su should propose to change this password
+       (fixed http://bugs.debian.org/321384).
+
+       * src/Makefile.am, src/login.c, NEWS:
+       added auditing support (based on Fedora patch for login from util-linux).
+
+       * src/useradd.c: remove use rflg.
+
+       * man/ru/Makefile.am: typo.
+
+       * po/pl.po: partialy updated.
+
+       * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po:
+       run "make update-po".
+
+       * NEWS, src/useradd.c: merge PUG fixes from RedHat patch.
+
+2005-11-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/it.po:
+       updated (by Danilo Piazzalunga <danilopiazza@gmail.com>).
+
+       * man/ru/pwconv.8, man/ru/pwunconv.8, man/ru/sg.1, man/ru/shadow.3, man/ru/shadow.5, man/ru/su.1, man/ru/suauth.5, man/ru/sulogin.8, man/ru/useradd.8, man/ru/userdel.8, man/ru/usermod.8, man/ru/vigr.8, man/ru/vipw.8, NEWS, man/ru/Attic/pw_auth.3, man/ru/Makefile.am, man/ru/chage.1, man/ru/chfn.1, man/ru/chpasswd.8, man/ru/chsh.1, man/ru/expiry.1, man/ru/faillog.5, man/ru/faillog.8, man/ru/getspnam.3, man/ru/gpasswd.1, man/ru/groupadd.8, man/ru/groupdel.8, man/ru/groupmems.8, man/ru/groupmod.8, man/ru/groups.1, man/ru/grpck.8, man/ru/grpconv.8, man/ru/grpunconv.8, man/ru/gshadow.5, man/ru/id.1, man/ru/lastlog.8, man/ru/limits.5, man/ru/login.1, man/ru/login.access.5, man/ru/login.defs.5, man/ru/logoutd.8, man/ru/newgrp.1, man/ru/newusers.8, man/ru/passwd.1, man/ru/passwd.5, man/ru/porttime.5, man/ru/pwck.8:
+       added full set of ru man pages (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2005-11-25  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/Makefile.am, src/nologin.c: added nologin program.
+
+       * NEWS, src/su.c: rewrited for use getopt_long().
+
+2005-11-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/zh_CN.po: updated (by Ming Hua <minghua@rice.edu>).
+
+2005-11-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/usermod.8, man/usermod.8.xml:
+       rewrited for document long options.
+
+       * NEWS, src/vipw.c:
+       added a "quiet" mode (http://bugs.debian.org/190252.
+
+       * po/de.po:
+       fixed wrong translation in german po file (http://bugs.debian.org/338373
+       by Nico Golde <nico@ngolde.de>).
+
+       * NEWS, man/Makefile.am, man/fi/.cvsignore, man/fi/Makefile.am, man/fi/chfn.1, man/fi/chsh.1, man/fi/passwd.1, man/fi/su.1:
+       added fi chfn(1), chsh(1), passwd(1), su(1).
+
+       * NEWS, man/it/Makefile.am, man/it/newusers.8: added it newusers(8).
+
+       * NEWS, po/fr.po:
+       updated (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+2005-11-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/Makefile.am, src/newgrp.c:
+       added auditing support for newgrp (by Steve Grubb <sgrubb@redhat.com>).
+
+       * NEWS, configure.in, libmisc/audit_help.c:
+       switch over to a new logging function (by Steve Grubb <sgrubb@redhat.com>).
+
+       * README: typo.
+
+2005-11-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ru.po: updated (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2005-11-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in:
+       s/logdir/shadow_cv_logdir/ fix wrong var name (by Mike Frysinger <vapier@gentoo.org>).
+
+       * man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3.xml, man/Attic/pwck.8, man/Attic/sg.1, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/sg.1.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, README, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/gshadow.5, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/newgrp.1, man/chage.1.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newgrp.1.xml:
+       move information about all shadow man pages authors from man pages to README file.
+
+       * src/userdel.c: added two new error messages to translated phrases.
+
+       * NEWS, src/userdel.c:
+       remove the user's group unless it is not really a user-private group
+       (based on FC patch).
+
+2005-11-04  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/usermod.c: fix long name options name in long_options[].
+
+2005-11-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/userdel.c: indent source code.
+
+       * NEWS, src/userdel.c:
+       make the userdel -f option force the removal of the user's group (even if it
+       is the primary group of another user)
+       (merge 453_userdel_-f_removes_group Debian patch),
+
+       * NEWS, man/Attic/login.1, man/login.1.xml:
+       better explain the respective roles of login, init and getty with regards
+       to the utmp file (merge 440_manpages-login.1 Debian patch).
+
+       * man/Attic/userdel.8, man/userdel.8.xml:
+       aphabetic order options description.
+
+       * NEWS, man/Attic/userdel.8, man/userdel.8.xml:
+       document the -f option; document the group removal behavior (merge
+       455_userdel.8.xml Debian patch).
+
+       * NEWS, man/Attic/groupadd.8, man/Attic/useradd.8, man/groupadd.8.xml, man/useradd.8.xml:
+       document that useradd/groupadd refuse adding entries already in an
+       external database (http://bugs.debian.org/282184).
+
+       * NEWS, libmisc/sulog.c:
+       log in successful/failed su through syslog (http://bugs.debian.org/190215).
+
+       * NEWS, man/it/groupdel.8, man/it/passwd.1, man/it/pwconv.8, man/it/useradd.8, man/it/userdel.8, man/it/usermod.8:
+       updated it groupdel(8), passwd(1), pwconv(8), useradd(8), userdel(8), usermod(8) man pages
+       (merge 205_it-manpages Debian patch).
+
+       * man/pt_BR/gpasswd.1: merge 204_pt_BR-manpages Debian patch.
+
+2005-10-31  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/porttime.5, man/Attic/pwck.8, man/Attic/shadow.3, man/porttime.5.xml, man/pwck.8.xml:
+       improvements by Yuri Kozlov <kozlov.y@gmail.com>.
+
+       * NEWS, po/tl.po: updated (by Eric Pareja <xenos@upm.edu.ph>).
+
+       * po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/su.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po:
+       remove "." from su message.
+
+       * po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po:
+       "make update-po".
+
+       * src/usermod.c: cleanups in usage() output.
+
+       * src/usermod.c: indent code.
+
+       * NEWS, src/usermod.c:
+       rewrited for use getopt_long() (Christian Perrier <bubulle@kheops.frmug.org>).
+
+2005-10-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/uk.po: updated (by Eugeniy Meshcheryakov <eugen@univ.kiev.ua>).
+
+2005-10-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/faillog.5, man/Attic/groupmems.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/chpasswd.8.xml, man/groupmems.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/Attic/chpasswd.8:
+       bunch of cleanups (Yuri Kozlov <kozlov.y@gmail.com>).
+
+2005-10-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/userdel.c, src/usermod.c, lib/pam_defs.h, libmisc/pam_pass.c, libmisc/pwdcheck.c, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/login.c, src/newusers.c, src/su.c, src/useradd.c:
+       Simplifications: move all per shadow tool declared struct pam_conv conv
+       from src/*c to lib/pam_defs.h. #include "pam_defs.h" instead <security/pam_appl.h>
+       and <security/pam_misc.h>.
+       Patch partialy based on openpam fixes by Rob Holland <rob@inversepath.com>.
+
+       * NEWS, lib/commonio.c:
+       fixed grpck segmentation fault on using -s when /etc/gshadow is empty (fix by
+       Tomasz Lemiech <szpajder@staszic.waw.pl>).
+
+2005-10-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/faillog.5, man/faillog.5.xml:
+       typos (by A Costa <agcosta@gis.net>).
+
+2005-10-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/chage.1, man/Attic/chpasswd.8, man/chage.1.xml, man/chpasswd.8.xml:
+       typos (by A Costa <agcosta@gis.net>).
+
+       * NEWS, po/sv.po: updated (by Daniel Nylander <yeager@lidkoping.net>).
+
+2005-10-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/de/newgrp.1, man/es/Makefile.am, man/es/newgrp.1, man/zh_CN/Makefile.am, man/zh_CN/newgrp.1, man/zh_TW/Makefile.am, man/zh_TW/newgrp.1, NEWS, man/de/Makefile.am:
+       newgrp(1): added de, es, zh_CN, zh_TW translations.
+
+2005-10-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/gpasswd.1, man/gpasswd.1.xml:
+       move "Notes about group passwords" section from passwd man page.
+
+       * src/passwd.c, NEWS, man/Attic/passwd.1, man/passwd.1.xml:
+       remove handle -f, -g and -s options in passwd.
+
+       * man/userdel.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/logoutd.8.xml, man/newgrp.1.xml, man/newusers.8.xml, man/pwconv.8.xml, man/sg.1.xml:
+       use locase in <refentrytitle>.
+
+       * man/Attic/pw_auth.3, man/Attic/pw_auth.3.xml, man/Attic/shadow.3, man/shadow.3.xml:
+       added refmiscinfo class="sectdesc">Library Calls</refmiscinfo> in <refmeta>.
+
+       * man/Attic/pwconv.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8, man/newusers.8.xml, man/pwconv.8.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml, man/Attic/chpasswd.8, man/Attic/faillog.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/grpck.8, man/Attic/lastlog.8, man/Attic/logoutd.8, man/Attic/newusers.8, man/chpasswd.8.xml, man/faillog.8.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/grpck.8.xml, man/lastlog.8.xml, man/logoutd.8.xml:
+       added <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+       in <refmeta>.
+
+       * man/Attic/login.defs.5, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/shadow.5, man/Attic/suauth.5, man/login.defs.5.xml, man/passwd.5.xml, man/porttime.5.xml, man/shadow.5.xml, man/suauth.5.xml, man/Attic/login.access.5, man/limits.5.xml, man/login.access.5.xml, man/Attic/faillog.5, man/Attic/gshadow.5, man/Attic/limits.5, man/faillog.5.xml, man/gshadow.5.xml:
+       added <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+       in <refmeta>.
+
+       * man/Attic/pwconv.8, man/Attic/suauth.5, man/Attic/vipw.8, man/pwconv.8.xml, man/suauth.5.xml, man/vipw.8.xml:
+       remove <refentryinfo><date></date></refentryinfo> and <refmiscinfo class='date'> tags.
+
+       * man/Attic/newgrp.1, man/Attic/sg.1, man/newgrp.1.xml, man/sg.1.xml:
+       added <refmiscinfo class="sectdesc">User Commands</refmiscinfo> tag.
+
+2005-10-11  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in: start work on 4.0.14.
+
+2005-10-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: move release 4.0.13 date to 10-10-2005.
+
+       * NEWS:  added infor about removed duplicated pam_start() in chage.
+
+       * NEWS: updated.
+
+       * man/Makefile.am: added sg.1.xml to man_XMANS.
+
+       * man/Attic/chage.1, man/chage.1.xml:
+       cleanups (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+       * man/Attic/newgrp.1, man/newgrp.1.xml:
+       use <filename> in few more places.
+
+       * man/Attic/newgrp.1, man/newgrp.1.xml:
+       better newgrp description (http://bugs.debian.org/325558).
+
+2005-10-04  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/chpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/newusers.c, src/useradd.c, src/userdel.c, src/usermod.c:
+       remove using pam_chauthtok().
+
+       * src/chsh.c: finish PAM support using pam_start() & co.
+
+       * src/chage.c: remove using pam_chauthtok() on finish chage.
+
+       * src/chfn.c:
+       use E_NOPERM in more places. remove using pam_chauthtok() on finish chfn.
+
+       * src/chfn.c: cleanups.
+
+       * src/chage.c:
+       removed duplicaded not moved PAM code) was introduced during merge
+       shadow-4.0.4.1-owl-pam-auth.diff patch).
+
+       * src/chfn.c: finish PAM support.
+
+2005-10-03  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/chfn.1, man/Attic/chsh.1, man/chfn.1.xml, man/chsh.1.xml:
+       cleanups (by  Alexander Gattin <xrgtn@yandex.ru>).
+
+2005-10-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/userdel.c:
+       userdel should not remove the group which is primary for someone else (fix
+       by Nicolas François <nicolas.francois@centraliens.net> http://bugs.debian.org/295416)
+
+2005-10-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/vipw.8.xml, man/Attic/chage.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/faillog.8, man/Attic/grpck.8, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/passwd.1, man/Attic/porttime.5, man/Attic/pw_auth.3.xml, man/Attic/shadow.3, man/Attic/su.1, man/Attic/suauth.5, man/chage.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/faillog.8.xml, man/groupmems.8.xml, man/grpck.8.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/passwd.1.xml, man/porttime.5.xml, man/shadow.3.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml:
+       s/<emphasis remap='B'>/<emphasis>/
+
+       * man/Attic/sg.1, man/sg.1.xml: use <command> instead <emphasis>.
+
+       * man/newgrp.1.xml, man/sg.1.xml, man/chage.1.xml, man/chsh.1.xml, man/login.defs.5.xml:
+       s/\.  /\. /
+
+       * man/Attic/shadow.5, man/shadow.5.xml:
+       better document "!" and "*" fields in /etc/shadow
+       (based on 441_manpages-shadow.5 patch from Debian).
+
+       * man/Attic/newgrp.1, man/newgrp.1.xml:
+       SHADOWPWD was removed (always enabled)
+       (based on 446_newgrp.1_no_SHADOWPWD patch from Debian).
+
+       * po/ru.po: updated for 4.0.13 (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2005-09-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: cleanups.
+
+       * man/Attic/vipw.8, man/vipw.8.xml, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/gshadow.5, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pw_auth.3.xml, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/chage.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newgrp.1.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml:
+       next round of cleanups.
+
+       * man/Makefile.am: added rules for id.1, pw_auth.3 and sulogin.8.
+
+       * libmisc/setupenv.c:
+       during the changes on libmisc/setupenv.c, a piece of code was moved
+       without its comment (merge 449_comment_missplaced Debian patch).
+
+2005-09-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/chfn.1, man/Attic/chsh.1, man/Attic/groupadd.8, man/Attic/newusers.8, man/Attic/pwconv.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/chfn.1.xml, man/chsh.1.xml, man/groupadd.8.xml, man/newusers.8.xml, man/pwconv.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, NEWS:
+       added missing references to /etc/login.defs and login.defs(5)
+       (Christian Perrier <bubulle@kheops.frmug.org>).
+
+2005-09-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: s/XSL/XSLT/
+
+       * po/pl.po: few updates.
+
+       * man/Attic/passwd.1, man/passwd.1.xml:
+       -i option description is back (lost on rewrite and pointed by
+       Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+       * po/cs.po:
+       updated for 4.0.13 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+2005-09-27  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: updated.
+
+       * configure.in: fixes for correct handle --with{,out}-<feature>.
+
+       * configure.in:
+       use @<:@ @:>@ instead ( ) inside AC_HELP_STRING() and s/feactures/features/
+       (based on fixes by Mike Frysinger <vapier@gentoo.org>).
+
+       * po/da.po: updated for 4.0.13 (by Claus Hindsgaul <claus_h@image.dk>).
+
+       * po/es.po: updated for 4.0.13 (by Ruben Porras <nahoo@inicia.es>).
+
+2005-09-26  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, libmisc/failure.c:
+       use "%c" in strftime() output (based on patch from
+       http://bugs.debian.org/89902 by Christian Perrier <bubulle@debian.org>)
+
+       * man/Attic/getspnam.3, man/Attic/shadow.3, man/shadow.3.xml:
+       added <refname>getspnam</refname> to <refnamediv>.
+
+       * man/Attic/sg.1, man/sg.1.xml: fixed <cmdsynopsis>.
+
+       * man/Attic/sg.1, man/Makefile.am, man/sg.1.xml:
+       added separated sg(1) man page.
+
+2005-09-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/commonio.c, NEWS:
+       don't assume selinux is enabled if is_selinux_enabled() returns -1
+       (merge isSelinuxEnabled FC patch by Jeremy Katz <katzj@redhat.com>).
+
+       * po/ro.po: updated (by Sorin Batariuc <sorin@bonbon.net>).
+
+2005-09-21  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: schedule release 4.0.13 to 03-10-2005.
+
+2005-09-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/gshadow.5, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8:
+       regenerate all roff man pages using DocBook XSL Stylesheets 1.69.1.
+
+       * man/logoutd.8.xml: fixed id inside <refentry>.
+
+       * man/login.1.xml, man/logoutd.8.xml, man/newgrp.1.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/chage.1.xml, man/chfn.1.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml:
+       added missing <para></para> inside <listitem> tags for pass correctly xmllint.
+
+       * man/Attic/login.access.5, man/login.access.5.xml:
+       rewrited FILES section.
+
+       * man/login.access.5.xml: cleanups.
+
+2005-09-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/Attic/passwd.5, man/passwd.5.xml:
+       rewrited based on work by Greg Wooledge <greg@wooledge.org>
+       http://bugs.debian.org/328113
+
+2005-09-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ro.po: updates (by Sorin Batariuc <sorin@bonbon.net>).
+
+2005-09-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/groups.c, src/grpck.c, src/id.c, src/login.c, src/login_nopam.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/suauth.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c:
+       remove empty lines after comment.
+
+       * src/useradd.c: group all #include.
+
+       * po/fr.po:
+       updated (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+2005-09-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/gpasswd.c: remove exit(1) after failure().
+
+       * src/usermod.c: consolidate few #ifdef WITH_AUDIT .. #endif sections.
+
+2005-09-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/Makefile.am: added missing $(LDADD) in gpasswd_LDADD.
+
+       * NEWS, libmisc/limits.c:
+       fixed setup max address space limits (added missing break statement in case)
+       spoted by Lasse Collin <lasse.collin@tukaani.org>
+       (fix for non-PAM case)
+
+       * configure.in: try find and use by default feactures:
+       with_audit="yes"
+       with_libcrack="no"
+       with_libpam="yes"
+       with_libskey="no"
+       with_selinux="yes"
+       Report on finish also S/Key and CrackLib support.
+
+       * configure.in: cleanups.
+
+       * src/Makefile.am: sort *_LDADD.
+
+       * src/Makefile.am: added missing gpasswd_LDADD = $(LIBAUDIT).
+
+       * src/groupadd.c, src/groupdel.c, src/groupmod.c, src/useradd.c, src/userdel.c, src/usermod.c, lib/defines.h, lib/prototypes.h, src/chage.c, src/gpasswd.c:
+       indent code.
+
+       * libmisc/Makefile.am: sort libmisc_a_SOURCES elements.
+
+       * libmisc/audit_help.c: added shadow copyright text and indent file.
+
+       * libmisc/audit_help.c:
+       patr of auditing support not added on commiting audit changes.
+
+       * src/Makefile.am: s/AUDIT/LIBAUDIT/
+
+       * configure.in: added reporting on finish is auditing is enabled.
+       Change to use shared libaudit. Aded missing AC_SUBST(LIBAUDIT).
+       Break some to log lines.
+
+       * src/Makefile.am, src/chage.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/useradd.c, src/userdel.c, src/usermod.c, NEWS, configure.in, lib/defines.h, lib/prototypes.h, libmisc/Makefile.am:
+       auditing support added. Patch prepared by Peter Vrabec
+       <pvrabec@redhat.com> basing on work by Steve Grubb from
+       http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=159215 Now auditing
+       support have commands: chage, gpasswd, groupadd, groupdel, groupmod,
+       useradd, userdel, usermod.
+
+       * po/pt.po: finish update (by Christian Perrier <bubulle@debian.org>).
+
+2005-09-04  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pt.po, NEWS: updated (by Miguel Figueiredo <elmig@debianpt.org>).
+
+2005-09-03  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/passwd.c:
+       fix warning (initialization makes pointer from integer without a cast) in
+       long_options[] entry.
+
+       * po/fr.po, NEWS:
+       partialy updated (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+2005-09-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/chage.c: indent source sode.
+
+       * src/chage.c, src/chfn.c, src/chsh.c, src/passwd.c, NEWS:
+       change to use new selinux API for selinux_check_passwd_access()
+       (patch from Fedora by Dan Walsh <dwalsh@redhat.com>).
+
+2005-09-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/newgrp.1, man/newgrp.1.xml: finished rewrite.
+
+       * etc/login.defs: moved from login.defs.linux.
+
+       * src/login_nopam.c: use #ident.
+
+       * etc/Attic/login.defs.hurd, etc/Attic/login.defs.linux, etc/Makefile.am:
+       remove login.defs.hurd and login.defs.linux.
+
+       * src/groupadd.c, src/useradd.c:
+       as same as in man pages to useradd and groupadd change to 1000 default
+       GID_MIN and UID_MIN (if not found in login.defs).
+
+       * etc/login.defs: s/chkpasswd/chpasswd/
+
+2005-08-31  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Makefile.am, man/chsh.1.xml, man/limits.5.xml, man/login.access.5.xml, man/newgrp.1.xml, man/newusers.8.xml:
+       fixed id= in <refentry>.
+
+       * man/Attic/gpasswd.1, man/gpasswd.1.xml:
+       fixed refentry id (must be 'gpasswd.1').
+
+       * man/Makefile.am, man/newgrp.1.xml:
+       raw version converted from roff using doclifter.
+
+       * lib/exitcodes.h: new exit codes:
+       #define E_PASSWD_NOTFOUND       14      /* not found password file */
+       #define E_GROUP_NOTFOUND        16      /* not found group file */
+       #define E_GSHADOW_NOTFOUND      17      /* not found shadow group file */
+
+       * man/Attic/chage.1, man/chage.1.xml, lib/exitcodes.h:
+       change to 15 (from 14) exit code in chage when shadow not found.
+
+       * src/Attic/chsh_chkshell.c, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/groups.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/id.c, src/lastlog.c, src/login.c, src/login_nopam.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c, libmisc/pwd_init.c, libmisc/pwdcheck.c, libmisc/rlogin.c, libmisc/salt.c, libmisc/setugid.c, libmisc/setupenv.c, libmisc/shell.c, libmisc/strtoday.c, libmisc/sub.c, libmisc/sulog.c, libmisc/ttytype.c, libmisc/tz.c, libmisc/ulimit.c, libmisc/utmp.c, libmisc/valid.c, libmisc/xmalloc.c, libmisc/addgrps.c, libmisc/age.c, libmisc/basename.c, libmisc/chkname.c, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/console.c, libmisc/copydir.c, libmisc/entry.c, libmisc/env.c, libmisc/failure.c, libmisc/fields.c, libmisc/hushed.c, libmisc/isexpired.c, libmisc/limits.c, libmisc/list.c, libmisc/log.c, libmisc/loginprompt.c, libmisc/mail.c, libmisc/motd.c, libmisc/myname.c, libmisc/obscure.c, libmisc/pam_pass.c, libmisc/pwd2spwd.c, NEWS, lib/Attic/getpass.c, lib/Attic/rcsid.h, lib/Makefile.am, lib/commonio.c, lib/encrypt.c, lib/fputsx.c, lib/getdef.c, lib/groupio.c, lib/gshadow.c, lib/lockpw.c, lib/port.c, lib/pwauth.c, lib/pwio.c, lib/sgetgrent.c, lib/sgetpwent.c, lib/sgetspent.c, lib/sgroupio.c, lib/shadow.c, lib/shadowio.c:
+       use #ident preprocesor directive istead RCID macro with content similar
+       to example described in ident(1) man page (modern compilers like latest GCC
+       removes not used functions by global optimization).
+       So "ident /usr/bin/passwd" will show again some useable informations.
+
+       * man/Makefile.am: added support for regenerate roff files from XML.
+       Added depeing shadow-man-pages.pot on $(man_XMANS).
+
+2005-08-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/login.1, man/login.1.xml, NEWS:
+       added securetty(5) to SEE ALSO section (fixed Debian bug http://bugs.debian.org/325773).
+
+       * po/pl.po: more updates.
+
+       * configure.in:
+       typo in handle --with-selinux. Fixes in xsltproc detection.
+
+       * autogen.sh:
+       added --enable-man and --enable-maintainer-mode to configure options.
+
+       * man/Attic/chage.1, man/chage.1.xml, NEWS:
+       added EXIT VALUES section (by Nicolas François <nicolas.francois@centraliens.net>).
+
+       * man/Attic/passwd.1, man/passwd.1.xml:
+       remove "Password expiry information" section (all options are described now
+       in OPTIONS section). Describe -a and -k options.
+
+       * NEWS, src/su.c:
+       fixed twice copy enviroment which causes auth problems (bug was introduced in 4.0.12;
+       fix by Nicolas François <nicolas.francois@centraliens.net>).
+
+       * src/passwd.c, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po:
+       s/Incorrect password for `%s'/Incorrect password for %s/ (one phrase for translate less).
+
+       * src/login.c, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po:
+       s/login: failure forking: %s/%s: failure forking: %s/ (one phrase for translate less).
+
+       * po/pl.po: partialy updated.
+
+2005-08-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/exitcodes.h, src/chage.c:
+       s/E_NOT_SHADOWED/E_SHADOW_NOTFOUND/ and change value of this exit code to 14.
+
+       * NEWS, lib/exitcodes.h, src/chage.c:
+       differentiate the different failure causes by the exit value
+       This will permit to adduser Debian script to detect if chage failed because the
+       system doesn't have shadowed passwords (fix for http://bugs.debian.org/317012)
+       Plain merge 443_chage_exit_values Debian patch.
+
+       * man/Attic/pw_auth.3.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml, man/chage.1.xml, man/chfn.1.xml:
+       use tabs in indentation (~10KB less in all xml files).
+
+       * po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po:
+       run "make update-po" and remove obsoleted strings.
+
+       * src/expiry.c, src/login.c: remove #if 0 .. #endif code.
+
+       * src/login.c: remove #if 1 .. #endif.
+
+       * libmisc/obscure.c, libmisc/utmp.c, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, src/chage.c, src/login.c, src/logoutd.c, src/newgrp.c, src/su.c, src/useradd.c, NEWS:
+       merge 010_more-i18ned-messages Debian patch which adds i18n support for few more messages
+       (orginaly patch was prepared by Guillem Jover <guillem@debian.org>).
+
+       * man/id/chsh.1:
+       fix .SH (fix merged from 207_id-manpages debian patch).
+
+2005-08-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * acinclude.m4: add aclocal macros (based on acinclude.m4 from glib):
+       JH_PATH_XML_CATALOG: checks the location of the XML Catalog,
+       JH_CHECK_XML_CATALOG: checks if a particular URI appears in the XML catalog.
+
+       * man/Attic/useradd.8, man/useradd.8.xml:
+       cleanups in "Changing the default values" section.
+
+       * man/useradd.8.xml:
+       replace <emphasis remap='I'></emphasis> by <replaceable></replaceable>.
+       Other minor cleanups.
+
+       * configure.in:
+       fixed missing )] in AC_ARG_WITH(skey, ..) (thank for fix to Yuri Kozlov <kozlov.y@gmail.com>).
+
+       * man/Attic/chsh.1, man/Attic/faillog.5, man/Attic/gshadow.5, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pw_auth.3.xml, man/Attic/shadow.3, man/Attic/suauth.5, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/chsh.1.xml, man/faillog.8.xml, man/groupadd.8.xml, man/gshadow.5.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/porttime.5.xml, man/shadow.3.xml, man/suauth.5.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml:
+       typos, and change some arguments so they do not match the name of a
+       command (fixes by Nicolas François <nicolas.francois@centraliens.net>).
+
+       * NEWS, libmisc/chkname.c, man/Attic/groupadd.8, man/Attic/useradd.8, man/groupadd.8.xml, man/useradd.8.xml:
+       fix regular expression describing alloved login/group names (pointed
+       by Nicolas François <nicolas.francois@centraliens.net>)
+       (correct is [a-z_][a-z0-9_-]*[$]).
+
+       * man/Attic/useradd.8, man/useradd.8.xml:
+       remove "Creating New Users" section and merge this directly in DESCRIPTION.
+       Add <option></option> for -o in EXIT VALUES section.
+
+       * po/ru.po, NEWS:
+       update ru translations (by Yuri Kozlov <kozlov.y@gmail.com>).
+
+2005-08-27  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/passwd.1, man/passwd.1.xml:
+       removed "Account maintenance" section.
+
+       * man/Attic/passwd.1, man/passwd.1.xml: partialy done rewrite.
+
+       * po/ro.po:
+       some fixes after review of the translation (by Sorin Batariuc <sorin@bonbon.net>).
+
+       * man/Attic/lastlog.8, man/lastlog.8.xml:
+       s/Print help message and exit./Display help message and exit./
+
+       * man/Attic/chage.1, man/chage.1.xml: document -h,--help option.
+
+       * man/Attic/groupadd.8, man/groupadd.8.xml:
+       document -h,--help option. added <option></option> for -o in EXIT VALUES.
+       Cleanups in SYNOPSIS section.
+
+       * man/Attic/chage.1, man/Attic/faillog.8, man/chage.1.xml, man/faillog.8.xml:
+       replace <emphasis remap='I'></emphasis> by <replaceable></replaceable>.
+
+       * man/Attic/lastlog.8, man/lastlog.8.xml:
+       document new -b,--before option.
+
+       * po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/it.po, po/ja.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/el.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, src/lastlog.c:
+       s/lastlog results/lastlog records/ in lastlog usage output.
+
+       * man/Attic/lastlog.8, man/lastlog.8.xml:
+       add "" aroud <command></command>.
+
+       * po/vi.po, po/zh_CN.po, po/zh_TW.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, src/lastlog.c:
+       alphabetic order options in lastlog usage output. Run "make -C po update-po".
+
+       * src/lastlog.c, NEWS:
+       added handle -b option which allow print only lastlog records older than
+       specified DAYS (fix by <miles@lubin.us>).
+
+       * libmisc/salt.c, NEWS:
+       fixed for use login.defs::MD5_CRYPT_ENAB only if PAM support
+       is disabled (fix by John Gatewood Ham <zappaman@buraphalinux.org>).
+
+2005-08-25  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in:
+       use AC_HELP_STRING() in AC_ARG_ENABLE() and AC_ARG_WITH().
+       Exit with error message if configure was runed --with-selinux
+       and libselinux not found.
+
+2005-08-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * libmisc/chkname.c, NEWS, man/Attic/groupadd.8, man/Attic/useradd.8, man/groupadd.8.xml, man/useradd.8.xml:
+       documents in CAVEATS section the limitations shadow places on user and
+       group names (fix by Mike Frysinger <vapier@gentoo.org>).
+
+       * src/passwd.c, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po:
+       added missing -i, --inactive in usage() output.
+
+2005-08-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, src/passwd.c, NEWS:
+       passwd rewrited for use getopt_long().
+
+       * man/Attic/chage.1, man/chage.1.xml: /warndays/--warndays/
+
+       * man/Attic/pw_auth.3.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml, man/chage.1.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml:
+       remove trailing spaces.
+
+       * src/lastlog.c, src/login.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/suauth.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c, src/Attic/chsh_chkshell.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmems.c, src/groupmod.c, src/groups.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/id.c:
+       reorder #includes, indentations and minor cleanups.
+
+       * src/newgrp.c: indent code.
+
+       * NEWS, src/newgrp.c:
+       when newgrp process sits between parent and child shells, it should
+       propagate STOPs from child to parent and CONTs from parent to child,
+       otherwise e.g. bash's "suspend" command won't work.
+       Fixed Debian http://bugs.debian.org/314727
+
+2005-08-22  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in: typo.
+
+       * configure.in:
+       add display short summary information on finish autoconf script.
+
+       * NEWS, configure.in: start work on 4.0.13.
+
+2005-08-21  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ru.po: updated for 4.0.12 (by Yuri Kozlov <yuray@id.ru>).
+
+       * NEWS, po/sk.po:
+       updated for 4.0.12 (by Peter Mann <Peter.Mann@tuke.sk>).
+
+2005-08-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/nl.po, NEWS:
+       updated for 4.0.12 (by cobaco (aka Bart Cornelis) <cobaco@linux.be>).
+
+2005-08-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/fi.po:
+       updated for 4.0.12 (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+       * NEWS, po/de.po:
+       updated for 4.0.12 (by Frank Schmid <frank@cs-schmid.de>).
+
+       * po/pt.po, NEWS:
+       updated for 4.0.12 (by Miguel Figueiredo <elmig@debianpt.org>).
+
+2005-08-11  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/cs.po:
+       updated for 4.0.12 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+       * src/chpasswd.c, src/groupdel.c, src/newusers.c, src/useradd.c, src/userdel.c, src/usermod.c:
+       remove duplicated #include <pwd.h>.
+
+       * po/pl.po: finished update for 4.0.12.
+
+       * src/useradd.c, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po:
+       s/Not copying any file into it./Not copying any file from skel directory into it./
+
+       * src/useradd.c, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po:
+       break warning message longer than 80 characters.
+
+       * po/pl.po: updated.
+
+       * src/groupadd.c, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po:
+       fixed missing \n in usage() output.
+
+       * lib/getdef.c, src/login.c, src/newgrp.c, NEWS:
+       remove using login.defs::CLOSE_SESSIONS variable and allways close PAM session.
+
+2005-08-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in:
+       realy enable shadow group support by default (pointed by
+       Greg Schafer <gschafer@zip.com.au> and Peter Vrabec <pvrabec@redhat.com>).
+       Indentations in --help output.
+
+       * man/Attic/chage.1, man/chage.1.xml:
+       s/occurrence/occurence/ (334_chage.1-typo Debian patch).
+
+       * man/Attic/chfn.1, man/chfn.1.xml:
+       s/may only change may only change/may only change/ (based on 336_chfn.1 Debian patch).
+
+       * man/it/Makefile.am: cleanups (443_man_it_Makefile.am Debian patch).
+
+       * man/Attic/userdel.8, man/userdel.8.xml: s/an NIS client/a NIS client/
+
+       * man/Attic/useradd.8, man/useradd.8.xml: s/an NIS group/a NIS group/
+
+       * man/Attic/lastlog.8, man/lastlog.8.xml:
+       s/you have an high UID/you have a high UID/
+
+       * man/Attic/lastlog.8, man/lastlog.8.xml:
+       added missing <para></para> in AUTHORS section (cached by Nicolas).
+
+       * po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po:
+       run "make update-po".
+
+       * po/POTFILES.in: added missing libmisc/pwdcheck.c. Sorted.
+
+2005-08-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: s/22-07-2005/22-08-2005/
+
+       * NEWS: schedule release 4.0.12 in 22-07-2005.
+
+       * libmisc/setupenv.c, man/pl/login.defs.5, NEWS, etc/Attic/login.defs.hurd, etc/Attic/login.defs.linux, lib/getdef.c:
+       removed handle login.defs::QMAIL_DIR variable.
+
+       * libmisc/chowntty.c, NEWS:
+       allow regular user to login on read-only root file system (not only for root).
+       Patch by Nicolas François <nicolas.francois@centraliens.net>
+       Fix for http://bugs.debian.org/52069
+
+       * NEWS, man/Attic/usermod.8, man/usermod.8.xml:
+       give the correct range for system users: 0-999 instead of 0-99
+       (http://bugs.debian.org/286258)
+
+       * man/Attic/chage.1, man/chage.1.xml: s/an password/a password/
+
+       * man/Attic/chage.1, man/chage.1.xml, src/chage.c, NEWS:
+       another maxdays fix based on 427_chage_expiry_0 Debian patch
+       (fix for http://bugs.debian.org/78961).
+       Better description -1 value passed in -E, -I and -M options.
+
+       * src/gpasswd.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, NEWS:
+       added flushing group nscd cache on exit.
+
+       * src/pwck.c, src/pwconv.c, NEWS:
+       added flushing passwd nscd cache on exit.
+
+       * NEWS, src/usermod.c:
+       fixed handle -p option (patch by Peter Vrabec <pvrabec@redhat.com>).
+       Indented.
+
+       * man/Attic/chage.1, man/chage.1.xml, NEWS, src/chage.c:
+       use -1 as value for disable password inactivity.
+       Patch by Peter Vrabec <pvrabec@redhat.com> which fixes:
+       https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109499
+       https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=137498
+
+2005-08-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/useradd.c, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po:
+       do not copy files from skel directory if home directory exist and write
+       warning message about not copying skel files.
+       Patch by Peter Vrabec <pvrabec@redhat.com> which fixes:
+       https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=143150
+       https://bugzilla.redhat.com/beta/show_bug.cgi?id=158574
+       https://bugzilla.redhat.com/beta/show_bug.cgi?id=80242
+
+       * po/pl.po: updated.
+
+2005-08-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/useradd.c:
+       s/spoll/spool/ (spoted by Nicolas François <nicolas.francois@centraliens.net>).
+
+2005-08-04  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/su.c:
+       ignore SIGINT while authenticating. A ^C could defeat the waiting
+       period and permit brute-force attacks (fixed http://bugs.debian.org/288827).
+
+2005-08-03  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/defines.h, NEWS, configure.in:
+       added require ngettext (added [need-ngettext] to AM_GNU_GETTEXT() parameters)
+       and stub prototype for ngettext() in lib/prototypes.h (neccessary if shadow
+       compiled with disabled NLS support)
+       Based on fixes by Martin Schlemmer <azarah@nosferatu.za.org>.
+
+       * src/faillog.c: start using exitcodes.h.
+
+       * NEWS, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/gshadow.5, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8, man/logoutd.8.xml, man/shadow.3.xml, man/sulogin.8.xml:
+       regenerate all roff man pages using DocBook XSL Stylesheets 1.69.0.
+
+       * src/chage.c, src/chpasswd.c, src/newusers.c, src/passwd.c, src/pwunconv.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c, NEWS:
+       remove flushing shadow nscd cache (nscd do not caches shadow map).
+
+2005-08-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/groupadd.c, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, NEWS:
+       rewrited groupadd for use getopt_long().
+
+       * src/chage.c: indent.
+
+       * NEWS, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/userdel.c:
+       do OPENLOG() before pam_start().
+
+       * NEWS, src/groupadd.c: fixed double OPENLOG().
+
+       * src/passwd.c, src/vipw.c, src/userdel.c: reorder nscd_flush_cache().
+
+       * src/chfn.c, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po:
+       cleanups in printf() translated messages for make translators work easier.
+
+       * NEWS, src/chage.c: added flushing NSS shadow map on exit.
+
+       * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, src/useradd.c:
+       s/the the/the/
+
+       * po/POTFILES.in: removed lib/{grpack,gspack,pwpack,sppack}.c.
+
+       * NEWS, src/newusers.c:
+       added flushing NSS passwd, shadow and group maps.
+
+       * NEWS, src/chpasswd.c, src/useradd.c:
+       added flushing NSS shadow map on exit.
+
+       * lib/prototypes.h: removed outdated prototypes for lib/gsdbm.c.
+
+       * NEWS, lib/Attic/grpack.c, lib/Attic/gspack.c, lib/Attic/pwpack.c, lib/Attic/sppack.c, lib/Makefile.am, lib/prototypes.h:
+       remove lib/{grpack,gspack,pwpack,sppack}.c and prototypes from lib/prototypes.h (outdated).
+
+       * lib/prototypes.h: removed outdated prototypes from lib/pwdbm.c.
+
+2005-07-31  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/usermod.c: added flushing NSS shadow map.
+
+2005-07-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/chage.1, man/chage.1.xml:
+       typo (s/passwordchanges/password changes/).
+
+2005-07-27  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/getdef.c, src/su.c:
+       ENV_SUPATH and ENV_PATH must be used independently to PAM.
+
+       * lib/exitcodes.h: added E_BAD_ARG.
+
+       * src/gpasswd.c: start use exitcodes.h.
+
+       * lib/getdef.c: remove ENV_ROOTPATH def_table[] (not used).
+
+2005-07-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/chsh.c: start use exitcodes.h.
+
+2005-07-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/Makevars, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po:
+       added --no-location to po/Makevars::XGETTEXT_OPTIONS: shorter .po files.
+
+       * NEWS, src/grpck.c, src/pwck.c:
+       pwck: now pwck OPENLOG with correct name ("pwck" instead "pwsk"),
+       pwck, grpck: replace all puts() with printf() - it fixes problems with extra blank
+       lines printed in some messages
+       (fixes by Alexander Gattin <arg@online.com.ua>)
+
+2005-07-22  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/Makevars: added:
+       MSGID_BUGS_ADDRESS = kloczek@pld.org.pl
+
+2005-07-21  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/chfn.c: start use #include "exitcodes.h",
+
+       * lib/exitcodes.h: cleanups.
+
+       * lib/Makefile.am, lib/exitcodes.h, src/chage.c:
+       start separate all E_* exit codes to lib/exitcodes.h.
+
+       * src/passwd.c, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po:
+       use separated message "Password set to expire." instead "Password changed."
+       on "passwd -e" (fix by Christian Perrier <bubulle@debian.org>).
+
+       * NEWS, po/fr.po:
+       updated (by Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>).
+
+       * NEWS, configure.in: start work on 4.0.12.
+
+2005-07-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS, configure.in, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po:
+       4.0.11.1 will be released tmorrow (21-07-2005).
+
+       * configure.in, NEWS:
+       fixed configure.in: now is possible build shadow with enabled/disabled shadow group
+       support (thanks for report symptoms of the bug to Greg Schafer <gschafer@zip.com.au>).
+
+       * po/sv.po, NEWS: update finished (by Per Olofsson <pelle@dsv.su.se>)
+
+       * po/sv.po: partialy updated (by Per Olofsson <pelle@dsv.su.se>).
+
+2005-07-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in: start work on 4.0.12.
+
+2005-07-18  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * libmisc/sub.c:
+       fixed compilation warning about incompatible implicit declaration of built-in
+       function printf: added "#include <stdio.h>".
+
+       * src/groupadd.c:
+       move #ifdef USE_PAM .. #endif #includes outside #ifdef SHADOWGRP .. #endif.
+
+       * libmisc/pwdcheck.c:
+       added missing "#include <stdio.h>" (fix compilation with PAM disabled).
+
+       * po/ro.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/pl.po, po/pt_BR.po, po/nl.po, po/nn.po, po/nb.po, po/ko.po, po/ja.po, po/it.po, po/he.po, po/id.po, po/fr.po, po/bs.po, po/ca.po, po/da.po, po/el.po, po/es.po, po/eu.po, po/fi.po:
+       run "make update-po".
+
+       * src/su.c:
+       move declaration of pamh nad caught variables to #ifdef USE_PAM .. #endif.
+
+       * po/pl.po, NEWS: updated pl translation.
+
+2005-07-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/sk.po:
+       updated for 4.0.11 (by Peter Mann <Peter.Mann@tuke.sk>).
+
+2005-07-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/cs.po:
+       updated for 4.0.11 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+2005-07-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/de.po, NEWS:
+       updated for 4.0.11 (by Frank Schmid <frank@cs-schmid.de>).
+
+2005-07-14  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/pt.po:
+       updated for 4.0.11 (by Miguel Figueiredo <elmig@debianpt.org>).
+
+2005-07-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/stats: reorder gsub().
+
+       * po/ru.po: cleanups.
+
+       * po/ru.po, NEWS:
+       updated for 4.0.11 (by Yuri Kozlov <yucoz@yandex.ru>).
+
+2005-07-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/getdef.c:
+       move MAIL_DIR variable from def_table[] to part independent to USE_PAM
+       (still used in userdel/usermod).
+
+       * NEWS, man/Attic/pwck.8, man/pwck.8.xml:
+       document -q option (based on Debian patch for fix http://bugs.debian.org/309408)
+       Rewrited OPTIONS section and better SYNOPSIS.
+
+       * NEWS, po/da.po:
+       - updated for 4.0.11 (by Claus Hindsgaul <claus_h@image.dk>).
+
+       * NEWS, src/su.c:
+       ignore SIGINT while authenticating. A ^C could defeat the waiting period and
+       permit brute-force attacks. Also ignore SIGQUIT.
+       Fixed: http://bugs.debian.org/52372 and http://bugs.debian.org/288827
+
+       * po/fi.po, NEWS:
+       - updated for 4.0.11 (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+       * po/ro.po: - updated Project-Id-Version field.
+
+       * NEWS, po/ro.po:
+       - updated for 4.0.11 (by Sorin B. <sorin@bonbon.net>).
+
+2005-07-11  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/Attic/lastlog.8, man/lastlog.8.xml:
+       document that lastlog is a sparse file, and don't need to be rotated.
+       http://bugs.debian.org/219321
+
+       * src/chage.c: use E_USAGE=2 as usage() exit code.
+
+       * NEWS, po/es.po:
+       updated for 4.0.11 (by Ruben Porras <nahoo82@telefonica.net>).
+
+       * src/useradd.c: cleanups in usage() oyput.
+
+       * po/zh_TW.po, po/vi.po, po/zh_CN.po, po/uk.po, po/tl.po, po/tr.po, po/sv.po, po/sq.po, po/sk.po, po/ro.po, po/ru.po, po/pt.po, po/pt_BR.po, po/pl.po, po/nb.po, po/nl.po, po/nn.po, po/ko.po, po/it.po, po/ja.po, po/he.po, po/id.po, po/fr.po, po/eu.po, po/fi.po, po/es.po, po/da.po, po/de.po, po/el.po, po/bs.po, po/ca.po, po/cs.po:
+       cleanups in usage() output.
+
+       * NEWS: release 4.0.11 is sheduled to 18-06-2005.
+
+2005-07-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/login.1, man/login.1.xml, NEWS:
+       better explain the respective roles of login, init and getty with regards
+       to the utmp file (based on 441_manpages-shadow.5 Debian patch)
+
+       * man/Attic/su.1, man/groupdel.8.xml, man/su.1.xml, man/Attic/groupdel.8:
+       s/presense/presence/; s/filesystem/file system/
+       (sed on 440_manpages-login.1 Debian patch)
+
+       * man/pl/Attic/shadowconfig.8, man/pl/Makefile.am, man/ja/Attic/shadowconfig.8, man/ja/Makefile.am, man/it/Attic/shadowconfig.8, man/Attic/shadowconfig.8, man/Attic/shadowconfig.8.xml, man/Makefile.am, NEWS:
+       removed shadowconfig(8) man page (will be maintained in Debian shadow pkg repository).
+
+       * man/it/sg.1: added.
+
+       * man/it/Makefile.am: more files in man_MANS.
+
+       * man/it/Makefile.am: move pwunconv.8 to man_MANS.
+
+       * man/useradd.8.xml, man/Attic/useradd.8:
+       updated after rewrite for for getopt_long() in useradd (-D and -k options
+       idescription must be finished).
+
+       * src/useradd.c, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, NEWS:
+       rewrited for use getopt_long().
+
+       * po/stats: more gsub().
+
+2005-07-08  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/newgrp.c:
+       indent source code and use fix for handle splitted groups unconditionaly.
+
+       * lib/nscd.c: indent.
+
+       * NEWS, src/newgrp.c:
+       add fix for handle splitted NIS groups: extends the functionality that,
+       if the requested group is given, all groups of the same GID are tested for
+       membership of the requesting user.
+       (fix by Christian Mudra <C.Mudra@science-computing.de>
+
+       * lib/nscd.c, NEWS:
+       for some reason doing the INVALIDATE call with two write()'s fails.
+       Do one writev() call instead. http://bugs.gentoo.org/show_bug.cgi?id=80413
+       (submited by Martin Schlemmer <azarah@gentoo.org>)
+
+       * NEWS, lib/nscd.c:
+       merge nscd-socket-path patch from Fedora: newer glibc's have a different nscd socket
+       location (/var/run/nscd/socket instead /var/run/.nscd_socket).
+
+2005-07-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/stats: improved.
+
+       * man/Attic/groupadd.8, man/groupadd.8.xml, NEWS:
+       document -o option in groupadd(8).
+
+       * configure.in: s/'"$<foo>" != "no"'/'"$<foo>" = "yes"'/
+
+       * NEWS, configure.in, lib/Makefile.am, lib/pwauth.c:
+       S/Key support is back.
+
+       * po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po:
+       run "make update-po".
+
+       * po/pl.po: updated.
+
+       * src/useradd.c: s,key=value,KEY=VALUE,
+
+       * src/groupadd.c, NEWS, man/Attic/groupadd.8, man/groupadd.8.xml:
+       change -O option to -K and document it in man page.
+
+       * man/Attic/useradd.8, man/useradd.8.xml, src/useradd.c:
+       s/NAME=VALUE/KEY=VALUE/; s/key=value/KEY=VALUE/
+
+       * src/chfn.c, src/groupadd.c, src/groupmems.c, src/login.c, src/passwd.c, src/vipw.c:
+       sort cases in switch (flag) {}.
+
+       * src/gpasswd.c, src/groupadd.c, src/groupmems.c, src/groupmod.c, src/passwd.c, src/useradd.c, src/usermod.c:
+       sort getopt() optstring.
+
+       * src/useradd.c:
+       remove A: from getopt() optstring (the same bug as in usermod).
+
+       * src/usermod.c:
+       remove A: from getopt() optstring (it was for handle AUTH_METHODS code but now
+       it is not used option). Catched by Thorsten Kukuk <kukuk@suse.de>.
+
+       * src/usermod.c, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po:
+       indent source code. Added usermod error message about -a option usage to translated messages.
+
+       * po/POTFILES.in: mistake s,chage_chkshell.c,chsh_chkshell.c,
+
+       * po/POTFILES.in: s,libmisc/chkshell.c,src/chage_chkshell.c,
+
+       * man/Attic/usermod.8, man/usermod.8.xml, src/usermod.c, NEWS:
+       added -a option. This flag can only be used in conjunction with the -G
+       option. It cause usermod to append user to the current supplementary group list.
+       (patch by Peter Vrabec <pvrabec@redhat.com>)
+
+       * libmisc/Attic/chkshell.c, libmisc/Makefile.am, src/Attic/chsh_chkshell.c, src/Makefile.am:
+       move libmisc/chkshell.c to src/chsh_chkshell.c. check_shell() is used only by chsh.
+
+2005-07-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * Attic/acconfig.h, NEWS, configure.in:
+       finish move all autoheader templates from acconfig.h to configure.in.
+
+       * src/chage.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS:
+       added missing \n in chage error messages.
+
+       * po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/bs.po:
+       run "make update-po".
+
+       * src/usermod.c: move all #include in one place.
+
+       * src/useradd.c: s/-O/-K/
+
+       * man/Attic/useradd.8, man/useradd.8.xml:
+       cleanups in Note: in -K description.
+
+       * NEWS, man/Attic/useradd.8, man/useradd.8.xml, src/useradd.c:
+       change -O option to -K and document it in man page.
+
+       * man/Attic/useradd.8, man/useradd.8.xml:
+       added separated <cmdsynopsis></cmdsynopsis> for -D description and remove using </srb> tags from
+       <refsynopsisdiv id='synopsis'>.
+
+       * src/login.c:
+       replace #ifdef USE_PAM .. #endif #ifndef USE_PAN .. #endif by
+       #ifdef USE_PAM .. #else .. #endif.
+
+       * src/su.c: conditiona code reorganization.
+
+       * src/login.c: remove one #ifndef USE_PAM .. #endif.
+
+       * libmisc/setupenv.c: move setup $MAIL to !USE_PAM.
+
+       * libmisc/setupenv.c, src/su.c:
+       consolidate two sections of code #ifndef USE_PAM to one.
+
+       * src/su.c, src/sulogin.c, libmisc/setupenv.c, libmisc/tz.c, src/login.c, NEWS:
+       fixed erroneous warning messages about some login.defs variables when used with PAM
+       (fix by DJ Lucas <dj@linuxfromscratch.org>)
+
+2005-07-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in, libmisc/getdate.y, libmisc/utmp.c, src/logoutd.c:
+       remove non-USG code.
+
+       * Attic/acconfig.h, configure.in:
+       start moving all autoheader templates from acconfig.h to configure.in.
+
+       * configure.in: remove not used AC_DEFINE(HAVE_LIBCRYPT).
+
+       * Attic/acconfig.h, NEWS, configure.in:
+       stop with error message if crypt() not found. Remove --with{,out}-libcrypt switch.
+
+       * src/login.c: fixed use SYSLOG macro.
+
+2005-07-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/login_nopam.c: fixed use SYSLOG macro.
+
+2005-07-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/login.c:
+       setup limits and umask (using login.defs ULIMITS and UMASK variables) only when
+       PAM support is disabled (it is task for pam_limits and pam_umask modules).
+
+2005-06-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/sulogin.c, src/login.c, src/login_nopam.c, NEWS:
+       use SYSLOG macro instead syslog() which saves the locale, sets the locale to C,
+       sends the message and restores the locale (fix by Nicolas François <nicolas.francois@centraliens.net>).
+
+       * NEWS, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/userdel.8, man/Attic/usermod.8, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmod.8.xml, man/userdel.8.xml, man/usermod.8.xml:
+       in SEE ALLSO section added refer to gpasswd(8)
+       (suggested by Mike Frysinger <vapier@gentoo.org>)
+
+       * NEWS, configure.in: start work on 4.0.11.
+
+2005-06-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: +1 day release 4.0.10 date.
+
+       * po/pl.po: kill fuzzy.
+
+       * po/de.po: partial update by Frank Schmid <frank@cs-schmid.de>.
+
+2005-06-25  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ca.po: run "make update-po".
+
+       * po/sk.po: updated sk translation by Peter Mann <Peter.Mann@tuke.sk>.
+
+2005-06-22  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: typo.
+
+2005-06-21  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po: typo.
+
+       * po/pl.po: updated for 4.0.10.
+
+       * po/ru.po, NEWS: updated ru translation by maintainer.
+
+       * NEWS: added past releases dates. Cleanups.
+
+       * man/Attic/shadowconfig.8: merge version generated from XML file.
+
+       * po/ca.po, po/cs.po, po/da.po, po/fi.po, NEWS:
+       translations updated by maintainers.
+
+2005-06-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/chage.c, po/zh_TW.po, po/vi.po, po/zh_CN.po, po/tl.po, po/tr.po, po/uk.po, po/sk.po, po/sq.po, po/sv.po, po/ro.po, po/ru.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/eu.po, po/fi.po, po/fr.po, po/de.po, po/el.po, po/es.po, po/ca.po, po/cs.po, po/da.po, po/bs.po (usage):
+       s/EXPIRE/EXPIRE_DATE/.
+
+       * po/pl.po: start update for 4.0.10.
+
+       * src/usermod.c, src/useradd.c, src/userdel.c, src/id.c, src/newgrp.c, src/su.c, po/zh_TW.po, po/zh_CN.po, po/vi.po, po/uk.po, po/tr.po, po/tl.po, po/sv.po, po/sq.po, po/sk.po, po/ru.po, po/pt_BR.po, po/ro.po, po/pt.po, po/pl.po, po/nn.po, po/nl.po, po/nb.po, po/ko.po, po/ja.po, po/it.po, po/id.po, po/he.po, po/fr.po, po/eu.po, po/fi.po, po/es.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po:
+       s/uid/UID/ in all commnets and messages.
+
+       * libmisc/failure.c, libmisc/limits.c, lib/pwio.c:
+       s/uid/UID/ in comments.
+
+       * src/usermod.c, src/useradd.c, src/groupadd.c, src/groupmod.c, src/id.c, src/newgrp.c, po/zh_TW.po, po/zh_CN.po, po/vi.po, po/uk.po, po/tr.po, po/tl.po, po/sv.po, po/sq.po, po/sk.po, po/ru.po, po/ro.po, po/pt_BR.po, po/pt.po, po/pl.po, po/nn.po, po/nl.po, po/nb.po, po/ko.po, po/ja.po, po/it.po, po/he.po, po/id.po, po/fr.po, po/fi.po, po/eu.po, po/es.po, po/el.po, po/da.po, po/de.po, po/cs.po, po/bs.po, po/ca.po, libmisc/limits.c, lib/groupio.c:
+       s/gid/GID/ in all comments and messages.
+
+       * src/gpasswd.c, src/login.c, src/passwd.c, src/chage.c, src/chfn.c, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po:
+       one message in i18n messages less: use in all places "Permission denied" instead
+       "permission denied".
+
+       * libmisc/getdate.y:
+       remove extern for gmtime(), localtime() and mktime() and instead add #include <time.h>.
+
+       * libmisc/entry.c: removed extern for fgetpwent().
+
+       * NEWS, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/gshadow.5, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/login.defs.5, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/pw_auth.3, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8:
+       now most of the man pages now are generated from XML files so in case any submiting
+       any chages to this resources please make diff fies to XML files.
+
+       * man/Attic/pw_auth.3.xml: cleanups.
+
+       * man/grpck.8.xml, man/passwd.1.xml:
+       correctly code EXIT VALUES section using <variablelist>. Cleanups.
+
+       * man/shadow.3.xml: cleanups.
+
+2005-06-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/ja/Attic/mkpasswd.8, man/ja/Makefile.am, man/pl/Attic/mkpasswd.8, man/pl/Makefile.am:
+       remove ja and pl mkpasswd.8 man pages.
+
+2005-06-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pwck.8.xml, man/useradd.8.xml, man/userdel.8.xml:
+       correctly code EXIT VALUES section.
+
+       * Attic/acconfig.h: removed DES_RPC and OPIE templates.
+
+       * src/Attic/mkpasswd.c, src/Makefile.am, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS, man/Attic/mkpasswd.8, man/Attic/mkpasswd.8.xml, man/Makefile.am, po/POTFILES.in, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po:
+       removed mkpasswd.
+
+       * man/Makefile.am: do not install mkpasswd(8) man page.
+
+       * src/Makefile.am: move mkpasswd.c to EXTRA_DIST.
+
+       * man/passwd.5.xml:
+       use <itemizedlist mark='bullet'> for describe passwd fields. Remove outdated
+       information about additional fields in comment field. Cleanups.
+
+       * man/newusers.8.xml: cleanups.
+
+       * man/gshadow.5.xml:
+       use <itemizedlist mark='bullet'> for gshadow fields desscription.
+
+       * man/shadow.5.xml: cleanups.
+
+       * man/shadow.5.xml:
+       use <itemizedlist mark='bullet'> for describe shadow fields.
+
+       * man/Attic/pw_auth.3.xml: cleanups.
+
+       * man/Attic/pw_auth.3.xml: use correct <refname>.
+
+       * man/Attic/pw_auth.3.xml: cleanups.
+
+       * man/groupdel.8.xml, man/groupmod.8.xml:
+       correctly code EXIT VALUES section.
+
+       * man/groupadd.8.xml: cleanups.
+
+       * man/Attic/mkpasswd.8.xml: added missing <variablelist> tag.
+
+       * man/usermod.8.xml: cleanups.
+
+       * man/usermod.8.xml: remove <sbr/> tags from SYNOPSIS section.
+
+       * man/faillog.8.xml: cleanups.
+
+       * man/faillog.5.xml:
+       put struct faillog definition in <programlisting></programlisting>.
+
+       * man/chsh.1.xml, man/chpasswd.8.xml: cleanups.
+
+       * man/groupadd.8.xml:
+       seems I found good way for code EXIT VALUES section.
+
+       * man/shadow.3.xml:
+       put meanings of each field spwd struct in <itemizedlist mark='bullet'>.
+
+       * man/shadow.3.xml:
+       place definition of struct spwd in <programlisting></programlisting>.
+
+       * NEWS, src/userdel.c:
+       userdel now deletes user groups from /etc/gshdow as well as /etc/group.
+       Fix by Nicolas François <nicolas.francois@centraliens.net>.
+       http://bugs.debian.org/99442
+
+       * src/usermod.c, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, NEWS, po/bs.po, po/ca.po, po/cs.po:
+       fixed bug in usermod ad run "make -C po update-po".
+       When relocating a user's home directory, don't fail and remove the new
+       home directory if we can't remove the old home directory for some
+       reason; the results can be spectularly poort if, for instance, only
+       the rmdir() fails. Patch prepared by Timo Lindfors <lindi-spamtrap@newmail.com>.
+       http://bugs.debian.org/166369
+
+2005-06-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/login.c: indent.
+
+       * man/Attic/pw_auth.3.xml, man/Attic/shadowconfig.8.xml, man/chage.1.xml, man/faillog.8.xml, man/groupmems.8.xml, man/gshadow.5.xml, man/login.1.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml:
+       cleanups.
+
+2005-06-14  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/chage.1.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/faillog.5.xml:
+       cleanups.
+
+       * man/login.1.xml: rewrited FILES section.
+
+       * man/id.1.xml, man/lastlog.8.xml, man/gshadow.5.xml: cleanups.
+
+       * man/groups.1.xml: typos.
+
+       * man/chfn.1.xml, man/expiry.1.xml, man/gpasswd.1.xml: cleanups.
+
+2005-06-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS:
+       last patch for UTMPX was submited by by Nicolas François <nicolas.francois@centraliens.net>
+
+       * libmisc/failure.c, libmisc/failure.h, NEWS:
+       use also UTMPX API instead UTMP on failure (login was by affected this when shadow
+       was builded without PAM support).
+
+       * NEWS, src/login.c:
+       the PAM session needs to be closed as root, thus before change_uid()
+       http://bugs.debian.org/53570 http://bugs.debian.org/195048 http://bugs.debian.org/211884
+
+       * man/Attic/passwd.1, man/passwd.1.xml:
+       s/compatiblity/compatibility/ (fix by Christian Perrier <bubulle@kheops.frmug.org>).
+
+2005-06-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/Attic/chfn.1, man/chfn.1.xml:
+       give more details about the influence of login.defs on what's allowed to
+       users (based on Debian patches).
+
+       * NEWS, src/su.c:
+       fix syslogs to be less ambiguous. Use old:new format instead of old-new
+       because '-' can appear in usernames.
+       http://bugs.debian.org/213592
+
+       * NEWS, src/login.c:
+       made login's -f option also able to use the username after -- if none
+       was passed as it's optarg
+       http://bugs.debian.org/53702
+
+       * po/POTFILES.in, NEWS, libmisc/Attic/setup.c, libmisc/Makefile.am:
+       not used now (removed).
+
+       * man/Attic/usermod.8, man/usermod.8.xml:
+       s/inactive_time/inactive_days/ in -f parameter in SYNOPSIS (fix by Christian
+       Perrier <bubulle@debian.org>).
+
+2005-06-08  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/grpck.8, man/grpck.8.xml:
+       typo: s/incorrectable/uncorrectable/ (by A Costa <agcosta@gis.net>).
+
+       * man/Attic/gshadow.5, man/gshadow.5.xml:
+       typos: s/folowing/following/; s/encryped/encrypted/; s/supercedes/supersedes/
+       (by A Costa <agcosta@gis.net>).
+
+       * man/Attic/shadow.5, man/shadow.5.xml:
+       typos: s/encryped/encrypted/; s/supercedes/supersedes/
+       (by A Costa <agcosta@gis.net>)
+
+2005-06-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/login.c, NEWS:
+       check for hushed login and pass PAM_SILENT if true.
+       http://bugs.debian.org/48002
+
+       * src/login.c, NEWS:
+       fixed loggin of username on succesful login (was using the normal username,
+       when it should have used pam_user) http://bugs.debian.org/47819
+
+2005-06-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/zh_TW.po: updated (by Tetralet <tetralet@pchome.com.tw>).
+
+       * NEWS, po/ca.po: updated (by Guillem Jover <guillem@debian.org>).
+
+       * man/de/passwd.1:
+       added small comment with marker usefull for translators.
+
+2005-05-25  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/Attic/mkpasswd.c, src/chpasswd.c, src/faillog.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/su.c, src/useradd.c, src/userdel.c, src/usermod.c, lib/encrypt.c, lib/getdef.c, lib/gshadow.c, lib/pwauth.h, lib/shadow.c, libmisc/failure.c, libmisc/isexpired.c, libmisc/salt.c:
+       indent all.
+
+       * src/chage.c, src/chpasswd.c, src/expiry.c, src/login.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, lib/Attic/sppack.c, lib/defines.h, lib/lockpw.c, lib/prototypes.h, lib/sgetspent.c, lib/shadow.c, lib/shadowio.c, libmisc/age.c, libmisc/entry.c, libmisc/isexpired.c, libmisc/pwd2spwd.c, libmisc/pwdcheck.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, Attic/acconfig.h, NEWS, configure.in:
+       remove using SHADOWPWD #define so now shadow is allways builded with shadow
+       password support.
+
+2005-05-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/chage.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po, NEWS, man/Attic/chage.1, man/chage.1.xml:
+       rewrite for use getopt_long().
+
+2005-05-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in: start working on 4.0.10.
+
+       * man/Makefile.am: remove shadow-man-pages.pot target from all.
+
+2005-05-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/encrypt.c, NEWS:
+       fixed passwd segfault in non-PAM connfiguration (submited by Greg Schafer <gschafer@zip.com.au>).
+
+       * po/sv.po: upsdate (by Christian Perrier <bubulle@debian.org>).
+
+       * NEWS, src/newgrp.c:
+       fixed NULL pointer dereference - getlogin() and ttyname() can
+       return NULL which is not checked (http://bugs.debian.org/162303).
+
+       * man/Attic/su.1, man/pwconv.8.xml, man/su.1.xml, man/Attic/pwconv.8:
+       fixed typo (s,similiar,similar,).
+
+2005-05-14  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/ro.po: updated by Sorin B. <sorin@bonbon.net>.
+
+       * po/ru.po, NEWS: updated by yu-koz <yu-koz@yandex.ru>.
+
+2005-05-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ro.po: few updates by Sorin Batariuc <sorin@bonbon.net>.
+
+2005-05-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ru.po: updated (by Yuri Kozlov <yuray@id.ru>).
+
+2005-05-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/vi.po:
+       completed translations for HEAD (by Clytie Siddall <clytie@riverland.net.au>).
+
+2005-05-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/LINGUAS, po/vi.po: added new vi translation.
+
+       * NEWS, lib/getdef.c:
+       leaves the table as it is, and changes from the binary search to
+       a sequential one (fix by Lucas Correia Villa Real <lucasvr@gobolinux.org>).
+
+       * man/Attic/passwd.1, man/passwd.1.xml:
+       make bold passwd and chfn commands.
+
+2005-04-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/usermod.8.xml, man/vipw.8.xml: cleanups.
+
+2005-04-27  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/shadowconfig.8.xml, man/gpasswd.1.xml, man/groups.1.xml, man/grpck.8.xml, man/login.defs.5.xml, man/passwd.1.xml, man/pwck.8.xml, man/sulogin.8.xml, man/useradd.8.xml:
+       replace <emphasis remap='B'></emphasis> by <command></command>.
+
+       * po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, src/lastlog.c:
+       fixed lastlog --help message (s,--login,--user,) http://bugs.debian.org/249611
+
+       * man/Attic/mkpasswd.8.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml:
+       use <varlistentry></varlistentry> in FILES section. Cleanups.
+
+       * man/expiry.1.xml, man/chsh.1.xml, man/chpasswd.8.xml, man/chfn.1.xml, man/porttime.5.xml, man/Attic/pw_auth.3.xml:
+       cleanups.
+
+       * man/Attic/vipw.8, man/vipw.8.xml:
+       small fix: s,vi,vi(1), (reported by Helge Kreutzmann <kreutzm@itp.uni-hannover.de> in
+       http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=260636).
+       s,VISUAL,$VISUAL; s,EDITOR,$EDITOR,
+
+2005-04-26  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/login.1.xml: fixed bold (use <command></command>). Cleanups.
+
+       * man/Attic/login.1: fixed typo in bold.
+
+       * man/chage.1.xml: fixed italic. Cleanups.
+
+       * man/Attic/chage.1: fixed typo in italic.
+
+       * man/login.defs.5.xml:
+       fixed italic (use <filename></filename> istead italic). Cleanups.
+
+       * man/Attic/login.defs.5: fixed typo in italic.
+
+       * man/vipw.8.xml: fixed italic (use <filename></filename>).
+
+       * man/Attic/vipw.8: typo in italic.
+
+       * man/Makefile.am:
+       added target for generate shadow-man-pages.pot. List all now useable xml files
+       in man_XMANS variable.
+
+       * man/pwconv.8.xml:
+       fixed bold. Use in more places <command></command> istead bold.
+
+       * man/Attic/login.defs.5: typo in bold.
+
+       * man/su.1.xml:
+       removed comment. Use <variablelist></variablelist> in Files secstion.
+       Fixed bold.
+
+       * man/Attic/pwconv.8, man/Attic/su.1: typo in bold.
+
+2005-04-25  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in: start work on 4.0.9.
+
+       * po/nl.po: kill fuzzy.
+
+       * man/Attic/chage.1:
+       reverte last commit (by mistake commited experimental version generated from XML file).
+
+       * NEWS, po/nl.po:
+       updated for 4.0.8 (by "cobaco (aka Bart Cornelis)" <cobaco@linux.be>).
+
+       * po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po:
+       two typos (s,specyfied,specified,; s,maiximum,maximum,).
+
+       * NEWS, po/sk.po:
+       updated for 4.0.8 (by Peter Mann <Peter.Mann@tuke.sk>).
+
+       * src/lastlog.c: typo (s,specyfied,specified,)
+
+       * src/faillog.c: typo (s,maiximum,maximum,).
+
+2005-04-22  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/chage.1.xml, man/chfn.1.xml, man/chsh.1.xml, man/expiry.1.xml, man/gpasswd.1.xml, man/groups.1.xml, man/id.1.xml, man/login.1.xml, man/passwd.1.xml, man/su.1.xml:
+       added <refmiscinfo class="sectdesc">User Commands</refmiscinfo> in <refmeta></refmeta>.
+
+       * man/Attic/mkpasswd.8.xml, man/Attic/pw_auth.3.xml, man/Attic/shadowconfig.8.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/vigr.8.xml:
+       Use encoding="UTF-8" and DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN".
+
+       * man/userdel.8.xml, man/usermod.8.xml, man/vigr.8.xml, man/vipw.8.xml, man/Attic/mkpasswd.8.xml, man/Attic/pw_auth.3.xml, man/Attic/shadowconfig.8.xml, man/chage.1.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml:
+       better formation using "xmlindent -l 80 -d 2".
+
+2005-04-21  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/it/Attic/shadowconfig.8, man/it/chsh.1, man/it/expiry.1, man/it/faillog.5, man/it/faillog.8, man/it/getspnam.3, man/it/groups.1, man/it/grpck.8, man/it/grpconv.8, man/it/grpunconv.8, man/it/id.1, man/it/lastlog.8, man/it/login.1, man/it/logoutd.8, man/it/newgrp.1, man/it/porttime.5, man/it/pwck.8, man/it/shadow.3, man/it/shadow.5, man/it/su.1, man/it/vipw.8, NEWS, man/it/Makefile.am, man/it/chage.1, man/it/chfn.1, man/it/chpasswd.8:
+       updated it man pages: chfn.1, chsh.1, groups.1, grpck.8, grpconv.8, grpunconv.8,
+       id.1, lastlog.8, login.1, newgrp.1, pwunconv.8, shadow.5, vigr.8, vipw.8.
+       new it man pages: chage.1, chpasswd.8, expiry.1, faillog.5, faillog.8,
+       getspnam.3, logoutd.8, porttime.5, pwck.8, shadow.3, shadowconfig.8, su.1.
+       (by Danilo Piazzalunga <danilopiazza@libero.it>)
+
+       * po/uk.po:
+       cleanups in plural forms (by Roman Festchook <roma@polesye.net>).
+
+       * man/Attic/chage.1, man/Attic/mkpasswd.8.xml, man/Attic/pw_auth.3.xml, man/Attic/shadowconfig.8.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vipw.8.xml:
+       reformated using xemacs.
+
+2005-04-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fr.po, NEWS:
+       updated for 4.0.8 (by Christian Perrier <bubulle@kheops.frmug.org>).
+
+       * NEWS, po/eu.po: updated for 4.0.8 (by ^pi^ <piarres@gmail.com>).
+
+       * NEWS, po/uk.po:
+       updated for 4.0.8 (by Roman Festchook <roma@polesye.net>).
+
+       * po/cs.po:
+       updated for 4.0.8 (by Miroslav Kure <kurem@upcase.inf.upol.cz>).
+
+       * po/da.po, NEWS:
+       updated for 4.0.8 (by Claus Hindsgaul <claus_h@image.dk>).
+
+       * po/ko.po, NEWS:
+       updated for 4.0.8 (by Changwoo Ryu <cwryu@debian.org>).
+
+       * po/fi.po: kill one fuzzy (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+2005-04-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/chpasswd.8.xml: Rewrited by hand & xemacs.
+
+       * man/chfn.1.xml: cleanups in <refentry> tag.
+
+       * man/chfn.1.xml: Rewrited by hand & xemacs.
+
+       * NEWS, po/pt.po:
+       updated for 4.0.8 (by Miguel Figueiredo <elmig@debianpt.org>).
+
+       * po/es.po, NEWS: updated (by Ruben Porras <nahoo@inicia.es>).
+
+2005-04-18  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/useradd.8:
+       fixed typos in useadd syntax (in SYNOPSIS section) catched using doclifter.
+
+       * man/Attic/mkpasswd.8.xml, man/Attic/pw_auth.3.xml, man/Attic/shadowconfig.8.xml, man/chfn.1.xml, man/chpasswd.8.xml, man/chsh.1.xml, man/expiry.1.xml, man/faillog.5.xml, man/faillog.8.xml, man/getspnam.3.xml, man/gpasswd.1.xml, man/groupadd.8.xml, man/groupdel.8.xml, man/groupmems.8.xml, man/groupmod.8.xml, man/groups.1.xml, man/grpck.8.xml, man/grpconv.8.xml, man/grpunconv.8.xml, man/gshadow.5.xml, man/id.1.xml, man/lastlog.8.xml, man/limits.5.xml, man/login.1.xml, man/login.access.5.xml, man/login.defs.5.xml, man/logoutd.8.xml, man/newusers.8.xml, man/passwd.1.xml, man/passwd.5.xml, man/porttime.5.xml, man/pwck.8.xml, man/pwconv.8.xml, man/pwunconv.8.xml, man/sg.1.xml, man/shadow.3.xml, man/shadow.5.xml, man/su.1.xml, man/suauth.5.xml, man/sulogin.8.xml, man/useradd.8.xml, man/userdel.8.xml, man/usermod.8.xml, man/vigr.8.xml, man/vipw.8.xml:
+       raw version converted using doclifter.
+
+       * configure.in: remove handle --with-lib{opie,skey}.
+
+       * man/de/chsh.1:
+       synced with english version (by Simon Brandmair <sbrandmair@gmx.net>).
+
+       * man/Attic/usermod.8: improved -o description.
+
+       * man/de/passwd.1:
+       added translation EXIT VALUES section (by Simon Brandmair <sbrandmair@gmx.net>).
+
+       * NEWS, po/it.po:
+       updated it translation (by Danilo Piazzalunga <danilopiazza@libero.it>).
+
+2005-04-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po:
+       cleanups.
+
+       * po/pl.po: updated.
+
+       * src/usermod.c:
+       use the same error message ("%s: PAM authentication failed\n") on fail
+       authentication as in other tools.
+
+       * po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po:
+       run "make update-po".
+
+       * src/login.c, src/login_nopam.c:
+       fixed build with disabled PAM support: move bad_time_notify() and check_nologin()
+       back to src/login.c but use this functions #ifndef USE_PAM.
+
+       * NEWS, lib/Makefile.am, lib/pwauth.c:
+       remove not working OPIE and SKEY support.
+
+       * configure.in: typo (s,SELinuux,SELinux,).
+
+       * NEWS: typos.
+
+       * NEWS: chage, useradd, usermod: reduce multiple OPENLOG() calls.
+
+       * src/useradd.c, src/usermod.c: fix multiple OPENLOG() calls.
+
+       * src/chage.c: cleanups.
+
+       * src/chage.c: fix multiple OPENLOG() calls.
+
+       * src/chage.c:
+       use E_SUCCESS/E_NOPERM #defines instead 0/1 in exit() arguments.
+
+2005-04-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/passwd.c:
+       adjust also syslog message on usage -S option without permission.
+       Consolidate SELinix and non-SELinux code.
+
+       * po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, NEWS, src/passwd.c:
+       fix #61313 Debian bug: "passwd -S root" (as a normal user) should not
+       display "You may not change the password for root.
+
+       * NEWS, man/Attic/passwd.1:
+       fix #160477 Debian bug: improve -S output description.
+
+       * man/de/passwd.1:
+       new translation by Simon Brandmair <sbrandmair@gmx.net> with merged all
+       changes between revision 1.2 a 1.5.
+
+2005-04-14  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/passwd.1, man/pl/passwd.1: bold passwd and chage commands.
+
+       * NEWS, src/vipw.c:
+       fixed race condition in vipw (Debian #242407 bug; fix by Alexander Gattin
+       <arg@online.com.ua>).
+
+       * man/pl/Attic/chage.1.xml, man/pl/chage.1:
+       synced with english version.
+
+       * man/Attic/chage.1, man/chage.1.xml:
+       add info about what mean -1 passed n expiredate parameter (based on #304542
+       Debian bug; submited by Federico Grau <grauf@rfa.org>).
+
+2005-04-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fi.po, NEWS:
+       updated translation (by Tommi Vainikainen <tvainikan@cc.hut.fi>).
+
+       * man/hu/passwd.1, man/it/passwd.1, man/ja/passwd.1, man/pl/passwd.1, man/Attic/passwd.1, man/de/passwd.1, man/es/passwd.1:
+       cleanups and unifications in SEE ALSO section.
+
+2005-04-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in:
+       Info documentation says about AC_GNU_SOURCE: "should be called before any
+       macros that run the C compiler". So move this macro on top configure.in for
+       avoid autoconf warnings.
+
+       * configure.in:
+       AC_SYS_LARGEFILE() performs checking is fseeko() is avalaible so "fseeko" can
+       be removed from AC_CHECK_FUNCS() parameters.
+
+       * NEWS, configure.in: Remove using AC_PROG_GCC_TRADITIONAL macro.
+       Add using AC_GNU_SOURCE macro for kill compilation warnings about implicit
+       declaration of function `fseeko'.
+
+       * po/cs.po: killed fuzzy (by Miroslav Kure <kurem@debian.cz>).
+
+       * man/ja/newgrp.1, man/pl/newgrp.1, NEWS, man/Attic/newgrp.1, man/hu/newgrp.1:
+       newgrp uses /bin/sh (not bash).
+
+       * man/Attic/gpasswd.1, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/id.1, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/pwck.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8:
+       describe /etc/group in FILES section as "group account information".
+
+       * man/Attic/grpck.8:
+       describe /etc/passwd in FILES section as "user account information".
+
+       * po/stats: small script for generate translations statistics.
+
+       * NEWS, po/cs.po: Updated by Miroslav Kure <kurem@debian.cz>.
+
+       * man/chage.1.xml, man/Attic/chage.1, man/Attic/expiry.1, man/Attic/login.1, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/passwd.1, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/sulogin.8:
+       describe /etc/shadow in FILES section as "secure user account information".
+
+       * man/Attic/newgrp.1:
+       Reformated paragraph. s,Bourne shell,\fBbash\fR shell,
+
+       * NEWS, man/Attic/newgrp.1:
+       fix #251926, #166173, #113191 Debian bugs: explain why editing /etc/group
+       (without gshadow) doesn't permit to use newgrp.
+
+       * po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po:
+       added/fixed Plural-Forms: header entries. Run "make update-po".
+
+       * po/pl.po:
+       added Plural-Forms: header entry and updated for last change in
+       libmisc/failure.c.
+
+       * libmisc/failure.c:
+       break message text with failure login since last login.
+
+       * libmisc/failure.c:
+       Use ngettext instead of string concatenation and static number of cases.
+       Patch by Tommi Vainikainen <tvainika@cc.hut.fi>.
+
+2005-04-11  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/cs.po:
+       new translation maintainer: Miroslav Kure <kurem@debian.cz>.
+
+2005-04-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po: updated for 4.0.8.
+
+2005-04-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, src/faillog.c:
+       changed faillog records display format for allow fit in 80 columns all
+       faillog atributies.
+
+       * po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po:
+       run "make update-po". Updated pl.po.
+
+       * src/faillog.c (usage): typo (s,IDAYS,DAYS,).
+
+       * man/Attic/faillog.8, NEWS:
+       updated after rewrite faillog command for use getopt_long().
+
+       * src/faillog.c:
+       Add handle -h,--help option. Show in usage output information about
+       -t,--time option. Remove handle -p option.
+
+       * po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po:
+       run "make update-po".
+
+       * po/POTFILES.in: updated.
+
+       * man/Attic/gpasswd.1: typo (s,fB,\fB,).
+
+2005-04-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/ja/login.1:
+       updated ja man page for Debian #95213 bug (by Kenshi Muto <kmuto@debian.org>).
+
+       * src/chage.c, src/chfn.c, src/chsh.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/grpck.c, src/passwd.c, src/pwck.c, src/useradd.c, src/userdel.c, src/usermod.c, NEWS, lib/Attic/grdbm.c, lib/Attic/gsdbm.c, lib/Attic/pwdbm.c, lib/Attic/spdbm.c, lib/Makefile.am, lib/gshadow.c, lib/shadow.c:
+       next round of cleanups: removed NDBM code (unused).
+
+       * src/login.c: consilidate some !USE_PAM lines.
+
+       * src/login.c, src/login_nopam.c:
+       move bad_time_notify() and check_nologin() to src/login_nopam.c.
+
+       * lib/prototypes.h: remove not used login_desrpc() prototype.
+
+       * lib/Attic/rad64.c, lib/encrypt.c, lib/prototypes.h, lib/Makefile.am:
+       remove lib/rad64 with not used c64i() and i64c() functions.
+
+       * lib/encrypt.c:
+       remove "#ifdef SW_CRYPT .. #endif" and "#ifdef DOUBLESIZE .. #endif" unused code.
+
+       * lib/encrypt.c: remove "#ifdef MD5_CRYPT .. #endif" unused code.
+
+       * libmisc/salt.c:
+       remove prototypes for *l64a() and add #include <stdlib.h>. Remove unused
+       now code (old style random salt generator).
+
+       * src/chage.c: cleanups.
+
+       * src/chpasswd.c:
+       remove prototypes for *l64a() and add #include <stdlib.h>.
+
+       * src/login.c: remove login_fbtab() prototype.
+
+       * src/chage.c:
+       remove prototypes for a64l() and *l64a() and add #include <stdlib.h>.
+
+2005-04-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/ru/passwd.5, man/zh_CN/chfn.1, man/zh_CN/chpasswd.8, man/zh_CN/chsh.1, man/zh_CN/groupadd.8, man/zh_CN/groupdel.8, man/zh_CN/groupmod.8, man/zh_CN/useradd.8, man/zh_CN/userdel.8, man/zh_CN/usermod.8, man/zh_TW/chfn.1, man/zh_TW/chsh.1, man/zh_TW/groupadd.8, man/zh_TW/groupdel.8, man/zh_TW/groupmod.8, man/zh_TW/useradd.8, man/zh_TW/userdel.8, man/zh_TW/usermod.8, man/ko/chfn.1, man/ko/chsh.1, man/ko/groups.1, man/ko/id.1, man/ko/login.1, man/ko/passwd.5, man/ko/su.1, man/pt_BR/gpasswd.1, man/pt_BR/groupadd.8, man/pt_BR/groupdel.8, man/pt_BR/groupmod.8, man/pt_BR/shadow.5, man/ja/Attic/mkpasswd.8, man/ja/Attic/pw_auth.3, man/ja/chage.1, man/ja/chfn.1, man/ja/chpasswd.8, man/ja/chsh.1, man/ja/expiry.1, man/ja/faillog.8, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupmod.8, man/ja/groups.1, man/ja/grpck.8, man/ja/id.1, man/ja/lastlog.8, man/ja/limits.5, man/ja/login.1, man/ja/login.access.5, man/ja/login.defs.5, man/ja/newgrp.1, man/ja/passwd.1, man/ja/porttime.5, man/ja/pwck.8, man/ja/shadow.3, man/ja/su.1, man/ja/suauth.5, man/ja/sulogin.8, man/ja/useradd.8, man/ja/userdel.8, man/ja/usermod.8, man/ja/vipw.8, man/hu/chfn.1, man/hu/chsh.1, man/hu/gpasswd.1, man/hu/groups.1, man/hu/id.1, man/hu/login.1, man/hu/newgrp.1, man/hu/passwd.1, man/hu/su.1, man/id/chsh.1, man/id/login.1, man/id/useradd.8, man/it/chfn.1, man/it/chsh.1, man/it/gpasswd.1, man/it/groupadd.8, man/it/groupdel.8, man/it/groupmod.8, man/it/groups.1, man/it/grpck.8, man/it/id.1, man/it/lastlog.8, man/it/login.1, man/it/passwd.5, man/it/shadow.5, man/it/useradd.8, man/it/userdel.8, man/it/usermod.8, man/it/vipw.8, man/de/chfn.1, man/de/chsh.1, man/de/login.1, man/de/passwd.1, man/de/passwd.5, man/de/su.1, man/de/vipw.8, man/es/login.1, man/es/passwd.1, man/es/su.1, man/fr/chage.1, man/fr/chpasswd.8, man/fr/chsh.1, man/fr/faillog.5, man/fr/gpasswd.1, man/fr/groups.1, man/fr/id.1, man/fr/passwd.1, man/fr/passwd.5, man/fr/shadow.5, man/fr/su.1, man/fr/useradd.8, man/fr/userdel.8, man/fr/usermod.8, man/cs/groups.1, man/cs/id.1, man/cs/lastlog.8, man/cs/passwd.5, man/cs/shadow.5, man/cs/su.1, man/pl/Attic/mkpasswd.8, man/pl/Attic/pw_auth.3, man/pl/Attic/shadowconfig.8, man/pl/chage.1, man/pl/chfn.1, man/pl/chpasswd.8, man/pl/chsh.1, man/pl/expiry.1, man/pl/faillog.5, man/pl/faillog.8, man/pl/gpasswd.1, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmems.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/lastlog.8, man/pl/limits.5, man/pl/login.1, man/pl/login.access.5, man/pl/login.defs.5, man/pl/logoutd.8, man/pl/newgrp.1, man/pl/newusers.8, man/pl/passwd.1, man/pl/passwd.5, man/pl/porttime.5, man/pl/pwck.8, man/pl/pwconv.8, man/pl/shadow.3, man/pl/shadow.5, man/pl/su.1, man/pl/suauth.5, man/pl/sulogin.8, man/pl/useradd.8, man/pl/userdel.8, man/pl/vipw.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/expiry.1, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/grpck.8, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.defs.5, man/Attic/newgrp.1, man/Attic/passwd.1, man/Attic/porttime.5, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/usermod.8, man/Attic/vipw.8:
+       more replaces "-" by "\-" (s,\\-,-,g; s,-,\\-,g).
+
+       * man/pl/usermod.8: finish sync with english version.
+
+       * man/hu/login.1, man/pl/login.1, NEWS, man/Attic/login.1, man/de/login.1:
+       removed fragment about abilities pass enviroment variables in login prompt.
+
+       * man/Attic/gpasswd.1, man/Attic/newgrp.1:
+       fixes by Nicolas Nicolas François <nicolas.francois@centraliens.net> (not all
+       commited).
+
+2005-04-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/gshadow.5, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/limits.5:
+       replace all "-" by "\-" (s,\\-,-,; s,-,\\-,).
+
+       * man/cs/groups.1: cleanups.
+
+       * NEWS, src/su.c:
+       fixed use of SU_WHEEL_ONLY in su. Now su realy is avalaible for wheel group
+       members. Thanks to Mike Frysinger <vapier@gentoo.org> for report:
+       http://bugs.gentoo.org/show_bug.cgi?id=80345
+
+       * man/pl/Attic/chage.1.xml:
+       converted from roff using doclifter. Rewrited by hand. Probably will be
+       removed after prepare infrastructure for translate man pages using gettext
+       but temporary I need this for some experiments.
+
+       * src/login.c: remove unused #ifded LOGIN_FBTAB .. #endif code.
+
+       * configure.in, libmisc/Attic/login_access.c, libmisc/Makefile.am, src/Makefile.am, src/login.c, src/login_nopam.c:
+       move libmisc/login_access.c to src/login_mopam.c.
+       Remove using LOGIN_ACCESS #define. Now LOGIN_ACCESS is equal to !USE_PAM.
+       In src/login_nopam.c will be cumulated non-PAM specyfic login code.
+
+       * src/lastlog.c, src/login.c, src/useradd.c, src/usermod.c, libmisc/log.c:
+       cleanups: remove using #include "lastlog_.h".
+
+       * src/login.c: fixed build with PAM support disabled.
+
+       * src/login.c: remove "#ifdef HUP_MESG_FILE .. #endif" code.
+
+       * src/login.c: reindent using -l80.
+
+       * man/Attic/chage.1, man/chage.1.xml:
+       s/chage/chage command/ in DESCRIPTION.
+
+       * man/chage.1.xml:
+       converted from roff using doclifter. Rewrited by hand.
+
+       * man/Attic/chage.1, man/Attic/chfn.1, man/Attic/faillog.8, man/Attic/groupmod.8, man/Attic/pwconv.8, man/Attic/useradd.8, man/Attic/usermod.8:
+       cleanups.
+
+       * man/Attic/pwconv.8: fixed typo: s,fI,\fI,
+
+       * po/POTFILES.in: remove libmisc/login_{desrpc,krb}.c.
+
+       * lib/getdef.c, libmisc/Attic/login_desrpc.c, libmisc/Attic/login_krb.c, libmisc/Makefile.am, src/login.c, NEWS, autogen.sh, configure.in:
+       drop never finished kerberos and des_rpc support.
+
+       * man/it/chfn.1: cleanups.
+
+2005-04-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in:
+       fixed UTMP path detection (by Kelledin <kelledin@users.sf.net>).
+
+       * man/fr/chsh.1: typo.
+
+       * man/de/Makefile.am, man/de/passwd.5:
+       imported from Deutscher manpages.
+
+       * man/cs/Makefile.am, man/cs/groups.1, man/cs/lastlog.8, man/cs/su.1:
+       new files imported from Czech man-pages.
+
+       * man/pl/faillog.8, man/pl/groupmems.8, man/pl/id.1, man/pt_BR/groupadd.8, man/pt_BR/groupmod.8, man/zh_CN/groupadd.8, man/zh_CN/groupmod.8, man/zh_CN/useradd.8, man/zh_CN/usermod.8, man/zh_TW/groupadd.8, man/zh_TW/groupmod.8, man/zh_TW/useradd.8, man/zh_TW/usermod.8, man/fr/chage.1, man/fr/chpasswd.8, man/fr/passwd.1, man/hu/chsh.1, man/it/groupadd.8, man/it/groupmod.8, man/it/usermod.8, man/ja/chage.1, man/ja/chfn.1, man/ja/chsh.1, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupmod.8, man/ja/login.1, man/ja/passwd.1, man/ja/useradd.8, man/ja/usermod.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chsh.1, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/id.1, man/Attic/login.1, man/Attic/passwd.1, man/Attic/useradd.8, man/de/chfn.1, man/de/chsh.1, man/de/login.1, man/de/passwd.1:
+       cleanups: aded missing \fR.
+
+       * man/Attic/gpasswd.1, man/Attic/gshadow.5, man/Makefile.am, NEWS:
+       added new file (by Nicolas Nicolas François <nicolas.francois@centraliens.net>).
+
+2005-03-31  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/chage.1, man/pl/chfn.1, man/pl/chsh.1, man/pl/gpasswd.1:
+       added missing \fR.
+
+       * man/pl/groupmod.8: typo: s,\fI,\fR,
+
+       * man/pl/login.1, man/pl/passwd.1: cleanups: aded missing \fR.
+
+       * man/pl/sulogin.8: cleanups.
+
+       * man/pl/useradd.8: cleanups: aded missing \fR.
+
+       * man/pl/usermod.8: partialy synced with english version.
+
+       * man/Attic/usermod.8: typo.
+
+       * NEWS, man/Attic/usermod.8:
+       fixed #302388 Debian bug: added separated -o option description.
+
+       * lib/getdef.c:
+       FAILLOG_ENAB, LOGIN_STRING moved to code "#ifndef USE_PAM" dependent.
+
+       * lib/pwauth.c, lib/pwauth.h: enable pw_auth() only #ifndef USE_PAM.
+
+       * src/userdel.c, src/usermod.c, src/vipw.c, src/Attic/mkpasswd.c, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmems.c, src/groupmod.c, src/groups.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/suauth.c, src/sulogin.c, src/useradd.c, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, libmisc/Attic/login_access.c, libmisc/Attic/login_krb.c, libmisc/addgrps.c, libmisc/age.c, libmisc/chkname.h, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/copydir.c, libmisc/env.c, libmisc/failure.c, libmisc/failure.h, libmisc/getdate.h, libmisc/hushed.c, libmisc/isexpired.c, libmisc/limits.c, libmisc/loginprompt.c, libmisc/motd.c, libmisc/pam_pass.c, libmisc/pwdcheck.c, libmisc/rlogin.c, libmisc/setugid.c, libmisc/setupenv.c, libmisc/shell.c, libmisc/strtoday.c, libmisc/sulog.c, libmisc/ttytype.c, libmisc/utmp.c, libmisc/xmalloc.c, NEWS, lib/Attic/getpass.c, lib/Attic/grdbm.c, lib/Attic/grpack.c, lib/Attic/gsdbm.c, lib/Attic/gspack.c, lib/Attic/pwdbm.c, lib/Attic/pwpack.c, lib/Attic/rad64.c, lib/Attic/rcsid.h, lib/Attic/spdbm.c, lib/Attic/sppack.c, lib/commonio.c, lib/commonio.h, lib/defines.h, lib/encrypt.c, lib/faillog.h, lib/fputsx.c, lib/getdef.c, lib/getdef.h, lib/groupio.c, lib/groupio.h, lib/gshadow.c, lib/gshadow_.h, lib/lockpw.c, lib/port.c, lib/port.h, lib/prototypes.h, lib/pwauth.c, lib/pwauth.h, lib/pwio.c, lib/pwio.h, lib/sgetgrent.c, lib/sgetpwent.c, lib/sgetspent.c, lib/sgroupio.c, lib/sgroupio.h, lib/shadow.c, lib/shadowio.c, lib/shadowio.h, lib/utent.c:
+       reindent all source code using -l80.
+
+       * libmisc/.indent.pro, src/.indent.pro, lib/.indent.pro: -l80 added.
+
+       * lib/gshadow.c, NEWS:
+       rewrited group count to dynamic (by John Newbigin <jnewbigin@ict.swin.edu.au >).
+
+       * po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tl.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po:
+       run "make update-po".
+
+       * src/login.c: use allways "\n%s login: " login prompt.
+
+       * src/login.c: removed radius support (even not compiles).
+
+       * doc/Attic/README.mirrors, doc/Makefile.am: removed.
+
+       * src/userdel.c (update_user): removed next redundant closing }.
+
+       * src/userdel.c: remove using unused NO_REMOVE_MAILBOX #define.
+
+       * src/userdel.c (update_user): removed redundant closing }.
+
+2005-03-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/getdef.c:
+       move PASS_MAX_DAYS, PASS_MIN_DAYS and PASS_WARN_AGE to part PAM not dependent
+       (used in useradd, pwconv).
+
+       * configure.in, src/Makefile.am:
+       move define LOCALEDIR using AC_DEFINE_UNQUOTED() to src/Makefile.am::AM_CPPFLAGS.
+
+       * man/Attic/pwconv.8: typo in bold.
+
+       * doc/Attic/INSTALL: removed.
+
+       * doc/Attic/README.sun4, doc/Makefile.am: removed outdated README.sun4.
+
+2005-03-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po: put mine data in Last-Translator: field.
+
+       * src/newusers.c:
+       use the same as in useradd default UMASK (022 instead 077) if diffrent not
+       defined in login.defs.
+
+       * NEWS, libmisc/copydir.c:
+       added SELinux changes (based on Fedora patch).
+
+       * NEWS: typo.
+
+       * man/Attic/login.defs.5: typo in bold.
+
+       * src/chfn.c, src/chsh.c, lib/getdef.c:
+       move CHFN_AUTH, CHSH_AUTH variables from login.defs to part !USE_PAM dependent.
+       Use "auth required pam_unix.so" in /etc/pam.d/{chfn,chsh} for force enter password
+       on use chfn/chsh.
+
+       * lib/getdef.c: added CHSH_AUTH variable in def_table[] table.
+
+       * src/chsh.c: s/CHFN_AUTH/CHSH_AUTH/
+
+       * man/Attic/shadow.5, man/Attic/passwd.5:
+       add more accurate information about what contains field with encrypted password in
+       each passwd/shadow line (reported by Mike Brodbelt).
+
+       * autogen.sh: reorder.
+
+       * lib/getdef.c:
+       CRACKLIB_DICTPATH, ENV_HZ, ENV_PATH, ENV_ROOTPATH, ENV_SUPATH, ENV_TZ,
+       ENVIRON_FILE, FTMP_FILE, ISSUE_FILE, LASTLOG_ENAB, MAIL_CHECK_ENAB, MAIL_DIR,
+       MAIL_FILE, MD5_CRYPT_ENAB, MOTD_FILE, NOLOGINS_FILE, OBSCURE_CHECKS_ENAB,
+       PASS_ALWAYS_WARN, PASS_CHANGE_TRIES, PASS_MAX_DAYS, PASS_MAX_LEN, PASS_MIN_DAYS,
+       PASS_MIN_LEN, PASS_WARN_AGE, PORTTIME_CHECKS_ENAB, SU_WHEEL_ONLY, QMAIL_DIR,
+       QUOTAS_ENAB, ULIMIT variables moved to code "#ifndef USE_PAM" dependent.
+
+       * configure.in:
+       fix importand typo: added missing ",". Now LOGIN_ACCESS realy is defined only
+       when PAM is not enabled.
+
+       * libmisc/obscure.c, libmisc/limits.c:
+       all functions from this file are "#ifndef USE_PAM" dependent.
+
+       * libmisc/setugid.c (change_uid):
+       removed dead code depndent on "#ifdef BSD".
+
+       * libmisc/ttytype.c (ttytype):
+       removed dead code depend on "defined(SUN) || defined(BSD) || defined(SUN4)".
+
+       * src/login.c (setup_tty): remove dead code.
+
+       * libmisc/rlogin.c:
+       fix compilation warning: replace #include <unistd.h> by #include <netdb.h>
+       where ruserok() is declared.
+
+2005-03-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po: kill one fuzzy entry.
+
+2005-03-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, libmisc/log.c:
+       fixed create lastlog entry fo users never loged in on non-PAM
+       variant of login (fix by <oracular@ziplip.com>).
+
+2005-03-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, etc/Attic/login.defs.linux, etc/login.defs, lib/getdef.c, man/pl/login.defs.5:
+       remove handle login.defs::NOLOGIN_STR (never used).
+
+2005-02-25  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/shadow.5:
+       added missing '\&' in line starting with '\.', which causes groff to skip
+       it entirely (fix submited by Danilo Piazzalunga <danilopiazza@libero.it>).
+
+       * TODO: cleanups.
+
+2005-02-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/useradd.c, NEWS:
+       useradd: fixes a potential security problem when mailbox is created in
+       useradd.
+       Patch and comment by Koblinger Egmont <egmont@uhulinux.hu>:
+       Only two arguments are passed to the open() call though it expects three
+       because O_CREAT is present. Hence the permission of the file first becomes
+       some random garbage found on the stack, and an attacker can perhaps open
+       this file and hold it open for reading or writing before the proper
+       fchmod() is executed. (Actually, we could also pass the final "mode" to
+       the open() call and then save the consequent fchmod().)
+
+2005-02-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/LINGUAS, po/tl.po:
+       added tl translation (fron Debian resources).
+
+2005-02-14  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/chage.c, src/chfn.c, src/chsh.c, src/passwd.c:
+       SELinux changes: added changes in chage, chfn, chsh, passwd for allow
+       construct more grained user password/accuunt properties on SELinux
+       policies level. Patch originally based on RH changes (submited by Chris
+       PeBenito <pebenito@gentoo.org>)
+
+2005-02-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fr.po, NEWS:
+       updated translation (by Jean-Luc Coulon <jean-luc.coulon@wanadoo.fr>) from
+       Debian resources.
+
+2005-01-26  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in: open work on 4.0.8.
+
+2005-01-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/zh_TW.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po:
+       "make update-po".
+
+2005-01-21  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, po/it.po:
+       updated it translations (by Danilo Piazzalunga <danilopiazza@libero.it>).
+
+2005-01-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * libmisc/rlogin.c: remove ruserok() prototyle and #include <unistd.h>.
+
+       * lib/getdef.c: remove strtol() prototype (it comes with <stdlib.h>).
+
+       * po/da.po, po/es.po, po/nl.po, po/pl.po, po/pt.po:
+       "Project-Id-Version: shadow 4.0.7".
+
+       * NEWS, po/fi.po:
+       updated fi translation (by Tommi Vainikainen <thv+debian@iki.fi>).
+
+2005-01-18  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/da.po, po/es.po, po/pl.po, po/pt.po: kill fuzzy entries.
+
+       * po/nl.po, NEWS:
+       updated nl translations (by cobaco (aka Bart Cornelis)" <cobaco@linux.be>).
+
+       * lib/Makefile.am (libshadow_la_LIBADD): removed snprintf.h.
+
+       * NEWS, po/LINGUAS, po/zh_TW.po:
+       added zh_TW translation (from Debian resources).
+
+       * po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po:
+       "make update-po".
+
+       * src/Attic/mkpasswd.c, src/passwd.c, src/userdel.c, src/chage.c, src/chfn.c, src/chsh.c, src/gpasswd.c, src/groups.c, src/login.c:
+       "less means better" added fixes which makes english texts more consistent
+       especially with capitalization issues. Based on fixes by Tommi Vainikainen
+       <thv+debian@iki.fi> (make all text begining from lower case .. not upper).
+       This patch cuts i18n entries in each po/*po file from 420 to 402.
+
+2005-01-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: added pt to updated translations.
+
+       * lib/defines.h: reverte last change (mistake).
+
+       * po/pt.po:
+       updated translation by Miguel Figueiredo <elmig@debianpt.org>.
+
+2005-01-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: typo.
+
+       * NEWS: update da, es and pl (100%) translations.
+
+       * po/pl.po: finish translations.
+
+       * po/da.po: updated translations by Claus Hindsgaul <claus_h@image.dk>.
+
+       * NEWS, TODO: Typos found by Claus Hindsgaul <claus_h@image.dk>.
+
+       * po/es.po: Updates from Ruben Porras <nahoo@inicia.es>.
+
+       * lib/defines.h: - remove usong shadow_.h.
+
+       * po/pl.po: kill fuzzy.
+
+       * NEWS, lib/Attic/grent.c, lib/Attic/lastlog_.h, lib/Attic/md5.c, lib/Attic/md5.h, lib/Attic/md5crypt.c, lib/Attic/mkdir.c, lib/Attic/putgrent.c, lib/Attic/putpwent.c, lib/Attic/putspent.c, lib/Attic/pwent.c, lib/Attic/rename.c, lib/Attic/rmdir.c, lib/Attic/shadow_.h, lib/Attic/snprintf.c, lib/Attic/snprintf.h, lib/Attic/strcasecmp.c, lib/Attic/strdup.c, lib/Attic/strerror.c, lib/Attic/strstr.c, lib/Makefile.am:
+       remove unused now files in lib/ directory.
+
+       * po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/POTFILES.in, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po:
+       Now correctly shadow passes "make distcheck".
+
+       * NEWS: typo.
+
+2005-01-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/faillog.c, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sk.po, po/sq.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, NEWS:
+       switch faillog ro use getopt_long().
+
+       * etc/pam.d/su: aded line with "session required pam_env.so".
+
+2004-12-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/de/Makefile.am, man/de/vigr.8, man/de/vipw.8, NEWS:
+       added de vigr(8), vipw(8) man pages (from Debian resources).
+
+2004-12-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/LINGUAS, po/ro.po, po/sq.po, NEWS:
+       added ro, sq translations (from Debian resources).
+
+2004-12-20  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in:
+       added checing is fseeko() function is avalaibabe in system: added fseeko to
+       AC_CHECK_FUNCS parameters.
+
+       * lib/Makefile.am:
+       fixed warning message about incorrect try linking non-PIC code with shared
+       library: removed $(top_builddir)/libmisc/libmisc.a from libshadow_la_LIBADD.
+
+       * NEWS:
+       - final entry about fixed large file support in lastlog and faillog.
+
+       * src/vipw.c, lib/Attic/pwent.c, lib/Attic/grent.c:
+       use fseeko() instead fseek(). This not realuy neccessary because in this
+       cases fseek() was used for move to begin of file. This only for minimize
+       external functions count.
+
+       * src/faillog.c:
+       fixes for allow operate on large files by faillog: use fseeko() instead
+       fseek().
+
+       * src/lastlog.c:
+       fixes for allow operate lastlog on large files: use fseeko() instead fseek()
+       and do not casrt file offsets to unsigned long (based on large-file patch
+       from FC).
+
+       * src/faillog.c: fixed typo in usage().
+
+2004-12-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/newgrp.1: fixed typo in bold macro.
+
+2004-12-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/chpasswd.8: remove bold from NAZWA section.
+
+2004-12-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/faillog.c: remove using Prog variable.
+
+       * configure.in, NEWS:
+       fixed large file support: added AC_SYS_LARGEFILE macro to autoconf.
+
+       * man/Attic/groupmod.8, man/pl/groupmod.8: separate OPTIONS section.
+
+       * man/pl/chpasswd.8: sync with english version.
+
+       * man/Attic/chpasswd.8:
+       bold "chpasswd" command name in CAVEATS section.
+
+       * man/Attic/chpasswd.8: s/protect/protected/
+
+       * man/pl/lastlog.8: cleanups.
+
+       * man/Attic/chpasswd.8, man/Attic/lastlog.8, man/Attic/newusers.8:
+       remove bold from NAME section.
+
+       * man/it/groupadd.8, man/it/useradd.8: separate OPZIONI section.
+
+       * man/pl/groupmems.8: fixes in OPCJE section.
+
+       * man/Attic/chpasswd.8: more cleanups.
+
+2004-12-11  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/chage.1, man/Attic/chfn.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.5, man/Attic/pw_auth.3, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadowconfig.8, man/Attic/suauth.5, man/Attic/useradd.8:
+       Fixed varoiuse typos and misspeling based partialy on patch from Bug#141322
+       from Debian (submited by Christian Perrier <bubulle@debian.org>).
+
+       * man/Attic/chpasswd.8: more cleanups.
+
+       * man/pl/faillog.8, man/Attic/faillog.8, man/ja/faillog.8:
+       remove from OPTIONS section information about avalaibability on some systems
+       faillog database in other location thad listed in FILES section.
+
+       * man/Attic/chpasswd.8: updated.
+
+       * man/fr/faillog.5:
+       fixed FICHIERS secttion: corrected change to italic on /var/log/faillog.
+
+       * src/faillog.c:
+       move main() to the end of file and reorder rest functions. Now declararion
+       finction prototypes can be removed.
+
+2004-12-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: updated.
+
+       * man/pl/lastlog.8: synced with current english version.
+
+       * man/Attic/lastlog.8: use the same style as in chpasswd(8).
+
+       * po/uk.po, po/zh_CN.po, po/tr.po, po/sv.po, po/ru.po, po/sk.po, po/pt_BR.po, po/pt.po, po/pl.po, po/nn.po, po/nl.po, po/nb.po, po/ko.po, po/ja.po, po/he.po, po/id.po, po/it.po, po/fi.po, po/fr.po, po/es.po, po/eu.po, po/el.po, po/da.po, po/de.po, po/cs.po, po/ca.po, po/bs.po:
+       "make update-po" after rewrite lastlog.
+
+       * src/lastlog.c: Rewrite for use the same style as in chpasswd.c.
+       Move open lastlog file after commadline option parsing so now --help option
+       can be used by user without read access to lastlog file.
+
+       * src/chpasswd.c:
+       s/display this help and exit/display this help message and exit/ in ussage()
+       output.
+
+       * po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po:
+       "make update-po".
+
+       * src/chpasswd.c:
+       Added handle -h|--help option. Improved and updated ussage() output.
+
+2004-12-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/tr.po, po/uk.po, po/zh_CN.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/da.po, po/de.po, po/el.po, po/bs.po, po/ca.po, po/cs.po:
+       "make update-po" and resolve fuzzy with last change in src/chpasswd.c.
+
+       * src/chpasswd.c, NEWS:
+       switch chpasswd to use getopt_long() and adds a --md5 option
+       (by Ian Gulliver <ian@penguinhosting.net>).
+
+       * NEWS, configure.in: start work on 4.0.7.
+
+2004-11-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: cleanups.
+
+       * po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/bs.po, po/ca.po, po/cs.po, po/da.po:
+       removed not used translations.
+
+       * NEWS, src/su.c:
+       fix adding of pam_env env variables to enviroment (Martin Schlemmer <azarah@nosferatu.za.org>).
+
+       * NEWS, configure.in:
+       fixed filling MAIL_SPOOL_DIR and MAIL_SPOOL_FILE variables which was allways
+       empty (Gregorio Guidi <g.guidi@sns.it>)
+
+       * NEWS: updated.
+
+       * src/useradd.c, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po:
+       do not translate variable names from /etc/default/useradd during "useradd -D".
+
+2004-11-04  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/zh_CN/groupadd.8, man/zh_CN/groupmod.8, man/zh_CN/useradd.8, man/zh_CN/usermod.8, man/zh_TW/groupadd.8, man/zh_TW/groupmod.8, man/zh_TW/useradd.8, man/zh_TW/usermod.8, man/it/groupadd.8, man/it/groupmod.8, man/it/useradd.8, man/it/usermod.8, man/ja/groupadd.8, man/ja/groupmod.8, man/ja/useradd.8, man/ja/usermod.8, man/pl/groupadd.8, man/pl/groupmod.8, man/pl/useradd.8, man/pl/usermod.8, man/pt_BR/groupadd.8, man/pt_BR/groupmod.8, man/Attic/groupadd.8, man/Attic/groupmod.8, man/Attic/useradd.8, man/fr/useradd.8, man/fr/usermod.8, man/id/useradd.8:
+       correction: groups/users with gid/uid 0 and 999 are reserved for system accounts.
+
+       * man/zh_CN/groupmod.8, man/zh_CN/useradd.8, man/zh_CN/usermod.8, man/zh_TW/groupmod.8, man/zh_TW/useradd.8, man/zh_TW/usermod.8, man/id/useradd.8, man/it/groupadd.8, man/it/groupmod.8, man/it/useradd.8, man/it/usermod.8, man/ja/groupadd.8, man/ja/groupmod.8, man/ja/useradd.8, man/ja/usermod.8, man/pl/groupadd.8, man/pl/groupmod.8, man/pl/useradd.8, man/pl/usermod.8, man/pt_BR/groupmod.8, man/Attic/groupadd.8, man/Attic/groupmod.8, man/Attic/useradd.8, man/fr/useradd.8, man/fr/usermod.8:
+       zgroups/users with gid/uid 0 and 499 are typically reserved for system accounts.
+
+2004-11-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/Attic/mkpasswd.8, man/pl/chage.1, man/pl/chsh.1, man/pl/faillog.8, man/pl/groupadd.8, man/pl/groupmems.8, man/pl/groupmod.8, man/pl/lastlog.8, man/pl/useradd.8, man/pl/userdel.8, man/pl/usermod.8, man/Attic/chage.1, man/Attic/chsh.1, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupmems.8, man/Attic/lastlog.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8:
+       separated OPTIONS section.
+
+       * lib/commonio.c: reverte last change.
+
+       * libmisc/pwdcheck.c:
+       one word fix .. ommited "else" was removed. Now security bug which allow
+       unauthorized account properties modification is realy closed.
+
+2004-10-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/commonio.c:
+       add matchpathcon to create the files correctly when they do not exist (based
+       on patch from FC).
+
+       * man/Attic/passwd.1: fixed two typos ("/" in incorrect place).
+
+2004-10-27  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * etc/pam.d/useradd: - added header
+
+       * etc/pam.d/chfn, etc/pam.d/chsh, etc/pam.d/userdel: - fixed header
+
+2004-10-27  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * etc/pam.d/chfn, etc/pam.d/chsh, etc/pam.d/userdel:
+       added missing template/example PAM service config files for chfn, chsh, userdel.
+
+       * NEWS, configure.in: start 4.0.6.
+
+2004-10-26  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/Attic/adduser.8, man/pl/Makefile.am, man/Attic/adduser.8, man/Makefile.am, man/fr/Attic/adduser.8, man/fr/Makefile.am, man/id/Attic/adduser.8, man/id/Makefile.am, man/it/Attic/adduser.8, man/it/Makefile.am, man/ja/Attic/adduser.8, man/ja/Makefile.am, NEWS:
+       remove adduser(8) roff include man page to useradd(8).
+
+       * lib/Makefile.am: more fixes for non-inst libmisc.
+
+       * libmisc/Makefile.am, src/Makefile.am, NEWS:
+       change libmisc to private static library.
+
+       * etc/pam.d/Makefile.am: typo.
+
+2004-10-24  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * po/pl.po: - more translation/formatting fixes
+
+       * po/pl.po: - updated translation
+
+       * po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/bs.po:
+       - make update-po, updated usage() translation
+
+       * src/useradd.c: - syntax fix for useradd in usage()
+
+       * po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po:
+       - usage() formatting and other fixes
+
+       * po/fi.po: - proper UTF
+
+       * po/pl.po: - pl translation fixes/updates by Jakub Bogusz
+
+2004-10-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * etc/pam.d/chage, etc/pam.d/chpasswd, etc/pam.d/groupadd, etc/pam.d/groupdel, etc/pam.d/groupmod, etc/pam.d/newusers, etc/pam.d/useradd, etc/pam.d/usermod:
+       use default path to PAM modules.
+
+       * etc/pam.d/Attic/shadow, etc/pam.d/Makefile.am, etc/pam.d/chage, etc/pam.d/chpasswd, etc/pam.d/groupadd, etc/pam.d/groupdel, etc/pam.d/groupmod, etc/pam.d/login, etc/pam.d/newusers, etc/pam.d/usermod:
+       Remove shadow PAM config file. Added PAM config files for: chage, chpasswd,
+       groupadd, groupdel, groupmod, login, newusers.
+
+       * po/zh_CN.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po:
+       "make update-po".
+
+       * configure.in: reverte previous incorrect commit.
+
+       * NEWS, src/su.c:
+       add pam_open_session() support. If builded without PAM support
+       propagate $DISPLAY and $XAUTHORITY enviroment variables.
+       Based on http://www.gentoo.org/cgi-bin/viewcvs.cgi/sys-apps/shadow/files/shadow-4.0.4.1-su-pam_open_session.patch?rev=1.1
+
+2004-10-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in: cleanups.
+
+       * lib/defines.h:
+       define syslog() depending on ENABLE_NLS (not on HAVE_SETLOCALE).
+
+2004-10-23  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * man/fr/Makefile.am: - killed non-existent manpage
+
+2004-10-18  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * libmisc/copydir.c, NEWS:
+       when placing symlinks into /etc/skel copy_tree of libmisc/copydir.c will
+       properly create the symlink in the destination directory but not change the
+       ownership to the target user/group. This makes httpd Option
+       SymlinkIfOwnerMatch break for default weg pages including symlinks placed
+       into /etc/skel/public_html for example.
+       http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=66819
+
+2004-10-11  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/Makefile.am:
+       seems I foud CorrectWay(tm) for add some symlinks on install target.
+
+       * po/pl.po: more fixes.
+
+       * po/pl.po: added missing \n.
+
+       * src/chage.c, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, NEWS, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po:
+       more verbose/human readable -l output. This output is much more beter for
+       send directly via email for each users as message with account status (for
+       example as message with warning about account/password expiration).
+
+       * configure.in: start prepare for 4.0.5.
+
+       * src/Makefile.am, libmisc/Makefile.am, lib/Makefile.am, configure.in:
+       move LOCALEDIR to autoheader variables. Remove redefining DEFS in
+       Makefile.am (not neccessary now).
+
+       * src/chage.c, src/chpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/grpck.c, src/logoutd.c, src/newusers.c, src/pwck.c, src/useradd.c, src/userdel.c, src/usermod.c, NEWS:
+       applied OWL shadow-4.0.4.1-owl-pam-auth.diff patch by Solar Designer
+       <solar@openwall.com>:
+         Moved the PAM authentication in user management commands after
+         command-line parsing, made it use separate service names for each command.
+         Use constant strings rather than argv[0] for syslog ident in the user
+         management commands.
+
+       * man/Attic/useradd.8:
+       reword the useradd manpage a little to make it more clear. Fix from:
+       http://www.gentoo.org/cgi-bin/viewcvs.cgi/sys-apps/shadow/files/shadow-4.0.4.1-useradd-manpage-update.patch?rev=1.1
+
+       * configure.in: added libselinux detection.
+
+       * lib/Makefile.am, lib/commonio.c, lib/commonio.h, NEWS, autogen.sh, configure.in:
+       added SELinux support (basing on patch from Gentoo).
+
+       * man/fr/Makefile.am (man_MANS): added getspnam.3.
+
+2004-10-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pt.po, po/pt_BR.po, po/ru.po, po/sk.po, po/sv.po, po/tr.po, po/uk.po, po/zh_CN.po, po/bs.po, po/ca.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, src/groupadd.c, src/groupmod.c:
+       English grammar fix: s/is a not a valid group name/is not a valid group name/
+       (pointed by Mike Frysinger <vapier@gentoo.org>).
+
+2004-10-08  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/userdel.c:
+       When removing a user with userdel, userdel always exits 1 (fixed).
+       Based on http://bugs.gentoo.org/show_bug.cgi?id=66687.
+
+2004-08-21  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in:
+       Use AC_SEARCH_LIBS() for inet_ntoa(), socket(), gethostbyname() probing (instead AC_CHECK_FUNC()).
+
+2004-08-18  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Makefile.am: shadow(3) man page moved to man_MANS.
+
+       * libmisc/ttytype.c: Removed getenv() prototype (it is in <stdlib.h>).
+
+       * src/Attic/mkpasswd.c:
+       Removed fgetsx() prototype (it is in lib/prototypes.h).
+
+       * man/it/vigr.8: Fixed typo (s/wipw/vipw/).
+
+2004-08-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: Typo.
+
+       * po/tr.po, po/uk.po, po/zh_CN.po, po/bs.po, po/cs.po, po/de.po, po/el.po, po/es.po, po/eu.po, po/fi.po, po/fr.po, po/he.po, po/id.po, po/it.po, po/ja.po, po/ko.po, po/nb.po, po/nn.po, po/pl.po, po/pt.po, po/ru.po, po/sk.po, po/sv.po:
+       Run "make update-po".
+
+       * po/ca.po, po/da.po, po/nl.po, po/pt_BR.po: Converted to UTF-8.
+
+       * po/LINGUAS: Typo.
+
+       * po/nb.po, po/nl.po, po/nn.po, po/pt.po, po/pt_BR.po, po/tr.po, po/zh_CN.po, NEWS, po/LINGUAS, po/bs.po, po/ca.po, po/da.po, po/eu.po, po/he.po, po/id.po:
+       New translations: bs, ca, da, eu, he, id, nb, nl, nn, pt, pt_BR, tr,
+       zh_CN (stolen froM Debian)
+
+       * man/Attic/grpck.8, man/Attic/mkpasswd.8, man/Attic/pwck.8, man/pl/Attic/mkpasswd.8, man/pl/grpck.8, man/pl/pwck.8:
+       Corrected section number.
+
+2004-08-04  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/zh_TW/chfn.1, man/zh_TW/chsh.1, man/zh_TW/groupadd.8, man/id/chsh.1, man/id/login.1, man/it/chfn.1, man/pl/chage.1, man/pl/groupadd.8, man/pl/groupmems.8, man/pl/lastlog.8, man/pl/login.1, man/pt_BR/groupadd.8, man/zh_CN/chfn.1, man/zh_CN/chsh.1, man/de/login.1, man/de/su.1, man/fr/chsh.1, man/fr/passwd.1, man/fr/usermod.8, man/hu/chfn.1, man/Attic/chage.1, man/Attic/groupadd.8, man/Attic/groupmems.8, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/usermod.8:
+       Options description in alphabetical order.
+
+       * NEWS, src/login.c:
+       Applied 036_pam_access_with_preauth.patch Debian patch submited by Bjorn
+       Torkelsson <Bjorn.Torkelsson@hpc2n.umu.se>: add support for PAM account
+       management to restrict access using pam_access when login is invoked with -f.
+
+2004-06-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/getspnam.3: added roff link to shadow(3).
+
+       * man/Makefile.am (man_MANS): added getspnam.3.
+
+2004-06-03  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, lib/commonio.c, lib/getdef.c, src/vipw.c:
+       Applied OWL shadow-4.0.4.1-owl-check-reads.diff patch by Solar Designer.
+       Add checking for read errors in commonio and vipw/vigr (not doing so could
+       result in data loss when the records are written back).
+
+       * NEWS: Add note about apply shadow-4.0.4.1-owl-tmp.diff OWL patch.
+
+       * src/useradd.c, configure.in:
+       Remove looking for mkstemp() prototype and allways use mkstemp() (removed
+       using mktemp if mkstemp() not found).
+       Partialy based on tmp OWL patch by Solar Designer <solar@openwall.com>.
+
+       * NEWS, libmisc/pwdcheck.c:
+       Fixed securirty bug which allow unauthorized account properties modification.
+       Affected tools: chfn and chsh.
+       Bug was discovered by Martin Schulze <joey@infodrom.org>.
+
+2004-05-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: typo.
+
+       * NEWS, po/LINGUAS, po/it.po:
+       added it translation (by Danilo Piazzalunga <danilopiazza@libero.it>).
+
+2004-05-18  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: typos.
+
+       * po/sk.po: updated (by Peter Mann <Peter.Mann@tuke.sk>).
+
+2004-05-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/sk.po: run "make update-po".
+
+       * NEWS, po/LINGUAS, po/sk.po:
+       added sk translation (by Mann <Peter.Mann@tuke.sk>, submited by Christian
+       Perrier <bubulle@kheops.frmug.org>).
+
+2004-05-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in:
+       Use autoconf cache variables for file and directory location tests (by
+       Maciej W. Rozycki  <macro@ds2.pg.gda.pl>).
+
+2004-05-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/passwd.5:
+       Correct path directory delimiters (by Maciej W. Rozycki <macro@ds2.pg.gda.pl>).
+
+       * libmisc/xmalloc.c (malloc):
+       Remove the declaration (by Maciej W. Rozycki <macro@ds2.pg.gda.pl>).
+
+2004-04-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/login.c, NEWS:
+       Fixed handle -f option: now it works correctly without specify "-h
+       <host>" if open login session localy is required (thanks for help
+       investigate bug for Krzysztof Kotlenga).
+
+       * po/es.po: Updated (by Ruben Porras <nahoo82@telefonica.net>).
+
+2004-04-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/cs.po, po/de.po, po/el.po, po/fi.po, po/fr.po, po/ja.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+       Run "update-po".
+
+2004-04-22  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/es.po: Updated to current (by run "update-po").
+
+       * po/es.po: Converted to utf-8.
+
+       * po/LINGUAS: Added es.
+
+       * po/es.po, NEWS:
+       Added es translation (by Ruben Porras <nahoo82@telefonica.net>).
+
+2004-04-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/ko.po, NEWS:
+       Updated ko translations (by Changwoo Ryu <cwryu@debian.org>).
+
+2004-04-02  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fi.po: iconv -f iso8859-9 -t utf8
+
+2004-03-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * libmisc/age.c:
+       Use endsgent() conditionaly depending on SHADOWGRP (fix submited by Gabor Z.
+       Papp <gzp@papp.hu>).
+
+       * po/LINGUAS, po/fi.po, NEWS:
+       Added fi translation (by Tommi Vainikainen <thv@iki.fi>).
+
+       * README: Fixed shadow and shadow-commit lists on-line archives URLs.
+
+2004-01-14  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in, man/fr/Makefile.am, man/hu/Makefile.am, man/it/Makefile.am:
+       New version 4.0.4.1
+       bug fixes in automake files for generate correct tar ball on "make dist":
+       added midsiing "EXTRA_DIST = $(man_MANS)" in man/*/Makefile.am.
+
+       * man/ko/Makefile.am: New version 4.0.4.1
+       bug fixes in automake files for generate correct tar ball on "make dist":
+       added missing "EXTRA_DIST = $(man_MANS)" in man/*/Makefile.am.
+
+       * man/de/Makefile.am, man/es/Makefile.am: New version 4.0.4.1
+       bug fixes in automake files for generate correct tar ball on "make dist":
+       added midsiing "EXTRA_DIST = $(man_MANS)" in man/*/Makefile.am.
+
+       * configure.in: Fixed checking is avalaible st_rdev in struct stat.
+
+2004-01-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po: Typo.
+
+       * man/pl/useradd.8: Cleanups in SYNOPSIS.
+
+2004-01-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po: Cleanups.
+
+2004-01-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in: Cleanups after autoupdate.
+
+2004-01-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/groupadd.c, po/sv.po, po/uk.po, po/ru.po, po/ko.po, po/pl.po, po/fr.po, po/ja.po, po/el.po, po/cs.po, po/de.po, man/zh_TW/groupadd.8, man/zh_CN/groupadd.8, man/pt_BR/groupadd.8, man/pl/groupadd.8, man/ja/groupadd.8, man/it/groupadd.8, man/Attic/groupadd.8, NEWS:
+       Added missing information about -f options in groupadd usage mesage (document
+       this also in man page).
+
+2003-12-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/Attic/lastlog_.h, libmisc/log.c, libmisc/utmp.c, src/lastlog.c, src/login.c:
+       More time() or gettimeofday() prevention overwrite memory on 64bit arch
+       (partialy based on patch from MDK).
+
+       * po/sv.po, po/uk.po, po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po:
+       Post remove TCFS support "make update-po".
+
+       * man/Makefile.am: Removed getspnam.3 from EXTRA_DIST.
+
+       * po/POTFILES.in: Removed lib/tcfsio.c.
+
+       * lib/Attic/tcfsio.c, lib/Attic/tcfsio.h, lib/Makefile.am, src/passwd.c, src/userdel.c, NEWS, configure.in, doc/Attic/README.pam:
+       Removed TCFS support (tcfs is dead).
+
+       * configure.in:
+       Added using AM_MAINTAINER_MODE. AC_INIT without parameters.
+
+       * Attic/acconfig.h, configure.in:
+       Cleanups on autoheadres level: use AC_DEFINE(VAR, VAL, [Comment]) for
+       USE_PAM, HAVE_TCFS and TCFS_GDBM_SUPPORT.
+
+       * src/newusers.c, src/useradd.c, Attic/acconfig.h, autogen.sh, lib/Attic/pwpack.c, NEWS:
+       Remove all old BSD_QUOTA dependent code.
+
+2003-12-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/Makefile.am, libmisc/Makefile.am, src/Makefile.am:
+       Removed -I$(top_srcdir) from INCLUDES (isn't neccessary becaus this is in
+       DEFAULT_INCLUDES) - slightly shorter compile output.
+
+       * Makefile.am, configure.in:
+       Added using AM_GNU_GETTEXT([external]) - removed intl SUBDIRS.
+       Added locale.h to AC_CHECK_HEADERS() - lib/defines.h have part which depends
+       on HAVE_LOCALE_H.
+
+       * lib/nscd.h: Added missing newline at end of file.
+
+       * Attic/acconfig.h: Remove unused (#un)defines.
+
+       * autogen.sh: Typo.
+
+       * autogen.sh: Much more simpler script - use autoreconf.
+
+       * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+       "make update-po".
+
+2003-12-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/LINGUAS: Languages list for gettext 1.12.x.
+
+2003-10-26  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po: Kill fuzzy entries.
+
+2003-10-21  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/usermod.8:
+       Typo: missing "." on end of sentence (submited by Stepan Kasal <kasal@ucw.cz>).
+
+2003-09-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po, po/cs.po, po/de.po, po/el.po, NEWS:
+       convert all po/*.po files to utf-8.
+
+2003-09-05  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * po/ru.po: - fixed header
+
+2003-07-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po, po/ru.po, po/sv.po, po/uk.po, libmisc/pam_pass.c, po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po:
+       Otput "passwd: password updated successfully\n" message on successfull
+       password change (based on Debian changes).
+
+       * src/newgrp.c: Remove work around for unsecure gettext.
+
+2003-06-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/useradd.c, src/usermod.c:
+       Added initializing memory in variables when get_groups() function is not called,
+       and memory allocated for user_groups is not initialized (in both useradd and
+       usermod when -G options is used and in usermod when -l option is used).
+       That causing segfaults sometimes.
+       This fix is importand but not critical because usermod and usermod aren't suid
+       root.
+       Problem reported and fixed by Alexey Voinov <voins@altlinux.ru>.
+
+2003-06-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/login.1: Fixed FILES section.
+
+       * src/chfn.c, src/chpasswd.c, src/chsh.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/grpconv.c, src/grpunconv.c, src/id.c, src/login.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/suauth.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c:
+       Indented.
+
+       * src/chage.c: Move *flg variables to global.
+
+       * Attic/acconfig.h: Comment for USG.
+
+2003-05-14  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/de/chfn.1, man/de/login.1:
+       Fixed section name (s/NAME/BEZEICHNUNG/).
+
+       * man/de/chfn.1, man/de/chsh.1: Sync FILES section with en version.
+
+       * man/Attic/login.1: Typo (s/avr/var/).
+
+       * man/de/login.1: Sync FILES section with en man version.
+
+       * man/de/chfn.1, man/de/chsh.1, man/de/login.1: Remove ^M from EOL.
+
+       * man/de/login.1, man/de/Makefile.am, man/de/chfn.1, man/de/chsh.1, NEWS:
+       Next round updates from Josef Spillner <josef@ggzgamingzone.org>: update
+       chsh(1), login(1) and added new chfn(1) german man pages.
+
+       * NEWS: Added info about remove d_passwd(5), dialups(5) man pags.
+
+2003-05-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, TODO, src/chfn.c, src/chpasswd.c, src/chsh.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/passwd.c, src/pwunconv.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c:
+       One TODO entry gone: fix nscd flushing databases on change (use
+       per service flushing method instead HUPing nscd process).
+
+       * lib/Makefile.am, lib/commonio.c, lib/nscd.c, lib/nscd.h, libmisc/Attic/nscd.c, libmisc/Attic/nscd.h, libmisc/Makefile.am:
+       Move nscd.{c,h} from libmisc/ to lib/.
+       Fix warning about implicit declaration of function `nscd_flush_cache' in lib/commonio.c.
+
+       * lib/pwauth.h: Fix pw_auth() prototype.
+
+       * libmisc/Attic/nscd.c, libmisc/Attic/nscd.h, libmisc/Makefile.am:
+       Added header file for nscd communication functions.
+
+       * libmisc/chkname.c (good_name):
+       fixed warning about comparison between pointer and integer.
+
+       * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+       "make update-po".
+
+       * src/useradd.c (main):
+       chain create_mail() and small fix in usage message.
+
+       * src/userdel.c: Removed AUTH_METHODS code.
+
+       * lib/pwauth.c: Fixed pw_auth() prototype.
+
+       * src/sulogin.c, src/usermod.c: Removed AUTH_METHODS code.
+
+       * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+       "make update-po".
+
+       * src/useradd.c: Indent.
+
+       * man/ja/Attic/pwauth.8, man/ja/Makefile.am, man/pl/Attic/pwauth.8, man/pl/Makefile.am, src/passwd.c, src/useradd.c, NEWS, lib/pwauth.c, man/Attic/pwauth.8, man/Makefile.am:
+       Cleanups continuations: removed old AUTH_METHODS dependent code,
+       removed also pwauth(8) man page.
+
+       * man/pl/Makefile.am (man_MANS): remove d_passwd.5 man page.
+
+       * src/useradd.c, src/usermod.c, po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+       Cleanups in usage messages.
+
+       * src/newgrp.c: Cleanups in comments.
+
+       * po/uk.po, po/sv.po, po/ru.po, po/pl.po, po/ko.po, po/ja.po, po/fr.po, po/el.po, po/de.po, po/cs.po:
+       "make update-po".
+
+       * lib/getdef.c (main): remove gettextize error messages from test code.
+
+       * NEWS: Cleanups.
+
+2003-05-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/useradd.c, man/pl/useradd.8, po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po, NEWS, TODO, etc/useradd, man/Attic/useradd.8:
+       Added handle by useradd /etc/defaults/useradd::CREATE_MAIL_SPOOL={yes|no}.
+       Now on adding user account can be added also created empty user mail
+       spool. Curent code handle only mailbox.
+       TODO: add handle create user mail spool in maildir format.
+
+       * TODO: Typo.
+
+       * src/chage.c (usage): fix missing ")".
+       (main): updated commented description.
+
+       * src/useradd.c: Indent.
+
+       * man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8:
+       Minor cleanups.
+
+       * man/Attic/chage.1, man/pl/chage.1:
+       Rewrite for use claissic list form options descriptions.
+
+       * man/pl/groupadd.8:
+       s/Polecenie groupadd posiada opcje:/Polecenie groupadd posiada następujące opcje:/
+
+       * TODO: ALL:
+       move base passwd/shadow/group/gshadow operation to module for allow write
+       diffrent backend modules for db, NIS, LDAP and others. Default backend it
+       will be choose depending on /etc/nsswitch.conf and allow overrride this by
+       -r <repository> options (where the <repository> can be file, db, nis
+       nisplus, ldap .. like on /etc/nsswitch.conf in service column).
+       passwd have old piece of code with handling -r option and it will be good
+       finish this and propagate on other shadow tools for allow operate on other
+       user databases by well known tools.
+
+       useradd:
+       add handle /etc/defaults/useradd::CREATE_MAIL_SPOOL={yes,no} for allow
+       create empty mail spool for added user.
+
+       * man/pl/Attic/d_passwd.5, man/pl/Attic/dialups.5: Removed.
+
+       * man/Attic/groupmems.8: Close few \fB by add \fR.
+
+       * man/Attic/groupadd.8, man/Attic/groupmems.8: Minor cleanups.
+
+2003-05-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/grpconv.c, src/grpunconv.c, src/pwconv.c, src/pwunconv.c:
+       Move non-SHADOWPWD stub code to end of file (like in chage.c) and do not use
+       gettextized message.
+
+       * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+       "make update-po".
+
+       * src/chage.c, NEWS:
+       Now all code depend on SHADOWPWD. If shadow will not be configured on
+       autoconf level for using shadow possword chage is olny stub which informs
+       "chage not configured for shadow password support."
+
+       * man/it/Makefile.am: Removed EXTRA_DIST (not neccessary).
+
+       * man/es/Makefile.am: Removed groups.1 (doen't exist es groups(1)).
+
+       * man/de/Makefile.am (man_MANS): added login.1.
+
+       * man/de/Makefile.am: Removed EXTRA_DIST (isn't neccessary now).
+
+       * man/hu/Makefile.am, man/ja/Makefile.am, man/ko/Makefile.am, man/pl/Makefile.am, man/de/Makefile.am, man/fr/Makefile.am, NEWS, man/Makefile.am:
+       Install groups(1) man page (moved from EXTRA_DIST to man_MANS).
+
+       * po/.cvsignore:
+       Added files generated by gettextize from gettext 0.11.5.
+
+       * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+       Updated after removing dialup tools.
+
+       * po/POTFILES.in: Removed lib/{dialchk,dialup}.c and src/dpasswd.c.
+
+2003-05-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * libmisc/shell.c (shell): do not gettexitize DEBUG message.
+
+       * src/chsh.c, src/grpconv.c, src/login.c, src/logoutd.c, src/sulogin.c, src/vipw.c, libmisc/Attic/login_access.c, libmisc/getdate.y, libmisc/limits.c, libmisc/obscure.c, libmisc/setupenv.c, lib/Attic/getpass.c, lib/pwauth.c:
+       Removed "#if 0 .. #endif" dead code.
+
+       * libmisc/utmp.c: Fixed unterminated #if.
+
+       * libmisc/Attic/login_access.c (resolve_hostname):
+       cleanup: removed #if 1 .. #endif.
+
+       * libmisc/.cvsignore: Added getdate.c.
+
+       * libmisc/Attic/getdate.c:
+       Removed - this file is generated by bison/yacc.
+
+       * configure.in:
+       Change file name passwd in AC_INIT argument from lib/dialchk.c to src/passwd.c.
+
+       * src/su.c:
+       Removed dead code (#if 0 .. #endif) with call motd() and mailcheck()
+       (was commnted because GNU su doesn't do this).
+
+2003-05-04  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/Attic/dpasswd.c, src/login.c, src/Makefile.am, man/pl/Attic/dpasswd.8, man/pl/Makefile.am, man/ja/Attic/dpasswd.8, man/ja/Makefile.am, man/Attic/dpasswd.8, man/Makefile.am, lib/Attic/dialchk.c, lib/Attic/dialchk.h, lib/Attic/dialup.c, lib/Attic/dialup.h, lib/Makefile.am, lib/getdef.c, etc/Attic/login.defs.linux, etc/login.defs, NEWS:
+       Removed old dpasswd and DIALUPS_CHECK_ENAB login.defs handling code from login.
+
+       * doc/Attic/ANNOUNCE, doc/Makefile.am, NEWS: Removed old doc/ANNOUNCE.
+
+       * src/login.c, lib/getdef.c, etc/Attic/login.defs.linux, NEWS:
+       Remove NO_PASSWORD_CONSOLE code.
+
+2003-05-03  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * libmisc/pwd2spwd.c, libmisc/utmp.c, libmisc/entry.c, libmisc/isexpired.c, lib/sgetspent.c, lib/shadow.c, lib/Attic/putpwent.c, lib/Attic/pwent.c, lib/Attic/pwpack.c, lib/defines.h, lib/pwio.c, lib/sgetpwent.c, Attic/acconfig.h, configure.in:
+       Remove old SVR4, ATT_AGE, ATT_COMMENT dependent code.
+
+       * src/chage.c:
+       Remove some ageing code which was not used if SHADOWPWD isn't defined.
+       Now handling mindays, maxdays and lastday also depends on SHADOWPWD.
+
+2003-05-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/shadowconfig.8, man/Attic/su.1, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8:
+       Reformated.
+
+       * etc/login.defs:
+       Use FHS 2.x compliant paths to lastlog, sulog, mail spool and also change
+       ENV_SUPATH to PATH=/sbin:/bin:/usr/sbin:/usr/bin and
+       ENV_PATH to PATH=/bin:/usr/bin
+
+       * old/Attic/Makefile.am, old/Attic/Makefile.linux, old/Attic/Makefile.sun4, old/Attic/Makefile.svr4, old/Attic/Makefile.xenix, old/Attic/config.h.linux, old/Attic/config.h.sun4, old/Attic/config.h.svr4, old/Attic/config.h.xenix, old/Attic/orig-config.h, old/Attic/pwconv-old.8, old/Attic/pwconv-old.c, old/Attic/pwconv.8, old/Attic/pwd.h.m4, old/Attic/pwunconv-old.8, old/Attic/pwunconv-old.c, old/Attic/pwunconv.8, old/Attic/scologin.c, old/Attic/vipw.8:
+       Removed old stuff.
+
+2003-04-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po, po/ru.po, po/sv.po, po/uk.po, po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po:
+       make update-po
+
+       * src/su.c: Remove not mached #endif after removing ATT_AGE code.
+
+       * man/ko/passwd.5: Remove ^M from end of line.
+
+       * src/chage.c, src/chpasswd.c, src/login.c, src/newusers.c, src/passwd.c, src/pwunconv.c, src/su.c, src/useradd.c, Attic/acconfig.h, NEWS, configure.in:
+       Removed old ATT_AGE (account ageing in passwd file) dependent code.
+
+       * po/pl.po: Fix chage and lastlog messages.
+
+2003-04-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * libmisc/limits.c, src/logoutd.c:
+       More utmp/utmpx fixes: use endutend() or endutxend() depending on HAVE_UTMPX_H.
+
+       * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+       Run "make update-po" after remove SVR4 code and fix duplicated entries in sv.po.
+
+       * NEWS, src/login.c, src/logoutd.c, src/useradd.c:
+       Remove old SVR4 and SVR4_SI86_EUA dependent code from login, useradd and
+       logoutd.
+
+2003-04-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/usermod.8: Remove "OD TŁUMACZA" section.
+
+       * man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmod.8, man/pl/grpck.8, man/pl/passwd.1, man/pl/pwck.8, man/pl/useradd.8, man/pl/userdel.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/grpck.8, man/Attic/passwd.1, man/Attic/pwck.8, man/Attic/useradd.8, man/Attic/userdel.8:
+       Added EXIT VALUES section with full description exit codes.
+
+       * src/groupadd.c: Typo (s/nut/not/).
+
+       * man/Attic/shadowconfig.8: Merge changes from Debian.
+
+       * NEWS, man/Attic/passwd.5:
+       Remove text about password aging from passwd(5) (based on Debian changes).
+
+       * po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po, src/lastlog.c, man/Attic/lastlog.8, man/it/lastlog.8, man/ja/lastlog.8, man/pl/lastlog.8:
+       More unification in lastlog command syntax.
+
+       * man/Attic/lastlog.8, man/it/lastlog.8, man/ja/lastlog.8, man/pl/lastlog.8:
+       Unifications in SYNOPSIS.
+
+       * man/it/gpasswd.1, man/it/groupadd.8, man/it/groupdel.8, man/it/groupmod.8, man/it/grpck.8, man/it/lastlog.8, man/it/useradd.8, man/it/userdel.8, man/it/usermod.8:
+       Remove ^M from end of line.
+
+       * man/Attic/gpasswd.1, man/Attic/groupadd.8:
+       Indentation in FILES section.
+
+       * src/pwconv.c, src/useradd.c, src/userdel.c:
+       s/bad command syntax/invalid command syntax/
+
+       * src/userdel.c:
+       Indent by hand (seems indent have problems with complex conditions).
+
+       * man/ru/Makefile.am: man_MANS: s#passwd.1#passwd.5#
+
+       * po/pl.po: s/nie mogę/nie można/
+
+       * po/fr.po: Emoticon removed.
+
+       * NEWS, configure.in, man/Makefile.am, man/ru/.cvsignore, man/ru/Makefile.am, man/ru/passwd.5:
+       Added ru passwd(1) man page from KSI resources.
+
+       * man/zh_CN/Makefile.am, man/zh_CN/chfn.1, man/zh_CN/chsh.1, man/zh_TW/Makefile.am, man/zh_TW/chfn.1, man/zh_TW/chsh.1, man/ja/Attic/dpasswd.8, man/ja/Attic/mkpasswd.8, man/ja/Attic/pw_auth.3, man/ja/Attic/pwauth.8, man/ja/Attic/shadowconfig.8, man/ja/Makefile.am, man/ja/chage.1, man/ja/chfn.1, man/ja/chpasswd.8, man/ja/chsh.1, man/ja/expiry.1, man/ja/faillog.5, man/ja/faillog.8, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/groups.1, man/ja/grpck.8, man/ja/id.1, man/ja/lastlog.8, man/ja/limits.5, man/ja/login.1, man/ja/login.access.5, man/ja/login.defs.5, man/ja/logoutd.8, man/ja/newgrp.1, man/ja/newusers.8, man/ja/passwd.1, man/ja/passwd.5, man/ja/porttime.5, man/ja/pwck.8, man/ja/pwconv.8, man/ja/shadow.3, man/ja/shadow.5, man/ja/su.1, man/ja/suauth.5, man/ja/sulogin.8, man/ja/useradd.8, man/ja/userdel.8, man/ja/usermod.8, man/ja/vipw.8, NEWS, man/cs/Makefile.am, man/cs/id.1:
+       Added chch(1), chfn(1) man pages from chinese man pages translation
+       project.
+       Added id(1) man page czech man pages translation project.
+       Updated ja man pages and added expiry(1).
+
+       * man/hu/groups.1, man/hu/login.1:
+       Remove info about $HOME/.profile from FILES section (this does not depends
+       stricte on shadow).
+
+       * configure.in, man/Makefile.am, man/es/Makefile.am:
+       Added es man pages to ac/am suit.
+
+       * man/es/.cvsignore, man/hu/.cvsignore, man/pt_BR/.cvsignore, man/zh_CN/.cvsignore, man/zh_TW/.cvsignore:
+       Added .cvsignore files.
+
+       * man/hu/Makefile.am, man/hu/su.1:
+       Added su(1) man page from hungarian man pages translation project.
+
+2003-04-26  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: Ready for gettext 0.11.5, automake 1.7.4, autoconf 2.57.
+       Many cleanups and unifications in man pages.
+
+       * man/pt_BR/gpasswd.1, man/pt_BR/groupadd.8, man/pt_BR/groupdel.8, man/pt_BR/groupmod.8, man/pt_BR/shadow.5, man/zh_CN/chpasswd.8, man/zh_CN/groupadd.8, man/zh_CN/groupdel.8, man/zh_CN/groupmod.8, man/zh_CN/useradd.8, man/zh_CN/userdel.8, man/zh_CN/usermod.8, man/zh_TW/groupadd.8, man/zh_TW/groupdel.8, man/zh_TW/groupmod.8, man/zh_TW/useradd.8, man/zh_TW/userdel.8, man/zh_TW/usermod.8, man/ko/login.1, man/ko/su.1, man/pl/chage.1, man/pl/chfn.1, man/pl/chsh.1, man/pl/expiry.1, man/pl/gpasswd.1, man/pl/groupmems.8, man/pl/groups.1, man/pl/id.1, man/pl/lastlog.8, man/pl/login.1, man/pl/newgrp.1, man/pl/passwd.1, man/pl/su.1, man/pl/sulogin.8, man/pl/useradd.8, man/pl/usermod.8, man/ja/Attic/mkpasswd.8, man/ja/chage.1, man/ja/chfn.1, man/ja/chsh.1, man/ja/faillog.5, man/ja/faillog.8, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/groups.1, man/ja/grpck.8, man/ja/id.1, man/ja/lastlog.8, man/ja/limits.5, man/ja/login.1, man/ja/login.access.5, man/ja/logoutd.8, man/ja/newgrp.1, man/ja/passwd.1, man/ja/passwd.5, man/ja/porttime.5, man/ja/pwck.8, man/ja/shadow.3, man/ja/shadow.5, man/ja/su.1, man/ja/suauth.5, man/ja/sulogin.8, man/ja/useradd.8, man/ja/userdel.8, man/ja/usermod.8, man/hu/chsh.1, man/hu/gpasswd.1, man/hu/groups.1, man/hu/login.1, man/hu/newgrp.1, man/hu/passwd.1, man/it/gpasswd.1, man/it/groupadd.8, man/it/groupdel.8, man/it/groupmod.8, man/it/grpck.8, man/it/lastlog.8, man/it/shadow.5, man/it/useradd.8, man/it/userdel.8, man/it/usermod.8, man/cs/shadow.5, man/es/su.1, man/fr/chage.1, man/fr/faillog.5, man/fr/gpasswd.1, man/fr/shadow.5, man/fr/su.1, man/fr/userdel.8, man/fr/usermod.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8:
+       Fixes: correct utmp/wtmp paths.
+       Unifications: bold commnanda and italify other file names.
+       Other minor changes and cleanups and unifications.
+
+       * libmisc/limits.c: More utmpx/utmp fixes.
+
+       * src/chpasswd.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmems.c, src/groupmod.c, src/id.c, src/login.c, src/newgrp.c, src/passwd.c, src/useradd.c, src/userdel.c, src/usermod.c, po/cs.po, po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po, po/sv.po, po/uk.po:
+       Usage help message unification (s/usage:/Usage:/).
+
+       * TODO: Missing "are".
+
+       * src/logoutd.c, src/userdel.c, NEWS:
+       Handle also utmpx if avalaile in userdel and logoutd.
+
+2003-04-25  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/sulogin.c: Remove unused utent declaration.
+
+       * src/sulogin.c, src/login.c:
+       Remove #include <utmp.h> and <utmpx.h>. This comes with #include "prototypes.h".
+
+       * lib/prototypes.h:
+       "#include <utmp.h>" or "#include <utmpx.h>" depending on HAVE_UTMPX_H.
+
+       * libmisc/failure.c:
+       Remove "#include <utmp.h>" (this is included in failure.h).
+
+       * configure.in:
+       On detect mail spool directory location try first /var/mail.
+
+2003-04-22  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * libmisc/Attic/getdate.c, libmisc/Attic/login_access.c, libmisc/Attic/login_desrpc.c, libmisc/Attic/login_krb.c, libmisc/Attic/nscd.c, libmisc/Attic/setup.c, libmisc/entry.c, libmisc/env.c, libmisc/failure.c, libmisc/fields.c, libmisc/hushed.c, libmisc/isexpired.c, libmisc/limits.c, libmisc/list.c, libmisc/log.c, libmisc/loginprompt.c, libmisc/mail.c, libmisc/motd.c, libmisc/myname.c, libmisc/obscure.c, libmisc/pam_pass.c, libmisc/pwd2spwd.c, libmisc/pwd_init.c, libmisc/pwdcheck.c, libmisc/rlogin.c, libmisc/salt.c, libmisc/setugid.c, libmisc/setupenv.c, libmisc/shell.c, libmisc/strtoday.c, libmisc/sub.c, libmisc/sulog.c, libmisc/ttytype.c, libmisc/tz.c, libmisc/ulimit.c, libmisc/utmp.c, libmisc/valid.c, libmisc/xmalloc.c, libmisc/Attic/chkshell.c, libmisc/addgrps.c, libmisc/age.c, libmisc/basename.c, libmisc/chkname.c, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/console.c, libmisc/copydir.c:
+       Indent all using current .indent.pro settings.
+
+       * po/Makevars: New file neccessary for gettext >=0.11.5.
+
+       * man/Makefile.am: Removed getspnam.3 from man_MANS (dos not exist).
+
+       * po/de.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/ru.po:
+       Fixes after filtering gettext 0.11.5 (missing headers elements, inforrect
+       format strings).
+
+2003-04-21  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, man/de/passwd.1:
+       updated german passwd(1) man page (by Josef Spillner <josef@ggzgamingzone.org>)
+
+2003-03-12  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * po/pl.po: - updated; terminology unification
+
+2003-02-28  Paweł Gołaszewski  <blues@pld.org.pl>
+
+       * etc/login.defs: - missing "MD5_CRYPT_ENAB  yes" added
+
+2003-01-20  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * configure.in: - added Makefiles for man/zh_{CN,TW}
+
+       * man/Makefile.am, man/zh_CN/Makefile.am, man/zh_CN/chpasswd.8, man/zh_CN/groupadd.8, man/zh_CN/groupdel.8, man/zh_CN/groupmod.8, man/zh_CN/useradd.8, man/zh_CN/userdel.8, man/zh_CN/usermod.8, man/zh_TW/Makefile.am, man/zh_TW/groupadd.8, man/zh_TW/groupdel.8, man/zh_TW/groupmod.8, man/zh_TW/useradd.8, man/zh_TW/userdel.8, man/zh_TW/usermod.8:
+       - added zh man pages from MDK (2 x 6) and from cman (1)
+
+2003-01-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/ja/shadow.3, man/pl/shadow.3, man/Attic/shadow.3:
+       sync spwd structure declaration with current glibc declaration (tahnks for
+       point this bug to Michael Kerrisk <michael.kerrisk@gmx.net>).
+
+       * man/pl/faillog.5: s/konsolę/terminal/
+
+2002-12-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/Makefile.am: typo (s/EXTRA_DOST/EXTRA_DIST/).
+
+2002-10-14  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/Makefile.am:
+       fixed making vigr symlink to vipw (not vipw to vigr) in install-exec-hook (fix submited by
+       Dimitar Zhekov <jimmy@is-vn.bg>).
+
+       * debian/Attic/login.copyright, debian/Attic/login.postinst, debian/Attic/login.postrm, debian/Attic/login.preinst, debian/Attic/login.prerm, debian/Attic/logoutd.init, debian/Attic/passwd.conffiles, debian/Attic/passwd.copyright, debian/Attic/passwd.cron, debian/Attic/passwd.init, debian/Attic/passwd.postinst, debian/Attic/passwd.postrm, debian/Attic/porttime, debian/Attic/rules, debian/Attic/secure-su.README, debian/Attic/secure-su.conffiles, debian/Attic/secure-su.copyright, debian/Attic/secure-su.postrm, debian/Attic/secure-su.preinst, debian/Attic/securetty, debian/Attic/shadowconfig.sh, debian/Attic/Makefile.am, debian/Attic/changelog, debian/Attic/checksums, debian/Attic/control, debian/Attic/control.gnu, debian/Attic/control.linux, debian/Attic/login.conffiles, Makefile.am, configure.in:
+       removed debian directory.
+
+2002-10-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, src/newgrp.c:
+       Use CLOSE_SESSIONS depending code only when USE_PAM.
+       The problem was reported by Mattias Webjorn Eriksson using Slackware
+       8.1 and reproduced it using slackware-current (9.0beta) (fix submited by
+       Simon Williams <simon@no-dns-yet.org.uk>).
+
+2002-10-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/ja/login.1, man/ja/logoutd.8, man/pl/login.1, man/pl/logoutd.8, man/Attic/login.1, man/Attic/logoutd.8, man/hu/login.1:
+       changed utmp and wtmp files paths (s#/etc/utmp/#/var/run/utmp#; s#/etc/wtmp#/var/log/wtmp#)
+
+       * po/ru.po, configure.in: added ru translation (from KSI resources).
+
+2002-09-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, libmisc/failure.c:
+       libbmisc/failure.c (too_many_failures): incorrect if() condition in non-PAM
+       dependent code in fail login handling (fixed by Krzysztof Oledzki <ole@ans.pl>).
+
+2002-08-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/useradd.8, man/Attic/useradd.8, NEWS:
+       document useradd and groupadd -M option in en and pl man pages
+       (by Jakub Mikusek <mick3y@o.k.pl>).
+
+       * configure.in: start prepare 4.0.4.
+
+2002-03-18  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * man/ja/Attic/dpasswd.8, man/ja/Attic/shadowconfig.8, man/ja/chpasswd.8, man/ja/faillog.8, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/id.1, man/ja/lastlog.8, man/ja/login.defs.5, man/ja/newusers.8, man/ja/su.1, man/ja/useradd.8, man/ja/userdel.8, man/ja/usermod.8, man/ja/vipw.8:
+       - updated to man-pages-ja-20020315 (except cvs tags)
+
+2002-03-15  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * TODO: - remove already done pl man updates from the list
+
+2002-03-13  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/ko/.cvsignore, man/ko/Makefile.am, man/ko/chfn.1, man/ko/chsh.1, man/ko/groups.1, man/ko/id.1, man/ko/login.1, man/ko/newgrp.1, man/ko/passwd.5, man/ko/su.1:
+       added ko man pages.
+
+       * man/de/.cvsignore, man/de/Makefile.am:
+       automake files for de man pages.
+
+       * TODO: updated.
+
+       * man/it/.cvsignore, man/it/Makefile.am, man/id/.cvsignore, man/id/Attic/adduser.8, man/id/Makefile.am, man/id/useradd.8, man/Makefile.am, man/cs/.cvsignore, man/cs/Makefile.am, man/fr/.cvsignore, man/fr/Makefile.am, configure.in, NEWS:
+       added cs, de, fr, id, it, ko man pages to ac/am.
+
+2002-03-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/sv.po, po/uk.po, po/cs.po, po/de.po, po/el.po:
+       "make update-po"
+
+       * po/de.po, NEWS, configure.in:
+       added de translation (by Frank Schmid <frank@cs-schmid.de>).
+
+       * NEWS: added info about Solar patch for man pages.
+
+2002-03-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/it/usermod.8, man/it/vigr.8, man/it/vipw.8, man/it/Attic/adduser.8, man/it/chfn.1, man/it/chsh.1, man/it/gpasswd.1, man/it/groupadd.8, man/it/groupdel.8, man/it/groupmod.8, man/it/groups.1, man/it/grpck.8, man/it/grpconv.8, man/it/grpunconv.8, man/it/id.1, man/it/lastlog.8, man/it/login.1, man/it/newgrp.1, man/it/passwd.1, man/it/passwd.5, man/it/pwconv.8, man/it/pwunconv.8, man/it/shadow.5, man/it/useradd.8, man/it/userdel.8, man/id/Attic/adduser.8, man/id/chsh.1, man/id/login.1, man/fr/Attic/adduser.8, man/fr/chage.1, man/fr/chpasswd.8, man/fr/chsh.1, man/fr/faillog.5, man/fr/gpasswd.1, man/fr/groups.1, man/fr/id.1, man/fr/newgrp.1, man/fr/passwd.1, man/fr/passwd.5, man/fr/shadow.5, man/fr/su.1, man/fr/useradd.8, man/fr/userdel.8, man/fr/usermod.8, man/es/login.1, man/es/passwd.1, man/es/su.1, man/de/chsh.1, man/de/groups.1, man/de/login.1, man/de/passwd.1, man/de/su.1, man/cs/passwd.5, man/cs/shadow.5:
+       added some raw cs, de, es, fr, id, it man pages from national
+       man pages translation projects (all man pages not yet added to Makefile.am
+       files because all need some work).
+
+       * man/hu/chfn.1, man/hu/id.1:
+       added id(1) chfn(1) from hu man pages translation project (it need some work
+       because this documents describes GNU version id and chfn from util-linux).
+
+       * man/hu/Makefile.am, man/hu/login.1:
+       added login(1) man page from hu man pages translation project.
+
+       * po/POTFILES.in: updated (suath.c moved to src/).
+
+       * src/Makefile.am: added su_SOURCES with "su.c suauth.c".
+
+       * libmisc/Makefile.am:
+       remove suauth.c from libmisc_la_SOURCES (varialbles and functions from
+       this file are usesd only in su).
+
+       * libmisc/Attic/suauth.c, src/suauth.c: move suauth.c o src/.
+
+       * libmisc/Attic/suauth.c:
+       move "struct passwd pwent" outside #ifdef SU_ACCESS.
+
+2002-03-09  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * man/pl/chage.1, man/pl/chfn.1, man/pl/chsh.1, man/pl/expiry.1, man/pl/gpasswd.1, man/pl/groups.1, man/pl/id.1, man/pl/login.1, man/pl/newgrp.1, man/pl/passwd.1, man/pl/su.1:
+       - sync with en versions
+
+       * man/Attic/login.1, man/Attic/newgrp.1, man/Attic/passwd.1, man/Attic/su.1, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chsh.1, man/Attic/expiry.1, man/Attic/gpasswd.1, man/Attic/groups.1, man/Attic/id.1:
+       - update to chage.1; formatting/typo fixes
+
+2002-03-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/uk.po, po/ko.po, po/pl.po, po/sv.po, po/ja.po, po/cs.po, po/el.po, po/fr.po:
+       "make update-po"
+
+2002-03-09  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * man/pt_BR/groupadd.8, man/pt_BR/groupdel.8, man/pt_BR/groupmod.8, man/pt_BR/shadow.5, man/pl/userdel.8, man/pl/usermod.8, man/pl/sulogin.8, man/pl/useradd.8, man/pl/pwconv.8, man/pl/su.1, man/pl/Attic/mkpasswd.8, man/pl/Attic/pwauth.8, man/pl/newgrp.1, man/pl/passwd.5, man/pl/login.defs.5, man/pl/chpasswd.8, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmems.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/login.1, man/hu/groups.1, man/hu/newgrp.1, man/ja/Attic/mkpasswd.8, man/ja/Attic/pw_auth.3, man/ja/Attic/pwauth.8, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/groups.1, man/ja/grpck.8, man/ja/id.1, man/ja/lastlog.8, man/ja/login.1, man/ja/login.defs.5, man/ja/newgrp.1, man/ja/passwd.5, man/ja/pwck.8, man/ja/shadow.5, man/ja/su.1, man/ja/sulogin.8, man/ja/useradd.8, man/ja/userdel.8, man/ja/usermod.8, man/ja/vipw.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8:
+       - further "SEE ALSO" references sorting
+
+2002-03-08  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadow.5, man/Attic/su.1, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8, man/Attic/chpasswd.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/login.1, man/Attic/login.defs.5, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.5, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Makefile.am:
+       merged shadow-4.0.0-owl-man.patch by Solar Designer <solar@openwall.com>.
+
+       * NEWS: updated for 4.0.3.
+
+       * libmisc/Attic/suauth.c, libmisc/utmp.c, src/login.c, src/su.c:
+       swapped utent dnd pwent efinition/extern and now shadow source can be configured
+       --with-shared (fix by Dimitar Zhekov <jimmy@is-vn.bg>).
+
+2002-03-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in: start prepare 4.0.3.
+
+       * src/Makefile.am:
+       use ln -sf instead ln -s in install-exec-hok (fix pointed by Dimitar Zhekov
+       <jimmy@is-vn.bg>).
+
+2002-03-02  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * man/pl/passwd.1: sync with en version
+
+       * man/Attic/passwd.1: - they -> his/her, user's
+       - typos
+       - fix sentence about "writing down"
+
+       * man/Attic/passwd.1: relocation by NAKANO Takeo
+
+2002-02-28  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * man/hu/passwd.1: missing "-"
+
+       * man/ja/Attic/shadowconfig.8, man/ja/passwd.5, man/ja/shadow.5:
+       - updated to man-pages-ja-20020215
+
+2002-02-23  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * po/cs.po, po/fr.po, po/pl.po, po/sv.po, po/uk.po, man/pl/useradd.8:
+       - typos in pl/useradd.8; commented out unsupported -r option description
+       - useradd "usage" formatting fixes
+       - fix translation in uk.po
+
+2002-02-18  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in: release 4.0.2.
+
+2002-02-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * Attic/shadow-utils.spec.in, Makefile.am, configure.in, shadow.spec.in:
+       rename spec file s/shadow-utils.spec/shadow.spec/
+
+       * po/cs.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/sv.po, po/uk.po:
+       update-po before release.
+
+       * po/ko.po, po/pl.po: cleanups.
+
+2002-02-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/Attic/adduser.8, man/pl/grpconv.8, man/pl/grpunconv.8, man/pl/pwunconv.8, man/pl/sg.1, man/pl/vigr.8, man/ja/Attic/adduser.8, man/ja/grpconv.8, man/ja/grpunconv.8, man/ja/pwunconv.8, man/ja/sg.1, man/ja/vigr.8, man/hu/sg.1, man/Attic/adduser.8, man/Attic/grpconv.8, man/Attic/grpunconv.8, man/Attic/pwunconv.8, man/Attic/sg.1, man/Attic/vigr.8:
+       placa ".so man<level>/<man_page>.<level>" in roff .so includes (seems some
+       man page viewers do not handles correctly man documents without subdirectory
+       name in roff .so incude).
+
+2002-01-31  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/sv.po, po/uk.po, po/cs.po, po/el.po, NEWS:
+       resolve many fuzzy translations also all this which may cause problems on
+       displaing long uid/gid.
+
+       * src/id.c, po/ko.po, po/pl.po, po/sv.po, po/uk.po, po/cs.po, po/el.po, po/fr.po, po/ja.po:
+       drop translate some messages in id output (about {,e}{u,g}id).
+
+2002-01-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * README: s#password: cvs#password: [empty password]#
+
+2002-01-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: two new entries.
+
+       * libmisc/chkname.c (good_name):
+       allow usernames ending with "$" for allow create machine
+       acounts for samba (thanks for point this problem in 4.0.1 by
+       Jerome Borsboom <borsboom@tch.fgg.eur.nl>).
+
+       * src/pwck.c, src/useradd.c, po/pl.po, po/sv.po, po/uk.po, po/cs.po, po/el.po, po/fr.po, po/ja.po, po/ko.po:
+       s/invalid user name `%s'/invalid user name '%s'/
+
+2002-01-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in:
+       fix in libpam_misc detection (removed one "," AC_CHECK_LIB()).
+       Thanks to Silvan Minghetti for report this.
+
+2002-01-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: start prepare to 4.0.2.
+
+       * po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/sv.po, po/uk.po, po/cs.po:
+       updated.
+
+       * configure.in: It is good time to release 4.0.1.
+
+       * libmisc/.indent.pro, lib/.indent.pro: added -pcs option.
+
+       * TODO: some things goes out other in.
+
+       * src/newgrp.c, NEWS:
+       added ability to log session closes in newgrp (look at long nice comments
+       inside source code :_) by Joseph Parmelee <jparmele@wildbear.com>.
+
+       * src/groupadd.c, src/useradd.c:
+       next part fixes for handle long UID/GID (by Thorsten Kukuk <kukuk@suse.de>).
+
+       * lib/getdef.c, lib/getdef.h:
+       adeded getdef_unum(): get unsigned numerical value from table of
+       definitions (Thorsten Kukuk <kukuk@suse.de>).
+
+       * NEWS: updated.
+
+       * libmisc/isexpired.c:
+       remove "#if defined(SHADOWPWD)" (not removed during remove AGING).
+
+       * etc/Makefile.am: useradd config file added to EXTRA_DIST.
+
+2002-01-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/sv.po, po/uk.po, po/cs.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po:
+       update.
+
+       * src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, src/vipw.c, src/.indent.pro, src/Attic/dpasswd.c, src/Attic/mkpasswd.c, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupmems.c, src/groupmod.c, src/groups.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/id.c, src/lastlog.c, src/login.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c:
+       Add -pcs to .indent.pro file and reindent all code.
+       Remove "\n" from all SYSLOG() messages.
+
+       * NEWS: s/SuSe/SuSE/
+
+2001-12-22  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/useradd.8, man/Attic/useradd.8: documment -o option.
+
+       * man/pl/usermod.8, man/pl/chfn.1, man/pl/chsh.1, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/id.1, man/pl/login.1, man/pl/newgrp.1, man/pl/passwd.1, man/pl/su.1, man/pl/useradd.8, man/pl/userdel.8:
+       correct package name (s/shadow-password/shadow/).
+
+       * src/chage.c, src/expiry.c, src/login.c, src/passwd.c, src/su.c, libmisc/age.c, libmisc/isexpired.c, NEWS, configure.in:
+       Finish integrate AGING code into SHADOWPW.
+       Remove handle old HAVE_USERSEC_H code.
+
+       * po/uk.po: typo.
+
+       * man/pl/passwd.1, man/ja/passwd.1, man/Attic/chpasswd.8, man/Attic/dpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1:
+       cleanups.
+
+       * src/Attic/dpasswd.c, src/Attic/mkpasswd.c, src/expiry.c, src/grpck.c, src/id.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/chfn.c, src/chsh.c, po/ja.po, po/ko.po, po/pl.po, po/sv.po, po/uk.po, po/cs.po, po/el.po, po/fr.po, man/Attic/useradd.8:
+       standarize usage messages syntax.
+
+       * man/pl/useradd.8, man/pl/usermod.8, man/pl/vipw.8, man/pl/userdel.8:
+       removed duplicated man page text.
+
+       * src/chage.c, po/ja.po, po/ko.po, po/pl.po, po/sv.po, po/uk.po, po/cs.po, po/el.po, po/fr.po:
+       standarize usage meissages syntax.
+
+       * src/chage.c, NEWS (main):
+       merge part Solar shadow-4.0.0-owl-pam-auth.diff patch with reorder
+       nitialize PAM and checkin is chage is runed by root or not - now chage can be
+       runed from non-root account for checking by user own accout information.
+
+       * src/pwck.c: indent source.
+
+       * src/pwck.c (main): remove old work around for Slackware bug.
+
+2001-12-20  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * man/ja/Attic/adduser.8, man/ja/Makefile.am, man/ja/limits.5, man/ja/pwconv.8:
+       - updated to man-pages-ja-20011215
+
+2001-11-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/grpck.c:
+       remove check for a Slackware bug (make sure GID is not -1; it was special
+       meaning for some syscalls).
+
+       * src/newgrp.c, src/pwck.c, src/su.c, src/useradd.c, src/usermod.c, src/groupadd.c, src/groupmod.c, src/id.c, NEWS:
+       fixes for handle/print correctly 32bit uid/gid (Thorsten Kukuk <kukuk@suse.de>).
+
+       * src/chage.c: - break usage vomment line.
+
+       * lib/defines.h:
+       removed bunch spaces on end line in conditionale #include <errno.h>
+       which in some cases dissallow compile correctly shadow (thanks for
+       Silvan Minghetti <bullet@users.sourceforge.net>).
+
+2001-11-17  Michał Moskal  <malekith@pld.org.pl>
+
+       * NEWS:
+       - mention fix for SEGV when using pwck -s on /etc/passwd file with
+         empty lines in it
+
+       * lib/commonio.c:
+       - installed fix for SEGV when using pwck -s on /etc/passwd file with
+         empty lines in it
+
+2001-11-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * libmisc/chkname.c, NEWS:
+       next merge from Solar patches (shadow-4.0.0-owl-check_names.diff) but only
+       part this patch with checking login name matching; checking is login
+       string isn't longer than possible probably it will be good prepare using
+       _POSIX_LOGIN_NAME_MAX from <bits/posix1_lim.h>
+
+2001-11-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: typos.
+
+       * NEWS: added info about new hu man pages.
+
+       * NEWS: updated.
+
+2001-11-16  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * man/ja/Attic/pw_auth.3, man/ja/Attic/pwauth.8, man/ja/passwd.5, man/ja/porttime.5, man/ja/pwck.8, man/ja/shadow.3, man/ja/shadow.5, man/ja/su.1, man/ja/suauth.5, man/ja/sulogin.8, man/ja/userdel.8, man/ja/usermod.8, man/ja/Attic/dpasswd.8, man/ja/Attic/mkpasswd.8, man/ja/Makefile.am, man/ja/chage.1, man/ja/chfn.1, man/ja/chpasswd.8, man/ja/chsh.1, man/ja/faillog.5, man/ja/faillog.8, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/grpck.8, man/ja/lastlog.8, man/ja/login.1, man/ja/login.access.5, man/ja/login.defs.5, man/ja/logoutd.8, man/ja/newgrp.1, man/ja/passwd.1:
+       - updated to man-pages-ja-20011115.tar.gz
+
+       * man/ja/groups.1: 3c26de91cfd359c0b7c36ca3cd3e170d  groups.1
+
+       * man/ja/grpconv.8: 402190c04b8df45e20afd01e3acd0da4  grpconv.8
+
+       * man/ja/grpunconv.8: 402190c04b8df45e20afd01e3acd0da4  grpunconv.8
+
+       * man/ja/id.1: 3edc687b1c09bbdd170553f326a71711  id.1
+
+       * man/ja/newusers.8: c2ecaa6ddffe07de2c39be3aefb5bcae  newusers.8
+
+       * man/ja/pwunconv.8: 402190c04b8df45e20afd01e3acd0da4  pwunconv.8
+
+       * man/ja/Attic/shadowconfig.8:
+       f79300c0db64fd961443177c88605087  shadowconfig.8
+
+       * man/ja/useradd.8: 3333b9a2e5a388a472fb05106d65a596  useradd.8
+
+       * man/ja/vigr.8: 42825938683e54e391897ea100001af1  vigr.8
+
+       * man/ja/vipw.8: 0cb8db0f1f19de7690f0ef9baeceb919  vipw.8
+
+2001-11-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/Attic/getpass.c:
+       one fix warning from Solar shadow-4.0.0-owl-warnings.diff.
+
+       * src/chage.c, lib/defines.h:
+       move "#include <errno.h>" to /lib/defines.h.
+
+       * configure.in: added AC_CHECK_HEADERS(errno.h)
+
+       * src/chage.c: apply shadow-4.0.0-owl-chage-drop-priv.diff and
+       shadow-4.0.0-owl-chage-ro-no-lock.diff by Solar Designer <solar@openwall.com>.
+       Added locks which are needed when doing r/w accesses, not when running as root.
+       If root does read-only, there's no lock needed. Added missing
+       "#include <errno.h>" for above.
+
+2001-11-14  Andrzej Krzysztofowicz  <ankry@pld.org.pl>
+
+       * configure.in: - added hu directory antry
+
+       * man/Makefile.am: - groups.1 moved to EXTRA_DIST
+       - added hu directory entry
+
+       * man/ja/Makefile.am: - sorted
+       - shadow.3 moved to EXTRA_DIST
+
+       * man/pl/Makefile.am: - sorted
+       - added entries for new pages
+       - EXTRA_DIST synced with man/Makefile.am
+
+       * man/hu/Makefile.am, man/hu/chsh.1, man/hu/gpasswd.1, man/hu/groups.1, man/hu/newgrp.1, man/hu/passwd.1, man/hu/sg.1:
+       - man pages from Debian
+
+       * man/Attic/groupmems.8: - typo
+
+       * man/pl/expiry.1, man/pl/groupmems.8: - translated pages
+
+2001-11-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * libmisc/Makefile.am:
+       fix building with cracklib enabled: $(LIBCRACK) added to libmisc_la_LIBADD.
+
+       * src/useradd.c: typo.
+
+2001-11-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/Attic/dpasswd.c, src/gpasswd.c, src/groupadd.c, src/groupmod.c, src/grpck.c, src/lastlog.c, src/login.c, src/passwd.c, src/pwck.c, src/userdel.c, src/usermod.c, src/chage.c, src/chfn.c, src/chsh.c, libmisc/utmp.c:
+       removed prototypes which are defined in libc header files
+       (Thorsten Kukuk <kukuk@suse.de>).
+
+       * libmisc/Attic/nscd.c, libmisc/Makefile.am, lib/commonio.c:
+       implemetn better reloading the nscd cache (per NSS map)
+       by Thorsten Kukuk <kukuk@suse.de>
+
+       * src/login.c, libmisc/setupenv.c:
+       fixed warnings "not used but defined" on compile using gcc 3.0.x
+       by bulletpr00ph <bullet@users.sourceforge.net>.
+
+2001-10-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: New entries for 4.0.1.
+
+       * po/pl.po: few more pl translations.
+
+       * po/cs.po, po/el.po, po/fr.po, po/ja.po, po/ko.po, po/pl.po, po/sv.po, po/uk.po:
+       "make update-po".
+
+       * po/ja.po, po/ko.po, configure.in:
+       added ja, ko translations found in SuSe.
+
+2001-10-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/useradd.c: sort alphabetically *flg variables.
+
+       * debian/Attic/Makefile.am, debian/Attic/tar.c: removed.
+
+2001-10-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/ja/Makefile.am, man/ja/sg.1, man/pl/Makefile.am, man/pl/sg.1, man/pl/vigr.8, man/Attic/sg.1, man/Attic/vigr.8, man/Makefile.am:
+       added vigr(1) man page as roff .so link to vipw(1),                                                                             - added sg(1) man page as roff .so link to newgrp(1).
+
+       * src/Makefile.am:
+       added install symlinks newgrp -> sg, vipw -> vigr in install-exec-hook target.
+
+2001-10-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * lib/Makefile.am (libshadow_la_SOURCES):
+       reverte last change and added rcsid.h,
+       (EXTRA_DIST): added missing "\".
+
+       * src/Makefile.am: (DEFS):
+       - fix -DLOCALEDIR in DEFS,
+       - added -DHAVE_CONFIG_H,
+       - removed @DEFS@.
+
+       * lib/Makefile.am:
+       added missing shadow_.h file to libshadow_la_SOURCES.
+
+2001-09-08  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * Makefile.am (AUTOMAKE_OPTIONS):
+       version changed to 1.5 and added dist-bzip2.
+
+       * lib/Makefile.am, libmisc/Makefile.am, src/Makefile.am:
+       add .indent.pro to EXTRA_DIST.
+
+       * etc/Makefile.am, etc/useradd: add example /etc/defaults/useradd.
+
+2001-09-07  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * TODO: last touch.
+
+       * TODO: more TODO.
+
+       * lib/commonio.c, NEWS:
+       Fix bug discovered and fixed by Marcel Ritter <Marcel.Ritter@rrze.uni-erlangen.de>
+       Due to a big buffer size in lib/commonio.c this error does only appear
+       if a line gets longer than 4096 bytes (there are probably very few people
+       stumbling across this).
+       Ths bug can be exposed by trashing /etc/groups file using useradd with script:
+               #!/bin/sh
+               typeset -i NUM
+               NUM=0
+               groupadd demogroup
+               while [ $NUM -le 1000 ]; do
+                  useradd -g demogroup -G demogroup -p "NONE" user$NUM
+                  NUM=$NUM+1
+               done
+
+2001-09-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/groups.c, src/id.c, src/newgrp.c, src/useradd.c, src/usermod.c, libmisc/addgrps.c, NEWS:
+       remove limit 32 to groups per user (the same user can belong to
+       more than 32 groups) by use sysconf(_SC_NGROUPS_MAX) instead constant
+       NGROUPS_MAX (patch by Radu Constantin Rendec <radu.rendec@ines.ro>)
+       NOTE: it probably need testing on other system for add some conditionals
+       for using sysconf(_SC_NGROUPS_MAX) or NGROUPS_MAX constant.
+
+2001-08-31  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * etc/pam.d/Makefile.am, etc/pam.d/useradd: added file for useradd.
+
+2001-08-24  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/useradd.c (set_defaults):
+       handle correctly error open/create useradd default config
+       filei (based on orginal post to bugtraq).
+
+       * TODO: documment in pt_BR, ja man pages -s {pw,grp}ck option.
+
+       * libmisc/sulog.c, NEWS:
+       remove limit to 6 chars logged tty name (apply 012_libmisc_sulog.c.diff Debian
+       patch).
+
+       * man/pl/Attic/shadowconfig.8, man/Attic/shadowconfig.8:
+       - aply 021_man_shadowconfig_usr_doc.diff debian patch.
+
+       * src/Makefile.am, lib/Makefile.am:
+       use $(top_builddir) in .la files paths (for allow correct compile if
+       $(top_builddir) isn't the same as $(top_srcdir)).
+
+       * po/.cvsignore, po/Attic/ChangeLog: removed ChangeLog.
+
+2001-08-18  Michał Moskal  <malekith@pld.org.pl>
+
+       * src/grpck.c: - fixed getopt() call, thnx to arekm
+
+2001-08-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: - include last changes to list changes in version 4.0.0.
+
+2001-08-14  Michał Moskal  <malekith@pld.org.pl>
+
+       * NEWS: - mention new -s options
+
+       * man/pl/grpck.8, man/pl/pwck.8, man/Attic/grpck.8, man/Attic/pwck.8:
+       - documented new -s options
+
+       * src/grpck.c, src/pwck.c: - added -s option to sort output files
+
+       * lib/groupio.c, lib/groupio.h, lib/pwio.c, lib/pwio.h, lib/sgroupio.c, lib/sgroupio.h, lib/shadowio.c, lib/shadowio.h:
+       - added pw_sort, gr_sort, sgr_sort and spw_sort functions
+
+       * lib/commonio.c, lib/commonio.h:
+       - added commonio_sort{,_wrt} functions
+
+2001-08-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/Attic/ChangeLog, po/uk.po, configure.in:
+       added uk translation (Roman Festchook <roma@polesye.net>).
+
+       * src/logoutd.c (mani):
+       s/ut->ut_libe/ut->ut_user/ on prepare strin with user name for syslog
+       line (reported by Roman Festchook <roma@polesye.net>).
+
+2001-07-27  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * Attic/acconfig.h: - added missing USG.
+
+2001-07-04  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * lib/commonio.c:
+       fix buffer overflow (not a security hole) in commonio_setname
+
+2001-06-28  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS: entry about dropping support one argument pam_strerror().
+
+       * libmisc/pam_pass.c, src/login.c, src/su.c, Attic/acconfig.h, configure.in, lib/defines.h, lib/pam_defs.h:
+       drop detecting is pam_strerror() need one or two arguments. Instead using
+       PAM_STRERROR() macro use directly pam_strerror() function with two arguments.
+       pam_strerror() with one argument is obsoleted.
+
+       * configure.in:
+       pass display error message if libpam_misc not found in correct argument
+       AC_CHECK_LIB().
+
+       * configure.in:
+       added checking for libpam_misc if libpam found and if libpam_misc is avalaible
+       add them to $LIBPAM. Othervise exit fron autoconf script with error message.
+       Now shadow compiles if pam support is enabled.
+
+2001-06-28  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * libmisc/copydir.c: fix overwriting existing file (add O_TRUNC)
+
+2001-06-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * configure.in: remove intl/po2tbl.sed from AC_OUTPUT().
+
+       * configure.in:
+       removed add md5.o md5crypt.o conditionaly to $LIBOBJS (this is obsoleted).
+       In current version ndling md5 functionality is included conditionaly
+       inside md5.c and md5crypt.c source files.
+
+       * lib/Attic/md5.c: added comments for #endif.
+
+       * configure.in: also do not use SU_ACCESS when PAM is used.
+
+       * configure.in:
+       - check pam directly by AC_CHECK_LIB() (PAM from PLD is now fixed an also other
+         PAM implementation must be fixed for this method checkin is libpam is avalaible;
+         sorry .. no way this is plain linking procedure bug),
+       - use AC_DEFINE(LOGIN_ACCES) only when PAM isn't used.
+
+2001-06-23  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/Makefile.am:
+       add LDADD for groupmod and usermod, as they use PAM too
+
+       * src/login.c, src/su.c: fix uninitialized variable failcount
+       skip '*' in pw_shell for subsystem root
+
+2001-06-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/login.c: use "extern int login_access()" only if !USE_PAM.
+
+       * src/Makefile.am:
+       added LDADD rules for programs which uses PAM and cracklib.
+
+2001-06-23  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * libmisc/chowntty.c:
+       allow root login even on read-only root filesystem
+
+       * libmisc/Makefile.am: add -DHAVE_CONFIG_H to DEFS
+
+2001-06-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * autogen.sh: run configure by default with --disable-desrpc,
+       fix: --with-libpam (not --with-pam).
+
+2001-06-23  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * libmisc/chowntty.c:
+       libmisc/chowntty.c (chown_tty): move perror() before syslog() call
+       which might change errno.
+
+       * man/pl/login.defs.5, man/Attic/login.defs.5:
+       (UMASK): Default value is 077, not 0 - see NEWS for shadow-3.3.2-951106.
+
+2001-06-23  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * NEWS, configure.in: prepare for release 4.0.0 version.
+
+       * configure.in: remove commented line.
+
+2001-06-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/pl.po: fixed charset (must be iso-8859-2).
+
+       * man/Makefile.am, man/ja/.cvsignore, man/ja/Attic/dpasswd.8, man/ja/Attic/mkpasswd.8, man/ja/Attic/pw_auth.3, man/ja/Attic/pwauth.8, man/ja/Makefile.am, man/ja/chage.1, man/ja/chfn.1, man/ja/chpasswd.8, man/ja/chsh.1, man/ja/faillog.5, man/ja/faillog.8, man/ja/gpasswd.1, man/ja/groupadd.8, man/ja/groupdel.8, man/ja/groupmod.8, man/ja/grpck.8, man/ja/lastlog.8, man/ja/login.1, man/ja/login.access.5, man/ja/login.defs.5, man/ja/logoutd.8, man/ja/newgrp.1, man/ja/passwd.1, man/ja/passwd.5, man/ja/porttime.5, man/ja/pwck.8, man/ja/pwconv.8, man/ja/shadow.3, man/ja/shadow.5, man/ja/su.1, man/ja/suauth.5, man/ja/sulogin.8, man/ja/userdel.8, man/ja/usermod.8, configure.in, NEWS:
+       added ja man pages.
+
+2001-05-30  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/Attic/shadowconfig.sh, src/Makefile.am, debian/Attic/Makefile.am, debian/Attic/shadowconfig.sh:
+       move shadowconfig.sh to debian/
+
+       * src/Makefile.am: added missing -I${top_srcdir} to INCLUDES.
+
+       * lib/Makefile.am: empty DEFS and INCLUDES="-I$(top_srcdir)".
+
+       * libmisc/Makefile.am:
+       empty DEFS and INCLUDES="-I$(top_srcdir) -I$(top_srcdir)/lib".
+
+2001-03-05  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/.indent.pro, lib/.indent.pro, libmisc/.indent.pro:
+       directory indent config file is -kr -i8 -bad (indent open this file and
+       read options if options not specyfied in commnad line).
+
+       * autogen.sh (conf_flags): added --with-pam.
+
+       * NEWS: start complette next release information.
+
+2001-02-04  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * shlib/Attic/Makefile.am, shlib/Attic/Makefile.in.saved: - removed.
+
+       * src/Makefile.am, libmisc/Makefile.am, lib/Makefile.am:
+       Rewrited automake suit for building lib, libmisc and src (now this look much
+       better). Also for all is now used libtool in proper way.
+
+       * configure.in:
+       - added useing AM_DISABLE_SHARED, AM_ENABLE_STATIC for disable compile shared
+         libraries and enable static,
+       - some cosmetics.
+
+       * Makefile.am (SUBDIRS): reorder libmisc must be before lib.
+
+2001-02-01  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pt_BR/Makefile.am: - added man_MANS to EXTRA_DIST.
+
+2001-01-31  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/Makefile.am, man/pt_BR/Makefile.am, man/pt_BR/gpasswd.1, man/pt_BR/groupadd.8, man/pt_BR/groupdel.8, man/pt_BR/groupmod.8, man/pt_BR/shadow.5, configure.in:
+       include pt_BR man pages for gpasswd(1), groupadd(1), groupdel(8),
+       groupmod(8), shadow(5).
+
+2001-01-27  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * TODO: - updated.
+
+       * man/pl/Attic/dpasswd.8, man/pl/chage.1, man/pl/chfn.1, man/pl/chpasswd.8, man/pl/chsh.1, man/pl/faillog.5, man/pl/faillog.8, man/pl/gpasswd.1, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/lastlog.8, man/pl/login.1, man/pl/newgrp.1, man/pl/newusers.8, man/pl/passwd.1, man/pl/su.1, man/pl/useradd.8, man/pl/userdel.8, man/pl/vipw.8, man/Attic/dpasswd.8, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/su.1, man/Attic/useradd.8, man/Attic/usermod.8, man/Attic/vipw.8:
+       many small cleanups, fixes also removed commented obsoleted texts.
+
+2001-01-25  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * autogen.sh: add to conf_flags --disable-shared.
+
+       * man/pl/Attic/d_passwd.5, man/pl/Attic/dialups.5, man/pl/Attic/dpasswd.8, man/pl/Attic/mkpasswd.8, man/pl/Attic/pw_auth.3, man/pl/Attic/pwauth.8, man/pl/Attic/shadowconfig.8, man/pl/chage.1, man/pl/chfn.1, man/pl/chpasswd.8, man/pl/chsh.1, man/pl/faillog.5, man/pl/faillog.8, man/pl/gpasswd.1, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/lastlog.8, man/pl/limits.5, man/pl/login.1, man/pl/login.access.5, man/pl/login.defs.5, man/pl/logoutd.8, man/pl/newgrp.1, man/pl/newusers.8, man/pl/passwd.1, man/pl/passwd.5, man/pl/porttime.5, man/pl/pwck.8, man/pl/pwconv.8, man/pl/shadow.3, man/pl/shadow.5, man/pl/su.1, man/pl/suauth.5, man/pl/sulogin.8, man/pl/useradd.8, man/pl/userdel.8, man/pl/usermod.8, man/pl/vipw.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/shadowconfig.8, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/vipw.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/expiry.1, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmems.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/limits.5, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8:
+       put or move to top cemmented Id cvs keyword,
+       (passwd.1): documment -e option (patch from Debian),
+       (userdel.1): remove commented obsoleted options.
+
+       * man/Makefile.am:
+       put all files in man_MANS and EXTRA_DIST in alphabethic order.
+
+       * src/chpasswd.c, src/pwunconv.c:
+       remove from comments program description and history logs.
+
+       * src/Makefile.am: move groups to bin_PROGRAMS.
+
+2000-12-19  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/su.c: Based on Debian modyfications:
+       (main): #endif /* USE_PAM */ #ifdef USE_PAM replaced by #else,
+       (main): removed some dead code (scoped by #if 0 .. #endif).
+       (main): call to re-establish SIGINT to right place.
+
+       * man/pl/passwd.1: Removed SEE ALSO to shadow(3) and passwd(3).
+
+       * man/pl/shadow.5, man/Attic/shadow.5: Removed SEE ALSO to shadow(3).
+
+       * man/Attic/passwd.1:
+       Removed SEE ALSO to passwd(3) and commented shadow(3).
+
+2000-12-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/useradd.c (main):
+       use "useradd" instead "shadow in pam_start() parameters - this
+       allow use separated pam config file for useradd (for example for allow
+       specified non-root user for add user).
+
+2000-11-29  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * TODO: remove write expiry(1) man page.
+
+       * man/Attic/expiry.1, man/Makefile.am:
+       added expiry(1) man page from Debian.
+
+       * man/pl/lastlog.8, man/Attic/lastlog.8:
+       updated man pages for whole dispaly syntax.
+
+       * src/lastlog.c (main): fixed command line syntax description.
+
+       * src/lastlog.c (main):
+       display correctly and full current commnad line lastlog syntax
+       and also output this string using gettext.
+
+       * src/lastlog.c (main):
+       merge src_lastlogin.c patch from debian with use getopt_long()
+       instead getopt() for add handling --help, --user, --time switches and
+       dipslay useage message on -h, --help and as default action.
+
+2000-11-17  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * src/groupmems.c, po/el.po, po/fr.po, po/pl.po, po/sv.po, po/POTFILES.in, po/cs.po:
+       added i18n support for src/groupmems.c.
+
+       * src/useradd.c:
+       * (set_defaults): use mkstemp() if avalaible. Othereise use mktemp().
+
+       * configure.in: * added checking for mkstemp().
+
+       * src/useradd.c: * (set_defaults): use mkstemp() instead mktemp(),
+       * (mani): fix compilation error in previouse RH patch (removed using nflg).
+
+2000-11-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * TODO: - groupmems need some work on add PAM and i18n support.
+
+       * src/groupmems.c, man/Attic/groupmems.8:
+       Added raw version groupmems program for administer members of a user's
+       primary group. groupmems was written by George Kraft IV <gk4@us.ibm.com>
+       and this tool have BSD license.
+
+       * src/Attic/patchlevel.h, src/Makefile.am:
+       patchlevel.h, Makefile.am: removed patchlevel.h file,
+       Makefile.am: removed bindir, sbindir (this comes with autoconf).
+
+2000-11-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * TODO: - write expire man page.
+
+2000-10-16  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * old/Attic/pwconv-old.8, old/Attic/pwconv.8, old/Attic/pwunconv-old.8, old/Attic/pwunconv.8, man/pl/Attic/mkpasswd.8, man/pl/Attic/pw_auth.3, man/pl/Attic/pwauth.8, man/pl/login.defs.5, man/pl/logoutd.8, man/pl/newgrp.1, man/pl/newusers.8, man/pl/passwd.1, man/pl/porttime.5, man/pl/pwck.8, man/pl/shadow.3, man/pl/su.1, man/pl/sulogin.8, man/pl/useradd.8, man/pl/userdel.8, man/pl/usermod.8, man/pl/Attic/dpasswd.8, man/pl/chage.1, man/pl/chfn.1, man/pl/chpasswd.8, man/pl/chsh.1, man/pl/faillog.5, man/pl/faillog.8, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmod.8, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/lastlog.8, man/pl/login.1, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, debian/Attic/login.copyright, debian/Attic/passwd.copyright, debian/Attic/secure-su.copyright, doc/Attic/ANNOUNCE, doc/Attic/LSM, doc/Attic/README, doc/Attic/README.linux:
+       Julianne F. Haugh new contact adress.
+
+       * NEWS: - summary chanfes for 20001016.
+
+       * doc/Attic/README.shadow-paper, doc/Makefile.am:
+       - removed outdated README.shadow-paper.
+
+       * configure.in: - release 20001016.
+
+2000-10-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/Makefile.am, man/Makefile.am: fixes in man/{,po}/Makefile.am:
+       - $(man_MANS) added to EXTRA_DISTS,
+       - do not install by default groups.1, id.1, pw_auth.3, shadow.3, pwauth.8,
+         sulogin.8, dpasswd.8 (moved to EXTRA_DISTS),
+
+2000-10-15  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * lib/commonio.c (reload_nscd): Disable for now because not every
+       version of nscd can handle it, unless ENABLE_NSCD_SIGHUP defined.
+
+2000-10-15  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * libmisc/pwdcheck.c, libmisc/Makefile.am: - added missing pwdcheck.c.
+
+       * configure.in: - removed old/Makefile from AC_OUTPUT list.
+
+2000-10-12  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * README: - fixed information about RO cvs access.
+
+       * NEWS: - summary changes description for shadow-20001012.
+
+       * configure.in: - release changed to 20001012.
+
+       * etc/Makefile.am: - removed shells and suauth from EXTRA_DIST.
+
+       * doc/Makefile.am: - removed README.debian from EXTRA_DIST.
+
+       * libmisc/Makefile.am: - removed pwdcheck.c from libmisc_a_SOURCES.
+
+       * debian/Attic/Makefile.am: - removed FILES from EXTRA_DIST.
+
+       * contrib/Makefile.am: - s/udbachk.v012.tgz/udbachk.tgz/
+
+       * doc/Makefile.am: - removed CHANGES (this file was moved to ../NEWS).
+
+2000-10-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/Attic/ChangeLog: - add empty file (gettext requires this).
+
+2000-10-10  Arkadiusz Miśkiewicz  <misiek@pld.org.pl>
+
+       * README: typos fixed
+
+2000-10-10  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * Makefile.am: - added shadow-utils.spec.in to EXTR_DIST.
+
+       * redhat/Attic/shadow-utils.spec.in: - obsoleted.
+
+       * Attic/stamp-h.in: - removed (this file is autogenerated by autoconf).
+
+       * po/pl.po, po/sv.po, po/cs.po, po/el.po, po/fr.po:
+       - update before release.
+
+       * doc/Attic/LSM: - new maintainer and new primary site.
+
+       * Makefile.am: - README added to EXTRA_DIST.
+
+       * README: - added README with all shadow sites and resources details.
+
+       * Attic/shadow-utils.spec.in: - partialy rewrited.
+
+       * configure.in: - change version to 20001010.
+
+       * Makefile.am: - added NEWS to EXTRA_DIST.
+
+       * Makefile.am, TODO: - added TODO.
+
+       * doc/Attic/CHANGES, NEWS: - rename doc/CHANGES -> NEWS.
+
+2000-10-09  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * redhat/Attic/Makefile.am, redhat/Attic/README, redhat/Attic/shadow-970616-fix.patch, redhat/Attic/shadow-970616-glibc.patch, redhat/Attic/shadow-970616-rh.patch, redhat/Attic/shadow-970616-utuser.patch, redhat/Attic/shadow-970616.login.defs, redhat/Attic/shadow-970616.useradd, redhat/Attic/shadow-utils-970616.spec, Attic/shadow-utils.spec.in, Makefile.am, configure.in:
+       - remove redhat/ directory with obsoleted files.
+
+       * po/.cvsignore, src/.cvsignore, man/.cvsignore, man/pl/.cvsignore, .cvsignore, libmisc/.cvsignore:
+       - shut up cvs.
+
+       * man/Makefile.am: - removed redundant ${man_MANS} from EXTRA_DIST.
+
+       * src/useradd.c:
+       - fix a security bug (adduser could overwrite previously existing
+         groups (shadow-19990827-group.patch from RH),
+
+       * po/cs.po, po/el.po, po/fr.po, po/pl.po, po/sv.po:
+       - "make updated-po".
+
+       * man/pl/Makefile.am, man/pl/grpconv.8, man/pl/grpunconv.8, man/pl/pwunconv.8, man/Attic/grpconv.8, man/Attic/grpunconv.8, man/Attic/pwunconv.8, man/Makefile.am:
+       - added man pages for grpconv(8), grpunconv(8), pwunconv(8) (.so link to
+         pwconv(8))
+
+       * man/pl/Attic/adduser.8, man/pl/Makefile.am, man/Attic/adduser.8, man/Makefile.am:
+       - added man page for adduser(8) (.so link to useradd(8)).
+
+       * po/Attic/doit:
+       - removed (in po/Makefile.in.in exist special update-po target).
+
+       * etc/pam.d/passwd, etc/pam.d/su: - cosmetics.
+
+       * etc/pam.d/Attic/shadow: - sample PAM config file for shadow utils.
+
+       * etc/pam.d/Makefile.am: - added shadow to EXTRA_DIST
+
+       * src/chpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/newusers.c, src/useradd.c, src/userdel.c, src/usermod.c:
+       - bind to shadow PAM file instead userdb (mainly PAMimication all shadow
+         utils is used for proper updating db files but in real this can be used
+         for perform many other tasks).
+
+       * src/Makefile.am: - added linking with @LIBPAM@ all PAMified tools.
+
+       * src/chpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/newusers.c, src/useradd.c, src/userdel.c, src/usermod.c:
+       - added PAM support (bind to common "userdb" PAM authentication description
+         file).
+
+       * src/chage.c: - added PAM support.
+
+2000-10-06  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * autogen.sh:
+       - added autogen.sh script which prepare raw source code from cvs to use.
+
+2000-10-04  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * man/pl/useradd.8, man/pl/userdel.8, man/pl/usermod.8, man/pl/vipw.8:
+       - merged changes from PTM.
+
+       * man/pl/Makefile.am:
+       - simplified: use only man_MANS and remaped $(mandir) variable.
+
+2000-09-27  Tomasz Kłoczko  <kloczek@pld.org.pl>
+
+       * po/cs.po, configure.in:
+       - added cs translation (Jiri Pavlovsky <Jiri.Pavlovsky@ff.cuni.cz>).
+
+2000-09-05  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * man/pl/sulogin.8, man/pl/vipw.8, po/el.po, po/fr.po, po/pl.po, po/sv.po, man/pl/Attic/d_passwd.5, man/pl/Attic/dialups.5, man/pl/Attic/dpasswd.8, man/pl/Attic/mkpasswd.8, man/pl/Attic/pw_auth.3, man/pl/Attic/pwauth.8, man/pl/Attic/shadowconfig.8, man/pl/chage.1, man/pl/chfn.1, man/pl/chpasswd.8, man/pl/chsh.1, man/pl/faillog.5, man/pl/faillog.8, man/pl/gpasswd.1, man/pl/groups.1, man/pl/grpck.8, man/pl/id.1, man/pl/lastlog.8, man/pl/limits.5, man/pl/login.1, man/pl/login.access.5, man/pl/login.defs.5, man/pl/logoutd.8, man/pl/newgrp.1, man/pl/newusers.8, man/pl/passwd.1, man/pl/passwd.5, man/pl/porttime.5, man/pl/pwck.8, man/pl/pwconv.8, man/pl/shadow.3, man/pl/shadow.5, man/pl/su.1, man/pl/suauth.5:
+       *** empty log message ***
+
+2000-09-02  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/groupmod.c, src/grpck.c, src/login.c, src/logoutd.c, src/newgrp.c, src/passwd.c, src/pwck.c, src/su.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, lib/commonio.h, lib/defines.h, lib/groupio.c, lib/pwio.c, lib/sgroupio.c, lib/shadowio.c, man/Attic/usermod.8, po/el.po, po/fr.po, po/pl.po, po/sv.po, redhat/Attic/shadow-utils.spec.in, src/Attic/dpasswd.c, src/chage.c, src/chfn.c, src/chsh.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, configure.in, debian/Attic/rules, doc/Attic/CHANGES, doc/Attic/LSM, lib/commonio.c:
+       *** empty log message ***
+
+2000-08-26  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * contrib/Makefile.am, contrib/groupmems.shar, doc/Attic/LSM, po/el.po, po/fr.po, po/pl.po, po/sv.po, doc/Attic/README.mirrors, src/vipw.c, src/Attic/dpasswd.c, src/Attic/mkpasswd.c, src/Makefile.am, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/groups.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/id.c, src/lastlog.c, src/login.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, lib/Attic/dialchk.h, lib/Attic/dialup.h, lib/Attic/rad64.c, lib/Attic/tcfsio.h, lib/Makefile.am, lib/commonio.c, lib/commonio.h, lib/defines.h, lib/encrypt.c, lib/getdef.c, lib/getdef.h, lib/groupio.c, lib/groupio.h, lib/prototypes.h, lib/pwauth.c, lib/pwio.c, lib/pwio.h, lib/sgroupio.c, lib/sgroupio.h, lib/shadowio.h, libmisc/Attic/suauth.c, libmisc/chkname.h, libmisc/chowndir.c, libmisc/copydir.c, libmisc/entry.c, libmisc/failure.h, libmisc/getdate.h, libmisc/hushed.c, libmisc/loginprompt.c, libmisc/setupenv.c, libmisc/sulog.c, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Makefile.am, man/pl/Makefile.am, man/pl/groupadd.8, man/pl/groupdel.8, man/pl/groupmod.8, man/pl/useradd.8, man/pl/userdel.8, man/pl/usermod.8, etc/Attic/login.defs.hurd, etc/Attic/login.defs.linux, doc/Attic/ANNOUNCE, doc/Attic/CHANGES, doc/Attic/README, doc/Attic/README.linux, doc/Attic/README.pam, doc/WISHLIST, debian/Attic/login.copyright, debian/Attic/passwd.copyright, debian/Attic/secure-su.copyright, Attic/mkinstalldirs, configure.in, Makefile.am:
+       *** empty log message ***
+
+1999-08-27  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * doc/Attic/LSM, po/el.po, po/fr.po, po/pl.po, po/sv.po, debian/Attic/passwd.postinst, lib/Attic/dialchk.c, lib/Attic/getpass.c, lib/getdef.c, lib/pwauth.c, libmisc/limits.c, libmisc/rlogin.c, man/Attic/limits.5, man/Attic/newgrp.1, src/Attic/dpasswd.c, src/chage.c, src/gpasswd.c, src/login.c, src/logoutd.c, src/newgrp.c, src/passwd.c, src/sulogin.c, Attic/acconfig.h, configure.in, debian/Attic/Makefile.am, debian/Attic/changelog, debian/Attic/control.gnu, debian/Attic/control.linux, debian/Attic/login.postrm, debian/Attic/logoutd, debian/Attic/logoutd.init, debian/Attic/passwd.conffiles, debian/Attic/passwd.cron, debian/Attic/passwd.init, debian/Attic/passwd.postrm, debian/Attic/rules, doc/Attic/CHANGES, doc/Attic/README.mirrors, doc/WISHLIST, etc/Attic/login.defs.hurd, etc/Attic/login.defs.linux, etc/Makefile.am, lib/defines.h:
+       *** empty log message ***
+
+1999-07-09  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * configure.in, contrib/Makefile.am, debian/Attic/changelog, doc/Attic/CHANGES, doc/Attic/LSM, doc/WISHLIST, lib/Attic/strcasecmp.c, lib/prototypes.h, libmisc/Makefile.am, man/Attic/faillog.8, po/el.po, po/pl.po, src/Makefile.am, src/chfn.c, src/chsh.c, src/faillog.c, src/groupmod.c, src/grpconv.c, src/grpunconv.c, src/newgrp.c, src/passwd.c, src/vipw.c:
+       *** empty log message ***
+
+1999-06-07  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * redhat/Attic/shadow-utils.spec.in, src/Attic/dpasswd.c, src/Attic/mkpasswd.c, src/Makefile.am, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/groups.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/id.c, src/lastlog.c, src/login.c, src/logoutd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/usermod.c, contrib/Makefile.am, contrib/README, contrib/udbachk.tgz, debian/Attic/changelog, debian/Attic/rules, doc/Attic/CHANGES, doc/Attic/LSM, doc/Attic/README.linux, doc/Attic/README.mirrors, doc/README.platforms, doc/WISHLIST, lib/Attic/getpass.c, lib/Attic/rcsid.h, lib/Makefile.am, lib/fputsx.c, lib/pam_defs.h, lib/prototypes.h, libmisc/Attic/login_desrpc.c, libmisc/pam_pass.c, libmisc/utmp.c, man/Attic/login.1, po/el.po, po/pl.po, Attic/acconfig.h, configure.in:
+       *** empty log message ***
+
+1999-03-07  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * po/pl.po, po/el.po, doc/Attic/LSM, src/useradd.c, src/su.c, src/pwconv.c, src/pwck.c, src/passwd.c, src/newusers.c, src/newgrp.c, src/logoutd.c, src/login.c, src/grpconv.c, src/grpck.c, src/groupadd.c, src/gpasswd.c, src/Attic/dpasswd.c, src/chfn.c, src/chage.c, man/Attic/usermod.8, man/Attic/useradd.8, man/Attic/limits.5, man/Attic/chage.1, libmisc/valid.c, libmisc/sub.c, libmisc/strtoday.c, libmisc/setupenv.c, libmisc/obscure.c, libmisc/limits.c, libmisc/env.c, lib/Attic/snprintf.h, lib/getdef.c, lib/encrypt.c, lib/defines.h, etc/Attic/login.defs.linux, doc/WISHLIST, doc/Attic/README.nls, doc/Attic/README.pam, doc/README.platforms, doc/Attic/README.mirrors, doc/Attic/README.linux, doc/Makefile.am, doc/Attic/CHANGES, debian/Attic/tar.c, debian/Attic/rules, debian/Attic/logoutd, debian/Attic/control, debian/Attic/changelog, configure.in:
+       *** empty log message ***
+
+1998-12-28  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/usermod.c, src/userdel.c, src/useradd.c, src/sulogin.c, src/su.c, src/pwunconv.c, src/pwconv.c, src/pwck.c, src/passwd.c, src/newusers.c, src/newgrp.c, src/Attic/mkpasswd.c, src/logoutd.c, src/login.c, src/lastlog.c, src/id.c, src/grpunconv.c, src/grpconv.c, src/grpck.c, src/groups.c, src/groupmod.c, src/groupdel.c, src/groupadd.c, src/gpasswd.c, src/faillog.c, src/expiry.c, src/Attic/dpasswd.c, src/chsh.c, src/chpasswd.c, src/chfn.c, src/chage.c, po/Attic/doit, po/POTFILES.in, po/el.po, src/Makefile.am, man/Attic/usermod.8, man/Attic/userdel.8, man/Attic/useradd.8, man/Attic/sulogin.8, man/Attic/su.1, man/Attic/shadow.5, man/Attic/shadow.3, man/Attic/pwck.8, man/Attic/pwauth.8, man/Attic/pw_auth.3, man/Attic/porttime.5, man/Attic/passwd.5, man/Attic/passwd.1, man/Attic/newusers.8, man/Attic/newgrp.1, man/Attic/mkpasswd.8, man/Attic/logoutd.8, man/Attic/login.defs.5, man/Attic/login.1, man/Attic/lastlog.8, man/Attic/id.1, man/Attic/grpck.8, man/Attic/groups.1, man/Attic/groupmod.8, man/Attic/groupdel.8, man/Attic/groupadd.8, man/Attic/faillog.8, man/Attic/faillog.5, man/Attic/dpasswd.8, man/Attic/chsh.1, man/Attic/chpasswd.8, man/Attic/chfn.1, man/Attic/chage.1, libmisc/xmalloc.c, libmisc/sub.c, libmisc/Attic/suauth.c, libmisc/shell.c, libmisc/setupenv.c, libmisc/pam_pass.c, libmisc/obscure.c, libmisc/mail.c, libmisc/Attic/login_desrpc.c, libmisc/limits.c, libmisc/failure.c, libmisc/env.c, libmisc/console.c, libmisc/chowntty.c, libmisc/age.c, libmisc/addgrps.c, libmisc/Makefile.am, lib/Attic/strerror.c, lib/pwauth.c, lib/prototypes.h, lib/Attic/getpass.c, lib/getdef.c, lib/Attic/dialchk.c, lib/defines.h, lib/Makefile.am, doc/WISHLIST, doc/README.platforms, doc/Attic/README.mirrors, doc/Attic/README.linux, doc/Attic/README, doc/Attic/LSM, doc/Attic/CHANGES, debian/Attic/secure-su.copyright, debian/Attic/passwd.copyright, debian/Attic/login.copyright, debian/Attic/control, debian/Attic/changelog, configure.in, Attic/acconfig.h, Makefile.am:
+       *** empty log message ***
+
+1998-07-24  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/passwd.c, src/su.c, src/userdel.c, src/Makefile.am, src/chage.c, src/faillog.c, src/login.c, lib/Attic/tcfsio.c, lib/Attic/tcfsio.h, lib/pwauth.c, libmisc/chowntty.c, libmisc/pam_pass.c, libmisc/setugid.c, etc/pam.d/passwd, etc/pam.d/su, lib/Makefile.am, lib/commonio.c, lib/defines.h, lib/prototypes.h, doc/Attic/README.linux, doc/Attic/README.mirrors, doc/Makefile.am, doc/README.platforms, doc/WISHLIST, etc/Makefile.am, etc/pam.d/Makefile.am, doc/Attic/CHANGES, debian/Attic/changelog, configure.in, Attic/acconfig.h:
+       *** empty log message ***
+
+1998-06-26  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/passwd.c, src/usermod.c, man/Attic/faillog.8, man/Attic/pwconv.8, src/logoutd.c, lib/Attic/getpass.c, libmisc/copydir.c, doc/Attic/README.linux, doc/Attic/README.mirrors, doc/WISHLIST, lib/commonio.c, debian/Attic/changelog, doc/Attic/CHANGES, configure.in:
+       *** empty log message ***
+
+1998-05-29  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * man/Attic/lastlog.8, man/Attic/login.1, src/usermod.c, doc/Attic/CHANGES, doc/Attic/README.linux, etc/Attic/login.defs.linux, lib/defines.h, debian/Attic/changelog, debian/Attic/login.copyright, debian/Attic/login.postinst, debian/Attic/passwd.copyright, debian/Attic/rules, debian/Attic/secure-su.copyright, configure.in, contrib/Makefile.am, contrib/shadow-anonftp.patch:
+       *** empty log message ***
+
+1998-04-16  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/useradd.c, src/userdel.c, src/usermod.c, src/passwd.c, src/sulogin.c, src/groupdel.c, src/login.c, src/logoutd.c, src/newgrp.c, src/Attic/dpasswd.c, src/chage.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, redhat/Attic/shadow-970616-rh.patch, redhat/Attic/shadow-970616-utuser.patch, redhat/Attic/shadow-970616.login.defs, redhat/Attic/shadow-970616.useradd, redhat/Attic/shadow-utils-970616.spec, src/Makefile.am, libmisc/utmp.c, redhat/Attic/Makefile.am, redhat/Attic/README, redhat/Attic/shadow-970616-fix.patch, redhat/Attic/shadow-970616-glibc.patch, libmisc/Attic/login_desrpc.c, libmisc/limits.c, libmisc/log.c, libmisc/loginprompt.c, libmisc/obscure.c, libmisc/strtoday.c, libmisc/chkname.c, libmisc/chowndir.c, libmisc/copydir.c, libmisc/failure.c, lib/Attic/dialchk.c, lib/Attic/pwpack.c, lib/defines.h, lib/pwauth.c, doc/Attic/CHANGES, doc/Attic/README.linux, doc/WISHLIST, doc/cracklib26.diff, lib/commonio.c, Attic/acconfig.h, configure.in, debian/Attic/tar.c:
+       *** empty log message ***
+
+1998-04-02  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/groupmod.c, libmisc/sulog.c, lib/sgetspent.c, lib/sgetpwent.c, lib/sgetgrent.c, lib/Attic/putgrent.c, lib/gshadow.c, lib/getdef.c, lib/fputsx.c, lib/commonio.c, doc/Attic/README.linux, doc/Attic/README.mirrors, doc/Attic/CHANGES, configure.in:
+       *** empty log message ***
+
+1998-01-30  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * Attic/install-sh, src/userdel.c, src/usermod.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/useradd.c, src/newgrp.c, src/newusers.c, src/passwd.c, src/pwck.c, src/groupmod.c, src/login.c, src/logoutd.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/expiry.c, redhat/Attic/README, redhat/Attic/shadow-utils.spec.in, src/Makefile.am, src/chage.c, man/Attic/login.defs.5, man/Attic/useradd.8, man/Attic/usermod.8, redhat/Attic/Makefile.am, libmisc/pam_pass.c, libmisc/strtoday.c, libmisc/tz.c, libmisc/Attic/login_access.c, libmisc/Attic/login_desrpc.c, libmisc/Attic/login_krb.c, libmisc/obscure.c, libmisc/age.c, libmisc/env.c, libmisc/limits.c, lib/Attic/strstr.c, lib/shadow.c, lib/shadowio.c, lib/shadowio.h, lib/utent.c, lib/Attic/rmdir.c, lib/pwio.c, lib/pwio.h, lib/sgetspent.c, lib/sgroupio.c, lib/Attic/mkdir.c, lib/Attic/putgrent.c, lib/prototypes.h, lib/pwauth.c, lib/Attic/md5crypt.c, lib/Attic/getpass.c, lib/groupio.c, lib/gshadow.c, lib/lockpw.c, lib/commonio.h, lib/defines.h, lib/encrypt.c, lib/getdef.c, lib/getdef.h, doc/Attic/README.mirrors, doc/Attic/automake-1.0.diff, doc/WISHLIST, lib/Makefile.am, lib/commonio.c, doc/Attic/ANNOUNCE, doc/Attic/CHANGES, doc/Attic/README.linux, doc/Makefile.am, doc/README.limits, debian/Attic/Makefile.am, debian/Attic/changelog, debian/Attic/login.copyright, debian/Attic/rules, Attic/mkinstalldirs, Attic/shadow-utils.spec, contrib/README, Attic/acconfig.h, Attic/aclocal.m4, configure.in, Makefile.am:
+       *** empty log message ***
+
+1998-01-25  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * Attic/acconfig.h: *** empty log message ***
+
+1997-12-14  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * doc/Attic/CHANGES, debian/Attic/checksums, debian/Attic/rules, debian/Attic/Makefile.am, src/Makefile.am, src/userdel.c, src/usermod.c, src/pwck.c, src/useradd.c, src/Attic/mkpasswd.c, src/gpasswd.c, src/grpck.c, src/login.c, src/chage.c, src/chfn.c, src/chsh.c, man/Attic/shadowconfig.8, man/Attic/vipw.8, old/Attic/Makefile.am, old/Attic/pwunconv.8, man/Attic/login.defs.5, man/Attic/pwconv.8, man/Attic/pwunconv.8, man/Makefile.am, libmisc/limits.c, libmisc/rlogin.c, lib/Attic/pwdbm.c, lib/Attic/pwent.c, lib/prototypes.h, lib/shadow.c, doc/Attic/LSM, doc/WISHLIST, etc/limits, lib/Attic/grent.c, Attic/shadow-utils.spec, debian/Attic/changelog, configure.in:
+       *** empty log message ***
+
+1997-12-08  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/userdel.c, src/usermod.c, src/Attic/shadowconfig.sh, src/su.c, src/sulogin.c, src/useradd.c, src/passwd.c, src/pwck.c, src/pwconv.c, src/pwunconv.c, src/newgrp.c, src/newusers.c, src/Attic/mkpasswd.c, src/logoutd.c, src/grpconv.c, src/grpunconv.c, src/id.c, src/lastlog.c, src/login.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/groups.c, src/grpck.c, src/Attic/dpasswd.c, src/chsh.c, src/expiry.c, src/faillog.c, src/gpasswd.c, src/Makefile.am, src/chage.c, src/chfn.c, src/chpasswd.c, old/Attic/Makefile.am, old/Attic/pwconv.8, old/Attic/vipw.8, man/Attic/limits.5, man/Attic/pwconv.8, man/Attic/shadowconfig.8, man/Attic/vipw.8, man/Makefile.am, libmisc/tz.c, libmisc/ulimit.c, libmisc/utmp.c, libmisc/valid.c, libmisc/xmalloc.c, libmisc/Attic/suauth.c, libmisc/strtoday.c, libmisc/sub.c, libmisc/sulog.c, libmisc/ttytype.c, libmisc/Attic/setup.c, libmisc/salt.c, libmisc/setugid.c, libmisc/setupenv.c, libmisc/shell.c, libmisc/rlogin.c, libmisc/motd.c, libmisc/myname.c, libmisc/obscure.c, libmisc/pam_pass.c, libmisc/pwd2spwd.c, libmisc/pwd_init.c, libmisc/Attic/login_access.c, libmisc/Attic/login_desrpc.c, libmisc/Attic/login_krb.c, libmisc/loginprompt.c, libmisc/mail.c, libmisc/hushed.c, libmisc/isexpired.c, libmisc/limits.c, libmisc/list.c, libmisc/log.c, libmisc/Attic/getdate.c, libmisc/failure.h, libmisc/fields.c, libmisc/getdate.h, libmisc/getdate.y, libmisc/entry.c, libmisc/env.c, libmisc/failure.c, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/console.c, libmisc/copydir.c, libmisc/Attic/chkshell.c, libmisc/age.c, libmisc/basename.c, libmisc/chkname.c, libmisc/chkname.h, lib/Attic/strdup.c, lib/Attic/strerror.c, lib/Attic/strstr.c, lib/utent.c, libmisc/Makefile.am, libmisc/addgrps.c, lib/Attic/spdbm.c, lib/Attic/sppack.c, lib/sgroupio.c, lib/shadow.c, lib/shadowio.c, lib/Attic/rename.c, lib/Attic/rmdir.c, lib/sgetgrent.c, lib/sgetpwent.c, lib/sgetspent.c, lib/Attic/rad64.c, lib/Attic/pwdbm.c, lib/Attic/pwent.c, lib/Attic/pwpack.c, lib/pwauth.c, lib/pwio.c, lib/Attic/mkdir.c, lib/Attic/putgrent.c, lib/Attic/putpwent.c, lib/Attic/putspent.c, lib/port.c, lib/prototypes.h, lib/Attic/gsdbm.c, lib/Attic/gspack.c, lib/Attic/md5.c, lib/Attic/md5crypt.c, lib/gshadow.c, lib/lockpw.c, lib/Attic/grdbm.c, lib/Attic/grent.c, lib/Attic/grpack.c, lib/groupio.c, lib/Attic/getpass.c, lib/Attic/dialup.c, lib/encrypt.c, lib/fputsx.c, lib/getdef.c, lib/Attic/dialchk.c, lib/Attic/dialchk.h, lib/commonio.c, lib/commonio.h, lib/defines.h, doc/Attic/automake-1.0.diff, etc/Attic/login.defs.linux, etc/limits, lib/Makefile.am, doc/Attic/CHANGES, doc/Attic/README.linux, doc/Attic/README.mirrors, doc/WISHLIST, debian/Attic/login.conffiles, debian/Attic/login.postinst, debian/Attic/passwd.postinst, debian/Attic/porttime, debian/Attic/rules, debian/Attic/secure-su.README, debian/Attic/securetty, contrib/pwdauth.c, debian/Attic/changelog, debian/Attic/control, Attic/acconfig.h, Attic/aclocal.m4, Attic/shadow-utils.spec, configure.in, Makefile.am:
+       *** empty log message ***
+
+1997-10-01  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * debian/Attic/changelog, src/chpasswd.c, libmisc/Attic/login_access.c, lib/commonio.h, lib/sgroupio.c, lib/shadowio.c, etc/Attic/login.defs.linux, doc/Attic/CHANGES, doc/Attic/LSM, doc/Attic/README.mirrors, doc/WISHLIST, Attic/shadow-utils.spec:
+       *** empty log message ***
+
+1997-09-30  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/useradd.c, src/userdel.c, src/usermod.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/newusers.c, src/passwd.c, src/pwck.c, src/grpck.c, src/grpconv.c, src/grpunconv.c, src/login.c, src/groupmod.c, src/Attic/dpasswd.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/Makefile.am, old/Attic/install-sh, old/Attic/pwconv-old.8, old/Attic/pwunconv-old.8, old/Attic/Makefile.am, man/Attic/pwconv.8, man/Attic/pwunconv.8, libmisc/setugid.c, libmisc/shell.c, libmisc/utmp.c, libmisc/mail.c, libmisc/obscure.c, libmisc/pam_pass.c, libmisc/salt.c, libmisc/Attic/login_access.c, libmisc/isexpired.c, libmisc/env.c, libmisc/fields.c, libmisc/addgrps.c, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/console.c, libmisc/copydir.c, lib/Attic/strerror.c, lib/Attic/snprintf.c, lib/Attic/snprintf.h, lib/sgroupio.c, lib/sgroupio.h, lib/shadowio.c, lib/shadowio.h, lib/Attic/putgrent.c, lib/Attic/pwent.c, lib/pwauth.c, lib/Attic/getpass.c, lib/Attic/grent.c, lib/prototypes.h, lib/commonio.c, lib/commonio.h, lib/defines.h, lib/encrypt.c, lib/getdef.c, lib/Makefile.am, etc/Attic/login.defs.linux, doc/Attic/README.linux, doc/Attic/README.mirrors, doc/WISHLIST, doc/Attic/CHANGES, doc/Attic/LSM, doc/Makefile.am, debian/Attic/rules, debian/Attic/changelog, contrib/adduser.c, configure.in, Attic/acconfig.h:
+       *** empty log message ***
+
+1997-09-29  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * man/Attic/chpasswd.8, man/Attic/pwconv.8, man/Attic/pwunconv.8, man/Attic/su.1, man/Makefile.am:
+       *** empty log message ***
+
+1997-06-16  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * doc/Attic/console.c.spec, doc/Makefile.am, doc/WISHLIST, doc/console.c.spec.txt, doc/Attic/CHANGES, debian/Attic/changelog, src/Attic/shadowconfig.sh, redhat/Attic/Makefile.am, redhat/Attic/README, redhat/Attic/shadow-970502-config.patch, redhat/Attic/shadow-utils.spec, doc/Attic/README.mirrors, doc/Attic/README.shadow-paper, doc/Attic/README.linux, debian/Attic/login.copyright, debian/Attic/passwd.copyright, debian/Attic/secure-su.copyright, Attic/shadow-utils.spec, Makefile.am, configure.in:
+       *** empty log message ***
+
+1997-06-01  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * debian/Attic/changelog, src/userdel.c, src/usermod.c, src/pwck.c, src/pwunconv.c, src/useradd.c, src/grpunconv.c, src/newusers.c, src/passwd.c, src/expiry.c, src/grpconv.c, src/chage.c, src/chfn.c, src/chpasswd.c, src/chsh.c, src/Makefile.am, redhat/Attic/Makefile.am, redhat/Attic/README, redhat/Attic/shadow-970502-config.patch, redhat/Attic/shadow-utils.spec, libmisc/mail.c, libmisc/Attic/login_desrpc.c, lib/pwio.h, lib/shadowio.c, lib/shadowio.h, lib/prototypes.h, lib/pwauth.c, lib/pwio.c, lib/commonio.c, lib/defines.h, doc/Attic/README.linux, doc/WISHLIST, doc/Attic/CHANGES, doc/Attic/INSTALL, Attic/install-sh, Attic/mkinstalldirs, Attic/acconfig.h, Makefile.am, configure.in:
+       *** empty log message ***
+
+1997-05-02  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/Attic/shadowconfig.sh, src/Makefile.am, man/Makefile.am, libmisc/mail.c, libmisc/salt.c, lib/sgroupio.c, lib/shadowio.c, lib/groupio.c, lib/pwio.c, etc/Makefile.am, doc/WISHLIST, doc/Attic/CHANGES, debian/Attic/shadowconfig, debian/Attic/Makefile.am, debian/Attic/changelog, debian/Attic/control, debian/Attic/rules, configure.in, Attic/configure, shlib/Attic/Makefile.in, man/Attic/Makefile.in, libmisc/Attic/Makefile.in, lib/Attic/Makefile.in, etc/Attic/Makefile.in, doc/Attic/Makefile.in, contrib/Attic/Makefile.in, Attic/Makefile.in, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/shadow.5, man/Attic/su.1, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/pwunconv.8, man/Attic/shadow.3, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/limits.5, man/Attic/login.1, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, libmisc/valid.c, libmisc/sulog.c, libmisc/ttytype.c, libmisc/tz.c, libmisc/utmp.c, libmisc/Attic/setup.c, libmisc/setupenv.c, libmisc/shell.c, libmisc/strtoday.c, libmisc/sub.c, libmisc/setugid.c, libmisc/obscure.c, libmisc/pwd2spwd.c, libmisc/rlogin.c, libmisc/Attic/login_access.c, libmisc/loginprompt.c, libmisc/motd.c, libmisc/hushed.c, libmisc/isexpired.c, libmisc/limits.c, libmisc/list.c, libmisc/log.c, libmisc/copydir.c, libmisc/entry.c, libmisc/env.c, libmisc/failure.c, libmisc/fields.c, libmisc/age.c, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/console.c, lib/utent.c, lib/Attic/shadow_.h, lib/Attic/spdbm.c, lib/Attic/sppack.c, lib/Attic/strstr.c, lib/shadow.c, lib/sgetpwent.c, lib/sgetspent.c, lib/Attic/pwpack.c, lib/Attic/rad64.c, lib/Attic/rename.c, lib/Attic/rmdir.c, lib/sgetgrent.c, lib/Attic/pwdbm.c, lib/Attic/pwent.c, lib/pwauth.h, lib/Attic/putgrent.c, lib/Attic/putpwent.c, lib/Attic/putspent.c, lib/port.h, lib/pwauth.c, lib/Attic/lastlog_.h, lib/Attic/mkdir.c, lib/lockpw.c, lib/port.c, lib/Attic/grpack.c, lib/Attic/gsdbm.c, lib/Attic/gspack.c, lib/gshadow.c, lib/gshadow_.h, lib/Attic/getpass.c, lib/Attic/grdbm.c, lib/Attic/grent.c, lib/getdef.c, lib/Attic/dialup.h, lib/encrypt.c, lib/faillog.h, lib/fputsx.c, lib/Attic/dialchk.c, lib/Attic/dialup.c, lib/commonio.c, lib/defines.h, etc/Attic/login.defs.linux, etc/login.defs, doc/Attic/README.linux, doc/Attic/LICENSE, doc/Attic/README, doc/Makefile.am, doc/HOWTO, doc/Attic/ANNOUNCE, debian/Attic/secure-su.README, debian/Attic/secure-su.conffiles, debian/Attic/secure-su.copyright, debian/Attic/secure-su.postrm, debian/Attic/secure-su.preinst, debian/Attic/securetty, debian/Attic/passwd.conffiles, debian/Attic/passwd.copyright, debian/Attic/passwd.postinst, debian/Attic/porttime, debian/Attic/login.conffiles, debian/Attic/login.copyright, debian/Attic/login.postinst, debian/Attic/login.postrm, debian/Attic/login.preinst, debian/Attic/login.prerm, debian/Attic/logoutd, Attic/acconfig.h, Attic/config.h.in, Makefile.am, old/Attic/Makefile.in, old/Attic/scologin.c, old/Attic/orig-config.h, old/Attic/pwconv-old.c, old/Attic/pwd.h.m4, old/Attic/pwunconv-old.c, old/Attic/config.h.sun4, old/Attic/config.h.svr4, old/Attic/config.h.xenix, old/Attic/config.h.linux, old/Attic/Makefile.sun4, old/Attic/Makefile.svr4, old/Attic/Makefile.xenix, old/Attic/Makefile.am, old/Attic/Makefile.linux, src/Attic/Makefile.in, src/pwconv.c, src/userdel.c, src/usermod.c, src/useradd.c, src/su.c, src/sulogin.c, src/Attic/pwconv5.c, src/Attic/scologin.c, src/pwck.c, src/pwunconv.c, src/Attic/patchlevel.h, src/newusers.c, src/passwd.c, src/Attic/mkpasswd.c, src/logoutd.c, src/newgrp.c, src/grpunconv.c, src/id.c, src/lastlog.c, src/login.c, src/grpck.c, src/grpconv.c, src/groupdel.c, src/groupmod.c, src/groups.c, src/faillog.c, src/gpasswd.c, src/groupadd.c, src/Attic/dpasswd.c, src/chsh.c, src/expiry.c, src/chfn.c, src/chpasswd.c, src/chage.c:
+       *** empty log message ***
+
+1997-02-11  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/groupadd.c, src/useradd.c, libmisc/setupenv.c, lib/sgroupio.c, lib/shadowio.c, lib/groupio.c, lib/pwio.c, lib/Makefile.am, lib/commonio.c, doc/Attic/CHANGES, doc/HOWTO, README, configure.in:
+       *** empty log message ***
+
+1997-01-08  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/groupadd.c, lib/commonio.c, README, src/useradd.c, src/userdel.c, src/usermod.c, src/Attic/pwconv5.c, src/pwconv.c, src/su.c, src/passwd.c, src/pwck.c, src/grpunconv.c, src/login.c, src/logoutd.c, src/newgrp.c, src/grpck.c, src/grpconv.c, src/faillog.c, src/gpasswd.c, src/groupmod.c, src/chage.c, src/chfn.c, src/chsh.c, src/expiry.c, libmisc/ttytype.c, libmisc/utmp.c, libmisc/Attic/suauth.c, libmisc/strtoday.c, libmisc/shell.c, libmisc/failure.c, libmisc/log.c, libmisc/loginprompt.c, libmisc/myname.c, lib/shadowio.h, libmisc/Makefile.am, libmisc/chkname.c, lib/sgetpwent.c, lib/sgroupio.c, lib/sgroupio.h, lib/shadow.c, lib/shadowio.c, lib/Attic/pwent.c, lib/pwio.c, lib/pwio.h, lib/Attic/putgrent.c, lib/groupio.c, lib/groupio.h, lib/gshadow.c, lib/prototypes.h, lib/defines.h, lib/faillog.h, lib/getdef.c, doc/Attic/README.linux, doc/WISHLIST, etc/Attic/login.defs.linux, lib/Makefile.am, doc/Attic/CHANGES, doc/HOWTO, Attic/acconfig.h, configure.in:
+       *** empty log message ***
+
+1996-10-27  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/usermod.c, src/grpck.c, src/useradd.c, src/userdel.c, src/chsh.c, src/gpasswd.c, libmisc/isexpired.c, libmisc/limits.c, lib/sgroupio.c, lib/shadowio.c, lib/commonio.c, lib/groupio.c, lib/pwio.c, doc/Attic/CHANGES, doc/Attic/README.linux, doc/WISHLIST, Attic/configure, configure.in:
+       *** empty log message ***
+
+1996-09-25  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/usermod.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/su.c, src/Attic/pwconv5.c, src/newgrp.c, src/passwd.c, src/pwck.c, src/grpck.c, src/login.c, src/logoutd.c, src/gpasswd.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/chfn.c, src/chsh.c, src/chage.c, libmisc/strtoday.c, libmisc/env.c, libmisc/fields.c, libmisc/isexpired.c, libmisc/setupenv.c, lib/Attic/rad64.c, lib/getdef.c, lib/prototypes.h, lib/defines.h, etc/Attic/login.defs.linux, doc/Attic/README.linux, doc/WISHLIST, doc/Attic/CHANGES, Attic/configure, configure.in, Attic/config.h.in:
+       *** empty log message ***
+
+1996-09-20  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/usermod.c, src/su.c, src/sulogin.c, src/useradd.c, src/userdel.c, src/newusers.c, src/passwd.c, src/pwck.c, src/grpck.c, src/login.c, src/logoutd.c, src/newgrp.c, src/groupdel.c, src/groupmod.c, src/Attic/dpasswd.c, src/chsh.c, src/gpasswd.c, src/groupadd.c, src/Attic/Makefile.in, src/chage.c, src/chfn.c, src/Makefile.am, libmisc/Attic/suauth.c, libmisc/shell.c, libmisc/sub.c, libmisc/ttytype.c, libmisc/env.c, libmisc/setugid.c, libmisc/setupenv.c, libmisc/chowntty.c, lib/prototypes.h, lib/getdef.c, doc/Attic/CHANGES, doc/WISHLIST:
+       *** empty log message ***
+
+1996-09-10  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * src/su.c, src/sulogin.c, src/usermod.c, src/logoutd.c, src/newgrp.c, src/passwd.c, src/pwconv.c, src/Attic/Makefile.in, src/chfn.c, src/chsh.c, src/grpunconv.c, src/login.c, src/Makefile.am, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/pwunconv.8, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/login.access.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/faillog.5, libmisc/isexpired.c, libmisc/obscure.c, libmisc/setupenv.c, libmisc/utmp.c, libmisc/age.c, lib/Attic/getpass.c, lib/defines.h, lib/getdef.c, etc/Attic/login.defs.linux, etc/limits, etc/login.access, doc/Attic/CHANGES, doc/Attic/README.linux, doc/WISHLIST, contrib/Attic/Makefile.in, contrib/Makefile.am, Attic/configure, configure.in:
+       *** empty log message ***
+
+1996-08-10  Marek Michałkiewicz  <marekm@pld.org.pl>
+
+       * old/Attic/Makefile.am, old/Attic/Makefile.linux, old/Attic/Makefile.sun4, old/Attic/Makefile.svr4, old/Attic/Makefile.xenix, old/Attic/config.h.linux, old/Attic/config.h.sun4, old/Attic/config.h.svr4, old/Attic/config.h.xenix, old/Attic/install-sh, old/Attic/orig-config.h, old/Attic/pwd.h.m4, shlib/Attic/Makefile.am, shlib/Attic/Makefile.in, shlib/Attic/Makefile.in.saved:
+       New file.
+
+       * contrib/adduser-old.c, contrib/adduser.sh, contrib/adduser2.sh, contrib/atudel:
+       960810 - first version under cvs
+
+       * contrib/Attic/Makefile.in, contrib/Makefile.am, contrib/README, contrib/adduser.c, contrib/pwdauth.c, doc/Attic/ANNOUNCE, doc/Attic/CHANGES, doc/Attic/LICENSE, doc/Attic/Makefile.in, doc/Attic/README, doc/Attic/README.linux, doc/Attic/README.sun4, doc/Attic/automake-1.0.diff, doc/Attic/console.c.spec, doc/HOWTO, doc/Makefile.am, doc/README.limits, doc/WISHLIST, etc/Attic/Makefile.in, etc/Attic/login.defs.linux, etc/Makefile.am, etc/login.access, etc/login.defs, old/Attic/Makefile.in, src/Attic/patchlevel.h, src/Attic/pwconv5.c, src/Attic/scologin.c, src/chage.c, src/chfn.c, src/chsh.c, src/expiry.c, src/gpasswd.c, src/groups.c, src/grpconv.c, src/id.c, src/login.c, src/newgrp.c, src/passwd.c, src/pwconv.c, src/pwunconv.c, src/su.c, src/sulogin.c, lib/Attic/dialup.h, lib/Attic/grdbm.c, lib/Attic/grent.c, lib/Attic/grpack.c, lib/Attic/gsdbm.c, lib/Attic/gspack.c, lib/Attic/lastlog_.h, lib/Attic/md5.c, lib/Attic/md5.h, lib/Attic/md5crypt.c, lib/Attic/mkdir.c, lib/Attic/putgrent.c, lib/Attic/putpwent.c, lib/Attic/putspent.c, lib/Attic/pwdbm.c, lib/Attic/pwent.c, lib/Attic/pwpack.c, lib/Attic/rcsid.h, lib/Attic/rename.c, lib/Attic/rmdir.c, lib/Attic/shadow_.h, lib/Attic/spdbm.c, lib/Attic/sppack.c, lib/Attic/strdup.c, lib/Attic/strstr.c, lib/defines.h, lib/faillog.h, lib/getdef.h, lib/groupio.h, lib/gshadow_.h, lib/port.h, lib/prototypes.h, lib/pwauth.h, lib/pwio.h, lib/sgetgrent.c, lib/sgetpwent.c, lib/sgetspent.c, lib/sgroupio.h, lib/shadow.c, lib/shadowio.c, lib/shadowio.h, lib/utent.c, src/Attic/Makefile.in, src/Attic/dpasswd.c, src/Attic/mkpasswd.c, src/Makefile.am, src/chpasswd.c, src/faillog.c, src/groupadd.c, src/groupdel.c, src/groupmod.c, src/grpck.c, src/lastlog.c, src/logoutd.c, src/newusers.c, src/pwck.c, src/useradd.c, src/userdel.c, src/usermod.c, lib/Attic/Makefile.in, lib/Attic/dialchk.c, lib/Attic/dialup.c, lib/Attic/getpass.c, lib/Attic/rad64.c, lib/Makefile.am, lib/commonio.c, lib/encrypt.c, lib/fputsx.c, lib/getdef.c, lib/groupio.c, lib/gshadow.c, lib/lockpw.c, lib/port.c, lib/pwauth.c, lib/pwio.c, lib/sgroupio.c, libmisc/Attic/login_access.c, libmisc/Attic/login_desrpc.c, libmisc/Attic/login_krb.c, libmisc/Attic/setup.c, libmisc/Attic/suauth.c, libmisc/age.c, libmisc/basename.c, libmisc/chkname.c, libmisc/chowndir.c, libmisc/chowntty.c, libmisc/console.c, libmisc/copydir.c, libmisc/entry.c, libmisc/env.c, libmisc/failure.c, libmisc/fields.c, libmisc/hushed.c, libmisc/isexpired.c, libmisc/limits.c, libmisc/list.c, libmisc/log.c, libmisc/loginprompt.c, libmisc/mail.c, libmisc/motd.c, libmisc/obscure.c, libmisc/pwd2spwd.c, libmisc/rlogin.c, libmisc/salt.c, libmisc/setugid.c, libmisc/setupenv.c, libmisc/shell.c, libmisc/strtoday.c, libmisc/sub.c, libmisc/sulog.c, libmisc/ttytype.c, libmisc/tz.c, libmisc/ulimit.c, libmisc/utmp.c, libmisc/valid.c, libmisc/xmalloc.c, man/Attic/Makefile.in, man/Attic/chage.1, man/Attic/chfn.1, man/Attic/chpasswd.8, man/Attic/chsh.1, man/Attic/dpasswd.8, man/Attic/faillog.5, man/Attic/faillog.8, man/Attic/gpasswd.1, man/Attic/groupadd.8, man/Attic/groupdel.8, man/Attic/groupmod.8, man/Attic/groups.1, man/Attic/grpck.8, man/Attic/id.1, man/Attic/lastlog.8, man/Attic/login.1, man/Attic/login.access.5, man/Attic/login.defs.5, man/Attic/logoutd.8, man/Attic/mkpasswd.8, man/Attic/newgrp.1, man/Attic/newusers.8, man/Attic/passwd.1, man/Attic/passwd.5, man/Attic/porttime.5, man/Attic/pw_auth.3, man/Attic/pwauth.8, man/Attic/pwck.8, man/Attic/pwconv.8, man/Attic/pwunconv.8, man/Attic/shadow.3, man/Attic/shadow.5, man/Attic/su.1, man/Attic/suauth.5, man/Attic/sulogin.8, man/Attic/useradd.8, man/Attic/userdel.8, man/Attic/usermod.8, man/Makefile.am, Attic/Makefile.in, Attic/acconfig.h, Attic/aclocal.m4, Attic/config.h.in, Attic/configure, Attic/install-sh, Attic/mkinstalldirs, Attic/stamp-h.in, Makefile.am, README, configure.in, libmisc/Attic/Makefile.in, libmisc/Makefile.am, libmisc/addgrps.c:
+       New file.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..7492f07
--- /dev/null
@@ -0,0 +1,8 @@
+## Process this file with automake to produce Makefile.in
+
+EXTRA_DIST = NEWS README TODO shadow.spec.in
+
+AUTOMAKE_OPTIONS = 1.5 dist-bzip2 foreign
+
+SUBDIRS = po man libmisc lib src \
+       contrib doc etc
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..9bf9abf
--- /dev/null
@@ -0,0 +1,674 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+       $(srcdir)/shadow.spec.in $(top_srcdir)/configure ABOUT-NLS \
+       COPYING ChangeLog NEWS TODO config.guess config.rpath \
+       config.sub depcomp install-sh ltmain.sh missing ylwrap
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = shadow.spec
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = NEWS README TODO shadow.spec.in
+AUTOMAKE_OPTIONS = 1.5 dist-bzip2 foreign
+SUBDIRS = po man libmisc lib src \
+       contrib doc etc
+
+all: config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+       @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
+             cd $(srcdir) && $(AUTOMAKE) --foreign  \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+       @if test ! -f $@; then \
+         rm -f stamp-h1; \
+         $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+       else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+       @rm -f stamp-h1
+       cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+       cd $(top_srcdir) && $(AUTOHEADER)
+       rm -f stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f config.h stamp-h1
+shadow.spec: $(top_builddir)/config.status $(srcdir)/shadow.spec.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool config.lt
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       test -d $(distdir) || mkdir $(distdir)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r $(distdir)
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-lzma: distdir
+       tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.lzma*) \
+         unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && cd $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+       $(am__remove_distdir)
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+       @cd $(distuninstallcheck_dir) \
+       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile config.h
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+       distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am am--refresh check check-am clean clean-generic \
+       clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+       dist-gzip dist-lzma dist-shar dist-tarZ dist-zip distcheck \
+       distclean distclean-generic distclean-hdr distclean-libtool \
+       distclean-tags distcleancheck distdir distuninstallcheck dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs installdirs-am \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-recursive uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..7a258ad
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,1965 @@
+$Id: NEWS 3042 2009-07-24 01:13:21Z nekral-guest $
+
+shadow-4.1.4.1 -> shadow-4.1.4.2                                               2009-07-24
+
+- general
+  * Improved support for large groups (impacts most user/group management
+    tools).
+
+- addition of system users or groups
+  * Speed improvement. This should be noticeable in case of LDAP configured
+    systems. This should impact useradd, groupadd, and newusers
+  * Since system accounts are allocated from SYS_?ID_MIN to SYS_?ID_MAX in
+    reverse order, accounts are packed close to SYS_?ID_MAX if SYS_?ID_MIN
+    is already used but there are still dome gaps.
+
+- login
+  * Add support for shells being a shell script without a shebang.
+- su
+  * Preserve the DISPLAY and XAUTHORITY environment variables. This was
+    only the case in the non PAM enabled versions.
+  * Add support for shells being a shell script without a shebang.
+
+*** translation
+  * The Finnish translation of passwd(1) was outdated and is no more
+    distributed.
+
+shadow-4.1.4 -> shadow-4.1.4.1                                         2009-05-22
+
+- login
+  * Fix failures with empty usernames on non PAM versions.
+  * Fix CONSOLE (securetty) support on non PAM versions.
+- newgrp
+  * Return the exit status of the child.
+- userdel
+  * On Linux, do not check if an user is logged in with utmp, but check if
+    the user is running some processes.
+  * If not on Linux, continue to search for an utmp record, but make sure
+    the process recorded in the utmp entry is still running.
+  * Report failures to remove the user's mailbox
+  * When USERGROUPS_ENAB is enabled, remove the user's group when the
+    user was the only member.
+  * Do not fail when -r is used and the home directory does not exist.
+- usermod
+  * Check if the user is busy when the user's UID, name or home directory
+    is changed.
+
+shadow-4.1.3.1 -> shadow-4.1.4                                         2009-05-10
+
+- packaging
+  * Enable --enable-account-tools-setuid by default for PAM builds.
+  * Add configure option --enable-utmpx, disabled by default to mimic
+    the previous behavior on Linux (where utmp and utmpx are identical).
+  * Fix build failure on non-PAM systems when --without-pam is not
+    specified.
+
+- chpasswd
+  * Change the passwords using PAM. This permits to define the password
+    policy in a central place. The -c/--crypt-method, -e/--encrypted,
+    -m/--md5 and -s/--sha-rounds options are no more supported on PAM
+    enabled systems.
+- grpck
+  * Warn if a group has an entry in group and gshadow, and the password
+    field in group is not 'x'.
+- login
+  * Do not trust the current utmp entry's ut_line to set PAM_TTY. This could
+    lead to DOS attacks.
+  * (PAM) Even if the user was already authenticated (-f flag), ask the
+    user to update his authentication token if needed.
+- lastlog
+  * Fix regression causing empty reports.
+- newusers
+  * Change the passwords using PAM. This permits to define the password
+    policy in a central place. The -c/--crypt-method and -s/--sha-rounds
+    options are no more supported on PAM enabled systems.
+- pwck
+  * Warn if an user has an entry in passwd and shadow, and the password
+    field in passwd is not 'x'.
+
+*** translation
+ - Updated Czech translation
+ - Updated French translation
+ - Updated German translation
+ - Updated Japanese translation
+ - Updated Korean translation
+ - Updated Portuguese translation
+ - Updated Russian translation
+
+shadow-4.1.3 -> shadow-4.1.3.1                                         2009-04-15
+
+*** security:
+- Due to bad parsing of octal permissions, the permissions on tty (login)
+  but also UMASK were set wrongly (and weirdly). Only shadow-4.1.3 was
+  affected.
+
+*** general
+- login
+  * Fix regression when no user is specified on the command line.
+- userdel
+  * Fixed SE Linux support
+- vipw
+  * SE Linux: Set the default context to the context of the file being
+    edited. This ensures that the backup file inherit from the file's
+    context.
+
+*** translation
+ - Updated Norwegian Bokmål translation
+
+shadow-4.1.2.2 -> shadow-4.1.3                                         2009-04-12
+
+*** general:
+- packaging
+  * Fixed support for OpenPAM.
+  * Fixed support for uclibc.
+  * Added configure --enable-account-tools-setuid (default) /
+    --disable-account-tools-setuid options. This permits to disable the
+    PAM authentication of the caller for chage, chgpasswd, chpasswd,
+    groupadd, groupdel, groupmod, newusers, useradd, userdel, and usermod.
+    This authentication is not necessary when these tools are not
+    installed setuid root.
+  * Added configure --with-group-name-max-length (default) /
+    --without-group-name-max-length options. This permits to configure the maximum length allowed for group names:
+      <no option> -> default of 16 (like today)
+      --with-group-name-max-length -> default of 16
+      --without-group-name-max-length -> no max length
+      --with-group-name-max-length=n > max is set to n
+    No sanity checking is performed on n so people could do
+    something neat like --with-group-name-max-length=MAX_INT
+- addition of users or groups
+  * Speed improvement in case UID_MAX/SYS_UID_MAX/GID_MAX/SYS_GID_MAX is
+    used for an user/group. This should be noticeable in case of LDAP
+    configured systems. This should impact useradd, groupadd, and newusers
+- error handling improvement
+  * Make sure errors and incomplete changes are reported to syslog and
+    audit in case of unexpected failures.
+  * Report system inconsistencies to syslog and audit.
+  * Only report success to syslog and audit if the changes are really
+    performed in the system databases.
+    This is still not complete.
+- /etc/login.defs
+  * New CREATE_HOME variable to tell useradd to create a home directory by
+    default.
+- Translations
+  * New Kazakh translation.
+  * Spanish manpages are no more distributed. They are outdated. Please
+    contact pkg-shadow-devel@lists.alioth.debian.org if you wish to
+    provide updates.
+
+- faillog
+  * Accept users specified as a numerical UID, or ranges of users (-user,
+    user-, user1-user2).
+  * -l, -m, and -r now apply not only to existing users, but to all the
+    specified UIDs.
+  * Options can be specified in any order.
+- gpasswd
+  * Added support for long options --add (-a), --delete (-d),
+    --remove-password (-r), --restrict (-R), --administrators (-A), and
+    --members (-M).
+  * Added support for usernames with arbitrary length.
+  * audit logging improvements.
+  * error handling improvement (see above).
+  * Log permission denied to syslog and audit.
+- groupadd
+  * audit logging improvements.
+  * error handling improvement (see above).
+  * Speedup (see "addition of users or groups" above).
+  * do not create groups with GID set to (gid_t)-1.
+  * Allocate system group GIDs in reverse order. This could be useful
+    later to increase the static IDs range.
+- groupdel
+  * audit logging improvements.
+  * error handling improvement (see above).
+- groupmems
+  * Check if user exist before they are added to groups.
+  * Avoid segfault in case the specified group does not exist in /etc/group.
+  * Everybody is allowed to list the users of a group.
+  * /etc/group is open readonly when one just wants to list the users of a
+    group.
+  * Added syslog support.
+  * Use the groupmems PAM service name instead of groupmod.
+  * Fix segmentation faults when adding or removing users from a group.
+  * Added support for shadow groups.
+  * Added support long options --add (-a), --delete (-d), --purge (-p),
+    --list (-l), --group (-g).
+- groupmod
+  * audit logging improvements.
+  * error handling improvement (see above).
+  * do not create groups with GID set to (gid_t)-1.
+- grpck
+  * warn for groups with GID set to (gid_t)-1.
+- login
+  * Restore the echoctl, echoke, onclr flags to the terminal termio flags.
+    Reset echoprt, noflsh, tostop. This behavior seems to have change by
+    mistake in earlier releases (4.0.8, for no obvious reason).
+- newusers
+  * Implement the -r, --system option.
+  * Speedup (see "addition of users or groups" above).
+  * do not create users with UID set to (gid_t)-1.
+  * do not create groups with GID set to (gid_t)-1.
+  * Allocate system account UIDs/GIDs in reverse order. This could be useful
+    later to increase the static IDs range.
+- passwd
+  * For compatibility with other passwd version, the --lock an --unlock
+    options do not lock or unlock the user account anymore.  They only
+    lock or unlock the user's password.
+- pwck
+  * warn for users with UID set to (uid_t)-1.
+- su
+  * Preserve COLORTERM in addition to TERM when su is called with the -l
+    option.
+- useradd
+  * audit logging improvements.
+  * Speedup (see "addition of users or groups" above).
+  * See CREATE_HOME above.
+  * New -M/--no-create-home option to disable CREATE_HOME.
+  * do not create users with UID set to (gid_t)-1.
+  * Added -Z option to map SELinux user for user's login.
+  * Allocate system user UIDs in reverse order. This could be useful
+    later to increase the static IDs range.
+- userdel
+  * audit logging improvements.
+  * Do not fail if the removed user is not in the shadow database.
+  * When the user's group shall be removed, do not fail if this group is
+    not in the gshadow file.
+  * Delete the SELinux user mapping for user's login.
+- usermod
+  * Allow adding LDAP users (or any user not present in the local passwd
+    file) to local groups
+  * do not create users with UID set to (gid_t)-1.
+  * Added -Z option to map SELinux user for user's login.
+
+shadow-4.1.2.1 -> shadow-4.1.2.2                                       23-11-2008
+
+*** security
+- Fix a race condition in login that could lead to gaining ownership or
+  changing mode of arbitrary files.
+- Fix a possible login DOS, which could be caused by injecting forged
+  entries in utmp.
+
+shadow-4.1.2 -> shadow-4.1.2.1                                         26-06-2008
+
+*** security
+- Fix an "audit log injection" vulnerability in login.
+  This vulnerability makes it easier for attackers to hide activities by
+  modifying portions of log events, e.g. by appending an addr= statement
+  to the login name.
+
+shadow-4.1.1 -> shadow-4.1.2                                           25-05-2008
+
+*** security:
+- generation of SHA encrypted passwords (chpasswd, gpasswd, newusers,
+  chgpasswd; and also passwd if configured without PAM support).
+  The number of rounds and number of salt bytes was fixed to their lower
+  allowed values (resp. configurable and 8), hence voiding some of the
+  advantages of this encryption method. Dictionary attacks with
+  precomputed tables were easier than expected, but still harder than with
+  the MD5 (or DES) methods.
+
+*** general:
+- packaging
+  * Distribute the chfn, chsh, and userdel PAM configuration file.
+  * Fix the detection of the audit, pam, and selinux library and header
+    file; and fail if the feature is requested but not present on the
+    system.
+  * Fix build failure when configured with audit support.
+- chfn
+  * Allow non-US-ASCII characters in the GECOS fields ("name", "room
+    number", and "other info" fields).
+- login
+  * Do not fail if a shell option, specified after --, has more than 2
+    letters.
+- su
+  * If the SULOG_FILE does not exist when an su session is logged, make
+    sure the file is created with group root, instead of using the group
+    of the caller.
+- vipw
+  * Resume properly after ^Z.
+
+*** documentation:
+- Document the -r, --system option in the useradd, groupadd, and newusers
+  manpages.
+- Document the -c, --crypt-method and -s, --sha-rounds options in the
+  newusers manpage.
+- Document the -k, --skel option in the useradd manpage.
+- Tag the section which require --enable-shadowgrp or --with-sha-crypt
+  accordingly.
+
+shadow-4.1.0 -> shadow-4.1.1                                           02-04-2008
+
+*** general:
+- security
+  * Do not seed the random number generator each time, and use the time in
+    microseconds to avoid having the same salt for different passwords
+    generated in the same second.
+- packaging
+  * Do not install the shadow library per default.
+- general
+  * Do not translate the messages sent to syslog. This avoids logging
+    PAM error messages in the users's locale.
+- etc/login.defs
+  * Set GID_MIN to the same value as UID_MIN by default (1000).
+  * Added variables SYS_UID_MIN (100), SYS_UID_MAX (999), SYS_GID_MIN (100),
+    SYS_GID_MAX (999) for system accounts.
+- etc/useradd
+  * /etc/default/useradd now defines HOME as /home to match FHS.
+- chage
+  * Fix bug which forbid to set the aging information of an account with a
+    passwd entry, but no shadow entry.
+- faillog
+  * faillog -r now only reset the entries of existing users. This makes
+    faillog faster.
+- gpasswd
+  * Fix failures when the gshadow file is not present.
+  * When a password is moved to the gshadow file, use "x" instead of "x"
+    to indicate that the password is shadowed (consistency with grpconv).
+  * Make sure the group and gshadow files are unlocked on exit.
+- groupadd
+  * New option -p/--password to specify an encrypted password.
+  * New option -r, --system for system accounts.
+- groupdel
+  * Do not fail if the group does not exist in the gshadow file.
+  * Do not rewrite the group or gshadow file in case of error.
+  * Make sure the group and gshadow files are unlocked on exit.
+  * Fail if the system is not configured to support split groups and
+    different group entries have the name of the group to be deleted.
+- groupmems
+  * Fix buffer overflow when adding an user to a group. Thanks to Peter Vrabec.
+- groupmod
+  * New option -p/--password to specify an encrypted password.
+  * Make sure the group and gshadow files are unlocked on exit.
+  * When the GID of a group is changed, update also the GID of the passwd
+    entries of the users whose primary group is the group being modified.
+- grpck
+  * Fix logging of changes to syslog when a group file is provided,
+    without a gshadow file.
+- lastlog
+  * Accept users specified as a numerical UID, or ranges of users (-user,
+    user-, user1-user2).
+- login
+  * Use PATH and SUPATH to set the PATH environment variable, even when
+    support for PAM is enabled.
+  * If started as init, start a new session.
+- newgrp
+  * Fix segfault when an user returns to an unknown GID (either the user
+    was deleted during the user's newgrp session or the user's passwd
+    entry referenced an invalid group). Add a syslog warning in that case.
+  * Use the correct AUDIT_CHGRP_ID event instead of AUDIT_USER_START, when
+    changing the user space group ID with newgrp or sg.
+- newusers
+  * The new users are no more added to the list of members of their groups
+    because the membership is already set by their primary group.
+  * Added support for gshadow.
+  * Avoid using the same salt for different passwords.
+  * Fix support for the NONE crypt method.
+  * newusers will behave more like useradd regarding the choice of UID or
+    GID or regarding the validity of user and group names.
+  * New option -r, --system for system accounts.
+  * Make sure the passwd, group, shadow, and gshadow files are unlocked on
+    exit.
+- passwd
+  * Make sure that no more than one username argument was provided.
+  * Make SE Linux tests more strict, when the real UID is 0 SE Linux
+    checks will be performed.
+- pwck
+  * Fix logging of changes to syslog when a passwd file is provided,
+    without a shadow file.
+- su
+  * su's arguments are now reordered. If needed, use -- to separate su's
+    options from the shell's options.
+- sulogin
+  * If started as init, start a new session.
+- useradd
+  * New option -l to avoid adding the user to the lastlog and faillog databases.
+  * Fix the handling of the --defaults option (it required an argument,
+    but should behave as -D)
+  * Document the --defaults option, which was already described in the
+    useradd's Usage information.
+  * New option -r, --system for system accounts.
+  * New options -U, --user-group and -N, --no-user-group. These options
+    should replace nflg from the previous versions. Please set any -n
+    option to deprecated because its meaning differs from one distribution
+    to the other.
+  * Make sure the passwd, group, shadow, and gshadow files are unlocked on
+    exit.
+- usermod
+  * Keep the access and modification time of files when moving an user's home
+    directory.
+  * Check that the new fields set with -u, -s, -l, -g, -f, -e, -d, and -c
+    differ from the old ones. If a requested new value is equal to the old
+    one, no changes will be performed for that field. If no fields are
+    changed, usermod will exist successfully with a warning. This avoids
+    logging changes to syslog when there are actually no changes.
+  * Fix the handling of -a when a user is being renamed (with -l)
+- vipw/vigr
+  * Recommend editing the shadowed (resp. regular) file if the regular (resp.
+    shadowed) file was edited.
+
+shadow-4.0.18.2 -> shadow-4.1.0                                                09-12-2007
+
+*** security:
+- chgpasswd
+  When compiled with PAM support, it used the chpasswd policy file instead
+  of the chgpasswd policy file. If an administrator added some restriction
+  to the chgpasswd policy file, they were not taken into account.
+
+*** general:
+- Add support for SHA256 and SHA512 encrypt methods (supported by new
+  libc).
+- useradd: Allow non numerical group identifier to be specified with
+  useradd's -g option.
+- chgpasswd, chpasswd: Fix chpasswd and chgpasswd stack overflow.
+- newgrp: Do not give an indication that the group has no password. Ask
+  for the password, as if there were a password.
+- The permissions of the suid binaries is now configurable in
+  src/Makefile.am. Note that changing the permissions is not recommended.
+- newgrp.c: Declare the child and pid variable at the beginning of a block.
+  This fixes a compilation issue with gcc 2.95.
+- login_nopam: Add support for systems with no innetgr().  On those
+  systems, username with an @ will be treated like any other username
+  (i.e. lookup in the local database for an user with an @). Thanks to
+  Mike Frysinger for the patch.
+- Add support for uClibc with no l64a().
+- userdel, usermod: Fix infinite loop caused by erroneous group file
+  containing two entries with the same name. (The fix strategy differs
+  from 
+  (https://bugzilla.redhat.com/show_bug.cgi?id=240915)
+- userdel: Abort if an error is detected while updating the passwd or group
+  databases. The passwd or group files will not be written.
+- usermod: Update the group database before flushing the nscd caches.
+- usermod: Make sure the group modifications will be allowed before
+  writing the passwd files.
+- Flush the nscd tables using nscd -i instead of the private glibc socket.
+- usermod: Make usermod options independent of the argument order.
+- newgrp: Do not request a password when a user uses newgrp to switch to
+  her primary group.
+- passwd: -l/-u options: edit the shadow account expiry field *in
+  addition* to editing the password field.
+- pwck: Remove the SHADOWPWD preprocessor check. Some check for /etc/shadow
+  were always missing.
+- su: Avoid terminating the PAM library in the forked child. This is done
+  later in the parent after closing the PAM session.
+- userdel: Fix the homedir prefix checking.
+- passwd, usermod: Refuse to unlock an account when it would result in a
+  passwordless account.
+- Full review of the usage of getpwnam(), getpwuid(), getgrnam(),
+  getgrgid(), and getspnam(). There should be no functional changes.
+- gpasswd: Only read information from the local file group database. It
+  writes the changes in /etc/group and/or /etc/gshadow, but used to read
+  information from getgrnam (hence possibly from another group database).
+- New login.defs variable: MAX_MEMBERS_PER_GROUP. It should provide a
+  better support for split groups. Be careful when using this variable:
+  not all tools support well split groups (in or out of the shadow
+  tool suite). It fixes gpasswd and chgpasswd when split groups are used.
+- Use MD5_CRYPT_ENAB, ENCRYPT_METHOD, SHA_CRYPT_MIN_ROUNDS, and
+  SHA_CRYPT_MAX_ROUNDS to define the default encryption algorithm for the
+  passwords.
+- chpaswd, chgpasswd, newusers: New options -c/--crypt-method and
+  -s/--sha-rounds to supersede the system default encryption algorithm.
+- chpaswd, chgpasswd, newusers: DES is no more the default algorithm. They
+  will respect the system default configured in /etc/login.defs
+
+*** documentation:
+- Generate the translated manpages from PO at build time.
+- The generated manpages will change depending on the configure options.
+  If you use different options than the one used for the distributed
+  archive, you should re-generate the manpages.
+- login.defs should now describe all the variables.
+- The tools' documentation details the login.defs variables they use.
+
+shadow-4.0.18.1 -> shadow-4.0.18.2                                     28-10-2007
+
+*** general:
+- usermod: fixed handle -a option (by Benno Schulenberg
+  <bensberg@justemail.net>),
+- useradd: improved auditing support
+  (https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=211659),
+- groupadd, groupdel, groupmod, useradd, userdel, usermod: flush nscd cashes
+  after close /etc/{group,passwd} files,
+- su: If compiled without PAM support, enforce the limits from /etc/limits
+  when one of the -, -l, or --login options is set, even if called by root.
+- limits: Support for 2 new resource limits: max nice value, and max real
+  time priority. The resource limits are not used when compiled with PAM.
+*** documentation:
+- updated translations: fi, ja, nl, tl, zh_CN.
+- groupadd.8, groupmod.8, login.1, useradd.8, userdel.8, usermod.8: grammar
+  mistakes and other corrections (by Schulenberg <bensberg@justemail.net>),
+
+shadow-4.0.18 -> shadow-4.0.18.1                                       03-08-2006
+
+*** general:
+- groupmems: fixed compilation when PAM is disabled
+  (by Johannes Winkelmann <jw@smts.ch>),
+- fixed missing man pages in dist tar ball necessary on build when
+  PAM is disabled.
+
+shadow-4.0.17 -> shadow-4.0.18                                         01-08-2006
+
+*** general:
+- su: fixed set enviroment too early when using PAM, so move it to !USE_PAM
+  (patch submitted by Mike Frysinger <vapier@gentoo.org>),
+- groupadd, groupmod, useradd, usermod: fixed UID/GID overflow (fixed
+  http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=198920)
+- passwd, useradd, usermod: fixed inactive/mindays/warndays/maxdays overflow
+  (simillar to RH#198920),
+- groupmems: rewrited for use PAM and getopt_long() and now it is enabled
+  for build and install (patch by George Kraft <gk4@swbell.net>),
+- S/Key: removed assign getpass() to libshadow_getpass() on autoconf level
+  (patch by Ulrich Mueller <ulm@kph.uni-mainz.de>; http://bugs.gentoo.org/139966),
+- usermod: back to previous -a option semantics and clarify -a behavior
+  on documentation level (by Greg Schafer <gschafer@zip.com.au>),
+- chsh, groupmod: rewrited for use getopt_long().
+- updated translations: ca, cs, da, eu, fr, gl, hu, ko, pl, pt, ru, sv, tr, uk, vi.
+*** documentation:
+- fr and ru man pages are up to date,
+- partially translated sv man pages set added
+  (by Daniel Nylander <info@danielnylander.se>),
+- pl chage(1), chsh(1), groupmod(8): translation finished.
+
+shadow-4.0.16 -> shadow-4.0.17                                         10-07-2006
+
+*** general:
+- userdel, usermod: fixed segfault on remove home directory when it can't
+  be removed; for example when it is /dev/null (fixed http://bugs.gentoo.org/139148),
+- improved SELinux detection on autoconf level (based on patch by
+  Dan Yefimov <dan@D00M.lightwave.net.ru>),
+- removed using private implementation getpass() libc function
+  (now getpass() is used also when S/KEY support is enabled),
+- move nologin do $(sbindir),
+- useradd: fixed mail spool file creation (bug cached by Frans Pop
+  <elendil@planet.nl>;
+  fixed http://bugs.debian.org/374705),
+- updated translations: cs, da, de, ko, nb, nl, pt, ro, ru, sk, sv, vi,
+- new translations: dz, km, ne.
+*** documentation:
+- ru man pages up to date,
+- lastlog(8): updated pl translation,
+- faillog(5): added missing information about fail_locktime element of
+  faillog struct (by Thorsten Kukuk <kukuk@suse.de>),
+- updated translations: eu, fr, pl.
+- reverted using docbook.sourceforge.net in XSL url.
+
+shadow-4.0.15 -> shadow-4.0.16                                         05-06-2006
+
+*** general:
+- userdel: better fix for old CERT VU#312962 (which was fixed in shadow 4.0.8):
+  fixed forgoten checking of the return value from fchown() before
+  proceeding with the fchmod() (based on Owl patch prepared by
+  Rafal Wojtczuk <nergal@owl.openwall.com>),
+- userdel: use login.defs::MAIL_DIR instead hardcoded /var/mail in created
+  mailbox path (based on Owl fixes submited
+  by Solar Designer <solar@openwall.com>),
+- by default do not use libshadow_getpass() as getpass() replacemement.
+  Use libshadow_getpass() only when S/KEY support is enabled.
+  Current glibc getpass() handles correctly longer than 8 characters
+  passwords and libshadow_getpass() is used only because libc getpass()
+  do not handles password prompting with echo enabled,
+- move login.defs::MD5_CRYPT_ENAB to non-PAM part,
+- userdel: rewrited for use getopt_log(),
+- install default/template configuration files:
+-- if shadow is configured with use PAM install /etc/pam.d/* files,
+-- if shadow do not uses PAM install /etc/{limits,login.acces} files,
+-- install /etc/login.defs and /etc/default/useradd files,
+- fixed handle relative symlinks too in lib/commonio.c
+  (merge patch from Fedora),
+- properly notify nscd to flush its cache
+  (https://bugzilla.redhat.com/bugzilla/186803),
+- useradd, usermod: fixes for verify return values mkdir() and chown()
+  on copy files (merge 482_libmisc_copydir_check_return_values Debian
+  patch),
+- login, su (non-PAM variant): export MAIL only when MAIL_CHECK_ENAB
+  is enabled (Mike Frysinger <vapier@gentoo.org>),
+- pgck, grpck: warn when the members of a group differ in /etc/groups
+  and /etc/gshadow (fixed http://bugs.debian.org/75181),
+- su: fixed exit with a status 0 when the invoked command is terminated
+  by a signal which was not catched
+  (fixed by Eero Häkkinen <eero17@bigfoot.com>),
+- login: cancel login timeout after authentication so that patient people
+  timing out on network directory services can log in with local
+  accounts (http://bugs.debian.org/107148),
+- chgpasswd: fixes for build correctly with --disable-shadowgrp
+  (patch by Johannes Winkelmann <jw@tks6.net>).
+- updated translations: cs, da, es, eu, fi, fr, gl, hu, id, pt, ru, sk, sv, vi.
+- new translations: hu.
+*** documentation:
+- new cs man pages: groupmems(8), groupmod(8), grpck(8), gshadow(5)
+  (by Miroslav Kure <kurem@upcase.inf.upol.cz>),
+- regenerate roff man pages using docbook-style-xsl-1.70.1,
+- bunch of cleanups in chfn(1), faillog(8), gpasswd(1), groupadd(8),
+  groupmems(8), limits(5), login(1), login.defs(5), newgrp(1), passwd(1),
+  passwd(5) and su(1) (by Yuri Kozlov <kozlov.y@gmail.com>),
+- update pl vipw(8) man page,
+- added chgpasswd(8) ru man page,
+- updated ru login.defs(5), passwd(1), userdel(8), usermod(8) man pages,
+- pw_auth(3) man page removed (outdated),
+- install limits(5), login.access(5) and porttime(5) man pages only when
+  shadow is builded with PAM support disabled,
+- passwd(1): better document how password strength is checked
+  (fixed http://bugs.debian.org/115380),
+- usermod(8): added missing -a option description
+  (by Christian Perrier <bubulle@debian.org>),
+- hu chsh(1), lugin(1), newgrp(1): fixed typos
+  (by Koblinger Egmont <egmont@uhulinux.hu>),
+- login.defs(5): remove information about CREATE_HOME (patch by
+  Mike Frysinger <vapier@gentoo.org>),
+- chgpasswd(8): new man page.
+
+shadow-4.0.14 -> shadow-4.0.15                                         13-03-2006
+
+*** general:
+- do not install translated man pages if shadow is configured with
+  --disable-nls
+  (based patch submited by Mike Frysinger <vapier@gentoo.org>),
+- added fixes for detect BSD's S/Key with updated the skeychallenge()
+  function for take a fourth argument in case BSD version (patch submited by
+  Mike Frysinger <vapier@gentoo.org>),
+- login: default UMASK if not specified in login.defs is 022 (pointed by
+  Peter Vrabec <pvrabec@redhat.com>),
+- chgpasswd: new tool (by Jonas Meurer <mejo@debian.org>),
+- lastlog: print the usage and exit if an additional argument is profided to
+  lastlog (merge 488_laslog_verify_arguments Debian patch),
+- login, newgrp, nologin, su: do not link with libselinux (merge
+  490_link_selinux_only_when_needed Debian patch),
+- chage, chfn, chsh, passwd: fixed confusing error message if /proc is not
+  mounted (http://bugs.debian.org/352494 patch Nicolas François
+  <nicolas.francois@centraliens.net>),
+- login (merge 433_login_more_LOG_UNKFAIL_ENAB Debian patch):
+  - TOO MANY LOGIN... logged if PAM_MAXTRIES or failcount >= retries (was
+    onl test PAM_MAXTRIES),
+  - print to stderr (in addition to syslog) in case of maximum number of
+    tries exceeded,
+  - always prints the number of tries in the syslog entry.
+  - add special handling for PAM_ABORT
+  - add an entry to failog, as when USE_PAM is not defined. (#53164)
+  - changed pam_end to PAM_END. This is certainly was a mistake.  PAM_END is
+    pam_close_seesion + pam_end. Here, the session is still not open, we
+    don't have to close it.
+  - a HAVE_PAM_FAIL_DELAY is missing,
+- su: fixed pam session support (patch from Topi Miettinen; fixed #57526,
+  #55873, 57532 Debian bugs),
+- userdel: user's group is already removed by update_groups().
+  remove_group() is not needed (bug introduced in 4.0.14 on merge FC fixes).
+  Fixed by Nicolas François <nicolas.francois@centraliens.net>,
+- useradd: allways remove group and gshadow databases lock, Fixed by Nicolas
+  François <nicolas.francois@centraliens.net>
+  (http://bugs.debian.org/348250)
+- auditing fixes:
+  - corrected prototypes in lib/prototypes.h (thre is no audit_help_log();
+    added audit_logger() prototype),
+  - useradd: fixed excess audit_logger() argument,
+- chage: added missing \n on display password status if password must be
+  chaged,
+- useradd: fixed allow non-unique UID (http://bugs.debian.org/351281),
+- variouse code cleanups for make possible compilation of shadow with -Wall
+  -Werror (by Alexander Gattin <xrgtn@yandex.ru>),
+- su: move exit() outside libmisc/shell.c::shell() for handle shell() errors
+  on higher level (now is better visable where some programs exit with 126
+  and 127 exit codes); added new shell() parameter (char *const envp[])
+  which allow fix preserving enviloment in su on using -p, (patch by
+  Alexander Gattin <xrgtn@yandex.ru>),
+- su: added handle -c,--command option for GNU su compliance (merge
+  437_su_-c_option Debian patch),
+- login: added translate login prompt string (suggested by Evgeniy
+  Dushistov),
+- updated translations: ca, cs, da, el, es, eu, gl, fi, fr, it, nb, nl, pt,
+  pt_BR, ro, ru, sk, sv, tl, vi, zh_CN,
+- new translations: gl.
+*** documentation:
+- ru man pages: added new nologin(8) and updated all other man pages (by
+  Yuri Kozlov <kozlov.y@gmail.com>),
+- chsh(1), su(1): update fi translations generated from XML files
+  (Tommi Vainikainen <thv+debian@iki.fi>),
+- expiry(1), faillog(5), faillog(8), gpasswd(1), groupadd(8), groupdel(8),
+  logoutd(8), nologin(8), vipw(8): added new cs man pages, (by Miroslav Kure
+  <kurem@upcase.inf.upol.cz>)
+- login.defs(5): default UMASK if not specified in login.defs is 022
+  (pointed by Peter Vrabec <pvrabec@redhat.com>),
+- useradd(8): better document that -d will not add the user's home directory
+  if it does not already exist (http://bugs.debian.org/154996),
+- nologin(8) man pages added (merge 478_nologin.8.xml Debian patch).
+
+shadow-4.0.13 -> shadow-4.0.14                                         03-01-2006
+
+*** general:
+- fixes in handling login.defs: $MAIL_FILE is used in userdel and usermod,
+  $MD5_CRYPT_ENAB is used by crypt_make_salt, which is used by chpasswd,
+  gpasswd and newusers.
+  Both variables moved to PAM not dependent (447_missing_login.defs_variables
+  Debian patch),
+- chage: fix chage display when the last change field is set to 0.
+  This is consistent with PAM (merge 427_chage_expiry_0 Debian patch),
+- su: if an password is expired, su should propose to change this password
+  (fixed http://bugs.debian.org/321384),
+- login: added auditing support (based on Fedora patch for login from util-linux),
+- useradd: merge PUG fixes from RedHat patch,
+- nologin: new program,
+- vipw: added a "quiet" mode (http://bugs.debian.org/190252),
+- newgrp: added auditing support (by Steve Grubb <sgrubb@redhat.com>),
+- switch over to a new logging function (by Steve Grubb <sgrubb@redhat.com>),
+- userdel: fix incorrect audit record in userdel
+  (https://bugzilla.redhat.com/bugzilla/174392),
+- userdel: remove the user's group unless it is not really a user-private group
+  for better PUG support (based on FC patch),
+- userdel: make the -f option force the removal of the user's group (even if it
+  is the primary group of another user)
+  (merge 453_userdel_-f_removes_group Debian patch),
+- usermod: rewrited for use getopt_long() (Christian Perrier <bubulle@kheops.frmug.org>),
+- grpck: fixed segmentation fault on using -s when /etc/gshadow is empty (fix by
+  Tomasz Lemiech <szpajder@staszic.waw.pl>),
+- passwd: remove handle -f, -g and -s options.
+- added handle -s/--shell, -m/-p/preserve-environment options like GNU su
+  (based on patches from Debian submited by
+  Nicolas François <nicolas.francois@centraliens.net>)
+- su: export $USER and $SHELL as well as $HOME (http://bugs.debian.org/11003 and
+  http://bugs.debian.org/11189),
+- su, vipw: rewrited for use getopt_long(),
+- su: log successful/failed through syslog (http://bugs.debian.org/190215),
+- updated translations: ca, cs, da, eu, fi, fr, it, pl, pt, ru, sv, tl, vi,
+- new translations: gl.
+*** documentation:
+- added es, ko vigr(8) and vipw(8), hu lastlog(8), ko vipw(8), zh_CN su(1),
+  zh_TW chpasswd(8) and su(1),
+- added tr man pages: chage(1), chfn(1), groupadd(8), groupdel(8), groupmod(8),
+  login(1), passwd(1), passwd(5), shadow(5), su(1) useradd(8), userdel(8),
+  usermod(8),
+- passwd5): added es, hu, pt_BR, zh_CN zh_TW translations,
+- added full set (up to date) fr man pages
+  (by Nicolas François <nicolas.francois@centraliens.net>),
+- pwck(1): document -q option,
+- WARNING: all translated man pages are now in UFT-8,
+- added full set of ru man pages (by Yuri Kozlov <kozlov.y@gmail.com>),
+- login(1): better explain the respective roles of login, init and getty with regards
+  to the utmp file (merge 440_manpages-login.1 Debian patch),
+- login(1): document how to initiate a trusted path on linux
+  (http://bugs.debian.org/305600),
+- userdel(8): document the -f option; document the group removal behavior (merge
+  455_userdel.8.xml Debian patch),
+- groupadd(8), useradd(8): document that useradd/groupadd refuse adding entries already in an
+  external database (http://bugs.debian.org/282184),
+- updated it groupdel(8), passwd(1), pwconv(8), useradd(8), userdel(8), usermod(8) man pages
+  (merge 205_it-manpages Debian patch),
+- added fi chfn(1), chsh(1), passwd(1), su(1),
+- newusers(8): added it translation,
+- newgrp(1): added de, es, zh_CN, zh_TW translations.
+
+shadow-4.0.12 -> shadow-4.0.13                                         10-10-2005
+
+*** general:
+- chage: removed duplicated pam_start(),
+- chfn, chsh: finished PAM support usin pam_start() and co.,
+- userdel: userdel should not remove the group which is primary for someone else
+  (fix by Nicolas François <nicolas.francois@centraliens.net>
+  http://bugs.debian.org/295416),
+- login: use "%c" in strftime() output (based on patch from
+  http://bugs.debian.org/89902 by Christian Perrier <bubulle@debian.org>),
+- fixedlib/commonio.c: don't assume selinux is enabled if is_selinux_enabled()
+  returns -1 (merge isSelinuxEnabled FC patch by Jeremy Katz <katzj@redhat.com>),
+- login, su (non-PAM case): fixed setup max address space limits (added missing break
+  statement in case) spoted by Lasse Collin <lasse.collin@tukaani.org>,
+- auditing support added. Patch prepared by Peter Vrabec <pvrabec@redhat.com> basing
+  on work by Steve Grubb from http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=159215
+  Now auditing support have commands: chage, gpasswd, groupadd, groupdel, groupmod,
+  useradd, userdel, usermod.
+- chage, chfn, chsh, passwd: change to use new selinux API for
+  selinux_check_passwd_access() (patch from Fedora by Dan Walsh <dwalsh@redhat.com>),
+- use #ident preprocesor directive istead RCID macro with content similar
+  to example described in ident(1) man page (modern compilers like latest GCC
+  removes not used functions by global optimization).
+  So "ident /usr/bin/passwd" will show again some useable informations
+- su: fixed twice copy enviroment which causes auth problems
+  (bug was introduced in 4.0.12; fix by Nicolas François <nicolas.francois@centraliens.net>),
+- chage: differentiate the different failure causes by the exit value
+  This will permit to adduser Debian script to detect if chage failed because the
+  system doesn't have shadowed passwords (fix for http://bugs.debian.org/317012),
+- merge 010_more-i18ned-messages Debian patch which adds i18n support for few
+  more messages (orginaly patch was prepared by Guillem Jover <guillem@debian.org>),
+- lastlog: added handle -b option which allow print only lastlog records older than
+  specified DAYS (fix by <miles@lubin.us>),
+- chpasswd, gpasswd, newusers: fixed libmisc/salt.c for use login.defs::MD5_CRYPT_ENAB
+  only if PAM support is disabled (fix by John Gatewood Ham <zappaman@buraphalinux.org>),
+- passwd: rewrited for use getopt_long(),
+- newgrp: when newgrp process sits between parent and child shells, it should
+  propagate STOPs from child to parent and CONTs from parent to child,
+  otherwise e.g. bash's "suspend" command won't work
+  Fixed Debian http://bugs.debian.org/314727
+- updated translations: da, es, fr, pt, ro, ru.
+*** documentation:
+- chsh(1), groupadd(8), newusers(8), pwconv(8), useradd(8), userdel(8), usermod(8):
+  added missing references to /etc/login.defs and login.defs(5)
+  (Christian Perrier <bubulle@kheops.frmug.org>),
+- passwd(5): rewrited based on work by Greg Wooledge <greg@wooledge.org>
+  http://bugs.debian.org/328113
+- login(1): added securetty(5) to SEE ALSO section
+  (fixed Debian bug http://bugs.debian.org/325773),
+- groupadd(8), useradd(8): fix regular expression describing alloved login/group
+  names (pointed by Nicolas François <nicolas.francois@centraliens.net>)
+  (correct is [a-z_][a-z0-9_-]*[$]),
+- groupadd(8), useradd(8): documents in CAVEATS section the limitations shadow
+  places on user and group names (fix by Mike Frysinger <vapier@gentoo.org>).
+- chage(1), groupadd(8): document -h,--help option.
+
+shadow-4.0.11.1 -> shadow-4.0.12                                       22-08-2005
+
+*** general:
+- newgrp, login: remove using login.defs::CLOSE_SESSIONS variable and allways 
+  close PAM session,
+- fixed configure.in: realy enable shadow group support by default (pointed by 
+  Greg Schafer <gschafer@zip.com.au> and Peter Vrabec <pvrabec@redhat.com>),
+- login.defs: removed handle QMAIL_DIR variable,
+- login: allow regular user to login on read-only root file system (not only for root)
+  Patch by Nicolas François <nicolas.francois@centraliens.net>
+  Fix for http://bugs.debian.org/52069
+- gpasswd, grpck, grpconv, grpuconv: added flushing group nscd cache,
+- pwck, pwconv: added flushing passwd nscd cache,
+- usermod: fixed handle -p option (patch by Peter Vrabec <pvrabec@redhat.com>),
+- chage: use -1 as value for disable password inactivity, expiration date and
+  checking an password validation.
+  Based on patch by Peter Vrabec <pvrabec@redhat.com> which fixes:
+  https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109499
+  https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=137498
+  and on 427_chage_expiry_0 Debian patch (fix for http://bugs.debian.org/78961)
+- useradd: do not copy files from skel directory if home directory exist and write
+  warning message about not copying skel files
+  Patch by Peter Vrabec <pvrabec@redhat.com> which fixes:
+  https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=143150
+  https://bugzilla.redhat.com/beta/show_bug.cgi?id=158574
+  https://bugzilla.redhat.com/beta/show_bug.cgi?id=80242
+- su: ignore SIGINT while authenticating. A ^C could defeat the waiting
+  period and permit brute-force attacks (fixed http://bugs.debian.org/288827),
+- uClibc fixes (by Martin Schlemmer <azarah@nosferatu.za.org>):
+  added require ngettext (added [need-ngettext] to AM_GNU_GETTEXT() parameters)
+  and stub prototype for ngettext() in lib/prototypes.h (neccessary if shadow
+  compiled with disabled NLS support)
+- groupadd: rewrited for use getopt_long(),
+- groupadd, groupdel, groupmod, userdel: do OPENLOG() before pam_start(),
+- groupadd: fixed double OPENLOG(),
+- removed lib/{grpack,gspack,pwpack,sppack}.c and prototypes from lib/prototypes.h
+  (outdated),
+- newusers: added flushing passwd and group nscd caches,
+- passwd, pwunconv, userdel, vipw: remove flushing shadow nscd cache (nscd do not caches
+  shadow map),
+- pwck: now pwck OPENLOG with correct name ("pwck" instead "pwsk")
+  (fix by Alexander Gattin <arg@online.com.ua>),
+- pwck, grpck: replace all puts() with printf() - it fixes problems with extra blank
+  lines printed in some messages
+  (fix by Alexander Gattin <arg@online.com.ua>),
+- passwd: use separated message "Password set to expire." instead "Password changed."
+  on "passwd -e" (fix by Christian Perrier <bubulle@debian.org),
+- updated translations: cs, de, fi, fr, nl, pl, pt, ru, sk.
+*** documentation:
+- regenerate all roff man pages using DocBook XSLT Stylesheets 1.69.1,
+- usermod(8): give the correct range for system users (0-999 instead of 0-99),
+  (http://bugs.debian.org/286258)
+- chage(8): better description -1 value passwd in -E, -I and -M options,
+- regenerate all roff man pages using DocBook XSLT Stylesheets 1.69.0.
+
+shadow-4.0.11 -> shadow-4.0.11.1                                       21-07-2005
+
+*** general:
+- fixed configure.in: now is possible build shadow with enabled/disabled shadow group
+  support (thanks for report symptoms of the bug to Greg Schafer <gschafer@zip.com.au>),
+- updated translations: sv.
+
+shadow-4.0.10 -> shadow-4.0.11                                         18-07-2005
+
+*** general:
+- su: ignore SIGINT while authenticating. A ^C could defeat the waiting period and
+  permit brute-force attacks. Also ignore SIGQUIT.
+  Fixed: http://bugs.debian.org/52372 and http://bugs.debian.org/288827
+- useradd: rewrited for use getopt_long(),
+- newgrp: add fix for handle splitted NIS groups: extends the functionality that,
+  if the requested group is given, all groups of the same GID are tested for
+  membership of the requesting user.
+  (fix by Christian Mudra <C.Mudra@science-computing.de>)
+- fix nscd_flush_cache(): for some reason doing the INVALIDATE call with two
+  write()'s fails. Do one writev() call instead.
+  http://bugs.gentoo.org/show_bug.cgi?id=80413
+  (submited by Martin Schlemmer <azarah@gentoo.org>)
+- merge nscd-socket-path patch from Fedora: newer glibc's have a different nscd socket
+  location (/var/run/nscd/socket instead /var/run/.nscd_socket),
+- S/Key support is back,
+- usermod: added -a option. This flag can only be used in conjunction with the -G
+  option. It cause usermod to append user to the current supplementary group list.
+  (patch by Peter Vrabec <pvrabec@redhat.com>) 
+- chage: added missing \n in error messages,
+- useradd, groupadd: change -O option to -K and document it in man page,
+- su, sulogin, login: fixed erroneous warning messages when used with PAM about some
+  login.defs variables (fix by DJ Lucas <dj@linuxfromscratch.org>),
+- autoconf:
+-- stop with error message if crypt() not found,
+-- remove --with{,out}-libcrypt switch,
+-- move all autoheader templates from acconfig.h to configure.in,
+- login: setup limits and umask (using login.defs ULIMITS and UMASK variables) only when
+  PAM support is disabled (it is task for pam_limits and pam_umask modules),
+- sulogin, login: use SYSLOG macro instead syslog() which saves the locale, sets the
+  locale to C, sends the message and restores the locale
+  (fix by Nicolas François <nicolas.francois@centraliens.net>).
+- updated translations: cs, da, de, es, fi, pl, pt, ro, ru, sk.
+*** documentation:
+- pwck(8): document -q option (based on Debian patch for fix http://bugs.debian.org/309408)
+- pwck(8): rewrited OPTIONS section and better SYNOPSIS,
+- lastlog(8): document that lastlog is a sparse file, and don't need to be rotated
+  http://bugs.debian.org/219321
+- login(8): better explain the respective roles of login, init and getty with regards
+  to the utmp file (based on 441_manpages-shadow.5 Debian patch),
+- shadowconfig(8): removed (will be maintained in Debian shadow pkg repository),
+- groupadd(8): document -o option,
+- in SEE ALLSO section in groupadd(8), groupdel(8), groupmod(8), userdel(8), usermod(8)
+  added refer to gpasswd(8) (suggested by Mike Frysinger <vapier@gentoo.org>).
+
+shadow-4.0.9 -> shadow-4.0.10                                          28-06-2005
+
+*** general:
+- mkpasswd: removed,
+- userdel: now deletes user groups from /etc/gshdow as well as /etc/group.
+  Fix by Nicolas François <nicolas.francois@centraliens.net>.
+  http://bugs.debian.org/99442
+- usermod: when relocating a user's home directory, don't fail and remove the new
+  home directory if we can't remove the old home directory for some
+  reason; the results can be spectularly poort if, for instance, only
+  the rmdir() fails. Patch prepared by Timo Lindfors <lindi-spamtrap@newmail.com>.
+  http://bugs.debian.org/166369
+- su: fix syslogs to be less ambiguous. Use old:new format instead of old-new
+  because '-' can appear in usernames
+  http://bugs.debian.org/213592
+- removed not used now libmisc/setup.c,
+- login: use also UTMPX API instead UTMP on failure (login was affected for this
+  when shadow was builded without PAM support)
+  patch by Nicolas François <nicolas.francois@centraliens.net>
+- login: the PAM session needs to be closed as root, thus before change_uid()
+  http://bugs.debian.org/53570 http://bugs.debian.org/195048 http://bugs.debian.org/211884
+- login: made login's -f option also able to use the username after -- if none
+  was passed as it's optarg
+  http://bugs.debian.org/53702 
+- login: check for hushed login and pass PAM_SILENT if true,
+  http://bugs.debian.org/48002
+- login: fixed username on succesful login (was using the normal username,
+  when it should have used pam_user) http://bugs.debian.org/47819
+- remove using SHADOWPWD #define so now shadow is allways builded with shadow
+  passwowd support,
+- chage: rewrited for use getopt_long(),
+- updated translations: ca, cs, da, fi, pl, ru, zh_TW.
+*** documentation:
+- most of the man pages now are generated from XML files so in case submiting any
+  chages to this resources please make diff to XML files,
+- chfn: give more details about the influence of login.defs on what's allowed to
+  users.
+
+shadow-4.0.8 -> shadow-4.0.9                                           23-05-2005
+
+*** general:
+- passwd: fixed segfault in non-PAM connfiguration
+  (submited by Greg Schafer <gschafer@zip.com.au>),
+- newgrp: fixed NULL pointer dereference - getlogin() and ttyname() can
+  return NULL which is not checked (http://bugs.debian.org/162303),
+- updated translations: ro, ru,
+- added new translations: vi,
+- lib/getdef.c: leaves the table as it is, and changes from the binary search to
+  a sequential one (Lucas Correia Villa Real <lucasvr@gobolinux.org>),
+- lastlog: fixed --help message (s,--login,--user,) http://bugs.debian.org/249611.
+
+shadow-4.0.7 -> shadow-4.0.8                                           26-04-2005
+
+*** general:
+- remove not working OPIE and SKEY support,
+- chage, useradd, usermod: reduce multiple OPENLOG() calls,
+- passwd: fix #61313 Debian bug: "passwd -S root" (as a normal user) should not
+  display "You may not change the password for root.",
+- vipw: fixed race condition (Debian #242407 bug; fix by Alexander Gattin
+  <arg@online.com.ua>),
+- configure.in: add using AC_GNU_SOURCE macro for kill compilation warnings about
+  implicit declaration of function `fseeko',
+- faillog: changed faillog record display format for allow fit in 80 columns all
+  faillog atributies,
+- removed NDBM code (unused),
+- fixed use of SU_WHEEL_ONLY in su. Now su realy is avalaible for wheel group
+  members. Thanks to Mike Frysinger <vapier@gentoo.org> for report:
+  http://bugs.gentoo.org/show_bug.cgi?id=80345
+- drop never finished kerberos and des_rpc support (for kerberos support back firs
+  must be prepared modularization),
+- fixed UTMP path detection (by Kelledin <kelledin@users.sf.net>),
+- useradd: rewrited group count to dynamic (by John Newbigin
+  <jnewbigin@ict.swin.edu.au>),
+- login: fixed create lastlog entry fo users never loged in on non-PAM
+  variant of login (fix by <oracular@ziplip.com>),
+- remove handle login.defs::NOLOGIN_STR (never used),
+- useradd: fixes a potential security problem when mailbox is created in
+  useradd.
+  Patch and comment by Koblinger Egmont <egmont@uhulinux.hu>:
+  Only two arguments are passed to the open() call though it expects three
+  because O_CREAT is present. Hence the permission of the file first becomes
+  some random garbage found on the stack, and an attacker can perhaps open
+  this file and hold it open for reading or writing before the proper
+  fchmod() is executed. (Actually, we could also pass the final "mode" to
+  the open() call and then save the consequent fchmod().)
+- SELinux changes: added changes in chage, chfn, chsh, passwd for allow
+  construct more grained user password/accuunt properties on SELinux
+  policies level. Patch originally based on RH changes (submited by Chris
+  PeBenito <pebenito@gentoo.org>),
+- added SELinux changes: in libmisc/copydir.c (based on Fedora patch),
+- updated translations: cs, da, es, eu, fi, fr, it, ko, nl, pl, pt, sk, uk,
+- added new translations: tl,
+- reindent all source code using -l80,
+*** documentation:
+- it man pages (by Danilo Piazzalunga <danilopiazza@libero.it>):
+-- updated: chfn.1, chsh.1, groups.1, grpck.8, grpconv.8,
+   grpunconv.8, id.1, lastlog.8, login.1, newgrp.1, pwunconv.8, shadow.5,
+   vigr.8, vipw.8,
+-- new: chage.1, chpasswd.8, expiry.1, faillog.5, faillog.8, getspnam.3,
+   logoutd.8, porttime.5, pwck.8, shadow.3, shadowconfig.8, su.1,
+- passwd(1): fix #160477 Debian bug: improve -S output description,
+- newgrp(1): fix #251926, #166173, #113191 Debian bugs: explain why editing /etc/group   
+  (without gshadow) doesn't permit to use newgrp,
+- newgrp(1): newgrp uses /bin/sh (not bash),
+- faillog(8): updated after rewrited faillog command for use getopt_long(),
+- login(1): removed fragment about abilities pass enviroment variables in login prompt,
+- gshadow(5): new file (by Nicolas Nicolas François <nicolas.francois@centraliens.net>),
+- usermod(8): fixed #302388 Debian bug: added separated -o option description,
+
+shadow-4.0.6 -> shadow-4.0.7                                           26-01-2005
+
+- updated translations: da, es, fi, it, nl, pl, pt,
+- added zh_TW translation (from Debian resources),
+- remove unused now files in lib/ directory,
+- switch faillog to use getopt_long(),
+- added de vigr(8), vipw(8) man pages (from Debian resources),
+- added ro, sq translations (from Debian resources),
+- fixed large file support in lastlog and faillog:
+-- added AC_SYS_LARGEFILE macro to autoconf,
+-- use fseeko() instead fseek() and remove casting file offsets to unsigned
+   long.
+- lastlog:
+-- rewrited source code using the same style as in chpasswd.c,
+-- open lastlog file after finish parse comman line optiomns
+   (now --help otput can be displayd for users without lastlog
+   file read permission),
+-- cleanups in lastlog(8) man page using the same style as in
+   chpasswd(8).
+- chpasswd:
+-- switch chpasswd to use getopt_long() and adds a --md5 option
+   (by Ian Gulliver <ian@penguinhosting.net>),
+-- rewrited chpasswd(8) man page.  
+
+shadow-4.0.5 -> shadow-4.0.6                                           08-11-2004
+
+- su: fixed adding of pam_env env variables to enviroment
+  (Martin Schlemmer <azarah@nosferatu.za.org>),
+- autoconf: fixed filling MAIL_SPOOL_DIR and MAIL_SPOOL_FILE variables
+  which was allways empty (Gregorio Guidi <g.guidi@sns.it>),
+- realuy closse security bug in libmisc/pwdcheck.c,
+- added missing template/example PAM service config files for chfn, chsh and
+  userdel,
+- do not translate variable names from /etc/default/useradd during
+  "useradd -D".
+
+shadow-4.0.4.1 -> shadow-4.0.5                                         27-10-2004
+
+- change libmisc to private static library,
+- added SELinux support (basing on patch from Gentoo),
+- chage: more verbose/human readable -l output. This output is much more
+  beter for send directly via email for each users as message with account
+  status (for example as message with warning about account/password expiration),
+- login: fixed handle -f option: now it works correctly without specify "-h
+  <host>" if open login session localy is required (thanks for help
+  investigate bug for Krzysztof Kotlenga),
+- userdel: when removing a user with userdel, userdel was always exits with 1 (fixed).
+  Based on http://bugs.gentoo.org/show_bug.cgi?id=66687,
+- useradd: added handle /etc/defaults/useradd::CREATE_MAIL_SPOOL={yes|no}.
+  Now on adding user account can be also created empty user mail spool.
+  Curent code handle only mailbox.
+  TODO: add handle create user mail spool in maildir format.
+- useradd: when placing symlinks into /etc/skel copy_tree of
+  libmisc/copydir.c will properly create the symlink in the destination
+  directory but not change the ownership to the target user/group. This
+  makes httpd Option SymlinkIfOwnerMatch break for default weg pages
+  including symlinks placed into /etc/skel/public_html for example.
+  http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=66819
+- su: add pam_open_session() support. If builded without PAM support
+  propagate $DISPLAY and $XAUTHORITY enviroment variables.
+  Based on http://www.gentoo.org/cgi-bin/viewcvs.cgi/sys-apps/shadow/files/shadow-4.0.4.1-su-pam_open_session.patch?rev=1.1
+- applied 036_pam_access_with_preauth.patch Debian patch submited by Bjorn
+  Torkelsson <Bjorn.Torkelsson@hpc2n.umu.se>: add support for PAM account
+  management to restrict access using pam_access when login is invoked with -f.
+- applied Owl patches by Solar Designer <solar@openwall.com>:
+  shadow-4.0.4.1-owl-pam-auth.diff:
+    Moved the PAM authentication in user management commands after
+    command-line parsing, made it use separate service names for each command.
+    Use constant strings rather than argv[0] for syslog ident in the user
+    management commands,
+  shadow-4.0.4.1-owl-tmp.diff:
+    Remove using mktemp() if mkstemp() prototype not found (use allways mkstemp()),
+  shadow-4.0.4.1-owl-check-reads.diff:
+    Add checking for read errors in commonio and vipw/vigr (not doing so could
+    result in data loss when the records are written back),
+- fixed securirty bug in libmisc/pwdcheck.c which allow unauthorized
+  account properties modification.
+  Affected tools: chfn and chsh.
+  Bug was discovered by Martin Schulze <joey@infodrom.org>.
+- added it translation (by Danilo Piazzalunga <danilopiazza@libero.it>),
+- added sk translation (by Peter Mann <Peter.Mann@tuke.sk>, submited by Christian
+  Perrier <bubulle@kheops.frmug.org>),
+- added es translation (by Ruben Porras <nahoo82@telefonica.net>),
+- updated ko translation (by Changwoo Ryu <cwryu@debian.org>),
+- added fi translation (by Tommi Vainikainen <thv@iki.fi>),
+- new translations: bs, ca, da, eu, he, id, nb, nl, nn, pt, pt_BR, tr,
+  zh_CN (stolen from Debian),
+- remove adduser(8) roff include man page to useradd(8).
+
+shadow-4.0.4 => shadow-4.0.4.1                                         14-01-2004
+- bug fixes in automake files for generate correct tar ball on "make dist":
+  added mising "EXTRA_DIST = $(man_MANS)" in man/*/Makefile.am.
+
+shadow-4.0.3 => shadow-4.0.4                                           14-01-2004      
+
+*** general:
+- added missing information about -f options in groupadd usage mesage
+  (document this also in man page),
+- removed TCFS support (tcfs is dead),
+- convert all po/*.po files to utf-8,
+- one TODO entry gone: fix nscd flushing databases on change (use
+  per service flushing method instead HUPing nscd process),
+- removed old AUTH_METHODS dependent code,
+- chage: now all code depend on SHADOWPWD. If shadow will not be configured
+  on autoconf level for using shadow possword chage is olny stub which
+  informs "chage not configured for shadow password support."
+- dpasswd: removed,
+- login: remove handle login.defs::DIALUPS_CHECK_ENAB code,
+- login: remove handle login.defs::NO_PASSWORD_CONSOLE code,
+- ALL tools, libraries: remove old SVR4, SVR4_SI86_EUA BSD_QUOTA and ATT_AGE
+  dependent code,
+- ALL: ready for gettext 0.11.5, automake 1.7.4, autoconf 2.57,
+- logoutd, userd: handle also utmpx if avalaile,
+- newgrp: fix for non-PAM version
+  Use CLOSE_SESSIONS depending code only when USE_PAM.
+  The problem was reported by Mattias Webjorn Eriksson using Slackware
+  8.1 and reproduced it using slackware-current (9.0beta) (fix submited by
+  Simon Williams <simon@no-dns-yet.org.uk>),
+- fix in too_many_failures() function: incorrect if() condition in non-PAM
+  dependent code in fail login handling (fixed by Krzysztof
+  Oledzki <ole@ans.pl>),
+*** documentation:
+- install groups(1) man page (moved from EXTRA_DIST to man_MANS),
+- removed pwauth(8), d_passwd(5), dialups(5) man pages,
+- remove text about password aging from passwd(5) (based on Debian changes),
+- document useradd and groupadd -M option in en and pl man pages
+  (by Jakub Mikusek <mick3y@o.k.pl>).
+- added ru passwd(1) man page from KSI resources,
+- added es man pages found in Conectiva distribution resources,
+- added chch(1), chfn(1) man pages from chinese man pages translation
+  project,
+- added id(1) man page czech man pages translation project,
+- updated ja man pages and added expiry(1),
+- removed old doc/ANNOUNCE,
+- updated german passwd(1), chsh(1) and login(1) man page and added chfn(1)
+  (by Josef Spillner <josef@ggzgamingzone.org>),
+- many other cleanups and unifications in man pages.
+
+shadow-4.0.2 => shadow-4.0.3                                            13-03-2002
+
+- added variouse cs, de, fr, id, it, ko man pages found mainly in national
+  man pages translations projects (this documents are not synced with
+  current en version but you know .. "Documentations is lik sex. When it is
+  good it very very good. Whet it is bad it is better than nothing."). Any
+  changes for syncing this are welcome and for anyone who will want maintain
+  this documents directly I can give cvs write access to project resources.
+- added new de translation (by Frank Schmid <frank@cs-schmid.de>).
+- fixed building --with-shared: swapped utent (in src/login.c and
+  libmisc/utmp.c) and pwent (in libmisc/suauth.c and src/su.c)
+  definition/extern (by Dimitar Zhekov <jimmy@is-vn.bg>).
+- minor changes and updates in man pages (also merged
+  shadow-4.0.0-owl-man.patch by Solar Designer <solar@openwall.com>).
+
+shadow-4.0.1 => shadow-4.0.2                                            17-02-2002
+
+- resolve many fuzzy translations also all this which may cause problems on
+  displaing long uid/gid,
+- allow use "$" on ending in cereated by useradd usermname accounts for allow
+  create machine acounts for samba (thanks to Jerome Borsboom
+  <borsboom@tch.fgg.eur.nl> for point this problem in 4.0.1),
+- fix small but ugly bug in configure.in in libpam_mics library detection.
+
+shadow-4.0.0 => shadow-4.0.1
+
+- added ability to log session closes in newgrp
+  (Joseph Parmelee <jparmele@wildbear.com>),
+- add -pcs to .indent.pro file and reindent all code in src/,
+- remove "\n" from all SYSLOG() messages,
+- finish integrate AGING code into SHADOWPW,
+- remove handle old HAVE_USERSEC_H code,
+- updated ja and added hu man pages,
+- applied patches by Solar Designer <solar@openwall.com>:
+  shadow-4.0.0-owl-chage-drop-priv.diffd
+  shadow-4.0.0-owl-chage-ro-no-lock.diff:
+    Added locks which are needed when doing r/w accesses, not when running
+    as root.  If root does read-only, there's no lock needed. Added missing
+    "#include <errno.h>" for above (me).
+  shadow-4.0.0-owl-warnings.diff
+    Olny one fix from this patch was aplayd because other was fixed few days
+    before :)
+  shadow-4.0.0-owl-check_names.diff
+    Merge only prat this patch with checking login name matching; checking
+    is login string isn't longer than possible it will be good prepare using
+    probably _POSIX_LOGIN_NAME_MAX from <bits/posix1_lim.h>,
+  shadow-4.0.0-owl-chage-drop-priv.diff
+  shadow-4.0.0-owl-pam-auth.diff
+    Merge part with reorder initialize PAM and checkin is chage is runed by
+    root or not - now chage can be runed from non-root account for checking
+    by user own account information (if PAM enabled).
+- fixes for handle/print correctly 32bit uid/gid (Thorsten Kukuk <kukuk@suse.de>),
+- implemented functions for better reloading the nscd cache (per NSS map)
+  (Thorsten Kukuk <kukuk@suse.de>),
+- fixed warnings "not used but defined" on compile using gcc 3.0.x 
+  (bulletpr00ph <bullet@users.sourceforge.net>),
+- added ja, ko translations found in SuSE,
+- added symlinks: newgrp -> sg, vipw -> vigr,
+- added vigr(1) man page as roff .so link to vipw(1),
+- added sg(1) man page as roff .so link to newgrp(1),
+- installed fix for SEGV when using pwck -s on /etc/passwd file with
+  empty lines in it.
+  
+shadow-20001016 => shadow-4.0.0                                                 06-01-2002
+
+- fix bug discovered and fixed by Marcel Ritter
+  <Marcel.Ritter@rrze.uni-erlangen.de>
+  Due to a big buffer size in lib/commonio.c this error does only appear
+  if a line gets longer than 4096 bytes (there are probably very few people
+  stumbling across this).
+  Ths bug can be exposed by trashing /etc/groups file using useradd with script:
+       #!/bin/sh
+       typeset -i NUM
+       NUM=0
+       groupadd demogroup
+       while [ $NUM -le 1000 ]; do
+          useradd -g demogroup -G demogroup -p "NONE" user$NUM
+          NUM=$NUM+1
+       done
+- remove limit 32 to groups per user by (the same user can belong to
+  more than 32 groups) by use sysconf(_SC_NGROUPS_MAX) instead constant
+  NGROUPS_MAX (patch by Radu Constantin Rendec <radu.rendec@ines.ro>)
+  NOTE: it probably need testing on other system for add
+  some condition for using sysconf(_SC_NGROUPS_MAX) or NGROUPS_MAX constant,
+- added -s option to {pw,grp}ck to sort checked files by UID/GID,
+- drop detecting is pam_strerror() need one or two arguments. Instead using
+  PAM_STRERROR() macro use directly pam_strerror() function with two
+  arguments. pam_strerror() with one argument is obsoleted,
+- adde ja man pages (probably some man pages need update),
+- much better automake support,
+- added pt_BR man pages for gpasswd(1), groupadd(8), groupdel(8),
+  groupmod(8), shadow(5) (man pages for other nations also are welcome),
+- mamny small fixes and updates nad improvements in man pages,
+- aplayed Debian patch to man pages for shadowconfig,
+- remove limit to 6 chars logged tty name (012_libmisc_sulog.c.diff Debian
+  patch).
+
+shadow-20001012 -> shadow-20001016:
+- conditionaly disabled body reload_nscd() because not every
+  version of nscd can handle it (this can be enabled by define
+  ENABLE_NSCD_SIGHUP) (Marek Michałkiewicz  <marekm@linux.org.pl>)
+- fixes on autoconf/automake level for dist target,
+- Julianne F. Haugh new contact adress.
+
+shadow-20000902 => shadow-20001012
+
+- removed /redhat directory with obsoleted files (partialy rewrited spec
+  file is now in root directory),
+- aplayed shadow-19990827-group.patch patch from RH wich prevents adduser
+  overwrite previously existing groups in adduser,
+- added PAM support for chage (bind to "chage" PAM config file) also
+  added PAM support for all other small tools like chpasswd, groupadd,
+  groupdel, groupmod, newusers, useradd, userdel, usermod (bind to common 
+  "shadow" PAM config file) - this modificaytions mainly based on
+  modifications prepared by Janek Rękojarski <baggins@pld.org.pl>,
+- many small fixes and improvments in automake (mow "make dist"
+  works correctly),
+- added cs translation (Jiri Pavlovsky <Jiri.Pavlovsky@ff.cuni.cz>).
+
+shadow-20000826 => shadow-20000902
+
+This is probably the last release from me.
+Tomasz Kloczko <kloczek@rudy.mif.pg.gda.pl> is the new maintainer.
+Good luck!
+
+(I'm still interested to know what is going on with this package,
+which is fairly important to many Linux distributions, so please
+Cc: marekm@linux.org.pl in any related discussions - just don't
+expect me to respond quickly...)
+
+Previous warning still applies - be careful!
+
+- applied some of the Red Hat patches (revised slightly), thanks to
+  Bernhard Rosenkraenzer <bero@redhat.de>: fix for truncated long
+  lines (>8K) in /etc/group, send SIGHUP to nscd (caching daemon
+  in glibc 2.1.x) after changing anything, add usermod -L and -U
+  options, remove LOG_CONS from openlog(), chage -d and -E handles
+  dates in yyyy-mm-dd format ('/' is not required)
+- various cleanups
+
+shadow-19990827 => shadow-20000826
+
+WARNING: this release is not tested (other than that it compiles for me),
+please be careful.  Previous release was a year ago, so it is really time
+to release something and start looking for a new, better maintainer...
+(I've been extremely busy recently.  Credit for most of the real work,
+such as complete PAM support, should go to Ben Collins <bcollins@debian.org>
+who maintains this package for Debian.)
+
+- merged most of the changes from Debian (not all of them yet, PAM support
+  should be complete but is not tested - need to upgrade to potato first)
+- added Polish translations of manual pages from PLD
+- change sulog() to not depend on global variables oldname, name
+- try to not follow symbolic links when deleting files recursively
+  in userdel (still not perfect, safest to do it in single user mode)
+- removed workarounds for ancient (pre-ANSI) C compilers - use gcc!
+  (a few ANSI C constructs were used already, and no one complained)
+- updated author's e-mail address (jfh@bga.com -> jfh@austin.ibm.com)
+
+shadow-19990709 => shadow-19990827
+
+- upgrade to autoconf-2.13, automake-1.4, libtool-1.3.3
+- i18n: added French translation by Vincent Renardias <vincent@ldsol.com>
+- i18n: added Swedish translation by Kristoffer Brånemyr <ztion@swipnet.se>
+- logoutd no longer reads /etc/logoutd.mesg at startup - instead, read
+  it when sending to luser's tty (no need to reload with SIGHUP)
+- added support for "usergroups" feature often found in Linux distributions
+  (if USERGROUPS_ENAB in login.defs set to "yes", uid != 0, uid == gid, and
+  username == groupname, then set umask to 002 instead of 022)
+- Debian: pwck and grpck are now run from a daily cron job (root will
+  receive an e-mail if something is wrong), and at system startup
+- added support for setting umask in /etc/limits
+- when using OPIE, re-prompt with echo on after empty password was entered
+- GETPASS_ASTERISKS now run time configurable (login.defs)
+- getpass() now uses stdin and stderr (not stdout) if it can't open /dev/tty
+- getpass() allows all input to be erased using Control-U, and beeps when
+  too many characters are entered
+- removed obsolete sgtty support, in 1999 everyone should have termios :)
+- Debian: tar wrapper no longer needed to build packages as non-root user
+  (install libtricks, and use "dpkg-buildpackage -rfakeroot" instead)
+- Debian: changes for GNU Hurd by Marcus Brinkmann <brinkmd@debian.org>:
+  dpkg-architecture, cross compilation, only build passwd, add
+  etc/login.defs.hurd conffile, conditionalize CBAUD
+- newgrp sets $HOME before running the new shell
+- both "sg group command" (usage message) and "sg group -c command"
+  (man page) work, updated both the usage message and the man page :)
+- i18n: added missing _() for some translatable strings
+
+shadow-19990607 => shadow-19990709
+
+- added PAM support to chfn and chsh (thanks to Thorsten Kukuk)
+- fixed a bug in newgrp if the user is in >= 17 groups
+- added @LIBSKEY@ to LDADD for all programs (for some reason,
+  almost all programs need it if skey/opie support is enabled)
+- changed grpconv/grpunconv to compile with --disable-shadowgrp
+- changed faillog to do something (assume -p) with no options specified
+- updated version of the udbachk passwd/shadow/group file integrity
+  checker (contrib/udbachk.v012.tgz)
+
+shadow-19990307 => shadow-19990607
+
+- upgraded to libtool-1.2, latest config.{guess,sub}
+- added missing #include "defines.h" in libmisc/login_desrpc.c - thanks
+  to almost everyone for reporting it :-)
+- moved PAM-related defines to pam_defs.h
+- added some braces to if/else to avoid egcs warnings
+- started adding PAM support to login (based on util-linux, not finished yet)
+- changed "!" to "x" for pw_passwd in src/newusers.c
+- a few more Y2K fixes
+- added contrib/udbachk.tgz (passwd/shadow/group file integrity checker),
+  thanks to Sami Kerola
+- Debian: made /etc/{limits,login.access,login.defs,porttime,securetty}
+  files all mode 0600 (Bug#38729 - login: /etc/limits is world readable)
+- updated mailing list information (moved again, now hosted by SuSE),
+  updated README.mirrors, other minor documentation updates
+- made getpass work with redirected stdin
+- new readpass echoing asterisks disabled by default by popular demand
+  (can be enabled at compile time: ./configure --enable-readpass)
+- the random number of asterisks in readpass is now more random
+  (random number generator initialization was missing)
+- commented out --enable-md5crypt (obsolete) in configure.in
+- when checking for libskey, link with -lcrypt if libcrypt is available
+  (otherwise the configure test for libskey fails - libskey needs libcrypt)
+- added Package/Version ident strings (so you can use the RCS "ident"
+  command to check any binary, which version of shadow it comes from)
+
+shadow-981228 => shadow-19990307
+
+- added support for setting process priority in /etc/limits
+- i18n: updated Greek translation
+- i18n: added Polish translation by Arkadiusz Miskiewicz
+- documented the -p option in useradd.8 and usermod.8 man pages
+- some "const" gcc warning fixes
+- attempt to fix lib/snprintf.c compilation problems
+- added restart/reload/force-reload to /etc/init.d/logoutd (found by lintian)
+- always require password for root logins (even with NO_PASSWORD_CONSOLE)
+- workaround for RedHat's CREATE_HOME feature in /etc/login.defs
+- changed to Y2K compatible version numbering
+- more Y2K fixes, use the ISO 8601 date format (yyyy-mm-dd) for default
+  values of user-entered dates (you can still enter dates in any format
+  supported by GNU date)
+- oops, added doc/README.nls to list of files to distribute
+- added missing sanitize_env() call to src/login.c
+- debian/rules installs /bin/login non-setuid by default, just in case...
+- build Debian packages with cracklib support (depends on cracklib-runtime)
+
+shadow-980724 => shadow-981228
+
+- login now clears the username in argv[] (in case someone types the
+  password instead of username, by mistake)
+- i18n support, Greek translation (Nikos Mavroyanopoulos), see README.nls
+- updated author's e-mail address (jfh@tab.com -> jfh@bga.com)
+- new getpass() replacement that displays *'s (Pavel Machek)
+- no password required when logging in from ttys listed under
+  NO_PASSWORD_CONSOLE in login.defs (Pavel Machek)
+- fixed limits code so RLIMIT_AS should work
+- upgraded to Debian 2.0
+- built a new machine (P2 350MHz, 64MB RAM) so the thing can be compiled
+  in reasonable time again
+- upgraded to automake-1.3, libtool-1.0h (also new config.guess and
+  config.sub that work on i686)
+- usermod fixed to handle group names starting with digits (not recommended)
+
+shadow-980626 => shadow-980724
+
+- security: login no longer gives you a root shell if setgid()
+  or initgroups() or setuid() fails for any reason, discovered
+  by Ted Hickman <thickman@sy.net>
+- remove libshadow.so -> libshadow.so.x.x symlink after install
+- a few int -> uid_t type cleanups
+- fail immediately (don't retry) in *_lock() if euid != 0
+- added sample PAM config files etc/pam.d/{passwd,su}
+- preliminary PAM support in su (untested - use at your own risk,
+  comments and patches welcome!)
+- cleanup and more comments in OPIE code (Algis Rudys)
+- added support for TCFS (Transparent Cryptographic File System)
+  (use ./configure --with-libtcfs, see http://tcfs.dia.unisa.it/
+  for more info), thanks to Aniello Del Sorbo
+
+shadow-980529 => shadow-980626
+
+- fixed bug in commonio_lock() (infinite recursion if lckpwdf() not
+  used and database cannot be locked), thanks to Jonathan Hankins
+- fixed bug in copy_tree() (NUL-terminate readlink() results),
+  thanks to Lutz Schwalowsky
+- no need to press Enter after Ctrl-C to interrupt password prompt
+- removed a few harmless gcc warnings
+- secure RPC login disabled if <rpc/key_prot.h> not found (glibc 2.0)
+- faillog.8: changed /usr/adm -> /var/log
+- pwconv.8: documented that it may fail on invalid password files
+
+shadow-980417 => shadow-980529
+
+- fixed "interesting" strzero() bug introduced by me in 980417:
+  strzero(cp) didn't work as intended (the macro used a local
+  variable called "cp" - oops...); Leonard N. Zubkoff was the
+  first person to report it - thanks!
+- fixed usermod -e to accept empty argument (like useradd),
+  thanks to Martin Bene
+- several changes from Debian 980403-0.2, see debian/changelog
+- added contrib/shadow-anonftp.patch (not yet merged, sorry...)
+  thanks to Calle Karlsson
+
+shadow-980403 => shadow-980417
+
+- fixed login session limits (again - broken since 980130)
+- more symbolic constants for exit status values
+- fixed logoutd to work with 8-character usernames in utmp
+  (no room for terminating NUL!)
+- various fixes to make the code more glibc2-friendly
+- updated doc/cracklib26.diff (fix for empty gecos, etc.)
+- updated the files in redhat/ from shadow-utils-970616-11.src.rpm
+  (RH 5.0 updates)
+
+shadow-980130 => shadow-980403
+
+- security: su now creates the sulog file (if enabled and doesn't
+  already exist) with umask 077
+- hopefully removed arbitrary group size limits (not yet for
+  shadow groups though - sgetsgent() still needs a rewrite,
+  but I don't want to delay this release any longer...)
+- fixed NULL dereference in groupmod -n
+
+shadow-971215 => shadow-980130
+
+- Debian binary packages can be built without root privileges
+  (tar wrapper - debian/tar.c)
+- new subdir "redhat" (needs more work, see redhat/README)
+- in several places, exit(127) if exec fails with ENOENT, and
+  exit(126) on other errors (as in ksh and bash)
+- renamed getpass() and md5_crypt() to libshadow_* to avoid name
+  conflicts with libc functions - md5_crypt() is also in libcrypt.a
+  on Linux/PPC, thanks to Anton Gluck <gluc@midway.uchicago.edu>
+- handle crypt() returning NULL (possible according to Single Unix
+  Spec) more gracefully (exit instead of SIGSEGV)
+- fixed bug in putgrent() that showed up when realloc() moved the
+  buffer while expanding it, thanks to Floody <flood@evcom.net>
+- fixed bug in login session limits (with a limit set to N logins,
+  only N-1 logins were allowed), thanks to Floody <flood@evcom.net>
+- upgraded to libtool-1.0h (now recognizes GNU ld on Debian 1.3.1)
+- newer config.guess and config.sub (should work on x86 for x > 5)
+- removed doc/automake-1.0.diff (obsoleted by automake-1.2)
+- added doc/cracklib26.diff (some patches for cracklib-2.6)
+- documented more (not all yet) login.defs(5) settings
+- replaced more exit status numeric values with #defines
+- shadow-utils.spec now generated from shadow-utils.spec.in
+  (so I don't have to edit version numbers for every new release)
+- groupadd -f option, based on RedHat's shadow-utils-970616-9 patch
+  ("force" - exit(0) if the group already exists); other RedHat-
+  specific options not added yet (best done in a perl script that
+  runs useradd/usermod/groupadd - see Debian's adduser-3.x)
+- added -O option (override login.defs values) to useradd and groupadd
+- if usermod can't update the group file(s), exit(10) but update the
+  password file(s) anyway (as documented by Solaris man page)
+- useradd should no longer set sp_expire to the current date (oops)
+- configure.in: added --enable-desrpc, check for gethostbyname in libc
+  before trying libnsl (necessary for Solaris; not for Linux or Irix,
+  even though libnsl may be present), fixed pw_age/pw_comment/pw_quota
+  detection, setpgrp vs. setpgid, other minor tweaks
+- various */Makefile.am tweaks
+- login.defs: added FAKE_SHELL - program to run instead of the login
+  shell, with the real shell in argv[0] (Frank Denis)
+- login.defs: ignore case in yes/no settings
+- more E_* defines instead of hardcoded numbers for exit()
+- added sanitize_env() for setuid programs
+- login_desrpc() checks for getnetname() errors
+- new password is not "too similar" if it is long enough
+- replacement strstr() was static, no one noticed :-)
+- {pw,spw}_lock() and {pw,spw}_unlock() track the lock count and call
+  lckpwdf() and ulckpwdf() as needed, *_lock_first() hack removed
+- login sets $REMOTEHOST for remote logins
+- added newgrp -l option (Single Unix Spec, same as "-")
+- EXPERIMENTAL shared lib support using libtool (libshadow.so saves about
+  200K of disk space on Linux/x86), enabled by default if supported by
+  the system, use ./configure --disable-shared if it causes any problems.
+  Warning: libshadow.so is intended for internal use by this package
+  only - binary compatibility with future releases is not guaranteed.
+  There should be no need to link any other programs with libshadow.so -
+  the libshadow.so -> libshadow.so.x.x symlink is unnecessary.
+- pam_strerror() takes one or two arguments, depending on the Linux-PAM
+  version (!) - added check to configure; fixed do_pam_passwd prototype
+- libmisc/login_access.c should compile on Linux/PPC and Solaris
+- added information about the new ftp site to doc/README.mirrors
+
+shadow-971001 => shadow-971215
+
+- added workaround for NYS libc 5.3.12 (RedHat 4.2) bug to grpck
+- updated the RPM .spec file
+- renamed rlogin() to do_rlogin() to avoid Linux/PPC build problem
+  (glibc defines something else named "rlogin" in utmpbits.h ?)
+- added MD5 checksums in Debian packages
+- added -p and -g options to vipw (edit the password or group file
+  respectively, regardless of the command name in argv[0])
+- removed old DBM support (NDBM code is still there)
+- fixed a bug in gpasswd: current username was incorrectly identified as
+  "root" because of setuid(0) done too early.  It may be a security hole
+  when using shadow groups - if "root" is listed as a group administrator,
+  any user can add/remove members in that group.  Thanks to Jesse Thilo.
+- gpasswd now logs which user (root or group admin) made the changes
+- passwd now uses $PATH to search for the chfn, chsh, gpasswd commands
+- newgrp and add_groups() allocate supplementary group lists dynamically
+- moved check_shell() from src/chsh.c to libmisc/chkshell.c
+- CHFN_RESTRICT in login.defs can now specify exactly which fields may be
+  changed by regular users (any combination of letters "frwh")
+- fixed contrib/pwdauth.c segfault with non-existent usernames
+- minor change in lib/getdef.c to handle quotes better (Juergen Heinzl)
+- new date parsing code (from GNU date) used by useradd, usermod, chage
+- upgraded to automake-1.2, added libtool-0.7 (no libshadow.so yet)
+- converted code to ANSI C, added ansi2knr (untested - use gcc!)
+- fixed useradd -G segfault (one '*' that shouldn't be there)
+- allow 8-bit characters in chfn
+- added support for RLIMIT_AS (max address space) in libmisc/limits.c
+- changed the handling of NIS plus entries in password files
+- some more tweaking in various debian/* files
+- logoutd uses getutent() instead of reading utmp file directly
+- fixed lckpwdf() called twice (and failing) when changing password
+  if the user is not listed in /etc/shadow (Mike Pakovic)
+- erase and kill characters left unchanged if not defined in login.defs
+
+shadow-970616 => shadow-971001
+
+- Debian: mkpasswd no longer installed (dbm files not supported)
+- chpasswd checks for shadow/non-shadow at run time, too
+- added chpasswd -e (input file with encrypted passwords) - Jay Soffian
+- changed libmisc/login_access.c as suggested by Dave Hagewood
+- replaced sprintf() with snprintf() in several places
+- added lib/snprintf.[ch] (from XFree86) for systems without snprintf()
+- minor tweaks in contrib/adduser.c (/usr/local -> /usr)
+- non-root users can only run su with a terminal on stdin
+- temporarily disabled DES_RPC because getsecretkey() causes login to hang
+  for 5 minutes on at least one RH 4.0 system.  Not sure if this is a bug
+  in libc, or system misconfiguration.  Needs further investigation.
+- check for strerror() and -lrpcsvc (should compile on SunOS again)
+- fixed free() called twice in libmisc/mail.c
+- added information about mirror sites (doc/README.mirrors)
+- updated pwconv.8 and pwunconv.8 man pages
+- "make install" now installs pwconv, pwunconv, grpconv, grpunconv
+- pwauth.8 no longer installed (AUTH_METHODS not supported by default)
+- corrected su.1 man page ($SHELL not used)
+- no need for --with-md5crypt if the MD5-based crypt() is already in libc
+  (or another library specified in /etc/ld.so.preload - Linux ld.so 1.8.0+)
+- cleaned up PASS_MAX in getpass() (127 always assumed)
+- default editor for vipw changed from /bin/ae to a real editor :)
+
+shadow-970601 => shadow-970616
+
+- fixed execlp call (missing NULL) in src/vipw.c
+- vipw now preserves permissions on edited files
+- commented out the xdm-shadow hack in shadowconfig
+- improved RedHat spec file (Timo Karjalainen)
+- updated mailing list information
+- added information about the shadow paper (doc/README.shadow-paper)
+- renamed doc/console.c.spec (confused RPM)
+
+shadow-970502-2 => shadow-970601
+
+- fixed a typo in libmisc/mail.c causing login to segfault
+  if MAIL_CHECK_ENAB=yes (sorry!)
+- patches for OPIE support (Algis Rudys) (untested)
+- programs that modify /etc/passwd or /etc/shadow will use
+  lckpwdf() if available
+- now compiles with PAM support! (still untested)
+- cosmetic error message changes (prefixed by argv[0]:)
+
+shadow-970216 => shadow-970502-2
+
+- shadow group support fixes (grpconv didn't work - for some
+  reason, putsgent() returns 1 instead of 0 on success;
+  now -1 = failure, anything else = success)
+- upgraded to autoconf-2.12
+- pwconv and pwunconv now follow other UN*X systems and SVID3
+  (modify files in place), original versions moved to "old"
+- scologin.c moved to "old" (it was only for SCO Xenix) so
+  people stop sending patches for scologin.c gcc warnings :)
+- don't use the MD5* functions in libmisc/salt.c (glibc has
+  the new md5 crypt(), but no <md5.h> and MD5* functions!)
+- support for MkLinux, Solaris, JIS, Qmail (Frank Denis)
+- "passwd -S -a" now really works
+- support for Debian, vipw, a few fixes (Guy Maor)
+- src/login.c radius bug fix (Rafal Maszkowski)
+- ISSUE_FILE_ENAB -> ISSUE_FILE in the sample /etc/login.defs
+- fixes for glibc and DES_RPC (Thorsten Kukuk)
+- limits.5 man page (Luca Berra)
+- expiry will work setgid shadow too, removed euid 0 check
+- added check for a64l() to configure (glibc)
+
+shadow-961025 => shadow-970216
+
+- major rewrite of *io.c (no more 4 copies of almost identical code)
+- use fsync() (if available) instead of sync() when updating password files
+- use fchmod() and fchown() if available
+- keep the NIS "plus on a line by itself" entries at end of passwd/group
+- configure checks location of passwd/chfn/chsh programs (/usr/bin or /bin)
+- passwd -S -a: list information about all users (root only)
+- passwd -k: change only expired passwords
+- passwd -q: quiet mode
+- first attempt at PAM support in passwd
+- passwd updates the non-shadow password if /etc/shadow exists but the
+  user has no shadow password
+- passwd logs who changed the password, added hook to allow non-root
+  administrators who can change passwords (not implemented yet)
+- su sets $HOME even without the "-" option (suggested by Joey Hess)
+- added -p (set encrypted password) option to useradd and usermod
+  (idea from hpux10 - undocumented option used internally by SAM)
+- useradd -D -e does the right thing (set default expiration date)
+- USERDEL_CMD in login.defs instead of hardcoded {ATRM,CRONTAB}_COMMAND
+  because there are just too many systems that need different commands
+- removed #ifdef FAILLOG_LOCKTIME (now always enabled), warning: the
+  faillog file format has been changed (somewhere between 960129 and
+  960810), please truncate the old file (if any) to zero length
+- ISSUE_FILE (may be different from /etc/issue) instead of ISSUE_FILE_ENAB
+- wtmp, lastlog, faillog file location guessed by configure
+- separate checks for invalid user and group names, max username length
+  based on struct utmp (it's not always 8 characters)
+- pwck and grpck now check for invalid user/group names
+- pwck -q (quiet, report only serious problems) option added
+- separate cleaner sgetpwent() without the NIS magic
+- NIS entries ignored (never changed) by *io.c, pwck, grpck
+- various code cleanups
+- new get_my_pwent() function for getting my own username, uid etc.
+- faillog opens the file read-write if possible (even if not root)
+- passwd -S allowed for normal users (for their own uid only)
+- handle the case of login denied to passwordless accounts better
+  ("Login incorrect" without "Password:" prompt looks strange)
+- corrected author information and removed a copyright restriction
+
+shadow-960925 => shadow-961025
+
+- fixed a few typos in shadow group code
+- don't check for names starting with 'r' to determine if the shell
+  is restricted, use /etc/shells instead (for the "rc" shell)
+- removed extra definition of LASTLOG_FILE in configure.in
+- expiry no longer segfaults if no /etc/shadow
+- userdel -r "can't remove mailbox" warning no longer printed on success
+- useradd exit codes changed to match hpux10 man page
+- fixed possible fd leak etc. in file locking code (lib/commonio.c)
+
+shadow-960920 => shadow-960925
+
+- bug fixes to the new environment code using malloc
+- use hardcoded names instead of basename(argv[0]) for openlog() in programs
+  that users can run (chage, chfn, chsh, gpasswd, login, newgrp, passwd, su)
+- small fix to isexpired(), and use it in passwd as well
+- use strftime() and strptime() if available
+- added chmod 600 /etc/passwd- at the end of pwconv5 (backup file may
+  contain encrypted passwords!)
+- pass size to change_field (chage, chfn, chsh) instead of assuming BUFSIZ
+  (nothing bad happened yet, just a cleanup)
+- gpasswd should work with both shadow and non-shadow group passwords
+- detect unsupported options if no shadow (gpasswd, useradd, usermod)
+- passwd -e for sunos4 (ATT_AGE), untested
+- read environment from file (ENVIRON_FILE in login.defs), idea from ssh
+- small fix to l64a()
+- passwd prints a message after password successfully changed (for things
+  like poppassd which run passwd and expect some output)
+- passwd logs if password was changed by root (as opposed to a luser)
+- passwd uses current uid if no username argument and getlogin() fails
+
+shadow-960910 => shadow-960920
+
+- use malloc for environment variables, no more MAXENV (Juergen Heinzl)
+- newusers should work with both shadow and non-shadow passwords
+  (still left to do: chpasswd, gpasswd)
+- login-static no longer compiled by default
+- more SYSLOG() macros
+
+shadow-960810 => shadow-960910
+
+- updated README.linux to point to the new ftp site
+- chfn and chsh optionally (CHFN_AUTH) prompt for password like util-linux
+- man pages now closer to LDP standards (Ivan Nejgebauer)
+- newgrp uses SYSLOG_SG_ENAB (not SU) as in the /etc/login.defs comments
+- obscure.c fixed to compile with HAVE_LIBCRACK
+- cosmetic message changes in age.c
+- utmp open error check fixed in utmp.c
+- grpunconv added (Michael Meskes)
+- login reports invalid login time, not "Login incorrect" (Ivan Nejgebauer)
+- logoutd sets OPOST before writing to the tty (Ivan Nejgebauer)
+- sulogin: don't use syslog(), other minor changes (Ivan Nejgebauer)
+- passwords can be changed if sp_max == -1 (now considered infinity)
+- usermod: don't use sizeof(struct lastlog) when writing to faillog (ugh)
+- started replacing lots of #ifdef USE_SYSLOG with cleaner macros
+- contrib/rpasswd.c added (Joshua Cowan)
+- PASS_MAX is 127 with MD5_CRYPT (not just for Linux - sunos4 too...)
+- workarounds for a RedHat NYS libc getspnam() bug (if /etc/shadow
+  doesn't exist, it succeeds and returns sp_lstchg==0 instead of -1).
+
+shadow-960129 => shadow-960810
+
+- automake, configure checks for libcrypt and libcrack (Janos Farkas)
+- added --enable-shadowgrp to configure (shadow groups disabled by default)
+- should compile on SunOS 4.1.x - but it does NOT mean that it works :-)
+- login sets HUSHLOGIN=TRUE or FALSE (for shell startup scripts etc.)
+- hopefully removed all the rcsid warnings
+- contrib/atudel perl script to remove at jobs (thanks to Brian Gaeke)
+- resource limits (Cristian Gafton)
+- workaround for buggy init/getty(?) leaving junk in ut_host on RedHat
+- more fixes in man pages
+- pwck and grpck no longer suggest to run mkpasswd if *DBM not compiled in
+- most programs (groupadd, groupdel, groupmod, grpck, login, passwd, pwck,
+  su, useradd, userdel, usermod) should now work with both shadow and
+  non-shadow passwords/groups (check for /etc/shadow and /etc/gshadow at
+  run time); a few programs still left to do
+- mailbox mv/chown/rm in usermod/userdel (suggested by Cristian Gafton)
+- new contrib/adduser.c from Chris Evans
+- lots of other minor changes
+- source tree reorganization, GNU autoconf, portability cleanups
+- basename() renamed to Basename() to avoid name space confusion
+- new programs to create /etc/shadow and /etc/gshadow: pwconv5, grpconv
+- newgrp cleanup and a few fixes
+- useradd uses PASS_MAX_DAYS, PASS_MIN_DAYS and PASS_WARN_AGE
+- don't make the first group member the group admin by default
+  (define FIRST_MEMBER_IS_ADMIN to get the old gpasswd behaviour)
+- password aging constants, NGROUPS_MAX and syslog stuff in only one
+  place (defines.h) instead of repeating it in all source files...
+- added userdel -r safety check (refuse to remove the home directory
+  if it would result in removing some other user's home directory)
+- usermod -u now correctly checks for non-unique uid (unless -o)
+- sync() after updating password files, just to be more safe
+- "make install" should install /etc/login.defs if it doesn't exist
+- new option to control what happens if we can't cd to the home directory
+  (DEFAULT_HOME in /etc/login.defs)
+- enter the home directory as the user, not as root (for NFS etc.)
+- added check for Slackware bugs (nobody UID -1) in pwck and grpck
+- new CONSOLE_GROUPS feature (thanks to pacman@tardis.mars.net), it is
+  possible to add specified groups (floppy etc.) for console logins
+- new faillog feature: lock account for specified (per-user) time since
+  the last failure after exceeding the failure limit
+- new man pages (gpasswd.1, login.access.5, suauth.5)
+- fixes in man pages, renamed *.4 to *.5
+- new "contrib" directory (two adduser programs)
+- changed some "system" to "feature" #ifdefs (autoconf someday...)
+- sulogin no longer requires to be run from init, should work from rc
+  scripts too
+- changes to prevent unshadowing with libc SHADOW_COMPAT (get info
+  using xx_locate(), modify it and call xx_update(), don't write back
+  anything returned by getpwnam() etc.)
+- stupid bug fixed in lastlog.c
+- don't move non-directories in "usermod -m"
+- don't log unknown usernames (passwords mistyped for usernames) (lmain.c)
+- macros to get around ancient compilers which don't like prototypes
+- make more use of "const" (not everywhere yet)
+- added #ifdef AUTH_METHODS - very few people use administrator defined
+  authentication methods because many programs are not aware of them;
+  not supporting them makes the code simpler
+- new "save" and "restore" Makefile targets, thanks to Rafal Maszkowski
+- sgetgrent() in libshadow.a is optional, some versions of libc have it,
+  see HAVE_SGETGRENT in config.h (grent.c)
+- don't use continued lines in /etc/group, the standard getgr*() functions
+  don't support that (grent.c)
+- removed the third main() argument (according to libc docs, not allowed by
+  POSIX.1 - use environ instead) (lmain.c, smain.c, newgrp.c, sulogin.c)
+- login access control (lmain.c, login_access.c)
+- added copyright notice to login_access.c (from logdaemon-5.0)
+- detailed su access control (smain.c, suauth.c) - thanks to Chris Evans
+- added closelog() in su before executing the shell (smain.c)
+- getting current user name changed (smain.c)
+- "x" instead of "*" in pw_passwd, consistent with pwconv (useradd.c)
+- getpass() shouldn't return NULL except on errors (getpass.c)
+- moved isexpired() to isexpired.c (now part of libshadow.a) from age.c
+- SunOS4-like passwd -e (force change on next login) (isexpired.c, passwd.c)
+- can use shadow support in new versions of Linux libc instead of libshadow.a,
+  see HAVE_SHADOWPWD, HAVE_SHADOWGRP in config.h.linux (shadow.c, gshadow.c)
+- "no shadow password" not logged, the same /bin/login should work with both
+  shadow and non-shadow passwords (lmain.c)
+- some cleanup in various places (lmain.c, passwd.c)
+- new program to verify username/password pairs, for xlock etc.; it is not
+  installed by default, read the comments first (pwdauth.c)
+- authentication programs run with empty environment for safety (pwauth.c)
+- added missing fstat error checks (faillog.c, lastlog.c, setup.c, *io.c)
+- common code separated from *io.c (commonio.c)
+- ownership and permissions on password files are now preserved (we may try
+  to make more use of setgid and setuid non-root programs in the future)
+- added (untested) MD5-based crypt() from FreeBSD (md5crypt.c), see
+  MD5_CRYPT in config.h.linux and MD5_CRYPT_ENAB in login.defs.linux
+- termios/termio/sgtty macros cleaned up a bit
+
+shadow-951218 => shadow-960129
+
+Emergency bug fix release - no new features since 951218.  There are many
+new changes, but this bug really can't wait until they are tested.
+
+Probably all previous versions of the shadow suite have a serious bug which
+makes it possible to overwrite the stack by entering very long username at
+the login prompt.  This can give root access to any remote user!
+
+Changed the maximum size in login.c from BUFSIZ (1024) to 32 (to match
+size of the array in lmain.c).  Aaargh!!!
+
+shadow-951203 => shadow-951218
+
+Changes:
+- Linux utmp handling fixes (utmp.c)
+- last failure date printing fixes (failure.c)
+- minor fix to compile with USE_CRACKLIB (obscure.c)
+- eliminated the use of snprintf (env.c, lmain.c, login.c, shell.c, smain.c)
+- basename.c added, replacing duplicated code in various places
+- "su -" runs the shell with '-' in argv[0] again (smain.c)
+- removing at/cron jobs cleaned up (userdel.c)
+- /etc/gshadow should not be world-readable (sgroupio.c)
+- if fflush() failed, files were not closed (*io.c)
+- login prompt is now "hostname login: " on Linux (lmain.c, login.c)
+- "save" and "restore" targets commented out (don't work) (Makefile.linux)
+- some minor cleanups for gcc -Wall (unused variables etc.)
+- removed README.FIRST (copyrights are OK now)
+- updated ANNOUNCE, README.linux, WISHLIST
+- as suggested, converted to RCS
+
+shadow-3.3.2-951127 => shadow-951203-jfh
+
+Changes:
+- Added the BSD-style copyright to all of the files.  Any files with the
+  old copyright have multiple copyright holders and need to be cleanroomed
+  to produce BSD-style copyrightable files, or I need to get the consent
+  of the others to change the copyright.
+- Changed the ANNOUNCE file to not refer to the README.FIRST file.  Now
+  that all of the files should have the correct copyright there is no need
+  to refer to that e-mail message.
+- Changes SCCS strings to "%W% %U% %G%".  Marek needs to either convert to
+  RCS or check into SCCS and then checkout.  I'd suggest using RCS ;-)
+
+  jfh@rpp386.cactus.org
+
+shadow-3.3.2-951106 => shadow-951127
+
+Note: for now this code only supports Linux.  All the #ifdef's are there
+(and will be; support for at least SunOS 4.1.x would be nice) but:
+- I had to fix some potential security problems resulting from sloppy
+  coding (no bounds checking), and it was easier for me to use snprintf()
+  (not available on many systems, unfortunately), I'll fix that later.
+  Old versions of Linux libc don't have snprintf() either, and the one
+  in libbsd.a ignores the max size - don't use it!  (libc-4.6.27 is OK)
+- I am lazy and only updated Makefile.linux and config.h.linux this time
+- I don't have root access to non-Linux systems (this means no testing)
+- this code needs some major reorganization, which will (hopefully)
+  make porting easier
+
+Changes:
+- some code cleanup, prototypes.h, defines.h, Makefile and config.h changes
+- login can be statically linked (not that I think it's a good idea, better
+  fix the telnetd, but paranoid people will like it :-)
+- login is installed non-setuid by default
+- check for NULL from getpass()
+- wipe cleartext password from getpass() when no longer needed (pwauth.c)
+- use standard "Password: " prompt by default (pwauth.c)
+- hopefully fixed bogus sigaction() stuff (Linux only) (getpass.c)
+- oops, setrlimit wants bytes, ulimit wants 512-byte units (lmain.c)
+- Linux has <lastlog.h>
+- print ll_host on Linux too (lmain.c)
+- size checking in various places (setuid root programs, argh!)
+- preserve TERM from getty (lmain.c)
+- don't ignore SIGHUP (lmain.c)
+- :%s/setenv/set_env/g (setenv(3) conflict) (env.c, lmain.c, login.c)
+- remove LD_xxx (env.c)
+- use bzero() instead of memset() for BSD portability and less #ifdef's
+  (if the system has no bzero(), implement it as a macro using memset())
+- the above fixes wrong order of memset() parameters (log.c)
+- use getutent/pututline instead of doing it by hand (utmp.c)
+- added the new settings to login.defs.linux
+- added login_access.c to the distribution (not used yet)
+
+==========
+
+shadow-3.3.2 => shadow-3.3.2-951106
+
+- added dummy pad.c and #ifdef'ed out references to pad_auth (pwauth.c)
+- malloc/strdup error checking, hopefully no more core dumps...
+- define HAVE_RLIMIT instead of HAVE_ULIMIT for Linux (config.h.linux)
+- changed pathnames on Linux to conform to new FSSTND (/var/log etc.)
+- larger buffer for cipher, for md5 crypt() if and when (encrypt.c, passwd.c)
+- use POSIX termios whenever possible on Linux
+- list.c, removed add_list/del_list from gpmain.c, user{add,del,mod}.c
+- strtoday.c, removed duplicates from chage.c, useradd.c, usermod.c
+- login -h only for root (lmain.c)
+- login -r not needed for Linux (lmain.c)
+- sample login.defs modified for Linux (login.defs.linux)
+- swapped chfn USAGE and ADMUSAGE (chfn.c)
+- added -u to passwd usage (passwd.c)
+- no #! check necessary for Linux (shell.c)
+- define OLD_CRON for some old incompatible Linux distributions (userdel.c)
+- PASS_MAX is now 127 (not 8) for Linux (getpass.c)
+- LOGIN_RETRIES, LOGIN_TIMEOUT, PASS_CHANGE_TRIES are no longer compiled in,
+  can now be set in login.defs, old values are used as defaults (lmain.c)
+- unique uid/gid selection now more robust (useradd.c, groupadd.c)
+- UID_MIN, UID_MAX, GID_MIN, GID_MAX in login.defs (useradd.c, groupadd.c)
+- CRACKLIB_DICTPATH no longer compiled in, can be set in login.defs (passwd.c)
+- PASS_ALWAYS_WARN: warn about weak passwords even for root (passwd.c)
+- PASS_MAX_LEN, check truncated passwords again (obscure.c)
+- check for weak passwords too if previous password was empty (obscure.c)
+- CHFN_RESTRICT: don't let users change their full names (chfn.c)
+- Linux has getusershell(), use it (chsh.c)
+- check if the new shell is executable by the user (chsh.c)
+- sleep before printing "Login incorrect", not the other way around (lmain.c)
+- don't be picky about utmp only if any of -rfh flags given (lmain.c)
+- do "wheel group" more like BSD does (smain.c)
+- use getlogin() in su (smain.c)
+- UMASK from login.defs defaults to 077, not 0 (lmain.c, newusers.c)
+- #undef HAS_ATRM for Linux until atrm can do what we need (config.h.linux)
+- Linux has most commands in /usr/bin, not /bin (age.c, passwd.c, userdel.c)
+- ULIMIT from login.defs works on systems using setrlimit() too (lmain.c)
+- LOGIN_STRING should work now (pwauth.c, getdef.c)
+- kludge to avoid conflict with Linux <shadow.h> (gshadow.h)
+- mv Makefile Makefile.xenix ; mv config.h config.h.xenix - so that they are
+  not lost when you copy the right ones to Makefile and config.h
+
+==========
+
+shadow-3.3.2
+
+Original version, received directly from the author.
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..5a05783
--- /dev/null
+++ b/README
@@ -0,0 +1,117 @@
+Shadow SITES
+============
+
+Homepage
+       http://pkg-shadow.alioth.debian.org/
+
+FTP site
+       ftp://pkg-shadow.alioth.debian.org/pub/pkg-shadow
+
+SVN repository
+       anonymous read only access: svn://svn.debian.org/pkg-shadow/upstream
+
+SVN web interface
+       http://svn.debian.org/wsvn/pkg-shadow/upstream
+       or
+       http://svn.debian.org/viewsvn/pkg-shadow/upstream
+
+Mailing lists
+       for general discuss: pkg-shadow-devel@lists.alioth.debian.org
+       commit list: pkg-shadow-commits@lists.alioth.debian.org
+
+Mailing lists subscription
+       http://lists.alioth.debian.org/mailman/listinfo/pkg-shadow-devel
+       http://lists.alioth.debian.org/mailman/listinfo/pkg-shadow-commits
+
+Mailing lists archives:
+       http://lists.alioth.debian.org/pipermail/pkg-shadow-devel/
+       http://lists.alioth.debian.org/pipermail/pkg-shadow-commits/
+
+S/Key support:
+       Shadow can be built with S/Key support using the S/Key package from:
+
+       http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libskey/
+       or
+       http://gentoo.osuosl.org/distfiles/skey-1.1.5.tar.bz2
+
+Authors and contributors
+========================
+
+Thanks to at least the following people for sending me patches, bug
+reports and various comments.  This list may be incomplete, I received
+a lot of mail...
+
+
+Adam Rudnicki <adam@v-lo.krakow.pl>
+Alan Curry <pacman@tardis.mars.net>
+Alexander O. Yuriev <alex@bach.cis.temple.edu>
+Algis Rudys <arudys@rice.edu>
+Andreas Jaeger <aj@arthur.rhein-neckar.de>
+Aniello Del Sorbo <anidel@edu-gw.dia.unisa.it>
+Anton Gluck <gluc@midway.uchicago.edu>
+Arkadiusz Miskiewicz <misiek@pld.org.pl>
+Ben Collins <bcollins@debian.org>
+Brian R. Gaeke <brg@dgate.org>
+Calle Karlsson <ckn@kash.se>
+Chip Rosenthal <chip@unicom.com>
+Chris Evans <lady0110@sable.ox.ac.uk>
+Cristian Gafton <gafton@sorosis.ro>
+Dan Walsh <dwalsh@redhat.com>
+Darcy Boese <possum@chardonnay.niagara.com>
+Dave Hagewood <admin@arrowweb.com>
+David A. Holland <dholland@hcs.harvard.edu>
+David Frey <David.Frey@lugs.ch>
+Ed Carp <ecarp@netcom.com>
+Floody <flood@evcom.net>
+Frank Denis <j@4u.net>
+George Kraft IV <gk4@us.ibm.com>
+Greg Mortensen <loki@world.std.com>
+Guido van Rooij
+Guy Maor <maor@debian.org>
+Hrvoje Dogan <hdogan@bjesomar.srce.hr>
+Janos Farkas <chexum@bankinf.banki.hu>
+Jay Soffian <jay@lw.net>
+Jesse Thilo <Jesse.Thilo@pobox.com>
+Joey Hess <joey@kite.ml.org>
+John Adelsberger <jja@umr.edu>
+Jonathan Hankins <jhankins@mailserv.homewood.k12.al.us>
+Jon Lewis <jlewis@lewis.org>
+Joshua Cowan <jcowan@hermit.reslife.okstate.edu>
+Judd Bourgeois <shagboy@bluesky.net>
+Juergen Heinzl <unicorn@noris.net>
+Juha Virtanen <jiivee@iki.fi>
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
+Leonard N. Zubkoff <lnz@dandelion.com>
+Luca Berra <bluca@www.polimi.it>
+Lukáš Kuklínek <lkukline@redhat.com>
+Lutz Schwalowsky <schwalow@mineralogie.uni-hamburg.de>
+Marc Ewing <marc@redhat.com>
+Martin Bene <mb@sime.com>
+Martin Mares <mj@gts.cz>
+Michael Meskes <meskes@topsystem.de>
+Michael Talbot-Wilson <mike@calypso.bns.com.au>
+Mike Frysinger <vapier@gentoo.org>
+Mike Pakovic <mpakovic@users.southeast.net>
+Nicolas François <nicolas.francois@centraliens.net>
+Nikos Mavroyanopoulos <nmav@i-net.paiko.gr>
+Pavel Machek <pavel@bug.ucw.cz>
+Phillip Street
+Rafał Maszkowski <rzm@icm.edu.pl>
+Rani Chouha <ranibey@smartec.com>
+Sami Kerola <kerolasa@rocketmail.com>
+Sebastian Rick Rijkers <srrijkers@gmail.com>
+Seraphim Mellos <mellos@ceid.upatras.gr>
+Shane Watts <shane@nexus.mlckew.edu.au>
+Steve M. Robbins <steve@nyongwa.montreal.qc.ca>
+Thorsten Kukuk <kukuk@suse.de>
+Tim Hockin <thockin@eagle.ais.net>
+Timo Karjalainen <timok@iki.fi>
+Ulisses Alonso Camaro <ulisses@pusa.eleinf.uv.es>
+Werner Fink <werner@suse.de>
+
+Maintainers
+===========
+
+Tomasz Kłoczko <kloczek@pld.org.pl> (2000-2007)
+Nicolas François <nicolas.francois@centraliens.net> (2007-now)
+
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..a993b6d
--- /dev/null
+++ b/TODO
@@ -0,0 +1,114 @@
+/etc/default/useradd
+ * GROUP=1000 should accept a group name.
+
+Check when RLOGIN is enabled if ruserok() exists
+
+Move selinux_file_context out of libmisc/copydir.c
+
+Review hardcoded root account?
+
+review all call to strto
+
+libmisc/cleanup_user.c
+       cleanup needed (cleanup_report_add_user* not used)
+
+
+libxcrypt support
+ * http://wiki.linuxfromscratch.org/patches/browser/trunk/shadow/shadow-4.0.18.1-owl_blowfish-1.patch
+
+implement getlong, getulong.
+       avoid atoi, atol, atoul, strtol, strtoul, ...
+
+manpages: comment the RLOGIN parts
+
+Replace build_list (in lib/gshadow.c) and list (in lib/sgetgrent.c) by
+comma_to_list()
+
+Revert the modified files if all files could not be changed.
+  * or warn and indicate which files were modified and which were not.
+  * check the order the files are modified.
+
+report nscd_flush_cache failures?
+call nscd from the programs or from lib (commonio?)
+
+PAM: check if a non-interactive conversation function could be used to set
+the password in chpasswd and newusers
+
+WITH_SELINUX
+  - review all tools to check that the strategies are consistent
+
+chage, chfn, chsh: same change needed as in passwd.
+  - probably need moving check_selinux_access to a separate file.
+
+testsuite
+ - newgrp
+   - test with unknown user's GID
+
+newusers
+ - add logging to SYSLOG & AUDIT
+ - use CREATE_HOME
+ - Add a -Z option (see useradd / usermod)
+
+Document when/where option appeared, document whether an option is standard
+or not.
+
+Check all the expiry semantics
+
+ALL:
+- move base passwd/shadow/group/gshadow operation to module for allow write
+  different backend modules for db, NIS, LDAP and others. Default backend it
+  will be goot if will be chosen depending on /etc/nsswitch.conf and allow
+  override this by -r <repository> options (where the <repository> can be
+  file, db, nis nisplus, ldap .. like on /etc/nsswitch.conf in service column).
+  passwd have old piece of code with handling -r option and it will be good
+  finish this and propagate on other shadow tools for allow operate on other
+  user databases by well known tools.
+- Protect against signals. Register do_cleanups in a signal handler.
+
+- login.defs
+  - generate depending on configuration
+
+- useradd:
+  - add handle create user mail spool in maildir format.
+  - Add support for -k in -D mode
+  - Add support for -K in -D mode
+  - Add option to create or not the mail spool (and set the default in -D
+    mode)
+  - Change -l to reset the entry if an entry was already there
+  - set the mask in mkdir?
+
+- userdel:
+  - add backup option for the removal of user resources,
+  - user_busy: check that the user is not running any processes.
+  - missing "deleting group" FAILED
+  - home dir removed, but userdel may fail and may leave the user
+    => warning needed
+
+- usermod
+  - add an option equivalent to useradd's -l (only when uid is changed)
+  - the mode of new home directories should be set according to the
+    original mode. Does copy_tree does this?
+  - user renamed, order is not kept in /etc/group (see
+    47_usermod-l_no_shadow_file). This is a problem when the first user is
+    considered as the admin.
+  - see mail "user ID change" on  April, 15
+    + fix call to chown (combination of -m and -u/-g)
+    + add tests
+
+- passwd:
+  - check combination of options (e.g. -u/-l)
+  - when -u refuse to unlock because it would create an empty password, it
+    should not display "Password changed."
+    exit instead?
+
+- newgrp: check the USE_PAM section.
+
+- pwck
+  - Add check to move passwd passwords to shadow if there is a shadow
+    entry (with a password).
+  - Add check to move passwd passwords to shadow if there is a shadow
+    file.
+
+- su
+  - add a login.defs configuration parameter to add variables to keep in
+    the environment with "su -l" (TERM/TERMCOLOR/...
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644 (file)
index 0000000..dd01f16
--- /dev/null
@@ -0,0 +1,54 @@
+# Checks the location of the XML Catalog
+# Usage:
+#   JH_PATH_XML_CATALOG([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# Defines XMLCATALOG and XML_CATALOG_FILE substitutions
+AC_DEFUN([JH_PATH_XML_CATALOG],
+[
+  # check for the presence of the XML catalog
+  AC_ARG_WITH([xml-catalog],
+              AC_HELP_STRING([--with-xml-catalog=CATALOG],
+                             [path to xml catalog to use]),,
+              [with_xml_catalog=/etc/xml/catalog])
+  jh_found_xmlcatalog=true
+  XML_CATALOG_FILE="$with_xml_catalog"
+  AC_SUBST([XML_CATALOG_FILE])
+  AC_MSG_CHECKING([for XML catalog ($XML_CATALOG_FILE)])
+  if test -f "$XML_CATALOG_FILE"; then
+    AC_MSG_RESULT([found])
+  else
+    jh_found_xmlcatalog=false
+    AC_MSG_RESULT([not found])
+  fi
+
+  # check for the xmlcatalog program
+  AC_PATH_PROG(XMLCATALOG, xmlcatalog, no)
+  if test "x$XMLCATALOG" = xno; then
+    jh_found_xmlcatalog=false
+  fi
+
+  if $jh_found_xmlcatalog; then
+    ifelse([$1],,[:],[$1])
+  else
+    ifelse([$2],,[AC_MSG_ERROR([could not find XML catalog])],[$2])
+  fi
+])
+
+# Checks if a particular URI appears in the XML catalog
+# Usage:
+#   JH_CHECK_XML_CATALOG(URI, [FRIENDLY-NAME], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+AC_DEFUN([JH_CHECK_XML_CATALOG],
+[
+  AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
+  AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
+  if $jh_found_xmlcatalog && \
+     AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
+    AC_MSG_RESULT([found])
+    ifelse([$3],,,[$3
+])dnl
+  else
+    AC_MSG_RESULT([not found])
+    ifelse([$4],,
+       [AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])],
+       [$4])
+  fi
+])
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644 (file)
index 0000000..98ab5b8
--- /dev/null
@@ -0,0 +1,11095 @@
+# generated automatically by aclocal 1.10.2 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],,
+[m4_warning([this file was generated for autoconf 2.63.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# gettext.m4 serial 60 (gettext-0.17)
+dnl Copyright (C) 1995-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl    default (if it is not specified or empty) is 'no-libtool'.
+dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl    depending on --{enable,disable}-{shared,static} and on the presence of
+dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl    $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl    implementations (in libc or libintl) without the ngettext() function
+dnl    will be ignored.  If NEEDSYMBOL is specified and is
+dnl    'need-formatstring-macros', then GNU gettext implementations that don't
+dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries.  If empty,
+dnl    the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl    and used.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl    Catalog format: none
+dnl    Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+  dnl Argument checking.
+  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+    [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+  define([gt_included_intl],
+    ifelse([$1], [external],
+      ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+      [yes]))
+  define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+  gt_NEEDS_INIT
+  AM_GNU_GETTEXT_NEED([$2])
+
+  AC_REQUIRE([AM_PO_SUBDIRS])dnl
+  ifelse(gt_included_intl, yes, [
+    AC_REQUIRE([AM_INTL_SUBDIR])dnl
+  ])
+
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Sometimes libintl requires libiconv, so first search for libiconv.
+  dnl Ideally we would do this search only after the
+  dnl      if test "$USE_NLS" = "yes"; then
+  dnl        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+  dnl the configure script would need to contain the same shell code
+  dnl again, outside any 'if'. There are two solutions:
+  dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+  dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+  dnl documented, we avoid it.
+  ifelse(gt_included_intl, yes, , [
+    AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+  ])
+
+  dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+  gt_INTL_MACOSX
+
+  dnl Set USE_NLS.
+  AC_REQUIRE([AM_NLS])
+
+  ifelse(gt_included_intl, yes, [
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+  ])
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+  dnl Add a version number to the cache macros.
+  case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+  dnl If we use NLS figure out what method
+  if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+    ifelse(gt_included_intl, yes, [
+      AC_MSG_CHECKING([whether included gettext is requested])
+      AC_ARG_WITH(included-gettext,
+        [  --with-included-gettext use the GNU gettext library included here],
+        nls_cv_force_use_gnu_gettext=$withval,
+        nls_cv_force_use_gnu_gettext=no)
+      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+    ])
+        dnl User does not insist on using GNU NLS library.  Figure out what
+        dnl to use.  If GNU gettext is available we use this.  Else we have
+        dnl to fall back to GNU NLS library.
+
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
+
+        AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+         [AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+            [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
+            [eval "$gt_func_gnugettext_libc=yes"],
+            [eval "$gt_func_gnugettext_libc=no"])])
+
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+          dnl Sometimes libintl requires libiconv, so first search for libiconv.
+          ifelse(gt_included_intl, yes, , [
+            AM_ICONV_LINK
+          ])
+          dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+          dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+          dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+          dnl even if libiconv doesn't exist.
+          AC_LIB_LINKFLAGS_BODY([intl])
+          AC_CACHE_CHECK([for GNU gettext in libintl],
+            [$gt_func_gnugettext_libintl],
+           [gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+            dnl Now see whether libintl exists and does not depend on libiconv.
+            AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+              [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+              [eval "$gt_func_gnugettext_libintl=yes"],
+              [eval "$gt_func_gnugettext_libintl=no"])
+            dnl Now see whether libintl exists and depends on libiconv.
+            if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+                [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+               [LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                eval "$gt_func_gnugettext_libintl=yes"
+               ])
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"])
+        fi
+
+        dnl If an already present or preinstalled GNU gettext() is found,
+        dnl use it.  But if this macro is used in GNU gettext, and GNU
+        dnl gettext is already preinstalled in libintl, we update this
+        dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+          dnl Reset the values set by searching for libintl.
+          LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
+
+    ifelse(gt_included_intl, yes, [
+        if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+          dnl GNU gettext is not found in the C library.
+          dnl Fall back on included GNU gettext library.
+          nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions used to generate GNU NLS library.
+        BUILD_INCLUDED_LIBINTL=yes
+        USE_INCLUDED_LIBINTL=yes
+        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      CATOBJEXT=
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions to use GNU gettext tools.
+        CATOBJEXT=.gmo
+      fi
+    ])
+
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Some extra flags are needed during linking.
+        LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [Define to 1 if translation of program messages to the user's native language
+   is requested.])
+    else
+      USE_NLS=no
+    fi
+  fi
+
+  AC_MSG_CHECKING([whether to use NLS])
+  AC_MSG_RESULT([$USE_NLS])
+  if test "$USE_NLS" = "yes"; then
+    AC_MSG_CHECKING([where the gettext function comes from])
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    AC_MSG_RESULT([$gt_source])
+  fi
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        AC_MSG_CHECKING([how to link with libintl])
+        AC_MSG_RESULT([$LIBINTL])
+        AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+      fi
+
+      dnl For backward compatibility. Some packages may be using this.
+      AC_DEFINE(HAVE_GETTEXT, 1,
+       [Define if the GNU gettext() function is already present or preinstalled.])
+      AC_DEFINE(HAVE_DCGETTEXT, 1,
+       [Define if the GNU dcgettext() function is already present or preinstalled.])
+    fi
+
+    dnl We need to process the po/ directory.
+    POSUB=po
+  fi
+
+  ifelse(gt_included_intl, yes, [
+    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+    dnl to 'yes' because some of the testsuite requires it.
+    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+      BUILD_INCLUDED_LIBINTL=yes
+    fi
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(BUILD_INCLUDED_LIBINTL)
+    AC_SUBST(USE_INCLUDED_LIBINTL)
+    AC_SUBST(CATOBJEXT)
+
+    dnl For backward compatibility. Some configure.ins may be using this.
+    nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    DATADIRNAME=share
+    AC_SUBST(DATADIRNAME)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INSTOBJEXT=.mo
+    AC_SUBST(INSTOBJEXT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    GENCAT=gencat
+    AC_SUBST(GENCAT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INTLOBJS=
+    if test "$USE_INCLUDED_LIBINTL" = yes; then
+      INTLOBJS="\$(GETTOBJS)"
+    fi
+    AC_SUBST(INTLOBJS)
+
+    dnl Enable libtool support if the surrounding package wishes it.
+    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+    AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+  ])
+
+  dnl For backward compatibility. Some Makefiles may be using this.
+  INTLLIBS="$LIBINTL"
+  AC_SUBST(INTLLIBS)
+
+  dnl Make all documented variables known to autoconf.
+  AC_SUBST(LIBINTL)
+  AC_SUBST(LTLIBINTL)
+  AC_SUBST(POSUB)
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+  m4_divert_text([DEFAULTS], [gt_needs=])
+  m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+  m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
+
+# iconv.m4 serial AM6 (gettext-0.17)
+dnl Copyright (C) 2000-2002, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed libiconv and not disabled its use
+  dnl via --without-libiconv-prefix, he wants to use it. The first
+  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  am_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+  AC_CACHE_CHECK([for iconv], am_cv_func_iconv, [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      am_cv_func_iconv=yes)
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes)
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [
+      dnl This tests against bugs in AIX 5.1 and HP-UX 11.11.
+      am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          return 1;
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    return 1;
+  return 0;
+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
+        [case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac])
+      LIBS="$am_save_LIBS"
+    ])
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+    AC_DEFINE(HAVE_ICONV, 1,
+      [Define if you have the iconv() function and it works.])
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    AC_MSG_CHECKING([how to link with libiconv])
+    AC_MSG_RESULT([$LIBICONV])
+  else
+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+    dnl either.
+    CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+  AC_SUBST(LIBICONV)
+  AC_SUBST(LTLIBICONV)
+])
+
+AC_DEFUN([AM_ICONV],
+[
+  AM_ICONV_LINK
+  if test "$am_cv_func_iconv" = yes; then
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL(am_cv_proto_iconv, [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([$]{ac_t:-
+         }[$]am_cv_proto_iconv)
+    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+])
+
+# intlmacosx.m4 serial 1 (gettext-0.17)
+dnl Copyright (C) 2004-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on MacOS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+  dnl Check for API introduced in MacOS X 10.2.
+  AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+    gt_cv_func_CFPreferencesCopyAppValue,
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
+       [CFPreferencesCopyAppValue(NULL, NULL)],
+       [gt_cv_func_CFPreferencesCopyAppValue=yes],
+       [gt_cv_func_CFPreferencesCopyAppValue=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+    AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1,
+      [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+  fi
+  dnl Check for API introduced in MacOS X 10.3.
+  AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent,
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
+       [gt_cv_func_CFLocaleCopyCurrent=yes],
+       [gt_cv_func_CFLocaleCopyCurrent=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1,
+      [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+  fi
+  AC_SUBST([INTL_MACOSX_LIBS])
+])
+
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# 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
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]* | [A-Za-z]:[\\/]*)]
+      [re_direlt='/[^/][^/]*/\.\./']
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break ;;
+      *)
+       test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
+
+# lib-link.m4 serial 13 (gettext-0.17)
+dnl Copyright (C) 2001-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.54)
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+    ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+  dnl results of this search when this library appears as a dependency.
+  HAVE_LIB[]NAME=yes
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed lib[]Name and not disabled its use
+  dnl via --without-lib[]Name-prefix, he wants to use it.
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $LIB[]NAME"
+    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+    LIBS="$ac_save_LIBS"
+  ])
+  if test "$ac_cv_lib[]Name" = yes; then
+    HAVE_LIB[]NAME=yes
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+    AC_MSG_CHECKING([how to link with lib[]$1])
+    AC_MSG_RESULT([$LIB[]NAME])
+  else
+    HAVE_LIB[]NAME=no
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+    dnl $INC[]NAME either.
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    LIB[]NAME=
+    LTLIB[]NAME=
+    LIB[]NAME[]_PREFIX=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl   acl_libext,
+dnl   acl_shlibext,
+dnl   acl_hardcode_libdir_flag_spec,
+dnl   acl_hardcode_libdir_separator,
+dnl   acl_hardcode_direct,
+dnl   acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+  ])
+  wl="$acl_cv_wl"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  dnl Determine whether the user wants rpath handling at all.
+  AC_ARG_ENABLE(rpath,
+    [  --disable-rpath         do not hardcode runtime library paths],
+    :, enable_rpath=yes)
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  dnl Autoconf >= 2.61 supports dots in --with options.
+  define([N_A_M_E],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit([$1],[.],[_])],[$1])])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib]N_A_M_E[-prefix],
+[  --with-lib]N_A_M_E[-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
+  --without-lib]N_A_M_E[-prefix     don't search for lib$1 in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  dnl Search the library and its dependencies in $additional_libdir and
+  dnl $LDFLAGS. Using breadth-first-seach.
+  LIB[]NAME=
+  LTLIB[]NAME=
+  INC[]NAME=
+  LIB[]NAME[]_PREFIX=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='$1 $2'
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+          else
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+            dnl that this library doesn't exist. So just drop it.
+            :
+          fi
+        else
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
+          found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+            dnl The same code as in the loop below:
+            dnl First look for a shared library.
+            if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+            dnl Then look for a static library.
+            if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  dnl First look for a shared library.
+                  if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                  dnl Then look for a static library.
+                  if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+            dnl Found the library.
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+              dnl Linking with a shared library. We attempt to hardcode its
+              dnl directory into the executable's runpath, unless it's the
+              dnl standard /usr/lib.
+              if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                dnl No hardcoding is needed.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+              else
+                dnl Use an explicit option to hardcode DIR into the resulting
+                dnl binary.
+                dnl Potentially add DIR to ltrpathdirs.
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                dnl The hardcoding into $LIBNAME is system dependent.
+                if test "$acl_hardcode_direct" = yes; then
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                  dnl resulting binary.
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                    dnl Use an explicit option to hardcode DIR into the resulting
+                    dnl binary.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    dnl Potentially add DIR to rpathdirs.
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
+                    haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                    dnl Rely on "-L$found_dir".
+                    dnl But don't add it if it's already contained in the LDFLAGS
+                    dnl or the already constructed $LIBNAME
+                    haveit=
+                    for x in $LDFLAGS $LIB[]NAME; do
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    else
+                      dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+                      dnl here, because this doesn't fit in flags passed to the
+                      dnl compiler. So give up. No hardcoding. This affects only
+                      dnl very old systems.
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                dnl Linking with a static library.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+              else
+                dnl We shouldn't come here, but anyway it's good to have a
+                dnl fallback.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+              fi
+            fi
+            dnl Assume the include files are nearby.
+            additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                LIB[]NAME[]_PREFIX="$basedir"
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+              dnl Potentially add $additional_includedir to $INCNAME.
+              dnl But don't add it
+              dnl   1. if it's the standard /usr/include,
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+              dnl   3. if it's already present in $CPPFLAGS or the already
+              dnl      constructed $INCNAME,
+              dnl   4. if it doesn't exist as a directory.
+              if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INC[]NAME; do
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                      dnl Really add $additional_includedir to $INCNAME.
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+            dnl Look for dependencies.
+            if test -n "$found_la"; then
+              dnl Read the .la file. It defines the variables
+              dnl dlname, library_names, old_library, dependency_libs, current,
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
+              save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+              dnl We use only dependency_libs.
+              for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dnl But don't add it
+                    dnl   1. if it's the standard /usr/lib,
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                    dnl   3. if it's already present in $LDFLAGS or the already
+                    dnl      constructed $LIBNAME,
+                    dnl   4. if it doesn't exist as a directory.
+                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                      dnl Potentially add DIR to rpathdirs.
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
+                      haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                      dnl Potentially add DIR to ltrpathdirs.
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                      haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                    dnl Handle this in the next round.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                    dnl Handle this in the next round. Throw away the .la's
+                    dnl directory; it is already contained in a preceding -L
+                    dnl option.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                    dnl Most likely an immediate library name.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+            dnl Didn't find the library; assume it is in the system directories
+            dnl known to the linker and runtime loader. (All the system
+            dnl directories known to the linker should also be known to the
+            dnl runtime loader, otherwise the system is severely misconfigured.)
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+      dnl Weird platform: only the last -rpath option counts, the user must
+      dnl pass all path elements in one option. We can arrange that for a
+      dnl single library, but not when more than one $LIBNAMEs are used.
+      alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+    else
+      dnl The -rpath options are cumulative.
+      for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+    dnl When using libtool, the option that works for both libraries and
+    dnl executables is -R. The -R options are cumulative.
+    for found_dir in $ltrpathdirs; do
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+    done
+  fi
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+  for element in [$2]; do
+    haveit=
+    for x in $[$1]; do
+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      [$1]="${[$1]}${[$1]:+ }$element"
+    fi
+  done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+  AC_REQUIRE([AC_LIB_RPATH])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  $1=
+  if test "$enable_rpath" != no; then
+    if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+      dnl Use an explicit option to hardcode directories into the resulting
+      dnl binary.
+      rpathdirs=
+      next=
+      for opt in $2; do
+        if test -n "$next"; then
+          dir="$next"
+          dnl No need to hardcode the standard /usr/lib.
+          if test "X$dir" != "X/usr/$acl_libdirstem"; then
+            rpathdirs="$rpathdirs $dir"
+          fi
+          next=
+        else
+          case $opt in
+            -L) next=yes ;;
+            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+                 dnl No need to hardcode the standard /usr/lib.
+                 if test "X$dir" != "X/usr/$acl_libdirstem"; then
+                   rpathdirs="$rpathdirs $dir"
+                 fi
+                 next= ;;
+            *) next= ;;
+          esac
+        fi
+      done
+      if test "X$rpathdirs" != "X"; then
+        if test -n ""$3""; then
+          dnl libtool is used for linking. Use -R options.
+          for dir in $rpathdirs; do
+            $1="${$1}${$1:+ }-R$dir"
+          done
+        else
+          dnl The linker is used for linking directly.
+          if test -n "$acl_hardcode_libdir_separator"; then
+            dnl Weird platform: only the last -rpath option counts, the user
+            dnl must pass all path elements in one option.
+            alldirs=
+            for dir in $rpathdirs; do
+              alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+            done
+            acl_save_libdir="$libdir"
+            libdir="$alldirs"
+            eval flag=\"$acl_hardcode_libdir_flag_spec\"
+            libdir="$acl_save_libdir"
+            $1="$flag"
+          else
+            dnl The -rpath options are cumulative.
+            for dir in $rpathdirs; do
+              acl_save_libdir="$libdir"
+              libdir="$dir"
+              eval flag=\"$acl_hardcode_libdir_flag_spec\"
+              libdir="$acl_save_libdir"
+              $1="${$1}${$1:+ }$flag"
+            done
+          fi
+        fi
+      fi
+    fi
+  fi
+  AC_SUBST([$1])
+])
+
+# lib-prefix.m4 serial 5 (gettext-0.15)
+dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing
+dnl the basename of the libdir, either "lib" or "lib64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+  dnl There is no formal standard regarding lib and lib64. The current
+  dnl practice is that on a system supporting 32-bit and 64-bit instruction
+  dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit
+  dnl libraries go under $prefix/lib. We determine the compiler's default
+  dnl mode by looking at the compiler's library search path. If at least
+  dnl of its elements ends in /lib64 or points to a directory whose absolute
+  dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the
+  dnl default, namely "lib".
+  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS=       }"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+])
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 56 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+                  [m4_fatal([Libtool version $1 or higher is required],
+                            63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\    *)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+       [m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+       [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+       [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+          m4_quote(lt_decl_varnames),
+       m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+                       lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+                                          [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+       dnl If the libtool generation code has been placed in $CONFIG_LT,
+       dnl instead of duplicating it all over again into config.status,
+       dnl then we will have config.status run $CONFIG_LT later, so it
+       dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+  ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+  lt_cl_success=:
+  test "$silent" = yes &&
+    lt_config_lt_args="$lt_config_lt_args --quiet"
+  exec AS_MESSAGE_LOG_FD>/dev/null
+  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+  exec AS_MESSAGE_LOG_FD>>config.log
+  $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_XSI_SHELLFNS
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],                 [_LT_LANG(C)],
+  [C++],               [_LT_LANG(CXX)],
+  [Java],              [_LT_LANG(GCJ)],
+  [Fortran 77],                [_LT_LANG(F77)],
+  [Fortran],           [_LT_LANG(FC)],
+  [Windows Resource],  [_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+       [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+       [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+       [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&AS_MESSAGE_LOG_FD
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+       [lt_cv_ld_exported_symbols_list=yes],
+       [lt_cv_ld_exported_symbols_list=no])
+       LDFLAGS="$save_LDFLAGS"
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[[012]]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+            [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+        [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+[$]*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "[$]0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+    [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+         [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+       [AC_CHECK_FUNC([dlopen],
+             [lt_cv_dlopen="dlopen"],
+         [AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+           [AC_CHECK_LIB([svld], [dlopen],
+                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+             [AC_CHECK_LIB([dld], [dld_link],
+                   [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+             ])
+           ])
+         ])
+       ])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+         lt_cv_dlopen_self, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+         lt_cv_dlopen_self_static, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+        [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+        [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+        [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+       [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+       [], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+       [shlibpath_overrides_runpath=yes])])
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[  ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+       [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+         if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+       # All AIX code is PIC.
+       if test "$host_cpu" = ia64; then
+         # AIX 5 now supports IA64 processor
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+       else
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           if test "$host_cpu" != ia64; then
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+           fi
+           ;;
+         aCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           ;;
+         ecpc* )
+           # old Intel C++ for x86_64 which still supported -KPIC.
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         icpc* )
+           # Intel C++, used to be incompatible with GCC.
+           # ICC 10 doesn't accept -KPIC any more.
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         xlc* | xlC*)
+           # IBM XL 8.0 on PPC
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+             _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+             _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd* | netbsdelf*-gnu)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+       ;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+       [How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+       [Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+       [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw* | cegcc*)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  linux* | k*bsd*-gnu)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+  ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         _LT_TAGVAR(whole_archive_flag_spec, $1)=
+         tmp_sharedflag='--shared' ;;
+       xl[[cC]]*)                      # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(compiler_needs_object, $1)=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+         _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+         _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           _LT_TAGVAR(ld_shlibs, $1)=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       _LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[[012]]|aix4.[[012]].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         _LT_TAGVAR(hardcode_direct, $1)=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+       _LT_TAGVAR(link_all_deplibs, $1)=no
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+         _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+         _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         _LT_TAGVAR(hardcode_direct, $1)=no
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         ;;
+       *)
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        AC_LINK_IFELSE(int foo(void) {},
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+        )
+        LDFLAGS="$save_LDFLAGS"
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       else
+         case $host_os in
+          openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+            _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+            ;;
+          *)
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+         _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+       motorola)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       _LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+       pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+        _LT_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+        then
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+    [[If ld is used when linking, flag to hardcode $libdir into a binary
+    during linking.  This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+    [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           _LT_TAGVAR(hardcode_direct, $1)=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           _LT_TAGVAR(hardcode_minus_L, $1)=yes
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+          esac
+          shared_flag='-shared'
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag="$shared_flag "'${wl}-G'
+         fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test "$aix_use_runtimelinking" = yes; then
+             shared_flag='${wl}-G'
+           else
+             shared_flag='${wl}-bM:SRE'
+           fi
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+           _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           _LT_SYS_MODULE_PATH_AIX
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+           _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+           # Exported symbols can be pulled into shared objects from archives
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+           # This is similar to how AIX traditionally builds its shared
+           # libraries.
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         _LT_TAGVAR(ld_shlibs, $1)=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+        # as there is no search path for DLLs.
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+        _LT_TAGVAR(always_export_symbols, $1)=no
+        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           cp $export_symbols $output_objdir/$soname.def;
+          else
+           echo EXPORTS > $output_objdir/$soname.def;
+           cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          _LT_TAGVAR(ld_shlibs, $1)=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      freebsd[[12]]*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test $with_gnu_ld = no; then
+               case $host_cpu in
+                 hppa*64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+       _LT_TAGVAR(hardcode_direct, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test "$with_gnu_ld" = no; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+             else
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+             fi
+           fi
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+           ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+             _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+             _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+               $RANLIB $oldlib'
+             _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           *) # Version 6 will use weak symbols
+             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         xl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           if test "x$supports_anon_versioning" = xyes; then
+             _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+               echo "local: *; };" >> $output_objdir/$libname.ver~
+               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+             _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+             _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='echo'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+       ;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      openbsd*)
+       if test -f /usr/libexec/ld.so; then
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=echo
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+               ;;
+             *)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                 echo "-hidden">> $lib.exp~
+                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+                 $RM $lib.exp'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+               ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         *)
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+             case $host in
+               osf3*)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+               *)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+             esac
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+             _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+           _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+           _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+           case $host_os in
+             solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands `-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+           output_verbose_link_cmd='echo'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # platform.
+               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             fi
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+             case $host_os in
+               solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+               *)
+                 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We can NOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+       _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+       _LT_TAGVAR(link_all_deplibs, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+         *)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+        prev=$p
+        continue
+       else
+        prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        case $p in
+        -L* | -R*)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+          else
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+        else
+          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+        fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+          _LT_TAGVAR(predep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+        fi
+       else
+        if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+          _LT_TAGVAR(postdep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${F77-"f77"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${FC-"f95"}
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+dnl func_dirname_and_basename
+dnl A portable version of this function is already defined in general.m4sh
+dnl so there is no need for it here.
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$[@]"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]+=\$[2]"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]=\$$[1]\$[2]"
+}
+
+_LT_EOF
+    ;;
+  esac
+])
+
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+           [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+                     [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+                  [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+       [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+       [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+       [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+       [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+        [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+                [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+                [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+                [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+                [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+                [m4_define([_LTDL_TYPE], [convenience])])
+
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+          m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+            [m4_foreach([_Lt_suffix],
+               ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+       [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+         [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+                [lt_append([$1], [$2], [$3])$4],
+                [$5])],
+         [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+       m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+       [$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+                     [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
+
+# ltversion.m4 -- version numbers                      -*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# Generated from ltversion.in.
+
+# serial 3012 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.6])
+m4_define([LT_PACKAGE_REVISION], [1.3012])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.6'
+macro_revision='1.3012'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
+
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],  [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],             [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],        [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],         [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],    [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],           [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],             [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],    [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],           [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],       [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],               [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],        [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],    [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],    [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],         [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],            [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],  [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],             [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],            [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],    [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],   [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],          [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],            [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],           [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],  [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],    [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],          [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],          [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],                [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],     [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],          [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],   [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],           [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],           [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],           [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC],             [AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],  [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],      [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],    [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],    [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],    [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],     [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],         [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],       [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+
+# nls.m4 serial 3 (gettext-0.15)
+dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+AC_DEFUN([AM_NLS],
+[
+  AC_MSG_CHECKING([whether NLS is requested])
+  dnl Default is enabled NLS
+  AC_ARG_ENABLE(nls,
+    [  --disable-nls           do not use Native Language Support],
+    USE_NLS=$enableval, USE_NLS=yes)
+  AC_MSG_RESULT($USE_NLS)
+  AC_SUBST(USE_NLS)
+])
+
+# po.m4 serial 15 (gettext-0.17)
+dnl Copyright (C) 1995-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+  AC_REQUIRE([AM_NLS])dnl
+
+  dnl Release version of the gettext macros. This is used to ensure that
+  dnl the gettext macros and po/Makefile.in.in are in sync.
+  AC_SUBST([GETTEXT_MACRO_VERSION], [0.17])
+
+  dnl Perform the following tests also if --disable-nls has been given,
+  dnl because they are needed for "make dist" to work.
+
+  dnl Search for GNU msgfmt in the PATH.
+  dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+  dnl The second test excludes FreeBSD msgfmt.
+  AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+    [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+  dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+  case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+    *) MSGFMT_015=$MSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([GMSGFMT_015])
+
+  dnl Search for GNU xgettext 0.12 or newer in the PATH.
+  dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+  dnl The second test excludes FreeBSD xgettext.
+  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+    [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  dnl Remove leftover from FreeBSD xgettext call.
+  rm -f messages.po
+
+  dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+  case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([XGETTEXT_015])
+
+  dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+  AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+    [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+  dnl Installation directories.
+  dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+  dnl have to define it here, so that it can be used in po/Makefile.
+  test -n "$localedir" || localedir='${datadir}/locale'
+  AC_SUBST([localedir])
+
+  dnl Support for AM_XGETTEXT_OPTION.
+  test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+  AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+  AC_CONFIG_COMMANDS([po-directories], [[
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        # Treat a directory as a PO directory if and only if it has a
+        # POTFILES.in file. This allows packages to have multiple PO
+        # directories under different names or in different locations.
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[  ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.in.
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          # Compute POFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+          # Compute UPDATEPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+          # Compute DUMMYPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+          # Compute GMOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          GMOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done]],
+   [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+    # from automake < 1.5.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+   ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+  # When this code is run, in config.status, two variables have already been
+  # set:
+  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+  # - LINGUAS is the value of the environment variable LINGUAS at configure
+  #   time.
+
+changequote(,)dnl
+  # Adjust a relative srcdir.
+  ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+  ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+  # In autoconf-2.13 it is called $ac_given_srcdir.
+  # In autoconf-2.50 it is called $srcdir.
+  test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+  case "$ac_given_srcdir" in
+    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+    /*) top_srcdir="$ac_given_srcdir" ;;
+    *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  # Find a way to echo strings without interpreting backslash.
+  if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+    gt_echo='echo'
+  else
+    if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+      gt_echo='printf %s\n'
+    else
+      echo_func () {
+        cat <<EOT
+$*
+EOT
+      }
+      gt_echo='echo_func'
+    fi
+  fi
+
+  # A sed script that extracts the value of VARIABLE from a Makefile.
+  sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[     ]*VARIABLE[     ]*=/{
+  # Seen the first line of the variable definition.
+  s/^[  ]*VARIABLE[     ]*=//
+  ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+  # Set POTFILES to the value of the Makefile variable POTFILES.
+  sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+  POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+  # Compute POTFILES_DEPS as
+  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+  POTFILES_DEPS=
+  for file in $POTFILES; do
+    POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+  done
+  POMAKEFILEDEPS=""
+
+  if test -n "$OBSOLETE_ALL_LINGUAS"; then
+    test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+  fi
+  if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+    # The LINGUAS file contains the set of available languages.
+    ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+    POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+  else
+    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+    sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+  fi
+  # Hide the ALL_LINGUAS assigment from automake < 1.5.
+  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+  # Compute POFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+  # Compute UPDATEPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+  # Compute DUMMYPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+  # Compute GMOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+  # Compute PROPERTIESFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+  # Compute CLASSFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+  # Compute QMFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+  # Compute MSGFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+  # Compute RESOURCESDLLFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+  case "$ac_given_srcdir" in
+    .) srcdirpre= ;;
+    *) srcdirpre='$(srcdir)/' ;;
+  esac
+  POFILES=
+  UPDATEPOFILES=
+  DUMMYPOFILES=
+  GMOFILES=
+  PROPERTIESFILES=
+  CLASSFILES=
+  QMFILES=
+  MSGFILES=
+  RESOURCESDLLFILES=
+  for lang in $ALL_LINGUAS; do
+    POFILES="$POFILES $srcdirpre$lang.po"
+    UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+    DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+    GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+    PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+    QMFILES="$QMFILES $srcdirpre$lang.qm"
+    frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+    MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+    frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+    RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+  done
+  # CATALOGS depends on both $ac_dir and the user's LINGUAS
+  # environment variable.
+  INST_LINGUAS=
+  if test -n "$ALL_LINGUAS"; then
+    for presentlang in $ALL_LINGUAS; do
+      useit=no
+      if test "%UNSET%" != "$LINGUAS"; then
+        desiredlanguages="$LINGUAS"
+      else
+        desiredlanguages="$ALL_LINGUAS"
+      fi
+      for desiredlang in $desiredlanguages; do
+        # Use the presentlang catalog if desiredlang is
+        #   a. equal to presentlang, or
+        #   b. a variant of presentlang (because in this case,
+        #      presentlang can be used as a fallback for messages
+        #      which are not translated in the desiredlang catalog).
+        case "$desiredlang" in
+          "$presentlang"*) useit=yes;;
+        esac
+      done
+      if test $useit = yes; then
+        INST_LINGUAS="$INST_LINGUAS $presentlang"
+      fi
+    done
+  fi
+  CATALOGS=
+  JAVACATALOGS=
+  QTCATALOGS=
+  TCLCATALOGS=
+  CSHARPCATALOGS=
+  if test -n "$INST_LINGUAS"; then
+    for lang in $INST_LINGUAS; do
+      CATALOGS="$CATALOGS $lang.gmo"
+      JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+      QTCATALOGS="$QTCATALOGS $lang.qm"
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+    done
+  fi
+
+  sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+  if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+       @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+       \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+       @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+       \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if test -n "$POMAKEFILEDEPS"; then
+    cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+  fi
+  mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+  XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+  AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
+
+# progtest.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ(2.50)
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# 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
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  [[\\/]]* | ?:[[\\/]]*)
+    ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in ifelse([$5], , $PATH, [$5]); do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+          if [$3]; then
+            ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+    ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.10'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.10.2], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10.2])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 4
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[# Autoconf 2.62 quotes --file arguments for eval, but not when files
+# are listed without --file.  Let's play safe and only enable the eval
+# if we detect the quoting.
+case $CONFIG_FILES in
+*\'*) eval set x "$CONFIG_FILES" ;;
+*)   set x $CONFIG_FILES ;;
+esac
+shift
+for mf
+do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # Grep'ing the whole file is not good either: AIX grep has a line
+  # limit of 2048, but all sed's we know have understand at least 4000.
+  if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 13
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.60])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                  [_AM_DEPENDENCIES(OBJC)],
+                  [define([AC_PROG_OBJC],
+                          defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode is disabled by default
+  AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode  enable make rules and dependencies not useful
+                         (and sometimes confusing) to the casual installer],
+      USE_MAINTAINER_MODE=$enableval,
+      USE_MAINTAINER_MODE=no)
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+AC_DEFUN([AM_C_PROTOTYPES],
+[AC_REQUIRE([AC_C_PROTOTYPES])
+if test "$ac_cv_prog_cc_stdc" != no; then
+  U= ANSI2KNR=
+else
+  U=_ ANSI2KNR=./ansi2knr
+fi
+# Ensure some checks needed by ansi2knr itself.
+AC_REQUIRE([AC_HEADER_STDC])
+AC_CHECK_HEADERS([string.h])
+AC_SUBST([U])dnl
+AC_SUBST([ANSI2KNR])dnl
+_AM_SUBST_NOTMAKE([ANSI2KNR])dnl
+])
+
+AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([acinclude.m4])
diff --git a/config.guess b/config.guess
new file mode 100755 (executable)
index 0000000..da83314
--- /dev/null
@@ -0,0 +1,1561 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+#   Free Software Foundation, Inc.
+
+timestamp='2009-04-27'
+
+# This file 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 Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per@bothner.com>.
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+       for c in cc gcc c89 c99 ; do
+         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+       # NetBSD (nbsd) targets should (where applicable) match one or
+       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       #
+       # Note: NetBSD doesn't particularly care about the vendor
+       # portion of the name.  We always set it to "unknown".
+       sysctl="sysctl -n hw.machine_arch"
+       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+       case "${UNAME_MACHINE_ARCH}" in
+           armeb) machine=armeb-unknown ;;
+           arm*) machine=arm-unknown ;;
+           sh3el) machine=shl-unknown ;;
+           sh3eb) machine=sh-unknown ;;
+           sh5el) machine=sh5le-unknown ;;
+           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently, or will in the future.
+       case "${UNAME_MACHINE_ARCH}" in
+           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+               eval $set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep __ELF__ >/dev/null
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # The OS release
+       # Debian GNU/NetBSD machines have a different userland, and
+       # thus, need a distinct triplet. However, they do not need
+       # kernel version information, so it can be replaced with a
+       # suitable tag, in the style of linux-gnu.
+       case "${UNAME_VERSION}" in
+           Debian*)
+               release='-gnu'
+               ;;
+           *)
+               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               ;;
+       esac
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit ;;
+    *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+       exit ;;
+    *:ekkoBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       exit ;;
+    *:SolidBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+       exit ;;
+    macppc:MirBSD:*:*)
+       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    *:MirBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    alpha:OSF1:*:*)
+       case $UNAME_RELEASE in
+       *4.0)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+               ;;
+       *5.*)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               ;;
+       esac
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE="alpha" ;;
+           "EV5 (21164)")
+               UNAME_MACHINE="alphaev5" ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE="alphaev56" ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE="alphapca56" ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE="alphapca57" ;;
+           "EV6 (21264)")
+               UNAME_MACHINE="alphaev6" ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE="alphaev67" ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE="alphaev69" ;;
+           "EV7 (21364)")
+               UNAME_MACHINE="alphaev7" ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE="alphaev79" ;;
+       esac
+       # A Pn.n version is a patched version.
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-morphos
+       exit ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit ;;
+    *:z/VM:*:*)
+       echo s390-ibm-zvmoe
+       exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+       exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit ;;
+    DRS?6000:unix:4.0:6*)
+       echo sparc-icl-nx6
+       exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7; exit ;;
+       esac ;;
+    s390x:SunOS:*:*)
+       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+       eval $set_cc_for_build
+       SUN_ARCH="i386"
+       # If there is a compiler, see if it is configured for 64-bit objects.
+       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+       # This test works for both compilers.
+       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               grep IS_64BIT_ARCH >/dev/null
+           then
+               SUN_ARCH="x86_64"
+           fi
+       fi
+       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten${UNAME_RELEASE}
+       exit ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c &&
+         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`$dummy $dummyarg` &&
+           { echo "$SYSTEM_NAME"; exit; }
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+           else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
+       fi
+       exit ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               eval $set_cc_for_build
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               then
+                       echo "$SYSTEM_NAME"
+               else
+                       echo rs6000-ibm-aix3.2.5
+               fi
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit ;;
+    *:AIX:*:[456])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+               fi
+               if [ "${HP_ARCH}" = "" ]; then
+                   eval $set_cc_for_build
+                   sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ ${HP_ARCH} = "hppa2.0w" ]
+       then
+           eval $set_cc_for_build
+
+           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+           # generating 64-bit code.  GNU and HP use different nomenclature:
+           #
+           # $ CC_FOR_BUILD=cc ./config.guess
+           # => hppa2.0w-hp-hpux11.23
+           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+           # => hppa64-hp-hpux11.23
+
+           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+               grep __LP64__ >/dev/null
+           then
+               HP_ARCH="hppa2.0w"
+           else
+               HP_ARCH="hppa64"
+           fi
+       fi
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit ;;
+    3050*:HI-UX:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+               { echo "$SYSTEM_NAME"; exit; }
+       echo unknown-hitachi-hiuxwe2
+       exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    *:UNICOS/mp:*:*)
+       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:FreeBSD:*:*)
+       case ${UNAME_MACHINE} in
+           pc98)
+               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           amd64)
+               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           *)
+               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       esac
+       exit ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit ;;
+    *:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+    i*:windows32*:*)
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
+       exit ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit ;;
+    *:Interix*:[3456]*)
+       case ${UNAME_MACHINE} in
+           x86)
+               echo i586-pc-interix${UNAME_RELEASE}
+               exit ;;
+           EM64T | authenticamd | genuineintel)
+               echo x86_64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+           IA64)
+               echo ia64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+       esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+       echo i${UNAME_MACHINE}-pc-mks
+       exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i586-pc-interix
+       exit ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+       echo x86_64-unknown-cygwin
+       exit ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    *:GNU:*:*)
+       # the GNU system
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       exit ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+    arm*:Linux:*:*)
+       eval $set_cc_for_build
+       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_EABI__
+       then
+           echo ${UNAME_MACHINE}-unknown-linux-gnu
+       else
+           echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+       fi
+       exit ;;
+    avr32*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    cris:Linux:*:*)
+       echo cris-axis-linux-gnu
+       exit ;;
+    crisv32:Linux:*:*)
+       echo crisv32-axis-linux-gnu
+       exit ;;
+    frv:Linux:*:*)
+       echo frv-unknown-linux-gnu
+       exit ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m32r*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    mips:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips
+       #undef mipsel
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=mipsel
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=mips
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^CPU/{
+               s: ::g
+               p
+           }'`"
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    mips64:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef mips64
+       #undef mips64el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=mips64el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=mips64
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^CPU/{
+               s: ::g
+               p
+           }'`"
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    or32:Linux:*:*)
+       echo or32-unknown-linux-gnu
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+       objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
+    padre:Linux:*:*)
+       echo sparc-unknown-linux-gnu
+       exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    vax:Linux:*:*)
+       echo ${UNAME_MACHINE}-dec-linux-gnu
+       exit ;;
+    x86_64:Linux:*:*)
+       echo x86_64-unknown-linux-gnu
+       exit ;;
+    xtensa*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       # The BFD linker knows what the default object file format is, so
+       # first see if it will tell us. cd to the root directory to prevent
+       # problems with other programs or directories called `ld' in the path.
+       # Set LC_ALL=C to ensure ld outputs messages in English.
+       ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+                        | sed -ne '/supported targets:/!d
+                                   s/[         ][      ]*/ /g
+                                   s/.*supported targets: *//
+                                   s/ .*//
+                                   p'`
+        case "$ld_supported_targets" in
+         elf32-i386)
+               TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+               ;;
+         a.out-i386-linux)
+               echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+               exit ;;
+         "")
+               # Either a pre-BFD a.out linker (linux-gnuoldld) or
+               # one that does not give us useful --help.
+               echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+               exit ;;
+       esac
+       # Determine whether the default compiler is a.out or elf
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <features.h>
+       #ifdef __ELF__
+       # ifdef __GLIBC__
+       #  if __GLIBC__ >= 2
+       LIBC=gnu
+       #  else
+       LIBC=gnulibc1
+       #  endif
+       # else
+       LIBC=gnulibc1
+       # endif
+       #else
+       #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+       LIBC=gnu
+       #else
+       LIBC=gnuaout
+       #endif
+       #endif
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+           /^LIBC/{
+               s: ::g
+               p
+           }'`"
+       test x"${LIBC}" != x && {
+               echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+               exit
+       }
+       test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+       ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit ;;
+    i*86:XTS-300:*:STOP)
+       echo ${UNAME_MACHINE}-unknown-stop
+       exit ;;
+    i*86:atheos:*:*)
+       echo ${UNAME_MACHINE}-unknown-atheos
+       exit ;;
+    i*86:syllable:*:*)
+       echo ${UNAME_MACHINE}-pc-syllable
+       exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit ;;
+    i*86:*:5:[678]*)
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i586.
+       # Note: whatever this is, it MUST be the same as what config.sub
+       # prints for the "djgpp" host, or else GDB configury will decide that
+       # this is a cross-build.
+       echo i586-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit ;;
+    M68*:*:R3V[5678]*:*)
+       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+       OS_REL='.3'
+       test -r /etc/.relid \
+           && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+           && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit ;;
+    i*86:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo ${UNAME_MACHINE}-stratus-vos
+       exit ;;
+    *:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo hppa1.1-stratus-vos
+       exit ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit ;;
+    BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
+       echo i586-pc-haiku
+       exit ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-7:SUPER-UX:*:*)
+       echo sx7-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8:SUPER-UX:*:*)
+       echo sx8-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8R:SUPER-UX:*:*)
+       echo sx8r-nec-superux${UNAME_RELEASE}
+       exit ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+       case $UNAME_PROCESSOR in
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = "x86"; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       exit ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+       exit ;;
+    *:DragonFly:*:*)
+       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit ;;
+    *:*VMS:*:*)
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case "${UNAME_MACHINE}" in
+           A*) echo alpha-dec-vms ; exit ;;
+           I*) echo ia64-dec-vms ; exit ;;
+           V*) echo vax-dec-vms ; exit ;;
+       esac ;;
+    *:XENIX:*:SysV)
+       echo i386-pc-xenix
+       exit ;;
+    i*86:skyos:*:*)
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+       exit ;;
+    i*86:rdos:*:*)
+       echo ${UNAME_MACHINE}-pc-rdos
+       exit ;;
+    i*86:AROS:*:*)
+       echo ${UNAME_MACHINE}-pc-aros
+       exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    c34*)
+       echo c34-convex-bsd
+       exit ;;
+    c38*)
+       echo c38-convex-bsd
+       exit ;;
+    c4*)
+       echo c4-convex-bsd
+       exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+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`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100644 (file)
index 0000000..60f08d7
--- /dev/null
@@ -0,0 +1,569 @@
+/* config.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define if account management tools should be installed setuid and
+   authenticate the callers */
+#undef ACCT_TOOLS_SETUID
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+#undef ENABLE_NLS
+
+/* Path for faillog file. */
+#undef FAILLOG_FILE
+
+/* Define to the type of elements in the array set by `getgroups'. Usually
+   this is either `int' or `gid_t'. */
+#undef GETGROUPS_T
+
+/* max group name length */
+#undef GROUP_NAME_MAX_LENGTH
+
+/* Define to 1 if you have the declaration of 'pam_fail_delay' */
+#undef HAS_PAM_FAIL_DELAY
+
+/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+   CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+   the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the declaration of `PAM_DATA_SILENT', and to 0 if
+   you don't. */
+#undef HAVE_DECL_PAM_DATA_SILENT
+
+/* Define to 1 if you have the declaration of `PAM_DELETE_CRED', and to 0 if
+   you don't. */
+#undef HAVE_DECL_PAM_DELETE_CRED
+
+/* Define to 1 if you have the declaration of `PAM_ESTABLISH_CRED', and to 0
+   if you don't. */
+#undef HAVE_DECL_PAM_ESTABLISH_CRED
+
+/* Define to 1 if you have the declaration of `PAM_NEW_AUTHTOK_REQD', and to 0
+   if you don't. */
+#undef HAVE_DECL_PAM_NEW_AUTHTOK_REQD
+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <errno.h> header file. */
+#undef HAVE_ERRNO_H
+
+/* Define to 1 if you have the `fchmod' function. */
+#undef HAVE_FCHMOD
+
+/* Define to 1 if you have the `fchown' function. */
+#undef HAVE_FCHOWN
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `fsync' function. */
+#undef HAVE_FSYNC
+
+/* Define to 1 if you have the `futimes' function. */
+#undef HAVE_FUTIMES
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+#undef HAVE_GETADDRINFO
+
+/* Define to 1 if you have the `getgrgid_r' function. */
+#undef HAVE_GETGRGID_R
+
+/* Define to 1 if you have the `getgrnam_r' function. */
+#undef HAVE_GETGRNAM_R
+
+/* Define to 1 if you have the `getgroups' function. */
+#undef HAVE_GETGROUPS
+
+/* Define to 1 if you have the `gethostname' function. */
+#undef HAVE_GETHOSTNAME
+
+/* Define to 1 if you have the `getpwnam_r' function. */
+#undef HAVE_GETPWNAM_R
+
+/* Define to 1 if you have the `getpwuid_r' function. */
+#undef HAVE_GETPWUID_R
+
+/* Define to 1 if you have the `getspnam' function. */
+#undef HAVE_GETSPNAM
+
+/* Define to 1 if you have the `getspnam_r' function. */
+#undef HAVE_GETSPNAM_R
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the `getusershell' function. */
+#undef HAVE_GETUSERSHELL
+
+/* Define to 1 if you have the `getutent' function. */
+#undef HAVE_GETUTENT
+
+/* Define to 1 if you have the <gshadow.h> header file. */
+#undef HAVE_GSHADOW_H
+
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
+/* Define to 1 if you have the `initgroups' function. */
+#undef HAVE_INITGROUPS
+
+/* Define to 1 if you have the `innetgr' function. */
+#undef HAVE_INNETGR
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `l64a' function. */
+#undef HAVE_L64A
+
+/* Define to 1 if you have the <lastlog.h> header file. */
+#undef HAVE_LASTLOG_H
+
+/* Define to 1 if you have the `lchown' function. */
+#undef HAVE_LCHOWN
+
+/* Define to 1 if you have the `lckpwdf' function. */
+#undef HAVE_LCKPWDF
+
+/* Defined if you have libcrack. */
+#undef HAVE_LIBCRACK
+
+/* Defined if you have the ts&szs cracklib. */
+#undef HAVE_LIBCRACK_HIST
+
+/* Defined if it includes *Pw functions. */
+#undef HAVE_LIBCRACK_PW
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define if struct lastlog has ll_host */
+#undef HAVE_LL_HOST
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if you have the `lstat' function. */
+#undef HAVE_LSTAT
+
+/* Define to 1 if you have the `lutimes' function. */
+#undef HAVE_LUTIMES
+
+/* Define to 1 if you have the `memcpy' function. */
+#undef HAVE_MEMCPY
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to 1 if you have the `mkdir' function. */
+#undef HAVE_MKDIR
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#undef HAVE_NETDB_H
+
+/* Define to 1 if you have the <paths.h> header file. */
+#undef HAVE_PATHS_H
+
+/* Define to 1 if you have the `putgrent' function. */
+#undef HAVE_PUTGRENT
+
+/* Define to 1 if you have the `putpwent' function. */
+#undef HAVE_PUTPWENT
+
+/* Define to 1 if you have the `putspent' function. */
+#undef HAVE_PUTSPENT
+
+/* Define to 1 if you have the `rename' function. */
+#undef HAVE_RENAME
+
+/* Define to 1 if you have the `rmdir' function. */
+#undef HAVE_RMDIR
+
+/* Define to 1 if you have the <rpc/key_prot.h> header file. */
+#undef HAVE_RPC_KEY_PROT_H
+
+/* Define to 1 if you have the <security/openpam.h> header file. */
+#undef HAVE_SECURITY_OPENPAM_H
+
+/* Define to 1 if you have the <security/pam_misc.h> header file. */
+#undef HAVE_SECURITY_PAM_MISC_H
+
+/* Define to 1 if you have the <selinux/selinux.h> header file. */
+#undef HAVE_SELINUX_SELINUX_H
+
+/* Define to 1 if you have the `setgroups' function. */
+#undef HAVE_SETGROUPS
+
+/* Define to 1 if you have the `sgetgrent' function. */
+#undef HAVE_SGETGRENT
+
+/* Define to 1 if you have the `sgetpwent' function. */
+#undef HAVE_SGETPWENT
+
+/* Define to 1 if you have the `sgetspent' function. */
+#undef HAVE_SGETSPENT
+
+/* Define to 1 if you have the <sgtty.h> header file. */
+#undef HAVE_SGTTY_H
+
+/* Have working shadow group support in libc */
+#undef HAVE_SHADOWGRP
+
+/* Define to 1 if you have the `sigaction' function. */
+#undef HAVE_SIGACTION
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if stdbool.h conforms to C99. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the `strftime' function. */
+#undef HAVE_STRFTIME
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strstr' function. */
+#undef HAVE_STRSTR
+
+/* Define to 1 if `st_atim' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIM
+
+/* Define to 1 if `st_atimensec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIMENSEC
+
+/* Define to 1 if `st_mtim' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIM
+
+/* Define to 1 if `st_mtimensec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIMENSEC
+
+/* Define to 1 if `st_rdev' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_RDEV
+
+/* Define to 1 if `ut_addr' is member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_ADDR
+
+/* Define to 1 if `ut_addr_v6' is member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_ADDR_V6
+
+/* Define to 1 if `ut_host' is member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_HOST
+
+/* Define to 1 if `ut_name' is member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_NAME
+
+/* Define to 1 if `ut_syslen' is member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_SYSLEN
+
+/* Define to 1 if `ut_time' is member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_TIME
+
+/* Define to 1 if `ut_xtime' is member of `struct utmpx'. */
+#undef HAVE_STRUCT_UTMPX_UT_XTIME
+
+/* Define to 1 if `ut_addr' is member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_ADDR
+
+/* Define to 1 if `ut_addr_v6' is member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_ADDR_V6
+
+/* Define to 1 if `ut_host' is member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_HOST
+
+/* Define to 1 if `ut_id' is member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_ID
+
+/* Define to 1 if `ut_name' is member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_NAME
+
+/* Define to 1 if `ut_syslen' is member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_SYSLEN
+
+/* Define to 1 if `ut_time' is member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_TIME
+
+/* Define to 1 if `ut_tv' is member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_TV
+
+/* Define to 1 if `ut_type' is member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_TYPE
+
+/* Define to 1 if `ut_user' is member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_USER
+
+/* Define to 1 if `ut_xtime' is member of `struct utmp'. */
+#undef HAVE_STRUCT_UTMP_UT_XTIME
+
+/* Define to 1 if you have the <syslog.h> header file. */
+#undef HAVE_SYSLOG_H
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#undef HAVE_SYS_RESOURCE_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the <termios.h> header file. */
+#undef HAVE_TERMIOS_H
+
+/* Define to 1 if you have the <termio.h> header file. */
+#undef HAVE_TERMIO_H
+
+/* Define to 1 if you have the <ulimit.h> header file. */
+#undef HAVE_ULIMIT_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `updwtmp' function. */
+#undef HAVE_UPDWTMP
+
+/* Define to 1 if you have the `updwtmpx' function. */
+#undef HAVE_UPDWTMPX
+
+/* Define to 1 if you have the <utime.h> header file. */
+#undef HAVE_UTIME_H
+
+/* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */
+#undef HAVE_UTIME_NULL
+
+/* Define to 1 if you have the <utmpx.h> header file. */
+#undef HAVE_UTMPX_H
+
+/* Define to 1 if you have the <utmp.h> header file. */
+#undef HAVE_UTMP_H
+
+/* Define to 1 if the system has the type `_Bool'. */
+#undef HAVE__BOOL
+
+/* Path for lastlog file. */
+#undef LASTLOG_FILE
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* Location of system mail spool directory. */
+#undef MAIL_SPOOL_DIR
+
+/* Name of user's mail spool file if stored in user's home directory. */
+#undef MAIL_SPOOL_FILE
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Path to passwd program. */
+#undef PASSWD_PROGRAM
+
+/* Define to 1 if the C compiler supports function prototypes. */
+#undef PROTOTYPES
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* Define if login should support the -r flag for rlogind. */
+#undef RLOGIN
+
+/* Define to the ruserok() "success" return value (0 or 1). */
+#undef RUSEROK
+
+/* Define to 1 if the `setpgrp' function takes no argument. */
+#undef SETPGRP_VOID
+
+/* Define to support the shadow group file. */
+#undef SHADOWGRP
+
+/* PAM converstation to use */
+#undef SHADOW_PAM_CONVERSATION
+
+/* The default shell. */
+#undef SHELL
+
+/* Define to support S/Key logins. */
+#undef SKEY
+
+/* Define to support newer BSD S/Key API */
+#undef SKEY_BSD_STYLE
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+#undef STAT_MACROS_BROKEN
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to support /etc/suauth su access control. */
+#undef SU_ACCESS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* Define to support flushing of nscd caches */
+#undef USE_NSCD
+
+/* Define to support Pluggable Authentication Modules */
+#undef USE_PAM
+
+/* Define to allow the SHA256 and SHA512 password encryption algorithms */
+#undef USE_SHA_CRYPT
+
+/* Define to use syslog(). */
+#undef USE_SYSLOG
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define if utmpx should be used */
+#undef USE_UTMPX
+
+/* Version number of package */
+#undef VERSION
+
+/* Define if you want to enable Audit messages */
+#undef WITH_AUDIT
+
+/* Build shadow with SELinux support */
+#undef WITH_SELINUX
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
+
+/* Path for utmp file. */
+#undef _UTMP_FILE
+
+/* Path for wtmp file. */
+#undef _WTMP_FILE
+
+/* Define like PROTOTYPES; this can be used by system headers. */
+#undef __PROTOTYPES
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef gid_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef mode_t
+
+/* Define to `long int' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef uid_t
diff --git a/config.rpath b/config.rpath
new file mode 100755 (executable)
index 0000000..c492a93
--- /dev/null
@@ -0,0 +1,614 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+#   Copyright 1996-2006 Free Software Foundation, Inc.
+#   Taken from GNU libtool, 2001
+#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+#   This file is free software; the Free Software Foundation gives
+#   unlimited permission to copy and/or distribute it, with or without
+#   modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+#   than 256 bytes, otherwise the compiler driver will dump core. The only
+#   known workaround is to choose shorter directory names for the build
+#   directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+  wl='-Wl,'
+else
+  case "$host_os" in
+    aix*)
+      wl='-Wl,'
+      ;;
+    darwin*)
+      case $cc_basename in
+        xlc*)
+          wl='-Wl,'
+          ;;
+      esac
+      ;;
+    mingw* | pw32* | os2*)
+      ;;
+    hpux9* | hpux10* | hpux11*)
+      wl='-Wl,'
+      ;;
+    irix5* | irix6* | nonstopux*)
+      wl='-Wl,'
+      ;;
+    newsos6)
+      ;;
+    linux*)
+      case $cc_basename in
+        icc* | ecc*)
+          wl='-Wl,'
+          ;;
+        pgcc | pgf77 | pgf90)
+          wl='-Wl,'
+          ;;
+        ccc*)
+          wl='-Wl,'
+          ;;
+        como)
+          wl='-lopt='
+          ;;
+        *)
+          case `$CC -V 2>&1 | sed 5q` in
+            *Sun\ C*)
+              wl='-Wl,'
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+    osf3* | osf4* | osf5*)
+      wl='-Wl,'
+      ;;
+    sco3.2v5*)
+      ;;
+    solaris*)
+      wl='-Wl,'
+      ;;
+    sunos4*)
+      wl='-Qoption ld '
+      ;;
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      wl='-Wl,'
+      ;;
+    sysv4*MP*)
+      ;;
+    unicos*)
+      wl='-Wl,'
+      ;;
+    uts4*)
+      ;;
+  esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # Set some defaults for GNU ld with shared library support. These
+  # are reset later if shared libraries are not supported. Putting them
+  # here allows them to be overridden if necessary.
+  # Unlike libtool, we use -rpath here, not --rpath, since the documented
+  # option of GNU ld is called -rpath, not --rpath.
+  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+  case "$host_os" in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+        ld_shlibs=no
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we cannot use
+      # them.
+      ld_shlibs=no
+      ;;
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    cygwin* | mingw* | pw32*)
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    interix3*)
+      hardcode_direct=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      ;;
+    linux*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    netbsd*)
+      ;;
+    solaris*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+        ld_shlibs=no
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+          ld_shlibs=no
+          ;;
+        *)
+          if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+            hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+          else
+            ld_shlibs=no
+          fi
+          ;;
+      esac
+      ;;
+    sunos4*)
+      hardcode_direct=yes
+      ;;
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+  esac
+  if test "$ld_shlibs" = no; then
+    hardcode_libdir_flag_spec=
+  fi
+else
+  case "$host_os" in
+    aix3*)
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes; then
+        # Neither direct hardcoding nor static linking is supported with a
+        # broken collect2.
+        hardcode_direct=unsupported
+      fi
+      ;;
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+        # On IA64, the linker does run time linking by default, so we don't
+        # have to do anything special.
+        aix_use_runtimelinking=no
+      else
+        aix_use_runtimelinking=no
+        # Test if we are trying to use run time linking or normal
+        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+        # need to do runtime linking.
+        case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+          for ld_flag in $LDFLAGS; do
+            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+              aix_use_runtimelinking=yes
+              break
+            fi
+          done
+          ;;
+        esac
+      fi
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      if test "$GCC" = yes; then
+        case $host_os in aix4.[012]|aix4.[012].*)
+          collect2name=`${CC} -print-prog-name=collect2`
+          if test -f "$collect2name" && \
+            strings "$collect2name" | grep resolve_lib_name >/dev/null
+          then
+            # We have reworked collect2
+            hardcode_direct=yes
+          else
+            # We have old collect2
+            hardcode_direct=unsupported
+            hardcode_minus_L=yes
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_libdir_separator=
+          fi
+          ;;
+        esac
+      fi
+      # Begin _LT_AC_SYS_LIBPATH_AIX.
+      echo 'int main () { return 0; }' > conftest.c
+      ${CC} ${LDFLAGS} conftest.c -o conftest
+      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      if test -z "$aix_libpath"; then
+        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      fi
+      if test -z "$aix_libpath"; then
+        aix_libpath="/usr/lib:/lib"
+      fi
+      rm -f conftest.c conftest
+      # End _LT_AC_SYS_LIBPATH_AIX.
+      if test "$aix_use_runtimelinking" = yes; then
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+      else
+        if test "$host_cpu" = ia64; then
+          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+        else
+          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        fi
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+    bsdi[45]*)
+      ;;
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      libext=lib
+      ;;
+    darwin* | rhapsody*)
+      hardcode_direct=no
+      if test "$GCC" = yes ; then
+        :
+      else
+        case $cc_basename in
+          xlc*)
+            ;;
+          *)
+            ld_shlibs=no
+            ;;
+        esac
+      fi
+      ;;
+    dgux*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+    freebsd2.2*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    freebsd2*)
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    freebsd* | kfreebsd*-gnu | dragonfly*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    hpux9*)
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      ;;
+    hpux10*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        hardcode_direct=yes
+        # hardcode_minus_L: Not really in the search PATH,
+        # but as the default location of the library.
+        hardcode_minus_L=yes
+      fi
+      ;;
+    hpux11*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct=no
+            ;;
+          *)
+            hardcode_direct=yes
+            # hardcode_minus_L: Not really in the search PATH,
+            # but as the default location of the library.
+            hardcode_minus_L=yes
+            ;;
+        esac
+      fi
+      ;;
+    irix5* | irix6* | nonstopux*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    netbsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    newsos6)
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    openbsd*)
+      hardcode_direct=yes
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      else
+        case "$host_os" in
+          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+            hardcode_libdir_flag_spec='-R$libdir'
+            ;;
+          *)
+            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+            ;;
+        esac
+      fi
+      ;;
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      ;;
+    osf3*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    osf4* | osf5*)
+      if test "$GCC" = yes; then
+        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+        # Both cc and cxx compiler support -rpath directly
+        hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+    solaris*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      ;;
+    sunos4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    sysv4)
+      case $host_vendor in
+        sni)
+          hardcode_direct=yes # is this really true???
+          ;;
+        siemens)
+          hardcode_direct=no
+          ;;
+        motorola)
+          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+          ;;
+      esac
+      ;;
+    sysv4.3*)
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+        ld_shlibs=yes
+      fi
+      ;;
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
+      ;;
+    sysv5* | sco3.2v5* | sco5v6*)
+      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+      hardcode_libdir_separator=':'
+      ;;
+    uts4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    *)
+      ld_shlibs=no
+      ;;
+  esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+libname_spec='lib$name'
+case "$host_os" in
+  aix3*)
+    ;;
+  aix4* | aix5*)
+    ;;
+  amigaos*)
+    ;;
+  beos*)
+    ;;
+  bsdi[45]*)
+    ;;
+  cygwin* | mingw* | pw32*)
+    shrext=.dll
+    ;;
+  darwin* | rhapsody*)
+    shrext=.dylib
+    ;;
+  dgux*)
+    ;;
+  freebsd1*)
+    ;;
+  kfreebsd*-gnu)
+    ;;
+  freebsd* | dragonfly*)
+    ;;
+  gnu*)
+    ;;
+  hpux9* | hpux10* | hpux11*)
+    case $host_cpu in
+      ia64*)
+        shrext=.so
+        ;;
+      hppa*64*)
+        shrext=.sl
+        ;;
+      *)
+        shrext=.sl
+        ;;
+    esac
+    ;;
+  interix3*)
+    ;;
+  irix5* | irix6* | nonstopux*)
+    case "$host_os" in
+      irix5* | nonstopux*)
+        libsuff= shlibsuff=
+        ;;
+      *)
+        case $LD in
+          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+          *) libsuff= shlibsuff= ;;
+        esac
+        ;;
+    esac
+    ;;
+  linux*oldld* | linux*aout* | linux*coff*)
+    ;;
+  linux*)
+    ;;
+  knetbsd*-gnu)
+    ;;
+  netbsd*)
+    ;;
+  newsos6)
+    ;;
+  nto-qnx*)
+    ;;
+  openbsd*)
+    ;;
+  os2*)
+    libname_spec='$name'
+    shrext=.dll
+    ;;
+  osf3* | osf4* | osf5*)
+    ;;
+  solaris*)
+    ;;
+  sunos4*)
+    ;;
+  sysv4 | sysv4.3*)
+    ;;
+  sysv4*MP*)
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    ;;
+  uts4*)
+    ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config.sub b/config.sub
new file mode 100755 (executable)
index 0000000..a39437d
--- /dev/null
@@ -0,0 +1,1686 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+#   Free Software Foundation, Inc.
+
+timestamp='2009-04-17'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file 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 Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple | -axis | -knuth | -cray)
+               os=
+               basic_machine=$1
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco6)
+               os=-sco5v6
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       1750a | 580 \
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | am33_2.0 \
+       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+       | bfin \
+       | c4x | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | fido | fr30 | frv \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
+       | lm32 \
+       | m32c | m32r | m32rle | m68000 | m68k | m88k \
+       | maxq | mb | microblaze | mcore | mep | metag \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+       | mips64octeon | mips64octeonel \
+       | mips64orion | mips64orionel \
+       | mips64r5900 | mips64r5900el \
+       | mips64vr | mips64vrel \
+       | mips64vr4100 | mips64vr4100el \
+       | mips64vr4300 | mips64vr4300el \
+       | mips64vr5000 | mips64vr5000el \
+       | mips64vr5900 | mips64vr5900el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | moxie \
+       | mt \
+       | msp430 \
+       | nios | nios2 \
+       | ns16k | ns32k \
+       | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | pyramid \
+       | score \
+       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+       | sh64 | sh64le \
+       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+       | spu | strongarm \
+       | tahoe | thumb | tic4x | tic80 | tron \
+       | v850 | v850e \
+       | we32k \
+       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+       | z8k | z80)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12)
+               # Motorola 68HC11/12.
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+       ms1)
+               basic_machine=mt-unknown
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       580-* \
+       | a29k-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* | avr32-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+       | h8300-* | h8500-* \
+       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* | iq2000-* \
+       | lm32-* \
+       | m32c-* | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+       | mips64octeon-* | mips64octeonel-* \
+       | mips64orion-* | mips64orionel-* \
+       | mips64r5900-* | mips64r5900el-* \
+       | mips64vr-* | mips64vrel-* \
+       | mips64vr4100-* | mips64vr4100el-* \
+       | mips64vr4300-* | mips64vr4300el-* \
+       | mips64vr5000-* | mips64vr5000el-* \
+       | mips64vr5900-* | mips64vr5900el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | mt-* \
+       | msp430-* \
+       | nios-* | nios2-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | pyramid-* \
+       | romp-* | rs6000-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+       | sparclite-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+       | tahoe-* | thumb-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+       | tron-* \
+       | v850-* | v850e-* | vax-* \
+       | we32k-* \
+       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | xstormy16-* | xtensa*-* \
+       | ymp-* \
+       | z8k-* | z80-*)
+               ;;
+       # Recognize the basic CPU types without company name, with glob match.
+       xtensa*)
+               basic_machine=$basic_machine-unknown
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       abacus)
+               basic_machine=abacus-unknown
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amd64)
+               basic_machine=x86_64-pc
+               ;;
+       amd64-*)
+               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aros)
+               basic_machine=i386-pc
+               os=-aros
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       blackfin)
+               basic_machine=bfin-unknown
+               os=-linux
+               ;;
+       blackfin-*)
+               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       c90)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+        cegcc)
+               basic_machine=arm-unknown
+               os=-cegcc
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | j90)
+               basic_machine=j90-cray
+               os=-unicos
+               ;;
+       craynv)
+               basic_machine=craynv-cray
+               os=-unicosmp
+               ;;
+       cr16)
+               basic_machine=cr16-unknown
+               os=-elf
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       crisv32 | crisv32-* | etraxfs*)
+               basic_machine=crisv32-axis
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       crx)
+               basic_machine=crx-unknown
+               os=-elf
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       decsystem10* | dec10*)
+               basic_machine=pdp10-dec
+               os=-tops10
+               ;;
+       decsystem20* | dec20*)
+               basic_machine=pdp10-dec
+               os=-tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dicos)
+               basic_machine=i686-pc
+               os=-dicos
+               ;;
+       djgpp)
+               basic_machine=i586-pc
+               os=-msdosdjgpp
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m68knommu)
+               basic_machine=m68k-unknown
+               os=-linux
+               ;;
+       m68knommu-*)
+               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+       mingw32)
+               basic_machine=i386-pc
+               os=-mingw32
+               ;;
+       mingw32ce)
+               basic_machine=arm-unknown
+               os=-mingw32ce
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       morphos)
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       ms1-*)
+               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       openrisc | openrisc-*)
+               basic_machine=or32-unknown
+               ;;
+       os400)
+               basic_machine=powerpc-ibm
+               os=-os400
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       parisc)
+               basic_machine=hppa-unknown
+               os=-linux
+               ;;
+       parisc-*)
+               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+       pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pc98)
+               basic_machine=i386-pc
+               ;;
+       pc98-*)
+               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium | p5 | k5 | k6 | nexgen | viac3)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon | athlon_*)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2 | pentiumiii | pentium3)
+               basic_machine=i686-pc
+               ;;
+       pentium4)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium4-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+               basic_machine=powerpc64le-unknown
+               ;;
+       ppc64le-* | powerpc64little-*)
+               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rdos)
+               basic_machine=i386-pc
+               os=-rdos
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       s390 | s390-*)
+               basic_machine=s390-ibm
+               ;;
+       s390x | s390x-*)
+               basic_machine=s390x-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sb1)
+               basic_machine=mipsisa64sb1-unknown
+               ;;
+       sb1el)
+               basic_machine=mipsisa64sb1el-unknown
+               ;;
+       sde)
+               basic_machine=mipsisa32-sde
+               os=-elf
+               ;;
+       sei)
+               basic_machine=mips-sei
+               os=-seiux
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sh5el)
+               basic_machine=sh5le-unknown
+               ;;
+       sh64)
+               basic_machine=sh64-unknown
+               ;;
+       sparclite-wrs | simso-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       sv1)
+               basic_machine=sv1-cray
+               os=-unicos
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=alphaev5-cray
+               os=-unicos
+               ;;
+       t90)
+               basic_machine=t90-cray
+               os=-unicos
+               ;;
+       tic54x | c54x*)
+               basic_machine=tic54x-unknown
+               os=-coff
+               ;;
+       tic55x | c55x*)
+               basic_machine=tic55x-unknown
+               os=-coff
+               ;;
+       tic6x | c6x*)
+               basic_machine=tic6x-unknown
+               os=-coff
+               ;;
+       tile*)
+               basic_machine=tile-unknown
+               os=-linux-gnu
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       toad1)
+               basic_machine=pdp10-xkl
+               os=-tops20
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       tpf)
+               basic_machine=s390x-ibm
+               os=-tpf
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       xbox)
+               basic_machine=i686-pc
+               os=-mingw32
+               ;;
+       xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       z80-*-coff)
+               basic_machine=z80-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       mmix)
+               basic_machine=mmix-knuth
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+               basic_machine=sh-unknown
+               ;;
+       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+               basic_machine=sparc-sun
+               ;;
+       cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -kopensolaris* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* | -aros* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+             | -openbsd* | -solidbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* | -cegcc* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+             | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+             | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto-qnx*)
+               ;;
+       -nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux-dietlibc)
+               os=-linux-dietlibc
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+        -os400*)
+               os=-os400
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -atheos*)
+               os=-atheos
+               ;;
+       -syllable*)
+               os=-syllable
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -nova*)
+               os=-rtmk-nova
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+        -tpf*)
+               os=-tpf
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -aros*)
+               os=-aros
+               ;;
+       -kaos*)
+               os=-kaos
+               ;;
+       -zvmoe)
+               os=-zvmoe
+               ;;
+       -dicos*)
+               os=-dicos
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        score-*)
+               os=-elf
+               ;;
+        spu-*)
+               os=-elf
+               ;;
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+        c4x-* | tic4x-*)
+               os=-coff
+               ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=-tops20
+               ;;
+       pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+        mep-*)
+               os=-elf
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       or32-*)
+               os=-coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-haiku)
+               os=-haiku
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-knuth)
+               os=-mmixware
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+       *-gould)
+               os=-sysv
+               ;;
+       *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+       *-sgi)
+               os=-irix
+               ;;
+       *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -os400*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -tpf*)
+                               vendor=ibm
+                               ;;
+                       -vxsim* | -vxworks* | -windiss*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       -vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..a0503b0
--- /dev/null
+++ b/configure
@@ -0,0 +1,25845 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.63.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008 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=:
+  # Pre-4.2 versions of Zsh do 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
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+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.)
+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
+  $as_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.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# 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 ||
+$as_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=:
+  # Pre-4.2 versions of Zsh do 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=:
+  # Pre-4.2 versions of Zsh do 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 bug-autoconf@gnu.org about your system,
+  echo including any error possibly output before this message.
+  echo This can help us improve future autoconf versions.
+  echo Configuration will now proceed without shell functions.
+}
+
+
+
+  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" ||
+    { $as_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 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  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
+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'"
+
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+$*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "$0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+exec 7<&0 </dev/null 6>&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=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_header_list=
+gt_needs=
+ac_subst_vars='LTLIBOBJS
+USE_NLS_FALSE
+USE_NLS_TRUE
+POSUB
+LTLIBINTL
+LIBINTL
+INTLLIBS
+LTLIBICONV
+LIBICONV
+INTL_MACOSX_LIBS
+XGETTEXT_EXTRA_OPTIONS
+MSGMERGE
+XGETTEXT_015
+XGETTEXT
+GMSGFMT_015
+MSGFMT_015
+GMSGFMT
+MSGFMT
+GETTEXT_MACRO_VERSION
+USE_NLS
+LIBMD
+LIBSKEY
+ACCT_TOOLS_SETUID_FALSE
+ACCT_TOOLS_SETUID_TRUE
+USE_PAM_FALSE
+USE_PAM_TRUE
+LIBPAM
+LIBSELINUX
+LIBCRACK
+LIBAUDIT
+LIBCRYPT
+ENABLE_REGENERATE_MAN_FALSE
+ENABLE_REGENERATE_MAN_TRUE
+XMLCATALOG
+XML_CATALOG_FILE
+XSLTPROC
+SHADOWGRP_FALSE
+SHADOWGRP_TRUE
+USE_SHA_CRYPT_FALSE
+USE_SHA_CRYPT_TRUE
+GROUP_NAME_MAX_LENGTH
+LIBOBJS
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+lt_ECHO
+RANLIB
+AR
+OBJDUMP
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+SED
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
+ANSI2KNR
+U
+YFLAGS
+YACC
+LN_S
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+EGREP
+GREP
+CPP
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_dependency_tracking
+enable_shared
+enable_static
+enable_maintainer_mode
+with_pic
+enable_fast_install
+with_gnu_ld
+enable_libtool_lock
+enable_largefile
+enable_shadowgrp
+enable_man
+enable_account_tools_setuid
+enable_utmpx
+with_audit
+with_libpam
+with_selinux
+with_skey
+with_libcrack
+with_sha_crypt
+with_nscd
+with_group_name_max_length
+with_xml_catalog
+enable_nls
+enable_rpath
+with_libiconv_prefix
+with_libintl_prefix
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+YACC
+YFLAGS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# 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}'
+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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=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_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$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_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
+   { (exit 1); exit 1; }; }
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=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 ;;
+
+  -*) { $as_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 &&
+      { $as_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.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_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'`
+  { $as_echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
+   { (exit 1); exit 1; }; } ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+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
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { $as_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
+    $as_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 .` ||
+  { $as_echo "$as_me: error: working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { $as_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 -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_myself" : 'X\(//\)[^/]' \| \
+        X"$as_myself" : 'X\(//\)$' \| \
+        X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    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 .."
+  { $as_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" || { $as_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 this package 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/PACKAGE]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-shared[=PKGS]  build shared libraries [default=no]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+                         (and sometimes confusing) to the casual installer
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --disable-largefile     omit support for large files
+  --enable-shadowgrp      enable shadow group support [default=yes]
+  --enable-man            regenerate roff man pages from Docbook [default=no]
+  --enable-account-tools-setuid
+                          Install the user and group management tools setuid
+                          and authenticate the callers. This requires
+                          --with-pam.
+  --enable-utmpx          enable loggin in utmpx / wtmpx [default=no]
+  --disable-nls           do not use Native Language Support
+  --disable-rpath         do not hardcode runtime library paths
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-audit            use auditing support [default=yes if found]
+  --with-libpam           use libpam for PAM support [default=yes if found]
+  --with-selinux          use SELinux support [default=yes if found]
+  --with-skey             use S/Key support [default=no]
+  --with-libcrack         use libcrack [default=yes if found and if PAM not
+                          enabled]
+  --with-sha-crypt        allow the SHA256 and SHA512 password encryption
+                          algorithms [default=yes]
+  --with-nscd             enable support for nscd [default=yes]
+  --with-group-name-max-length
+                          set max group name length [default=16]
+  --with-xml-catalog=CATALOG
+                          path to xml catalog to use
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+  --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib
+  --without-libintl-prefix     don't search for libintl in includedir and libdir
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  YACC        The `Yet Another C Compiler' implementation to use. Defaults to
+              the first program found out of: `bison -y', `byacc', `yacc'.
+  YFLAGS      The list of arguments that will be passed by default to $YACC.
+              This script will default YFLAGS to the empty string to avoid a
+              default value of `-d' given by some make applications.
+
+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" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && 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=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_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
+      $as_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
+configure
+generated by GNU Autoconf 2.63
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 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 $as_me, which was
+generated by GNU Autoconf 2.63.  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=.
+  $as_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=`$as_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_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) $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=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_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=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       $as_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 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_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 an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  ac_site_file1=$CONFIG_SITE
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test -r "$ac_site_file"; then
+    { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+$as_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
+    { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+ac_header_list="$ac_header_list utime.h"
+gt_needs="$gt_needs need-ngettext"
+# 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,)
+      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+$as_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
+       # differences in whitespace do not lead to failure.
+       ac_old_val_w=`echo x $ac_old_val`
+       ac_new_val_w=`echo x $ac_new_val`
+       if test "$ac_old_val_w" != "$ac_new_val_w"; then
+         { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+         ac_cache_corrupted=:
+       else
+         { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+         eval $ac_var=\$ac_old_val
+       fi
+       { $as_echo "$as_me:$LINENO:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+       { $as_echo "$as_me:$LINENO:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_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
+  { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+$as_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
+
+
+am__api_version='1.10'
+
+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
+  { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+$as_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.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  $as_echo_n "(cached) " >&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
+           rm -rf conftest.one conftest.two conftest.dir
+           echo one > conftest.one
+           echo two > conftest.two
+           mkdir conftest.dir
+           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+             test -s conftest.one && test -s conftest.two &&
+             test -s conftest.dir/conftest.one &&
+             test -s conftest.dir/conftest.two
+           then
+             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             break 3
+           fi
+         fi
+       fi
+      done
+    done
+    ;;
+esac
+
+done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+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
+{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
+$as_echo "$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'
+
+{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+$as_echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+$as_echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in mkdir gmkdir; do
+        for ac_exec_ext in '' $ac_executable_extensions; do
+          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir (GNU coreutils) '* | \
+            'mkdir (coreutils) '* | \
+            'mkdir (fileutils) '4.1*)
+              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              break 3;;
+          esac
+        done
+       done
+done
+IFS=$as_save_IFS
+
+fi
+
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P 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.
+    test -d ./--version && rmdir ./--version
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # 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_AWK="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:$LINENO: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE=shadow
+ VERSION=4.1.4.2
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_STRIP="strip"
+    $as_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_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+test "$prefix" = "NONE" && prefix="/usr"
+test "$prefix" = "/usr" && exec_prefix=""
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+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
+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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&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"
+    $as_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
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&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"
+    $as_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
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&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"
+    $as_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
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&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"
+    $as_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
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&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"
+    $as_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
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&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"
+    $as_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
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "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:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+$as_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.
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  $as_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  $as_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  $as_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.out.dSYM 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.
+{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_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 | *.dSYM | *.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
+
+{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+if test -z "$ac_file"; then
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+$as_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.
+{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_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
+       { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_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
+$as_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
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+rm -f -r a.out a.out.dSYM 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.
+{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_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 | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+$as_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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then
+  $as_echo_n "(cached) " >&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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_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 | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+$as_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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  $as_echo_n "(cached) " >&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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  $as_echo_n "(cached) " >&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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$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
+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  $as_echo_n "(cached) " >&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 <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* 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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_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)
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$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
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+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
+{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&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
+
+
+{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_stdc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                 inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  eval "$as_ac_Header=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+  if test "${ac_cv_header_minix_config_h+set}" = set; then
+  { $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5
+$as_echo_n "checking for minix/config.h... " >&6; }
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+$as_echo "$ac_cv_header_minix_config_h" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking minix/config.h usability" >&5
+$as_echo_n "checking minix/config.h usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <minix/config.h>
+_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking minix/config.h presence" >&5
+$as_echo_n "checking minix/config.h presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <minix/config.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: minix/config.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5
+$as_echo_n "checking for minix/config.h... " >&6; }
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_header_minix_config_h=$ac_header_preproc
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+$as_echo "$ac_cv_header_minix_config_h" >&6; }
+
+fi
+if test "x$ac_cv_header_minix_config_h" = x""yes; then
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_SOURCE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_1_SOURCE 2
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _MINIX 1
+_ACEOF
+
+  fi
+
+
+
+  { $as_echo "$as_me:$LINENO: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then
+  $as_echo_n "(cached) " >&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 __EXTENSIONS__ 1
+         $ac_includes_default
+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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_safe_to_define___extensions__=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_safe_to_define___extensions__=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    cat >>confdefs.h <<\_ACEOF
+#define __EXTENSIONS__ 1
+_ACEOF
+
+  cat >>confdefs.h <<\_ACEOF
+#define _ALL_SOURCE 1
+_ACEOF
+
+  cat >>confdefs.h <<\_ACEOF
+#define _GNU_SOURCE 1
+_ACEOF
+
+  cat >>confdefs.h <<\_ACEOF
+#define _POSIX_PTHREAD_SEMANTICS 1
+_ACEOF
+
+  cat >>confdefs.h <<\_ACEOF
+#define _TANDEM_SOURCE 1
+_ACEOF
+
+
+
+# Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=no
+fi
+
+
+
+
+
+
+
+
+
+# Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi
+
+  { $as_echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&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"
+    $as_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
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&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"
+    $as_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
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&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"
+    $as_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
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&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"
+    $as_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
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  $as_echo_n "(cached) " >&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"
+    $as_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
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  $as_echo_n "(cached) " >&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"
+    $as_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
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "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:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+$as_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.
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  $as_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  $as_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  $as_echo_n "(cached) " >&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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  $as_echo_n "(cached) " >&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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$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
+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  $as_echo_n "(cached) " >&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 <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* 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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_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)
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$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
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+{ $as_echo "$as_me:$LINENO: checking for library containing strerror" >&5
+$as_echo_n "checking for library containing strerror... " >&6; }
+if test "${ac_cv_search_strerror+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 strerror ();
+int
+main ()
+{
+return strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' cposix; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_search_strerror=$ac_res
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_strerror+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_strerror+set}" = set; then
+  :
+else
+  ac_cv_search_strerror=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+$as_echo "$ac_cv_search_strerror" >&6; }
+ac_res=$ac_cv_search_strerror
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+for ac_prog in 'bison -y' byacc
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_YACC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$YACC"; then
+  ac_cv_prog_YACC="$YACC" # 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_YACC="$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+  { $as_echo "$as_me:$LINENO: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+{ $as_echo "$as_me:$LINENO: checking for function prototypes" >&5
+$as_echo_n "checking for function prototypes... " >&6; }
+if test "$ac_cv_prog_cc_c89" != no; then
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define PROTOTYPES 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define __PROTOTYPES 1
+_ACEOF
+
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test "$ac_cv_prog_cc_stdc" != no; then
+  U= ANSI2KNR=
+else
+  U=_ ANSI2KNR=./ansi2knr
+fi
+# Ensure some checks needed by ansi2knr itself.
+
+
+for ac_header in string.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+case `pwd` in
+  *\ * | *\    *)
+    { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.6'
+macro_revision='1.3012'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+{ $as_echo "$as_me:$LINENO: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+$as_echo "$as_me: error: invalid value of canonical build" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:$LINENO: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+$as_echo "$as_me: error: invalid value of canonical host" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     $as_unset ac_script || ac_script=
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  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_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_FGREP_found && break 3
+    done
+  done
+done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:$LINENO: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test "${lt_cv_path_NM+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  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
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # 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_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # 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_DUMPBIN="$ac_prog"
+    $as_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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if test "${lt_cv_nm_interface+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:6324: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:6327: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:6330: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[         ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_OBJDUMP="objdump"
+    $as_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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # 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_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:$LINENO: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="ar"
+    $as_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_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_STRIP="strip"
+    $as_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_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib"
+    $as_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_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+         if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&5
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:$LINENO: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 7524 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  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
+
+     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 conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  lt_cv_cc_needs_belf=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       lt_cv_cc_needs_belf=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     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
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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_DSYMUTIL="dsymutil"
+    $as_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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_NMEDIT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # 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_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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_NMEDIT="nmedit"
+    $as_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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LIPO+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # 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_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:$LINENO: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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_LIPO="lipo"
+    $as_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_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # 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_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # 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_OTOOL="otool"
+    $as_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_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL64+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # 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_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # 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_OTOOL64="otool64"
+    $as_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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&5
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if test "${lt_cv_ld_exported_symbols_list+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      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 conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  lt_cv_ld_exported_symbols_list=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       lt_cv_ld_exported_symbols_list=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+       LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[012]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  eval "$as_ac_Header=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# Set options
+
+
+
+        enable_dlopen=no
+
+
+  enable_win32_dll=no
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if test "${lt_cv_objdir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:$LINENO: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+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
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+  { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8829: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8833: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      else
+       lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-KPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='--shared'
+       lt_prog_compiler_static='--static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fpic'
+       lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-qpic'
+       lt_prog_compiler_static='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+       lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       lt_prog_compiler_pic='-Kconform_pic'
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9168: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:9172: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9273: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:9277: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9328: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:9332: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:$LINENO: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu)
+    link_all_deplibs=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       allow_undefined_flag=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         whole_archive_flag_spec=
+         tmp_sharedflag='--shared' ;;
+       xl[cC]*)                        # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         compiler_needs_object=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+         hardcode_libdir_flag_spec=
+         hardcode_libdir_flag_spec_ld='-rpath $libdir'
+         archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           ld_shlibs=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[012]|aix4.[012].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         hardcode_direct=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         hardcode_minus_L=yes
+         hardcode_libdir_flag_spec='-L$libdir'
+         hardcode_libdir_separator=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+       link_all_deplibs=no
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        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 conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+         allow_undefined_flag="-z nodefs"
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        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 conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         no_undefined_flag=' ${wl}-bernotok'
+         allow_undefined_flag=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         whole_archive_flag_spec='$convenience'
+         archive_cmds_need_lc=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_from_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  whole_archive_flag_spec=''
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_flag_spec_ld='+b $libdir'
+       hardcode_libdir_separator=:
+       hardcode_direct=yes
+       hardcode_direct_absolute=yes
+       export_dynamic_flag_spec='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_separator=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         hardcode_direct=no
+         hardcode_shlibpath_var=no
+         ;;
+       *)
+         hardcode_direct=yes
+         hardcode_direct_absolute=yes
+         export_dynamic_flag_spec='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         hardcode_minus_L=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        cat >conftest.$ac_ext <<_ACEOF
+int foo(void) {}
+_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+        LDFLAGS="$save_LDFLAGS"
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       hardcode_direct_absolute=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+         export_dynamic_flag_spec='${wl}-E'
+       else
+         case $host_os in
+          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+            archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            hardcode_libdir_flag_spec='-R$libdir'
+            ;;
+          *)
+            archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         reload_cmds='$CC -r -o $output$reload_objs'
+         hardcode_direct=no
+        ;;
+       motorola)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       hardcode_shlibpath_var=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       export_dynamic_flag_spec='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+       pic_flag=$lt_prog_compiler_pic
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+         archive_cmds_need_lc=no
+        else
+         archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+$as_echo "$archive_cmds_need_lc" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+  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 conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then
+  shlibpath_overrides_runpath=yes
+fi
+
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dl_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    { $as_echo "$as_me:$LINENO: checking for shl_load" >&5
+$as_echo_n "checking for shl_load... " >&6; }
+if test "${ac_cv_func_shl_load+set}" = set; then
+  $as_echo_n "(cached) " >&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 shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* 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 shl_load ();
+/* 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_shl_load || defined __stub___shl_load
+choke me
+#endif
+
+int
+main ()
+{
+return shl_load ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_shl_load=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_shl_load=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+$as_echo "$ac_cv_func_shl_load" >&6; }
+if test "x$ac_cv_func_shl_load" = x""yes; then
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dld_shl_load=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = x""yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  { $as_echo "$as_me:$LINENO: checking for dlopen" >&5
+$as_echo_n "checking for dlopen... " >&6; }
+if test "${ac_cv_func_dlopen+set}" = set; then
+  $as_echo_n "(cached) " >&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 dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* 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 dlopen ();
+/* 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_dlopen || defined __stub___dlopen
+choke me
+#endif
+
+int
+main ()
+{
+return dlopen ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_dlopen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+$as_echo "$ac_cv_func_dlopen" >&6; }
+if test "x$ac_cv_func_dlopen" = x""yes; then
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dl_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_svld_dlopen=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = x""yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_dld_dld_link=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = x""yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 12144 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 12240 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:$LINENO: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+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
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+
+
+
+
+
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+  as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
+$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  eval "$as_ac_Header=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+_ACEOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+  { $as_echo "$as_me:$LINENO: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
+if test "${ac_cv_search_opendir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 opendir ();
+int
+main ()
+{
+return opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' dir; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_search_opendir=$ac_res
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_opendir+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_opendir+set}" = set; then
+  :
+else
+  ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+else
+  { $as_echo "$as_me:$LINENO: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
+if test "${ac_cv_search_opendir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 opendir ();
+int
+main ()
+{
+return opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' x; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_search_opendir=$ac_res
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_opendir+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_opendir+set}" = set; then
+  :
+else
+  ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_stdc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
+$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
+if test "${ac_cv_header_sys_wait_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/wait.h>
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
+
+int
+main ()
+{
+  int s;
+  wait (&s);
+  s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_sys_wait_h=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_sys_wait_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
+$as_echo "$ac_cv_header_sys_wait_h" >&6; }
+if test $ac_cv_header_sys_wait_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SYS_WAIT_H 1
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5
+$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
+if test "${ac_cv_header_stdbool_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stdbool.h>
+#ifndef bool
+ "error: bool is not defined"
+#endif
+#ifndef false
+ "error: false is not defined"
+#endif
+#if false
+ "error: false is not 0"
+#endif
+#ifndef true
+ "error: true is not defined"
+#endif
+#if true != 1
+ "error: true is not 1"
+#endif
+#ifndef __bool_true_false_are_defined
+ "error: __bool_true_false_are_defined is not defined"
+#endif
+
+       struct s { _Bool s: 1; _Bool t; } s;
+
+       char a[true == 1 ? 1 : -1];
+       char b[false == 0 ? 1 : -1];
+       char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+       char d[(bool) 0.5 == true ? 1 : -1];
+       bool e = &s;
+       char f[(_Bool) 0.0 == false ? 1 : -1];
+       char g[true];
+       char h[sizeof (_Bool)];
+       char i[sizeof s.t];
+       enum { j = false, k = true, l = false * true, m = true * 256 };
+       /* The following fails for
+          HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+       _Bool n[m];
+       char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+       char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+#      if defined __xlc__ || defined __GNUC__
+        /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
+           reported by James Lemley on 2005-10-05; see
+           http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
+           This test is not quite right, since xlc is allowed to
+           reject this program, as the initializer for xlcbug is
+           not one of the forms that C requires support for.
+           However, doing the test right would require a runtime
+           test, and that would make cross-compilation harder.
+           Let us hope that IBM fixes the xlc bug, and also adds
+           support for this kind of constant expression.  In the
+           meantime, this test will reject xlc, which is OK, since
+           our stdbool.h substitute should suffice.  We also test
+           this with GCC, where it should work, to detect more
+           quickly whether someone messes up the test in the
+           future.  */
+        char digs[] = "0123456789";
+        int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
+#      endif
+       /* Catch a bug in an HP-UX C compiler.  See
+          http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+          http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+        */
+       _Bool q = true;
+       _Bool *pq = &q;
+
+int
+main ()
+{
+
+       *pq |= q;
+       *pq |= ! q;
+       /* Refer to every declared value, to avoid compiler optimizations.  */
+       return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+               + !m + !n + !o + !p + !q + !pq);
+
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_stdbool_h=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdbool_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5
+$as_echo "$ac_cv_header_stdbool_h" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for _Bool" >&5
+$as_echo_n "checking for _Bool... " >&6; }
+if test "${ac_cv_type__Bool+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type__Bool=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof (_Bool))
+       return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((_Bool)))
+         return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type__Bool=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5
+$as_echo "$ac_cv_type__Bool" >&6; }
+if test "x$ac_cv_type__Bool" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+if test $ac_cv_header_stdbool_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STDBOOL_H 1
+_ACEOF
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in errno.h fcntl.h limits.h unistd.h sys/time.h utmp.h \
+       utmpx.h termios.h termio.h sgtty.h sys/ioctl.h syslog.h paths.h \
+       utime.h ulimit.h sys/resource.h gshadow.h lastlog.h \
+       locale.h rpc/key_prot.h netdb.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+if test "${ac_cv_header_shadow_h+set}" = set; then
+  { $as_echo "$as_me:$LINENO: checking for shadow.h" >&5
+$as_echo_n "checking for shadow.h... " >&6; }
+if test "${ac_cv_header_shadow_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_shadow_h" >&5
+$as_echo "$ac_cv_header_shadow_h" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking shadow.h usability" >&5
+$as_echo_n "checking shadow.h usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <shadow.h>
+_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking shadow.h presence" >&5
+$as_echo_n "checking shadow.h presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <shadow.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: shadow.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: shadow.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: shadow.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: shadow.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: shadow.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: shadow.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: shadow.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: shadow.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: shadow.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: shadow.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: shadow.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: shadow.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: shadow.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: shadow.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: shadow.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: shadow.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for shadow.h" >&5
+$as_echo_n "checking for shadow.h... " >&6; }
+if test "${ac_cv_header_shadow_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_header_shadow_h=$ac_header_preproc
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_shadow_h" >&5
+$as_echo "$ac_cv_header_shadow_h" >&6; }
+
+fi
+if test "x$ac_cv_header_shadow_h" = x""yes; then
+  :
+else
+  { { $as_echo "$as_me:$LINENO: error: You need a libc with shadow.h" >&5
+$as_echo "$as_me: error: You need a libc with shadow.h" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in l64a fchmod fchown fsync futimes getgroups gethostname getspnam \
+       gettimeofday getusershell getutent initgroups lchown lckpwdf lstat \
+       lutimes memcpy memset setgroups sigaction strchr updwtmp updwtmpx innetgr \
+       getpwnam_r getpwuid_r getgrnam_r getgrgid_r getspnam_r getaddrinfo
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&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 <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> 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 <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then
+  enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+  { $as_echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if test "${ac_cv_sys_largefile_CC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_sys_largefile_CC=no
+     if test "$GCC" != yes; then
+       ac_save_CC=$CC
+       while :; do
+        # IRIX 6.2 and later do not support large files by default,
+        # so use the C compiler's -n32 option if that helps.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  break
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+        CC="$CC -n32"
+        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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_sys_largefile_CC=' -n32'; break
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+        break
+       done
+       CC=$ac_save_CC
+       rm -f conftest.$ac_ext
+    fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+  if test "$ac_cv_sys_largefile_CC" != no; then
+    CC=$CC$ac_cv_sys_largefile_CC
+  fi
+
+  { $as_echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if test "${ac_cv_sys_file_offset_bits+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_sys_file_offset_bits=no; break
+else
+  $as_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
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_sys_file_offset_bits=64; break
+else
+  $as_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
+  ac_cv_sys_file_offset_bits=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  if test $ac_cv_sys_file_offset_bits = unknown; then
+    { $as_echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if test "${ac_cv_sys_large_files+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_sys_large_files=no; break
+else
+  $as_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
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+                      && LARGE_OFF_T % 2147483647 == 1)
+                     ? 1 : -1];
+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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_sys_large_files=1; break
+else
+  $as_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
+  ac_cv_sys_large_files=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  fi
+fi
+
+
+{ $as_echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if test "${ac_cv_c_const+set}" = set; then
+  $as_echo_n "(cached) " >&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 ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_c_const=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_c_const=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const /**/
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for uid_t in sys/types.h" >&5
+$as_echo_n "checking for uid_t in sys/types.h... " >&6; }
+if test "${ac_cv_type_uid_t+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "uid_t" >/dev/null 2>&1; then
+  ac_cv_type_uid_t=yes
+else
+  ac_cv_type_uid_t=no
+fi
+rm -f conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5
+$as_echo "$ac_cv_type_uid_t" >&6; }
+if test $ac_cv_type_uid_t = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define uid_t int
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define gid_t int
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for off_t" >&5
+$as_echo_n "checking for off_t... " >&6; }
+if test "${ac_cv_type_off_t+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type_off_t=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof (off_t))
+       return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((off_t)))
+         return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_off_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+$as_echo "$ac_cv_type_off_t" >&6; }
+if test "x$ac_cv_type_off_t" = x""yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long int
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for pid_t" >&5
+$as_echo_n "checking for pid_t... " >&6; }
+if test "${ac_cv_type_pid_t+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type_pid_t=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof (pid_t))
+       return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((pid_t)))
+         return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_pid_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
+$as_echo "$ac_cv_type_pid_t" >&6; }
+if test "x$ac_cv_type_pid_t" = x""yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for mode_t" >&5
+$as_echo_n "checking for mode_t... " >&6; }
+if test "${ac_cv_type_mode_t+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type_mode_t=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof (mode_t))
+       return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((mode_t)))
+         return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_mode_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5
+$as_echo "$ac_cv_type_mode_t" >&6; }
+if test "x$ac_cv_type_mode_t" = x""yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define mode_t int
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5
+$as_echo_n "checking whether stat file-mode macros are broken... " >&6; }
+if test "${ac_cv_header_stat_broken+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined S_ISBLK && defined S_IFDIR
+extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1];
+#endif
+
+#if defined S_ISBLK && defined S_IFCHR
+extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1];
+#endif
+
+#if defined S_ISLNK && defined S_IFREG
+extern char c3[S_ISLNK (S_IFREG) ? -1 : 1];
+#endif
+
+#if defined S_ISSOCK && defined S_IFREG
+extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1];
+#endif
+
+_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_stat_broken=no
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stat_broken=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5
+$as_echo "$ac_cv_header_stat_broken" >&6; }
+if test $ac_cv_header_stat_broken = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STAT_MACROS_BROKEN 1
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_rdev" >&5
+$as_echo_n "checking for struct stat.st_rdev... " >&6; }
+if test "${ac_cv_member_struct_stat_st_rdev+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_rdev)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_stat_st_rdev=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_rdev)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_stat_st_rdev=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_stat_st_rdev=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_rdev" >&5
+$as_echo "$ac_cv_member_struct_stat_st_rdev" >&6; }
+if test "x$ac_cv_member_struct_stat_st_rdev" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_RDEV 1
+_ACEOF
+
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_atim" >&5
+$as_echo_n "checking for struct stat.st_atim... " >&6; }
+if test "${ac_cv_member_struct_stat_st_atim+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_atim)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_stat_st_atim=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_atim)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_stat_st_atim=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_stat_st_atim=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atim" >&5
+$as_echo "$ac_cv_member_struct_stat_st_atim" >&6; }
+if test "x$ac_cv_member_struct_stat_st_atim" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_ATIM 1
+_ACEOF
+
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_atimensec" >&5
+$as_echo_n "checking for struct stat.st_atimensec... " >&6; }
+if test "${ac_cv_member_struct_stat_st_atimensec+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_atimensec)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_stat_st_atimensec=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_atimensec)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_stat_st_atimensec=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_stat_st_atimensec=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atimensec" >&5
+$as_echo "$ac_cv_member_struct_stat_st_atimensec" >&6; }
+if test "x$ac_cv_member_struct_stat_st_atimensec" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1
+_ACEOF
+
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_mtim" >&5
+$as_echo_n "checking for struct stat.st_mtim... " >&6; }
+if test "${ac_cv_member_struct_stat_st_mtim+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_mtim)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_stat_st_mtim=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_mtim)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_stat_st_mtim=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_stat_st_mtim=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_mtim" >&5
+$as_echo "$ac_cv_member_struct_stat_st_mtim" >&6; }
+if test "x$ac_cv_member_struct_stat_st_mtim" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_MTIM 1
+_ACEOF
+
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_mtimensec" >&5
+$as_echo_n "checking for struct stat.st_mtimensec... " >&6; }
+if test "${ac_cv_member_struct_stat_st_mtimensec+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_mtimensec)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_stat_st_mtimensec=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_mtimensec)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_stat_st_mtimensec=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_stat_st_mtimensec=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_mtimensec" >&5
+$as_echo "$ac_cv_member_struct_stat_st_mtimensec" >&6; }
+if test "x$ac_cv_member_struct_stat_st_mtimensec" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_MTIMENSEC 1
+_ACEOF
+
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
+if test "${ac_cv_header_time+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_time=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_time=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+$as_echo "$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TIME_WITH_SYS_TIME 1
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
+$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
+if test "${ac_cv_struct_tm+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+                                    int *p = &tm.tm_sec;
+                                    return !p;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_struct_tm=time.h
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_struct_tm=sys/time.h
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
+$as_echo "$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TM_IN_SYS_TIME 1
+_ACEOF
+
+fi
+
+
+{ $as_echo "$as_me:$LINENO: checking for struct utmp.ut_type" >&5
+$as_echo_n "checking for struct utmp.ut_type... " >&6; }
+if test "${ac_cv_member_struct_utmp_ut_type+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (ac_aggr.ut_type)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_type=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (sizeof ac_aggr.ut_type)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_type=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmp_ut_type=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmp_ut_type" >&5
+$as_echo "$ac_cv_member_struct_utmp_ut_type" >&6; }
+if test "x$ac_cv_member_struct_utmp_ut_type" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_TYPE 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmp.ut_id" >&5
+$as_echo_n "checking for struct utmp.ut_id... " >&6; }
+if test "${ac_cv_member_struct_utmp_ut_id+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (ac_aggr.ut_id)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_id=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (sizeof ac_aggr.ut_id)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_id=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmp_ut_id=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmp_ut_id" >&5
+$as_echo "$ac_cv_member_struct_utmp_ut_id" >&6; }
+if test "x$ac_cv_member_struct_utmp_ut_id" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_ID 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmp.ut_name" >&5
+$as_echo_n "checking for struct utmp.ut_name... " >&6; }
+if test "${ac_cv_member_struct_utmp_ut_name+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (ac_aggr.ut_name)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_name=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (sizeof ac_aggr.ut_name)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_name=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmp_ut_name=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmp_ut_name" >&5
+$as_echo "$ac_cv_member_struct_utmp_ut_name" >&6; }
+if test "x$ac_cv_member_struct_utmp_ut_name" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_NAME 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmp.ut_user" >&5
+$as_echo_n "checking for struct utmp.ut_user... " >&6; }
+if test "${ac_cv_member_struct_utmp_ut_user+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (ac_aggr.ut_user)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_user=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (sizeof ac_aggr.ut_user)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_user=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmp_ut_user=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmp_ut_user" >&5
+$as_echo "$ac_cv_member_struct_utmp_ut_user" >&6; }
+if test "x$ac_cv_member_struct_utmp_ut_user" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_USER 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmp.ut_host" >&5
+$as_echo_n "checking for struct utmp.ut_host... " >&6; }
+if test "${ac_cv_member_struct_utmp_ut_host+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (ac_aggr.ut_host)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_host=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (sizeof ac_aggr.ut_host)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_host=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmp_ut_host=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmp_ut_host" >&5
+$as_echo "$ac_cv_member_struct_utmp_ut_host" >&6; }
+if test "x$ac_cv_member_struct_utmp_ut_host" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_HOST 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmp.ut_syslen" >&5
+$as_echo_n "checking for struct utmp.ut_syslen... " >&6; }
+if test "${ac_cv_member_struct_utmp_ut_syslen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (ac_aggr.ut_syslen)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_syslen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (sizeof ac_aggr.ut_syslen)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_syslen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmp_ut_syslen=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmp_ut_syslen" >&5
+$as_echo "$ac_cv_member_struct_utmp_ut_syslen" >&6; }
+if test "x$ac_cv_member_struct_utmp_ut_syslen" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_SYSLEN 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmp.ut_addr" >&5
+$as_echo_n "checking for struct utmp.ut_addr... " >&6; }
+if test "${ac_cv_member_struct_utmp_ut_addr+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (ac_aggr.ut_addr)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_addr=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (sizeof ac_aggr.ut_addr)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_addr=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmp_ut_addr=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmp_ut_addr" >&5
+$as_echo "$ac_cv_member_struct_utmp_ut_addr" >&6; }
+if test "x$ac_cv_member_struct_utmp_ut_addr" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_ADDR 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmp.ut_addr_v6" >&5
+$as_echo_n "checking for struct utmp.ut_addr_v6... " >&6; }
+if test "${ac_cv_member_struct_utmp_ut_addr_v6+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (ac_aggr.ut_addr_v6)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_addr_v6=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (sizeof ac_aggr.ut_addr_v6)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_addr_v6=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmp_ut_addr_v6=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmp_ut_addr_v6" >&5
+$as_echo "$ac_cv_member_struct_utmp_ut_addr_v6" >&6; }
+if test "x$ac_cv_member_struct_utmp_ut_addr_v6" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_ADDR_V6 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmp.ut_time" >&5
+$as_echo_n "checking for struct utmp.ut_time... " >&6; }
+if test "${ac_cv_member_struct_utmp_ut_time+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (ac_aggr.ut_time)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_time=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (sizeof ac_aggr.ut_time)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_time=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmp_ut_time=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmp_ut_time" >&5
+$as_echo "$ac_cv_member_struct_utmp_ut_time" >&6; }
+if test "x$ac_cv_member_struct_utmp_ut_time" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_TIME 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmp.ut_xtime" >&5
+$as_echo_n "checking for struct utmp.ut_xtime... " >&6; }
+if test "${ac_cv_member_struct_utmp_ut_xtime+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (ac_aggr.ut_xtime)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_xtime=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (sizeof ac_aggr.ut_xtime)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_xtime=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmp_ut_xtime=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmp_ut_xtime" >&5
+$as_echo "$ac_cv_member_struct_utmp_ut_xtime" >&6; }
+if test "x$ac_cv_member_struct_utmp_ut_xtime" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_XTIME 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmp.ut_tv" >&5
+$as_echo_n "checking for struct utmp.ut_tv... " >&6; }
+if test "${ac_cv_member_struct_utmp_ut_tv+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (ac_aggr.ut_tv)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_tv=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmp.h>
+
+int
+main ()
+{
+static struct utmp ac_aggr;
+if (sizeof ac_aggr.ut_tv)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmp_ut_tv=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmp_ut_tv=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmp_ut_tv" >&5
+$as_echo "$ac_cv_member_struct_utmp_ut_tv" >&6; }
+if test "x$ac_cv_member_struct_utmp_ut_tv" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMP_UT_TV 1
+_ACEOF
+
+
+fi
+
+if test "$ac_cv_header_utmpx_h" = "yes" &&
+   test "$ac_cv_member_struct_utmp_ut_id" != "yes"; then
+       { { $as_echo "$as_me:$LINENO: error: Systems with UTMPX and no ut_id field in the utmp structure are not supported" >&5
+$as_echo "$as_me: error: Systems with UTMPX and no ut_id field in the utmp structure are not supported" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for struct utmpx.ut_name" >&5
+$as_echo_n "checking for struct utmpx.ut_name... " >&6; }
+if test "${ac_cv_member_struct_utmpx_ut_name+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (ac_aggr.ut_name)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_name=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (sizeof ac_aggr.ut_name)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_name=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmpx_ut_name=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmpx_ut_name" >&5
+$as_echo "$ac_cv_member_struct_utmpx_ut_name" >&6; }
+if test "x$ac_cv_member_struct_utmpx_ut_name" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_NAME 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmpx.ut_host" >&5
+$as_echo_n "checking for struct utmpx.ut_host... " >&6; }
+if test "${ac_cv_member_struct_utmpx_ut_host+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (ac_aggr.ut_host)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_host=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (sizeof ac_aggr.ut_host)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_host=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmpx_ut_host=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmpx_ut_host" >&5
+$as_echo "$ac_cv_member_struct_utmpx_ut_host" >&6; }
+if test "x$ac_cv_member_struct_utmpx_ut_host" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_HOST 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmpx.ut_syslen" >&5
+$as_echo_n "checking for struct utmpx.ut_syslen... " >&6; }
+if test "${ac_cv_member_struct_utmpx_ut_syslen+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (ac_aggr.ut_syslen)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_syslen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (sizeof ac_aggr.ut_syslen)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_syslen=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmpx_ut_syslen=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmpx_ut_syslen" >&5
+$as_echo "$ac_cv_member_struct_utmpx_ut_syslen" >&6; }
+if test "x$ac_cv_member_struct_utmpx_ut_syslen" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_SYSLEN 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmpx.ut_addr" >&5
+$as_echo_n "checking for struct utmpx.ut_addr... " >&6; }
+if test "${ac_cv_member_struct_utmpx_ut_addr+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (ac_aggr.ut_addr)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_addr=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (sizeof ac_aggr.ut_addr)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_addr=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmpx_ut_addr=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmpx_ut_addr" >&5
+$as_echo "$ac_cv_member_struct_utmpx_ut_addr" >&6; }
+if test "x$ac_cv_member_struct_utmpx_ut_addr" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_ADDR 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmpx.ut_addr_v6" >&5
+$as_echo_n "checking for struct utmpx.ut_addr_v6... " >&6; }
+if test "${ac_cv_member_struct_utmpx_ut_addr_v6+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (ac_aggr.ut_addr_v6)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_addr_v6=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (sizeof ac_aggr.ut_addr_v6)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_addr_v6=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmpx_ut_addr_v6=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmpx_ut_addr_v6" >&5
+$as_echo "$ac_cv_member_struct_utmpx_ut_addr_v6" >&6; }
+if test "x$ac_cv_member_struct_utmpx_ut_addr_v6" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_ADDR_V6 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmpx.ut_time" >&5
+$as_echo_n "checking for struct utmpx.ut_time... " >&6; }
+if test "${ac_cv_member_struct_utmpx_ut_time+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (ac_aggr.ut_time)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_time=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (sizeof ac_aggr.ut_time)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_time=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmpx_ut_time=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmpx_ut_time" >&5
+$as_echo "$ac_cv_member_struct_utmpx_ut_time" >&6; }
+if test "x$ac_cv_member_struct_utmpx_ut_time" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_TIME 1
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking for struct utmpx.ut_xtime" >&5
+$as_echo_n "checking for struct utmpx.ut_xtime... " >&6; }
+if test "${ac_cv_member_struct_utmpx_ut_xtime+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (ac_aggr.ut_xtime)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_xtime=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <utmpx.h>
+
+int
+main ()
+{
+static struct utmpx ac_aggr;
+if (sizeof ac_aggr.ut_xtime)
+return 0;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_member_struct_utmpx_ut_xtime=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_member_struct_utmpx_ut_xtime=no
+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
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_utmpx_ut_xtime" >&5
+$as_echo "$ac_cv_member_struct_utmpx_ut_xtime" >&6; }
+if test "x$ac_cv_member_struct_utmpx_ut_xtime" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_UTMPX_UT_XTIME 1
+_ACEOF
+
+
+fi
+
+
+if test "$ac_cv_header_lastlog_h" = "yes"; then
+       { $as_echo "$as_me:$LINENO: checking for ll_host in struct lastlog" >&5
+$as_echo_n "checking for ll_host in struct lastlog... " >&6; }
+if test "${ac_cv_struct_lastlog_ll_host+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <lastlog.h>
+int
+main ()
+{
+struct lastlog ll; char *cp = ll.ll_host;
+
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_struct_lastlog_ll_host=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_struct_lastlog_ll_host=no
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_struct_lastlog_ll_host" >&5
+$as_echo "$ac_cv_struct_lastlog_ll_host" >&6; }
+
+       if test "$ac_cv_struct_lastlog_ll_host" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LL_HOST 1
+_ACEOF
+
+       fi
+fi
+
+{ $as_echo "$as_me:$LINENO: checking type of array argument to getgroups" >&5
+$as_echo_n "checking type of array argument to getgroups... " >&6; }
+if test "${ac_cv_type_getgroups+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_type_getgroups=cross
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Thanks to Mike Rendell for this test.  */
+$ac_includes_default
+#define NGID 256
+#undef MAX
+#define MAX(x, y) ((x) > (y) ? (x) : (y))
+
+int
+main ()
+{
+  gid_t gidset[NGID];
+  int i, n;
+  union { gid_t gval; long int lval; }  val;
+
+  val.lval = -1;
+  for (i = 0; i < NGID; i++)
+    gidset[i] = val.gval;
+  n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1,
+                gidset);
+  /* Exit non-zero if getgroups seems to require an array of ints.  This
+     happens when gid_t is short int but getgroups modifies an array
+     of ints.  */
+  return n > 0 && gidset[n] != val.gval;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_getgroups=gid_t
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_type_getgroups=int
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+if test $ac_cv_type_getgroups = cross; then
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <unistd.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then
+  ac_cv_type_getgroups=gid_t
+else
+  ac_cv_type_getgroups=int
+fi
+rm -f conftest*
+
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_getgroups" >&5
+$as_echo "$ac_cv_type_getgroups" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define GETGROUPS_T $ac_cv_type_getgroups
+_ACEOF
+
+
+{ $as_echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+$as_echo_n "checking return type of signal handlers... " >&6; }
+if test "${ac_cv_type_signal+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <signal.h>
+
+int
+main ()
+{
+return *(signal (0, 0)) (0) == 1;
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_type_signal=int
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_signal=void
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+$as_echo "$ac_cv_type_signal" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+
+
+
+
+for ac_header in $ac_header_list
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking whether utime accepts a null argument" >&5
+$as_echo_n "checking whether utime accepts a null argument... " >&6; }
+if test "${ac_cv_func_utime_null+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  rm -f conftest.data; >conftest.data
+# Sequent interprets utime(file, 0) to mean use start of epoch.  Wrong.
+if test "$cross_compiling" = yes; then
+  ac_cv_func_utime_null=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+              #ifdef HAVE_UTIME_H
+              # include <utime.h>
+              #endif
+int
+main ()
+{
+struct stat s, t;
+  return ! (stat ("conftest.data", &s) == 0
+           && utime ("conftest.data", 0) == 0
+           && stat ("conftest.data", &t) == 0
+           && t.st_mtime >= s.st_mtime
+           && t.st_mtime - s.st_mtime < 120);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_utime_null=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_utime_null=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_utime_null" >&5
+$as_echo "$ac_cv_func_utime_null" >&6; }
+if test $ac_cv_func_utime_null = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UTIME_NULL 1
+_ACEOF
+
+fi
+rm -f conftest.data
+
+
+for ac_func in strftime
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&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 <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> 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 <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  # strftime is in -lintl on SCO UNIX.
+{ $as_echo "$as_me:$LINENO: checking for strftime in -lintl" >&5
+$as_echo_n "checking for strftime in -lintl... " >&6; }
+if test "${ac_cv_lib_intl_strftime+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 strftime ();
+int
+main ()
+{
+return strftime ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_intl_strftime=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_intl_strftime=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5
+$as_echo "$ac_cv_lib_intl_strftime" >&6; }
+if test "x$ac_cv_lib_intl_strftime" = x""yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRFTIME 1
+_ACEOF
+
+LIBS="-lintl $LIBS"
+fi
+
+fi
+done
+
+
+
+
+
+
+
+for ac_func in mkdir putgrent putpwent putspent rename rmdir
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&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 <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> 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 <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  case " $LIBOBJS " in
+  *" $ac_func.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+ ;;
+esac
+
+fi
+done
+
+
+
+
+
+for ac_func in sgetgrent sgetpwent sgetspent
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&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 <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> 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 <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  case " $LIBOBJS " in
+  *" $ac_func.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+ ;;
+esac
+
+fi
+done
+
+
+
+
+
+
+
+for ac_func in snprintf strcasecmp strdup strerror strstr
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&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 <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> 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 <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  case " $LIBOBJS " in
+  *" $ac_func.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
+ ;;
+esac
+
+fi
+done
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for setpgrp" >&5
+$as_echo_n "checking for setpgrp... " >&6; }
+if test "${ac_cv_func_setpgrp+set}" = set; then
+  $as_echo_n "(cached) " >&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 setpgrp to an innocuous variant, in case <limits.h> declares setpgrp.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define setpgrp innocuous_setpgrp
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char setpgrp (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef setpgrp
+
+/* 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 setpgrp ();
+/* 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_setpgrp || defined __stub___setpgrp
+choke me
+#endif
+
+int
+main ()
+{
+return setpgrp ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_setpgrp=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_setpgrp=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_setpgrp" >&5
+$as_echo "$ac_cv_func_setpgrp" >&6; }
+
+{ $as_echo "$as_me:$LINENO: checking whether setpgrp takes no argument" >&5
+$as_echo_n "checking whether setpgrp takes no argument... " >&6; }
+if test "${ac_cv_func_setpgrp_void+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  { { $as_echo "$as_me:$LINENO: error: cannot check setpgrp when cross compiling" >&5
+$as_echo "$as_me: error: cannot check setpgrp when cross compiling" >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+/* If this system has a BSD-style setpgrp which takes arguments,
+  setpgrp(1, 1) will fail with ESRCH and return -1, in that case
+  exit successfully. */
+  return setpgrp (1,1) != -1;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_setpgrp_void=no
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_setpgrp_void=yes
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_setpgrp_void" >&5
+$as_echo "$ac_cv_func_setpgrp_void" >&6; }
+if test $ac_cv_func_setpgrp_void = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define SETPGRP_VOID 1
+_ACEOF
+
+fi
+
+
+if test "$ac_cv_header_shadow_h" = "yes"; then
+       { $as_echo "$as_me:$LINENO: checking for working shadow group support" >&5
+$as_echo_n "checking for working shadow group support... " >&6; }
+if test "${ac_cv_libc_shadowgrp+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_libc_shadowgrp=no
+
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+                               #include <shadow.h>
+                               main()
+                               {
+                                       struct sgrp *sg = sgetsgent("test:x::");
+                                       /* NYS libc on Red Hat 3.0.3 has broken shadow group support */
+                                       return !sg || !sg->sg_adm || !sg->sg_mem;
+                               }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_libc_shadowgrp=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_libc_shadowgrp=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_libc_shadowgrp" >&5
+$as_echo "$ac_cv_libc_shadowgrp" >&6; }
+
+       if test "$ac_cv_libc_shadowgrp" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SHADOWGRP 1
+_ACEOF
+
+       fi
+fi
+
+{ $as_echo "$as_me:$LINENO: checking location of shared mail directory" >&5
+$as_echo_n "checking location of shared mail directory... " >&6; }
+if test "${shadow_cv_maildir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  for shadow_cv_maildir in /var/mail /var/spool/mail /usr/spool/mail /usr/mail none; do
+       if test -d $shadow_cv_maildir; then
+               break
+       fi
+done
+fi
+{ $as_echo "$as_me:$LINENO: result: $shadow_cv_maildir" >&5
+$as_echo "$shadow_cv_maildir" >&6; }
+if test $shadow_cv_maildir != none; then
+
+cat >>confdefs.h <<_ACEOF
+#define MAIL_SPOOL_DIR "$shadow_cv_maildir"
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking location of user mail file" >&5
+$as_echo_n "checking location of user mail file... " >&6; }
+if test "${shadow_cv_mailfile+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  for shadow_cv_mailfile in Mailbox mailbox Mail mail .mail none; do
+       if test -f $HOME/$shadow_cv_mailfile; then
+               break
+       fi
+done
+fi
+{ $as_echo "$as_me:$LINENO: result: $shadow_cv_mailfile" >&5
+$as_echo "$shadow_cv_mailfile" >&6; }
+if test $shadow_cv_mailfile != none; then
+
+cat >>confdefs.h <<_ACEOF
+#define MAIL_SPOOL_FILE "$shadow_cv_mailfile"
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking location of utmp" >&5
+$as_echo_n "checking location of utmp... " >&6; }
+if test "${shadow_cv_utmpdir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  for shadow_cv_utmpdir in /var/run /var/adm /usr/adm /etc none; do
+       if test -f $shadow_cv_utmpdir/utmp; then
+               break
+       fi
+done
+fi
+{ $as_echo "$as_me:$LINENO: result: $shadow_cv_utmpdir" >&5
+$as_echo "$shadow_cv_utmpdir" >&6; }
+if test "$shadow_cv_utmpdir" = "none"; then
+       { $as_echo "$as_me:$LINENO: WARNING: utmp file not found" >&5
+$as_echo "$as_me: WARNING: utmp file not found" >&2;}
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define _UTMP_FILE "$shadow_cv_utmpdir/utmp"
+_ACEOF
+
+
+{ $as_echo "$as_me:$LINENO: checking location of faillog/lastlog/wtmp" >&5
+$as_echo_n "checking location of faillog/lastlog/wtmp... " >&6; }
+if test "${shadow_cv_logdir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  for shadow_cv_logdir in /var/log /var/adm /usr/adm /etc; do
+       if test -d $shadow_cv_logdir; then
+               break
+       fi
+done
+fi
+{ $as_echo "$as_me:$LINENO: result: $shadow_cv_logdir" >&5
+$as_echo "$shadow_cv_logdir" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define _WTMP_FILE "$shadow_cv_logdir/wtmp"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define LASTLOG_FILE "$shadow_cv_logdir/lastlog"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define FAILLOG_FILE "$shadow_cv_logdir/faillog"
+_ACEOF
+
+
+{ $as_echo "$as_me:$LINENO: checking location of the passwd program" >&5
+$as_echo_n "checking location of the passwd program... " >&6; }
+if test "${shadow_cv_passwd_dir+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -f /usr/bin/passwd; then
+       shadow_cv_passwd_dir=/usr/bin
+else
+       shadow_cv_passwd_dir=/bin
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $shadow_cv_passwd_dir" >&5
+$as_echo "$shadow_cv_passwd_dir" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define PASSWD_PROGRAM "$shadow_cv_passwd_dir/passwd"
+_ACEOF
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_SYSLOG 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define RLOGIN 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define RUSEROK 0
+_ACEOF
+
+
+# Check whether --enable-shadowgrp was given.
+if test "${enable_shadowgrp+set}" = set; then
+  enableval=$enable_shadowgrp; case "${enableval}" in
+        yes) enable_shadowgrp="yes" ;;
+         no) enable_shadowgrp="no" ;;
+          *) { { $as_echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-shadowgrp" >&5
+$as_echo "$as_me: error: bad value ${enableval} for --enable-shadowgrp" >&2;}
+   { (exit 1); exit 1; }; } ;;
+        esac
+else
+  enable_shadowgrp="yes"
+
+fi
+
+
+# Check whether --enable-man was given.
+if test "${enable_man+set}" = set; then
+  enableval=$enable_man; enable_man="${enableval}"
+else
+  enable_man="no"
+
+fi
+
+
+# Check whether --enable-account-tools-setuid was given.
+if test "${enable_account_tools_setuid+set}" = set; then
+  enableval=$enable_account_tools_setuid; case "${enableval}" in
+        yes) enable_acct_tools_setuid="yes" ;;
+         no) enable_acct_tools_setuid="no" ;;
+          *) { { $as_echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-account-tools-setuid" >&5
+$as_echo "$as_me: error: bad value ${enableval} for --enable-account-tools-setuid" >&2;}
+   { (exit 1); exit 1; }; }
+          ;;
+        esac
+else
+  enable_acct_tools_setuid="maybe"
+
+fi
+
+
+# Check whether --enable-utmpx was given.
+if test "${enable_utmpx+set}" = set; then
+  enableval=$enable_utmpx; case "${enableval}" in
+        yes) enable_utmpx="yes" ;;
+         no) enable_utmpx="no" ;;
+          *) { { $as_echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-utmpx" >&5
+$as_echo "$as_me: error: bad value ${enableval} for --enable-utmpx" >&2;}
+   { (exit 1); exit 1; }; } ;;
+        esac
+else
+  enable_utmpx="no"
+
+fi
+
+
+
+# Check whether --with-audit was given.
+if test "${with_audit+set}" = set; then
+  withval=$with_audit; with_audit=$withval
+else
+  with_audit=maybe
+fi
+
+
+# Check whether --with-libpam was given.
+if test "${with_libpam+set}" = set; then
+  withval=$with_libpam; with_libpam=$withval
+else
+  with_libpam=maybe
+fi
+
+
+# Check whether --with-selinux was given.
+if test "${with_selinux+set}" = set; then
+  withval=$with_selinux; with_selinux=$withval
+else
+  with_selinux=maybe
+fi
+
+
+# Check whether --with-skey was given.
+if test "${with_skey+set}" = set; then
+  withval=$with_skey; with_skey=$withval
+else
+  with_skey=no
+fi
+
+
+# Check whether --with-libcrack was given.
+if test "${with_libcrack+set}" = set; then
+  withval=$with_libcrack; with_libcrack=$withval
+else
+  with_libcrack=no
+fi
+
+
+# Check whether --with-sha-crypt was given.
+if test "${with_sha_crypt+set}" = set; then
+  withval=$with_sha_crypt; with_sha_crypt=$withval
+else
+  with_sha_crypt=yes
+fi
+
+
+# Check whether --with-nscd was given.
+if test "${with_nscd+set}" = set; then
+  withval=$with_nscd; with_nscd=$withval
+else
+  with_nscd=yes
+fi
+
+
+# Check whether --with-group-name-max-length was given.
+if test "${with_group_name_max_length+set}" = set; then
+  withval=$with_group_name_max_length; with_group_name_max_length=$withval
+else
+  with_group_name_max_length=yes
+fi
+
+
+if test "$with_group_name_max_length" = "no" ; then
+       with_group_name_max_length=0
+elif test "$with_group_name_max_length" = "yes" ; then
+       with_group_name_max_length=16
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define GROUP_NAME_MAX_LENGTH $with_group_name_max_length
+_ACEOF
+
+
+GROUP_NAME_MAX_LENGTH="$with_group_name_max_length"
+
+ if test "x$with_sha_crypt" = "xyes"; then
+  USE_SHA_CRYPT_TRUE=
+  USE_SHA_CRYPT_FALSE='#'
+else
+  USE_SHA_CRYPT_TRUE='#'
+  USE_SHA_CRYPT_FALSE=
+fi
+
+if test "$with_sha_crypt" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_SHA_CRYPT 1
+_ACEOF
+
+fi
+
+if test "$with_nscd" = "yes"; then
+       { $as_echo "$as_me:$LINENO: checking for posix_spawn" >&5
+$as_echo_n "checking for posix_spawn... " >&6; }
+if test "${ac_cv_func_posix_spawn+set}" = set; then
+  $as_echo_n "(cached) " >&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 posix_spawn to an innocuous variant, in case <limits.h> declares posix_spawn.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define posix_spawn innocuous_posix_spawn
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char posix_spawn (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef posix_spawn
+
+/* 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 posix_spawn ();
+/* 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_posix_spawn || defined __stub___posix_spawn
+choke me
+#endif
+
+int
+main ()
+{
+return posix_spawn ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_posix_spawn=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_posix_spawn=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_posix_spawn" >&5
+$as_echo "$ac_cv_func_posix_spawn" >&6; }
+if test "x$ac_cv_func_posix_spawn" = x""yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_NSCD 1
+_ACEOF
+
+else
+  { { $as_echo "$as_me:$LINENO: error: posix_spawn is needed for nscd support" >&5
+$as_echo "$as_me: error: posix_spawn is needed for nscd support" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+
+
+{ $as_echo "$as_me:$LINENO: checking for library containing inet_ntoa" >&5
+$as_echo_n "checking for library containing inet_ntoa... " >&6; }
+if test "${ac_cv_search_inet_ntoa+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 inet_ntoa ();
+int
+main ()
+{
+return inet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' inet; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_search_inet_ntoa=$ac_res
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_inet_ntoa+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_inet_ntoa+set}" = set; then
+  :
+else
+  ac_cv_search_inet_ntoa=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_inet_ntoa" >&5
+$as_echo "$ac_cv_search_inet_ntoa" >&6; }
+ac_res=$ac_cv_search_inet_ntoa
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for library containing socket" >&5
+$as_echo_n "checking for library containing socket... " >&6; }
+if test "${ac_cv_search_socket+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 socket ();
+int
+main ()
+{
+return socket ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' socket; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_search_socket=$ac_res
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_socket+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_socket+set}" = set; then
+  :
+else
+  ac_cv_search_socket=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_socket" >&5
+$as_echo "$ac_cv_search_socket" >&6; }
+ac_res=$ac_cv_search_socket
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+{ $as_echo "$as_me:$LINENO: checking for library containing gethostbyname" >&5
+$as_echo_n "checking for library containing gethostbyname... " >&6; }
+if test "${ac_cv_search_gethostbyname+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' nsl; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_search_gethostbyname=$ac_res
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_gethostbyname+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_gethostbyname+set}" = set; then
+  :
+else
+  ac_cv_search_gethostbyname=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_gethostbyname" >&5
+$as_echo "$ac_cv_search_gethostbyname" >&6; }
+ac_res=$ac_cv_search_gethostbyname
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+
+if test "$enable_shadowgrp" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define SHADOWGRP 1
+_ACEOF
+
+fi
+ if test "x$enable_shadowgrp" = "xyes"; then
+  SHADOWGRP_TRUE=
+  SHADOWGRP_FALSE='#'
+else
+  SHADOWGRP_TRUE='#'
+  SHADOWGRP_FALSE=
+fi
+
+
+if test "$enable_man" = "yes"; then
+                               # Extract the first word of "xsltproc", so it can be a program name with args.
+set dummy xsltproc; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XSLTPROC+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $XSLTPROC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path.
+  ;;
+  *)
+  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_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+XSLTPROC=$ac_cv_path_XSLTPROC
+if test -n "$XSLTPROC"; then
+  { $as_echo "$as_me:$LINENO: result: $XSLTPROC" >&5
+$as_echo "$XSLTPROC" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+       if test -z "$XSLTPROC"; then
+               enable_man=no
+       fi
+
+
+  # check for the presence of the XML catalog
+
+# Check whether --with-xml-catalog was given.
+if test "${with_xml_catalog+set}" = set; then
+  withval=$with_xml_catalog;
+else
+  with_xml_catalog=/etc/xml/catalog
+fi
+
+  jh_found_xmlcatalog=true
+  XML_CATALOG_FILE="$with_xml_catalog"
+
+  { $as_echo "$as_me:$LINENO: checking for XML catalog ($XML_CATALOG_FILE)" >&5
+$as_echo_n "checking for XML catalog ($XML_CATALOG_FILE)... " >&6; }
+  if test -f "$XML_CATALOG_FILE"; then
+    { $as_echo "$as_me:$LINENO: result: found" >&5
+$as_echo "found" >&6; }
+  else
+    jh_found_xmlcatalog=false
+    { $as_echo "$as_me:$LINENO: result: not found" >&5
+$as_echo "not found" >&6; }
+  fi
+
+  # check for the xmlcatalog program
+  # Extract the first word of "xmlcatalog", so it can be a program name with args.
+set dummy xmlcatalog; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XMLCATALOG+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $XMLCATALOG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_XMLCATALOG="$XMLCATALOG" # Let the user override the test with a path.
+  ;;
+  *)
+  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_path_XMLCATALOG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_XMLCATALOG" && ac_cv_path_XMLCATALOG="no"
+  ;;
+esac
+fi
+XMLCATALOG=$ac_cv_path_XMLCATALOG
+if test -n "$XMLCATALOG"; then
+  { $as_echo "$as_me:$LINENO: result: $XMLCATALOG" >&5
+$as_echo "$XMLCATALOG" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  if test "x$XMLCATALOG" = xno; then
+    jh_found_xmlcatalog=false
+  fi
+
+  if $jh_found_xmlcatalog; then
+    :
+  else
+    :
+  fi
+
+
+    { $as_echo "$as_me:$LINENO: checking for DocBook XML DTD V4.1.2 in XML catalog" >&5
+$as_echo_n "checking for DocBook XML DTD V4.1.2 in XML catalog... " >&6; }
+  if $jh_found_xmlcatalog && \
+     { ($as_echo "$as_me:$LINENO: \$XMLCATALOG --noout \"\$XML_CATALOG_FILE\" \"-//OASIS//DTD DocBook XML V4.1.2//EN\" >&2") >&5
+  ($XMLCATALOG --noout "$XML_CATALOG_FILE" "-//OASIS//DTD DocBook XML V4.1.2//EN" >&2) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    { $as_echo "$as_me:$LINENO: result: found" >&5
+$as_echo "found" >&6; }
+      else
+    { $as_echo "$as_me:$LINENO: result: not found" >&5
+$as_echo "not found" >&6; }
+    enable_man=no
+  fi
+
+
+    { $as_echo "$as_me:$LINENO: checking for DocBook XSL Stylesheets >= 1.70.1 in XML catalog" >&5
+$as_echo_n "checking for DocBook XSL Stylesheets >= 1.70.1 in XML catalog... " >&6; }
+  if $jh_found_xmlcatalog && \
+     { ($as_echo "$as_me:$LINENO: \$XMLCATALOG --noout \"\$XML_CATALOG_FILE\" \"http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl\" >&2") >&5
+  ($XMLCATALOG --noout "$XML_CATALOG_FILE" "http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl" >&2) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    { $as_echo "$as_me:$LINENO: result: found" >&5
+$as_echo "found" >&6; }
+      else
+    { $as_echo "$as_me:$LINENO: result: not found" >&5
+$as_echo "not found" >&6; }
+    enable_man=no
+  fi
+
+fi
+ if test "x$enable_man" != "xno"; then
+  ENABLE_REGENERATE_MAN_TRUE=
+  ENABLE_REGENERATE_MAN_FALSE='#'
+else
+  ENABLE_REGENERATE_MAN_TRUE='#'
+  ENABLE_REGENERATE_MAN_FALSE=
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for crypt in -lcrypt" >&5
+$as_echo_n "checking for crypt in -lcrypt... " >&6; }
+if test "${ac_cv_lib_crypt_crypt+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrypt  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 crypt ();
+int
+main ()
+{
+return crypt ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_crypt_crypt=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_crypt_crypt=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_crypt_crypt" >&5
+$as_echo "$ac_cv_lib_crypt_crypt" >&6; }
+if test "x$ac_cv_lib_crypt_crypt" = x""yes; then
+  LIBCRYPT=-lcrypt
+else
+  { { $as_echo "$as_me:$LINENO: error: crypt() not found" >&5
+$as_echo "$as_me: error: crypt() not found" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+if test "$with_audit" != "no"; then
+       if test "${ac_cv_header_libaudit_h+set}" = set; then
+  { $as_echo "$as_me:$LINENO: checking for libaudit.h" >&5
+$as_echo_n "checking for libaudit.h... " >&6; }
+if test "${ac_cv_header_libaudit_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_libaudit_h" >&5
+$as_echo "$ac_cv_header_libaudit_h" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking libaudit.h usability" >&5
+$as_echo_n "checking libaudit.h usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <libaudit.h>
+_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking libaudit.h presence" >&5
+$as_echo_n "checking libaudit.h presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libaudit.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: libaudit.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: libaudit.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: libaudit.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: libaudit.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: libaudit.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: libaudit.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: libaudit.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: libaudit.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: libaudit.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: libaudit.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: libaudit.h: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for libaudit.h" >&5
+$as_echo_n "checking for libaudit.h... " >&6; }
+if test "${ac_cv_header_libaudit_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_header_libaudit_h=$ac_header_preproc
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_libaudit_h" >&5
+$as_echo "$ac_cv_header_libaudit_h" >&6; }
+
+fi
+if test "x$ac_cv_header_libaudit_h" = x""yes; then
+  audit_header="yes"
+else
+  audit_header="no"
+fi
+
+
+       if test "$audit_header$with_audit" = "noyes" ; then
+               { { $as_echo "$as_me:$LINENO: error: libaudit.h is missing" >&5
+$as_echo "$as_me: error: libaudit.h is missing" >&2;}
+   { (exit 1); exit 1; }; }
+       elif test "$audit_header" = "yes"; then
+               { $as_echo "$as_me:$LINENO: checking whether AUDIT_ADD_USER is declared" >&5
+$as_echo_n "checking whether AUDIT_ADD_USER is declared... " >&6; }
+if test "${ac_cv_have_decl_AUDIT_ADD_USER+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libaudit.h>
+
+int
+main ()
+{
+#ifndef AUDIT_ADD_USER
+  (void) AUDIT_ADD_USER;
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_have_decl_AUDIT_ADD_USER=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_AUDIT_ADD_USER=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_AUDIT_ADD_USER" >&5
+$as_echo "$ac_cv_have_decl_AUDIT_ADD_USER" >&6; }
+if test "x$ac_cv_have_decl_AUDIT_ADD_USER" = x""yes; then
+  :
+else
+  audit_header="no"
+fi
+
+               { $as_echo "$as_me:$LINENO: checking whether AUDIT_DEL_USER is declared" >&5
+$as_echo_n "checking whether AUDIT_DEL_USER is declared... " >&6; }
+if test "${ac_cv_have_decl_AUDIT_DEL_USER+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libaudit.h>
+
+int
+main ()
+{
+#ifndef AUDIT_DEL_USER
+  (void) AUDIT_DEL_USER;
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_have_decl_AUDIT_DEL_USER=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_AUDIT_DEL_USER=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_AUDIT_DEL_USER" >&5
+$as_echo "$ac_cv_have_decl_AUDIT_DEL_USER" >&6; }
+if test "x$ac_cv_have_decl_AUDIT_DEL_USER" = x""yes; then
+  :
+else
+  audit_header="no"
+fi
+
+               { $as_echo "$as_me:$LINENO: checking whether AUDIT_ADD_GROUP is declared" >&5
+$as_echo_n "checking whether AUDIT_ADD_GROUP is declared... " >&6; }
+if test "${ac_cv_have_decl_AUDIT_ADD_GROUP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libaudit.h>
+
+int
+main ()
+{
+#ifndef AUDIT_ADD_GROUP
+  (void) AUDIT_ADD_GROUP;
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_have_decl_AUDIT_ADD_GROUP=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_AUDIT_ADD_GROUP=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_AUDIT_ADD_GROUP" >&5
+$as_echo "$ac_cv_have_decl_AUDIT_ADD_GROUP" >&6; }
+if test "x$ac_cv_have_decl_AUDIT_ADD_GROUP" = x""yes; then
+  :
+else
+  audit_header="no"
+fi
+
+               { $as_echo "$as_me:$LINENO: checking whether AUDIT_DEL_GROUP is declared" >&5
+$as_echo_n "checking whether AUDIT_DEL_GROUP is declared... " >&6; }
+if test "${ac_cv_have_decl_AUDIT_DEL_GROUP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libaudit.h>
+
+int
+main ()
+{
+#ifndef AUDIT_DEL_GROUP
+  (void) AUDIT_DEL_GROUP;
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_have_decl_AUDIT_DEL_GROUP=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_AUDIT_DEL_GROUP=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_AUDIT_DEL_GROUP" >&5
+$as_echo "$ac_cv_have_decl_AUDIT_DEL_GROUP" >&6; }
+if test "x$ac_cv_have_decl_AUDIT_DEL_GROUP" = x""yes; then
+  :
+else
+  audit_header="no"
+fi
+
+               if test "$audit_header$with_audit" = "noyes" ; then
+                       { { $as_echo "$as_me:$LINENO: error: AUDIT_ADD_USER AUDIT_DEL_USER AUDIT_ADD_GROUP or AUDIT_DEL_GROUP missing from libaudit.h" >&5
+$as_echo "$as_me: error: AUDIT_ADD_USER AUDIT_DEL_USER AUDIT_ADD_GROUP or AUDIT_DEL_GROUP missing from libaudit.h" >&2;}
+   { (exit 1); exit 1; }; }
+               fi
+       fi
+       if test "$audit_header" = "yes"; then
+               { $as_echo "$as_me:$LINENO: checking for audit_log_acct_message in -laudit" >&5
+$as_echo_n "checking for audit_log_acct_message in -laudit... " >&6; }
+if test "${ac_cv_lib_audit_audit_log_acct_message+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-laudit  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 audit_log_acct_message ();
+int
+main ()
+{
+return audit_log_acct_message ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_audit_audit_log_acct_message=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_audit_audit_log_acct_message=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_audit_audit_log_acct_message" >&5
+$as_echo "$ac_cv_lib_audit_audit_log_acct_message" >&6; }
+if test "x$ac_cv_lib_audit_audit_log_acct_message" = x""yes; then
+  audit_lib="yes"
+else
+  audit_lib="no"
+fi
+
+               if test "$audit_lib$with_audit" = "noyes" ; then
+                       { { $as_echo "$as_me:$LINENO: error: libaudit not found" >&5
+$as_echo "$as_me: error: libaudit not found" >&2;}
+   { (exit 1); exit 1; }; }
+               elif test "$audit_lib" = "no" ; then
+                       with_audit="no"
+               else
+
+cat >>confdefs.h <<\_ACEOF
+#define WITH_AUDIT 1
+_ACEOF
+
+                       LIBAUDIT="-laudit"
+                       with_audit="yes"
+               fi
+       else
+               with_audit="no"
+       fi
+fi
+
+
+if test "$with_libcrack" = "yes"; then
+       echo "checking cracklib flavour, don't be surprised by the results"
+       { $as_echo "$as_me:$LINENO: checking for FascistCheck in -lcrack" >&5
+$as_echo_n "checking for FascistCheck in -lcrack... " >&6; }
+if test "${ac_cv_lib_crack_FascistCheck+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrack  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 FascistCheck ();
+int
+main ()
+{
+return FascistCheck ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_crack_FascistCheck=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_crack_FascistCheck=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_crack_FascistCheck" >&5
+$as_echo "$ac_cv_lib_crack_FascistCheck" >&6; }
+if test "x$ac_cv_lib_crack_FascistCheck" = x""yes; then
+  LIBCRACK=-lcrack
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBCRACK 1
+_ACEOF
+
+fi
+
+       { $as_echo "$as_me:$LINENO: checking for FascistHistory in -lcrack" >&5
+$as_echo_n "checking for FascistHistory in -lcrack... " >&6; }
+if test "${ac_cv_lib_crack_FascistHistory+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrack  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 FascistHistory ();
+int
+main ()
+{
+return FascistHistory ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_crack_FascistHistory=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_crack_FascistHistory=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_crack_FascistHistory" >&5
+$as_echo "$ac_cv_lib_crack_FascistHistory" >&6; }
+if test "x$ac_cv_lib_crack_FascistHistory" = x""yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBCRACK_HIST 1
+_ACEOF
+
+fi
+
+       { $as_echo "$as_me:$LINENO: checking for FascistHistoryPw in -lcrack" >&5
+$as_echo_n "checking for FascistHistoryPw in -lcrack... " >&6; }
+if test "${ac_cv_lib_crack_FascistHistoryPw+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrack  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 FascistHistoryPw ();
+int
+main ()
+{
+return FascistHistoryPw ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_crack_FascistHistoryPw=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_crack_FascistHistoryPw=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_crack_FascistHistoryPw" >&5
+$as_echo "$ac_cv_lib_crack_FascistHistoryPw" >&6; }
+if test "x$ac_cv_lib_crack_FascistHistoryPw" = x""yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBCRACK_PW 1
+_ACEOF
+
+fi
+
+fi
+
+
+if test "$with_selinux" != "no"; then
+
+for ac_header in selinux/selinux.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ selinux_header="yes"
+else
+  selinux_header="no"
+fi
+
+done
+
+       if test "$selinux_header$with_selinux" = "noyes" ; then
+               { { $as_echo "$as_me:$LINENO: error: selinux/selinux.h is missing" >&5
+$as_echo "$as_me: error: selinux/selinux.h is missing" >&2;}
+   { (exit 1); exit 1; }; }
+       elif test "$selinux_header" = "yes" ; then
+               { $as_echo "$as_me:$LINENO: checking for is_selinux_enabled in -lselinux" >&5
+$as_echo_n "checking for is_selinux_enabled in -lselinux... " >&6; }
+if test "${ac_cv_lib_selinux_is_selinux_enabled+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lselinux  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 is_selinux_enabled ();
+int
+main ()
+{
+return is_selinux_enabled ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_selinux_is_selinux_enabled=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_selinux_is_selinux_enabled=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5
+$as_echo "$ac_cv_lib_selinux_is_selinux_enabled" >&6; }
+if test "x$ac_cv_lib_selinux_is_selinux_enabled" = x""yes; then
+  selinux_lib="yes"
+else
+  selinux_lib="no"
+fi
+
+               if test "$selinux_lib$with_selinux" = "noyes" ; then
+                       { { $as_echo "$as_me:$LINENO: error: libselinux not found" >&5
+$as_echo "$as_me: error: libselinux not found" >&2;}
+   { (exit 1); exit 1; }; }
+               elif test "$selinux_lib" = "no" ; then
+                       with_selinux="no"
+               else
+
+cat >>confdefs.h <<\_ACEOF
+#define WITH_SELINUX 1
+_ACEOF
+
+                       LIBSELINUX="-lselinux"
+                       with_selinux="yes"
+               fi
+       else
+               with_selinux="no"
+       fi
+fi
+
+
+if test "$with_libpam" != "no"; then
+       { $as_echo "$as_me:$LINENO: checking for pam_start in -lpam" >&5
+$as_echo_n "checking for pam_start in -lpam... " >&6; }
+if test "${ac_cv_lib_pam_pam_start+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpam  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 pam_start ();
+int
+main ()
+{
+return pam_start ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_pam_pam_start=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_pam_pam_start=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_pam_pam_start" >&5
+$as_echo "$ac_cv_lib_pam_pam_start" >&6; }
+if test "x$ac_cv_lib_pam_pam_start" = x""yes; then
+  pam_lib="yes"
+else
+  pam_lib="no"
+fi
+
+       if test "$pam_lib$with_libpam" = "noyes" ; then
+               { { $as_echo "$as_me:$LINENO: error: libpam not found" >&5
+$as_echo "$as_me: error: libpam not found" >&2;}
+   { (exit 1); exit 1; }; }
+       fi
+
+       LIBPAM="-lpam"
+       pam_conv_function="no"
+
+       { $as_echo "$as_me:$LINENO: checking for openpam_ttyconv in -lpam" >&5
+$as_echo_n "checking for openpam_ttyconv in -lpam... " >&6; }
+if test "${ac_cv_lib_pam_openpam_ttyconv+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpam  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 openpam_ttyconv ();
+int
+main ()
+{
+return openpam_ttyconv ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_pam_openpam_ttyconv=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_pam_openpam_ttyconv=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_pam_openpam_ttyconv" >&5
+$as_echo "$ac_cv_lib_pam_openpam_ttyconv" >&6; }
+if test "x$ac_cv_lib_pam_openpam_ttyconv" = x""yes; then
+  pam_conv_function="openpam_ttyconv"
+else
+  { $as_echo "$as_me:$LINENO: checking for misc_conv in -lpam_misc" >&5
+$as_echo_n "checking for misc_conv in -lpam_misc... " >&6; }
+if test "${ac_cv_lib_pam_misc_misc_conv+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpam_misc  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 misc_conv ();
+int
+main ()
+{
+return misc_conv ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_pam_misc_misc_conv=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_pam_misc_misc_conv=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_pam_misc_misc_conv" >&5
+$as_echo "$ac_cv_lib_pam_misc_misc_conv" >&6; }
+if test "x$ac_cv_lib_pam_misc_misc_conv" = x""yes; then
+  pam_conv_function="misc_conv"; LIBPAM="$LIBPAM -lpam_misc"
+fi
+
+
+fi
+
+
+       if test "$pam_conv_function$with_libpam" = "noyes" ; then
+               { { $as_echo "$as_me:$LINENO: error: PAM conversation function not found" >&5
+$as_echo "$as_me: error: PAM conversation function not found" >&2;}
+   { (exit 1); exit 1; }; }
+       fi
+
+       pam_headers_found=no
+
+
+for ac_header in security/openpam.h security/pam_misc.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+ #include <security/pam_appl.h>
+
+#include <$ac_header>
+_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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+  eval "$as_ac_Header=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+  pam_headers_found=yes ; break
+fi
+
+done
+
+       if test "$pam_headers_found$with_libpam" = "noyes" ; then
+                       { { $as_echo "$as_me:$LINENO: error: PAM headers not found" >&5
+$as_echo "$as_me: error: PAM headers not found" >&2;}
+   { (exit 1); exit 1; }; }
+       fi
+
+
+       if test "$pam_lib$pam_headers_found" = "yesyes" -a "$pam_conv_function" != "no" ; then
+               with_libpam="yes"
+       else
+               with_libpam="no"
+               unset LIBPAM
+       fi
+fi
+if test "$with_libpam" = "yes"; then
+       { $as_echo "$as_me:$LINENO: checking whether PAM_ESTABLISH_CRED is declared" >&5
+$as_echo_n "checking whether PAM_ESTABLISH_CRED is declared... " >&6; }
+if test "${ac_cv_have_decl_PAM_ESTABLISH_CRED+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <security/pam_appl.h>
+
+int
+main ()
+{
+#ifndef PAM_ESTABLISH_CRED
+  (void) PAM_ESTABLISH_CRED;
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_have_decl_PAM_ESTABLISH_CRED=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_PAM_ESTABLISH_CRED=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_PAM_ESTABLISH_CRED" >&5
+$as_echo "$ac_cv_have_decl_PAM_ESTABLISH_CRED" >&6; }
+if test "x$ac_cv_have_decl_PAM_ESTABLISH_CRED" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PAM_ESTABLISH_CRED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PAM_ESTABLISH_CRED 0
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking whether PAM_DELETE_CRED is declared" >&5
+$as_echo_n "checking whether PAM_DELETE_CRED is declared... " >&6; }
+if test "${ac_cv_have_decl_PAM_DELETE_CRED+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <security/pam_appl.h>
+
+int
+main ()
+{
+#ifndef PAM_DELETE_CRED
+  (void) PAM_DELETE_CRED;
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_have_decl_PAM_DELETE_CRED=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_PAM_DELETE_CRED=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_PAM_DELETE_CRED" >&5
+$as_echo "$ac_cv_have_decl_PAM_DELETE_CRED" >&6; }
+if test "x$ac_cv_have_decl_PAM_DELETE_CRED" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PAM_DELETE_CRED 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PAM_DELETE_CRED 0
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking whether PAM_NEW_AUTHTOK_REQD is declared" >&5
+$as_echo_n "checking whether PAM_NEW_AUTHTOK_REQD is declared... " >&6; }
+if test "${ac_cv_have_decl_PAM_NEW_AUTHTOK_REQD+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <security/pam_appl.h>
+
+int
+main ()
+{
+#ifndef PAM_NEW_AUTHTOK_REQD
+  (void) PAM_NEW_AUTHTOK_REQD;
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_have_decl_PAM_NEW_AUTHTOK_REQD=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_PAM_NEW_AUTHTOK_REQD=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_PAM_NEW_AUTHTOK_REQD" >&5
+$as_echo "$ac_cv_have_decl_PAM_NEW_AUTHTOK_REQD" >&6; }
+if test "x$ac_cv_have_decl_PAM_NEW_AUTHTOK_REQD" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PAM_NEW_AUTHTOK_REQD 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PAM_NEW_AUTHTOK_REQD 0
+_ACEOF
+
+
+fi
+{ $as_echo "$as_me:$LINENO: checking whether PAM_DATA_SILENT is declared" >&5
+$as_echo_n "checking whether PAM_DATA_SILENT is declared... " >&6; }
+if test "${ac_cv_have_decl_PAM_DATA_SILENT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <security/pam_appl.h>
+
+int
+main ()
+{
+#ifndef PAM_DATA_SILENT
+  (void) PAM_DATA_SILENT;
+#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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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_have_decl_PAM_DATA_SILENT=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_PAM_DATA_SILENT=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_PAM_DATA_SILENT" >&5
+$as_echo "$ac_cv_have_decl_PAM_DATA_SILENT" >&6; }
+if test "x$ac_cv_have_decl_PAM_DATA_SILENT" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PAM_DATA_SILENT 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PAM_DATA_SILENT 0
+_ACEOF
+
+
+fi
+
+
+
+
+       save_libs=$LIBS
+       LIBS="$LIBS $LIBPAM"
+       # We do not use AC_CHECK_FUNCS to avoid duplicated definition with
+       # Linux PAM.
+       { $as_echo "$as_me:$LINENO: checking for pam_fail_delay" >&5
+$as_echo_n "checking for pam_fail_delay... " >&6; }
+if test "${ac_cv_func_pam_fail_delay+set}" = set; then
+  $as_echo_n "(cached) " >&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 pam_fail_delay to an innocuous variant, in case <limits.h> declares pam_fail_delay.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define pam_fail_delay innocuous_pam_fail_delay
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char pam_fail_delay (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef pam_fail_delay
+
+/* 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 pam_fail_delay ();
+/* 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_pam_fail_delay || defined __stub___pam_fail_delay
+choke me
+#endif
+
+int
+main ()
+{
+return pam_fail_delay ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_pam_fail_delay=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_pam_fail_delay=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_pam_fail_delay" >&5
+$as_echo "$ac_cv_func_pam_fail_delay" >&6; }
+if test "x$ac_cv_func_pam_fail_delay" = x""yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAS_PAM_FAIL_DELAY 1
+_ACEOF
+
+fi
+
+       LIBS=$save_libs
+
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_PAM 1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define SHADOW_PAM_CONVERSATION $pam_conv_function
+_ACEOF
+
+        if true; then
+  USE_PAM_TRUE=
+  USE_PAM_FALSE='#'
+else
+  USE_PAM_TRUE='#'
+  USE_PAM_FALSE=
+fi
+
+
+       { $as_echo "$as_me:$LINENO: checking use login and su access checking if PAM not used" >&5
+$as_echo_n "checking use login and su access checking if PAM not used... " >&6; }
+       { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+else
+
+cat >>confdefs.h <<\_ACEOF
+#define SU_ACCESS 1
+_ACEOF
+
+        if false; then
+  USE_PAM_TRUE=
+  USE_PAM_FALSE='#'
+else
+  USE_PAM_TRUE='#'
+  USE_PAM_FALSE=
+fi
+
+       { $as_echo "$as_me:$LINENO: checking use login and su access checking if PAM not used" >&5
+$as_echo_n "checking use login and su access checking if PAM not used... " >&6; }
+       { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+
+if test "$enable_acct_tools_setuid" != "no"; then
+       if test "$with_libpam" != "yes"; then
+               if test "$enable_acct_tools_setuid" = "yes"; then
+                       { { $as_echo "$as_me:$LINENO: error: PAM support is required for --enable-account-tools-setuid" >&5
+$as_echo "$as_me: error: PAM support is required for --enable-account-tools-setuid" >&2;}
+   { (exit 1); exit 1; }; }
+               else
+                       enable_acct_tools_setuid="no"
+               fi
+       else
+               enable_acct_tools_setuid="yes"
+       fi
+       if test "$enable_acct_tools_setuid" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ACCT_TOOLS_SETUID 1
+_ACEOF
+
+       fi
+fi
+ if test "x$enable_acct_tools_setuid" = "xyes"; then
+  ACCT_TOOLS_SETUID_TRUE=
+  ACCT_TOOLS_SETUID_FALSE='#'
+else
+  ACCT_TOOLS_SETUID_TRUE='#'
+  ACCT_TOOLS_SETUID_FALSE=
+fi
+
+
+
+
+if test "$with_skey" = "yes"; then
+       { $as_echo "$as_me:$LINENO: checking for MD5Init in -lmd" >&5
+$as_echo_n "checking for MD5Init in -lmd... " >&6; }
+if test "${ac_cv_lib_md_MD5Init+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmd  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 MD5Init ();
+int
+main ()
+{
+return MD5Init ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_md_MD5Init=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_md_MD5Init=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_md_MD5Init" >&5
+$as_echo "$ac_cv_lib_md_MD5Init" >&6; }
+if test "x$ac_cv_lib_md_MD5Init" = x""yes; then
+  LIBMD=-lmd
+fi
+
+       { $as_echo "$as_me:$LINENO: checking for skeychallenge in -lskey" >&5
+$as_echo_n "checking for skeychallenge in -lskey... " >&6; }
+if test "${ac_cv_lib_skey_skeychallenge+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lskey  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* 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 skeychallenge ();
+int
+main ()
+{
+return skeychallenge ();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_skey_skeychallenge=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_skey_skeychallenge=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_skey_skeychallenge" >&5
+$as_echo "$ac_cv_lib_skey_skeychallenge" >&6; }
+if test "x$ac_cv_lib_skey_skeychallenge" = x""yes; then
+  LIBSKEY=-lskey
+else
+  { { $as_echo "$as_me:$LINENO: error: liskey missing. You can download S/Key source code from http://rsync1.it.gentoo.org/gentoo/distfiles/skey-1.1.5.tar.bz2" >&5
+$as_echo "$as_me: error: liskey missing. You can download S/Key source code from http://rsync1.it.gentoo.org/gentoo/distfiles/skey-1.1.5.tar.bz2" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+cat >>confdefs.h <<\_ACEOF
+#define SKEY 1
+_ACEOF
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+               #include <stdio.h>
+               #include <skey.h>
+
+int
+main ()
+{
+
+               skeychallenge((void*)0, (void*)0, (void*)0, 0);
+
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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
+
+cat >>confdefs.h <<\_ACEOF
+#define SKEY_BSD_STYLE 1
+_ACEOF
+
+else
+  $as_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
+
+if test "$enable_utmpx" = "yes"; then
+       if test "$ac_cv_header_utmpx_h" != "yes"; then
+               { { $as_echo "$as_me:$LINENO: error: The utmpx.h header file is required for utmpx support." >&5
+$as_echo "$as_me: error: The utmpx.h header file is required for utmpx support." >&2;}
+   { (exit 1); exit 1; }; }
+       fi
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_UTMPX 1
+_ACEOF
+
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define SHELL "$SHELL"
+_ACEOF
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
+    # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then
+  enableval=$enable_nls; USE_NLS=$enableval
+else
+  USE_NLS=yes
+fi
+
+  { $as_echo "$as_me:$LINENO: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+
+
+
+
+      GETTEXT_MACRO_VERSION=0.17
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# 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
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGFMT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case "$MSGFMT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+    ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+  { $as_echo "$as_me:$LINENO: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GMSGFMT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case $GMSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  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_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+  { $as_echo "$as_me:$LINENO: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+    case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+    *) MSGFMT_015=$MSGFMT ;;
+  esac
+
+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# 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
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XGETTEXT+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case "$XGETTEXT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+    ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+  { $as_echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+    rm -f messages.po
+
+    case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# 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
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MSGMERGE+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  case "$MSGMERGE" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
+            ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+    ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+  { $as_echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+        test -n "$localedir" || localedir='${datadir}/locale'
+
+
+    test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+
+
+  ac_config_commands="$ac_config_commands po-directories"
+
+
+
+      if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# 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
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+$as_echo_n "checking for ld used by GCC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${acl_cv_path_LD+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break ;;
+      *)
+       test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:$LINENO: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${acl_cv_prog_gnu_ld+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac
+fi
+{ $as_echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+                                                { $as_echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
+if test "${acl_cv_rpath+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
+  wl="$acl_cv_wl"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+    # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then
+  enableval=$enable_rpath; :
+else
+  enable_rpath=yes
+fi
+
+
+
+                  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS=       }"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then
+  withval=$with_libiconv_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+
+fi
+
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  LIBICONV_PREFIX=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='iconv '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+                                    if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+                        if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                                    if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$acl_hardcode_direct" = yes; then
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+              else
+                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                LIBICONV_PREFIX="$basedir"
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+    done
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5
+$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
+if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <CoreFoundation/CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFPREFERENCESCOPYAPPVALUE 1
+_ACEOF
+
+  fi
+    { $as_echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5
+$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
+if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <CoreFoundation/CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  gt_cv_func_CFLocaleCopyCurrent=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gt_cv_func_CFLocaleCopyCurrent=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
+fi
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFLOCALECOPYCURRENT 1
+_ACEOF
+
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+  fi
+
+
+
+
+
+
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+    case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+    if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+
+
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
+
+        { $as_echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
+$as_echo_n "checking for GNU gettext in libc... " >&6; }
+if { as_var=$gt_func_gnugettext_libc; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$gt_func_gnugettext_libc=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$gt_func_gnugettext_libc=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$gt_func_gnugettext_libc'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+
+
+
+
+
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { $as_echo "$as_me:$LINENO: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
+if test "${am_cv_func_iconv+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  am_cv_func_iconv=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+      LIBS="$am_save_LIBS"
+    fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+    { $as_echo "$as_me:$LINENO: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
+if test "${am_cv_func_iconv_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+            am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      if test "$cross_compiling" = yes; then
+  case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          return 1;
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    return 1;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  am_cv_func_iconv_works=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+am_cv_func_iconv_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+      LIBS="$am_save_LIBS"
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ICONV 1
+_ACEOF
+
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { $as_echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:$LINENO: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libintl-prefix was given.
+if test "${with_libintl_prefix+set}" = set; then
+  withval=$with_libintl_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+
+fi
+
+      LIBINTL=
+  LTLIBINTL=
+  INCINTL=
+  LIBINTL_PREFIX=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='intl '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+                                    if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+                        if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                                    if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$acl_hardcode_direct" = yes; then
+                                                      LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                                                            LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                                                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
+              else
+                                                LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                LIBINTL_PREFIX="$basedir"
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+                    LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+            LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+    done
+  fi
+
+          { $as_echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
+$as_echo_n "checking for GNU gettext in libintl... " >&6; }
+if { as_var=$gt_func_gnugettext_libintl; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+                        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$gt_func_gnugettext_libintl=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$gt_func_gnugettext_libintl=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+                        if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+  ;
+  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 ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$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
+  $as_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 && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                eval "$gt_func_gnugettext_libintl=yes"
+
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"
+fi
+ac_res=`eval 'as_val=${'$gt_func_gnugettext_libintl'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+        fi
+
+                                        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+                    LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
+
+
+
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+                LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+    else
+      USE_NLS=no
+    fi
+  fi
+
+  { $as_echo "$as_me:$LINENO: checking whether to use NLS" >&5
+$as_echo_n "checking whether to use NLS... " >&6; }
+  { $as_echo "$as_me:$LINENO: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
+  if test "$USE_NLS" = "yes"; then
+    { $as_echo "$as_me:$LINENO: checking where the gettext function comes from" >&5
+$as_echo_n "checking where the gettext function comes from... " >&6; }
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    { $as_echo "$as_me:$LINENO: result: $gt_source" >&5
+$as_echo "$gt_source" >&6; }
+  fi
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        { $as_echo "$as_me:$LINENO: checking how to link with libintl" >&5
+$as_echo_n "checking how to link with libintl... " >&6; }
+        { $as_echo "$as_me:$LINENO: result: $LIBINTL" >&5
+$as_echo "$LIBINTL" >&6; }
+
+  for element in $INCINTL; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+      fi
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GETTEXT 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DCGETTEXT 1
+_ACEOF
+
+    fi
+
+        POSUB=po
+  fi
+
+
+
+    INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+ if test "x$USE_NLS" = "xyes"; then
+  USE_NLS_TRUE=
+  USE_NLS_FALSE='#'
+else
+  USE_NLS_TRUE='#'
+  USE_NLS_FALSE=
+fi
+
+
+ac_config_files="$ac_config_files Makefile po/Makefile.in doc/Makefile man/Makefile man/config.xml man/po/Makefile.in man/cs/Makefile man/de/Makefile man/es/Makefile man/fi/Makefile man/fr/Makefile man/hu/Makefile man/id/Makefile man/it/Makefile man/ja/Makefile man/ko/Makefile man/pl/Makefile man/pt_BR/Makefile man/ru/Makefile man/sv/Makefile man/tr/Makefile man/zh_CN/Makefile man/zh_TW/Makefile libmisc/Makefile lib/Makefile src/Makefile contrib/Makefile etc/Makefile etc/pam.d/Makefile shadow.spec"
+
+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_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) $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" &&
+      { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+$as_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=`$as_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
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${USE_SHA_CRYPT_TRUE}" && test -z "${USE_SHA_CRYPT_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"USE_SHA_CRYPT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"USE_SHA_CRYPT\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${SHADOWGRP_TRUE}" && test -z "${SHADOWGRP_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"SHADOWGRP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"SHADOWGRP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${ENABLE_REGENERATE_MAN_TRUE}" && test -z "${ENABLE_REGENERATE_MAN_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"ENABLE_REGENERATE_MAN\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"ENABLE_REGENERATE_MAN\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${USE_PAM_TRUE}" && test -z "${USE_PAM_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"USE_PAM\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"USE_PAM\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${USE_PAM_TRUE}" && test -z "${USE_PAM_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"USE_PAM\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"USE_PAM\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${ACCT_TOOLS_SETUID_TRUE}" && test -z "${ACCT_TOOLS_SETUID_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"ACCT_TOOLS_SETUID\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"ACCT_TOOLS_SETUID\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${USE_NLS_TRUE}" && test -z "${USE_NLS_FALSE}"; then
+  { { $as_echo "$as_me:$LINENO: error: conditional \"USE_NLS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+$as_echo "$as_me: error: conditional \"USE_NLS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#! $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 || ac_write_fail=1
+## --------------------- ##
+## 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=:
+  # Pre-4.2 versions of Zsh do 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
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+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.)
+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
+  $as_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.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# 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 ||
+$as_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" ||
+    { $as_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 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  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
+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 $as_me, which was
+generated by GNU Autoconf 2.63.  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
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTION]... [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+  -q, --quiet, --silent
+                   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
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.63,
+  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2008 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'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+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 )
+    $as_echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    { $as_echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    $as_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.
+  -*) { $as_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 || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+  ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+    # from automake < 1.5.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# 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" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
+    "man/config.xml") CONFIG_FILES="$CONFIG_FILES man/config.xml" ;;
+    "man/po/Makefile.in") CONFIG_FILES="$CONFIG_FILES man/po/Makefile.in" ;;
+    "man/cs/Makefile") CONFIG_FILES="$CONFIG_FILES man/cs/Makefile" ;;
+    "man/de/Makefile") CONFIG_FILES="$CONFIG_FILES man/de/Makefile" ;;
+    "man/es/Makefile") CONFIG_FILES="$CONFIG_FILES man/es/Makefile" ;;
+    "man/fi/Makefile") CONFIG_FILES="$CONFIG_FILES man/fi/Makefile" ;;
+    "man/fr/Makefile") CONFIG_FILES="$CONFIG_FILES man/fr/Makefile" ;;
+    "man/hu/Makefile") CONFIG_FILES="$CONFIG_FILES man/hu/Makefile" ;;
+    "man/id/Makefile") CONFIG_FILES="$CONFIG_FILES man/id/Makefile" ;;
+    "man/it/Makefile") CONFIG_FILES="$CONFIG_FILES man/it/Makefile" ;;
+    "man/ja/Makefile") CONFIG_FILES="$CONFIG_FILES man/ja/Makefile" ;;
+    "man/ko/Makefile") CONFIG_FILES="$CONFIG_FILES man/ko/Makefile" ;;
+    "man/pl/Makefile") CONFIG_FILES="$CONFIG_FILES man/pl/Makefile" ;;
+    "man/pt_BR/Makefile") CONFIG_FILES="$CONFIG_FILES man/pt_BR/Makefile" ;;
+    "man/ru/Makefile") CONFIG_FILES="$CONFIG_FILES man/ru/Makefile" ;;
+    "man/sv/Makefile") CONFIG_FILES="$CONFIG_FILES man/sv/Makefile" ;;
+    "man/tr/Makefile") CONFIG_FILES="$CONFIG_FILES man/tr/Makefile" ;;
+    "man/zh_CN/Makefile") CONFIG_FILES="$CONFIG_FILES man/zh_CN/Makefile" ;;
+    "man/zh_TW/Makefile") CONFIG_FILES="$CONFIG_FILES man/zh_TW/Makefile" ;;
+    "libmisc/Makefile") CONFIG_FILES="$CONFIG_FILES libmisc/Makefile" ;;
+    "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;;
+    "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;;
+    "etc/pam.d/Makefile") CONFIG_FILES="$CONFIG_FILES etc/pam.d/Makefile" ;;
+    "shadow.spec") CONFIG_FILES="$CONFIG_FILES shadow.spec" ;;
+
+  *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+$as_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
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+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")
+} ||
+{
+   $as_echo "$as_me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr='\r'
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_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
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = "\a"
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
+$as_echo "$as_me: error: could not setup config files machinery" >&2;}
+   { (exit 1); exit 1; }; }
+_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 || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_t"; then
+    break
+  elif $ac_last_try; then
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[    ]*#[    ]*define[       ][      ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = "\a"
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # 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.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
+$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
+   { (exit 1); exit 1; }; }
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
+$as_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 ||
+          { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; 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 '`
+         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+       `' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; } ;;
+    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 ||
+$as_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=`$as_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 ||
+$as_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" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_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=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_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
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# 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=
+
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  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 || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;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
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+
+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"; } &&
+  { $as_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
+$as_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 \
+  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+    } >"$tmp/config.h" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file" \
+       || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
+$as_echo "$as_me: error: could not create -" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$_am_arg" : 'X\(//\)[^/]' \| \
+        X"$_am_arg" : 'X\(//\)$' \| \
+        X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || # Autoconf 2.62 quotes --file arguments for eval, but not when files
+# are listed without --file.  Let's play safe and only enable the eval
+# if we detect the quoting.
+case $CONFIG_FILES in
+*\'*) eval set x "$CONFIG_FILES" ;;
+*)   set x $CONFIG_FILES ;;
+esac
+shift
+for mf
+do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # Grep'ing the whole file is not good either: AIX grep has a line
+  # limit of 2048, but all sed's we know have understand at least 4000.
+  if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+    dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$mf" : 'X\(//\)[^/]' \| \
+        X"$mf" : 'X\(//\)$' \| \
+        X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$file" : 'X\(//\)[^/]' \| \
+        X"$file" : 'X\(//\)$' \| \
+        X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+    { as_dir=$dirpart/$fdir
+  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=`$as_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 ||
+$as_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" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1+=\$2"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+    ;;
+  esac
+
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+ ;;
+    "po-directories":C)
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        # Treat a directory as a PO directory if and only if it has a
+        # POTFILES.in file. This allows packages to have multiple PO
+        # directories under different names or in different locations.
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[  ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.in.
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          # Compute POFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+          # Compute UPDATEPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+          # Compute DUMMYPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+          # Compute GMOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          GMOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done ;;
+
+  esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+
+
+# 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
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+echo
+echo "shadow will be compiled with the following features:"
+echo
+echo " auditing support:               $with_audit"
+echo " CrackLib support:               $with_libcrack"
+echo " PAM support:                    $with_libpam"
+if test "$with_libpam" = "yes"; then
+echo " suid account management tools:  $enable_acct_tools_setuid"
+fi
+echo " SELinux support:                $with_selinux"
+echo " shadow group support:           $enable_shadowgrp"
+echo " S/Key support:                  $with_skey"
+echo " SHA passwords encryption:       $with_sha_crypt"
+echo " nscd support:                   $with_nscd"
+echo
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..2ddc78e
--- /dev/null
@@ -0,0 +1,548 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT
+AM_INIT_AUTOMAKE(shadow, 4.1.4.2)
+AC_CONFIG_HEADERS([config.h])
+
+dnl Some hacks...
+test "$prefix" = "NONE" && prefix="/usr"
+test "$prefix" = "/usr" && exec_prefix=""
+
+AC_GNU_SOURCE
+
+AM_DISABLE_SHARED
+AM_ENABLE_STATIC
+
+AM_MAINTAINER_MODE
+
+dnl Checks for programs.
+AC_PROG_CC
+AC_ISC_POSIX
+AC_PROG_LN_S
+AC_PROG_YACC
+AM_C_PROTOTYPES
+AM_PROG_LIBTOOL
+
+dnl Checks for libraries.
+
+dnl Checks for header files.
+AC_HEADER_DIRENT
+AC_HEADER_STDC
+AC_HEADER_SYS_WAIT
+AC_HEADER_STDBOOL
+
+AC_CHECK_HEADERS(errno.h fcntl.h limits.h unistd.h sys/time.h utmp.h \
+       utmpx.h termios.h termio.h sgtty.h sys/ioctl.h syslog.h paths.h \
+       utime.h ulimit.h sys/resource.h gshadow.h lastlog.h \
+       locale.h rpc/key_prot.h netdb.h)
+
+dnl shadow now uses the libc's shadow implementation
+AC_CHECK_HEADER([shadow.h],,[AC_MSG_ERROR([You need a libc with shadow.h])])
+
+AC_CHECK_FUNCS(l64a fchmod fchown fsync futimes getgroups gethostname getspnam \
+       gettimeofday getusershell getutent initgroups lchown lckpwdf lstat \
+       lutimes memcpy memset setgroups sigaction strchr updwtmp updwtmpx innetgr \
+       getpwnam_r getpwuid_r getgrnam_r getgrgid_r getspnam_r getaddrinfo)
+AC_SYS_LARGEFILE
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_TYPE_UID_T
+AC_TYPE_OFF_T
+AC_TYPE_PID_T
+AC_TYPE_MODE_T
+AC_HEADER_STAT
+AC_CHECK_MEMBERS([struct stat.st_rdev])
+AC_CHECK_MEMBERS([struct stat.st_atim])
+AC_CHECK_MEMBERS([struct stat.st_atimensec])
+AC_CHECK_MEMBERS([struct stat.st_mtim])
+AC_CHECK_MEMBERS([struct stat.st_mtimensec])
+AC_HEADER_TIME
+AC_STRUCT_TM
+
+AC_CHECK_MEMBERS([struct utmp.ut_type,
+                  struct utmp.ut_id,
+                  struct utmp.ut_name,
+                  struct utmp.ut_user,
+                  struct utmp.ut_host,
+                  struct utmp.ut_syslen,
+                  struct utmp.ut_addr,
+                  struct utmp.ut_addr_v6,
+                  struct utmp.ut_time,
+                  struct utmp.ut_xtime,
+                  struct utmp.ut_tv],,,[[#include <utmp.h>]])
+dnl There are dependencies:
+dnl If UTMPX has to be used, the utmp structure shall have a ut_id field.
+if test "$ac_cv_header_utmpx_h" = "yes" &&
+   test "$ac_cv_member_struct_utmp_ut_id" != "yes"; then
+       AC_MSG_ERROR(Systems with UTMPX and no ut_id field in the utmp structure are not supported)
+fi
+
+AC_CHECK_MEMBERS([struct utmpx.ut_name,
+                  struct utmpx.ut_host,
+                  struct utmpx.ut_syslen,
+                  struct utmpx.ut_addr,
+                  struct utmpx.ut_addr_v6,
+                  struct utmpx.ut_time,
+                  struct utmpx.ut_xtime],,,[[#include <utmpx.h>]])
+
+if test "$ac_cv_header_lastlog_h" = "yes"; then
+       AC_CACHE_CHECK(for ll_host in struct lastlog,
+               ac_cv_struct_lastlog_ll_host,
+               AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <lastlog.h>],
+                                       [struct lastlog ll; char *cp = ll.ll_host;]
+                               )],
+                       [ac_cv_struct_lastlog_ll_host=yes],
+                       [ac_cv_struct_lastlog_ll_host=no]
+               )
+       )
+
+       if test "$ac_cv_struct_lastlog_ll_host" = "yes"; then
+               AC_DEFINE(HAVE_LL_HOST, 1,
+                       [Define if struct lastlog has ll_host])
+       fi
+fi
+
+dnl Checks for library functions.
+AC_TYPE_GETGROUPS
+AC_TYPE_SIGNAL
+AC_FUNC_UTIME_NULL
+AC_FUNC_STRFTIME
+AC_REPLACE_FUNCS(mkdir putgrent putpwent putspent rename rmdir)
+AC_REPLACE_FUNCS(sgetgrent sgetpwent sgetspent)
+AC_REPLACE_FUNCS(snprintf strcasecmp strdup strerror strstr)
+
+AC_CHECK_FUNC(setpgrp)
+AC_FUNC_SETPGRP
+
+if test "$ac_cv_header_shadow_h" = "yes"; then
+       AC_CACHE_CHECK(for working shadow group support,
+               ac_cv_libc_shadowgrp,
+               AC_RUN_IFELSE([AC_LANG_SOURCE([
+                               #include <shadow.h>
+                               main()
+                               {
+                                       struct sgrp *sg = sgetsgent("test:x::");
+                                       /* NYS libc on Red Hat 3.0.3 has broken shadow group support */
+                                       return !sg || !sg->sg_adm || !sg->sg_mem;
+                               }]
+                       )],
+                       [ac_cv_libc_shadowgrp=yes],
+                       [ac_cv_libc_shadowgrp=no],
+                       [ac_cv_libc_shadowgrp=no]
+               )
+       )
+
+       if test "$ac_cv_libc_shadowgrp" = "yes"; then
+               AC_DEFINE(HAVE_SHADOWGRP, 1, [Have working shadow group support in libc])
+       fi
+fi
+
+AC_CACHE_CHECK([location of shared mail directory], shadow_cv_maildir,
+[for shadow_cv_maildir in /var/mail /var/spool/mail /usr/spool/mail /usr/mail none; do
+       if test -d $shadow_cv_maildir; then
+               break
+       fi
+done])
+if test $shadow_cv_maildir != none; then
+       AC_DEFINE_UNQUOTED(MAIL_SPOOL_DIR, "$shadow_cv_maildir",
+               [Location of system mail spool directory.])
+fi
+
+AC_CACHE_CHECK([location of user mail file], shadow_cv_mailfile,
+[for shadow_cv_mailfile in Mailbox mailbox Mail mail .mail none; do
+       if test -f $HOME/$shadow_cv_mailfile; then
+               break
+       fi
+done])
+if test $shadow_cv_mailfile != none; then
+       AC_DEFINE_UNQUOTED(MAIL_SPOOL_FILE, "$shadow_cv_mailfile",
+               [Name of user's mail spool file if stored in user's home directory.])
+fi
+
+AC_CACHE_CHECK([location of utmp], shadow_cv_utmpdir,
+[for shadow_cv_utmpdir in /var/run /var/adm /usr/adm /etc none; do
+       if test -f $shadow_cv_utmpdir/utmp; then
+               break
+       fi
+done])
+if test "$shadow_cv_utmpdir" = "none"; then
+       AC_MSG_WARN(utmp file not found)
+fi
+AC_DEFINE_UNQUOTED(_UTMP_FILE, "$shadow_cv_utmpdir/utmp",
+       [Path for utmp file.])
+
+AC_CACHE_CHECK([location of faillog/lastlog/wtmp], shadow_cv_logdir,
+[for shadow_cv_logdir in /var/log /var/adm /usr/adm /etc; do
+       if test -d $shadow_cv_logdir; then
+               break
+       fi
+done])
+AC_DEFINE_UNQUOTED(_WTMP_FILE, "$shadow_cv_logdir/wtmp",
+       [Path for wtmp file.])
+AC_DEFINE_UNQUOTED(LASTLOG_FILE, "$shadow_cv_logdir/lastlog",
+       [Path for lastlog file.])
+AC_DEFINE_UNQUOTED(FAILLOG_FILE, "$shadow_cv_logdir/faillog",
+       [Path for faillog file.])
+
+AC_CACHE_CHECK([location of the passwd program], shadow_cv_passwd_dir,
+[if test -f /usr/bin/passwd; then
+       shadow_cv_passwd_dir=/usr/bin
+else
+       shadow_cv_passwd_dir=/bin
+fi])
+AC_DEFINE_UNQUOTED(PASSWD_PROGRAM, "$shadow_cv_passwd_dir/passwd",
+       [Path to passwd program.])
+
+dnl XXX - quick hack, should disappear before anyone notices :).
+AC_DEFINE(USE_SYSLOG, 1, [Define to use syslog().])
+AC_DEFINE(RLOGIN, 1, [Define if login should support the -r flag for rlogind.])
+AC_DEFINE(RUSEROK, 0, [Define to the ruserok() "success" return value (0 or 1).])
+
+AC_ARG_ENABLE(shadowgrp,
+       [AC_HELP_STRING([--enable-shadowgrp], [enable shadow group support @<:@default=yes@:>@])],
+       [case "${enableval}" in
+        yes) enable_shadowgrp="yes" ;;
+         no) enable_shadowgrp="no" ;;
+          *) AC_MSG_ERROR(bad value ${enableval} for --enable-shadowgrp) ;;
+        esac],
+       [enable_shadowgrp="yes"]
+)
+
+AC_ARG_ENABLE(man,
+       [AC_HELP_STRING([--enable-man],
+               [regenerate roff man pages from Docbook @<:@default=no@:>@])],
+       [enable_man="${enableval}"],
+       [enable_man="no"]
+)
+
+AC_ARG_ENABLE(account-tools-setuid,
+       [AC_HELP_STRING([--enable-account-tools-setuid],
+               [Install the user and group management tools setuid and authenticate the callers. This requires --with-pam.])],
+       [case "${enableval}" in
+        yes) enable_acct_tools_setuid="yes" ;;
+         no) enable_acct_tools_setuid="no" ;;
+          *) AC_MSG_ERROR(bad value ${enableval} for --enable-account-tools-setuid)
+          ;;
+        esac],
+       [enable_acct_tools_setuid="maybe"]
+)
+
+AC_ARG_ENABLE(utmpx,
+       [AC_HELP_STRING([--enable-utmpx],
+                       [enable loggin in utmpx / wtmpx @<:@default=no@:>@])],
+       [case "${enableval}" in
+        yes) enable_utmpx="yes" ;;
+         no) enable_utmpx="no" ;;
+          *) AC_MSG_ERROR(bad value ${enableval} for --enable-utmpx) ;;
+        esac],
+       [enable_utmpx="no"]
+)
+
+AC_ARG_WITH(audit, 
+       [AC_HELP_STRING([--with-audit], [use auditing support @<:@default=yes if found@:>@])],
+       [with_audit=$withval], [with_audit=maybe])
+AC_ARG_WITH(libpam,
+       [AC_HELP_STRING([--with-libpam], [use libpam for PAM support @<:@default=yes if found@:>@])],
+       [with_libpam=$withval], [with_libpam=maybe])
+AC_ARG_WITH(selinux,
+       [AC_HELP_STRING([--with-selinux], [use SELinux support @<:@default=yes if found@:>@])],
+       [with_selinux=$withval], [with_selinux=maybe])
+AC_ARG_WITH(skey,
+       [AC_HELP_STRING([--with-skey], [use S/Key support @<:@default=no@:>@])],
+       [with_skey=$withval], [with_skey=no])
+AC_ARG_WITH(libcrack,
+       [AC_HELP_STRING([--with-libcrack], [use libcrack @<:@default=yes if found and if PAM not enabled@:>@])],
+       [with_libcrack=$withval], [with_libcrack=no])
+AC_ARG_WITH(sha-crypt,
+       [AC_HELP_STRING([--with-sha-crypt], [allow the SHA256 and SHA512 password encryption algorithms @<:@default=yes@:>@])],
+       [with_sha_crypt=$withval], [with_sha_crypt=yes])
+AC_ARG_WITH(nscd,
+       [AC_HELP_STRING([--with-nscd], [enable support for nscd @<:@default=yes@:>@])],
+       [with_nscd=$withval], [with_nscd=yes])
+AC_ARG_WITH(group-name-max-length,
+       [AC_HELP_STRING([--with-group-name-max-length], [set max group name length @<:@default=16@:>@])],
+       [with_group_name_max_length=$withval], [with_group_name_max_length=yes])
+
+if test "$with_group_name_max_length" = "no" ; then
+       with_group_name_max_length=0
+elif test "$with_group_name_max_length" = "yes" ; then
+       with_group_name_max_length=16
+fi
+AC_DEFINE_UNQUOTED(GROUP_NAME_MAX_LENGTH, $with_group_name_max_length, [max group name length])
+AC_SUBST(GROUP_NAME_MAX_LENGTH)
+GROUP_NAME_MAX_LENGTH="$with_group_name_max_length"
+
+AM_CONDITIONAL(USE_SHA_CRYPT, test "x$with_sha_crypt" = "xyes")
+if test "$with_sha_crypt" = "yes"; then
+       AC_DEFINE(USE_SHA_CRYPT, 1, [Define to allow the SHA256 and SHA512 password encryption algorithms])
+fi
+
+if test "$with_nscd" = "yes"; then
+       AC_CHECK_FUNC(posix_spawn,
+                     [AC_DEFINE(USE_NSCD, 1, [Define to support flushing of nscd caches])],
+                     [AC_MSG_ERROR([posix_spawn is needed for nscd support])])
+fi
+
+dnl Check for some functions in libc first, only if not found check for
+dnl other libraries.  This should prevent linking libnsl if not really
+dnl needed (Linux glibc, Irix), but still link it if needed (Solaris).
+
+AC_SEARCH_LIBS(inet_ntoa, inet)
+AC_SEARCH_LIBS(socket, socket)
+AC_SEARCH_LIBS(gethostbyname, nsl)
+
+if test "$enable_shadowgrp" = "yes"; then
+       AC_DEFINE(SHADOWGRP, 1, [Define to support the shadow group file.])
+fi
+AM_CONDITIONAL(SHADOWGRP, test "x$enable_shadowgrp" = "xyes")
+
+if test "$enable_man" = "yes"; then
+       dnl
+       dnl Check for xsltproc
+       dnl
+       AC_PATH_PROG([XSLTPROC], [xsltproc])
+       if test -z "$XSLTPROC"; then
+               enable_man=no
+       fi
+
+       dnl check for DocBook DTD and stylesheets in the local catalog.
+       JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN],
+               [DocBook XML DTD V4.1.2], [], enable_man=no)
+       JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
+               [DocBook XSL Stylesheets >= 1.70.1], [], enable_man=no)
+fi
+AM_CONDITIONAL(ENABLE_REGENERATE_MAN, test "x$enable_man" != "xno")
+
+AC_SUBST(LIBCRYPT)
+AC_CHECK_LIB(crypt, crypt, [LIBCRYPT=-lcrypt],
+       [AC_MSG_ERROR([crypt() not found])])
+
+AC_SUBST(LIBAUDIT)
+if test "$with_audit" != "no"; then
+       AC_CHECK_HEADER(libaudit.h, [audit_header="yes"], [audit_header="no"])
+       if test "$audit_header$with_audit" = "noyes" ; then
+               AC_MSG_ERROR([libaudit.h is missing])
+       elif test "$audit_header" = "yes"; then
+               AC_CHECK_DECL(AUDIT_ADD_USER,,[audit_header="no"],[#include <libaudit.h>])
+               AC_CHECK_DECL(AUDIT_DEL_USER,,[audit_header="no"],[#include <libaudit.h>])
+               AC_CHECK_DECL(AUDIT_ADD_GROUP,,[audit_header="no"],[#include <libaudit.h>])
+               AC_CHECK_DECL(AUDIT_DEL_GROUP,,[audit_header="no"],[#include <libaudit.h>])
+               if test "$audit_header$with_audit" = "noyes" ; then
+                       AC_MSG_ERROR([AUDIT_ADD_USER AUDIT_DEL_USER AUDIT_ADD_GROUP or AUDIT_DEL_GROUP missing from libaudit.h])
+               fi
+       fi
+       if test "$audit_header" = "yes"; then
+               AC_CHECK_LIB(audit, audit_log_acct_message,
+                            [audit_lib="yes"], [audit_lib="no"])
+               if test "$audit_lib$with_audit" = "noyes" ; then
+                       AC_MSG_ERROR([libaudit not found])
+               elif test "$audit_lib" = "no" ; then
+                       with_audit="no"
+               else
+                       AC_DEFINE(WITH_AUDIT, 1,
+                                 [Define if you want to enable Audit messages])
+                       LIBAUDIT="-laudit"
+                       with_audit="yes"
+               fi
+       else
+               with_audit="no"
+       fi
+fi
+
+AC_SUBST(LIBCRACK)
+if test "$with_libcrack" = "yes"; then
+       echo "checking cracklib flavour, don't be surprised by the results"
+       AC_CHECK_LIB(crack, FascistCheck,
+               [LIBCRACK=-lcrack AC_DEFINE(HAVE_LIBCRACK, 1, [Defined if you have libcrack.])])
+       AC_CHECK_LIB(crack, FascistHistory,
+               AC_DEFINE(HAVE_LIBCRACK_HIST, 1, [Defined if you have the ts&szs cracklib.]))
+       AC_CHECK_LIB(crack, FascistHistoryPw,
+               AC_DEFINE(HAVE_LIBCRACK_PW, 1, [Defined if it includes *Pw functions.]))
+fi
+
+AC_SUBST(LIBSELINUX)
+if test "$with_selinux" != "no"; then
+       AC_CHECK_HEADERS(selinux/selinux.h, [selinux_header="yes"], [selinux_header="no"])
+       if test "$selinux_header$with_selinux" = "noyes" ; then
+               AC_MSG_ERROR([selinux/selinux.h is missing])
+       elif test "$selinux_header" = "yes" ; then
+               AC_CHECK_LIB(selinux, is_selinux_enabled,
+                            [selinux_lib="yes"], [selinux_lib="no"])
+               if test "$selinux_lib$with_selinux" = "noyes" ; then
+                       AC_MSG_ERROR([libselinux not found])
+               elif test "$selinux_lib" = "no" ; then
+                       with_selinux="no"
+               else
+                       AC_DEFINE(WITH_SELINUX, 1,
+                                 [Build shadow with SELinux support])
+                       LIBSELINUX="-lselinux"
+                       with_selinux="yes"
+               fi
+       else
+               with_selinux="no"
+       fi
+fi
+
+AC_SUBST(LIBPAM)
+if test "$with_libpam" != "no"; then
+       AC_CHECK_LIB(pam, pam_start,
+                    [pam_lib="yes"], [pam_lib="no"])
+       if test "$pam_lib$with_libpam" = "noyes" ; then
+               AC_MSG_ERROR(libpam not found)
+       fi
+
+       LIBPAM="-lpam"
+       pam_conv_function="no"
+
+       AC_CHECK_LIB(pam, openpam_ttyconv,
+                    [pam_conv_function="openpam_ttyconv"],
+                    AC_CHECK_LIB(pam_misc, misc_conv,
+                                 [pam_conv_function="misc_conv"; LIBPAM="$LIBPAM -lpam_misc"])
+                   )
+
+       if test "$pam_conv_function$with_libpam" = "noyes" ; then
+               AC_MSG_ERROR(PAM conversation function not found)
+       fi
+
+       pam_headers_found=no
+       AC_CHECK_HEADERS( [security/openpam.h security/pam_misc.h],
+                        [ pam_headers_found=yes ; break ], [],
+                        [ #include <security/pam_appl.h> ] )
+       if test "$pam_headers_found$with_libpam" = "noyes" ; then
+                       AC_MSG_ERROR(PAM headers not found)
+       fi
+
+
+       if test "$pam_lib$pam_headers_found" = "yesyes" -a "$pam_conv_function" != "no" ; then
+               with_libpam="yes"
+       else
+               with_libpam="no"
+               unset LIBPAM
+       fi
+fi
+dnl Now with_libpam is either yes or no
+if test "$with_libpam" = "yes"; then
+       AC_CHECK_DECLS([PAM_ESTABLISH_CRED,
+                       PAM_DELETE_CRED,
+                       PAM_NEW_AUTHTOK_REQD,
+                       PAM_DATA_SILENT],
+                      [], [], [#include <security/pam_appl.h>])
+
+
+       save_libs=$LIBS
+       LIBS="$LIBS $LIBPAM"
+       # We do not use AC_CHECK_FUNCS to avoid duplicated definition with
+       # Linux PAM.
+       AC_CHECK_FUNC(pam_fail_delay, [AC_DEFINE(HAS_PAM_FAIL_DELAY, 1, [Define to 1 if you have the declaration of 'pam_fail_delay'])])
+       LIBS=$save_libs
+
+       AC_DEFINE(USE_PAM, 1, [Define to support Pluggable Authentication Modules])
+       AC_DEFINE_UNQUOTED(SHADOW_PAM_CONVERSATION, [$pam_conv_function],[PAM converstation to use])
+       AM_CONDITIONAL(USE_PAM, [true])
+
+       AC_MSG_CHECKING(use login and su access checking if PAM not used)
+       AC_MSG_RESULT(no)
+else
+       AC_DEFINE(SU_ACCESS, 1, [Define to support /etc/suauth su access control.])
+       AM_CONDITIONAL(USE_PAM, [false])
+       AC_MSG_CHECKING(use login and su access checking if PAM not used)
+       AC_MSG_RESULT(yes)
+fi
+
+if test "$enable_acct_tools_setuid" != "no"; then
+       if test "$with_libpam" != "yes"; then
+               if test "$enable_acct_tools_setuid" = "yes"; then
+                       AC_MSG_ERROR(PAM support is required for --enable-account-tools-setuid)
+               else
+                       enable_acct_tools_setuid="no"
+               fi
+       else
+               enable_acct_tools_setuid="yes"
+       fi
+       if test "$enable_acct_tools_setuid" = "yes"; then
+               AC_DEFINE(ACCT_TOOLS_SETUID,
+                         1,
+                         [Define if account management tools should be installed setuid and authenticate the callers])
+       fi
+fi
+AM_CONDITIONAL(ACCT_TOOLS_SETUID, test "x$enable_acct_tools_setuid" = "xyes")
+
+AC_SUBST(LIBSKEY)
+AC_SUBST(LIBMD)
+if test "$with_skey" = "yes"; then
+       AC_CHECK_LIB(md, MD5Init, [LIBMD=-lmd])
+       AC_CHECK_LIB(skey, skeychallenge, [LIBSKEY=-lskey],
+               [AC_MSG_ERROR([liskey missing. You can download S/Key source code from http://rsync1.it.gentoo.org/gentoo/distfiles/skey-1.1.5.tar.bz2])])
+       AC_DEFINE(SKEY, 1, [Define to support S/Key logins.])
+       AC_TRY_COMPILE([
+               #include <stdio.h>
+               #include <skey.h>
+       ],[
+               skeychallenge((void*)0, (void*)0, (void*)0, 0);
+       ],[AC_DEFINE(SKEY_BSD_STYLE, 1, [Define to support newer BSD S/Key API])])
+fi
+
+if test "$enable_utmpx" = "yes"; then
+       if test "$ac_cv_header_utmpx_h" != "yes"; then
+               AC_MSG_ERROR([The utmpx.h header file is required for utmpx support.])
+       fi
+       AC_DEFINE(USE_UTMPX,
+                 1,
+                 [Define if utmpx should be used])
+fi
+
+AC_DEFINE_UNQUOTED(SHELL, ["$SHELL"], [The default shell.])
+
+AM_GNU_GETTEXT_VERSION(0.16)
+AM_GNU_GETTEXT([external], [need-ngettext])
+AM_CONDITIONAL(USE_NLS, test "x$USE_NLS" = "xyes")
+
+AC_CONFIG_FILES([
+       Makefile
+       po/Makefile.in
+       doc/Makefile
+       man/Makefile
+       man/config.xml
+       man/po/Makefile.in
+       man/cs/Makefile
+       man/de/Makefile
+       man/es/Makefile
+       man/fi/Makefile
+       man/fr/Makefile
+       man/hu/Makefile
+       man/id/Makefile
+       man/it/Makefile
+       man/ja/Makefile
+       man/ko/Makefile
+       man/pl/Makefile
+       man/pt_BR/Makefile
+       man/ru/Makefile
+       man/sv/Makefile
+       man/tr/Makefile
+       man/zh_CN/Makefile
+       man/zh_TW/Makefile
+       libmisc/Makefile
+       lib/Makefile
+       src/Makefile
+       contrib/Makefile
+       etc/Makefile
+       etc/pam.d/Makefile
+       shadow.spec
+])
+AC_OUTPUT
+
+echo
+echo "shadow will be compiled with the following features:"
+echo
+echo " auditing support:               $with_audit"
+echo " CrackLib support:               $with_libcrack"
+echo " PAM support:                    $with_libpam"
+if test "$with_libpam" = "yes"; then
+echo " suid account management tools:  $enable_acct_tools_setuid"
+fi
+echo " SELinux support:                $with_selinux"
+echo " shadow group support:           $enable_shadowgrp"
+echo " S/Key support:                  $with_skey"
+echo " SHA passwords encryption:       $with_sha_crypt"
+echo " nscd support:                   $with_nscd"
+echo
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
new file mode 100644 (file)
index 0000000..2c3160e
--- /dev/null
@@ -0,0 +1,6 @@
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+
+EXTRA_DIST = README adduser.c adduser-old.c adduser.sh adduser2.sh \
+ atudel groupmems.shar pwdauth.c shadow-anonftp.patch \
+ udbachk.tgz
diff --git a/contrib/Makefile.in b/contrib/Makefile.in
new file mode 100644 (file)
index 0000000..dcab32c
--- /dev/null
@@ -0,0 +1,364 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = contrib
+DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = README adduser.c adduser-old.c adduser.sh adduser2.sh \
+ atudel groupmems.shar pwdauth.c shadow-anonftp.patch \
+ udbachk.tgz
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  contrib/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  contrib/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/contrib/README b/contrib/README
new file mode 100644 (file)
index 0000000..c4d1bc0
--- /dev/null
@@ -0,0 +1,10 @@
+People keep sending various adduser programs and scripts...  They are
+all in this directory.  I haven't tested them, use at your own risk.
+Anyway, the best one I've seen so far is adduser-3.x from Debian.
+
+atudel is a perl script to remove at jobs owned by the specified user
+(atrm in at-2.9 for Linux can't do that).
+
+udbachk.tgz is a passwd/group/shadow file integrity checker.
+
+--marekm
diff --git a/contrib/adduser-old.c b/contrib/adduser-old.c
new file mode 100644 (file)
index 0000000..0b2080e
--- /dev/null
@@ -0,0 +1,300 @@
+/****
+** 03/17/96
+** hacked a bit more, removed unused code, cleaned up for gcc -Wall.
+** --marekm
+**
+** 02/26/96
+** modified to call shadow utils (useradd,chage,passwd) on shadowed 
+** systems - Cristian Gafton, gafton@sorosis.ro
+**
+** 6/27/95
+** shadow-adduser 1.4:
+**
+** now it copies the /etc/skel dir into the person's dir, 
+** makes the mail folders, changed some defaults and made a 'make 
+** install' just for the hell of it.
+**
+** Greg Gallagher
+** CIN.Net
+**
+** 1/28/95
+** shadow-adduser 1.3:
+** 
+** Basically a bug-fix on my additions in 1.2.  Thanx to Terry Stewart 
+** (stew@texas.net) for pointing out one of the many idiotic bugs I introduced.
+** It was such a stupid bug that I would have never seen it myself.
+**
+**                                Brandon
+*****
+** 01/27/95
+** 
+** shadow-adduser 1.2:
+** I took the C source from adduser-shadow (credits are below) and made
+** it a little more worthwhile.  Many small changes... Here's
+** the ones I can remember:
+** 
+** Removed support for non-shadowed systems (if you don't have shadow,
+**     use the original adduser, don't get this shadow version!)
+** Added support for the correct /etc/shadow fields (Min days before
+**     password change, max days before password change, Warning days,
+**     and how many days from expiry date does the account go invalid)
+**     The previous version just left all of those fields blank.
+**     There is still one field left (expiry date for the account, period)
+**     which I have left blank because I do not use it and didn't want to
+**     spend any more time on this.  I'm sure someone will put it in and
+**     tack another plethora of credits on here. :)
+** Added in the password date field, which should always reflect the last
+**     date the password was changed, for expiry purposes.  "passwd" always
+**     updates this field, so the adduser program should set it up right
+**     initially (or a user could keep thier initial password forever ;)
+**     The number is in days since Jan 1st, 1970.
+**
+**                       Have fun with it, and someone please make
+**                       a real version(this is still just a hack)
+**                       for us all to use (and Email it to me???)
+**
+**                               Brandon
+**                                  photon@usis.com
+**
+***** 
+** adduser 1.0: add a new user account (For systems not using shadow)
+** With a nice little interface and a will to do all the work for you.
+**
+** Craig Hagan
+** hagan@opine.cs.umass.edu
+**
+** Modified to really work, look clean, and find unused uid by Chris Cappuccio
+** chris@slinky.cs.umass.edu
+**
+*****
+**
+** 01/19/95
+**
+** FURTHER modifications to enable shadow passwd support (kludged, but
+** no more so than the original)  by Dan Crowson - dcrowson@mo.net
+**
+** Search on DAN for all changes...
+**
+*****
+**
+** cc -O -o adduser adduser.c
+** Use gcc if you have it... (political reasons beyond my control) (chris)
+**
+** I've gotten this program to work with success under Linux (without
+** shadow) and SunOS 4.1.3. I would assume it should work pretty well
+** on any system that uses no shadow. (chris)
+**
+** If you have no crypt() then try
+** cc -DNO_CRYPT -O -o adduser adduser.c xfdes.c
+** I'm not sure how login operates with no crypt()... I guess
+** the same way we're doing it here.
+*/
+
+#include <pwd.h>
+#include <grp.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/timeb.h>
+#include <sys/time.h>
+#include <sys/stat.h>
+
+#define DEFAULT_SHELL  "/bin/bash"  /* because BASH is your friend */
+#define DEFAULT_HOME   "/home"
+#define USERADD_PATH   "/usr/sbin/useradd"
+#define CHAGE_PATH     "/usr/sbin/chage"
+#define PASSWD_PATH    "/usr/bin/passwd"
+#define DEFAULT_GROUP  100
+
+#define DEFAULT_MAX_PASS 60
+#define DEFAULT_WARN_PASS 10
+/* if you use this feature, you will get a lot of complaints from users
+   who rarely use their accounts :)  (something like 3 months would be
+   more reasonable)  --marekm */
+#define DEFAULT_USER_DIE /* 10 */ 0
+
+void main()
+{
+       char foo[32];                   
+       char uname[9],person[32],dir[32],shell[32];
+       unsigned int group,min_pass,max_pass,warn_pass,user_die;
+       /* the group and uid of the new user */
+       int bad=0,done=0,correct=0,gets_warning=0;
+       char cmd[255];
+       struct group *grp;
+       
+       /* flags, in order:
+       * bad to see if the username is in /etc/passwd, or if strange stuff has
+       * been typed if the user might be put in group 0
+       * done allows the program to exit when a user has been added
+       * correct loops until a password is found that isn't in /etc/passwd
+       * gets_warning allows the fflush to be skipped for the first gets
+       * so that output is still legible
+       */
+
+       /* The real program starts HERE! */
+  
+       if(geteuid()!=0)
+       {
+               printf("It seems you don't have access to add a new user.  Try\n");
+               printf("logging in as root or su root to gain super-user access.\n");
+               exit(1);
+       }
+  
+       /* Sanity checks
+       */
+       
+       if (!(grp=getgrgid(DEFAULT_GROUP))){
+               printf("Error: the default group %d does not exist on this system!\n",
+                               DEFAULT_GROUP);
+               printf("adduser must be recompiled.\n");
+               exit(1);
+       }; 
+       while(!correct) {               /* loop until a "good" uname is chosen */
+               while(!done) {
+                       printf("\nLogin to add (^C to quit): ");
+                       if(gets_warning)        /* if the warning was already shown */
+                               fflush(stdout); /* fflush stdout, otherwise set the flag */
+                       else
+                               gets_warning=1;
+
+                       gets(uname);
+                       if(!strlen(uname)) {
+                               printf("Empty input.\n");
+                               done=0;
+                               continue;
+                       };
+
+                       /* what I saw here before made me think maybe I was running DOS */
+                       /* might this be a solution? (chris) */
+                       if (getpwnam(uname) != NULL) {
+                               printf("That name is in use, choose another.\n");
+                               done=0;
+                       } else
+                               done=1;
+               }; /* done, we have a valid new user name */
+               
+               /* all set, get the rest of the stuff */
+               printf("\nEditing information for new user [%s]\n",uname);
+  
+               printf("\nFull Name [%s]: ",uname);
+               gets(person);
+               if (!strlen(person)) {
+                       bzero(person,sizeof(person));
+                       strcpy(person,uname);
+               };
+      
+               do {
+                       bad=0; 
+                       printf("GID [%d]: ",DEFAULT_GROUP);
+                       gets(foo);
+                       if (!strlen(foo))
+                               group=DEFAULT_GROUP;
+                       else
+                               if (isdigit (*foo)) {
+                                       group = atoi(foo);
+                                       if (! (grp = getgrgid (group))) {
+                                               printf("unknown gid %s\n",foo);
+                                               group=DEFAULT_GROUP;
+                                               bad=1;
+                                       };
+                       } else
+                               if ((grp = getgrnam (foo)))
+                                       group = grp->gr_gid;
+                               else {
+                                       printf("unknown group %s\n",foo);
+                                       group=DEFAULT_GROUP;
+                                       bad=1;
+                               }
+                       if (group==0){  /* You're not allowed to make root group users! */
+                               printf("Creation of root group users not allowed (must be done by hand)\n");
+                               group=DEFAULT_GROUP;
+                               bad=1;
+                       };
+               } while(bad);
+
+
+               fflush(stdin);
+      
+               printf("\nIf home dir ends with a / then [%s] will be appended to it\n",uname);
+               printf("Home Directory [%s/%s]: ",DEFAULT_HOME,uname);
+               fflush(stdout);
+               gets(dir);
+               if (!strlen(dir)) { /* hit return */
+                       sprintf(dir,"%s/%s",DEFAULT_HOME,uname);
+                       fflush(stdin);
+               } else
+                       if (dir[strlen(dir)-1]=='/')
+                               sprintf(dir+strlen(dir),"%s",uname);
+
+               printf("\nShell [%s]: ",DEFAULT_SHELL);
+               fflush(stdout);
+               gets(shell);
+               if (!strlen(shell))
+                       sprintf(shell,"%s",DEFAULT_SHELL);
+      
+               printf("\nMin. Password Change Days [0]: ");
+               gets(foo);
+               min_pass=atoi(foo);
+            
+               printf("Max. Password Change Days [%d]: ",DEFAULT_MAX_PASS);
+               gets(foo);
+               if (strlen(foo) > 1)
+                       max_pass = atoi(foo);
+               else
+                       max_pass = DEFAULT_MAX_PASS;
+            
+               printf("Password Warning Days [%d]: ",DEFAULT_WARN_PASS);
+               gets(foo);
+               warn_pass = atoi(foo);
+               if (warn_pass==0)
+                       warn_pass = DEFAULT_WARN_PASS;
+            
+               printf("Days after Password Expiry for Account Locking [%d]: ",DEFAULT_USER_DIE);
+               gets(foo);
+               user_die = atoi(foo);
+               if (user_die == 0)
+                       user_die = DEFAULT_USER_DIE;
+      
+               printf("\nInformation for new user [%s] [%s]:\n",uname,person);
+               printf("Home directory: [%s] Shell: [%s]\n",dir,shell);
+               printf("GID: [%d]\n",group);
+               printf("MinPass: [%d] MaxPass: [%d] WarnPass: [%d] UserExpire: [%d]\n",
+                               min_pass,max_pass,warn_pass,user_die);
+               printf("\nIs this correct? [y/N]: ");
+               fflush(stdout);
+               gets(foo);
+
+               done=bad=correct=(foo[0]=='y'||foo[0]=='Y');
+
+               if(bad!=1)
+                       printf("\nUser [%s] not added\n",uname);
+    }
+
+       bzero(cmd,sizeof(cmd));
+       sprintf(cmd,"%s -g %d -d %s -s %s -c \"%s\" -m -k /etc/skel %s",
+                       USERADD_PATH,group,dir,shell,person,uname);
+       printf("Calling useradd to add new user:\n%s\n",cmd);  
+       if(system(cmd)){
+               printf("User add failed!\n");
+               exit(errno);
+       };
+       bzero(cmd,sizeof(cmd));
+       sprintf(cmd,"%s -m %d -M %d -W %d -I %d %s", CHAGE_PATH,
+                       min_pass,max_pass,warn_pass,user_die,uname);
+       printf("%s\n",cmd);
+       if(system(cmd)){
+               printf("There was an error setting password expire values\n");
+               exit(errno);
+       };
+       bzero(cmd,sizeof(cmd));
+       sprintf(cmd,"%s %s",PASSWD_PATH,uname);
+       system(cmd);
+       printf("\nDone.\n");
+}
+
diff --git a/contrib/adduser.c b/contrib/adduser.c
new file mode 100644 (file)
index 0000000..88596b0
--- /dev/null
@@ -0,0 +1,502 @@
+/****
+** 04/21/96
+** hacked even more, replaced gets() with something slightly harder to buffer
+** overflow. Added support for setting a default quota on new account, with
+** edquota -p. Other cleanups for security, I let some users run adduser suid
+** root to add new accounts. (overflow checks, clobber environment, valid 
+** shell checks, restrictions on gid + home dir settings).
+
+** Added max. username length. Used syslog() a bit for important events. 
+** Support to immediately expire account with passwd -e.
+
+** Called it version 2.0! Because I felt like it!
+
+** -- Chris, chris@ferret.lmh.ox.ac.uk
+
+** 03/17/96
+** hacked a bit more, removed unused code, cleaned up for gcc -Wall.
+** --marekm
+**
+** 02/26/96
+** modified to call shadow utils (useradd,chage,passwd) on shadowed 
+** systems - Cristian Gafton, gafton@sorosis.ro
+**
+** 6/27/95
+** shadow-adduser 1.4:
+**
+** now it copies the /etc/skel dir into the person's dir, 
+** makes the mail folders, changed some defaults and made a 'make 
+** install' just for the hell of it.
+**
+** Greg Gallagher
+** CIN.Net
+**
+** 1/28/95
+** shadow-adduser 1.3:
+** 
+** Basically a bug-fix on my additions in 1.2.  Thanx to Terry Stewart 
+** (stew@texas.net) for pointing out one of the many idiotic bugs I introduced.
+** It was such a stupid bug that I would have never seen it myself.
+**
+**                                Brandon
+*****
+** 01/27/95
+** 
+** shadow-adduser 1.2:
+** I took the C source from adduser-shadow (credits are below) and made
+** it a little more worthwhile.  Many small changes... Here's
+** the ones I can remember:
+** 
+** Removed support for non-shadowed systems (if you don't have shadow,
+**     use the original adduser, don't get this shadow version!)
+** Added support for the correct /etc/shadow fields (Min days before
+**     password change, max days before password change, Warning days,
+**     and how many days from expiry date does the account go invalid)
+**     The previous version just left all of those fields blank.
+**     There is still one field left (expiry date for the account, period)
+**     which I have left blank because I do not use it and didn't want to
+**     spend any more time on this.  I'm sure someone will put it in and
+**     tack another plethora of credits on here. :)
+** Added in the password date field, which should always reflect the last
+**     date the password was changed, for expiry purposes.  "passwd" always
+**     updates this field, so the adduser program should set it up right
+**     initially (or a user could keep thier initial password forever ;)
+**     The number is in days since Jan 1st, 1970.
+**
+**                       Have fun with it, and someone please make
+**                       a real version(this is still just a hack)
+**                       for us all to use (and Email it to me???)
+**
+**                               Brandon
+**                                  photon@usis.com
+**
+***** 
+** adduser 1.0: add a new user account (For systems not using shadow)
+** With a nice little interface and a will to do all the work for you.
+**
+** Craig Hagan
+** hagan@opine.cs.umass.edu
+**
+** Modified to really work, look clean, and find unused uid by Chris Cappuccio
+** chris@slinky.cs.umass.edu
+**
+*****
+**
+** 01/19/95
+**
+** FURTHER modifications to enable shadow passwd support (kludged, but
+** no more so than the original)  by Dan Crowson - dcrowson@mo.net
+**
+** Search on DAN for all changes...
+**
+*****
+**
+** cc -O -o adduser adduser.c
+** Use gcc if you have it... (political reasons beyond my control) (chris)
+**
+** I've gotten this program to work with success under Linux (without
+** shadow) and SunOS 4.1.3. I would assume it should work pretty well
+** on any system that uses no shadow. (chris)
+**
+** If you have no crypt() then try
+** cc -DNO_CRYPT -O -o adduser adduser.c xfdes.c
+** I'm not sure how login operates with no crypt()... I guess
+** the same way we're doing it here.
+*/
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <pwd.h>
+#include <grp.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/timeb.h>
+#include <sys/time.h>
+#include <sys/stat.h>
+#include <syslog.h>
+
+#define IMMEDIATE_CHANGE       /* Expire newly created password, must be changed
+                                * immediately upon next login */
+#define HAVE_QUOTAS            /* Obvious */
+#define EXPIRE_VALS_SET                /* If defined, 'normal' users can't change 
+                                * password expiry values (if running suid root) */
+
+#define HAVE_GETUSERSHELL      /* FIXME: Isn't this defined in config.h too? */
+#define LOGGING                        /* If we want to log various things to syslog */
+#define MAX_USRNAME  8         /* Longer usernames seem to work on my system....
+                                * But they're probably a poor idea */
+
+
+#define DEFAULT_SHELL  "/bin/bash"     /* because BASH is your friend */
+#define DEFAULT_HOME   "/home"
+#define USERADD_PATH   "/usr/sbin/useradd"
+#define CHAGE_PATH     "/usr/bin/chage"
+#define PASSWD_PATH    "/usr/bin/passwd"
+#define EDQUOTA_PATH   "/usr/sbin/edquota"
+#define QUOTA_DEFAULT  "defuser"
+#define DEFAULT_GROUP  100
+
+#define DEFAULT_MIN_PASS 0
+#define DEFAULT_MAX_PASS 100
+#define DEFAULT_WARN_PASS 14
+#define DEFAULT_USER_DIE 366
+
+void safeget (char *, int);
+
+void 
+main (void)
+{
+  char foo[32];
+  char usrname[32], person[32], dir[32], shell[32];
+  unsigned int group, min_pass, max_pass, warn_pass, user_die;
+  /* the group and uid of the new user */
+  int bad = 0, done = 0, correct = 0, olduid;
+  char cmd[255];
+  struct group *grp;
+
+  /* flags, in order:
+   * bad to see if the username is in /etc/passwd, or if strange stuff has
+   * been typed if the user might be put in group 0
+   * done allows the program to exit when a user has been added
+   * correct loops until a username is found that isn't in /etc/passwd
+   */
+
+  /* The real program starts HERE! */
+
+  if (geteuid () != 0)
+    {
+      printf ("It seems you don't have access to add a new user.  Try\n");
+      printf ("logging in as root or su root to gain superuser access.\n");
+      exit (1);
+    }
+
+  /* Sanity checks
+   */
+
+#ifdef LOGGING
+  openlog ("adduser", LOG_PID | LOG_CONS | LOG_NOWAIT, LOG_AUTH);
+  syslog (LOG_INFO, "invoked by user %s\n", getpwuid (getuid ())->pw_name);
+#endif
+
+  if (!(grp = getgrgid (DEFAULT_GROUP)))
+    {
+      printf ("Error: the default group %d does not exist on this system!\n",
+             DEFAULT_GROUP);
+      printf ("adduser must be recompiled.\n");
+#ifdef LOGGING
+      syslog (LOG_ERR, "warning: failed. no such default group\n");
+      closelog ();
+#endif
+      exit (1);
+    };
+
+  while (!correct)
+    {                          /* loop until a "good" usrname is chosen */
+      while (!done)
+       {
+         printf ("\nLogin to add (^C to quit): ");
+         fflush (stdout);
+
+         safeget (usrname, sizeof (usrname));
+
+         if (!strlen (usrname))
+           {
+             printf ("Empty input.\n");
+             done = 0;
+             continue;
+           };
+
+         /* what I saw here before made me think maybe I was running DOS */
+         /* might this be a solution? (chris) */
+         if (strlen (usrname) > MAX_USRNAME)
+           {
+             printf ("That name is longer than the maximum of %d characters. Choose another.\n", MAX_USRNAME);
+             done = 0;
+           }
+         else if (getpwnam (usrname) != NULL)
+           {
+             printf ("That name is in use, choose another.\n");
+             done = 0;
+           }
+         else if (strchr (usrname, ' ') != NULL)
+           {
+             printf ("No spaces in username!!\n");
+             done = 0;
+           }
+         else
+           done = 1;
+       };                      /* done, we have a valid new user name */
+
+      /* all set, get the rest of the stuff */
+      printf ("\nEditing information for new user [%s]\n", usrname);
+
+      printf ("\nFull Name [%s]: ", usrname);
+      fflush (stdout);
+      safeget (person, sizeof (person));
+      if (!strlen (person))
+       {
+         bzero (person, sizeof (person));
+         strcpy (person, usrname);
+       };
+
+      if (getuid () == 0)
+       {
+         do
+           {
+             bad = 0;
+             printf ("GID [%d]: ", DEFAULT_GROUP);
+             fflush (stdout);
+             safeget (foo, sizeof (foo));
+             if (!strlen (foo))
+               group = DEFAULT_GROUP;
+             else if (isdigit (*foo))
+               {
+                 group = atoi (foo);
+                 if (!(grp = getgrgid (group)))
+                   {
+                     printf ("unknown gid %s\n", foo);
+                     group = DEFAULT_GROUP;
+                     bad = 1;
+                   };
+               }
+             else if ((grp = getgrnam (foo)))
+               group = grp->gr_gid;
+             else
+               {
+                 printf ("unknown group %s\n", foo);
+                 group = DEFAULT_GROUP;
+                 bad = 1;
+               }
+             if (group == 0)
+               {               /* You're not allowed to make root group users! */
+                 printf ("Creation of root group users not allowed (must be done by hand)\n");
+                 group = DEFAULT_GROUP;
+                 bad = 1;
+               };
+           }
+         while (bad);
+       }
+      else
+       {
+         printf ("Group will be default of: %d\n", DEFAULT_GROUP);
+         group = DEFAULT_GROUP;
+       }
+
+      if (getuid () == 0)
+       {
+         printf ("\nIf home dir ends with a / then '%s' will be appended to it\n", usrname);
+         printf ("Home Directory [%s/%s]: ", DEFAULT_HOME, usrname);
+         fflush (stdout);
+         safeget (dir, sizeof (dir));
+         if (!strlen (dir))
+           {                   /* hit return */
+             sprintf (dir, "%s/%s", DEFAULT_HOME, usrname);
+           }
+         else if (dir[strlen (dir) - 1] == '/')
+           sprintf (dir+strlen(dir), "%s", usrname);
+       }
+      else
+       {
+         printf ("\nHome directory will be %s/%s\n", DEFAULT_HOME, usrname);
+         sprintf (dir, "%s/%s", DEFAULT_HOME, usrname);
+       }
+
+      printf ("\nShell [%s]: ", DEFAULT_SHELL);
+      fflush (stdout);
+      safeget (shell, sizeof (shell));
+      if (!strlen (shell))
+       sprintf (shell, "%s", DEFAULT_SHELL);
+      else
+       {
+         char *sh;
+         int ok = 0;
+#ifdef HAVE_GETUSERSHELL
+         setusershell ();
+         while ((sh = getusershell ()) != NULL)
+           if (!strcmp (shell, sh))
+             ok = 1;
+         endusershell ();
+#endif
+         if (!ok)
+           {
+             if (getuid () == 0)
+               printf ("Warning: root allowed non standard shell\n");
+             else
+               {
+                 printf ("Shell NOT in /etc/shells, DEFAULT used\n");
+                 sprintf (shell, "%s", DEFAULT_SHELL);
+               }
+           }
+       }
+
+#ifdef EXPIRE_VALS_SET
+      if (getuid () == 0)
+       {
+#endif
+         printf ("\nMin. Password Change Days [%d]: ", DEFAULT_MIN_PASS);
+         fflush (stdout);
+         safeget (foo, sizeof (foo));
+         if (strlen (foo) > 1)
+           min_pass = DEFAULT_MIN_PASS;
+         else
+           min_pass = atoi (foo);
+
+         printf ("Max. Password Change Days [%d]: ", DEFAULT_MAX_PASS);
+         fflush (stdout);
+         safeget (foo, sizeof (foo));
+         if (strlen (foo) > 1)
+           max_pass = atoi (foo);
+         else
+           max_pass = DEFAULT_MAX_PASS;
+
+         printf ("Password Warning Days [%d]: ", DEFAULT_WARN_PASS);
+         fflush (stdout);
+         safeget (foo, sizeof (foo));
+         warn_pass = atoi (foo);
+         if (warn_pass == 0)
+
+           warn_pass = DEFAULT_WARN_PASS;
+
+         printf ("Days after Password Expiry for Account Locking [%d]: ", DEFAULT_USER_DIE);
+         fflush (stdout);
+         safeget (foo, sizeof (foo));
+         user_die = atoi (foo);
+         if (user_die == 0)
+           user_die = DEFAULT_USER_DIE;
+
+#ifdef EXPIRE_VALS_SET
+       }
+      else
+       {
+         printf ("\nSorry, account expiry values are set.\n");
+         user_die = DEFAULT_USER_DIE;
+         warn_pass = DEFAULT_WARN_PASS;
+         max_pass = DEFAULT_MAX_PASS;
+         min_pass = DEFAULT_MIN_PASS;
+       }
+#endif
+
+      printf ("\nInformation for new user [%s] [%s]:\n", usrname, person);
+      printf ("Home directory: [%s] Shell: [%s]\n", dir, shell);
+      printf ("GID: [%d]\n", group);
+      printf ("MinPass: [%d] MaxPass: [%d] WarnPass: [%d] UserExpire: [%d]\n",
+             min_pass, max_pass, warn_pass, user_die);
+      printf ("\nIs this correct? [y/N]: ");
+      fflush (stdout);
+      safeget (foo, sizeof (foo));
+
+      done = bad = correct = (foo[0] == 'y' || foo[0] == 'Y');
+
+      if (bad != 1)
+       printf ("\nUser [%s] not added\n", usrname);
+    }
+
+  /* Clobber the environment, I run this suid root sometimes to let 
+   * non root privileged accounts add users --chris */
+
+  *environ = NULL;
+
+  bzero (cmd, sizeof (cmd));
+  sprintf (cmd, "%s -g %d -d %s -s %s -c \"%s\" -m -k /etc/skel %s",
+          USERADD_PATH, group, dir, shell, person, usrname);
+  printf ("Calling useradd to add new user:\n%s\n", cmd);
+  if (system (cmd))
+    {
+      printf ("User add failed!\n");
+#ifdef LOGGING
+      syslog (LOG_ERR, "could not add new user\n");
+      closelog ();
+#endif
+      exit (errno);
+    };
+
+  olduid = getuid ();  /* chage, passwd, edquota etc. require ruid = root
+                        */
+  setuid (0);
+
+  bzero (cmd, sizeof (cmd));
+
+  /* Chage runs suid root. => we need ruid root to run it with
+   * anything other than chage -l
+   */
+
+  sprintf (cmd, "%s -m %d -M %d -W %d -I %d %s", CHAGE_PATH,
+          min_pass, max_pass, warn_pass, user_die, usrname);
+  printf ("%s\n", cmd);
+  if (system (cmd))
+    {
+      printf ("There was an error setting password expire values\n");
+#ifdef LOGGING
+      syslog (LOG_ERR, "password expire values could not be set\n");
+#endif
+    };
+
+  /* I want to add a user completely with one easy command --chris */
+
+#ifdef HAVE_QUOTAS
+  bzero (cmd, sizeof (cmd));
+  sprintf (cmd, "%s -p %s -u %s", EDQUOTA_PATH, QUOTA_DEFAULT, usrname);
+  printf ("%s\n", cmd);
+  if (system (cmd))
+    {
+      printf ("\nWarning: error setting quota\n");
+#ifdef LOGGING
+      syslog (LOG_ERR, "warning: account created but NO quotas set!\n");
+#endif /* LOGGING */
+    }
+  else
+    printf ("\nDefault quota set.\n");
+#endif /* HAVE_QUOTAS */
+
+  bzero (cmd, sizeof (cmd));
+  sprintf (cmd, "%s %s", PASSWD_PATH, usrname);
+  if (system (cmd))
+    {
+      printf ("\nWarning: error setting password\n");
+#ifdef LOGGING
+      syslog (LOG_ERR, "warning: password set failed!\n");
+#endif
+    }
+#ifdef IMMEDIATE_CHANGE
+  bzero (cmd, sizeof (cmd));
+  sprintf (cmd, "%s -e %s", PASSWD_PATH, usrname);
+  if (system (cmd))
+    {
+      printf ("\nWarning: error expiring password\n");
+#ifdef LOGGING
+      syslog (LOG_ERR, "warning: password expire failed!\n");
+#endif /* LOGGING */
+    }
+#endif /* IMMEDIATE_CHANGE */
+
+  setuid (olduid);
+
+#ifdef LOGGING
+  closelog ();
+#endif
+
+  printf ("\nDone.\n");
+}
+
+void 
+safeget (char *buf, int maxlen)
+{
+  int c, i = 0, bad = 0;
+  char *bstart = buf;
+  while ((c = getc (stdin)) != EOF && (c != '\n') && (++i < maxlen))
+    {
+      bad = (!isalnum (c) && (c != '_') && (c != ' '));
+      *(buf++) = (char) c;
+    }
+  *buf = '\0';
+
+  if (bad)
+    {
+      printf ("\nString contained banned character. Please stick to alphanumerics.\n");
+      *bstart = '\0';
+    }
+}
+
diff --git a/contrib/adduser.sh b/contrib/adduser.sh
new file mode 100755 (executable)
index 0000000..0efb27a
--- /dev/null
@@ -0,0 +1,90 @@
+#!/bin/sh
+# adduser script for use with shadow passwords and useradd command.
+# by Hrvoje Dogan <hdogan@student.math.hr>, Dec 1995.
+
+echo -n "Login name for new user []:"
+read LOGIN
+if [ -z $LOGIN ]
+then echo "Come on, man, you can't leave the login field empty...";exit
+fi
+echo
+echo -n "User id for $LOGIN [ defaults to next available]:"
+read ID
+GUID="-u $ID"
+if [ -z $ID ] 
+then GUID=""
+fi
+
+echo
+echo -n "Initial group for $LOGIN [users]:"
+read GID
+GGID="-g $GID"
+if [ -z $GID ]
+then GGID=""
+fi
+
+echo
+echo -n "Additional groups for $LOGIN []:"
+read AGID
+GAGID="-G $AGID"
+if [ -z $AGID ]
+then GAGID=""
+fi
+
+echo
+echo -n "$LOGIN's home directory [/home/$LOGIN]:"
+read HME
+GHME="-d $HME"
+if [ -z $HME ]
+then GHME=""
+fi
+
+echo
+echo -n "$LOGIN's shell [/bin/bash]:"
+read SHL
+GSHL="-s $SHL"
+if [ -z $SHL ]
+then GSHL=""
+fi
+
+echo
+echo -n "$LOGIN's account expiry date (MM/DD/YY) []:"
+read EXP
+GEXP="-e $EXP"
+if [ -z $EXP ]
+then GEXP=""
+fi
+echo
+echo OK, I'm about to make a new account. Here's what you entered so far:
+echo New login name: $LOGIN
+if [ -z $GUID ] 
+then echo New UID: [Next available]
+else echo New UID: $UID
+fi
+if [ -z $GGID ]
+then echo Initial group: users
+else echo Initial group: $GID
+fi
+if [ -z $GAGID ]
+then echo Additional groups: [none]
+else echo Additional groups: $AGID
+fi
+if [ -z $GHME ]
+then echo Home directory: /home/$LOGIN
+else echo Home directory: $HME
+fi
+if [ -z $GSHL ]
+then echo Shell: /bin/bash
+else echo Shell: $SHL
+fi
+if [ -z $GEXP ]
+then echo Expiry date: [no expiration]
+else echo Expiry date: $EXP
+fi
+echo "This is it... if you want to bail out, you'd better do it now."
+read FOO
+echo Making new account...
+/usr/sbin/useradd $GHME -m $GEXP $GGID $GAGID $GSHL $GUID $LOGIN
+/usr/bin/chfn $LOGIN
+/usr/bin/passwd $LOGIN
+echo "Done..."
diff --git a/contrib/adduser2.sh b/contrib/adduser2.sh
new file mode 100755 (executable)
index 0000000..a2b36b2
--- /dev/null
@@ -0,0 +1,743 @@
+#!/bin/bash
+#
+#  adduser                     Interactive user adding program.
+#
+#  Copyright (C) 1996          Petri Mattila, Prihateam Networks
+#                              petri@prihateam.fi
+#      
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2, or (at your option)
+#  any later version.
+#
+# Changes:
+#      220496  v0.01   Initial version
+#      230496  v0.02   More checks, embolden summary
+#      240496          Even more checks
+#      250496          Help with ?
+#      040596  v0.03   Cleanups
+#      050596  v0.04   Bug fixes, expire date checks
+#      070596  v0.05   Iso-latin-1 names
+#
+
+## Defaults
+
+# default groups
+def_group="users"
+def_other_groups=""
+
+# default home directory
+def_home_dir=/home/users
+
+# default shell
+def_shell=/bin/tcsh
+
+# Defaul expiration date (mm/dd/yy)
+def_expire=""
+
+# default dates
+def_pwd_min=0
+def_pwd_max=90
+def_pwd_warn=14
+def_pwd_iact=14
+
+
+# possible UIDs
+uid_low=1000
+uid_high=64000
+
+# skel directory
+skel=/etc/skel
+
+# default mode for home directory
+def_mode=711
+
+# Regex, that the login name must meet, only ANSI characters
+login_regex='^[0-9a-zA-Z_-]*$'
+
+# Regex, that the user name must meet
+# ANSI version
+##name_regex='^[0-9a-zA-Z_-\ ]*$'
+# ISO-LATIN-1 version
+name_regex='^[0-9a-zA-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöùúûüýþÿ_-\ ]*$'
+
+# set PATH
+export PATH="/bin:/sbin:/usr/bin:/usr/sbin"
+
+# Some special characters
+case "$TERM" in
+   vt*|ansi*|con*|xterm*|linux*)
+       S='\e[1m'        # start embolden
+       E='\e[m' # end embolden
+       ;;
+   *)  
+       S=''
+       E=''
+       ;;
+esac
+
+
+## Functions
+
+check_root() {
+       if test "$EUID" -ne 0
+       then
+               echo "You must be root to run this program."
+               exit 1
+       fi
+}
+
+check_user() {
+       local usr pwd uid gid name home sh
+
+       cat /etc/passwd | (
+               while IFS=":" read usr pwd uid gid name home sh
+               do
+                       if test "$1" = "${usr}"
+                       then
+                               return 1
+                       fi
+               done
+               return 0
+       )
+}
+
+check_group() {
+       local read grp pwd gid members
+
+       cat /etc/group | (
+               while IFS=":" read grp pwd gid members
+               do
+                       if test "$1" = "${grp}"
+                       then
+                               return 1
+                       fi
+               done
+               return 0
+       )
+}
+
+check_other_groups() {
+       local grp check IFS
+
+       check="$1"
+       IFS=","
+
+       set ${check}
+       for grp
+       do
+               if check_group "${grp}"
+               then
+                       echo "Group ${grp} does not exist."
+                       return 1
+               fi
+       done
+       return 0
+}              
+
+check_uid() {
+       local usr pwd uid gid name home sh
+       
+       cat /etc/passwd | (
+               while IFS=":" read usr pwd uid gid name home sh
+               do
+                       if test "$1" = "${uid}"
+                       then
+                               return 1
+                       fi
+               done
+               return 0
+       )
+}
+
+read_yn() {
+       local ans ynd
+       
+       ynd="$1"
+       
+       while :
+       do
+               read ans        
+               case "${ans}" in
+                     "") return ${ynd} ;;
+                   [nN]) return 1 ;;
+                   [yY]) return 0 ;;
+                      *) echo -n "Y or N, please ? " ;;
+               esac
+       done
+}
+
+read_login() {
+       echo
+       while :
+       do
+               echo -n "Login: ${def_login:+[${def_login}] }"
+               read login
+               
+               if test "${login}" = '?'
+               then
+                       less /etc/passwd
+                       echo
+                       continue
+               fi
+
+               if test -z "${login}" -a -n "${def_login}"
+               then
+                       login="${def_login}"
+                       echo "Using ${login}"
+                       return
+               fi
+               
+               if test "${#login}" -gt 8
+               then
+                       echo "Login must be at most 8 characters long"
+                       continue
+               fi
+               
+               if test "${#login}" -lt 2
+               then
+                       echo "Login must be at least 2 characters long"
+                       continue
+               fi
+               
+               if ! expr "${login}" : "${login_regex}" &> /dev/null
+               then
+                       echo "Please use letters, numbers and special characters _-,."
+                       continue
+               fi
+               
+               if ! check_user "${login}"
+               then
+                       echo "Username ${login} is already in use"
+                       continue
+               fi
+               
+               def_login="${login}"
+               return
+       done
+}
+
+read_name () {
+       echo
+       while :
+       do
+               echo -n "Real name: ${def_name:+[${def_name}] }"
+               read name
+               
+               if test "${name}" = '?'
+               then
+                       less /etc/passwd
+                       echo
+                       continue
+               fi
+
+               if test -z "${name}" -a -n "${def_name}"
+               then
+                       name="${def_name}"
+                       echo "Using ${name}"
+               fi
+
+               if test "${#name}" -gt 32
+               then
+                       echo "Name should be at most 32 characters long"
+                       continue
+               fi
+
+               if ! expr "${name}" : "${name_regex}" &> /dev/null
+               then
+                       echo "Please use letters, numbers, spaces and special characters ,._-"
+                       continue
+               fi
+               
+               def_name="${name}"
+               return
+       done
+}
+
+read_home() {
+       local x
+       
+       echo
+       while :
+       do
+               echo -n "Home Directory: [${def_home_dir}/${login}] "
+               read home
+               
+               if test -z "${home}"
+               then
+                       home="${def_home_dir}/${login}"
+                       echo "Using ${home}"
+               fi
+               
+               if ! expr "${home}" : '^[0-9a-zA-Z,._-\/]*$' &> /dev/null
+               then
+                       echo "Please use letters, numbers, spaces and special characters ,._-/"
+                       continue
+               fi
+               
+               x="$(basename ${home})"
+               if test "${x}" != "${login}"
+               then
+                       echo "Warning: you are about to use different login name and home directory."
+               fi
+               
+               x="$(dirname ${home})"
+               if ! test -d "${x}"
+               then
+                       echo "Directory ${x} does not exist."
+                       echo "If you still want to use it, please make it manually."
+                       continue
+               fi
+               
+               def_home_dir="${x}"
+               return
+       done
+}
+
+read_shell () {
+       local x
+
+       echo
+       while :
+       do
+               echo -n "Shell: [${def_shell}] "
+               read shell
+               
+               if test -z "${shell}"
+               then
+                       shell="${def_shell}"
+                       echo "Using ${shell}"
+               fi
+               
+               for x in $(cat /etc/shells)
+               do
+                       if test "${x}" = "${shell}"
+                       then
+                               def_shell="${shell}"
+                               return
+                       fi
+               done
+
+               echo "Possible shells are:"
+               cat /etc/shells
+       done
+}
+
+read_group () {
+       echo
+       while :
+       do
+               echo -n "Group: [${def_group}] "
+               read group
+               
+               if test -z "${group}"
+               then
+                       group="${def_group}"
+                       echo "Using ${group}"
+               fi
+               
+               if test "${group}" = '?'
+               then
+                       less /etc/group
+                       echo
+                       continue
+               fi
+
+               if check_group "${group}"
+               then
+                       echo "Group ${group} does not exist."
+                       continue
+               fi
+               
+               def_group="${group}"
+               return
+       done
+}
+
+read_other_groups () {
+       echo
+       while :
+       do
+               echo -n "Other groups: [${def_og:-none}] "
+               read other_groups
+               
+               if test "${other_groups}" = '?'
+               then
+                       less /etc/group
+                       echo
+                       continue
+               fi
+
+               if test -z "${other_groups}"
+               then
+                       if test -n "${def_og}"
+                       then
+                               other_groups="${def_og}"
+                               echo "Using ${other_groups}"
+                       else    
+                               echo "No other groups"
+                               return
+                       fi
+               fi
+               
+               
+               if ! check_other_groups "${other_groups}"
+               then
+                       continue
+               fi
+               
+               def_og="${other_groups}"
+               return
+       done
+}
+
+read_uid () {
+       echo
+       while :
+       do
+               echo -n "uid: [first free] "
+               read uid
+                       
+               if test -z "${uid}"
+               then
+                       echo "Using first free UID."
+                       return
+               fi
+               
+               if test "${uid}" = '?'
+               then
+                       less /etc/passwd
+                       echo
+                       continue
+               fi
+
+               if ! expr "${uid}" : '^[0-9]+$' &> /dev/null
+               then
+                       echo "Please use numbers only."
+                       continue
+               fi
+               if test "${uid}" -lt "${uid_low}"
+               then
+                       echo "UID must be greater than ${uid_low}"
+                       continue
+               fi
+               if test "${uid}" -gt "${uid_high}"
+               then
+                       echo "UID must be smaller than ${uid_high}"
+                       continue
+               fi
+               if ! check_uid "${uid}"
+               then
+                       echo "UID ${uid} is already in use"
+                       continue
+               fi
+               
+               return
+       done
+}
+
+read_max_valid_days() {
+       echo
+       while :
+       do
+               echo -en "Maximum days between password changes: [${def_pwd_max}] "
+               read max_days
+               
+               if test -z "${max_days}"
+               then
+                       max_days="${def_pwd_max}"
+                       echo "Using ${max_days}"
+                       return
+               fi
+               
+               if ! expr "${max_days}" : '^[0-9]+$' &> /dev/null
+               then
+                       echo "Please use numbers only."
+                       continue
+               fi
+               if test "${max_days}" -lt 7
+               then
+                       echo "Warning: you are using a value shorter than a week."
+               fi
+               
+               def_pwd_max="${max_days}"
+               return  
+       done
+}
+
+read_min_valid_days() {
+       echo
+       while :
+       do
+               echo -en "Minimum days between password changes: [${def_pwd_min}] "
+               read min_days
+               
+               if test -z "${min_days}"
+               then
+                       min_days="${def_pwd_min}"
+                       echo "Using ${min_days}"
+                       return
+               fi
+               
+               if ! expr "${min_days}" : '^[0-9]+$' &> /dev/null
+               then
+                       echo "Please use numbers only."
+                       continue
+               fi
+               if test "${min_days}" -gt 7
+               then
+                       echo "Warning: you are using a value longer than a week."
+               fi
+               
+               def_pwd_min="${min_days}"
+               return  
+       done
+}
+
+read_warning_days() {
+       echo
+       while :
+       do
+               echo -en "Number of warning days before password expires: [${def_pwd_warn}] "
+               read warn_days
+               
+               if test -z "${warn_days}"
+               then
+                       warn_days="${def_pwd_warn}"
+                       echo "Using ${warn_days}"
+               fi
+
+               if ! expr "${warn_days}" : '^[0-9]+$' &> /dev/null
+               then
+                       echo "Please use numbers only."
+                       continue
+               fi
+               if test "${warn_days}" -gt 14
+               then
+                       echo "Warning: you are using a value longer than two week."
+               fi
+               
+               def_pwd_warn="${warn_days}"
+               return  
+       done
+}
+
+
+read_inactive_days() {
+       echo
+       while :
+       do
+               echo -en "Number of usable days after expiration: [${def_pwd_iact}] "
+               read iact_days
+               
+               if test -z "${iact_days}"
+               then
+                       iact_days="${def_pwd_iact}"
+                       echo "Using ${iact_days}"
+                       return
+               fi
+               if ! expr "${iact_days}" : '^[0-9]+$' &> /dev/null
+               then
+                       echo "Please use numbers only."
+                       continue
+               fi
+               if test "${iact_days}" -gt 14
+               then
+                       echo "Warning: you are using a value that is more than two weeks."
+               fi
+               
+               def_pwd_iact="${iact_days}"
+               return  
+       done
+}
+
+read_expire_date() {
+       local ans
+       
+       echo
+       while :
+       do
+               echo -en "Expire date of this account (mm/dd/yy): [${def_expire:-never}] "
+               read ans
+               
+               if test -z "${ans}"
+               then
+                       if test -z "${def_expire}"
+                       then
+                               ans="never"
+                       else
+                               ans="${def_expire}"
+                               echo "Using ${def_expire}"
+                       fi
+               fi
+               
+               if test "${ans}" = "never"
+               then
+                       echo "Account will never expire."
+                       def_expire=""
+                       expire=""
+                       return
+               fi
+
+               if ! expr "${ans}" : '^[0-9][0-9]/[0-9][0-9]/[0-9][0-9]$' &> /dev/null
+               then
+                       echo "Please use format mm/dd/yy"
+                       continue
+               fi
+               
+               if ! expire_date="$(date -d ${ans} '+%A, %B %d %Y')"
+               then
+                       continue
+               fi
+               
+               def_expire="${expire}"
+               return  
+       done
+}
+
+read_passwd_yn() {
+       echo -en "\nDo you want to set password [Y/n] ? "
+       if read_yn 0
+       then
+               set_pwd="YES"
+       else
+               set_pwd=""
+       fi
+}
+
+
+print_values() {
+
+clear
+cat << EOM
+
+Login:        ${S}${login}${E}
+Group:        ${S}${group}${E}
+Other groups: ${S}${other_groups:-[none]}${E}
+
+Real Name:    ${S}${name}${E}
+
+uid:          ${S}${uid:-[first free]}${E}
+home:         ${S}${home}${E}
+shell:        ${S}${shell}${E}
+
+Account expiration date:                   ${S}${expire_date:-never}${E}
+Minimum days between password changes:     ${S}${min_days}${E}
+Maximum days between password changes:     ${S}${max_days}${E}
+Number of usable days after expiration:    ${S}${iact_days}${E}
+Number of warning days before expiration:  ${S}${warn_days}${E}
+
+${S}${set_pwd:+Set password for this account.}${E}
+
+EOM
+}
+
+set_user() {
+       if ! useradd \
+               -c "${name}" \
+               -d "${home}" \
+               -g "${group}" \
+               -s "${shell}" \
+               ${expire:+-e ${expire}} \
+               ${uid:+-u ${uid}} \
+               ${other_groups:+-G ${other_groups}} \
+               ${login}
+       then
+               echo "Error ($?) in useradd...exiting..."
+               exit 1
+       fi
+}
+
+set_aging() {
+       if ! passwd \
+               -x ${max_days} \
+               -n ${min_days} \
+               -w ${warn_days} \
+               -i ${iact_days} \
+               ${login}
+       then
+               echo "Error ($?) in setting password aging...exiting..." 
+               exit 1
+       fi
+}
+
+set_password() {
+       if test -n "${set_pwd}"
+       then
+               echo
+               passwd ${login}
+               echo
+       fi
+}      
+
+set_system() {
+       if test -d "${home}"
+       then
+               echo "Directory ${home} already exists."
+               echo "Skeleton files not copied."
+               return
+       fi
+       
+       echo -n "Copying skeleton files..."
+       ( 
+         mkdir ${home}
+         cd ${skel} && cp -af . ${home}
+         chmod ${def_mode} ${home}
+         chown -R ${login}:${group} ${home}
+       )
+       echo "done."
+
+       ## Add your own stuff here:
+       echo -n "Setting up other files..."
+       (
+         mailbox="/var/spool/mail/${login}"
+         touch ${mailbox}
+         chown "${login}:mail" ${mailbox}
+         chmod 600 ${mailbox}
+       )
+       echo "done."
+}
+
+
+read_values() {
+       clear
+       echo -e "\nPlease answer the following questions about the new user to be added."
+       
+       while :
+       do
+               read_login
+               read_name
+               read_group
+               read_other_groups
+               read_home
+               read_shell
+               read_uid
+               read_expire_date
+               read_max_valid_days
+               read_min_valid_days
+               read_warning_days
+               read_inactive_days
+               read_passwd_yn
+
+               print_values
+               
+               echo -n "Is this correct [N/y] ? "
+               read_yn 1 && return
+       done
+}
+
+
+main() {
+       check_root
+       read_values
+       set_user
+       set_aging
+       set_system
+       set_password
+}
+
+
+## Run it 8-)
+main
+
+# End.
diff --git a/contrib/atudel b/contrib/atudel
new file mode 100755 (executable)
index 0000000..0ca8783
--- /dev/null
@@ -0,0 +1,85 @@
+#!/usr/bin/perl
+#
+# Copyright (c) 1996 Brian R. Gaeke
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#    This product includes software developed by Brian R. Gaeke.
+# 4. The name of the author, Brian R. Gaeke, may not be used to endorse
+#    or promote products derived from this software without specific
+#    prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY BRIAN R. GAEKE ``AS IS'' AND ANY EXPRESS
+# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED.  IN NO EVENT SHALL BRIAN R. GAEKE BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# Additionally:
+#
+# This software is provided without support and without any obligation
+# on the part of Brian R. Gaeke to assist in its use, correction,
+# modification or enhancement.
+#
+#######################################################################
+#
+# this is atudel, version 2, by Brian R. Gaeke <brg@dgate.org>
+#
+
+require "getopts.pl";
+&Getopts('v');
+$username = shift(@ARGV);
+&usage unless $username;
+
+sub usage
+{
+       print STDERR "atudel - remove all at jobs owned by a user\n";
+       print STDERR "usage: $0 [-v] username\n";
+       exit(1);
+}
+
+# odd. unless getpwnam($uname) doesn't seem to work for $uname eq "root" on
+# my linux system. but this does.
+die "user $username does not exist; stopping"
+       unless defined(getpwnam($username));
+
+print "searching for at jobs owned by user $username ..." if $opt_v;
+
+chdir "/var/spool/atjobs" ||
+       die "can't chdir to /var/spool/atjobs: $!\nstopping";
+opendir(DIR,".") || die "can't opendir(/var/spool/atjobs): $!\nstopping";
+@files = grep(!/^\./,grep(-f,readdir(DIR)));
+closedir DIR;
+
+foreach $x (@files)
+{
+       $owner = (getpwuid((stat($x))[4]))[0];
+       push(@nuke_bait,$x) if $owner eq $username;
+}
+
+if (@nuke_bait)
+{
+       print "removed jobIDs: @{nuke_bait}.\n" if $opt_v;
+       unlink @nuke_bait;
+}
+elsif ($opt_v)
+{
+       print "\n";
+}
+
+exit 0;
diff --git a/contrib/groupmems.shar b/contrib/groupmems.shar
new file mode 100644 (file)
index 0000000..a86765f
--- /dev/null
@@ -0,0 +1,546 @@
+#!/bin/sh
+# This is a shell archive (produced by GNU sharutils 4.2.1).
+# To extract the files from this archive, save it to some FILE, remove
+# everything before the `!/bin/sh' line above, then type `sh FILE'.
+#
+# Made on 2000-05-25 14:41 CDT by <gk4@gnu.austin.ibm.com>.
+# Source directory was `/home/gk4/src/groupmem'.
+#
+# Existing files will *not* be overwritten unless `-c' is specified.
+#
+# This shar contains:
+# length mode       name
+# ------ ---------- ------------------------------------------
+#   1960 -rw-r--r-- Makefile
+#   6348 -rw-r--r-- groupmems.c
+#   3372 -rw------- groupmems.8
+#
+save_IFS="${IFS}"
+IFS="${IFS}:"
+gettext_dir=FAILED
+locale_dir=FAILED
+first_param="$1"
+for dir in $PATH
+do
+  if test "$gettext_dir" = FAILED && test -f $dir/gettext \
+     && ($dir/gettext --version >/dev/null 2>&1)
+  then
+    set `$dir/gettext --version 2>&1`
+    if test "$3" = GNU
+    then
+      gettext_dir=$dir
+    fi
+  fi
+  if test "$locale_dir" = FAILED && test -f $dir/shar \
+     && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
+  then
+    locale_dir=`$dir/shar --print-text-domain-dir`
+  fi
+done
+IFS="$save_IFS"
+if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
+then
+  echo=echo
+else
+  TEXTDOMAINDIR=$locale_dir
+  export TEXTDOMAINDIR
+  TEXTDOMAIN=sharutils
+  export TEXTDOMAIN
+  echo="$gettext_dir/gettext -s"
+fi
+if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then
+  shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
+elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then
+  shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
+elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then
+  shar_touch='touch -am $3$4$5$6$2 "$8"'
+else
+  shar_touch=:
+  echo
+  $echo 'WARNING: not restoring timestamps.  Consider getting and'
+  $echo "installing GNU \`touch', distributed in GNU File Utilities..."
+  echo
+fi
+rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch
+#
+if mkdir _sh10937; then
+  $echo 'x -' 'creating lock directory'
+else
+  $echo 'failed to create lock directory'
+  exit 1
+fi
+# ============= Makefile ==============
+if test -f 'Makefile' && test "$first_param" != -c; then
+  $echo 'x -' SKIPPING 'Makefile' '(file already exists)'
+else
+  $echo 'x -' extracting 'Makefile' '(text)'
+  sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
+/*
+# Copyright 2000, International Business Machines, Inc.
+# All rights reserved.
+#
+# original author: George Kraft IV, gk4@us.ibm.com
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. Neither the name of International Business Machines, Inc., nor the 
+#    names of its contributors may be used to endorse or promote products 
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTERNATIONAL BUSINESS MACHINES, INC. AND
+# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL 
+# INTERNATIONAL BUSINESS MACHINES, INC. OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+# 
+X
+all: groupmems
+X
+groupmems: groupmems.c
+X      cc -g -o groupmems groupmems.c -L. -lshadow
+X
+install: groupmems
+X      -/usr/sbin/groupadd groups
+X      install -o root -g groups -m 4770 groupmems /usr/bin
+X
+install.man: groupmems.8
+X      install -o root -g root -m 644 groupmems.8 /usr/man/man8
+X
+SHAR_EOF
+  (set 20 00 05 25 14 40 28 'Makefile'; eval "$shar_touch") &&
+  chmod 0644 'Makefile' ||
+  $echo 'restore of' 'Makefile' 'failed'
+  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
+  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
+    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
+    || $echo 'Makefile:' 'MD5 check failed'
+b46cf7ef8d59149093c011ced3f3103c  Makefile
+SHAR_EOF
+  else
+    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'Makefile'`"
+    test 1960 -eq "$shar_count" ||
+    $echo 'Makefile:' 'original size' '1960,' 'current size' "$shar_count!"
+  fi
+fi
+# ============= groupmems.c ==============
+if test -f 'groupmems.c' && test "$first_param" != -c; then
+  $echo 'x -' SKIPPING 'groupmems.c' '(file already exists)'
+else
+  $echo 'x -' extracting 'groupmems.c' '(text)'
+  sed 's/^X//' << 'SHAR_EOF' > 'groupmems.c' &&
+/*
+X * Copyright 2000, International Business Machines, Inc.
+X * All rights reserved.
+X *
+X * original author: George Kraft IV, gk4@us.ibm.com
+X *
+X * Redistribution and use in source and binary forms, with or without
+X * modification, are permitted provided that the following conditions
+X * are met:
+X *
+X * 1. Redistributions of source code must retain the above copyright
+X *    notice, this list of conditions and the following disclaimer.
+X * 2. Redistributions in binary form must reproduce the above copyright
+X *    notice, this list of conditions and the following disclaimer in the
+X *    documentation and/or other materials provided with the distribution.
+X * 3. Neither the name of International Business Machines, Inc., nor the 
+X *    names of its contributors may be used to endorse or promote products 
+X *    derived from this software without specific prior written permission.
+X *
+X * THIS SOFTWARE IS PROVIDED BY INTERNATIONAL BUSINESS MACHINES, INC. AND
+X * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+X * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+X * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL 
+X * INTERNATIONAL BUSINESS MACHINES, INC. OR CONTRIBUTORS BE LIABLE
+X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+X * SUCH DAMAGE.
+X */
+/*
+**
+**     Utility "groupmem" adds and deletes members from a user's group.
+**     
+**     Setup (as "root"):
+**     
+**             groupadd -r groups 
+**             chmod 2770 groupmems
+**             chown root.groups groupmems
+**             groupmems -g groups -a gk4
+**     
+**     Usage (as "gk4"):
+**     
+**             groupmems -a olive
+**             groupmems -a jordan
+**             groupmems -a meghan
+**             groupmems -a morgan
+**             groupmems -a jake
+**             groupmems -l 
+**             groupmems -d jake
+**             groupmems -l 
+*/
+X
+#include <stdio.h>
+#include <pwd.h>
+#include <grp.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include "defines.h"
+#include "groupio.h"
+X
+/* Exit Status Values */
+X
+#define EXIT_SUCCESS           0       /* success */
+#define EXIT_USAGE             1       /* invalid command syntax */
+#define EXIT_GROUP_FILE                2       /* group file access problems */
+#define EXIT_NOT_ROOT          3       /* not superuser  */
+#define EXIT_NOT_EROOT         4       /* not effective superuser  */
+#define EXIT_NOT_PRIMARY       5       /* not primary owner of group  */
+#define EXIT_NOT_MEMBER                6       /* member of group does not exist */
+#define EXIT_MEMBER_EXISTS     7       /* member of group already exists */
+X
+#define TRUE 1
+#define FALSE 0
+X
+/* Globals */
+X
+extern int optind;
+extern char *optarg;
+static char *adduser = NULL;
+static char *deluser = NULL;
+static char *thisgroup = NULL;
+static int purge = FALSE;
+static int list = FALSE;
+static int exclusive = 0;
+X
+static int isroot(void) {
+X      return getuid() ? FALSE : TRUE;
+}
+X
+static int isgroup(void) {
+X      gid_t g = getgid();
+X      struct group *grp = getgrgid(g);
+X
+X      return TRUE;
+}
+X
+static char *whoami(void) {
+X      struct group *grp = getgrgid(getgid());
+X      struct passwd *usr = getpwuid(getuid());
+X
+X      if (0 == strcmp(usr->pw_name, grp->gr_name)) {
+X              return (char *)strdup(usr->pw_name);
+X      } else {
+X              return NULL;
+X      } 
+}
+X
+static void
+addtogroup(char *user, char **members) {
+X      int i;
+X      char **pmembers;
+X
+X      for (i = 0; NULL != members[i]; i++ ) {
+X              if (0 == strcmp(user, members[i])) {
+X                      fprintf(stderr, "Member already exists\n");
+X                      exit(EXIT_MEMBER_EXISTS);
+X              }
+X      }
+X
+X      if (0 == i) {
+X              pmembers = (char **)calloc(2, sizeof(char *));
+X      } else {
+X              pmembers = (char **)realloc(members, sizeof(char *)*(i+1));
+X      }
+X
+X      *members = *pmembers;
+X      members[i] = user;
+X      members[i+1] = NULL;
+}
+X
+static void
+rmfromgroup(char *user, char **members) {
+X      int i;
+X      int found = FALSE;
+X
+X      i = 0;
+X      while (!found && NULL != members[i]) {
+X              if (0 == strcmp(user, members[i])) {
+X                      found = TRUE;
+X              } else {
+X                      i++;
+X              }
+X      }
+X
+X      while (found && NULL != members[i]) {
+X              members[i] = members[++i];
+X      }
+X
+X      if (!found) {
+X              fprintf(stderr, "Member to remove could not be found\n");
+X              exit(EXIT_NOT_MEMBER);
+X      }
+}
+X
+static void
+nomembers(char **members) {
+X      int i;
+X
+X      for (i = 0; NULL != members[i]; i++ ) {
+X              members[i] = NULL;
+X      }
+}
+X
+static void
+members(char **members) {
+X      int i;
+X
+X      for (i = 0; NULL != members[i]; i++ ) {
+X              printf("%s ", members[i]);
+X
+X              if (NULL == members[i+1]) {
+X                      printf("\n");
+X              } else {
+X                      printf(" ");
+X              }
+X      }
+}
+X
+static void usage(void) {
+X      fprintf(stderr, "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n");
+X      exit(EXIT_USAGE);
+}
+X
+main(int argc, char **argv) {
+X      int arg, i;
+X      char *name;
+X      struct group *grp;
+X
+X      while ((arg = getopt(argc, argv, "a:d:g:Dl")) != EOF) {
+X              switch (arg) {
+X              case 'a':
+X                      adduser = strdup(optarg);
+X                      ++exclusive;
+X                      break;
+X              case 'd':
+X                      deluser = strdup(optarg);
+X                      ++exclusive;
+X                      break;
+X              case 'g':
+X                      thisgroup = strdup(optarg);
+X                      break;
+X              case 'D':
+X                      purge = TRUE;
+X                      ++exclusive;
+X                      break;
+X              case 'l':
+X                      list = TRUE;
+X                      ++exclusive;
+X                      break;
+X              default:
+X                      usage();
+X              }
+X      }
+X
+X      if (exclusive > 1 || optind < argc) {
+X              usage();
+X      }
+X
+X      if (!isroot() && NULL != thisgroup) {
+X              fprintf(stderr, "Only root can add members to different groups\n");
+X              exit(EXIT_NOT_ROOT);
+X      } else if (isroot() && NULL != thisgroup) {
+X              name = thisgroup;
+X      } else if (!isgroup()) {
+X              fprintf(stderr, "Group access is required\n");
+X              exit(EXIT_NOT_EROOT);
+X      } else if (NULL == (name = whoami())) {
+X              fprintf(stderr, "Not primary owner of current group\n");
+X              exit(EXIT_NOT_PRIMARY);
+X      }
+X
+X      if (!gr_lock()) {
+X              fprintf(stderr, "Unable to lock group file\n");
+X              exit(EXIT_GROUP_FILE);
+X      }
+X
+X      if (!gr_open(O_RDWR)) {
+X              fprintf(stderr, "Unable to open group file\n");
+X              exit(EXIT_GROUP_FILE);
+X      }
+X
+X      grp = (struct group *)gr_locate(name);
+X
+X      if (NULL != adduser) {
+X              addtogroup(adduser, grp->gr_mem);
+X              gr_update(grp);
+X      } else if (NULL != deluser) {
+X              rmfromgroup(deluser, grp->gr_mem);
+X              gr_update(grp);
+X      } else if (purge) {
+X              nomembers(grp->gr_mem);
+X              gr_update(grp);
+X      } else if (list) {
+X              members(grp->gr_mem);
+X      }
+X
+X      if (!gr_close()) {
+X              fprintf(stderr, "Cannot close group file\n");
+X              exit(EXIT_GROUP_FILE);
+X      }
+X
+X      gr_unlock();
+X
+X      exit(EXIT_SUCCESS);
+}
+X
+/* EOF */
+SHAR_EOF
+  (set 20 00 05 25 14 36 38 'groupmems.c'; eval "$shar_touch") &&
+  chmod 0644 'groupmems.c' ||
+  $echo 'restore of' 'groupmems.c' 'failed'
+  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
+  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
+    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
+    || $echo 'groupmems.c:' 'MD5 check failed'
+f0dd68f8d762d89d24d3ce1f4141f981  groupmems.c
+SHAR_EOF
+  else
+    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'groupmems.c'`"
+    test 6348 -eq "$shar_count" ||
+    $echo 'groupmems.c:' 'original size' '6348,' 'current size' "$shar_count!"
+  fi
+fi
+# ============= groupmems.8 ==============
+if test -f 'groupmems.8' && test "$first_param" != -c; then
+  $echo 'x -' SKIPPING 'groupmems.8' '(file already exists)'
+else
+  $echo 'x -' extracting 'groupmems.8' '(text)'
+  sed 's/^X//' << 'SHAR_EOF' > 'groupmems.8' &&
+X.\"
+X.\" Copyright 2000, International Business Machines, Inc.
+X.\" All rights reserved.
+X.\"
+X.\" original author: George Kraft IV, gk4@us.ibm.com
+X.\"
+X.\" Redistribution and use in source and binary forms, with or without
+X.\" modification, are permitted provided that the following conditions
+X.\" are met:
+X.\"
+X.\" 1. Redistributions of source code must retain the above copyright
+X.\"    notice, this list of conditions and the following disclaimer.
+X.\" 2. Redistributions in binary form must reproduce the above copyright
+X.\"    notice, this list of conditions and the following disclaimer in the
+X.\"    documentation and/or other materials provided with the distribution.
+X.\" 3. Neither the name of International Business Machines, Inc., nor the 
+X.\"    names of its contributors may be used to endorse or promote products 
+X.\"    derived from this software without specific prior written permission.
+X.\"
+X.\" THIS SOFTWARE IS PROVIDED BY INTERNATIONAL BUSINESS MACHINES, INC. AND
+X.\" CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+X.\" BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
+X.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL 
+X.\" INTERNATIONAL BUSINESS MACHINES, INC. OR CONTRIBUTORS BE LIABLE
+X.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+X.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+X.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+X.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+X.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+X.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+X.\" SUCH DAMAGE.
+X.\"
+X.\" $Id: groupmems.shar 1342 2007-11-10 23:46:11Z nekral-guest $
+X.\"
+X.TH GROUPMEMS 8
+X.SH NAME
+groupmems \- Administer members of a user's primary group
+X.SH SYNOPSIS
+X.B groupmems
+\fB-a\fI user_name \fR |
+\fB-d\fI user_name \fR |
+\fB-l\fR |
+\fB-D\fR |
+[\fB-g\fI group_name \fR]
+X.SH DESCRIPTION
+The \fBgroupmems\fR utility allows a user to administer his/her own
+group membership list without the requirement of superuser privileges.
+The \fBgroupmems\fR utility is for systems that configure its users to
+be in their own name sake primary group (i.e., guest / guest).
+X.P
+Only the superuser, as administrator, can use \fBgroupmems\fR to alter
+the memberships of other groups.
+X.IP "\fB-a \fIuser_name\fR"
+Add a new user to the group membership list.
+X.IP "\fB-d \fIuser_name\fR"
+Delete a user from the group membership list.
+X.IP "\fB-l\fR"
+List the group membership list.
+X.IP "\fB-D\fR"
+Delete all users from the group membership list.
+X.IP "\fB-g \fIgroup_name\fR"
+The superuser can specify which group membership list to modify.
+X.SH SETUP
+The \fBgroupmems\fR executable should be in mode \fB2770\fR as user \fBroot\fR
+and in group \fBgroups\fR.   The system administrator can add users to
+group groups to allow or disallow them using the  \fBgroupmems\fR utility
+to manager their own group membership list.
+X.P
+X     $ groupadd -r groups
+X.br
+X     $ chmod 2770 groupmems
+X.br
+X     $ chown root.groups groupmems
+X.br
+X     $ groupmems -g groups -a gk4
+X.SH FILES
+/etc/group
+X.br
+/etc/gshadow
+X.SH SEE ALSO
+X.BR chfn (1),
+X.BR chsh (1),
+X.BR useradd (8),
+X.BR userdel (8),
+X.BR usermod (8),
+X.BR passwd (1),
+X.BR groupadd (8),
+X.BR groupdel (8)
+X.SH AUTHOR
+George Kraft IV (gk4@us.ibm.com)
+X.\" EOF
+SHAR_EOF
+  (set 20 00 05 25 14 38 23 'groupmems.8'; eval "$shar_touch") &&
+  chmod 0600 'groupmems.8' ||
+  $echo 'restore of' 'groupmems.8' 'failed'
+  if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
+  && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
+    md5sum -c << SHAR_EOF >/dev/null 2>&1 \
+    || $echo 'groupmems.8:' 'MD5 check failed'
+181e6cd3a3c9d3df320197fa2cde2b4a  groupmems.8
+SHAR_EOF
+  else
+    shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'groupmems.8'`"
+    test 3372 -eq "$shar_count" ||
+    $echo 'groupmems.8:' 'original size' '3372,' 'current size' "$shar_count!"
+  fi
+fi
+rm -fr _sh10937
+exit 0
diff --git a/contrib/pwdauth.c b/contrib/pwdauth.c
new file mode 100644 (file)
index 0000000..3d2358a
--- /dev/null
@@ -0,0 +1,308 @@
+/*
+ * pwdauth.c - program to verify a given username/password pair.
+ *
+ * Run it with username in argv[1] (may be omitted - default is the
+ * current user), and send it the password over a pipe on stdin.
+ * Exit status: 0 - correct password, 1 - wrong password, >1 - other
+ * errors.  For use with shadow passwords, this program should be
+ * installed setuid root.
+ *
+ * This can be used, for example, by xlock - you don't have to install
+ * this large and complex (== possibly insecure) program setuid root,
+ * just modify it to run this simple program to do the authentication.
+ *
+ * Recent versions (xlockmore-3.9) are cleaner, and drop privileges as
+ * soon as possible after getting the user's encrypted password.
+ * Using this program probably doesn't make it more secure, and has one
+ * disadvantage: since we don't get the encrypted user's password at
+ * startup (but at the time the user is authenticated), it is not clear
+ * how we should handle errors (like getpwnam() returning NULL).
+ * - fail the authentication?  Problem: no way to unlock (other than kill
+ *   the process from somewhere else) if the NIS server stops responding.
+ * - succeed and unlock?  Problem: it's too easy to unlock by unplugging
+ *   the box from the network and waiting until NIS times out...
+ *
+ * This program is Copyright (C) 1996 Marek Michalkiewicz
+ * <marekm@i17linuxb.ists.pwr.wroc.pl>.
+ *
+ * It may be used and distributed freely for any purposes.  There is no
+ * warranty - use at your own risk.  I am not liable for any damages etc.
+ * If you improve it, please send me your changes.
+ */
+
+static char rcsid[] = "$Id: pwdauth.c 1342 2007-11-10 23:46:11Z nekral-guest $";
+
+/*
+ * Define USE_SYSLOG to use syslog() to log successful and failed
+ * authentication.  This should be safe even if your system has
+ * the infamous syslog buffer overrun security problem...
+ */
+#define USE_SYSLOG
+
+/*
+ * Define HAVE_GETSPNAM to get shadow passwords using getspnam().
+ * Some systems don't have getspnam(), but getpwnam() returns
+ * encrypted passwords only if running as root.
+ *
+ * According to the xlock source (not tested, except Linux) -
+ * define: Linux, Solaris 2.x, SVR4, ...
+ * undef: HP-UX with Secured Passwords, FreeBSD, NetBSD, QNX.
+ * Known not supported (yet): Ultrix, OSF/1, SCO.
+ */
+#define HAVE_GETSPNAM
+
+/*
+ * Define HAVE_PW_ENCRYPT to use pw_encrypt() instead of crypt().
+ * pw_encrypt() is like the standard crypt(), except that it may
+ * support better password hashing algorithms.
+ *
+ * Define if linking with libshadow.a from the shadow password
+ * suite (Linux, SunOS 4.x?).
+ */
+#undef HAVE_PW_ENCRYPT
+
+/*
+ * Define HAVE_AUTH_METHODS to support the shadow suite specific
+ * extension: the encrypted password field contains a list of
+ * administrator defined authentication methods, separated by
+ * semicolons.  This program only supports the standard password
+ * authentication method (a string that doesn't start with '@').
+ */
+#undef HAVE_AUTH_METHODS
+
+/*
+ * FAIL_DELAY - number of seconds to sleep before exiting if the
+ * password was wrong, to slow down password guessing attempts.
+ */
+#define FAIL_DELAY 2
+
+/* No user-serviceable parts below :-).  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <pwd.h>
+
+#ifdef USE_SYSLOG
+#include <syslog.h>
+#ifndef LOG_AUTHPRIV
+#define LOG_AUTHPRIV LOG_AUTH
+#endif
+#endif
+
+#ifdef HAVE_GETSPNAM
+#include <shadow.h>
+#endif
+
+#ifdef HAVE_PW_ENCRYPT
+extern char *pw_encrypt();
+#define crypt pw_encrypt
+#endif
+
+/*
+ * Read the password (one line) from fp.  We don't turn off echo
+ * because we expect input from a pipe.
+ */
+static char *
+get_line(fp)
+       FILE *fp;
+{
+       static char buf[128];
+       char *cp;
+       int ch;
+
+       cp = buf;
+       while ((ch = getc(fp)) != EOF && ch != '\0' && ch != '\n') {
+               if (cp >= buf + sizeof buf - 1)
+                       break;
+               *cp++ = ch;
+       }
+       *cp = '\0';
+       return buf;
+}
+
+/*
+ * Get the password file entry for the current user.  If the name
+ * returned by getlogin() is correct (matches the current real uid),
+ * return the entry for that user.  Otherwise, return the entry (if
+ * any) matching the current real uid.  Return NULL on failure.
+ */
+static struct passwd *
+get_my_pwent()
+{
+       uid_t uid = getuid();
+       char *name = getlogin();
+
+       if (name && *name) {
+               struct passwd *pw = getpwnam(name);
+
+               if (pw && pw->pw_uid == uid)
+                       return pw;
+       }
+       return getpwuid(uid);
+}
+
+/*
+ * Verify the password.  The system-dependent shadow support is here.
+ */
+static int
+password_auth_ok(pw, pass)
+       const struct passwd *pw;
+       const char *pass;
+{
+       int result;
+       char *cp;
+#ifdef HAVE_AUTH_METHODS
+       char *buf;
+#endif
+#ifdef HAVE_GETSPNAM
+       struct spwd *sp;
+#endif
+
+       if (pw) {
+#ifdef HAVE_GETSPNAM
+               sp = getspnam(pw->pw_name);
+               if (sp)
+                       cp = sp->sp_pwdp;
+               else
+#endif
+                       cp = pw->pw_passwd;
+       } else
+               cp = "xx";
+
+#ifdef HAVE_AUTH_METHODS
+       buf = strdup(cp);  /* will be modified by strtok() */
+       if (!buf) {
+               fprintf(stderr, "Out of memory.\n");
+               exit(13);
+       }
+       cp = strtok(buf, ";");
+       while (cp && *cp == '@')
+               cp = strtok(NULL, ";");
+
+       /* fail if no password authentication for this user */
+       if (!cp)
+               cp = "xx";
+#endif
+
+       if (*pass || *cp)
+               result = (strcmp(crypt(pass, cp), cp) == 0);
+       else
+               result = 1;  /* user with no password */
+
+#ifdef HAVE_AUTH_METHODS
+       free(buf);
+#endif
+       return result;
+}
+
+/*
+ * Main program.
+ */
+int
+main(argc, argv)
+       int argc;
+       char **argv;
+{
+       struct passwd *pw;
+       char *pass, *name;
+       char myname[32];
+
+#ifdef USE_SYSLOG
+       openlog("pwdauth", LOG_PID | LOG_CONS, LOG_AUTHPRIV);
+#endif
+       pw = get_my_pwent();
+       if (!pw) {
+#ifdef USE_SYSLOG
+               syslog(LOG_ERR, "can't get login name for uid %d.\n",
+                      (int) getuid());
+#endif
+               fprintf(stderr, "Who are you?\n");
+               exit(2);
+       }
+       strncpy(myname, pw->pw_name, sizeof myname - 1);
+       myname[sizeof myname - 1] = '\0';
+       name = myname;
+
+       if (argc > 1) {
+               name = argv[1];
+               pw = getpwnam(name);
+       }
+
+       pass = get_line(stdin);
+       if (password_auth_ok(pw, pass)) {
+#ifdef USE_SYSLOG
+               syslog(pw->pw_uid ? LOG_INFO : LOG_NOTICE,
+                      "user `%s' entered correct password for `%.32s'.\n",
+                      myname, name);
+#endif
+               exit(0);
+       }
+#ifdef USE_SYSLOG
+       /* be careful not to overrun the syslog buffer */
+       syslog((!pw || pw->pw_uid) ? LOG_NOTICE : LOG_WARNING,
+              "user `%s' entered incorrect password for `%.32s'.\n",
+              myname, name);
+#endif
+#ifdef FAIL_DELAY
+       sleep(FAIL_DELAY);
+#endif
+       fprintf(stderr, "Wrong password.\n");
+       exit(1);
+}
+
+#if 0
+/*
+ * You can use code similar to the following to run this program.
+ * Return values: >=0 - program exit status (use the <sys/wait.h>
+ * macros to get the exit code, it is shifted left by 8 bits),
+ * -1 - check errno.
+ */
+int
+verify_password(const char *username, const char *password)
+{
+       int pipe_fd[2];
+       int pid, wpid, status;
+
+       if (pipe(pipe_fd))
+               return -1;
+       
+       if ((pid = fork()) == 0) {
+               char *arg[3];
+               char *env[1];
+
+               /* child */
+               close(pipe_fd[1]);
+               if (pipe_fd[0] != 0) {
+                       if (dup2(pipe_fd[0], 0) != 0)
+                               _exit(127);
+                       close(pipe_fd[0]);
+               }
+               arg[0] = "/usr/bin/pwdauth";
+               arg[1] = username;
+               arg[2] = NULL;
+               env[0] = NULL;
+               execve(arg[0], arg, env);
+               _exit(127);
+       } else if (pid == -1) {
+               /* error */
+               close(pipe_fd[0]);
+               close(pipe_fd[1]);
+               return -1;
+       }
+       /* parent */
+       close(pipe_fd[0]);
+       write(pipe_fd[1], password, strlen(password));
+       write(pipe_fd[1], "\n", 1);
+       close(pipe_fd[1]);
+
+       while ((wpid = wait(&status)) != pid) {
+               if (wpid == -1)
+                       return -1;
+       }
+       return status;
+}
+#endif
diff --git a/contrib/shadow-anonftp.patch b/contrib/shadow-anonftp.patch
new file mode 100644 (file)
index 0000000..6938fe4
--- /dev/null
@@ -0,0 +1,147 @@
+Hello Marek,
+
+I have created a diffile against the 980403 release that adds
+functionality to newusers for automatic handling of users with only
+anonomous ftp login (using the guestgroup feature in ftpaccess, which
+means that the users home directory looks like '/home/user/./'). It also
+adds a commandline argument to specify an initial directory structure
+for such users, with a tarball normally containing the bin,lib,etc
+directories used in the chrooted environment.
+
+I am using it to automatically create chunks of users with only ftp
+access for a webserver.
+
+I have tried to follow your coding standards and I believe it is bug
+free but.. well, who knows. :) It's not much code however.
+
+I hope you find it useful. Do what you like with it, feel free to ask if
+anything is unclear.
+
+Best rgds,
+  Calle Karlsson
+  ckn@kash.se
+
+diff -uNr shadow-980403.orig/src/newusers.c shadow-980403/src/newusers.c
+--- shadow-980403.orig/src/newusers.c  Fri Jan 30 00:22:43 1998
++++ shadow-980403/src/newusers.c       Fri Apr 17 16:55:33 1998
+@@ -76,11 +76,35 @@
+ static void
+ usage(void)
+ {
+-      fprintf(stderr, "Usage: %s [ input ]\n", Prog);
++      fprintf (stderr, "Usage: %s [-p prototype tarfile] [ input ]\n", Prog);
++      fprintf (stderr, "The prototype tarfile is only used for users\n");
++      fprintf (stderr, "marked as anonymous ftp users. It must be a full pathname.\n");
+       exit(1);
+ }
+ /*
++ * createuserdir - create a directory and chmod it
++ */
++
++static int
++createuserdir (char * dir, int uid, int gid, int line)
++{
++      if (mkdir (dir, 0777 & ~getdef_num("UMASK", 077))) {
++              fprintf (stderr, "%s: line %d: mkdir %s failed\n",
++                       Prog, line, dir);
++              return -1;
++      }
++
++      if (chown (dir, uid, gid)) {
++              fprintf (stderr, "%s: line %d: chown %s failed\n",
++                       Prog, line, dir);
++              return -1;
++      }
++
++      return 0;
++}
++
++/*
+  * add_group - create a new group or add a user to an existing group
+  */
+@@ -328,6 +352,8 @@
+ main(int argc, char **argv)
+ {
+       char    buf[BUFSIZ];
++      char    anonproto[BUFSIZ];
++      int     flag;
+       char    *fields[8];
+       int     nfields;
+       char    *cp;
+@@ -340,12 +366,23 @@
+       Prog = Basename(argv[0]);
+-      if (argc > 1 && argv[1][0] == '-')
+-              usage ();
++      * anonproto = '\0';
++
++      while ((flag = getopt (argc, argv, "p:h")) != EOF) {
++              switch (flag) {
++              case 'p':
++                      STRFCPY(anonproto, optarg);
++                      break;
++              case 'h':
++              default:
++                      usage ();
++                      break;
++              }
++      }
+-      if (argc == 2) {
+-              if (! freopen (argv[1], "r", stdin)) {
+-                      snprintf(buf, sizeof buf, "%s: %s", Prog, argv[1]);
++      if (optind < argc) {
++              if (! freopen (argv[optind], "r", stdin)) {
++                      snprintf(buf, sizeof buf, "%s: %s", Prog, argv[optind]);
+                       perror (buf);
+                       exit (1);
+               }
+@@ -499,15 +536,36 @@
+               if (fields[6][0])
+                       newpw.pw_shell = fields[6];
+-              if (newpw.pw_dir[0] && access(newpw.pw_dir, F_OK)) {
+-                      if (mkdir (newpw.pw_dir,
+-                                      0777 & ~getdef_num("UMASK", 077)))
+-                              fprintf (stderr, "%s: line %d: mkdir failed\n",
+-                                      Prog, line);
+-                      else if (chown (newpw.pw_dir,
+-                                      newpw.pw_uid, newpw.pw_gid))
+-                              fprintf (stderr, "%s: line %d: chown failed\n",
+-                                      Prog, line);
++              if (newpw.pw_dir[0]) {
++                      char * userdir = strdup (newpw.pw_dir);
++                      char * anonpart;
++                      int rc;
++
++                      if ((anonpart = strstr (userdir, "/./"))) {
++                              * anonpart = '\0';
++                              anonpart += 2;
++                      }
++                      
++                      if (access(userdir, F_OK))
++                              rc = createuserdir (userdir, newpw.pw_uid, newpw.pw_gid, line);
++                      else
++                              rc = 0;
++
++                      if (rc == 0 && anonpart) {
++                              if (* anonproto) {
++                                      char cmdbuf [BUFSIZ];
++                                      snprintf(cmdbuf, sizeof cmdbuf,
++                                               "cd %s; tar xf %s",
++                                               userdir, anonproto);
++                                      system (cmdbuf);
++                              }
++                              if (strlen (anonpart) > 1) {
++                                      strcat (userdir, anonpart);
++                                      if (access (userdir, F_OK))
++                                              createuserdir (userdir, newpw.pw_uid, newpw.pw_gid, line);
++                              }
++                      }
++                      free (userdir);
+               }
+               /*
diff --git a/contrib/udbachk.tgz b/contrib/udbachk.tgz
new file mode 100644 (file)
index 0000000..605ad63
Binary files /dev/null and b/contrib/udbachk.tgz differ
diff --git a/depcomp b/depcomp
new file mode 100755 (executable)
index 0000000..e5f9736
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,589 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2007-03-29.01
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
+# Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+    # That's a tab and a space in the [].
+    sed -e 's,^.*\.[a-z]*:[     ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mechanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+       set fnord "$@"
+       shift
+       shift
+       ;;
+    *)
+       set fnord "$@" "$arg"
+       shift
+       shift
+       ;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::   \1 \\:p' >> "$depfile"
+  echo "       " >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/doc/HOWTO b/doc/HOWTO
new file mode 100644 (file)
index 0000000..01a90ed
--- /dev/null
+++ b/doc/HOWTO
@@ -0,0 +1,1918 @@
+[ Note: the installation instructions in this document are somewhat
+  out of date - the package now uses GNU autoconf and is configured
+  just like most GNU packages: run ./configure then make.  --marekm ]
+
+  Linux Shadow Password HOWTO
+  Michael H. Jackson, mhjack@tscnet.com
+  v1.3, 3 April 1996
+
+  This document aims to describe how to obtain, install, and configure
+  the Linux password Shadow Suite. It also discusses obtaining, and
+  reinstalling other software and network daemons that require access to
+  user passwords.  This other software is not actually part of the
+  Shadow Suite, but these programs will need to be recompiled to support
+  the Shadow Suite.  This document also contains a programming example
+  for adding shadow support to a program.  Answers to some of the more
+  frequently asked questions are included near the end of this document.
+
+  1.  Introduction.
+
+  This is the Linux Shadow-Password-HOWTO.  This document describes why
+  and how to add shadow password support on a Linux system.  Some
+  examples of how to use some of the Shadow Suite's features is also
+  included.
+
+  When installing the Shadow Suite and when using many of the utility
+  programs, you must be logged in as root.  When installing the Shadow
+  Suite you will be making changes to system software, and it is highly
+  recommended that you make backup copies of programs as indicated.  I
+  also recommend that you read and understand all the instructions
+  before you begin.
+
+  1.1.  Changes from the previous release.
+
+  Additions:
+          Added a sub-section on why you might not want to install shadow
+          Added a sub-section on updating the xdm program
+          Added a section on how to put Shadow Suite features to work
+          Added a section containing frequently asked questions
+
+  Corrections/Updates:
+          Corrected html references on Sunsite
+          Corrected section on wu-ftp to reflect adding -lshadow to the Makefile
+          Corrected minor spelling and verbiage errors
+          Changed section on wu-ftpd to support ELF
+          Updated to reflect security problems in various login programs
+          Updated to recommend the Linux Shadow Suite by Marek Michalkiewicz
+
+  1.2.  New versions of this document.
+
+  The latest released version of this document can always be retrieved
+  by anonymous FTP from:
+
+  sunsite.unc.edu
+
+  /pub/Linux/docs/HOWTO/Shadow-Password-HOWTO
+
+  or:
+
+  /pub/Linux/docs/HOWTO/other-formats/Shadow-Password-HOWTO{-html.tar,ps,dvi}.gz
+
+  or via the World Wide Web from the Linux Documentation Project Web
+  Server <http://sunsite.unc.edu/mdw/linux.html>, at page: Shadow-
+  Password-HOWTO <http://sunsite.unc.edu/linux/HOWTO/Shadow-Password-
+  HOWTO.html> or directly from me, <mhjack@tscnet.com>. It will also be
+  posted to the newsgroup: comp.os.linux.answers
+
+  This document is now packaged with the Shadow-YYDDMM packages.
+
+  1.3.  Feedback.
+
+  Please send any comments, updates, or suggestions to me: Michael H.
+  Jackson <mhjack@tscnet.com>  The sooner I get feedback, the sooner I
+  can update and correct this document.  If you find any problems with
+  it, please mail me directly as I very rarely stay up-to-date on the
+  newsgroups.
+
+  2.  Why shadow your passwd file?
+
+  By default, most current Linux distributions do not contain the Shadow
+  Suite installed.  This includes Slackware 2.3, Slackware 3.0, and
+  other popular distributions.  One of the reasons for this is that the
+  copyright notices in the original Shadow Suite were not clear on
+  redistribution if a fee was charged.  Linux uses a GNU Copyright
+  (sometimes refereed to as a Copyleft) that allows people to package it
+  into a convenient package (like a CD-ROM distribution) and charge a
+  fee for it.
+
+  The current maintainer of the Shadow Suite, Marek Michalkiewicz
+  <marekm@i17linuxb.ists.pwr.wroc.pl> received the source code from the
+  original author under a BSD style copyright that allowed
+  redistribution.   Now that the copyright issues are resolved, it is
+  expected that future distributions will contain password shadowing by
+  default.  Until then, you will need to install it yourself.
+
+  If you installed your distribution from a CD-ROM, you may find that,
+  even though the distribution did not have the Shadow Suite installed,
+  some of the files you need to install the Shadow Suite may be on the
+  CD-ROM.
+
+  However, Shadow Suite versions 3.3.1, 3.3.1-2, and shadow-mk all have
+  security problems with their login program and several other suid root
+  programs that came with them, and should no longer be used.
+
+  All of the necessary files may be obtained via anonymous FTP or
+  through the World Wide Web.
+
+  On a Linux system without the Shadow Suite installed, user information
+  including passwords is stored in the /etc/passwd file.  The password
+  is stored in an encrypted format.  If you ask a cryptography expert,
+  however, he or she will tell you that the password is actually in an
+  encoded rather than encrypted format because when using crypt(3), the
+  text is set to null and the password is the key.  Therefore, from here
+  on, I will use the term encoded in this document.
+
+  The algorithm used to encode the password field is technically
+  referred to as a one way hash function.  This is an algorithm that is
+  easy to compute in one direction, but very difficult to calculate in
+  the reverse direction.  More about the actual algorithm used can be
+  found in section 2.4 or your crypt(3) manual page.
+
+  When a user picks or is assigned a password, it is encoded with a
+  randomly generated value called the salt.  This means that any
+  particular password could be stored in 4096 different ways.  The salt
+  value is then stored with the encoded password.
+
+  When a user logs in and supplies a password, the salt is first
+  retrieved from the stored encoded password.  Then the supplied
+  password is encoded with the salt value, and then compared with the
+  encoded password.  If there is a match, then the user is
+  authenticated.
+
+  It is computationally difficult (but not impossible) to take a
+  randomly encoded password and recover the original password.  However,
+  on any system with more than just a few users, at least some of the
+  passwords will be common words (or simple variations of common words).
+
+  System crackers know all this, and will simply encrypt a dictionary of
+  words and common passwords using all possible 4096 salt values.  Then
+  they will compare the encoded passwords in your /etc/passwd file with
+  their database.  Once they have found a match, they have the password
+  for another account.  This is referred to as a dictionary attack, and
+  is one of the most common methods for gaining or expanding
+  unauthorized access to a system.
+
+  If you think about it, an 8 character password encodes to 4096 * 13
+  character strings.  So a dictionary of say 400,000 common words,
+  names, passwords, and simple variations would easily fit on a 4GB hard
+  drive.  The attacker need only sort them, and then check for matches.
+  Since a 4GB hard drive can be had for under $1000.00, this is well
+  within the means of most system crackers.
+
+  Also, if a cracker obtains your /etc/passwd file first, they only need
+  to encode the dictionary with the salt values actually contained in
+  your /etc/passwd file.  This method is usable by your average teenager
+  with a couple of hundred spare Megabytes and a 486 class computer.
+
+  Even without lots of drive space, utilities like crack(1) can usually
+  break at least a couple of passwords on a system with enough users
+  (assuming the users of the system are allowed to pick their own
+  passwords).
+
+  The /etc/passwd file also contains information like user ID's and
+  group ID's that are used by many system programs.  Therefore, the
+  /etc/passwd file must remain world readable.  If you were to change
+  the /etc/passwd file so that nobody can read it, the first thing that
+  you would notice is that the ls -l command now displays user ID's
+  instead of names!
+
+  The Shadow Suite solves the problem by relocating the passwords to
+  another file (usually /etc/shadow).  The /etc/shadow file is set so
+  that it cannot be read by just anyone.  Only root will be able to read
+  and write to the /etc/shadow file.  Some programs (like xlock) don't
+  need to be able to change passwords, they only need to be able to
+  verify them.  These programs can either be run suid root or you can
+  set up a group shadow that is allowed read only access to the
+  /etc/shadow file.  Then the program can be run sgid shadow.
+
+  By moving the passwords to the /etc/shadow file, we are effectively
+  keeping the attacker from having access to the encoded passwords with
+  which to perform a dictionary attack.
+
+  Additionally, the Shadow Suite adds lots of other nice features:
+
+  ·  A configuration file to set login defaults (/etc/login.defs)
+
+  ·  Utilities for adding, modifying, and deleting user accounts and
+     groups
+
+  ·  Password aging and expiration
+
+  ·  Account expiration and locking
+
+  ·  Shadowed group passwords (optional)
+
+  ·  Double length passwords (16 character passwords) NOT RECOMMENDED
+
+  ·  Better control over user's password selection
+
+  ·  Dial-up passwords
+
+  ·  Secondary authentication programs NOT RECOMMENDED
+
+  Installing the Shadow Suite contributes toward a more secure system,
+  but there are many other things that can also be done to improve the
+  security of a Linux system, and there will eventually be a series of
+  Linux Security HOWTO's that will discuss other security measures and
+  related issues.
+
+  For current information on other Linux security issues, including
+  warnings on known vulnerabilities see the Linux Security home page.
+  <http://bach.cis.temple.edu/linux/linux-security/>
+
+  2.1.  Why you might NOT want to shadow your passwd file.
+
+  There are a few circumstances and configurations in which installing
+  the Shadow Suite would NOT be a good idea:
+
+  ·  The machine does not contain user accounts.
+
+  ·  Your machine is running on a LAN and is using NIS (Network
+     Information Services) to get or supply user names and passwords to
+     other machines on the network.  (This can actually be done, but is
+     beyond the scope of this document, and really won't increase
+     security much anyway)
+
+  ·  Your machine is being used by terminal servers to verify users via
+     NFS (Network File System), NIS, or some other method.
+
+  ·  Your machine runs other software that validates users, and there is
+     no shadow version available, and you don't have the source code.
+
+  2.2.  Format of the /etc/passwd file
+
+  A non-shadowed /etc/passwd file has the following format:
+
+       username:passwd:UID:GID:full_name:directory:shell
+
+  Where:
+
+     username
+        The user (login) name
+
+     passwd
+        The encoded password
+
+     UID
+        Numerical user ID
+
+     GID
+        Numerical default group ID
+
+     full_name
+        The user's full name - Actually this field is called the GECOS
+        (General Electric Comprehensive Operating System) field and can
+        store information other than just the full name.  The Shadow
+        commands and manual pages refer to this field as the comment
+        field.
+
+     directory
+        User's home directory (Full pathname)
+
+     shell
+        User's login shell (Full Pathname)
+
+  For example:
+
+       username:Npge08pfz4wuk:503:100:Full Name:/home/username:/bin/sh
+
+  Where Np is the salt and ge08pfz4wuk is the encoded password.  The
+  encoded salt/password could just as easily have been kbeMVnZM0oL7I and
+  the two are exactly the same password.  There are 4096 possible encod­
+  ings for the same password.  (The example password in this case is
+  'password', a really bad password).
+
+  Once the shadow suite is installed, the /etc/passwd file would instead
+  contain:
+
+       username:x:503:100:Full Name:/home/username:/bin/sh
+
+  The x in the second field in this case is now just a place holder.
+  The format of the /etc/passwd file really didn't change, it just no
+  longer contains the encoded password.  This means that any program
+  that reads the /etc/passwd file but does not actually need to verify
+  passwords will still operate correctly.
+
+  The passwords are now relocated to the shadow file (usually
+  /etc/shadow file).
+
+  2.3.  Format of the shadow file
+
+  The /etc/shadow file contains the following information:
+
+       username:passwd:last:may:must:warn:expire:disable:reserved
+
+  Where:
+
+     username
+        The User Name
+
+     passwd
+        The Encoded password
+     last
+        Days since Jan 1, 1970 that password was last changed
+
+     may
+        Days before password may be changed
+
+     must
+        Days after which password must be changed
+
+     warn
+        Days before password is to expire that user is warned
+
+     expire
+        Days after password expires that account is disabled
+
+     disable
+        Days since Jan 1, 1970 that account is disabled
+
+     reserved
+        A reserved field
+
+  The previous example might then be:
+
+       username:Npge08pfz4wuk:9479:0:10000::::
+
+  2.4.  Review of crypt(3).
+
+  From the crypt(3) manual page:
+
+  "crypt is the password encryption function.  It is based on the Data
+  Encryption Standard algorithm with variations intended (among other
+  things) to discourage use of hardware implementations of a key search.
+
+  The key is a user's typed password.  The encoded string is all NULLs
+
+  The salt is a two-character string chosen from the set a-zA-Z0-9./.
+  This string is used to perturb the algorithm in one of 4096 different
+  ways.
+
+  By taking the lowest 7 bits of each character of the key, a 56-bit key
+  is obtained.  This 56-bit key is used to encrypt repeatedly a constant
+  string (usually a string consisting of all zeros).  The returned value
+  points to the encrypted password, a series of 13 printable ASCII
+  characters (the first two characters represent the salt itself).  The
+  return value points to static data whose content is overwritten by
+  each call.
+
+  Warning: The key space consists of 2**56 equal 7.2e16 possible values.
+  Exhaustive searches of this key space are possible using massively
+  parallel computers.  Software, such as crack(1), is available which
+  will search the portion of this key space that is generally used by
+  humans for passwords.  Hence, password selection should, at minimum,
+  avoid common words and names.  The use of a passwd(1) program that
+  checks for crackable passwords during the selection process is
+  recommended.
+
+  The DES algorithm itself has a few quirks which make the use of the
+  crypt(3) interface a very poor choice for anything other than password
+  authentication.  If you are planning on using the crypt(3) interface
+  for a cryptography project, don't do it: get a good book on encryption
+  and one of the widely available DES libraries."
+
+  Most Shadow Suites contain code for doubling the length of the
+  password to 16 characters.  Experts in des recommend against this, as
+  the encoding is simply applied first to the left half and then to the
+  right half of the longer password.  Because of the way crypt works,
+  this may make for a less secure encoded password then if double length
+  passwords were not used in the first place.  Additionally, it is less
+  likely that a user will be able to remember a 16 character password.
+
+  There is development work under way that would allow the
+  authentication algorithm to be replaced with something more secure and
+  with support for longer passwords (specifically the MD5 algorithm) and
+  retain compatibility with the crypt method.
+
+  If you are looking for a good book on encryption, I recommend:
+
+          "Applied Cryptography: Protocols, Algorithms, and Source Code in C"
+          by Bruce Schneier <schneier@chinet.com>
+          ISBN: 0-471-59756-2
+
+  3.  Getting the Shadow Suite.
+
+  3.1.  History of the Shadow Suite for Linux
+
+  DO NOT USE THE PACKAGES IN THIS SECTION, THEY HAVE SECURITY PROBLEMS
+
+  The original Shadow Suite was written by Julianne F. Haugh
+
+  There are several versions that have been used on Linux systems:
+
+  ·  shadow-3.3.1 is the original.
+
+  ·  shadow-3.3.1-2 is Linux specific patch made by Florian La Roche
+     <flla@stud.uni-sb.de> and contains some further enhancements.
+
+  ·  shadow-mk was specifically packaged for Linux.
+
+  The shadow-mk package contains the shadow-3.3.1 package distributed by
+  Julianne F. Haugh with the shadow-3.3.1-2 patch installed, a few fixes
+  made by Mohan Kokal <magnus@texas.net> that make installation a lot
+  easier, a patch by Joseph R.M. Zbiciak for login1.c (login.secure)
+  that eliminates the -f, -h security holes in /bin/login, and some
+  other miscellaneous patches.
+
+  The shadow.mk package was the previously recommended package, but
+  should be replaced due to a security problem with the login program.
+
+  There are security problems with Shadow versions 3.3.1, 3.3.1-2, and
+  shadow-mk involving the login program.  This login bug involves not
+  checking the length of a login name.  This causes the buffer to
+  overflow causing crashes or worse.  It has been rumored that this
+  buffer overflow can allow someone with an account on the system to use
+  this bug and the shared libraries to gain root access.  I won't
+  discuss exactly how this is possible because there are a lot of Linux
+  systems that are affected, but systems with these Shadow Suites
+  installed, and most pre-ELF distributions without the Shadow Suite are
+  vulnerable!
+
+  For more information on this and other Linux security issues, see the
+  Linux Security home page (Shared Libraries and login Program
+  Vulnerability) <http://bach.cis.temple.edu/linux/linux-security/Linux-
+  Security-FAQ/Linux-telnetd.html>
+
+  3.2.  Where to get the Shadow Suite.
+
+  The only recommended Shadow Suite is still in BETA testing, however
+  the latest versions are safe in a production environment and don't
+  contain a vulnerable login program.
+
+  The package uses the following naming convention:
+
+       shadow-YYMMDD.tar.gz
+
+  where YYMMDD is the issue date of the Suite.
+
+  This version will eventually be Version 3.3.3 when it is released from
+  Beta testing, and is maintained by Marek Michalkiewicz
+  <marekm@i17linuxb.ists.pwr.wroc.pl>.  It's available as: shadow-
+  current.tar.gz
+  <ftp://i17linuxb.ists.pwr.wroc.pl/pub/linux/shadow/shadow-
+  current.tar.gz>.
+
+  The following mirror sites have also been established:
+
+  ·  ftp://ftp.icm.edu.pl/pub/Linux/shadow/shadow-current.tar.gz
+
+  ·  ftp://iguana.hut.fi/pub/linux/shadow/shadow-current.tar.gz
+
+  ·  ftp://ftp.cin.net/usr/ggallag/shadow/shadow-current.tar.gz
+
+  ·  ftp://ftp.netural.com/pub/linux/shadow/shadow-current.tar.gz
+
+  You should use the currently available version.
+
+  You should NOT use a version older than shadow-960129 as they also
+  have the login security problem discussed above.
+
+  When this document refers to the Shadow Suite I am referring to the
+  this package.  It is assumed that this is the package that you are
+  using.
+
+  For reference, I used shadow-960129 to make these installation
+  instructions.
+
+  If you were previously using shadow-mk, you should upgrade to this
+  version and rebuild everything that you originally compiled.
+
+  3.3.  What is included with the Shadow Suite.
+
+  The Shadow Suite contains replacement programs for:
+
+  su, login, passwd, newgrp, chfn, chsh, and id
+
+  The package also contains the new programs:
+
+  chage, newusers, dpasswd, gpasswd, useradd, userdel, usermod,
+  groupadd, groupdel, groupmod, groups, pwck, grpck, lastlog, pwconv,
+  and pwunconv
+
+  Additionally, the library: libshadow.a is included for writing and/or
+  compiling programs that need to access user passwords.
+
+  Also, manual pages for the programs are also included.
+
+  There is also a configuration file for the login program which will be
+  installed as /etc/login.defs.
+
+  4.  Compiling the programs.
+
+  4.1.  Unpacking the archive.
+
+  The first step after retrieving the package is unpacking it.  The
+  package is in the tar (tape archive) format and compressed using gzip,
+  so first move it to /usr/src, then type:
+
+       tar -xzvf shadow-current.tar.gz
+
+  This will unpack it into the directory: /usr/src/shadow-YYMMDD
+
+  4.2.  Configuring with the config.h file
+
+  The first thing that you need to do is to copy over the Makefile and
+  the config.h file:
+
+       cd /usr/src/shadow-YYMMDD
+       cp Makefile.linux Makefile
+       cp config.h.linux config.h
+
+  You should then take a look at the config.h file.  This file contains
+  definitions for some of the configuration options.  If you are using
+  the recommended package, I recommend that you disable group shadow
+  support for your first time around.
+
+  By default shadowed group passwords are enabled.  To disable these
+  edit the config.h file, and change the #define SHADOWGRP to #undef
+  SHADOWGRP. I recommend that you disable them to start with, and then
+  if you really want group passwords and group administrators that you
+  enable it later and recompile.  If you leave it enabled, you must
+  create the file /etc/gshadow.
+
+  Enabling the long passwords option is NOT recommended as discussed
+  above.
+
+  Do NOT change the setting: #undef AUTOSHADOW
+
+  The AUTOSHADOW option was originally designed so that programs that
+  were shadow ignorant would still function.  This sounds good in
+  theory, but does not work correctly.  If you enable this option, and
+  the program runs as root, it may call getpwnam() as root, and later
+  write the modified entry back to the /etc/passwd file (with the no-
+  longer-shadowed password).  Such programs include chfn and chsh.  (You
+  can't get around this by swapping real and effective uid before
+  calling getpwnam() because root may use chfn and chsh too.)
+
+  The same warning is also valid if you are building libc, it has a
+  SHADOW_COMPAT option which does the same thing.  It should NOT be
+  used!  If you start getting encoded passwords back in your /etc/passwd
+  file, this is the problem.
+
+  If you are using a libc version prior to 4.6.27, you will need to make
+  a couple more changes to config.h and the Makefile.  To config.h edit
+  and change:
+
+       #define HAVE_BASENAME
+
+  to:
+
+       #undef HAVE_BASENAME
+
+  And then in the Makefile, change:
+
+       SOBJS = smain.o env.o entry.o susetup.o shell.o \
+               sub.o mail.o motd.o sulog.o age.o tz.o hushed.o
+
+       SSRCS = smain.c env.c entry.c setup.c shell.c \
+               pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
+               tz.c hushed.c
+
+       SOBJS = smain.o env.o entry.o susetup.o shell.o \
+               sub.o mail.o motd.o sulog.o age.o tz.o hushed.o basename.o
+
+       SSRCS = smain.c env.c entry.c setup.c shell.c \
+               pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
+               tz.c hushed.c basename.c
+
+  These changes add the code contained in basename.c which is contained
+  in libc 4.6.27 and later.
+
+  4.3.  Making backup copies of your original programs.
+
+  It would also be a good idea to track down and make backup copies of
+  the programs that the shadow suite will replace.  On a Slackware 3.0
+  system these are:
+
+  ·  /bin/su
+
+  ·  /bin/login
+
+  ·  /usr/bin/passwd
+
+  ·  /usr/bin/newgrp
+
+  ·  /usr/bin/chfn
+
+  ·  /usr/bin/chsh
+
+  ·  /usr/bin/id
+
+  The BETA package has a save target in the Makefile, but it's commented
+  out because different distributions place the programs in different
+  places.
+
+  You should also make a backup copy of your /etc/passwd file, but be
+  careful to name it something else if you place it in the same
+  directory so you don't overwrite the passwd command.
+
+  4.4.  Running make
+
+  You need to be logged as root to do most of the installation.
+
+  Run make to compile the executables in the package:
+
+       make all
+
+  You may see the warning: rcsid defined but not used.  This is fine, it
+  just happens because the author is using a version control package.
+
+  5.  Installing
+
+  5.1.  Have a boot disk handy in case you break anything.
+
+  If something goes terribly wrong, it would be handy to have a boot
+  disk.  If you have a boot/root combination from your installation,
+  that will work, otherwise see the Bootdisk-HOWTO
+  <http://sunsite.unc.edu/mdw/HOWTO/Bootdisk-HOWTO.html>, which
+  describes how to make a bootable disk.
+
+  5.2.  Removing duplicate man pages
+
+  You should also move the manual pages that are about to be replaced.
+  Even if you are brave enough install the Shadow Suite without making
+  backups, you will still want to remove the old manual pages.  The new
+  manual pages won't normally overwrite the old ones because the old
+  ones are probably compressed.
+
+  You can use a combination of: man -aW command and locate command to
+  locate the manual pages that need to be (re)moved.  It's generally
+  easier to figure out which are the older pages before you run make
+  install.
+
+  If you are using the Slackware 3.0 distribution, then the manual pages
+  you want to remove are:
+
+  ·  /usr/man/man1/chfn.1.gz
+
+  ·  /usr/man/man1/chsh.1.gz
+
+  ·  /usr/man/man1/id.1.gz
+
+  ·  /usr/man/man1/login.1.gz
+
+  ·  /usr/man/man1/passwd.1.gz
+
+  ·  /usr/man/man1/su.1.gz
+
+  ·  /usr/man/man5/passwd.5.gz
+
+  There may also be man pages of the same name in the /var/man/cat[1-9]
+  subdirectories that should also be deleted.
+
+  5.3.  Running make install
+
+  You are now ready to type: (do this as root)
+
+       make install
+
+  This will install the new and replacement programs and fix-up the file
+  permissions.  It will also install the man pages.
+
+  This also takes care of installing the Shadow Suite include files in
+  the correct places in /usr/include/shadow.
+
+  Using the BETA package you must manually copy the file login.defs to
+  the /etc subdirectory and make sure that only root can make changes to
+  it.
+
+       cp login.defs /etc
+       chmod 700 /etc/login.defs
+
+  This file is the configuration file for the login program.  You should
+  review and make changes to this file for your particular system.  This
+  is where you decide which tty's root can login from, and set other
+  security policy settings (like password expiration defaults).
+
+  5.4.  Running pwconv
+
+  The next step is to run pwconv.  This must also be done as root, and
+  is best done from the /etc subdirectory:
+
+       cd /etc
+       /usr/sbin/pwconv
+
+  pwconv takes your /etc/passwd file and strips out the fields to create
+  two files: /etc/npasswd and /etc/nshadow.
+
+  A pwunconv program is also provided if you need to make a normal
+  /etc/passwd file out of an /etc/passwd and /etc/shadow combination.
+
+  5.5.  Renaming npasswd and nshadow
+
+  Now that you have run pwconv you have created the files /etc/npasswd
+  and /etc/nshadow.  These need to be copied over to /etc/passwd and
+  /etc/shadow.  We also want to make a backup copy of the original
+  /etc/passwd file, and make sure only root can read it.  We'll put the
+  backup in root's home directory:
+
+       cd /etc
+       cp passwd ~passwd
+       chmod 600 ~passwd
+       mv npasswd passwd
+       mv nshadow shadow
+
+  You should also ensure that the file ownerships and permissions are
+  correct.  If you are going to be using X-Windows, the xlock and xdm
+  programs need to be able to read the shadow file (but not write it).
+
+  There are two ways that this can be done.  You can set xlock to suid
+  root (xdm is usually run as root anyway).  Or you can make the shadow
+  file owned by root with a group of shadow, but before you do this,
+  make sure that you have a shadow group (look in /etc/group).  None of
+  the users on the system should actually be in the shadow group.
+
+       chown root.root passwd
+       chown root.shadow shadow
+       chmod 0644 passwd
+       chmod 0640 shadow
+
+  Your system now has the password file shadowed.  You should now pop
+  over to another virtual terminal and verify that you can login.
+
+  Really, do this now!
+
+  If you can't, then something is wrong!  To get back to a non-shadowed
+  state, do the following the following:
+
+       cd /etc
+       cp ~passwd passwd
+       chmod 644 passwd
+
+  You would then restore the files that you saved earlier to their
+  proper locations.
+
+  6.  Other programs you may need to upgrade or patch
+
+  Even though the shadow suite contains replacement programs for most
+  programs that need to access passwords, there are a few additional
+  programs on most systems that require access to passwords.
+
+  If you are running a Debian Distribution (or even if you are not), you
+  can obtain Debian sources for the programs that need to be rebuild
+  from: ftp://ftp.debian.org/debian/stable/source/
+
+  The remainder of this section discusses how to upgrade adduser,
+  wu_ftpd, ftpd, pop3d, xlock, xdm and sudo so that they support the
+  shadow suite.
+
+  See the section ``Adding Shadow Support to a C program'' for a
+  discussion on how to put shadow support into any other program that
+  needs it (although the program must then be run SUID root or SGID
+  shadow to be able to actually access the shadow file).
+
+  6.1.  Slackware adduser program
+
+  Slackware distributions (and possibly some others) contain a
+  interactive program for adding users called /sbin/adduser.  A shadow
+  version of this program can be obtained from
+  ftp://sunsite.unc.edu/pub/Linux/
+  system/Admin/accounts/adduser.shadow-1.4.tar.gz.
+
+  I would encourage you to use the programs that are supplied with the
+  Shadow Suite (useradd, usermod, and userdel) instead of the slackware
+  adduser program.  They take a little time to learn how to use, but
+  it's well worth the effort because you have much more control and they
+  perform proper file locking on the /etc/passwd and /etc/shadow file
+  (adduser doesn't).
+
+  See the section on ``Putting the Shadow Suite to use'' for more
+  information.
+
+  But if you gotta have it, here is what you do:
+
+       tar -xzvf adduser.shadow-1.4.tar.gz
+       cd adduser
+       make clean
+       make adduser
+       chmod 700 adduser
+       cp adduser /sbin
+
+  6.2.  The wu_ftpd Server
+
+  Most Linux systems some with the wu_ftpd server.  If your distribution
+  does not come with shadow installed, then your wu_ftpd will not be
+  compiled for shadow.  wu_ftpd is launched from inetd/tcpd as a root
+  process.  If you are running an old wu_ftpd daemon, you will want to
+  upgrade it anyway because older ones had a bug that would allow the
+  root account to be compromised (For more info see the Linux security
+  home page <http://bach.cis.temple.edu/linux/linux-security/Linux-
+  Security-FAQ/Linux-wu.ftpd-2.4-Update.html>).
+
+  Fortunately, you only need to get the source code and recompile it
+  with shadow enabled.
+
+  If you are not running an ELF system, The wu_ftp server can be found
+  on Sunsite as wu-ftp-2.4-fixed.tar.gz
+  <ftp://sunsite.unc.edu/pub/Linux/system/Network/file-transfer/wu-
+  ftpd-2.4-fixed.tar.gz>
+
+  Once you retrieve the server, put it in /usr/src, then type:
+
+  cd /usr/src
+  tar -xzvf wu-ftpd-2.4-fixed.tar.gz
+  cd wu-ftpd-2.4-fixed
+  cp ./src/config/config.lnx.shadow ./src/config/config.lnx
+
+  Then edit ./src/makefiles/Makefile.lnx, and change the line:
+
+       LIBES    = -lbsd -support
+
+  to:
+
+       LIBES    = -lbsd -support -lshadow
+
+  Now you are ready to run the build script and install:
+
+       cd /usr/src/wu-ftpd-2.4-fixed
+       /usr/src/wu-ftp-2.4.fixed/build lnx
+       cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old
+       cp ./bin/ftpd /usr/sbin/wu.ftpd
+
+  This uses the Linux shadow configuration file, compiles and installs
+  the server.
+
+  On my Slackware 2.3 system I also had to do the following before
+  running build:
+
+       cd /usr/include/netinet
+       ln -s in_systm.h in_system.h
+       cd -
+
+  Problems have been reported compiling this package under ELF systems,
+  but the Beta version of the next release works fine.  It can be found
+  as wu-ftp-2.4.2-beta-10.tar.gz
+  <ftp://tscnet.com/pub/linux/network/ftp/wu-ftpd-2.4.2-beta-10.tar.gz>
+
+  Once you retrieve the server, put it in /usr/src, then type:
+
+       cd /usr/src
+       tar -xzvf wu-ftpd-2.4.2-beta-9.tar.gz
+       cd wu-ftpd-beta-9
+       cd ./src/config
+
+  Then edit config.lnx, and change:
+
+       #undef SHADOW.PASSWORD
+
+  to:
+
+       #define SHADOW.PASSWORD
+
+  Then,
+
+       cd ../Makefiles
+
+  and edit the file Makefile.lnx and change:
+
+       LIBES = -lsupport -lbsd # -lshadow
+
+  to:
+
+       LIBES = -lsupport -lbsd -lshadow
+
+  Then build and install:
+
+       cd ..
+       build lnx
+       cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old
+       cp ./bin/ftpd /usr/sbin/wu.ftpd
+
+  Note that you should check your /etc/inetd.conf file to make sure that
+  this is where your wu.ftpd server really lives.  It has been reported
+  that some distributions place the server daemons in different places,
+  and then wu.ftpd in particular may be named something else.
+
+  6.3.  Standard ftpd
+
+  If you are running the standard ftpd server, I would recommend that
+  you upgrade to the wu_ftpd server.  Aside from the known bug discussed
+  above, it's generally thought to be more secure.
+
+  If you insist on the standard one, or you need NIS support, Sunsite
+  has ftpd-shadow-nis.tgz
+  <ftp://sunsite.unc.edu/pub/Linux/system/Network/file-transfer/ftpd-
+  shadow-nis.tgz>
+
+  6.4.  pop3d (Post Office Protocol 3)
+
+  If you need to support the third Post Office Protocol (POP3), you will
+  need to recompile a pop3d program.  pop3d is normally run by
+  inetd/tcpd as root.
+
+  There are two versions available from Sunsite:
+  pop3d-1.00.4.linux.shadow.tar.gz
+  <ftp://sunsite.unc.edu/pub/Linux/system/Mail/pop/pop3d-1.00.4.linux.shadow.tar.gz>
+  and pop3d+shadow+elf.tar.gz
+  <ftp://sunsite.unc.edu/pub/Linux/system/Mail/pop/pop3d+shadow+elf.tar.gz>
+
+  Both of these are fairly straight forward to install.
+
+  6.5.  xlock
+
+  If you install the shadow suite, and then run X Windows System and
+  lock the screen without upgrading your xlock, you will have to use
+  CNTL-ALT-Fx to switch to another tty, login, and kill the xlock
+  process (or use CNTL-ALT-BS to kill the X server).  Fortunately it's
+  fairly easy to upgrade your xlock program.
+
+  If you are running XFree86 Versions 3.x.x, you are probably using
+  xlockmore (which is a great screen-saver in addition to a lock).  This
+  package supports shadow with a recompile.  If you have an older xlock,
+  I recommend that you upgrade to this one.
+
+  xlockmore-3.5.tgz is available at:
+  <ftp://sunsite.unc.edu/pub/Linux/X11/xutils/screensavers/xlockmore-3.7.tgz>
+
+  Basically, this is what you need to do:
+
+  Get the xlockmore-3.7.tgz file and put it in /usr/src unpack it:
+
+       tar -xzvf xlockmore-3.7.tgz
+
+  Edit the file: /usr/X11R6/lib/X11/config/linux.cf, and change the
+  line:
+
+       #define HasShadowPasswd    NO
+
+       to
+
+       #define HasShadowPasswd    YES
+
+  Then build the executables:
+
+       cd /usr/src/xlockmore
+       xmkmf
+       make depend
+       make
+
+  Then move everything into place and update file ownerships and
+  permissions:
+
+       cp xlock /usr/X11R6/bin/
+       cp XLock /var/X11R6/lib/app-defaults/
+       chown root.shadow /usr/X11R6/bin/xlock
+       chmod 2755 /usr/X11R6/bin/xlock
+       chown root.shadow /etc/shadow
+       chmod 640 /etc/shadow
+
+  Your xlock will now work correctly.
+
+  6.6.  xdm
+
+  xdm is a program that presents a login screen for X-Windows.  Some
+  systems start xdm when the system is told to goto a specified run
+  level (see /etc/inittab.
+
+  With the Shadow Suite install, xdm will need to be updated.
+  Fortunately it's fairly easy to upgrade your xdm program.
+
+  xdm.tar.gz is available at:
+  <ftp://sunsite.unc.edu/pub/Linux/X11/xutils/xdm.tar.gz>
+
+  Get the xdm.tar.gz file and put it in /usr/src, then to unpack it:
+
+       tar -xzvf xdm.tar.gz
+
+  Edit the file: /usr/X11R6/lib/X11/config/linux.cf, and change the
+  line:
+
+       #define HasShadowPasswd    NO
+
+       to
+
+       #define HasShadowPasswd    YES
+
+  Then build the executables:
+
+       cd /usr/src/xdm
+       xmkmf
+       make depend
+       make
+
+  Then move everything into place:
+
+  cp xdm /usr/X11R6/bin/
+
+  xdm is run as root so you don't need to change it file permissions.
+
+  6.7.  sudo
+
+  The program sudo allows a system administrator to let users run
+  programs that would normally require root access.  This is handy
+  because it lets the administrator limit access to the root account
+  itself while still allowing users to do things like mounting drives.
+
+  sudo needs to read passwords because it verifies the users password
+  when it's invoked.  sudo already runs SUID root, so accessing the
+  /etc/shadow file is not a problem.
+
+  sudo for the shadow suite, is available as at:
+  <ftp://sunsite.unc.edu/pub/Linux/system/Admin/sudo-1.2-shadow.tgz>
+
+  Warning: When you install sudo your /etc/sudoers file will be replaced
+  with a default one, so you need to make a backup of it if you have
+  added anything to the default one.  (you could also edit the Makefile
+  and remove the line that copies the default file to /etc).
+
+  The package is already setup for shadow, so all that's required is to
+  recompile the package (put it in /usr/src):
+
+       cd /usr/src
+       tar -xzvf sudo-1.2-shadow.tgz
+       cd sudo-1.2-shadow
+       make all
+       make install
+
+  6.8.  imapd (E-Mail pine package)
+
+  imapd is an e-mail server similar to pop3d.  imapd comes with the Pine
+  E-mail package.  The documentation that comes with the package states
+  that the default for Linux systems is to include support for shadow.
+  However, I have found that this is not true.  Furthermore, the build
+  script / Makefile combination on this package is makes it very
+  difficult to add the libshadow.a library at compile time, so I was
+  unable to add shadow support for imapd.
+
+  If anyone has this figured out, please E-mail me, and I'll include the
+  solution here.
+
+  6.9.  pppd (Point-to-Point Protocol Server)
+
+  The pppd server can be setup to use several types of authentication:
+  Password Authentication Protocol (PAP) and Cryptographic Handshake
+  Authentication Protocol (CHAP).  The pppd server usually reads the
+  password strings that it uses from /etc/ppp/chap-secrets and/or
+  /etc/ppp/pap-secrets.  If you are using this default behavior of pppd,
+  it is not necessary to reinstall pppd.
+
+  pppd also allows you to use the login parameter (either on the command
+  line, or in the configuration or options file).  If the login option
+  is given, then pppd will use the /etc/passwd file for the username and
+  passwords for the PAP.  This, of course, will no longer work now that
+  our password file is shadowed.  For pppd-1.2.1d this requires adding
+  code for shadow support.
+
+  The example given in the next section is adding shadow support to
+  pppd-1.2.1d (an older version of pppd).
+
+  pppd-2.2.0 already contains shadow support.
+
+  7.  Putting the Shadow Suite to use.
+
+  This section discusses some of the things that you will want to know
+  now that you have the Shadow Suite installed on your system.  More
+  information is contained in the manual pages for each command.
+
+  7.1.  Adding, Modifying, and deleting users
+
+  The Shadow Suite added the following command line oriented commands
+  for adding, modifying, and deleting users.  You may also have
+  installed the adduser program.
+
+  7.1.1.  useradd
+
+  The useradd command can be used to add users to the system.  You also
+  invoke this command to change the default settings.
+
+  The first thing that you should do is to examine the default settings
+  and make changes specific to your system:
+
+       useradd -D
+
+  ______________________________________________________________________
+  GROUP=1
+  HOME=/home
+  INACTIVE=0
+  EXPIRE=0
+  SHELL=
+  SKEL=/etc/skel
+  ______________________________________________________________________
+
+  The defaults are probably not what you want, so if you started adding
+  users now you would have to specify all the information for each user.
+  However, we can and should change the default values.
+
+  On my system:
+
+  ·  I want the default group to be 100
+
+  ·  I want passwords to expire every 60 days
+
+  ·  I don't want to lock an account because the password is expired
+
+  ·  I want to default shell to be /bin/bash
+
+     To make these changes I would use:
+
+       useradd -D -g100 -e60 -f0 -s/bin/bash
+
+  Now running useradd -D will give:
+
+  ______________________________________________________________________
+  GROUP=100
+  HOME=/home
+  INACTIVE=0
+  EXPIRE=60
+  SHELL=/bin/bash
+  SKEL=/etc/skel
+  ______________________________________________________________________
+
+  Just in case you wanted to know, these defaults are stored in the file
+  /etc/default/useradd.
+
+  Now you can use useradd to add users to the system.  For example, to
+  add the user fred, using the defaults, you would use the following:
+
+       useradd -m -c "Fred Flintstone" fred
+
+  This will create the following entry in the /etc/passwd file:
+
+       fred:*:505:100:Fred Flintstone:/home/fred:/bin/bash
+
+  And the following entry in the /etc/shadow file:
+
+       fred:!:0:0:60:0:0:0:0
+
+  fred's home directory will be created and the contents of /etc/skel
+  will be copied there because of the -m switch.
+
+  Also, since we did not specify a UID, the next available one was used.
+
+  fred's account is created, but fred still won't be able to login until
+  we unlock the account.  We do this by changing the password.
+
+       passwd fred
+
+  ______________________________________________________________________
+  Changing password for fred
+  Enter the new password (minimum of 5 characters)
+  Please use a combination of upper and lower case letters and numbers.
+  New Password: *******
+  Re-enter new password: *******
+  ______________________________________________________________________
+
+  Now the /etc/shadow will contain:
+
+       fred:J0C.WDR1amIt6:9559:0:60:0:0:0:0
+
+  And fred will now be able to login and use the system.  The nice thing
+  about useradd and the other programs that come with the Shadow Suite
+  is that they make changes to the /etc/passwd and /etc/shadow files
+  atomically.  So if you are adding a user, and another user is changing
+  their password at the same time, both operations will be performed
+  correctly.
+
+  You should use the supplied commands rather than directly editing
+  /etc/passwd and /etc/shadow.  If you were editing the /etc/shadow
+  file, and a user were to change his password while you are editing,
+  and then you were to save the file you were editing, the user's
+  password change would be lost.
+
+  Here is a small interactive script that adds users using useradd and
+  passwd:
+
+  ______________________________________________________________________
+  #!/bin/bash
+  #
+  # /sbin/newuser - A script to add users to the system using the Shadow
+  #                 Suite's useradd and passwd commands.
+  #
+  # Written my Mike Jackson <mhjack@tscnet.com> as an example for the Linux
+  # Shadow Password Howto.  Permission to use and modify is expressly granted.
+  #
+  # This could be modified to show the defaults and allow modification similar
+  # to the Slackware Adduser program.  It could also be modified to disallow
+  # stupid entries.  (i.e. better error checking).
+  #
+  ##
+  #  Defaults for the useradd command
+  ##
+  GROUP=100        # Default Group
+  HOME=/home       # Home directory location (/home/username)
+  SKEL=/etc/skel   # Skeleton Directory
+  INACTIVE=0       # Days after password expires to disable account (0=never)
+  EXPIRE=60        # Days that a passwords lasts
+  SHELL=/bin/bash  # Default Shell (full path)
+  ##
+  #  Defaults for the passwd command
+  ##
+  PASSMIN=0        # Days between password changes
+  PASSWARN=14      # Days before password expires that a warning is given
+  ##
+  #  Ensure that root is running the script.
+  ##
+  WHOAMI=`/usr/bin/whoami`
+  if [ $WHOAMI != "root" ]; then
+          echo "You must be root to add news users!"
+          exit 1
+  fi
+  ##
+  #  Ask for username and fullname.
+  ##
+  echo ""
+  echo -n "Username: "
+  read USERNAME
+  echo -n "Full name: "
+  read FULLNAME
+  #
+  echo "Adding user: $USERNAME."
+  #
+  # Note that the "" around $FULLNAME is required because this field is
+  # almost always going to contain at least on space, and without the "'s
+  # the useradd command would think that you we moving on to the next
+  # parameter when it reached the SPACE character.
+  #
+  /usr/sbin/useradd -c"$FULLNAME" -d$HOME/$USERNAME -e$EXPIRE \
+          -f$INACTIVE -g$GROUP -m -k$SKEL -s$SHELL $USERNAME
+  ##
+  #  Set password defaults
+  ##
+  /bin/passwd -n $PASSMIN -w $PASSWARN $USERNAME >/dev/null 2>&1
+  ##
+  #  Let the passwd command actually ask for password (twice)
+  ##
+  /bin/passwd $USERNAME
+  ##
+  #  Show what was done.
+  ##
+  echo ""
+  echo "Entry from /etc/passwd:"
+  echo -n "   "
+  grep "$USERNAME:" /etc/passwd
+  echo "Entry from /etc/shadow:"
+  echo -n "   "
+  grep "$USERNAME:" /etc/shadow
+  echo "Summary output of the passwd command:"
+  echo -n "   "
+  passwd -S $USERNAME
+  echo ""
+  ______________________________________________________________________
+
+  Using a script to add new users is really much more preferable than
+  editing the /etc/passwd or /etc/shadow files directly or using a
+  program like the Slackware adduser program.  Feel free to use and
+  modify this script for your particular system.
+
+  For more information on the useradd see the online manual page.
+
+  7.1.2.  usermod
+
+  The usermod program is used to modify the information on a user.  The
+  switches are similar to the useradd program.
+
+  Let's say that you want to change fred's shell, you would do the
+  following:
+
+       usermod -s /bin/tcsh fred
+
+  Now fred's /etc/passwd file entry would be change to this:
+
+       fred:*:505:100:Fred Flintstone:/home/fred:/bin/tcsh
+
+  Let's make fred's account expire on 09/15/97:
+
+       usermod -e 09/15/97 fred
+
+  Now fred's entry in /etc/shadow becomes:
+
+       fred:J0C.WDR1amIt6:9559:0:60:0:0:10119:0
+
+  For more information on the usermod command see the online manual
+  page.
+
+  7.1.3.  userdel
+
+  userdel does just what you would expect, it deletes the user's
+  account.  You simply use:
+
+       userdel -r username
+
+  The -r causes all files in the user's home directory to be removed
+  along with the home directory itself.  Files located in other file
+  system will have to be searched for and deleted manually.
+
+  If you want to simply lock the account rather than delete it, use the
+  passwd command instead.
+
+  7.2.  The passwd command and passwd aging.
+
+  The passwd command has the obvious use of changing passwords.
+  Additionally, it is used by the root user to:
+
+  ·  Lock and unlock accounts (-l and -u)
+
+  ·  Set the maximum number of days that a password remains valid (-x)
+
+  ·  Set the minimum days between password changes (-n)
+
+  ·  Sets the number of days of warning that a password is about to
+     expire (-w)
+
+  ·  Sets the number of days after the password expires before the
+     account is locked (-i)
+
+  ·  Allow viewing of account information in a clearer format (-S)
+
+  For example, let look again at fred
+
+       passwd -S fred
+       fred P 03/04/96 0 60 0 0
+
+  This means that fred's password is valid, it was last changed on
+  03/04/96, it can be changed at any time, it expires after 60 days,
+  fred will not be warned, and and the account won't be disabled when
+  the password expires.
+
+  This simply means that if fred logs in after the password expires, he
+  will be prompted for a new password at login.
+
+  If we decide that we want to warn fred 14 days before his password
+  expires and make his account inactive 14 days after he lets it expire,
+  we would need to do the following:
+
+       passwd -w14 -i14 fred
+
+  Now fred is changed to:
+       fred P 03/04/96 0 60 14 14
+
+  For more information on the passwd command see the online manual page.
+
+  7.3.  The login.defs file.
+
+  The file /etc/login is the configuration file for the login program
+  and also for the Shadow Suite as a whole.
+
+  /etc/login contains settings from what the prompts will look like to
+  what the default expiration will be when a user changes his password.
+
+  The /etc/login.defs file is quite well documented just by the comments
+  that are contained within it.  However, there are a few things to
+  note:
+
+  ·  It contains flags that can be turned on or off that determine the
+     amount of logging that takes place.
+
+  ·  It contains pointers to other configuration files.
+
+  ·  It contains defaults assignments for things like password aging.
+
+  From the above list you can see that this is a rather important file,
+  and you should make sure that it is present, and that the settings are
+  what you desire for your system.
+
+  7.4.  Group passwords.
+
+  The /etc/groups file may contain passwords that permit a user to
+  become a member of a particular group.  This function is enabled if
+  you define the constant SHADOWGRP in the /usr/src/shadow-
+  YYMMDD/config.h file.
+
+  If you define this constant and then compile, you must create an
+  /etc/gshadow file to hold the group passwords and the group
+  administrator information.
+
+  When you created the /etc/shadow, you used a program called pwconv,
+  there no equivalent program to create the /etc/gshadow file, but it
+  really doesn't matter, it takes care of itself.
+
+  To create the initial /etc/gshadow file do the following:
+
+       touch /etc/gshadow
+       chown root.root /etc/gshadow
+       chmod 700 /etc/gshadow
+
+  Once you create new groups, they will be added to the /etc/group and
+  the /etc/gshadow files.  If you modify a group by adding or removing
+  users or changing the group password, the /etc/gshadow file will be
+  changed.
+
+  The programs groups, groupadd, groupmod, and groupdel are provided as
+  part of the Shadow Suite to modify groups.
+
+  The format of the /etc/group file is as follows:
+
+       groupname:!:GID:member,member,...
+
+  Where:
+
+     groupname
+        The name of the group
+
+     !  The field that normally holds the password, but that is now
+        relocated to the /etc/gshadow file.
+
+     GID
+        The numerical group ID number
+
+     member
+        List of group members
+
+  The format of the /etc/gshadow file is as follows:
+
+       groupname:password:admin,admin,...:member,member,...
+
+  Where:
+
+     groupname
+        The name of the group
+
+     password
+        The encoded group password.
+
+     admin
+        List of group administrators
+
+     member
+        List of group members
+
+  The command gpasswd is used only for adding or removing administrators
+  and members to or from a group.  root or someone in the list of
+  administrators may add or remove group members.
+
+  The groups password can be changed using the passwd command by root or
+  anyone listed as an administrator for the group.
+
+  Despite the fact that there is not currently a manual page for
+  gpasswd, typing gpasswd without any parameters gives a listing of
+  options.  It's fairly easy to grasp how it all works once you
+  understand the file formats and the concepts.
+
+  7.5.  Consistency checking programs
+
+  7.5.1.  pwck
+
+  The program pwck is provided to provide a consistency check on the
+  /etc/passwd and /etc/shadow files.  It will check each username and
+  verify that it has the following:
+
+  ·  the correct number of fields
+
+  ·  unique user name
+
+  ·  valid user and group identifier
+
+  ·  valid primary group
+
+  ·  valid home directory
+
+  ·  valid login shell
+
+  It will also warn of any account that has no password.
+
+  It's a good idea to run pwck after installing the Shadow Suite.  It's
+  also a good idea to run it periodically, perhaps weekly or monthly.
+  If you use the -r option, you can use cron to run it on a regular
+  basis and have the report mailed to you.
+
+  7.5.2.  grpck
+
+  grpck is the consistency checking program for the /etc/group and
+  /etc/gshadow files.  It performs the following checks:
+
+  ·  the correct number of fields
+
+  ·  unique group name
+
+  ·  valid list of members and administrators
+
+  It also has the -r option for automated reports.
+
+  7.6.  Dial-up passwords.
+
+  Dial-up passwords are another optional line of defense for systems
+  that allow dial-in access.  If you have a system that allows many
+  people to connect locally or via a network, but you want to limit who
+  can dial in and connect, then dial-up passwords are for you.  To
+  enable dial-up passwords, you must edit the file /etc/login.defs and
+  ensure that DIALUPS_CHECK_ENAB is set to yes.
+
+  Two files contain the dial-up information, /etc/dialups which contains
+  the ttys (one per line, with the leading "/dev/" removed).  If a tty
+  is listed then dial-up checks are performed.
+
+  The second file is the /etc/d_passwd file.  This file contains the
+  fully qualified path name of a shell, followed by an optional
+  password.
+
+  If a user logs into a line that is listed in /etc/dialups, and his
+  shell is listed in the file /etc/d_passwd he will be allowed access
+  only by suppling the correct password.
+
+  Another useful purpose for using dial-up passwords might be to setup a
+  line that only allows a certain type of connect (perhaps a PPP or UUCP
+  connection).  If a user tries to get another type of connection (i.e.
+  a list of shells), he must know a password to use the line.
+
+  Before you can use the dial-up feature, you must create the files.
+
+  The command dpasswd is provided to assign passwords to the shells in
+  the /etc/d_passwd file.  See the manual page for more information.
+  8.  Adding shadow support to a C program
+
+  Adding shadow support to a program is actually fairly straightforward.
+  The only problem is that the program must be run by root (or SUID
+  root) in order for the the program to be able to access the
+  /etc/shadow file.
+
+  This presents one big problem: very careful programming practices must
+  be followed when creating SUID programs.  For instance, if a program
+  has a shell escape, this must not occur as root if the program is SUID
+  root.
+
+  For adding shadow support to a program so that it can check passwords,
+  but otherwise does need to run as root, it's a lot safer to run the
+  program SUID shadow instead.  The xlock program is an example of this.
+
+  In the example given below, pppd-1.2.1d already runs SUID as root, so
+  adding shadow support should not make the program any more vulnerable.
+
+  8.1.  Header files
+
+  The header files should reside in /usr/include/shadow.  There should
+  also be a /usr/include/shadow.h, but it will be a symbolic link to
+  /usr/include/shadow/shadow.h.
+
+  To add shadow support to a program, you need to include the header
+  files:
+
+  #include <shadow/shadow.h>
+  #include <shadow/pwauth.h>
+
+  It might be a good idea to use compiler directives to conditionally
+  compile the shadow code (I do in the example below).
+
+  8.2.  libshadow.a library
+
+  When you installed the Shadow Suite the libshadow.a file was created
+  and installed in /usr/lib.
+
+  When compiling shadow support into a program, the linker needs to be
+  told to include the libshadow.a library into the link.
+
+  This is done by:
+
+       gcc program.c -o program -lshadow
+
+  However, as we will see in the example below, most large programs use
+  a Makefile, and usually have a variable called LIBS=... that we will
+  modify.
+
+  8.3.  Shadow Structure
+
+  The libshadow.a library uses a structure called spwd for the
+  information it retrieves from the /etc/shadow file.  This is the
+  definition of the spwd structure from the /usr/include/shadow/shadow.h
+  header file:
+
+  ______________________________________________________________________
+  struct spwd
+  {
+    char *sp_namp;                /* login name */
+    char *sp_pwdp;                /* encrypted password */
+    sptime sp_lstchg;             /* date of last change */
+    sptime sp_min;                /* minimum number of days between changes */
+    sptime sp_max;                /* maximum number of days between changes */
+    sptime sp_warn;               /* number of days of warning before password
+                                     expires */
+    sptime sp_inact;              /* number of days after password expires
+                                     until the account becomes unusable. */
+    sptime sp_expire;             /* days since 1/1/70 until account expires
+  */
+    unsigned long sp_flag;        /* reserved for future use */
+  };
+  ______________________________________________________________________
+
+  The Shadow Suite can put things into the sp_pwdp field besides just
+  the encoded passwd.  The password field could contain:
+
+       username:Npge08pfz4wuk;@/sbin/extra:9479:0:10000::::
+
+  This means that in addition to the password, the program /sbin/extra
+  should be called for further authentication.  The program called will
+  get passed the username and a switch that indicates why it's being
+  called.  See the file /usr/include/shadow/pwauth.h and the source code
+  for pwauth.c for more information.
+
+  What this means is that we should use the function pwauth to perform
+  the actual authentication, as it will take care of the secondary
+  authentication as well.  The example below does this.
+
+  The author of the Shadow Suite indicates that since most programs in
+  existence don't do this, and that it may be removed or changed in
+  future versions of the Shadow Suite.
+
+  8.4.  Shadow Functions
+
+  The shadow.h file also contains the function prototypes for the
+  functions contained in the libshadow.a library:
+
+  ______________________________________________________________________
+  extern void setspent __P ((void));
+  extern void endspent __P ((void));
+  extern struct spwd *sgetspent __P ((__const char *__string));
+  extern struct spwd *fgetspent __P ((FILE *__fp));
+  extern struct spwd *getspent __P ((void));
+  extern struct spwd *getspnam __P ((__const char *__name));
+  extern int putspent __P ((__const struct spwd *__sp, FILE *__fp));
+  ______________________________________________________________________
+
+  The function that we are going to use in the example is: getspnam
+  which will retrieve for us a spwd structure for the supplied name.
+
+  8.5.  Example
+
+  This is an example of adding shadow support to a program that needs
+  it, but does not have it by default.
+
+  This example uses the Point-to-Point Protocol Server (pppd-1.2.1d),
+  which has a mode in which it performs PAP authentication using user
+  names and passwords from the /etc/passwd file instead of the PAP or
+  CHAP files.  You would not need to add this code to pppd-2.2.0 because
+  it's already there.
+
+  This feature of pppd probably isn't used very much, but if you
+  installed the Shadow Suite, it won't work anymore because the
+  passwords are no longer stored in /etc/passwd.
+
+  The code for authenticating users under pppd-1.2.1d is located in the
+  /usr/src/pppd-1.2.1d/pppd/auth.c file.
+
+  The following code needs to be added to the top of the file where all
+  the other #include directives are.  We have surrounded the #includes
+  with conditional directives (i.e. only include if we are compiling for
+  shadow support).
+
+  ______________________________________________________________________
+  #ifdef HAS_SHADOW
+  #include <shadow.h>
+  #include <shadow/pwauth.h>
+  #endif
+  ______________________________________________________________________
+
+  The next thing to do is to modify the actual code.  We are still
+  making changes to the auth.c file.
+
+  Function auth.c before modifications:
+
+  ______________________________________________________________________
+  /*
+   * login - Check the user name and password against the system
+   * password database, and login the user if OK.
+   *
+   * returns:
+   *      UPAP_AUTHNAK: Login failed.
+   *      UPAP_AUTHACK: Login succeeded.
+   * In either case, msg points to an appropriate message.
+   */
+  static int
+  login(user, passwd, msg, msglen)
+      char *user;
+      char *passwd;
+      char **msg;
+      int *msglen;
+  {
+      struct passwd *pw;
+      char *epasswd;
+      char *tty;
+
+      if ((pw = getpwnam(user)) == NULL) {
+          return (UPAP_AUTHNAK);
+      }
+       /*
+       * XXX If no passwd, let them login without one.
+       */
+      if (pw->pw_passwd == '\0') {
+          return (UPAP_AUTHACK);
+      }
+
+      epasswd = crypt(passwd, pw->pw_passwd);
+      if (strcmp(epasswd, pw->pw_passwd)) {
+          return (UPAP_AUTHNAK);
+      }
+
+      syslog(LOG_INFO, "user %s logged in", user);
+
+      /*
+       * Write a wtmp entry for this user.
+       */
+      tty = strrchr(devname, '/');
+      if (tty == NULL)
+          tty = devname;
+      else
+          tty++;
+      logwtmp(tty, user, "");             /* Add wtmp login entry */
+      logged_in = TRUE;
+
+      return (UPAP_AUTHACK);
+  }
+  ______________________________________________________________________
+
+  The user's password is placed into pw->pw_passwd, so all we really
+  need to do is add the function getspnam.  This will put the password
+  into spwd->sp_pwdp.
+
+  We will add the function pwauth to perform the actual authentication.
+  This will automatically perform secondary authentication if the shadow
+  file is setup for it.
+
+  Function auth.c after modifications to support shadow:
+
+  ______________________________________________________________________
+  /*
+   * login - Check the user name and password against the system
+   * password database, and login the user if OK.
+   *
+   * This function has been modified to support the Linux Shadow Password
+   * Suite if USE_SHADOW is defined.
+   *
+   * returns:
+   *      UPAP_AUTHNAK: Login failed.
+   *      UPAP_AUTHACK: Login succeeded.
+   * In either case, msg points to an appropriate message.
+   */
+  static int
+  login(user, passwd, msg, msglen)
+      char *user;
+      char *passwd;
+      char **msg;
+      int *msglen;
+  {
+      struct passwd *pw;
+      char *epasswd;
+      char *tty;
+
+  #ifdef USE_SHADOW
+      struct spwd *spwd;
+      struct spwd *getspnam();
+  #endif
+
+      if ((pw = getpwnam(user)) == NULL) {
+          return (UPAP_AUTHNAK);
+      }
+
+  #ifdef USE_SHADOW
+          spwd = getspnam(user);
+          if (spwd)
+                  pw->pw_passwd = spwd->sp-pwdp;
+  #endif
+
+       /*
+       * XXX If no passwd, let NOT them login without one.
+       */
+      if (pw->pw_passwd == '\0') {
+          return (UPAP_AUTHNAK);
+      }
+  #ifdef HAS_SHADOW
+      if ((pw->pw_passwd && pw->pw_passwd[0] == '@'
+           && pw_auth (pw->pw_passwd+1, pw->pw_name, PW_LOGIN, NULL))
+          || !valid (passwd, pw)) {
+          return (UPAP_AUTHNAK);
+      }
+  #else
+      epasswd = crypt(passwd, pw->pw_passwd);
+      if (strcmp(epasswd, pw->pw_passwd)) {
+          return (UPAP_AUTHNAK);
+      }
+  #endif
+
+      syslog(LOG_INFO, "user %s logged in", user);
+
+      /*
+       * Write a wtmp entry for this user.
+       */
+      tty = strrchr(devname, '/');
+      if (tty == NULL)
+          tty = devname;
+      else
+          tty++;
+      logwtmp(tty, user, "");             /* Add wtmp login entry */
+      logged_in = TRUE;
+
+      return (UPAP_AUTHACK);
+  }
+  ______________________________________________________________________
+
+  Careful examination will reveal that we made another change as well.
+  The original version allowed access (returned UPAP_AUTHACK if there
+  was NO password in the /etc/passwd file.  This is not good, because a
+  common use of this login feature is to use one account to allow access
+  to the PPP process and then check the username and password supplied
+  by PAP with the username in the /etc/passwd file and the password in
+  the /etc/shadow file.
+
+  So if we had set the original version up to run as the shell for a
+  user i.e.  ppp, then anyone could get a ppp connection by setting
+  their PAP to user ppp and a password of null.
+
+  We fixed this also by returning UPAP_AUTHNAK instead of UPAP_AUTHACK
+  if the password field was empty.
+
+  Interestingly enough, pppd-2.2.0 has the same problem.
+
+  Next we need to modify the Makefile so that two things occur:
+  USE_SHADOW must be defined, and libshadow.a needs to be added to the
+  linking process.
+
+  Edit the Makefile, and add:
+
+       LIBS = -lshadow
+
+  Then we find the line:
+
+       COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t
+
+  And change it to:
+
+       COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t -DUSE_SHADOW
+
+  Now make and install.
+
+  9.  Frequently Asked Questions.
+
+  Q: I used to control which tty's root could log into using the file
+  /etc/securettys, but it doesn't seem to work anymore, what's going on?
+
+  A: The file /etc/securettys does absolutely nothing now that the
+  Shadow Suite is installed.  The tty's that root can use are now
+  located in the login configuration file /etc/login.defs.  The entry in
+  this file may point to another file.
+
+  Q: I installed the Shadow Suite, but now I can't login, what did I
+  miss?
+
+  A: You probably installed the Shadow programs, but didn't run pwconv
+  or you forgot to copy /etc/npasswd to /etc/passwd and /etc/nshadow to
+  /etc/shadow.  Also, you may need to copy login.defs to /etc.
+
+  Q: In the section on xlock, it said to change the group ownership of
+  the /etc/shadow file to shadow.  I don't have a shadow group, what do
+  I do?
+
+  A: You can add one.  Simply edit the /etc/group file, and insert a
+  line for the shadow group.  You need to ensure that the group number
+  is not used by another group, and you need to insert it before the
+  nogroup entry.  Or you can simply suid xlock to root.
+
+  Q: Is there a mailing list for the Linux Shadow Password Suite?
+
+  A: Yes, but it's for the development and beta testing of the next
+  Shadow Suite for Linux.  You can get added to the list by mailing to:
+  shadow-list-request@neptune.cin.net with a subject of: subscribe.  The
+  list is actually for discussions of the Linux shadow-YYMMSS series of
+  releases.  You should join if you want to get involved in further
+  development or if you install the Suite on your system and want to get
+  information on newer releases.
+
+  Q: I installed the Shadow Suite, but when I use the userdel command, I
+  get "userdel: cannot open shadow group file", what did I do wrong?
+
+  A: You compiled the Shadow Suite with the SHADOWGRP option enabled,
+  but you don't have an /etc/gshadow file.  You need to either edit the
+  config.h file and recompile, or create an /etc/group file.  See the
+  section on shadow groups.
+
+  Q: I installed the Shadow Suite but now I'm getting encoded passwords
+  back in my /etc/passwd file, what's wrong?
+
+  A: You either enabled the AUTOSHADOW option in the Shadow config.h
+  file, or your libc was compiled with the SAHDOW_COMPAT option.  You
+  need to determine which is the problem, and recompile.
+
+  10.  Copyright Message.
+
+  The Linux Shadow Password HOWTO is Copyright (c) 1996 Michael H.
+  Jackson.
+
+  Permission is granted to make and distribute verbatim copies of this
+  document provided the copyright notice and this permission notice are
+  preserved on all copies.
+
+  Permission is granted to copy and distribute modified versions of this
+  document under the conditions for verbatim copies above, provided a
+  notice clearly stating that the document is a modified version is also
+  included in the modified document.
+
+  Permission is granted to copy and distribute translations of this
+  document into another language, under the conditions specified above
+  for modified versions.
+
+  Permission is granted to convert this document into another media
+  under the conditions specified above for modified versions provided
+  the requirement to acknowledge the source document is fulfilled by
+  inclusion of an obvious reference to the source document in the new
+  media. Where there is any doubt as to what defines 'obvious' the
+  copyright owner reserves the right to decide.
+
+  11.  Miscellaneous and Acknowledgments.
+
+  The code examples for auth.c are taken from pppd-1.2.1d and
+  ppp-2.1.0e, Copyright (c) 1993 and The Australian National University
+  and Copyright (c) 1989 Carnegie Mellon University.
+
+  Thanks to Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl> for
+  writing and maintaining the Shadow Suite for Linux, and for his review
+  and comments on this document.
+
+  Thanks to Ron Tidd <rtidd@tscnet.com> for his helpful review and
+  testing.
+
+  Thanks to everyone who has sent me feedback to help improve this
+  document.
+
+  Please, if you have any comments or suggestions then mail them to me.
+
+  regards
+
+  Michael H. Jackson <mhjack@tscnet.com>
+
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644 (file)
index 0000000..85f2248
--- /dev/null
@@ -0,0 +1,5 @@
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+
+EXTRA_DIST = HOWTO README.limits \
+    README.platforms WISHLIST console.c.spec.txt cracklib26.diff
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644 (file)
index 0000000..6403649
--- /dev/null
@@ -0,0 +1,363 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = HOWTO README.limits \
+    README.platforms WISHLIST console.c.spec.txt cracklib26.diff
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  doc/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/README.limits b/doc/README.limits
new file mode 100644 (file)
index 0000000..6551ad7
--- /dev/null
@@ -0,0 +1,66 @@
+
+ABOUT shadow-login limits:
+
+This code is merged into shadow login program from the original LShell 2.01
+written by Joel Katz. The port and some additional features have been added
+by Cristian Gafton (gafton@sorosis.ro).
+
+
+Changes:
+       - 96/04/16
+               - {spaces,tabs} allowed within limits string
+               - Warn via syslog multiple default limits
+               - added few paragraphs to the login man page
+       - 96/04/14
+               - code merged into lmain.c --cristiang
+
+TODO:  - support groups in the limits file
+         (only usernames are supported at this momment :-( )
+
+Setting user limits for shadow login program
+
+First, make a root-only-readable file (/etc/limits by default or LIMITS_FILE
+defined config.h) that describes the resource limits you wish to impose. By
+default no quotas are imposed on 'root'. In fact, there is no way to impose
+limits via this procedure to root-equiv accounts (accounts with UID 0).
+
+Each line describes a limit for a user in the form:
+
+       user LIMITS_STRING
+
+The LIMITS_STRING is a string of a concatenated list of resource limits.
+Each limit consists of a letter identifier followed by a numerical limit.
+The valid identifiers are:
+
+       A: max address space (KB)
+       C: max core file size (KB)
+       D: max data size (KB)
+       F: maximum filesize (KB)
+       M: max locked-in-memory address space (KB)
+       N: max number of open files
+       R: max resident set size (KB)
+       S: max stack size (KB)
+       T: max CPU time (MIN)
+       U: max number of processes
+       L: max number of logins for this user
+
+For example, L2D2048N5 is a valid LIMITS_STRING. For reading convenience,
+the following entries are equivalent:
+
+username L2D2048N5
+username L2 D2048 N5
+
+Be aware that after <username> the rest of the line is considered a limit
+string, thus comments are not allowed. A invalid limits string will be
+rejected (not considered) by the login program.
+
+The default entry is denoted by username '*'. If you have multiple 'default'
+entries in your LIMITS_FILE, then the last one will be used as the default
+entry.
+
+To completely disable limits for a user, a single dash (-) will do.
+
+Also, please note that all limit settings are set PER LOGIN.  They are
+not global, nor are they permanent.  Perhaps global limits will come, but
+for now this will have to do ;)
+
diff --git a/doc/README.platforms b/doc/README.platforms
new file mode 100644 (file)
index 0000000..17d92ed
--- /dev/null
@@ -0,0 +1,33 @@
+# $Id: README.platforms 1342 2007-11-10 23:46:11Z nekral-guest $
+#
+# This is the current (still incomplete) list of platforms this
+# package has been verified to work on.  Additions (preferably
+# in the format as described below) are welcome.  Thanks!
+# 
+# V: last version reported to work
+# H: host type
+# L: Linux libc version
+# D: Linux distribution, or other OS name and version
+# C: changes (if any)
+# R: reported by
+
+V: 980529
+H: sparc-unknown-linux-gnu
+L: glibc-2.0.7
+D: Ultrapenguin-1.0.9
+C: had to explicitly disable desrpc.
+R: Bjorn Christianson <bjorn@cascade.psychology.mcmaster.ca>
+
+V: 980724
+H: i486-pc-linux-gnulibc1
+L: libc-5.4.33
+D: Debian-1.3.1.r6
+C: none (use dpkg-buildpackage)
+R: Marek Michalkiewicz <marekm@linux.org.pl>
+
+V: current
+H: i686-pc-linux-gnu
+L: glibc-2.0.7.19981211
+D: Debian-2.1
+C: none (use dpkg-buildpackage)
+R: Marek Michalkiewicz <marekm@linux.org.pl>
diff --git a/doc/WISHLIST b/doc/WISHLIST
new file mode 100644 (file)
index 0000000..97f1b43
--- /dev/null
@@ -0,0 +1,40 @@
+$Id: WISHLIST 2621 2009-04-10 22:35:19Z nekral-guest $
+
+This is my wishlist for the shadow suite, in no particular order.  Feel
+free to do anything from this list and mail me the diffs :-).
+
+Patches in diff -u format, against the latest version (sometimes in the
+"beta" directory) are preferred and make my job easier.  Please, no
+MIME, base64, quoted-printable, or HTML.  For very big patches, or if
+your mailer can corrupt them, please use gzip and uuencode.  Thanks!
+
+New ideas to add to this list are welcome, too.  --marekm
+
+- fix all the bugs, of course
+- implement "su only" accounts (no logins, only su from other account)
+- rewrite getdef.c to be more general? (no hardcoded names)
+- patch for rlogind/telnetd to create utmp entry and fill in ut_addr
+- option to specify encrypted password in passwd (for yppasswdd, so it
+  doesn't need to know about shadow/non-shadow); should probably use a pipe
+  (less insecure than command line arguments)
+- add support for changing NIS passwords
+- add option to check passwords by piping them to external programs
+- add functionality of the contrib/rpasswd.c wrapper to passwd
+- option to generate pronounceable passwords (like on SCO), external program?
+- poppassd (remote password change for eudora etc.)
+- add support for passwd/shadow db files (glibc)
+- vipw: check password files for errors after editing
+- add "maximum time users allowed to stay logged in" limit option to logoutd
+- handle quotes in /etc/environment like the shell does (but sshd doesn't...)
+- better utmpx support (logoutd, ...)
+- better OPIE support (report number of logins left, etc.)
+- new option for /etc/suauth: don't load user's environment (force "su -")
+  suggested by Ulisses Alonso Camaro
+- find out why recent releases won't compile on Solaris
+- newusers should be able to copy /etc/skel to the new home directory
+  (like useradd)
+- add directories where other packages can add hooks for package-specific
+  per-user configuration, to be executed with run-parts. Some hooks should
+  be executed at package install time for existing users, likewise for
+  package removal and possibly modification.  (Debian Bug#36019)
+
diff --git a/doc/console.c.spec.txt b/doc/console.c.spec.txt
new file mode 100644 (file)
index 0000000..f386abe
--- /dev/null
@@ -0,0 +1,36 @@
+$Id: console.c.spec.txt 1342 2007-11-10 23:46:11Z nekral-guest $
+
+Specification for console.c source file --
+
+input values --
+       tty -- character pointer to device name with leading "/dev/"
+              removed.
+
+return values --
+       0 -- false
+       1 -- true
+
+int console (char * tty)
+       if "CONSOLE" string value is not present in login.defs
+               return true
+
+       if the first character of "CONSOLE" string value is not "/"
+               treat the string as a ":" delimited list of device
+               names and search for the value of tty in that
+               tokenized list.
+
+               if a match is found
+                       return true
+
+               return false
+
+       if the file named by "CONSOLE" cannot be opened
+               return true
+
+       scan the file looking for a match between the input line
+       and the value of tty
+
+       if a match is found
+               return true
+
+       return false
diff --git a/doc/cracklib26.diff b/doc/cracklib26.diff
new file mode 100644 (file)
index 0000000..09160b8
--- /dev/null
@@ -0,0 +1,340 @@
+diff -ur orig/cracklib26_small/cracklib/fascist.c cracklib26_small/cracklib/fascist.c
+--- orig/cracklib26_small/cracklib/fascist.c   Mon Dec 15 02:56:55 1997
++++ cracklib26_small/cracklib/fascist.c        Sat Apr  4 22:14:45 1998
+@@ -12,6 +12,7 @@
+ #include <ctype.h>
+ #include <sys/types.h>
+ #include <pwd.h>
++#include <string.h>
+ #define ISSKIP(x) (isspace(x) || ispunct(x))
+@@ -460,28 +461,27 @@
+ }
+ char *
+-FascistGecos(password, uid)
++FascistGecosPw(password, pwd)
+     char *password;
+-    int uid;
++    struct passwd *pwd;
+ {
+     int i;
+     int j;
+     int wc;
+     char *ptr;
+-    struct passwd *pwp;
+     char gbuffer[STRINGSIZE];
+     char tbuffer[STRINGSIZE];
+     char *uwords[STRINGSIZE];
+     char longbuffer[STRINGSIZE * 2];
+-    if (!(pwp = getpwuid(uid)))
++    if (!pwd)
+     {
+       return ("you are not registered in the password file");
+     }
+     /* lets get really paranoid and assume a dangerously long gecos entry */
+-    strncpy(tbuffer, pwp->pw_name, STRINGSIZE);
++    strncpy(tbuffer, pwd->pw_name, STRINGSIZE);
+     tbuffer[STRINGSIZE-1] = '\0';
+     if (GTry(tbuffer, password))
+     {
+@@ -490,12 +490,13 @@
+     /* it never used to be that you got passwd strings > 1024 chars, but now... */
+-    strncpy(tbuffer, pwp->pw_gecos, STRINGSIZE);
++    strncpy(tbuffer, pwd->pw_gecos, STRINGSIZE);
+     tbuffer[STRINGSIZE-1] = '\0';
+     strcpy(gbuffer, Lowercase(tbuffer));
+     wc = 0;
+     ptr = gbuffer;
++    uwords[0] = (char *) 0;
+     while (*ptr)
+     {
+@@ -530,6 +531,8 @@
+           *(ptr++) = '\0';
+       }
+     }
++    if (!uwords[0])
++      return ((char *) 0);  /* empty gecos */
+ #ifdef DEBUG
+     for (i = 0; uwords[i]; i++)
+     {
+@@ -586,9 +589,10 @@
+ }
+ char *
+-FascistLook(pwp, instring)
++FascistLookPw(pwp, instring, pwd)
+     PWDICT *pwp;
+     char *instring;
++    struct passwd *pwd;
+ {
+     int i;
+     char *ptr;
+@@ -667,7 +671,7 @@
+       return ("it looks like a National Insurance number.");
+     }
+-    if (ptr = FascistGecos(password, getuid()))
++    if (ptr = FascistGecosPw(password, pwd ? pwd : getpwuid(getuid())))
+     {
+       return (ptr);
+     }
+@@ -715,9 +719,10 @@
+ }
+ char *
+-FascistCheck(password, path)
++FascistCheckPw(password, path, pwd)
+     char *password;
+     char *path;
++    struct passwd *pwd;
+ {
+     static char lastpath[STRINGSIZE];
+     static PWDICT *pwp;
+@@ -750,5 +755,29 @@
+       strncpy(lastpath, path, STRINGSIZE);
+     }
+-    return (FascistLook(pwp, pwtrunced));
++    return (FascistLookPw(pwp, pwtrunced, pwd));
++}
++
++char *
++FascistGecos(password, uid)
++    char *password;
++    int uid;
++{
++    return (FascistGecosPw(password, getpwuid(uid)));
++}
++
++char *
++FascistLook(pwp, instring)
++    PWDICT *pwp;
++    char *instring;
++{
++    return (FascistLookPw(pwp, instring, (char *) 0));
++}
++
++char *
++FascistCheck(password, path)
++    char *password;
++    char *path;
++{
++    return (FascistCheckPw(password, path, (char *) 0));
+ }
+diff -ur orig/cracklib26_small/cracklib/packer.h cracklib26_small/cracklib/packer.h
+--- orig/cracklib26_small/cracklib/packer.h    Mon Dec 15 00:09:30 1997
++++ cracklib26_small/cracklib/packer.h Sat Jan 10 22:13:46 1998
+@@ -34,6 +34,7 @@
+     FILE *dfp;
+     FILE *wfp;
++    int canfree;
+     int32 flags;
+ #define PFOR_WRITE    0x0001
+ #define PFOR_FLUSH    0x0002
+diff -ur orig/cracklib26_small/cracklib/packlib.c cracklib26_small/cracklib/packlib.c
+--- orig/cracklib26_small/cracklib/packlib.c   Fri Jul  9 22:22:58 1993
++++ cracklib26_small/cracklib/packlib.c        Sat Jan 10 22:28:49 1998
+@@ -16,7 +16,7 @@
+     char *mode;
+ {
+     int32 i;
+-    static PWDICT pdesc;
++    PWDICT *pdesc;
+     char iname[STRINGSIZE];
+     char dname[STRINGSIZE];
+     char wname[STRINGSIZE];
+@@ -25,92 +25,94 @@
+     FILE *ifp;
+     FILE *wfp;
+-    if (pdesc.header.pih_magic == PIH_MAGIC)
+-    {
+-      fprintf(stderr, "%s: another dictionary already open\n", prefix);
++    if ((pdesc = (PWDICT *) malloc(sizeof(PWDICT))) == 0)
+       return ((PWDICT *) 0);
+-    }
+-    memset(&pdesc, '\0', sizeof(pdesc));
++    memset(pdesc, '\0', sizeof(*pdesc));
+     sprintf(iname, "%s.pwi", prefix);
+     sprintf(dname, "%s.pwd", prefix);
+     sprintf(wname, "%s.hwm", prefix);
+-    if (!(pdesc.dfp = fopen(dname, mode)))
++    if (!(pdesc->dfp = fopen(dname, mode)))
+     {
+       perror(dname);
++      free(pdesc);
+       return ((PWDICT *) 0);
+     }
+-    if (!(pdesc.ifp = fopen(iname, mode)))
++    if (!(pdesc->ifp = fopen(iname, mode)))
+     {
+-      fclose(pdesc.dfp);
++      fclose(pdesc->dfp);
+       perror(iname);
++      free(pdesc);
+       return ((PWDICT *) 0);
+     }
+-    if (pdesc.wfp = fopen(wname, mode))
++    if (pdesc->wfp = fopen(wname, mode))
+     {
+-      pdesc.flags |= PFOR_USEHWMS;
++      pdesc->flags |= PFOR_USEHWMS;
+     }
+-    ifp = pdesc.ifp;
+-    dfp = pdesc.dfp;
+-    wfp = pdesc.wfp;
++    ifp = pdesc->ifp;
++    dfp = pdesc->dfp;
++    wfp = pdesc->wfp;
+     if (mode[0] == 'w')
+     {
+-      pdesc.flags |= PFOR_WRITE;
+-      pdesc.header.pih_magic = PIH_MAGIC;
+-      pdesc.header.pih_blocklen = NUMWORDS;
+-      pdesc.header.pih_numwords = 0;
++      pdesc->flags |= PFOR_WRITE;
++      pdesc->header.pih_magic = PIH_MAGIC;
++      pdesc->header.pih_blocklen = NUMWORDS;
++      pdesc->header.pih_numwords = 0;
+-      fwrite((char *) &pdesc.header, sizeof(pdesc.header), 1, ifp);
++      fwrite((char *) &pdesc->header, sizeof(pdesc->header), 1, ifp);
+     } else
+     {
+-      pdesc.flags &= ~PFOR_WRITE;
++      pdesc->flags &= ~PFOR_WRITE;
+-      if (!fread((char *) &pdesc.header, sizeof(pdesc.header), 1, ifp))
++      if (!fread((char *) &pdesc->header, sizeof(pdesc->header), 1, ifp))
+       {
+           fprintf(stderr, "%s: error reading header\n", prefix);
+-          pdesc.header.pih_magic = 0;
++          pdesc->header.pih_magic = 0;
+           fclose(ifp);
+           fclose(dfp);
++          free(pdesc);
+           return ((PWDICT *) 0);
+       }
+-      if (pdesc.header.pih_magic != PIH_MAGIC)
++      if (pdesc->header.pih_magic != PIH_MAGIC)
+       {
+           fprintf(stderr, "%s: magic mismatch\n", prefix);
+-          pdesc.header.pih_magic = 0;
++          pdesc->header.pih_magic = 0;
+           fclose(ifp);
+           fclose(dfp);
++          free(pdesc);
+           return ((PWDICT *) 0);
+       }
+-      if (pdesc.header.pih_blocklen != NUMWORDS)
++      if (pdesc->header.pih_blocklen != NUMWORDS)
+       {
+           fprintf(stderr, "%s: size mismatch\n", prefix);
+-          pdesc.header.pih_magic = 0;
++          pdesc->header.pih_magic = 0;
+           fclose(ifp);
+           fclose(dfp);
++          free(pdesc);
+           return ((PWDICT *) 0);
+       }
+-      if (pdesc.flags & PFOR_USEHWMS)
++      if (pdesc->flags & PFOR_USEHWMS)
+       {
+-          if (fread(pdesc.hwms, 1, sizeof(pdesc.hwms), wfp) != sizeof(pdesc.hwms))
++          if (fread(pdesc->hwms, 1, sizeof(pdesc->hwms), wfp) != sizeof(pdesc->hwms))
+           {
+-              pdesc.flags &= ~PFOR_USEHWMS;
++              pdesc->flags &= ~PFOR_USEHWMS;
+           }
+       }
+     }
+-
+-    return (&pdesc);
++    pdesc->canfree = 1;
++    return (pdesc);
+ }
+ int
+@@ -159,8 +161,13 @@
+     fclose(pwp->ifp);
+     fclose(pwp->dfp);
++    if (pwp->wfp)
++      fclose(pwp->wfp);
+-    pwp->header.pih_magic = 0;
++    if (pwp->canfree)
++      free(pwp);
++    else
++      pwp->header.pih_magic = 0;
+     return (0);
+ }
+@@ -307,6 +314,11 @@
+     register char *this;
+     int idx;
++/*
++ * comment in npasswd-2.0beta4 says this:
++ * This does not work under all circumstances, so don't bother
++ */
++#if 0
+     if (pwp->flags & PFOR_USEHWMS)
+     {
+       idx = string[0] & 0xff;
+@@ -317,6 +329,10 @@
+       lwm = 0;
+       hwm = PW_WORDS(pwp) - 1;
+     }
++#else
++    lwm = 0;
++    hwm = PW_WORDS(pwp);
++#endif
+ #ifdef DEBUG
+     printf("---- %lu, %lu ----\n", lwm, hwm);
+diff -ur orig/cracklib26_small/util/mkdict cracklib26_small/util/mkdict
+--- orig/cracklib26_small/util/mkdict  Fri Jul  9 22:23:03 1993
++++ cracklib26_small/util/mkdict       Sat Apr  4 22:31:45 1998
+@@ -14,9 +14,16 @@
+ SORT="sort"
+ ###SORT="sort -T /tmp"
+-cat $* |
++### Use zcat to read compressed (as well as uncompressed) dictionaries.
++### Compressed dictionaries can save quite a lot of disk space.
++
++CAT="gzip -cdf"
++###CAT="zcat"
++###CAT="cat"
++
++$CAT $* |
+       tr '[A-Z]' '[a-z]' |
+-      tr -cd '[\012a-z0-9]' |
++      tr -cd '\012[a-z][0-9]' |
+       $SORT |
+       uniq |
+       grep -v '^#' |
diff --git a/etc/Makefile.am b/etc/Makefile.am
new file mode 100644 (file)
index 0000000..cc31c60
--- /dev/null
@@ -0,0 +1,24 @@
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+
+sysconf_DATA = login.defs
+
+defaultdir = $(sysconfdir)/default
+default_DATA = \
+       useradd
+
+nonpam_files = \
+       limits \
+       login.access
+
+if !USE_PAM
+nonpamdir = $(sysconfdir)
+nonpam_DATA = $(nonpam_files)
+endif
+
+EXTRA_DIST = \
+       $(nonpam_files) \
+       $(sysconf_DATA) \
+       $(default_DATA)
+
+SUBDIRS = pam.d
diff --git a/etc/Makefile.in b/etc/Makefile.in
new file mode 100644 (file)
index 0000000..dcc5bf8
--- /dev/null
@@ -0,0 +1,605 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = etc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(defaultdir)" "$(DESTDIR)$(nonpamdir)" \
+       "$(DESTDIR)$(sysconfdir)"
+defaultDATA_INSTALL = $(INSTALL_DATA)
+nonpamDATA_INSTALL = $(INSTALL_DATA)
+sysconfDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(default_DATA) $(nonpam_DATA) $(sysconf_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+sysconf_DATA = login.defs
+defaultdir = $(sysconfdir)/default
+default_DATA = \
+       useradd
+
+nonpam_files = \
+       limits \
+       login.access
+
+@USE_PAM_FALSE@nonpamdir = $(sysconfdir)
+@USE_PAM_FALSE@nonpam_DATA = $(nonpam_files)
+EXTRA_DIST = \
+       $(nonpam_files) \
+       $(sysconf_DATA) \
+       $(default_DATA)
+
+SUBDIRS = pam.d
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  etc/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  etc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-defaultDATA: $(default_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(defaultdir)" || $(MKDIR_P) "$(DESTDIR)$(defaultdir)"
+       @list='$(default_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(defaultDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(defaultdir)/$$f'"; \
+         $(defaultDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(defaultdir)/$$f"; \
+       done
+
+uninstall-defaultDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(default_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(defaultdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(defaultdir)/$$f"; \
+       done
+install-nonpamDATA: $(nonpam_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(nonpamdir)" || $(MKDIR_P) "$(DESTDIR)$(nonpamdir)"
+       @list='$(nonpam_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(nonpamDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(nonpamdir)/$$f'"; \
+         $(nonpamDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(nonpamdir)/$$f"; \
+       done
+
+uninstall-nonpamDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nonpam_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(nonpamdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(nonpamdir)/$$f"; \
+       done
+install-sysconfDATA: $(sysconf_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(sysconfdir)"
+       @list='$(sysconf_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(sysconfDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(sysconfdir)/$$f'"; \
+         $(sysconfDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(sysconfdir)/$$f"; \
+       done
+
+uninstall-sysconfDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(sysconf_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(sysconfdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(sysconfdir)/$$f"; \
+       done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(defaultdir)" "$(DESTDIR)$(nonpamdir)" "$(DESTDIR)$(sysconfdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-defaultDATA install-nonpamDATA
+
+install-dvi: install-dvi-recursive
+
+install-exec-am: install-sysconfDATA
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-defaultDATA uninstall-nonpamDATA \
+       uninstall-sysconfDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic clean-libtool \
+       ctags ctags-recursive distclean distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-defaultDATA install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-nonpamDATA \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip install-sysconfDATA installcheck installcheck-am \
+       installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am uninstall-defaultDATA \
+       uninstall-nonpamDATA uninstall-sysconfDATA
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/etc/limits b/etc/limits
new file mode 100644 (file)
index 0000000..d39f2d5
--- /dev/null
@@ -0,0 +1,30 @@
+# /etc/limits contains user resource limits.
+# See limits(5).
+#
+# Format:
+# <username> <limits-string>
+#
+# default entry is '*' for username
+#
+# Valid flags are:
+# A: max address space (KB)
+# C: max core file size (KB)
+# D: max data size (KB)
+# F: maximum filesize (KB)
+# M: max locked-in-memory address space (KB) [only for root on Linux 2.0.x]
+# N: max number of open files
+# R: max resident set size (KB) [no effect on Linux 2.0.x]
+# S: max stack size (KB)
+# T: max CPU time (MIN)
+# U: max number of processes
+# L: max number of logins for this user
+# I: max nice value (0..39 translates to 20..-19)
+# O: max real time priority (0..MAX_RT_PRIO)
+#
+# Examples:
+# the default entry
+#* L2 D6144 R2048 S2048 U32 N32 F16384 T5 C0 I20 O0
+# another way of suspending a user login
+#guest   L0
+# this account has no limits
+#sysadm  -
diff --git a/etc/login.access b/etc/login.access
new file mode 100644 (file)
index 0000000..078e3f8
--- /dev/null
@@ -0,0 +1,54 @@
+# $Id: login.access 1342 2007-11-10 23:46:11Z nekral-guest $
+#
+# Login access control table.
+# 
+# When someone logs in, the table is scanned for the first entry that
+# matches the (user, host) combination, or, in case of non-networked
+# logins, the first entry that matches the (user, tty) combination.  The
+# permissions field of that table entry determines whether the login will 
+# be accepted or refused.
+# 
+# Format of the login access control table is three fields separated by a
+# ":" character:
+# 
+#      permission : users : origins
+# 
+# The first field should be a "+" (access granted) or "-" (access denied)
+# character. 
+#
+# The second field should be a list of one or more login names, group
+# names, or ALL (always matches). A pattern of the form user@host is
+# matched when the login name matches the "user" part, and when the
+# "host" part matches the local machine name.
+#
+# The third field should be a list of one or more tty names (for
+# non-networked logins), host names, domain names (begin with "."), host
+# addresses, internet network numbers (end with "."), ALL (always
+# matches) or LOCAL (matches any string that does not contain a "."
+# character).
+#
+# If you run NIS you can use @netgroupname in host or user patterns; this
+# even works for @usergroup@@hostgroup patterns. Weird.
+#
+# The EXCEPT operator makes it possible to write very compact rules.
+#
+# The group file is searched only when a name does not match that of the
+# logged-in user. Only groups are matched in which users are explicitly
+# listed: the program does not look at a user's primary group id value.
+#
+##############################################################################
+# 
+# Disallow console logins to all but a few accounts.
+#
+#-:ALL EXCEPT wheel shutdown sync:console
+#
+# Disallow non-local logins to privileged accounts (group wheel).
+#
+#-:wheel:ALL EXCEPT LOCAL .win.tue.nl
+#
+# Some accounts are not allowed to login from anywhere:
+#
+#-:wsbscaro wsbsecr wsbspac wsbsym wscosor wstaiwde:ALL
+#
+# All other accounts are allowed to login from anywhere.
+#
diff --git a/etc/login.defs b/etc/login.defs
new file mode 100644 (file)
index 0000000..7007b13
--- /dev/null
@@ -0,0 +1,386 @@
+#
+# /etc/login.defs - Configuration control definitions for the shadow package.
+#
+#      $Id: login.defs 3038 2009-07-23 20:41:35Z nekral-guest $
+#
+
+#
+# Delay in seconds before being allowed another attempt after a login failure
+# Note: When PAM is used, some modules may enfore a minimal delay (e.g.
+#       pam_unix enforces a 2s delay)
+#
+FAIL_DELAY             3
+
+#
+# Enable logging and display of /var/log/faillog login failure info.
+#
+FAILLOG_ENAB           yes
+
+#
+# Enable display of unknown usernames when login failures are recorded.
+#
+LOG_UNKFAIL_ENAB       no
+
+#
+# Enable logging of successful logins
+#
+LOG_OK_LOGINS          no
+
+#
+# Enable logging and display of /var/log/lastlog login time info.
+#
+LASTLOG_ENAB           yes
+
+#
+# Enable checking and display of mailbox status upon login.
+#
+# Disable if the shell startup files already check for mail
+# ("mailx -e" or equivalent).
+#
+MAIL_CHECK_ENAB                yes
+
+#
+# Enable additional checks upon password changes.
+#
+OBSCURE_CHECKS_ENAB    yes
+
+#
+# Enable checking of time restrictions specified in /etc/porttime.
+#
+PORTTIME_CHECKS_ENAB   yes
+
+#
+# Enable setting of ulimit, umask, and niceness from passwd gecos field.
+#
+QUOTAS_ENAB            yes
+
+#
+# Enable "syslog" logging of su activity - in addition to sulog file logging.
+# SYSLOG_SG_ENAB does the same for newgrp and sg.
+#
+SYSLOG_SU_ENAB         yes
+SYSLOG_SG_ENAB         yes
+
+#
+# If defined, either full pathname of a file containing device names or
+# a ":" delimited list of device names.  Root logins will be allowed only
+# upon these devices.
+#
+CONSOLE                /etc/securetty
+#CONSOLE       console:tty01:tty02:tty03:tty04
+
+#
+# If defined, all su activity is logged to this file.
+#
+#SULOG_FILE    /var/log/sulog
+
+#
+# If defined, ":" delimited list of "message of the day" files to
+# be displayed upon login.
+#
+MOTD_FILE      /etc/motd
+#MOTD_FILE     /etc/motd:/usr/lib/news/news-motd
+
+#
+# If defined, this file will be output before each login prompt.
+#
+#ISSUE_FILE    /etc/issue
+
+#
+# If defined, file which maps tty line to TERM environment parameter.
+# Each line of the file is in a format something like "vt100  tty01".
+#
+#TTYTYPE_FILE  /etc/ttytype
+
+#
+# If defined, login failures will be logged here in a utmp format.
+# last, when invoked as lastb, will read /var/log/btmp, so...
+#
+FTMP_FILE      /var/log/btmp
+
+#
+# If defined, name of file whose presence which will inhibit non-root
+# logins.  The contents of this file should be a message indicating
+# why logins are inhibited.
+#
+NOLOGINS_FILE  /etc/nologin
+
+#
+# If defined, the command name to display when running "su -".  For
+# example, if this is defined as "su" then a "ps" will display the
+# command is "-su".  If not defined, then "ps" would display the
+# name of the shell actually being run, e.g. something like "-sh".
+#
+SU_NAME                su
+
+#
+# *REQUIRED*
+#   Directory where mailboxes reside, _or_ name of file, relative to the
+#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
+#
+MAIL_DIR       /var/spool/mail
+#MAIL_FILE     .mail
+
+#
+# If defined, file which inhibits all the usual chatter during the login
+# sequence.  If a full pathname, then hushed mode will be enabled if the
+# user's name or shell are found in the file.  If not a full pathname, then
+# hushed mode will be enabled if the file exists in the user's home directory.
+#
+HUSHLOGIN_FILE .hushlogin
+#HUSHLOGIN_FILE        /etc/hushlogins
+
+#
+# If defined, either a TZ environment parameter spec or the
+# fully-rooted pathname of a file containing such a spec.
+#
+#ENV_TZ                TZ=CST6CDT
+#ENV_TZ                /etc/tzname
+
+#
+# If defined, an HZ environment parameter spec.
+#
+# for Linux/x86
+ENV_HZ         HZ=100
+# For Linux/Alpha...
+#ENV_HZ                HZ=1024
+
+#
+# *REQUIRED*  The default PATH settings, for superuser and normal users.
+#
+# (they are minimal, add the rest in the shell startup files)
+ENV_SUPATH     PATH=/sbin:/bin:/usr/sbin:/usr/bin
+ENV_PATH       PATH=/bin:/usr/bin
+
+#
+# Terminal permissions
+#
+#      TTYGROUP        Login tty will be assigned this group ownership.
+#      TTYPERM         Login tty will be set to this permission.
+#
+# If you have a "write" program which is "setgid" to a special group
+# which owns the terminals, define TTYGROUP to the group number and
+# TTYPERM to 0620.  Otherwise leave TTYGROUP commented out and assign
+# TTYPERM to either 622 or 600.
+#
+TTYGROUP       tty
+TTYPERM                0600
+
+#
+# Login configuration initializations:
+#
+#      ERASECHAR       Terminal ERASE character ('\010' = backspace).
+#      KILLCHAR        Terminal KILL character ('\025' = CTRL/U).
+#      ULIMIT          Default "ulimit" value.
+#
+# The ERASECHAR and KILLCHAR are used only on System V machines.
+# The ULIMIT is used only if the system supports it.
+# (now it works with setrlimit too; ulimit is in 512-byte units)
+#
+# Prefix these values with "0" to get octal, "0x" to get hexadecimal.
+#
+ERASECHAR      0177
+KILLCHAR       025
+#ULIMIT                2097152
+
+# Default initial "umask" value for non-PAM enabled systems.
+# UMASK is also used by useradd and newusers to set the mode of new home
+# directories.
+# 022 is the default value, but 027, or even 077, could be considered
+# better for privacy. There is no One True Answer here: each sysadmin
+# must make up her mind.
+UMASK          022
+
+#
+# Password aging controls:
+#
+#      PASS_MAX_DAYS   Maximum number of days a password may be used.
+#      PASS_MIN_DAYS   Minimum number of days allowed between password changes.
+#      PASS_MIN_LEN    Minimum acceptable password length.
+#      PASS_WARN_AGE   Number of days warning given before a password expires.
+#
+PASS_MAX_DAYS  99999
+PASS_MIN_DAYS  0
+PASS_MIN_LEN   5
+PASS_WARN_AGE  7
+
+#
+# If "yes", the user must be listed as a member of the first gid 0 group
+# in /etc/group (called "root" on most Linux systems) to be able to "su"
+# to uid 0 accounts.  If the group doesn't exist or is empty, no one
+# will be able to "su" to uid 0.
+#
+SU_WHEEL_ONLY  no
+
+#
+# If compiled with cracklib support, where are the dictionaries
+#
+CRACKLIB_DICTPATH      /var/cache/cracklib/cracklib_dict
+
+#
+# Min/max values for automatic uid selection in useradd
+#
+UID_MIN                         1000
+UID_MAX                        60000
+# System accounts
+SYS_UID_MIN              101
+SYS_UID_MAX              999
+
+#
+# Min/max values for automatic gid selection in groupadd
+#
+GID_MIN                         1000
+GID_MAX                        60000
+# System accounts
+SYS_GID_MIN              101
+SYS_GID_MAX              999
+
+#
+# Max number of login retries if password is bad
+#
+LOGIN_RETRIES          5
+
+#
+# Max time in seconds for login
+#
+LOGIN_TIMEOUT          60
+
+#
+# Maximum number of attempts to change password if rejected (too easy)
+#
+PASS_CHANGE_TRIES      5
+
+#
+# Warn about weak passwords (but still allow them) if you are root.
+#
+PASS_ALWAYS_WARN       yes
+
+#
+# Number of significant characters in the password for crypt().
+# Default is 8, don't change unless your crypt() is better.
+# Ignored if MD5_CRYPT_ENAB set to "yes".
+#
+#PASS_MAX_LEN          8
+
+#
+# Require password before chfn/chsh can make any changes.
+#
+CHFN_AUTH              yes
+
+#
+# Which fields may be changed by regular users using chfn - use
+# any combination of letters "frwh" (full name, room number, work
+# phone, home phone).  If not defined, no changes are allowed.
+# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
+# 
+CHFN_RESTRICT          rwh
+
+#
+# Password prompt (%s will be replaced by user name).
+#
+# XXX - it doesn't work correctly yet, for now leave it commented out
+# to use the default which is just "Password: ".
+#LOGIN_STRING          "%s's Password: "
+
+#
+# Only works if compiled with MD5_CRYPT defined:
+# If set to "yes", new passwords will be encrypted using the MD5-based
+# algorithm compatible with the one used by recent releases of FreeBSD.
+# It supports passwords of unlimited length and longer salt strings.
+# Set to "no" if you need to copy encrypted passwords to other systems
+# which don't understand the new algorithm.  Default is "no".
+#
+# Note: If you use PAM, it is recommended to use a value consistent with
+# the PAM modules configuration.
+#
+# This variable is deprecated. You should use ENCRYPT_METHOD.
+#
+#MD5_CRYPT_ENAB        no
+
+#
+# Only works if compiled with ENCRYPTMETHOD_SELECT defined:
+# If set to MD5 , MD5-based algorithm will be used for encrypting password
+# If set to SHA256, SHA256-based algorithm will be used for encrypting password
+# If set to SHA512, SHA512-based algorithm will be used for encrypting password
+# If set to DES, DES-based algorithm will be used for encrypting password (default)
+# Overrides the MD5_CRYPT_ENAB option
+#
+# Note: If you use PAM, it is recommended to use a value consistent with
+# the PAM modules configuration.
+#
+#ENCRYPT_METHOD DES
+
+#
+# Only works if ENCRYPT_METHOD is set to SHA256 or SHA512.
+#
+# Define the number of SHA rounds.
+# With a lot of rounds, it is more difficult to brute forcing the password.
+# But note also that it more CPU resources will be needed to authenticate
+# users.
+#
+# If not specified, the libc will choose the default number of rounds (5000).
+# The values must be inside the 1000-999999999 range.
+# If only one of the MIN or MAX values is set, then this value will be used.
+# If MIN > MAX, the highest value will be used.
+#
+# SHA_CRYPT_MIN_ROUNDS 5000
+# SHA_CRYPT_MAX_ROUNDS 5000
+
+#
+# List of groups to add to the user's supplementary group set
+# when logging in on the console (as determined by the CONSOLE
+# setting).  Default is none.
+#
+# Use with caution - it is possible for users to gain permanent
+# access to these groups, even when not logged in on the console.
+# How to do it is left as an exercise for the reader...
+#
+#CONSOLE_GROUPS                floppy:audio:cdrom
+
+#
+# Should login be allowed if we can't cd to the home directory?
+# Default in no.
+#
+DEFAULT_HOME   yes
+
+#
+# If this file exists and is readable, login environment will be
+# read from it.  Every line should be in the form name=value.
+#
+ENVIRON_FILE   /etc/environment
+
+#
+# If defined, this command is run when removing a user.
+# It should remove any at/cron/print jobs etc. owned by
+# the user to be removed (passed as the first argument).
+#
+#USERDEL_CMD   /usr/sbin/userdel_local
+
+#
+# Enable setting of the umask group bits to be the same as owner bits
+# (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
+# the same as gid, and username is the same as the primary group name.
+#
+# This also enables userdel to remove user groups if no members exist.
+#
+USERGROUPS_ENAB yes
+
+#
+# If set to a non-nul number, the shadow utilities will make sure that
+# groups never have more than this number of users on one line.
+# This permit to support split groups (groups split into multiple lines,
+# with the same group ID, to avoid limitation of the line length in the
+# group file).
+#
+# 0 is the default value and disables this feature.
+#
+#MAX_MEMBERS_PER_GROUP 0
+
+#
+# If useradd should create home directories for users by default (non
+# system users only)
+# This option is overridden with the -M or -m flags on the useradd command
+# line.
+#
+#CREATE_HOME     yes
+
diff --git a/etc/pam.d/Makefile.am b/etc/pam.d/Makefile.am
new file mode 100644 (file)
index 0000000..d967eb9
--- /dev/null
@@ -0,0 +1,32 @@
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+
+pamd_files = \
+       chfn \
+       chsh \
+       groupmems \
+       login \
+       passwd \
+       su
+
+pamd_acct_tools_files = \
+       chage \
+       chgpasswd \
+       chpasswd \
+       groupadd \
+       groupdel \
+       groupmod \
+       newusers \
+       useradd \
+       userdel \
+       usermod
+
+if USE_PAM
+pamddir = $(sysconfdir)/pam.d
+pamd_DATA = $(pamd_files)
+if ACCT_TOOLS_SETUID
+pamd_DATA += $(pamd_acct_tools_files)
+endif
+endif
+
+EXTRA_DIST = $(pamd_files) $(pamd_acct_tools_files)
diff --git a/etc/pam.d/Makefile.in b/etc/pam.d/Makefile.in
new file mode 100644 (file)
index 0000000..843850b
--- /dev/null
@@ -0,0 +1,415 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This is a dummy Makefile.am to get automake work flawlessly,
+# and also cooperate to make a distribution for `make dist'
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@ACCT_TOOLS_SETUID_TRUE@@USE_PAM_TRUE@am__append_1 = $(pamd_acct_tools_files)
+subdir = etc/pam.d
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pamddir)"
+pamdDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(pamd_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+pamd_files = \
+       chfn \
+       chsh \
+       groupmems \
+       login \
+       passwd \
+       su
+
+pamd_acct_tools_files = \
+       chage \
+       chgpasswd \
+       chpasswd \
+       groupadd \
+       groupdel \
+       groupmod \
+       newusers \
+       useradd \
+       userdel \
+       usermod
+
+@USE_PAM_TRUE@pamddir = $(sysconfdir)/pam.d
+@USE_PAM_TRUE@pamd_DATA = $(pamd_files) $(am__append_1)
+EXTRA_DIST = $(pamd_files) $(pamd_acct_tools_files)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  etc/pam.d/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  etc/pam.d/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-pamdDATA: $(pamd_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(pamddir)" || $(MKDIR_P) "$(DESTDIR)$(pamddir)"
+       @list='$(pamd_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(pamdDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pamddir)/$$f'"; \
+         $(pamdDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pamddir)/$$f"; \
+       done
+
+uninstall-pamdDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pamd_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(pamddir)/$$f'"; \
+         rm -f "$(DESTDIR)$(pamddir)/$$f"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(pamddir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pamdDATA
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pamdDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pamdDATA \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       uninstall uninstall-am uninstall-pamdDATA
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/etc/pam.d/chage b/etc/pam.d/chage
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/pam.d/chfn b/etc/pam.d/chfn
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/pam.d/chgpasswd b/etc/pam.d/chgpasswd
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/pam.d/chpasswd b/etc/pam.d/chpasswd
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/pam.d/chsh b/etc/pam.d/chsh
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/pam.d/groupadd b/etc/pam.d/groupadd
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/pam.d/groupdel b/etc/pam.d/groupdel
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/pam.d/groupmems b/etc/pam.d/groupmems
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/pam.d/groupmod b/etc/pam.d/groupmod
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/pam.d/login b/etc/pam.d/login
new file mode 100644 (file)
index 0000000..5a64806
--- /dev/null
@@ -0,0 +1,11 @@
+#%PAM-1.0
+auth           required        pam_securetty.so
+auth           include         system-auth
+account                required        pam_nologin.so
+account                include         system-auth
+password       include         system-auth
+session                required        pam_selinux.so close
+session                include         system-auth
+session                required        pam_loginuid.so
+session                optional        pam_console.so
+session                required        pam_selinux.so open
diff --git a/etc/pam.d/newusers b/etc/pam.d/newusers
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/pam.d/passwd b/etc/pam.d/passwd
new file mode 100644 (file)
index 0000000..731c0d3
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           include         system-auth
+account                include         system-auth
+password       include         system-auth
diff --git a/etc/pam.d/su b/etc/pam.d/su
new file mode 100644 (file)
index 0000000..7ef7134
--- /dev/null
@@ -0,0 +1,13 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+# Uncomment the following line to implicitly trust users in the "wheel" group.
+#auth          sufficient      pam_wheel.so trust use_uid
+# Uncomment the following line to require a user to be in the "wheel" group.
+auth           required        pam_wheel.so use_uid
+auth           include         system-auth
+account                include         system-auth
+password       include         system-auth
+session                required        pam_selinux.so close
+session                include         system-auth
+session                required        pam_selinux.so open multiple
+session                optional        pam_xauth.so
diff --git a/etc/pam.d/useradd b/etc/pam.d/useradd
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/pam.d/userdel b/etc/pam.d/userdel
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/pam.d/usermod b/etc/pam.d/usermod
new file mode 100644 (file)
index 0000000..8f49f5c
--- /dev/null
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth           sufficient      pam_rootok.so
+account                required        pam_permit.so
+password       include         system-auth
diff --git a/etc/useradd b/etc/useradd
new file mode 100644 (file)
index 0000000..b77dd85
--- /dev/null
@@ -0,0 +1,8 @@
+# useradd defaults file
+GROUP=1000
+HOME=/home
+INACTIVE=-1
+EXPIRE=
+SHELL=/bin/bash
+SKEL=/etc/skel
+CREATE_MAIL_SPOOL=yes
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..a5897de
--- /dev/null
@@ -0,0 +1,519 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2006-12-25.00
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""       $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+       shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+       case $mode in
+         *' '* | *'    '* | *'
+'*       | *'*'* | *'?'* | *'['*)
+           echo "$0: invalid mode: $mode" >&2
+           exit 1;;
+       esac
+       shift;;
+
+    -o) chowncmd="$chownprog $2"
+       shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+       shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)        shift
+       break;;
+
+    -*)        echo "$0: invalid option: $1" >&2
+       exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+       echo "$0: $dst_arg: Is a directory" >&2
+       exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+       (dirname "$dst") 2>/dev/null ||
+       expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+            X"$dst" : 'X\(//\)[^/]' \| \
+            X"$dst" : 'X\(//\)$' \| \
+            X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+       echo X"$dst" |
+           sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)[^/].*/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\).*/{
+                  s//\1/
+                  q
+                }
+                s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+       # Create intermediate dirs using mode 755 as modified by the umask.
+       # This is like FreeBSD 'install' as of 1997-10-28.
+       umask=`umask`
+       case $stripcmd.$umask in
+         # Optimize common cases.
+         *[2367][2367]) mkdir_umask=$umask;;
+         .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+         *[0-7])
+           mkdir_umask=`expr $umask + 22 \
+             - $umask % 100 % 40 + $umask % 20 \
+             - $umask % 10 % 4 + $umask % 2
+           `;;
+         *) mkdir_umask=$umask,go-w;;
+       esac
+
+       # With -d, create the new directory with the user-specified mode.
+       # Otherwise, rely on $mkdir_umask.
+       if test -n "$dir_arg"; then
+         mkdir_mode=-m$mode
+       else
+         mkdir_mode=
+       fi
+
+       posix_mkdir=false
+       case $umask in
+         *[123567][0-7][0-7])
+           # POSIX mkdir -p sets u+wx bits regardless of umask, which
+           # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+           ;;
+         *)
+           tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+           trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+           if (umask $mkdir_umask &&
+               exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+           then
+             if test -z "$dir_arg" || {
+                  # Check for POSIX incompatibilities with -m.
+                  # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                  # other-writeable bit of parent directory when it shouldn't.
+                  # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                  ls_ld_tmpdir=`ls -ld "$tmpdir"`
+                  case $ls_ld_tmpdir in
+                    d????-?r-*) different_mode=700;;
+                    d????-?--*) different_mode=755;;
+                    *) false;;
+                  esac &&
+                  $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+                    ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+                    test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                  }
+                }
+             then posix_mkdir=:
+             fi
+             rmdir "$tmpdir/d" "$tmpdir"
+           else
+             # Remove any dirs left behind by ancient mkdir implementations.
+             rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+           fi
+           trap '' 0;;
+       esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+       umask $mkdir_umask &&
+       $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+       /*) prefix='/';;
+       -*) prefix='./';;
+       *)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+       test -z "$d" && continue
+
+       prefix=$prefix$d
+       if test -d "$prefix"; then
+         prefixes=
+       else
+         if $posix_mkdir; then
+           (umask=$mkdir_umask &&
+            $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+           # Don't fail if two instances are running concurrently.
+           test -d "$prefix" || exit 1
+         else
+           case $prefix in
+             *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+             *) qprefix=$prefix;;
+           esac
+           prefixes="$prefixes '$qprefix'"
+         fi
+       fi
+       prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+       # Don't fail if two instances are running concurrently.
+       (umask $mkdir_umask &&
+        eval "\$doit_exec \$mkdirprog $prefixes") ||
+         test -d "$dstdir" || exit 1
+       obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"    2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+       # Now remove or move aside any old file at destination location.
+       # We try this two ways since rm can't unlink itself on some
+       # systems and the destination file might be busy for other
+       # reasons.  In this case, the final cleanup might fail but the new
+       # file should still install successfully.
+       {
+         test ! -f "$dst" ||
+         $doit $rmcmd -f "$dst" 2>/dev/null ||
+         { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+           { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+         } ||
+         { echo "$0: cannot unlink or rename $dst" >&2
+           (exit 1); exit 1
+         }
+       } &&
+
+       # Now rename the file to the real destination.
+       $doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/lib/.indent.pro b/lib/.indent.pro
new file mode 100644 (file)
index 0000000..fe572bb
--- /dev/null
@@ -0,0 +1,5 @@
+-kr
+-i8
+-bad
+-pcs
+-l80
diff --git a/lib/Makefile.am b/lib/Makefile.am
new file mode 100644 (file)
index 0000000..024297e
--- /dev/null
@@ -0,0 +1,59 @@
+
+AUTOMAKE_OPTIONS = 1.0 foreign
+
+DEFS = 
+
+noinst_LTLIBRARIES = libshadow.la
+
+libshadow_la_LDFLAGS = -version-info 0:0:0
+
+libshadow_la_SOURCES = \
+       commonio.c \
+       commonio.h \
+       defines.h \
+       encrypt.c \
+       exitcodes.h \
+       faillog.h \
+       fputsx.c \
+       getdef.c \
+       getdef.h \
+       get_gid.c \
+       getlong.c \
+       get_pid.c \
+       get_uid.c \
+       getulong.c \
+       groupio.c \
+       groupmem.c \
+       groupio.h \
+       gshadow.c \
+       lockpw.c \
+       nscd.c \
+       nscd.h \
+       pam_defs.h \
+       port.c \
+       port.h \
+       prototypes.h \
+       pwauth.c \
+       pwauth.h \
+       pwio.c \
+       pwio.h \
+       pwmem.c \
+       sgetgrent.c \
+       sgetpwent.c \
+       sgetspent.c \
+       sgroupio.c \
+       sgroupio.h\
+       shadow.c \
+       shadowio.c \
+       shadowio.h \
+       shadowmem.c \
+       utent.c
+
+# These files are unneeded for some reason, listed in
+# order of appearance:
+#
+# sources for dbm support (not yet used)
+
+EXTRA_DIST = \
+       .indent.pro \
+       gshadow_.h
diff --git a/lib/Makefile.in b/lib/Makefile.in
new file mode 100644 (file)
index 0000000..fb10325
--- /dev/null
@@ -0,0 +1,552 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = lib
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libshadow_la_LIBADD =
+am_libshadow_la_OBJECTS = commonio.lo encrypt.lo fputsx.lo getdef.lo \
+       get_gid.lo getlong.lo get_pid.lo get_uid.lo getulong.lo \
+       groupio.lo groupmem.lo gshadow.lo lockpw.lo nscd.lo port.lo \
+       pwauth.lo pwio.lo pwmem.lo sgetgrent.lo sgetpwent.lo \
+       sgetspent.lo sgroupio.lo shadow.lo shadowio.lo shadowmem.lo \
+       utent.lo
+libshadow_la_OBJECTS = $(am_libshadow_la_OBJECTS)
+libshadow_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(libshadow_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libshadow_la_SOURCES)
+DIST_SOURCES = $(libshadow_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = 
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = 1.0 foreign
+noinst_LTLIBRARIES = libshadow.la
+libshadow_la_LDFLAGS = -version-info 0:0:0
+libshadow_la_SOURCES = \
+       commonio.c \
+       commonio.h \
+       defines.h \
+       encrypt.c \
+       exitcodes.h \
+       faillog.h \
+       fputsx.c \
+       getdef.c \
+       getdef.h \
+       get_gid.c \
+       getlong.c \
+       get_pid.c \
+       get_uid.c \
+       getulong.c \
+       groupio.c \
+       groupmem.c \
+       groupio.h \
+       gshadow.c \
+       lockpw.c \
+       nscd.c \
+       nscd.h \
+       pam_defs.h \
+       port.c \
+       port.h \
+       prototypes.h \
+       pwauth.c \
+       pwauth.h \
+       pwio.c \
+       pwio.h \
+       pwmem.c \
+       sgetgrent.c \
+       sgetpwent.c \
+       sgetspent.c \
+       sgroupio.c \
+       sgroupio.h\
+       shadow.c \
+       shadowio.c \
+       shadowio.h \
+       shadowmem.c \
+       utent.c
+
+
+# These files are unneeded for some reason, listed in
+# order of appearance:
+#
+# sources for dbm support (not yet used)
+EXTRA_DIST = \
+       .indent.pro \
+       gshadow_.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  lib/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --foreign  lib/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libshadow.la: $(libshadow_la_OBJECTS) $(libshadow_la_DEPENDENCIES) 
+       $(libshadow_la_LINK)  $(libshadow_la_OBJECTS) $(libshadow_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/commonio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encrypt.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fputsx.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get_gid.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get_pid.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get_uid.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdef.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getlong.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getulong.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupmem.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gshadow.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lockpw.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nscd.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/port.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwauth.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwmem.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgetgrent.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgetpwent.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgetspent.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgroupio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shadow.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shadowio.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shadowmem.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utent.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/commonio.c b/lib/commonio.c
new file mode 100644 (file)
index 0000000..52f8ef2
--- /dev/null
@@ -0,0 +1,1145 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2001, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: commonio.c 2892 2009-05-10 13:49:03Z nekral-guest $"
+
+#include "defines.h"
+#include <assert.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <utime.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <stdio.h>
+#include <signal.h>
+#include "nscd.h"
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#endif
+#include "prototypes.h"
+#include "commonio.h"
+
+/* local function prototypes */
+static int lrename (const char *, const char *);
+static int check_link_count (const char *file);
+static int do_lock_file (const char *file, const char *lock);
+static /*@null@*/ /*@dependent@*/FILE *fopen_set_perms (
+       const char *name,
+       const char *mode,
+       const struct stat *sb);
+static int create_backup (const char *, FILE *);
+static void free_linked_list (struct commonio_db *);
+static void add_one_entry (
+       struct commonio_db *db,
+       /*@owned@*/struct commonio_entry *p);
+static bool name_is_nis (const char *name);
+static int write_all (const struct commonio_db *);
+static /*@dependent@*/ /*@null@*/struct commonio_entry *find_entry_by_name (
+       struct commonio_db *,
+       const char *);
+static /*@dependent@*/ /*@null@*/struct commonio_entry *next_entry_by_name (
+       struct commonio_db *,
+       /*@null@*/struct commonio_entry *pos,
+       const char *);
+
+static int lock_count = 0;
+static bool nscd_need_reload = false;
+
+/*
+ * Simple rename(P) alternative that attempts to rename to symlink
+ * target.
+ */
+int lrename (const char *old, const char *new)
+{
+       int res;
+       char *r = NULL;
+
+#if defined(S_ISLNK)
+#ifndef __GLIBC__
+       char resolved_path[PATH_MAX];
+#endif                         /* !__GLIBC__ */
+       struct stat sb;
+       if (lstat (new, &sb) == 0 && S_ISLNK (sb.st_mode)) {
+#ifdef __GLIBC__ /* now a POSIX.1-2008 feature */
+               r = realpath (new, NULL);
+#else                          /* !__GLIBC__ */
+               r = realpath (new, resolved_path);
+#endif                         /* !__GLIBC__ */
+               if (NULL == r) {
+                       perror ("realpath in lrename()");
+               } else {
+                       new = r;
+               }
+       }
+#endif                         /* S_ISLNK */
+
+       res = rename (old, new);
+
+#ifdef __GLIBC__
+       if (NULL != r) {
+               free (r);
+       }
+#endif                         /* __GLIBC__ */
+
+       return res;
+}
+
+static int check_link_count (const char *file)
+{
+       struct stat sb;
+
+       if (stat (file, &sb) != 0) {
+               return 0;
+       }
+
+       if (sb.st_nlink != 2) {
+               return 0;
+       }
+
+       return 1;
+}
+
+
+static int do_lock_file (const char *file, const char *lock)
+{
+       int fd;
+       pid_t pid;
+       ssize_t len;
+       int retval;
+       char buf[32];
+
+       fd = open (file, O_CREAT | O_EXCL | O_WRONLY, 0600);
+       if (-1 == fd) {
+               return 0;
+       }
+
+       pid = getpid ();
+       snprintf (buf, sizeof buf, "%lu", (unsigned long) pid);
+       len = (ssize_t) strlen (buf) + 1;
+       if (write (fd, buf, (size_t) len) != len) {
+               (void) close (fd);
+               unlink (file);
+               return 0;
+       }
+       close (fd);
+
+       if (link (file, lock) == 0) {
+               retval = check_link_count (file);
+               unlink (file);
+               return retval;
+       }
+
+       fd = open (lock, O_RDWR);
+       if (-1 == fd) {
+               unlink (file);
+               errno = EINVAL;
+               return 0;
+       }
+       len = read (fd, buf, sizeof (buf) - 1);
+       close (fd);
+       if (len <= 0) {
+               unlink (file);
+               errno = EINVAL;
+               return 0;
+       }
+       buf[len] = '\0';
+       if (get_pid (buf, &pid) == 0) {
+               unlink (file);
+               errno = EINVAL;
+               return 0;
+       }
+       if (kill (pid, 0) == 0) {
+               unlink (file);
+               errno = EEXIST;
+               return 0;
+       }
+       if (unlink (lock) != 0) {
+               unlink (file);
+               return 0;
+       }
+
+       retval = 0;
+       if ((link (file, lock) == 0) && (check_link_count (file) != 0)) {
+               retval = 1;
+       }
+
+       unlink (file);
+       return retval;
+}
+
+
+static /*@null@*/ /*@dependent@*/FILE *fopen_set_perms (
+       const char *name,
+       const char *mode,
+       const struct stat *sb)
+{
+       FILE *fp;
+       mode_t mask;
+
+       mask = umask (0777);
+       fp = fopen (name, mode);
+       (void) umask (mask);
+       if (NULL == fp) {
+               return NULL;
+       }
+
+#ifdef HAVE_FCHOWN
+       if (fchown (fileno (fp), sb->st_uid, sb->st_gid) != 0) {
+               goto fail;
+       }
+#else
+       if (chown (name, sb->st_mode) != 0) {
+               goto fail;
+       }
+#endif
+
+#ifdef HAVE_FCHMOD
+       if (fchmod (fileno (fp), sb->st_mode & 0664) != 0) {
+               goto fail;
+       }
+#else
+       if (chmod (name, sb->st_mode & 0664) != 0) {
+               goto fail;
+       }
+#endif
+       return fp;
+
+      fail:
+       (void) fclose (fp);
+       /* fopen_set_perms is used for intermediate files */
+       (void) unlink (name);
+       return NULL;
+}
+
+
+static int create_backup (const char *backup, FILE * fp)
+{
+       struct stat sb;
+       struct utimbuf ub;
+       FILE *bkfp;
+       int c;
+       mode_t mask;
+
+       if (fstat (fileno (fp), &sb) != 0) {
+               return -1;
+       }
+
+       mask = umask (077);
+       bkfp = fopen (backup, "w");
+       (void) umask (mask);
+       if (NULL == bkfp) {
+               return -1;
+       }
+
+       /* TODO: faster copy, not one-char-at-a-time.  --marekm */
+       c = 0;
+       if (fseek (fp, 0, SEEK_SET) == 0) {
+               while ((c = getc (fp)) != EOF) {
+                       if (putc (c, bkfp) == EOF) {
+                               break;
+                       }
+               }
+       }
+       if ((c != EOF) || (ferror (fp) != 0) || (fflush (bkfp) != 0)) {
+               (void) fclose (bkfp);
+               /* FIXME: unlink the backup file? */
+               return -1;
+       }
+       if (   (fsync (fileno (bkfp)) != 0)
+           || (fclose (bkfp) != 0)) {
+               /* FIXME: unlink the backup file? */
+               return -1;
+       }
+
+       ub.actime = sb.st_atime;
+       ub.modtime = sb.st_mtime;
+       (void) utime (backup, &ub);
+       return 0;
+}
+
+
+static void free_linked_list (struct commonio_db *db)
+{
+       struct commonio_entry *p;
+
+       while (NULL != db->head) {
+               p = db->head;
+               db->head = p->next;
+
+               if (NULL != p->line) {
+                       free (p->line);
+               }
+
+               if (NULL != p->eptr) {
+                       db->ops->free (p->eptr);
+               }
+
+               free (p);
+       }
+       db->tail = NULL;
+}
+
+
+int commonio_setname (struct commonio_db *db, const char *name)
+{
+       snprintf (db->filename, sizeof (db->filename), "%s", name);
+       return 1;
+}
+
+
+bool commonio_present (const struct commonio_db *db)
+{
+       return (access (db->filename, F_OK) == 0);
+}
+
+
+int commonio_lock_nowait (struct commonio_db *db)
+{
+       char file[1024];
+       char lock[1024];
+
+       if (db->locked) {
+               return 1;
+       }
+
+       snprintf (file, sizeof file, "%s.%lu",
+                 db->filename, (unsigned long) getpid ());
+       snprintf (lock, sizeof lock, "%s.lock", db->filename);
+       if (do_lock_file (file, lock) != 0) {
+               db->locked = true;
+               lock_count++;
+               return 1;
+       }
+       return 0;
+}
+
+
+int commonio_lock (struct commonio_db *db)
+{
+#ifdef HAVE_LCKPWDF
+       /*
+        * only if the system libc has a real lckpwdf() - the one from
+        * lockpw.c calls us and would cause infinite recursion!
+        */
+
+       /*
+        * Call lckpwdf() on the first lock.
+        * If it succeeds, call *_lock() only once
+        * (no retries, it should always succeed).
+        */
+       if (0 == lock_count) {
+               if (lckpwdf () == -1) {
+                       return 0;       /* failure */
+               }
+       }
+
+       if (commonio_lock_nowait (db) != 0) {
+               return 1;       /* success */
+       }
+
+       ulckpwdf ();
+       return 0;               /* failure */
+#else
+       int i;
+
+       /*
+        * lckpwdf() not used - do it the old way.
+        */
+#ifndef LOCK_TRIES
+#define LOCK_TRIES 15
+#endif
+
+#ifndef LOCK_SLEEP
+#define LOCK_SLEEP 1
+#endif
+       for (i = 0; i < LOCK_TRIES; i++) {
+               if (i > 0) {
+                       sleep (LOCK_SLEEP);     /* delay between retries */
+               }
+               if (commonio_lock_nowait (db) != 0) {
+                       return 1;       /* success */
+               }
+               /* no unnecessary retries on "permission denied" errors */
+               if (geteuid () != 0) {
+                       return 0;
+               }
+       }
+       return 0;               /* failure */
+#endif
+}
+
+static void dec_lock_count (void)
+{
+       if (lock_count > 0) {
+               lock_count--;
+               if (lock_count == 0) {
+                       /* Tell nscd when lock count goes to zero,
+                          if any of the files were changed.  */
+                       if (nscd_need_reload) {
+                               nscd_flush_cache ("passwd");
+                               nscd_flush_cache ("group");
+                               nscd_need_reload = false;
+                       }
+#ifdef HAVE_LCKPWDF
+                       ulckpwdf ();
+#endif
+               }
+       }
+}
+
+
+int commonio_unlock (struct commonio_db *db)
+{
+       char lock[1024];
+
+       if (db->isopen) {
+               db->readonly = true;
+               if (commonio_close (db) == 0) {
+                       if (db->locked) {
+                               dec_lock_count ();
+                       }
+                       return 0;
+               }
+       }
+       if (db->locked) {
+               /*
+                * Unlock in reverse order: remove the lock file,
+                * then call ulckpwdf() (if used) on last unlock.
+                */
+               db->locked = false;
+               snprintf (lock, sizeof lock, "%s.lock", db->filename);
+               unlink (lock);
+               dec_lock_count ();
+               return 1;
+       }
+       return 0;
+}
+
+
+/*
+ * Add an entry at the end.
+ *
+ * defines p->next, p->prev
+ * (unfortunately, owned special are not supported)
+ */
+static void add_one_entry (struct commonio_db *db,
+                           /*@owned@*/struct commonio_entry *p)
+{
+       /*@-mustfreeonly@*/
+       p->next = NULL;
+       p->prev = db->tail;
+       /*@=mustfreeonly@*/
+       if (NULL == db->head) {
+               db->head = p;
+       }
+       if (NULL != db->tail) {
+               db->tail->next = p;
+       }
+       db->tail = p;
+}
+
+
+static bool name_is_nis (const char *name)
+{
+       return (('+' == name[0]) || ('-' == name[0]));
+}
+
+
+/*
+ * New entries are inserted before the first NIS entry.  Order is preserved
+ * when db is written out.
+ */
+#ifndef KEEP_NIS_AT_END
+#define KEEP_NIS_AT_END 1
+#endif
+
+#if KEEP_NIS_AT_END
+static void add_one_entry_nis (struct commonio_db *db,
+                               /*@owned@*/struct commonio_entry *newp);
+
+/*
+ * Insert an entry between the regular entries, and the NIS entries.
+ *
+ * defines newp->next, newp->prev
+ * (unfortunately, owned special are not supported)
+ */
+static void add_one_entry_nis (struct commonio_db *db,
+                               /*@owned@*/struct commonio_entry *newp)
+{
+       struct commonio_entry *p;
+
+       for (p = db->head; NULL != p; p = p->next) {
+               if (name_is_nis (p->eptr ? db->ops->getname (p->eptr)
+                                        : p->line)) {
+                       /*@-mustfreeonly@*/
+                       newp->next = p;
+                       newp->prev = p->prev;
+                       /*@=mustfreeonly@*/
+                       if (NULL != p->prev) {
+                               p->prev->next = newp;
+                       } else {
+                               db->head = newp;
+                       }
+                       p->prev = newp;
+                       return;
+               }
+       }
+       add_one_entry (db, newp);
+}
+#endif                         /* KEEP_NIS_AT_END */
+
+/* Initial buffer size, as well as increment if not sufficient
+   (for reading very long lines in group files).  */
+#define BUFLEN 4096
+
+int commonio_open (struct commonio_db *db, int mode)
+{
+       char *buf;
+       char *cp;
+       char *line;
+       struct commonio_entry *p;
+       void *eptr = NULL;
+       int flags = mode;
+       size_t buflen;
+       int saved_errno;
+
+       mode &= ~O_CREAT;
+
+       if (   db->isopen
+           || (   (O_RDONLY != mode)
+               && (O_RDWR != mode))) {
+               errno = EINVAL;
+               return 0;
+       }
+       db->readonly = (mode == O_RDONLY);
+       if (!db->readonly && !db->locked) {
+               errno = EACCES;
+               return 0;
+       }
+
+       db->head = db->tail = NULL;
+       db->cursor = NULL;
+       db->changed = false;
+
+       db->fp = fopen (db->filename, db->readonly ? "r" : "r+");
+
+       /*
+        * If O_CREAT was specified and the file didn't exist, it will be
+        * created by commonio_close().  We have no entries to read yet.  --marekm
+        */
+       if (NULL == db->fp) {
+               if (((flags & O_CREAT) != 0) && (ENOENT == errno)) {
+                       db->isopen = true;
+                       return 1;
+               }
+               return 0;
+       }
+
+       /* Do not inherit fd in spawned processes (e.g. nscd) */
+       fcntl(fileno(db->fp), F_SETFD, FD_CLOEXEC);
+
+#ifdef WITH_SELINUX
+       db->scontext = NULL;
+       if ((is_selinux_enabled () > 0) && (!db->readonly)) {
+               if (fgetfilecon (fileno (db->fp), &db->scontext) < 0) {
+                       goto cleanup_errno;
+               }
+       }
+#endif
+
+       buflen = BUFLEN;
+       buf = (char *) malloc (buflen);
+       if (NULL == buf) {
+               goto cleanup_ENOMEM;
+       }
+
+       while (db->ops->fgets (buf, (int) buflen, db->fp) == buf) {
+               while (   ((cp = strrchr (buf, '\n')) == NULL)
+                      && (feof (db->fp) == 0)) {
+                       size_t len;
+
+                       buflen += BUFLEN;
+                       cp = (char *) realloc (buf, buflen);
+                       if (NULL == cp) {
+                               goto cleanup_buf;
+                       }
+                       buf = cp;
+                       len = strlen (buf);
+                       if (db->ops->fgets (buf + len,
+                                           (int) (buflen - len),
+                                           db->fp) == NULL) {
+                               goto cleanup_buf;
+                       }
+               }
+               cp = strrchr (buf, '\n');
+               if (NULL != cp) {
+                       *cp = '\0';
+               }
+
+               line = strdup (buf);
+               if (NULL == line) {
+                       goto cleanup_buf;
+               }
+
+               if (name_is_nis (line)) {
+                       eptr = NULL;
+               } else {
+                       eptr = db->ops->parse (line);
+                       if (NULL != eptr) {
+                               eptr = db->ops->dup (eptr);
+                               if (NULL == eptr) {
+                                       goto cleanup_line;
+                               }
+                       }
+               }
+
+               p = (struct commonio_entry *) malloc (sizeof *p);
+               if (NULL == p) {
+                       goto cleanup_entry;
+               }
+
+               p->eptr = eptr;
+               p->line = line;
+               p->changed = false;
+
+               add_one_entry (db, p);
+       }
+
+       free (buf);
+
+       if (ferror (db->fp) != 0) {
+               goto cleanup_errno;
+       }
+
+       if ((NULL != db->ops->open_hook) && (db->ops->open_hook () == 0)) {
+               goto cleanup_errno;
+       }
+
+       db->isopen = true;
+       return 1;
+
+      cleanup_entry:
+       if (NULL != eptr) {
+               db->ops->free (eptr);
+       }
+      cleanup_line:
+       free (line);
+      cleanup_buf:
+       free (buf);
+      cleanup_ENOMEM:
+       errno = ENOMEM;
+      cleanup_errno:
+       saved_errno = errno;
+       free_linked_list (db);
+#ifdef WITH_SELINUX
+       if (db->scontext != NULL) {
+               freecon (db->scontext);
+               db->scontext = NULL;
+       }
+#endif
+       fclose (db->fp);
+       db->fp = NULL;
+       errno = saved_errno;
+       return 0;
+}
+
+/*
+ * Sort given db according to cmp function (usually compares uids)
+ */
+int
+commonio_sort (struct commonio_db *db, int (*cmp) (const void *, const void *))
+{
+       struct commonio_entry **entries, *ptr;
+       size_t n = 0, i;
+
+       for (ptr = db->head; NULL != ptr; ptr = ptr->next) {
+               n++;
+       }
+
+       if (n <= 1) {
+               return 0;
+       }
+
+       entries = malloc (n * sizeof (struct commonio_entry *));
+       if (entries == NULL) {
+               return -1;
+       }
+
+       n = 0;
+       for (ptr = db->head; NULL != ptr; ptr = ptr->next) {
+               entries[n++] = ptr;
+       }
+       qsort (entries, n, sizeof (struct commonio_entry *), cmp);
+
+       db->head = entries[0];
+       db->tail = entries[--n];
+       db->head->prev = NULL;
+       db->head->next = entries[1];
+       db->tail->prev = entries[n - 1];
+       db->tail->next = NULL;
+
+       for (i = 1; i < n; i++) {
+               entries[i]->prev = entries[i - 1];
+               entries[i]->next = entries[i + 1];
+       }
+
+       free (entries);
+       db->changed = true;
+
+       return 0;
+}
+
+/*
+ * Sort entries in db according to order in another.
+ */
+int commonio_sort_wrt (struct commonio_db *shadow, struct commonio_db *passwd)
+{
+       struct commonio_entry *head = NULL, *pw_ptr, *spw_ptr;
+       const char *name;
+
+       if ((NULL == shadow) || (NULL == shadow->head)) {
+               return 0;
+       }
+
+       for (pw_ptr = passwd->head; NULL != pw_ptr; pw_ptr = pw_ptr->next) {
+               if (NULL == pw_ptr->eptr) {
+                       continue;
+               }
+               name = passwd->ops->getname (pw_ptr->eptr);
+               for (spw_ptr = shadow->head;
+                    NULL != spw_ptr;
+                    spw_ptr = spw_ptr->next) {
+                       if (NULL == spw_ptr->eptr) {
+                               continue;
+                       }
+                       if (strcmp (name, shadow->ops->getname (spw_ptr->eptr))
+                           == 0) {
+                               break;
+                       }
+               }
+               if (NULL == spw_ptr) {
+                       continue;
+               }
+               commonio_del_entry (shadow, spw_ptr);
+               spw_ptr->next = head;
+               head = spw_ptr;
+       }
+
+       for (spw_ptr = head; NULL != spw_ptr; spw_ptr = head) {
+               head = head->next;
+
+               if (NULL != shadow->head) {
+                       shadow->head->prev = spw_ptr;
+               }
+               spw_ptr->next = shadow->head;
+               shadow->head = spw_ptr;
+       }
+
+       shadow->head->prev = NULL;
+       shadow->changed = true;
+
+       return 0;
+}
+
+/*
+ * write_all - Write the database to its file.
+ *
+ * It returns 0 if all the entries could be written correctly.
+ */
+static int write_all (const struct commonio_db *db)
+       /*@requires notnull db->fp@*/
+{
+       const struct commonio_entry *p;
+       void *eptr;
+
+       for (p = db->head; NULL != p; p = p->next) {
+               if (p->changed) {
+                       eptr = p->eptr;
+                       assert (NULL != eptr);
+                       if (db->ops->put (eptr, db->fp) != 0) {
+                               return -1;
+                       }
+               } else if (NULL != p->line) {
+                       if (db->ops->fputs (p->line, db->fp) == EOF) {
+                               return -1;
+                       }
+                       if (putc ('\n', db->fp) == EOF) {
+                               return -1;
+                       }
+               }
+       }
+       return 0;
+}
+
+
+int commonio_close (struct commonio_db *db)
+       /*@requires notnull db->fp@*/
+{
+       char buf[1024];
+       int errors = 0;
+       struct stat sb;
+
+#ifdef WITH_SELINUX
+       /*@null@*/security_context_t old_context = NULL;
+#endif
+
+       if (!db->isopen) {
+               errno = EINVAL;
+               return 0;
+       }
+       db->isopen = false;
+
+       if (!db->changed || db->readonly) {
+               fclose (db->fp);
+               db->fp = NULL;
+               goto success;
+       }
+
+       if ((NULL != db->ops->close_hook) && (db->ops->close_hook () == 0)) {
+               goto fail;
+       }
+
+       memzero (&sb, sizeof sb);
+       if (NULL != db->fp) {
+               if (fstat (fileno (db->fp), &sb) != 0) {
+                       fclose (db->fp);
+                       db->fp = NULL;
+                       goto fail;
+               }
+#ifdef WITH_SELINUX
+               if (db->scontext != NULL) {
+                       if (getfscreatecon (&old_context) < 0) {
+                               errors++;
+                               goto fail;
+                       }
+                       if (setfscreatecon (db->scontext) < 0) {
+                               errors++;
+                               goto fail;
+                       }
+               }
+#endif
+               /*
+                * Create backup file.
+                */
+               snprintf (buf, sizeof buf, "%s-", db->filename);
+
+               if (create_backup (buf, db->fp) != 0) {
+                       errors++;
+               }
+
+               if (fclose (db->fp) != 0) {
+                       errors++;
+               }
+
+               if (errors != 0) {
+                       db->fp = NULL;
+                       goto fail;
+               }
+       } else {
+               /*
+                * Default permissions for new [g]shadow files.
+                * (passwd and group always exist...)
+                */
+               sb.st_mode = 0400;
+               sb.st_uid = 0;
+               sb.st_gid = 0;
+       }
+
+       snprintf (buf, sizeof buf, "%s+", db->filename);
+
+       db->fp = fopen_set_perms (buf, "w", &sb);
+       if (NULL == db->fp) {
+               goto fail;
+       }
+
+       if (write_all (db) != 0) {
+               errors++;
+       }
+
+       if (fflush (db->fp) != 0) {
+               errors++;
+       }
+#ifdef HAVE_FSYNC
+       if (fsync (fileno (db->fp)) != 0) {
+               errors++;
+       }
+#else
+       sync ();
+#endif
+       if (fclose (db->fp) != 0) {
+               errors++;
+       }
+
+       db->fp = NULL;
+
+       if (errors != 0) {
+               unlink (buf);
+               goto fail;
+       }
+
+       if (lrename (buf, db->filename) != 0) {
+               goto fail;
+       }
+
+       nscd_need_reload = true;
+       goto success;
+      fail:
+       errors++;
+      success:
+
+#ifdef WITH_SELINUX
+       if (db->scontext != NULL) {
+               if (NULL != old_context) {
+               if (setfscreatecon (old_context) < 0) {
+                       errors++;
+               }
+                       freecon (old_context);
+                       old_context = NULL;
+               }
+               freecon (db->scontext);
+               db->scontext = NULL;
+       }
+#endif
+       free_linked_list (db);
+       return errors == 0;
+}
+
+static /*@dependent@*/ /*@null@*/struct commonio_entry *next_entry_by_name (
+       struct commonio_db *db,
+       /*@null@*/struct commonio_entry *pos,
+       const char *name)
+{
+       struct commonio_entry *p;
+       void *ep;
+
+       if (NULL == pos) {
+               return NULL;
+       }
+
+       for (p = pos; NULL != p; p = p->next) {
+               ep = p->eptr;
+               if (   (NULL != ep)
+                   && (strcmp (db->ops->getname (ep), name) == 0)) {
+                       break;
+               }
+       }
+       return p;
+}
+
+static /*@dependent@*/ /*@null@*/struct commonio_entry *find_entry_by_name (
+       struct commonio_db *db,
+       const char *name)
+{
+       return next_entry_by_name(db, db->head, name);
+}
+
+
+int commonio_update (struct commonio_db *db, const void *eptr)
+{
+       struct commonio_entry *p;
+       void *nentry;
+
+       if (!db->isopen || db->readonly) {
+               errno = EINVAL;
+               return 0;
+       }
+       nentry = db->ops->dup (eptr);
+       if (NULL == nentry) {
+               errno = ENOMEM;
+               return 0;
+       }
+       p = find_entry_by_name (db, db->ops->getname (eptr));
+       if (NULL != p) {
+               if (next_entry_by_name (db, p->next, db->ops->getname (eptr)) != NULL) {
+                       fprintf (stderr, _("Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"), db->ops->getname (eptr), db->filename);
+                       return 0;
+               }
+               db->ops->free (p->eptr);
+               p->eptr = nentry;
+               p->changed = true;
+               db->cursor = p;
+
+               db->changed = true;
+               return 1;
+       }
+       /* not found, new entry */
+       p = (struct commonio_entry *) malloc (sizeof *p);
+       if (NULL == p) {
+               db->ops->free (nentry);
+               errno = ENOMEM;
+               return 0;
+       }
+
+       p->eptr = nentry;
+       p->line = NULL;
+       p->changed = true;
+
+#if KEEP_NIS_AT_END
+       add_one_entry_nis (db, p);
+#else
+       add_one_entry (db, p);
+#endif
+
+       db->changed = true;
+       return 1;
+}
+
+
+void commonio_del_entry (struct commonio_db *db, const struct commonio_entry *p)
+{
+       if (p == db->cursor) {
+               db->cursor = p->next;
+       }
+
+       if (NULL != p->prev) {
+               p->prev->next = p->next;
+       } else {
+               db->head = p->next;
+       }
+
+       if (NULL != p->next) {
+               p->next->prev = p->prev;
+       } else {
+               db->tail = p->prev;
+       }
+
+       db->changed = true;
+}
+
+/*
+ * commonio_remove - Remove the entry of the given name from the database.
+ */
+int commonio_remove (struct commonio_db *db, const char *name)
+{
+       struct commonio_entry *p;
+
+       if (!db->isopen || db->readonly) {
+               errno = EINVAL;
+               return 0;
+       }
+       p = find_entry_by_name (db, name);
+       if (NULL == p) {
+               errno = ENOENT;
+               return 0;
+       }
+       if (next_entry_by_name (db, p->next, name) != NULL) {
+               fprintf (stderr, _("Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"), name, db->filename);
+               return 0;
+       }
+
+       commonio_del_entry (db, p);
+
+       if (NULL != p->line) {
+               free (p->line);
+       }
+
+       if (NULL != p->eptr) {
+               db->ops->free (p->eptr);
+       }
+
+       return 1;
+}
+
+/*
+ * commonio_locate - Find the first entry with the specified name in
+ *                   the database.
+ *
+ *     If found, it returns the entry and set the cursor of the database to
+ *     that entry.
+ *
+ *     Otherwise, it returns NULL.
+ */
+/*@observer@*/ /*@null@*/const void *commonio_locate (struct commonio_db *db, const char *name)
+{
+       struct commonio_entry *p;
+
+       if (!db->isopen) {
+               errno = EINVAL;
+               return NULL;
+       }
+       p = find_entry_by_name (db, name);
+       if (NULL == p) {
+               errno = ENOENT;
+               return NULL;
+       }
+       db->cursor = p;
+       return p->eptr;
+}
+
+/*
+ * commonio_rewind - Restore the database cursor to the first entry.
+ *
+ * It returns 0 on error, 1 on success.
+ */
+int commonio_rewind (struct commonio_db *db)
+{
+       if (!db->isopen) {
+               errno = EINVAL;
+               return 0;
+       }
+       db->cursor = NULL;
+       return 1;
+}
+
+/*
+ * commonio_next - Return the next entry of the specified database
+ *
+ * It returns the next entry, or NULL if no other entries could be found.
+ */
+/*@observer@*/ /*@null@*/const void *commonio_next (struct commonio_db *db)
+{
+       void *eptr;
+
+       if (!db->isopen) {
+               errno = EINVAL;
+               return 0;
+       }
+       if (NULL == db->cursor) {
+               db->cursor = db->head;
+       } else {
+               db->cursor = db->cursor->next;
+       }
+
+       while (NULL != db->cursor) {
+               eptr = db->cursor->eptr;
+               if (NULL != eptr) {
+                       return eptr;
+               }
+
+               db->cursor = db->cursor->next;
+       }
+       return NULL;
+}
+
diff --git a/lib/commonio.h b/lib/commonio.h
new file mode 100644 (file)
index 0000000..30ae695
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id: commonio.h 2806 2009-04-25 14:16:22Z nekral-guest $ */
+#ifndef _COMMONIO_H
+#define _COMMONIO_H
+
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#endif
+
+#include "defines.h" /* bool */
+
+/*
+ * Linked list entry.
+ */
+struct commonio_entry {
+       /*@null@*/char *line;
+       /*@null@*/void *eptr;           /* struct passwd, struct spwd, ... */
+       /*@dependent@*/ /*@null@*/struct commonio_entry *prev;
+       /*@owned@*/ /*@null@*/struct commonio_entry *next;
+       bool changed:1;
+};
+
+/*
+ * Operations depending on database type: passwd, group, shadow etc.
+ */
+struct commonio_ops {
+       /*
+        * Make a copy of the object (for example, struct passwd)
+        * and all strings pointed by it, in malloced memory.
+        */
+       /*@null@*/ /*@only@*/void *(*dup) (const void *);
+
+       /*
+        * free() the object including any strings pointed by it.
+        */
+       void (*free) (/*@out@*/ /*@only@*/void *);
+
+       /*
+        * Return the name of the object (for example, pw_name
+        * for struct passwd).
+        */
+       const char *(*getname) (const void *);
+
+       /*
+        * Parse a string, return object (in static area -
+        * should be copied using the dup operation above).
+        */
+       void *(*parse) (const char *);
+
+       /*
+        * Write the object to the file (this calls putpwent()
+        * for struct passwd, for example).
+        */
+       int (*put) (const void *, FILE *);
+
+       /*
+        * fgets and fputs (can be replaced by versions that
+        * understand line continuation conventions).
+        */
+       /*@null@*/char *(*fgets) (/*@returned@*/ /*@out@*/char *s, int n, FILE *stream);
+       int (*fputs) (const char *, FILE *);
+
+       /*
+        * open_hook and close_hook.
+        * If non NULL, these functions will be called after the database
+        * is open or before it is closed.
+        * They return 0 on failure and 1 on success.
+        */
+       /*@null@*/int (*open_hook) (void);
+       /*@null@*/int (*close_hook) (void);
+};
+
+/*
+ * Database structure.
+ */
+struct commonio_db {
+       /*
+        * Name of the data file.
+        */
+       char filename[1024];
+
+       /*
+        * Operations from above.
+        */
+       /*@observer@*/const struct commonio_ops *ops;
+
+       /*
+        * Currently open file stream.
+        */
+       /*@dependent@*/ /*@null@*/FILE *fp;
+
+#ifdef WITH_SELINUX
+       /*@null@*/security_context_t scontext;
+#endif
+       /*
+        * Head, tail, current position in linked list.
+        */
+       /*@owned@*/ /*@null@*/struct commonio_entry *head, *tail;
+       /*@dependent@*/ /*@null@*/struct commonio_entry *cursor;
+
+       /*
+        * Various flags.
+        */
+       bool changed:1;
+       bool isopen:1;
+       bool locked:1;
+       bool readonly:1;
+};
+
+extern int commonio_setname (struct commonio_db *, const char *);
+extern bool commonio_present (const struct commonio_db *db);
+extern int commonio_lock (struct commonio_db *);
+extern int commonio_lock_nowait (struct commonio_db *);
+extern int commonio_open (struct commonio_db *, int);
+extern /*@observer@*/ /*@null@*/const void *commonio_locate (struct commonio_db *, const char *);
+extern int commonio_update (struct commonio_db *, const void *);
+extern int commonio_remove (struct commonio_db *, const char *);
+extern int commonio_rewind (struct commonio_db *);
+extern /*@observer@*/ /*@null@*/const void *commonio_next (struct commonio_db *);
+extern int commonio_close (struct commonio_db *);
+extern int commonio_unlock (struct commonio_db *);
+extern void commonio_del_entry (struct commonio_db *,
+                               const struct commonio_entry *);
+extern int commonio_sort_wrt (struct commonio_db *shadow,
+                             struct commonio_db *passwd);
+extern int commonio_sort (struct commonio_db *db,
+                         int (*cmp) (const void *, const void *));
+
+#endif
diff --git a/lib/defines.h b/lib/defines.h
new file mode 100644 (file)
index 0000000..0c94fd3
--- /dev/null
@@ -0,0 +1,385 @@
+/* $Id: defines.h 2844 2009-04-28 21:01:20Z nekral-guest $ */
+/* some useful defines */
+
+#ifndef _DEFINES_H_
+#define _DEFINES_H_
+
+#if HAVE_STDBOOL_H
+# include <stdbool.h>
+#else
+# if ! HAVE__BOOL
+#  ifdef __cplusplus
+typedef bool _Bool;
+#  else
+typedef unsigned char _Bool;
+#  endif
+# endif
+# define bool _Bool
+# define false (0)
+# define true  (1)
+# define __bool_true_false_are_defined 1
+#endif
+
+#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
+
+/* Take care of NLS matters.  */
+#ifdef S_SPLINT_S
+extern char *setlocale(int categorie, const char *locale);
+# define LC_ALL                (6)
+extern char * bindtextdomain (const char * domainname, const char * dirname);
+extern char * textdomain (const char * domainname);
+# define _(Text) Text
+# define ngettext(Msgid1, Msgid2, N) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+#else
+#ifdef HAVE_LOCALE_H
+# include <locale.h>
+#else
+# undef setlocale
+# define setlocale(category, locale)   (NULL)
+# ifndef LC_ALL
+#  define LC_ALL       6
+# endif
+#endif
+
+#define gettext_noop(String) (String)
+/* #define gettext_def(String) "#define String" */
+
+#ifdef ENABLE_NLS
+# include <libintl.h>
+# define _(Text) gettext (Text)
+#else
+# undef bindtextdomain
+# define bindtextdomain(Domain, Directory)     (NULL)
+# undef textdomain
+# define textdomain(Domain)    (NULL)
+# define _(Text) Text
+# define ngettext(Msgid1, Msgid2, N) \
+    ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+#endif
+#endif
+
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else                          /* not STDC_HEADERS */
+# ifndef HAVE_STRCHR
+#  define strchr index
+#  define strrchr rindex
+# endif
+char *strchr (), *strrchr (), *strtok ();
+
+# ifndef HAVE_MEMCPY
+#  define memcpy(d, s, n) bcopy((s), (d), (n))
+# endif
+#endif                         /* not STDC_HEADERS */
+
+#if HAVE_ERRNO_H
+# include <errno.h>
+#endif
+
+#include <sys/stat.h>
+#include <sys/types.h>
+#if HAVE_SYS_WAIT_H
+# include <sys/wait.h>
+#endif
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else                          /* not TIME_WITH_SYS_TIME */
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif                         /* not TIME_WITH_SYS_TIME */
+
+#ifdef HAVE_MEMSET
+# define memzero(ptr, size) memset((void *)(ptr), 0, (size))
+#else
+# define memzero(ptr, size) bzero((char *)(ptr), (size))
+#endif
+#define strzero(s) memzero(s, strlen(s))       /* warning: evaluates twice */
+
+#ifdef HAVE_DIRENT_H           /* DIR_SYSV */
+# include <dirent.h>
+# define DIRECT dirent
+#else
+# ifdef HAVE_SYS_NDIR_H                /* DIR_XENIX */
+#  include <sys/ndir.h>
+# endif
+# ifdef HAVE_SYS_DIR_H         /* DIR_??? */
+#  include <sys/dir.h>
+# endif
+# ifdef HAVE_NDIR_H            /* DIR_BSD */
+#  include <ndir.h>
+# endif
+# define DIRECT direct
+#endif
+
+/*
+ * Possible cases:
+ * - /usr/include/shadow.h exists and includes the shadow group stuff.
+ * - /usr/include/shadow.h exists, but we use our own gshadow.h.
+ */
+#include <shadow.h>
+#if defined(SHADOWGRP) && !defined(GSHADOW)
+#include "gshadow_.h"
+#endif
+
+#include <limits.h>
+
+#ifndef        NGROUPS_MAX
+#ifdef NGROUPS
+#define        NGROUPS_MAX     NGROUPS
+#else
+#define        NGROUPS_MAX     64
+#endif
+#endif
+
+#ifdef USE_SYSLOG
+#include <syslog.h>
+
+#ifndef LOG_WARN
+#define LOG_WARN LOG_WARNING
+#endif
+
+/* LOG_NOWAIT is deprecated */
+#ifndef LOG_NOWAIT
+#define LOG_NOWAIT 0
+#endif
+
+/* LOG_AUTH is deprecated, use LOG_AUTHPRIV instead */
+#ifndef LOG_AUTHPRIV
+#define LOG_AUTHPRIV LOG_AUTH
+#endif
+
+/* cleaner than lots of #ifdefs everywhere - use this as follows:
+   SYSLOG((LOG_CRIT, "user %s cracked root", user)); */
+#ifdef ENABLE_NLS
+/* Temporarily set LC_TIME to "C" to avoid strange dates in syslog.
+   This is a workaround for a more general syslog(d) design problem -
+   syslogd should log the current system time for each event, and not
+   trust the formatted time received from the unix domain (or worse,
+   UDP) socket.  -MM */
+/* Avoid translated PAM error messages: Set LC_ALL to "C".
+ * --Nekral */
+#define SYSLOG(x)                                                      \
+       do {                                                            \
+               char *old_locale = setlocale(LC_ALL, NULL);             \
+               char *saved_locale = NULL;                              \
+               if (NULL != old_locale) {                               \
+                       saved_locale = strdup (old_locale);             \
+               }                                                       \
+               if (NULL != saved_locale) {                             \
+                       (void) setlocale (LC_ALL, "C");                 \
+               }                                                       \
+               syslog x ;                                              \
+               if (NULL != saved_locale) {                             \
+                       (void) setlocale (LC_ALL, saved_locale);        \
+                       free (saved_locale);                            \
+               }                                                       \
+       } while (false)
+#else                          /* !ENABLE_NLS */
+#define SYSLOG(x) syslog x
+#endif                         /* !ENABLE_NLS */
+
+#else                          /* !USE_SYSLOG */
+
+#define SYSLOG(x)              /* empty */
+#define openlog(a,b,c)         /* empty */
+#define closelog()             /* empty */
+
+#endif                         /* !USE_SYSLOG */
+
+/* The default syslog settings can now be changed here,
+   in just one place.  */
+
+#ifndef SYSLOG_OPTIONS
+/* #define SYSLOG_OPTIONS (LOG_PID | LOG_CONS | LOG_NOWAIT) */
+#define SYSLOG_OPTIONS (LOG_PID)
+#endif
+
+#ifndef SYSLOG_FACILITY
+#define SYSLOG_FACILITY LOG_AUTHPRIV
+#endif
+
+#define OPENLOG(progname) openlog(progname, SYSLOG_OPTIONS, SYSLOG_FACILITY)
+
+#ifndef F_OK
+# define F_OK 0
+# define X_OK 1
+# define W_OK 2
+# define R_OK 4
+#endif
+
+#ifndef SEEK_SET
+# define SEEK_SET 0
+# define SEEK_CUR 1
+# define SEEK_END 2
+#endif
+
+#ifdef STAT_MACROS_BROKEN
+# define S_ISDIR(x) ((x) & S_IFMT) == S_IFDIR)
+# define S_ISREG(x) ((x) & S_IFMT) == S_IFREG)
+# ifdef S_IFLNK
+#  define S_ISLNK(x) ((x) & S_IFMT) == S_IFLNK)
+# endif
+#endif
+
+#ifndef S_ISLNK
+#define S_ISLNK(x) (0)
+#endif
+
+#if HAVE_LCHOWN
+#define LCHOWN lchown
+#else
+#define LCHOWN chown
+#endif
+
+#if HAVE_LSTAT
+#define LSTAT lstat
+#else
+#define LSTAT stat
+#endif
+
+#if HAVE_TERMIOS_H
+# include <termios.h>
+# define STTY(fd, termio) tcsetattr(fd, TCSANOW, termio)
+# define GTTY(fd, termio) tcgetattr(fd, termio)
+# define TERMIO struct termios
+# define USE_TERMIOS
+#else                          /* assumed HAVE_TERMIO_H */
+# include <sys/ioctl.h>
+# include <termio.h>
+# define STTY(fd, termio) ioctl(fd, TCSETA, termio)
+# define GTTY(fd, termio) ioctl(fd, TCGETA, termio)
+# define TEMRIO struct termio
+# define USE_TERMIO
+#endif
+
+/*
+ * Password aging constants
+ *
+ * DAY - seconds / day
+ * WEEK - seconds / week
+ * SCALE - seconds / aging unit
+ */
+
+/* Solaris defines this in shadow.h */
+#ifndef DAY
+#define DAY (24L*3600L)
+#endif
+
+#define WEEK (7*DAY)
+
+#ifdef ITI_AGING
+#define SCALE 1
+#else
+#define SCALE DAY
+#endif
+
+/* Copy string pointed by B to array A with size checking.  It was originally
+   in lmain.c but is _very_ useful elsewhere.  Some setuid root programs with
+   very sloppy coding used to assume that BUFSIZ will always be enough...  */
+
+                                       /* danger - side effects */
+#define STRFCPY(A,B) \
+       (strncpy((A), (B), sizeof(A) - 1), (A)[sizeof(A) - 1] = '\0')
+
+#ifndef PASSWD_FILE
+#define PASSWD_FILE "/etc/passwd"
+#endif
+
+#ifndef GROUP_FILE
+#define GROUP_FILE "/etc/group"
+#endif
+
+#ifndef SHADOW_FILE
+#define SHADOW_FILE "/etc/shadow"
+#endif
+
+#ifdef SHADOWGRP
+#ifndef SGROUP_FILE
+#define SGROUP_FILE "/etc/gshadow"
+#endif
+#endif
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#ifdef sun                     /* hacks for compiling on SunOS */
+# ifndef SOLARIS
+extern int fputs ();
+extern char *strdup ();
+extern char *strerror ();
+# endif
+#endif
+
+/*
+ * string to use for the pw_passwd field in /etc/passwd when using
+ * shadow passwords - most systems use "x" but there are a few
+ * exceptions, so it can be changed here if necessary.  --marekm
+ */
+#ifndef SHADOW_PASSWD_STRING
+#define SHADOW_PASSWD_STRING "x"
+#endif
+
+#define SHADOW_SP_FLAG_UNSET ((unsigned long int)-1)
+
+#ifdef WITH_AUDIT
+#ifdef __u8                    /* in case we use pam < 0.80 */
+#undef __u8
+#endif
+#ifdef __u32
+#undef __u32
+#endif
+
+#include <libaudit.h>
+#endif
+
+/* To be used for verified unused parameters */
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+# define unused __attribute__((unused))
+#else
+# define unused
+#endif
+
+/* ! Arguments evaluated twice ! */
+#ifndef MIN
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+#ifndef MAX
+#define MAX(x,y) (((x) > (y)) ? (x) : (y))
+#endif
+
+/* Maximum length of usernames */
+#ifdef HAVE_UTMPX_H
+# include <utmpx.h>
+# define USER_NAME_MAX_LENGTH (sizeof (((struct utmpx *)NULL)->ut_user))
+#else
+# include <utmp.h>
+# ifdef HAVE_STRUCT_UTMP_UT_USER
+#  define USER_NAME_MAX_LENGTH (sizeof (((struct utmp *)NULL)->ut_user))
+# else
+#  ifdef HAVE_STRUCT_UTMP_UT_NAME
+#   define USER_NAME_MAX_LENGTH (sizeof (((struct utmp *)NULL)->ut_name))
+#  else
+#   define USER_NAME_MAX_LENGTH 32
+#  endif
+# endif
+#endif
+
+#endif                         /* _DEFINES_H_ */
diff --git a/lib/encrypt.c b/lib/encrypt.c
new file mode 100644 (file)
index 0000000..1691657
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 1990 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: encrypt.c 2849 2009-04-30 21:08:49Z nekral-guest $"
+
+#include <unistd.h>
+#include <stdio.h>
+
+#include "prototypes.h"
+#include "defines.h"
+
+char *pw_encrypt (const char *clear, const char *salt)
+{
+       static char cipher[128];
+       char *cp;
+
+       cp = crypt (clear, salt);
+       if (!cp) {
+               /*
+                * Single Unix Spec: crypt() may return a null pointer,
+                * and set errno to indicate an error.  The caller doesn't
+                * expect us to return NULL, so...
+                */
+               perror ("crypt");
+               exit (EXIT_FAILURE);
+       }
+
+       /* The GNU crypt does not return NULL if the algorithm is not
+        * supported, and return a DES encrypted password. */
+       if ((NULL != salt) && (salt[0] == '$') && (strlen (cp) <= 13))
+       {
+               const char *method;
+               switch (salt[1])
+               {
+                       case '1':
+                               method = "MD5";
+                               break;
+                       case '5':
+                               method = "SHA256";
+                               break;
+                       case '6':
+                               method = "SHA512";
+                               break;
+                       default:
+                       {
+                               static char nummethod[4] = "$x$";
+                               nummethod[1] = salt[1];
+                               method = &nummethod[0];
+                       }
+               }
+               fprintf (stderr,
+                        _("crypt method not supported by libcrypt? (%s)\n"),
+                         method);
+               exit (EXIT_FAILURE);
+       }
+
+       if (strlen (cp) != 13) {
+               return cp;      /* nonstandard crypt() in libc, better bail out */
+       }
+
+       strcpy (cipher, cp);
+
+       return cipher;
+}
+
diff --git a/lib/exitcodes.h b/lib/exitcodes.h
new file mode 100644 (file)
index 0000000..10a7ed3
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2005 - 2006, Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id: exitcodes.h 2849 2009-04-30 21:08:49Z nekral-guest $ */
+
+/*
+ * Exit codes used by shadow programs
+ */
+#define E_SUCCESS              EXIT_SUCCESS    /* success */
+/*
+ * FIXME: other values should differ from EXIT_FAILURE (and EXIT_SUCCESS).
+ *
+ * FIXME: reserve EXIT_FAILURE for internal failures.
+ */
+#define E_NOPERM               1       /* permission denied */
+#define E_USAGE                2       /* invalid command syntax */
+#define E_BAD_ARG              3       /* invalid argument to option */
+#define E_PASSWD_NOTFOUND      14      /* not found password file */
+#define E_SHADOW_NOTFOUND      15      /* not found shadow password file */
+#define E_GROUP_NOTFOUND       16      /* not found group file */
+#define E_GSHADOW_NOTFOUND     17      /* not found shadow group file */
+#define E_CMD_NOEXEC           126     /* can't run command/shell */
+#define E_CMD_NOTFOUND         127     /* can't find command/shell to run */
diff --git a/lib/faillog.h b/lib/faillog.h
new file mode 100644 (file)
index 0000000..f232eb8
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * faillog.h - login failure logging file format
+ *
+ *     $Id: faillog.h 1980 2008-04-27 00:40:09Z nekral-guest $
+ *
+ * The login failure file is maintained by login(1) and faillog(8)
+ * Each record in the file represents a separate UID and the file
+ * is indexed in that fashion.
+ */
+
+#ifndef _FAILLOG_H
+#define _FAILLOG_H
+
+struct faillog {
+       short fail_cnt;         /* failures since last success */
+       short fail_max;         /* failures before turning account off */
+       char fail_line[12];     /* last failure occured here */
+       time_t fail_time;       /* last failure occured then */
+       /*
+        * If nonzero, the account will be re-enabled if there are no
+        * failures for fail_locktime seconds since last failure.
+        */
+       long fail_locktime;
+};
+
+#endif
diff --git a/lib/fputsx.c b/lib/fputsx.c
new file mode 100644 (file)
index 0000000..c162bc1
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include "defines.h"
+#include "prototypes.h"
+
+#ident "$Id: fputsx.c 3021 2009-06-12 20:20:45Z nekral-guest $"
+
+
+/*@null@*/char *fgetsx (/*@returned@*/ /*@out@*/char *buf, int cnt, FILE * f)
+{
+       char *cp = buf;
+       char *ep;
+
+       while (cnt > 0) {
+               if (fgets (cp, cnt, f) != cp) {
+                       if (cp == buf) {
+                               return 0;
+                       } else {
+                               break;
+                       }
+               }
+               ep = strrchr (cp, '\\');
+               if ((NULL != ep) && (*(ep + 1) == '\n')) {
+                       cnt -= ep - cp;
+                       if (cnt > 0) {
+                               cp = ep;
+                               *cp = '\0';
+                       }
+               } else {
+                       break;
+               }
+       }
+       return buf;
+}
+
+int fputsx (const char *s, FILE * stream)
+{
+       int i;
+
+       for (i = 0; '\0' != *s; i++, s++) {
+               if (putc (*s, stream) == EOF) {
+                       return EOF;
+               }
+
+#if 0                          /* The standard getgr*() can't handle that.  --marekm */
+               if (i > (BUFSIZ / 2)) {
+                       if (putc ('\\', stream) == EOF ||
+                           putc ('\n', stream) == EOF)
+                               return EOF;
+
+                       i = 0;
+               }
+#endif
+       }
+       return 0;
+}
+
diff --git a/lib/get_gid.c b/lib/get_gid.c
new file mode 100644 (file)
index 0000000..6fb31ff
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2009       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include "prototypes.h"
+#include "defines.h"
+
+int get_gid (const char *gidstr, gid_t *gid)
+{
+       long long int val;
+       char *endptr;
+
+       errno = 0;
+       val = strtoll (gidstr, &endptr, 10);
+       if (   ('\0' == *gidstr)
+           || ('\0' != *endptr)
+           || (ERANGE == errno)
+           || (/*@+longintegral@*/val != (gid_t)val)/*@=longintegral@*/) {
+               return 0;
+       }
+
+       *gid = (gid_t)val;
+       return 1;
+}
+
diff --git a/lib/get_pid.c b/lib/get_pid.c
new file mode 100644 (file)
index 0000000..e2b47ce
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2009       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include "prototypes.h"
+#include "defines.h"
+
+int get_pid (const char *pidstr, pid_t *pid)
+{
+       long long int val;
+       char *endptr;
+
+       errno = 0;
+       val = strtoll (pidstr, &endptr, 10);
+       if (   ('\0' == *pidstr)
+           || ('\0' != *endptr)
+           || (ERANGE == errno)
+           || (/*@+longintegral@*/val != (pid_t)val)/*@=longintegral@*/) {
+               return 0;
+       }
+
+       *pid = (pid_t)val;
+       return 1;
+}
+
diff --git a/lib/get_uid.c b/lib/get_uid.c
new file mode 100644 (file)
index 0000000..ac0f2df
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2009       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include "prototypes.h"
+#include "defines.h"
+
+int get_uid (const char *uidstr, uid_t *uid)
+{
+       long long int val;
+       char *endptr;
+
+       errno = 0;
+       val = strtoll (uidstr, &endptr, 10);
+       if (   ('\0' == *uidstr)
+           || ('\0' != *endptr)
+           || (ERANGE == errno)
+           || (/*@+longintegral@*/val != (uid_t)val)/*@=longintegral@*/) {
+               return 0;
+       }
+
+       *uid = (uid_t)val;
+       return 1;
+}
+
diff --git a/lib/getdef.c b/lib/getdef.c
new file mode 100644 (file)
index 0000000..25c0733
--- /dev/null
@@ -0,0 +1,505 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: getdef.c 2772 2009-04-23 11:46:46Z nekral-guest $"
+
+#include "prototypes.h"
+#include "defines.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <errno.h>
+#include "getdef.h"
+/*
+ * A configuration item definition.
+ */
+struct itemdef {
+       /*@null@*/const char *name;     /* name of the item                     */
+       /*@null@*/char *value;          /* value given, or NULL if no value     */
+};
+
+#define NUMDEFS        (sizeof(def_table)/sizeof(def_table[0]))
+static struct itemdef def_table[] = {
+       {"CHFN_RESTRICT", NULL},
+       {"CONSOLE_GROUPS", NULL},
+       {"CONSOLE", NULL},
+       {"CREATE_HOME", NULL},
+       {"DEFAULT_HOME", NULL},
+       {"ENCRYPT_METHOD", NULL},
+       {"ENV_PATH", NULL},
+       {"ENV_SUPATH", NULL},
+       {"ERASECHAR", NULL},
+       {"FAIL_DELAY", NULL},
+       {"FAKE_SHELL", NULL},
+       {"GID_MAX", NULL},
+       {"GID_MIN", NULL},
+       {"HUSHLOGIN_FILE", NULL},
+       {"KILLCHAR", NULL},
+       {"LOGIN_RETRIES", NULL},
+       {"LOGIN_TIMEOUT", NULL},
+       {"LOG_OK_LOGINS", NULL},
+       {"LOG_UNKFAIL_ENAB", NULL},
+       {"MAIL_DIR", NULL},
+       {"MAIL_FILE", NULL},
+       {"MAX_MEMBERS_PER_GROUP", NULL},
+       {"MD5_CRYPT_ENAB", NULL},
+       {"PASS_MAX_DAYS", NULL},
+       {"PASS_MIN_DAYS", NULL},
+       {"PASS_WARN_AGE", NULL},
+#ifdef USE_SHA_CRYPT
+       {"SHA_CRYPT_MAX_ROUNDS", NULL},
+       {"SHA_CRYPT_MIN_ROUNDS", NULL},
+#endif
+       {"SULOG_FILE", NULL},
+       {"SU_NAME", NULL},
+       {"SYS_GID_MAX", NULL},
+       {"SYS_GID_MIN", NULL},
+       {"SYS_UID_MAX", NULL},
+       {"SYS_UID_MIN", NULL},
+       {"TTYGROUP", NULL},
+       {"TTYPERM", NULL},
+       {"TTYTYPE_FILE", NULL},
+       {"UID_MAX", NULL},
+       {"UID_MIN", NULL},
+       {"UMASK", NULL},
+       {"USERDEL_CMD", NULL},
+       {"USERGROUPS_ENAB", NULL},
+#ifndef USE_PAM
+       {"CHFN_AUTH", NULL},
+       {"CHSH_AUTH", NULL},
+       {"CRACKLIB_DICTPATH", NULL},
+       {"ENV_HZ", NULL},
+       {"ENVIRON_FILE", NULL},
+       {"ENV_TZ", NULL},
+       {"FAILLOG_ENAB", NULL},
+       {"FTMP_FILE", NULL},
+       {"ISSUE_FILE", NULL},
+       {"LASTLOG_ENAB", NULL},
+       {"LOGIN_STRING", NULL},
+       {"MAIL_CHECK_ENAB", NULL},
+       {"MOTD_FILE", NULL},
+       {"NOLOGINS_FILE", NULL},
+       {"OBSCURE_CHECKS_ENAB", NULL},
+       {"PASS_ALWAYS_WARN", NULL},
+       {"PASS_CHANGE_TRIES", NULL},
+       {"PASS_MAX_LEN", NULL},
+       {"PASS_MIN_LEN", NULL},
+       {"PORTTIME_CHECKS_ENAB", NULL},
+       {"QUOTAS_ENAB", NULL},
+       {"SU_WHEEL_ONLY", NULL},
+       {"ULIMIT", NULL},
+#endif
+#ifdef USE_SYSLOG
+       {"SYSLOG_SG_ENAB", NULL},
+       {"SYSLOG_SU_ENAB", NULL},
+#endif
+       {NULL, NULL}
+};
+
+#ifndef LOGINDEFS
+#define LOGINDEFS "/etc/login.defs"
+#endif
+
+static char def_fname[] = LOGINDEFS;   /* login config defs file       */
+static bool def_loaded = false;                /* are defs already loaded?     */
+
+/* local function prototypes */
+static /*@observer@*/ /*@null@*/struct itemdef *def_find (const char *);
+static void def_load (void);
+
+
+/*
+ * getdef_str - get string value from table of definitions.
+ *
+ * Return point to static data for specified item, or NULL if item is not
+ * defined.  First time invoked, will load definitions from the file.
+ */
+
+/*@observer@*/ /*@null@*/const char *getdef_str (const char *item)
+{
+       struct itemdef *d;
+
+       if (!def_loaded) {
+               def_load ();
+       }
+
+       d = def_find (item);
+       return ((NULL == d)? (const char *) NULL : d->value);
+}
+
+
+/*
+ * getdef_bool - get boolean value from table of definitions.
+ *
+ * Return TRUE if specified item is defined as "yes", else FALSE.
+ */
+
+bool getdef_bool (const char *item)
+{
+       struct itemdef *d;
+
+       if (!def_loaded) {
+               def_load ();
+       }
+
+       d = def_find (item);
+       if ((NULL == d) || (NULL == d->value)) {
+               return false;
+       }
+
+       return (strcasecmp (d->value, "yes") == 0);
+}
+
+
+/*
+ * getdef_num - get numerical value from table of definitions
+ *
+ * Returns numeric value of specified item, else the "dflt" value if
+ * the item is not defined.  Octal (leading "0") and hex (leading "0x")
+ * values are handled.
+ */
+
+int getdef_num (const char *item, int dflt)
+{
+       struct itemdef *d;
+       long val;
+
+       if (!def_loaded) {
+               def_load ();
+       }
+
+       d = def_find (item);
+       if ((NULL == d) || (NULL == d->value)) {
+               return dflt;
+       }
+
+       if (   (getlong (d->value, &val) == 0)
+           || (val > INT_MAX)
+           || (val < INT_MIN)) {
+               fprintf (stderr,
+                        _("configuration error - cannot parse %s value: '%s'"),
+                        item, d->value);
+               return dflt;
+       }
+
+       return (int) val;
+}
+
+
+/*
+ * getdef_unum - get unsigned numerical value from table of definitions
+ *
+ * Returns numeric value of specified item, else the "dflt" value if
+ * the item is not defined.  Octal (leading "0") and hex (leading "0x")
+ * values are handled.
+ */
+
+unsigned int getdef_unum (const char *item, unsigned int dflt)
+{
+       struct itemdef *d;
+       long val;
+
+       if (!def_loaded) {
+               def_load ();
+       }
+
+       d = def_find (item);
+       if ((NULL == d) || (NULL == d->value)) {
+               return dflt;
+       }
+
+       if (   (getlong (d->value, &val) == 0)
+           || (val < 0)
+           || (val > INT_MAX)) {
+               fprintf (stderr,
+                        _("configuration error - cannot parse %s value: '%s'"),
+                        item, d->value);
+               return dflt;
+       }
+
+       return (unsigned int) val;
+}
+
+
+/*
+ * getdef_long - get long integer value from table of definitions
+ *
+ * Returns numeric value of specified item, else the "dflt" value if
+ * the item is not defined.  Octal (leading "0") and hex (leading "0x")
+ * values are handled.
+ */
+
+long getdef_long (const char *item, long dflt)
+{
+       struct itemdef *d;
+       long val;
+
+       if (!def_loaded) {
+               def_load ();
+       }
+
+       d = def_find (item);
+       if ((NULL == d) || (NULL == d->value)) {
+               return dflt;
+       }
+
+       if (getlong (d->value, &val) == 0) {
+               fprintf (stderr,
+                        _("configuration error - cannot parse %s value: '%s'"),
+                        item, d->value);
+               return dflt;
+       }
+
+       return val;
+}
+
+/*
+ * getdef_ulong - get unsigned long numerical value from table of definitions
+ *
+ * Returns numeric value of specified item, else the "dflt" value if
+ * the item is not defined.  Octal (leading "0") and hex (leading "0x")
+ * values are handled.
+ */
+
+unsigned long getdef_ulong (const char *item, unsigned long dflt)
+{
+       struct itemdef *d;
+       unsigned long val;
+
+       if (!def_loaded) {
+               def_load ();
+       }
+
+       d = def_find (item);
+       if ((NULL == d) || (NULL == d->value)) {
+               return dflt;
+       }
+
+       if (getulong (d->value, &val) == 0) {
+               /* FIXME: we should have a getulong */
+               fprintf (stderr,
+                        _("configuration error - cannot parse %s value: '%s'"),
+                        item, d->value);
+               return dflt;
+       }
+
+       return val;
+}
+
+/*
+ * putdef_str - override the value read from /etc/login.defs
+ * (also used when loading the initial defaults)
+ */
+
+int putdef_str (const char *name, const char *value)
+{
+       struct itemdef *d;
+       char *cp;
+
+       if (!def_loaded) {
+               def_load ();
+       }
+
+       /*
+        * Locate the slot to save the value.  If this parameter
+        * is unknown then "def_find" will print an err message.
+        */
+       d = def_find (name);
+       if (NULL == d) {
+               return -1;
+       }
+
+       /*
+        * Save off the value.
+        */
+       cp = strdup (value);
+       if (NULL == cp) {
+               (void) fputs (_("Could not allocate space for config info.\n"),
+                             stderr);
+               SYSLOG ((LOG_ERR, "could not allocate space for config info"));
+               return -1;
+       }
+
+       if (NULL != d->value) {
+               free (d->value);
+       }
+
+       d->value = cp;
+       return 0;
+}
+
+
+/*
+ * def_find - locate named item in table
+ *
+ * Search through a table of configurable items to locate the
+ * specified configuration option.
+ */
+
+static /*@observer@*/ /*@null@*/struct itemdef *def_find (const char *name)
+{
+       struct itemdef *ptr;
+
+
+       /*
+        * Search into the table.
+        */
+
+       for (ptr = def_table; NULL != ptr->name; ptr++) {
+               if (strcmp (ptr->name, name) == 0) {
+                       return ptr;
+               }
+       }
+
+       /*
+        * Item was never found.
+        */
+
+       fprintf (stderr,
+                _("configuration error - unknown item '%s' (notify administrator)\n"),
+                name);
+       SYSLOG ((LOG_CRIT, "unknown configuration item `%s'", name));
+       return (struct itemdef *) NULL;
+}
+
+/*
+ * def_load - load configuration table
+ *
+ * Loads the user-configured options from the default configuration file
+ */
+
+static void def_load (void)
+{
+       int i;
+       FILE *fp;
+       char buf[1024], *name, *value, *s;
+
+       /*
+        * Open the configuration definitions file.
+        */
+       fp = fopen (def_fname, "r");
+       if (NULL == fp) {
+               int err = errno;
+               SYSLOG ((LOG_CRIT, "cannot open login definitions %s [%s]",
+                        def_fname, strerror (err)));
+               exit (EXIT_FAILURE);
+       }
+
+       /*
+        * Set the initialized flag.
+        * (do it early to prevent recursion in putdef_str())
+        */
+       def_loaded = true;
+
+       /*
+        * Go through all of the lines in the file.
+        */
+       while (fgets (buf, (int) sizeof (buf), fp) != NULL) {
+
+               /*
+                * Trim trailing whitespace.
+                */
+               for (i = (int) strlen (buf) - 1; i >= 0; --i) {
+                       if (!isspace (buf[i])) {
+                               break;
+                       }
+               }
+               i++;
+               buf[i] = '\0';
+
+               /*
+                * Break the line into two fields.
+                */
+               name = buf + strspn (buf, " \t");       /* first nonwhite */
+               if (*name == '\0' || *name == '#')
+                       continue;       /* comment or empty */
+
+               s = name + strcspn (name, " \t");       /* end of field */
+               if (*s == '\0')
+                       continue;       /* only 1 field?? */
+
+               *s++ = '\0';
+               value = s + strspn (s, " \"\t");        /* next nonwhite */
+               *(value + strcspn (value, "\"")) = '\0';
+
+               /*
+                * Store the value in def_table.
+                *
+                * Ignore failures to load the login.defs file.
+                * The error was already reported to the user and to
+                * syslog. The tools will just use their default values.
+                */
+               (void)putdef_str (name, value);
+       }
+
+       if (ferror (fp) != 0) {
+               int err = errno;
+               SYSLOG ((LOG_CRIT, "cannot read login definitions %s [%s]",
+                        def_fname, strerror (err)));
+               exit (EXIT_FAILURE);
+       }
+
+       (void) fclose (fp);
+}
+
+
+#ifdef CKDEFS
+int main (int argc, char **argv)
+{
+       int i;
+       char *cp;
+       struct itemdef *d;
+
+       def_load ();
+
+       for (i = 0; i < NUMDEFS; ++i) {
+               d = def_find (def_table[i].name);
+               if (NULL == d) {
+                       printf ("error - lookup '%s' failed\n",
+                               def_table[i].name);
+               } else {
+                       printf ("%4d %-24s %s\n", i + 1, d->name, d->value);
+               }
+       }
+       for (i = 1; i < argc; i++) {
+               cp = getdef_str (argv[1]);
+               if (NULL != cp) {
+                       printf ("%s `%s'\n", argv[1], cp);
+               } else {
+                       printf ("%s not found\n", argv[1]);
+               }
+       }
+       exit (EXIT_SUCCESS);
+}
+#endif
diff --git a/lib/getdef.h b/lib/getdef.h
new file mode 100644 (file)
index 0000000..15e35ff
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _GETDEF_H
+#define _GETDEF_H
+
+/* getdef.c */
+extern bool getdef_bool (const char *);
+extern long getdef_long (const char *, long);
+extern int getdef_num (const char *, int);
+extern unsigned long getdef_ulong (const char *, unsigned long);
+extern unsigned int getdef_unum (const char *, unsigned int);
+extern /*@observer@*/ /*@null@*/const char *getdef_str (const char *);
+extern int putdef_str (const char *, const char *);
+
+/* default UMASK value if not specified in /etc/login.defs */
+#define                GETDEF_DEFAULT_UMASK    022
+
+#endif                         /* _GETDEF_H */
diff --git a/lib/getlong.c b/lib/getlong.c
new file mode 100644 (file)
index 0000000..7f9912c
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: getlong.c 2795 2009-04-24 23:27:12Z nekral-guest $"
+
+#include <stdlib.h>
+#include <errno.h>
+#include "prototypes.h"
+
+/*
+ * getlong - extract a long integer provided by the numstr string in *result
+ *
+ * It supports decimal, hexadecimal or octal representations.
+ *
+ * Returns 0 on failure, 1 on success.
+ */
+int getlong (const char *numstr, /*@out@*/long int *result)
+{
+       long val;
+       char *endptr;
+
+       errno = 0;
+       val = strtol (numstr, &endptr, 0);
+       if (('\0' == *numstr) || ('\0' != *endptr) || (ERANGE == errno)) {
+               return 0;
+       }
+
+       *result = val;
+       return 1;
+}
+
diff --git a/lib/getulong.c b/lib/getulong.c
new file mode 100644 (file)
index 0000000..61579ca
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: getlong.c 2763 2009-04-23 09:57:03Z nekral-guest $"
+
+#include <stdlib.h>
+#include <errno.h>
+#include "prototypes.h"
+
+/*
+ * getulong - extract an unsigned long integer provided by the numstr string in *result
+ *
+ * It supports decimal, hexadecimal or octal representations.
+ *
+ * Returns 0 on failure, 1 on success.
+ */
+int getulong (const char *numstr, /*@out@*/unsigned long int *result)
+{
+       long long int val;
+       char *endptr;
+
+       errno = 0;
+       val = strtoll (numstr, &endptr, 0);
+       if (    ('\0' == *numstr)
+            || ('\0' != *endptr)
+            || (ERANGE == errno)
+            /*@+ignoresigns@*/
+            || (val != (unsigned long int)val)
+            /*@=ignoresigns@*/
+          ) {
+               return 0;
+       }
+
+       *result = (unsigned long int)val;
+       return 1;
+}
+
diff --git a/lib/groupio.c b/lib/groupio.c
new file mode 100644 (file)
index 0000000..5aa5f74
--- /dev/null
@@ -0,0 +1,423 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001       , Michał Moskal
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: groupio.c 2822 2009-04-27 20:18:00Z nekral-guest $"
+
+#include <assert.h>
+#include <stdio.h>
+
+#include "prototypes.h"
+#include "defines.h"
+#include "commonio.h"
+#include "getdef.h"
+#include "groupio.h"
+
+static /*@null@*/struct commonio_entry *merge_group_entries (
+       /*@null@*/ /*@returned@*/struct commonio_entry *gr1,
+       /*@null@*/struct commonio_entry *gr2);
+static int split_groups (unsigned int max_members);
+static int group_open_hook (void);
+
+static /*@null@*/ /*@only@*/void *group_dup (const void *ent)
+{
+       const struct group *gr = ent;
+
+       return __gr_dup (gr);
+}
+
+static void group_free (/*@out@*/ /*@only@*/void *ent)
+{
+       struct group *gr = ent;
+
+       gr_free (gr);
+}
+
+static const char *group_getname (const void *ent)
+{
+       const struct group *gr = ent;
+
+       return gr->gr_name;
+}
+
+static void *group_parse (const char *line)
+{
+       return (void *) sgetgrent (line);
+}
+
+static int group_put (const void *ent, FILE * file)
+{
+       const struct group *gr = ent;
+
+       return (putgrent (gr, file) == -1) ? -1 : 0;
+}
+
+static int group_close_hook (void)
+{
+       unsigned int max_members = getdef_unum("MAX_MEMBERS_PER_GROUP", 0);
+
+       if (0 == max_members) {
+               return 1;
+       }
+
+       return split_groups (max_members);
+}
+
+static struct commonio_ops group_ops = {
+       group_dup,
+       group_free,
+       group_getname,
+       group_parse,
+       group_put,
+       fgetsx,
+       fputsx,
+       group_open_hook,
+       group_close_hook
+};
+
+static /*@owned@*/struct commonio_db group_db = {
+       GROUP_FILE,             /* filename */
+       &group_ops,             /* ops */
+       NULL,                   /* fp */
+#ifdef WITH_SELINUX
+       NULL,                   /* scontext */
+#endif
+       NULL,                   /* head */
+       NULL,                   /* tail */
+       NULL,                   /* cursor */
+       false,                  /* changed */
+       false,                  /* isopen */
+       false,                  /* locked */
+       false                   /* readonly */
+};
+
+int gr_setdbname (const char *filename)
+{
+       return commonio_setname (&group_db, filename);
+}
+
+/*@observer@*/const char *gr_dbname (void)
+{
+       return group_db.filename;
+}
+
+int gr_lock (void)
+{
+       return commonio_lock (&group_db);
+}
+
+int gr_open (int mode)
+{
+       return commonio_open (&group_db, mode);
+}
+
+/*@observer@*/ /*@null@*/const struct group *gr_locate (const char *name)
+{
+       return commonio_locate (&group_db, name);
+}
+
+/*@observer@*/ /*@null@*/const struct group *gr_locate_gid (gid_t gid)
+{
+       const struct group *grp;
+
+       gr_rewind ();
+       while (   ((grp = gr_next ()) != NULL)
+              && (grp->gr_gid != gid)) {
+       }
+
+       return grp;
+}
+
+int gr_update (const struct group *gr)
+{
+       return commonio_update (&group_db, (const void *) gr);
+}
+
+int gr_remove (const char *name)
+{
+       return commonio_remove (&group_db, name);
+}
+
+int gr_rewind (void)
+{
+       return commonio_rewind (&group_db);
+}
+
+/*@observer@*/ /*@null@*/const struct group *gr_next (void)
+{
+       return commonio_next (&group_db);
+}
+
+int gr_close (void)
+{
+       return commonio_close (&group_db);
+}
+
+int gr_unlock (void)
+{
+       return commonio_unlock (&group_db);
+}
+
+void __gr_set_changed (void)
+{
+       group_db.changed = true;
+}
+
+/*@dependent@*/ /*@null@*/struct commonio_entry *__gr_get_head (void)
+{
+       return group_db.head;
+}
+
+/*@observer@*/const struct commonio_db *__gr_get_db (void)
+{
+       return &group_db;
+}
+
+void __gr_del_entry (const struct commonio_entry *ent)
+{
+       commonio_del_entry (&group_db, ent);
+}
+
+static int gr_cmp (const void *p1, const void *p2)
+{
+       gid_t u1, u2;
+
+       if ((*(struct commonio_entry **) p1)->eptr == NULL) {
+               return 1;
+       }
+       if ((*(struct commonio_entry **) p2)->eptr == NULL) {
+               return -1;
+       }
+
+       u1 = ((struct group *) (*(struct commonio_entry **) p1)->eptr)->gr_gid;
+       u2 = ((struct group *) (*(struct commonio_entry **) p2)->eptr)->gr_gid;
+
+       if (u1 < u2) {
+               return -1;
+       } else if (u1 > u2) {
+               return 1;
+       } else {
+               return 0;
+       }
+}
+
+/* Sort entries by GID */
+int gr_sort ()
+{
+       return commonio_sort (&group_db, gr_cmp);
+}
+
+static int group_open_hook (void)
+{
+       unsigned int max_members = getdef_unum("MAX_MEMBERS_PER_GROUP", 0);
+       struct commonio_entry *gr1, *gr2;
+
+       if (0 == max_members) {
+               return 1;
+       }
+
+       for (gr1 = group_db.head; NULL != gr1; gr1 = gr1->next) {
+               for (gr2 = gr1->next; NULL != gr2; gr2 = gr2->next) {
+                       struct group *g1 = (struct group *)gr1->eptr;
+                       struct group *g2 = (struct group *)gr2->eptr;
+                       if (NULL != g1 &&
+                           NULL != g2 &&
+                           0 == strcmp (g1->gr_name, g2->gr_name) &&
+                           0 == strcmp (g1->gr_passwd, g2->gr_passwd) &&
+                           g1->gr_gid == g2->gr_gid) {
+                               /* Both group entries refer to the same
+                                * group. It is a split group. Merge the
+                                * members. */
+                               gr1 = merge_group_entries (gr1, gr2);
+                               if (NULL == gr1)
+                                       return 0;
+                               /* Unlink gr2 */
+                               if (NULL != gr2->next) {
+                                       gr2->next->prev = gr2->prev;
+                               }
+                               /* gr2 does not start with head */
+                               assert (NULL != gr2->prev);
+                               gr2->prev->next = gr2->next;
+                       }
+               }
+               assert (NULL != gr1);
+       }
+
+       return 1;
+}
+
+/*
+ * Merge the list of members of the two group entries.
+ *
+ * The commonio_entry arguments shall be group entries.
+ *
+ * You should not merge the members of two groups if they don't have the
+ * same name, password and gid.
+ *
+ * It merge the members of the second entry in the first one, and return
+ * the modified first entry on success, or NULL on failure (with errno
+ * set).
+ */
+static /*@null@*/struct commonio_entry *merge_group_entries (
+       /*@null@*/ /*@returned@*/struct commonio_entry *gr1,
+       /*@null@*/struct commonio_entry *gr2)
+{
+       struct group *gptr1;
+       struct group *gptr2;
+       char **new_members;
+       size_t members = 0;
+       char *new_line;
+       size_t new_line_len, i;
+       if (NULL == gr2 || NULL == gr1) {
+               errno = EINVAL;
+               return NULL;
+       }
+
+       gptr1 = (struct group *)gr1->eptr;
+       gptr2 = (struct group *)gr2->eptr;
+       if (NULL == gptr2 || NULL == gptr1) {
+               errno = EINVAL;
+               return NULL;
+       }
+
+       /* Concatenate the 2 lines */
+       new_line_len = strlen (gr1->line) + strlen (gr2->line) +1;
+       new_line = (char *)malloc ((new_line_len + 1) * sizeof(char*));
+       if (NULL == new_line) {
+               errno = ENOMEM;
+               return NULL;
+       }
+       snprintf(new_line, new_line_len, "%s\n%s", gr1->line, gr2->line);
+       new_line[new_line_len] = '\0';
+
+       /* Concatenate the 2 list of members */
+       for (i=0; NULL != gptr1->gr_mem[i]; i++);
+       members += i;
+       for (i=0; NULL != gptr2->gr_mem[i]; i++) {
+               char **pmember = gptr1->gr_mem;
+               while (NULL != *pmember) {
+                       if (0 == strcmp(*pmember, gptr2->gr_mem[i])) {
+                               break;
+                       }
+                       pmember++;
+               }
+               if (NULL == *pmember) {
+                       members++;
+               }
+       }
+       new_members = (char **)malloc ( (members+1) * sizeof(char*) );
+       if (NULL == new_members) {
+               free (new_line);
+               errno = ENOMEM;
+               return NULL;
+       }
+       for (i=0; NULL != gptr1->gr_mem[i]; i++) {
+               new_members[i] = gptr1->gr_mem[i];
+       }
+       members = i;
+       for (i=0; NULL != gptr2->gr_mem[i]; i++) {
+               char **pmember = new_members;
+               while (NULL != *pmember) {
+                       if (0 == strcmp(*pmember, gptr2->gr_mem[i])) {
+                               break;
+                       }
+                       pmember++;
+               }
+               if (NULL == *pmember) {
+                       new_members[members] = gptr2->gr_mem[i];
+                       members++;
+                       new_members[members] = NULL;
+               }
+       }
+
+       gr1->line = new_line;
+       gptr1->gr_mem = new_members;
+
+       return gr1;
+}
+
+/*
+ * Scan the group database and split the groups which have more members
+ * than specified, if this is the result from a current change.
+ *
+ * Return 0 on failure (errno set) and 1 on success.
+ */
+static int split_groups (unsigned int max_members)
+{
+       struct commonio_entry *gr;
+
+       for (gr = group_db.head; NULL != gr; gr = gr->next) {
+               struct group *gptr = (struct group *)gr->eptr;
+               struct commonio_entry *new;
+               struct group *new_gptr;
+               unsigned int members = 0;
+
+               /* Check if this group must be split */
+               if (!gr->changed)
+                       continue;
+               if (NULL == gptr)
+                       continue;
+               for (members = 0; NULL != gptr->gr_mem[members]; members++);
+               if (members <= max_members)
+                       continue;
+
+               new = (struct commonio_entry *) malloc (sizeof *new);
+               if (NULL == new) {
+                       errno = ENOMEM;
+                       return 0;
+               }
+               new->eptr = group_dup(gr->eptr);
+               if (NULL == new->eptr) {
+                       free (new);
+                       errno = ENOMEM;
+                       return 0;
+               }
+               new_gptr = (struct group *)new->eptr;
+               new->line = NULL;
+               new->changed = true;
+
+               /* Enforce the maximum number of members on gptr */
+               gptr->gr_mem[max_members] = NULL;
+               /* The number of members in new_gptr will be check later */
+               new_gptr->gr_mem = &new_gptr->gr_mem[max_members];
+
+               /* insert the new entry in the list */
+               new->prev = gr;
+               new->next = gr->next;
+               gr->next = new;
+       }
+
+       return 1;
+}
+
diff --git a/lib/groupio.h b/lib/groupio.h
new file mode 100644 (file)
index 0000000..6440523
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001       , Michał Moskal
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id: groupio.h 2783 2009-04-23 21:19:02Z nekral-guest $ */
+#ifndef _GROUPIO_H
+#define _GROUPIO_H
+
+#include <sys/types.h>
+#include <grp.h>
+
+extern int gr_close (void);
+extern /*@observer@*/ /*@null@*/const struct group *gr_locate (const char *name);
+extern /*@observer@*/ /*@null@*/const struct group *gr_locate_gid (gid_t gid);
+extern int gr_lock (void);
+extern int gr_setdbname (const char *filename);
+extern /*@observer@*/const char *gr_dbname (void);
+extern /*@observer@*/ /*@null@*/const struct group *gr_next (void);
+extern int gr_open (int mode);
+extern int gr_remove (const char *name);
+extern int gr_rewind (void);
+extern int gr_unlock (void);
+extern int gr_update (const struct group *gr);
+extern int gr_sort (void);
+
+#endif
diff --git a/lib/groupmem.c b/lib/groupmem.c
new file mode 100644 (file)
index 0000000..a09bf6c
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001       , Michał Moskal
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: groupmem.c 2777 2009-04-23 17:43:27Z nekral-guest $"
+
+#include "prototypes.h"
+#include "defines.h"
+#include "groupio.h"
+
+/*@null@*/ /*@only@*/struct group *__gr_dup (const struct group *grent)
+{
+       struct group *gr;
+       int i;
+
+       gr = (struct group *) malloc (sizeof *gr);
+       if (NULL == gr) {
+               return NULL;
+       }
+       *gr = *grent;
+       gr->gr_name = strdup (grent->gr_name);
+       if (NULL == gr->gr_name) {
+               return NULL;
+       }
+       gr->gr_passwd = strdup (grent->gr_passwd);
+       if (NULL == gr->gr_passwd) {
+               return NULL;
+       }
+
+       for (i = 0; grent->gr_mem[i]; i++);
+
+       gr->gr_mem = (char **) malloc ((i + 1) * sizeof (char *));
+       if (NULL == gr->gr_mem) {
+               return NULL;
+       }
+       for (i = 0; grent->gr_mem[i]; i++) {
+               gr->gr_mem[i] = strdup (grent->gr_mem[i]);
+               if (NULL == gr->gr_mem[i]) {
+                       return NULL;
+               }
+       }
+       gr->gr_mem[i] = NULL;
+
+       return gr;
+}
+
+void gr_free (/*@out@*/ /*@only@*/struct group *grent)
+{
+       free (grent->gr_name);
+       memzero (grent->gr_passwd, strlen (grent->gr_passwd));
+       free (grent->gr_passwd);
+       while (*(grent->gr_mem)) {
+               free (*(grent->gr_mem));
+               grent->gr_mem++;
+       }
+       free (grent);
+}
+
diff --git a/lib/gshadow.c b/lib/gshadow.c
new file mode 100644 (file)
index 0000000..fc3dcf5
--- /dev/null
@@ -0,0 +1,529 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+/* Newer versions of Linux libc already have shadow support.  */
+#if defined(SHADOWGRP) && !defined(HAVE_SHADOWGRP)     /*{ */
+
+#ident "$Id: gshadow.c 3020 2009-06-12 17:50:24Z nekral-guest $"
+
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+static /*@null@*/FILE *shadow;
+static /*@null@*//*@only@*/char **members = NULL;
+static size_t nmembers = 0;
+static /*@null@*//*@only@*/char **admins = NULL;
+static size_t nadmins = 0;
+static struct sgrp sgroup;
+
+#define        FIELDS  4
+
+#ifdef USE_NIS
+static bool nis_used;
+static bool nis_ignore;
+static enum { native, start, middle, native2 } nis_state;
+static bool nis_bound;
+static char *nis_domain;
+static char *nis_key;
+static int nis_keylen;
+static char *nis_val;
+static int nis_vallen;
+
+#define        IS_NISCHAR(c) ((c)=='+')
+#endif
+
+#ifdef USE_NIS
+/*
+ * bind_nis - bind to NIS server
+ */
+
+static int bind_nis (void)
+{
+       if (yp_get_default_domain (&nis_domain))
+               return -1;
+
+       nis_bound = true;
+       return 0;
+}
+#endif
+
+static /*@null@*/char **build_list (char *s, char **list[], size_t * nlist)
+{
+       char **ptr = *list;
+       size_t nelem = *nlist, size;
+
+       while (s != NULL && *s != '\0') {
+               size = (nelem + 1) * sizeof (ptr);
+               ptr = realloc (*list, size);
+               if (NULL != ptr) {
+                       ptr[nelem] = s;
+                       nelem++;
+                       *list = ptr;
+                       *nlist = nelem;
+                       s = strchr (s, ',');
+                       if (NULL != s) {
+                               *s = '\0';
+                               s++;
+                       }
+               }
+       }
+       size = (nelem + 1) * sizeof (ptr);
+       ptr = realloc (*list, size);
+       if (NULL != ptr) {
+               ptr[nelem] = NULL;
+               *list = ptr;
+       }
+       return ptr;
+}
+
+void setsgent (void)
+{
+#ifdef USE_NIS
+       nis_state = native;
+#endif
+       if (NULL != shadow) {
+               rewind (shadow);
+       } else {
+               shadow = fopen (SGROUP_FILE, "r");
+       }
+}
+
+void endsgent (void)
+{
+       if (NULL != shadow) {
+               (void) fclose (shadow);
+       }
+
+       shadow = (FILE *) 0;
+}
+
+/*@observer@*//*@null@*/struct sgrp *sgetsgent (const char *string)
+{
+       static char *sgrbuf = NULL;
+       static size_t sgrbuflen = 0;
+
+       char *fields[FIELDS];
+       char *cp;
+       int i;
+       size_t len = strlen (string) + 1;
+
+       if (len > sgrbuflen) {
+               char *buf = (char *) realloc (sgrbuf, sizeof (char) * len);
+               if (NULL == buf) {
+                       return NULL;
+               }
+               sgrbuf = buf;
+               sgrbuflen = len;
+       }
+
+       strncpy (sgrbuf, string, len);
+       sgrbuf[len-1] = '\0';
+
+       cp = strrchr (sgrbuf, '\n');
+       if (NULL != cp) {
+               *cp = '\0';
+       }
+
+       /*
+        * There should be exactly 4 colon separated fields.  Find
+        * all 4 of them and save the starting addresses in fields[].
+        */
+
+       for (cp = sgrbuf, i = 0; (i < FIELDS) && (NULL != cp); i++) {
+               fields[i] = cp;
+               cp = strchr (cp, ':');
+               if (NULL != cp) {
+                       *cp++ = '\0';
+               }
+       }
+
+       /*
+        * If there was an extra field somehow, or perhaps not enough,
+        * the line is invalid.
+        */
+
+       if ((NULL != cp) || (i != FIELDS)) {
+#ifdef USE_NIS
+               if (!IS_NISCHAR (fields[0][0])) {
+                       return 0;
+               } else {
+                       nis_used = true;
+               }
+#else
+               return 0;
+#endif
+       }
+
+       sgroup.sg_name = fields[0];
+       sgroup.sg_passwd = fields[1];
+       if (0 != nadmins) {
+               nadmins = 0;
+               free (admins);
+               admins = NULL;
+       }
+       if (0 != nmembers) {
+               nmembers = 0;
+               free (members);
+               members = NULL;
+       }
+       sgroup.sg_adm = build_list (fields[2], &admins, &nadmins);
+       sgroup.sg_mem = build_list (fields[3], &members, &nmembers);
+
+       return &sgroup;
+}
+
+/*
+ * fgetsgent - convert next line in stream to (struct sgrp)
+ *
+ * fgetsgent() reads the next line from the provided stream and
+ * converts it to a (struct sgrp).  NULL is returned on EOF.
+ */
+
+/*@observer@*//*@null@*/struct sgrp *fgetsgent (/*@null@*/FILE * fp)
+{
+       static size_t buflen = 0;
+       static char *buf = NULL;
+
+       char *cp;
+       struct sgrp *ret;
+
+       if (0 == buflen) {
+               buf = (char *) malloc (BUFSIZ);
+               if (NULL == buf) {
+                       return NULL;
+               }
+       }
+
+       if (NULL == fp) {
+               return NULL;
+       }
+
+#ifdef USE_NIS
+       while (fgetsx (buf, (int) sizeof buf, fp) == buf)
+#else
+       if (fgetsx (buf, (int) sizeof buf, fp) == buf)
+#endif
+       {
+               while (   ((cp = strrchr (buf, '\n')) == NULL)
+                      && (feof (fp) == 0)) {
+                       size_t len;
+
+                       cp = (char *) realloc (buf, buflen*2);
+                       if (NULL == cp) {
+                               return NULL;
+                       }
+                       buf = cp;
+                       buflen *= 2;
+
+                       len = strlen (buf);
+                       if (fgetsx (&buf[len],
+                                   (int) (buflen - len),
+                                   fp) != &buf[len]) {
+                               return NULL;
+                       }
+               }
+               cp = strrchr (buf, '\n');
+               if (NULL != cp) {
+                       *cp = '\0';
+               }
+#ifdef USE_NIS
+               if (nis_ignore && IS_NISCHAR (buf[0])) {
+                       continue;
+               }
+#endif
+               return (sgetsgent (buf));
+       }
+       return NULL;
+}
+
+/*
+ * getsgent - get a single shadow group entry
+ */
+
+/*@observer@*//*@null@*/struct sgrp *getsgent (void)
+{
+#ifdef USE_NIS
+       bool nis_1_group = false;
+       struct sgrp *val;
+#endif
+       if (NULL == shadow) {
+               setsgent ();
+       }
+
+#ifdef USE_NIS
+      again:
+       /*
+        * See if we are reading from the local file.
+        */
+
+       if (nis_state == native || nis_state == native2) {
+
+               /*
+                * Get the next entry from the shadow group file.  Return
+                * NULL right away if there is none.
+                */
+
+               val = fgetsgent (shadow);
+               if (NULL == val) {
+                       return 0;
+               }
+
+               /*
+                * If this entry began with a NIS escape character, we have
+                * to see if this is just a single group, or if the entire
+                * map is being asked for.
+                */
+
+               if (IS_NISCHAR (val->sg_name[0])) {
+                       if ('\0' != val->sg_name[1]) {
+                               nis_1_group = true;
+                       } else {
+                               nis_state = start;
+                       }
+               }
+
+               /*
+                * If this isn't a NIS group and this isn't an escape to go
+                * use a NIS map, it must be a regular local group.
+                */
+
+               if (!nis_1_group && (nis_state != start)) {
+                       return val;
+               }
+
+               /*
+                * If this is an escape to use an NIS map, switch over to
+                * that bunch of code.
+                */
+
+               if (nis_state == start) {
+                       goto again;
+               }
+
+               /*
+                * NEEDSWORK.  Here we substitute pieces-parts of this entry.
+                */
+
+               return 0;
+       } else {
+               if (!nis_bound) {
+                       if (bind_nis ()) {
+                               nis_state = native2;
+                               goto again;
+                       }
+               }
+               if (nis_state == start) {
+                       if (yp_first (nis_domain, "gshadow.byname", &nis_key,
+                                     &nis_keylen, &nis_val, &nis_vallen)) {
+                               nis_state = native2;
+                               goto again;
+                       }
+                       nis_state = middle;
+               } else if (nis_state == middle) {
+                       if (yp_next (nis_domain, "gshadow.byname", nis_key,
+                                    nis_keylen, &nis_key, &nis_keylen,
+                                    &nis_val, &nis_vallen)) {
+                               nis_state = native2;
+                               goto again;
+                       }
+               }
+               return sgetsgent (nis_val);
+       }
+#else
+       return (fgetsgent (shadow));
+#endif
+}
+
+/*
+ * getsgnam - get a shadow group entry by name
+ */
+
+/*@observer@*//*@null@*/struct sgrp *getsgnam (const char *name)
+{
+       struct sgrp *sgrp;
+
+#ifdef USE_NIS
+       static char save_name[16];
+       int nis_disabled = 0;
+#endif
+
+       setsgent ();
+
+#ifdef USE_NIS
+       if (nis_used) {
+             again:
+
+               /*
+                * Search the gshadow.byname map for this group.
+                */
+
+               if (!nis_bound) {
+                       bind_nis ();
+               }
+
+               if (nis_bound) {
+                       char *cp;
+
+                       if (yp_match (nis_domain, "gshadow.byname", name,
+                                     strlen (name), &nis_val,
+                                     &nis_vallen) == 0) {
+                               cp = strchr (nis_val, '\n');
+                               if (NULL != cp) {
+                                       *cp = '\0';
+                               }
+
+                               nis_state = middle;
+                               sgrp = sgetsgent (nis_val);
+                               if (NULL != sgrp) {
+                                       strcpy (save_name, sgrp->sg_name);
+                                       nis_key = save_name;
+                                       nis_keylen = strlen (save_name);
+                               }
+                               return sgrp;
+                       }
+               }
+               nis_state = native2;
+       }
+#endif
+#ifdef USE_NIS
+       if (nis_used) {
+               nis_ignore = true;
+               nis_disabled = true;
+       }
+#endif
+       while ((sgrp = getsgent ()) != (struct sgrp *) 0) {
+               if (strcmp (name, sgrp->sg_name) == 0) {
+                       break;
+               }
+       }
+#ifdef USE_NIS
+       nis_ignore = false;
+#endif
+       return sgrp;
+}
+
+/*
+ * putsgent - output shadow group entry in text form
+ *
+ * putsgent() converts the contents of a (struct sgrp) to text and
+ * writes the result to the given stream.  This is the logical
+ * opposite of fgetsgent.
+ */
+
+int putsgent (const struct sgrp *sgrp, FILE * fp)
+{
+       char *buf, *cp;
+       int i;
+       size_t size;
+
+       if ((NULL == fp) || (NULL == sgrp)) {
+               return -1;
+       }
+
+       /* calculate the required buffer size */
+       size = strlen (sgrp->sg_name) + strlen (sgrp->sg_passwd) + 10;
+       for (i = 0; (NULL != sgrp->sg_adm) && (NULL != sgrp->sg_adm[i]); i++) {
+               size += strlen (sgrp->sg_adm[i]) + 1;
+       }
+       for (i = 0; (NULL != sgrp->sg_mem) && (NULL != sgrp->sg_mem[i]); i++) {
+               size += strlen (sgrp->sg_mem[i]) + 1;
+       }
+
+       buf = malloc (size);
+       if (NULL == buf) {
+               return -1;
+       }
+       cp = buf;
+
+       /*
+        * Copy the group name and passwd.
+        */
+
+       strcpy (cp, sgrp->sg_name);
+       cp += strlen (cp);
+       *cp++ = ':';
+
+       strcpy (cp, sgrp->sg_passwd);
+       cp += strlen (cp);
+       *cp++ = ':';
+
+       /*
+        * Copy the administrators, separating each from the other
+        * with a ",".
+        */
+
+       for (i = 0; NULL != sgrp->sg_adm[i]; i++) {
+               if (i > 0) {
+                       *cp++ = ',';
+               }
+
+               strcpy (cp, sgrp->sg_adm[i]);
+               cp += strlen (cp);
+       }
+       *cp = ':';
+       cp++;
+
+       /*
+        * Now do likewise with the group members.
+        */
+
+       for (i = 0; NULL != sgrp->sg_mem[i]; i++) {
+               if (i > 0) {
+                       *cp = ',';
+                       cp++;
+               }
+
+               strcpy (cp, sgrp->sg_mem[i]);
+               cp += strlen (cp);
+       }
+       *cp = '\n';
+       cp++;
+       *cp = '\0';
+
+       /*
+        * Output using the function which understands the line
+        * continuation conventions.
+        */
+
+       if (fputsx (buf, fp) == EOF) {
+               free (buf);
+               return -1;
+       }
+
+       free (buf);
+       return 0;
+}
+#else
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif                         /*} SHADOWGRP */
diff --git a/lib/gshadow_.h b/lib/gshadow_.h
new file mode 100644 (file)
index 0000000..269f819
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 1988 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *     $Id: gshadow_.h 2763 2009-04-23 09:57:03Z nekral-guest $
+ */
+
+#ifndef        _H_GSHADOW
+#define        _H_GSHADOW
+
+/*
+ * Shadow group security file structure
+ */
+
+struct sgrp {
+       char *sg_name;          /* group name */
+       char *sg_passwd;        /* group password */
+       char **sg_adm;          /* group administator list */
+       char **sg_mem;          /* group membership list */
+};
+
+/*
+ * Shadow group security file functions.
+ */
+
+#include <stdio.h>             /* for FILE */
+
+#if __STDC__
+/*@observer@*//*@null@*/struct sgrp *getsgent (void);
+/*@observer@*//*@null@*/struct sgrp *getsgnam (const char *);
+/*@observer@*//*@null@*/struct sgrp *sgetsgent (const char *);
+/*@observer@*//*@null@*/struct sgrp *fgetsgent (/*@null@*/FILE *);
+void setsgent (void);
+void endsgent (void);
+int putsgent (const struct sgrp *, FILE *);
+#else
+/*@observer@*//*@null@*/struct sgrp *getsgent ();
+/*@observer@*//*@null@*/struct sgrp *getsgnam ();
+/*@observer@*//*@null@*/struct sgrp *sgetsgent ();
+/*@observer@*//*@null@*/struct sgrp *fgetsgent ();
+void setsgent ();
+void endsgent ();
+int putsgent ();
+#endif
+
+#define        GSHADOW "/etc/gshadow"
+#endif                         /* ifndef _H_GSHADOW */
diff --git a/lib/lockpw.c b/lib/lockpw.c
new file mode 100644 (file)
index 0000000..e28e796
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 1992       , Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ifndef HAVE_LCKPWDF
+
+#ident "$Id: lockpw.c 1980 2008-04-27 00:40:09Z nekral-guest $"
+
+#include "prototypes.h"
+#include "defines.h"
+#include "pwio.h"
+#include "shadowio.h"
+/*
+ * lckpwdf - lock the password files
+ */
+int lckpwdf (void)
+{
+       int i;
+
+       /*
+        * We have 15 seconds to lock the whole mess
+        */
+
+       for (i = 0; i < 15; i++)
+               if (pw_lock ())
+                       break;
+               else
+                       sleep (1);
+
+       /*
+        * Did we run out of time?
+        */
+
+       if (i == 15)
+               return -1;
+
+       /*
+        * Nope, use any remaining time to lock the shadow password
+        * file.
+        */
+
+       for (; i < 15; i++)
+               if (spw_lock ())
+                       break;
+               else
+                       sleep (1);
+
+       /*
+        * Out of time yet?
+        */
+
+       if (i == 15) {
+               pw_unlock ();
+               return -1;
+       }
+
+       /*
+        * Nope - and both files are now locked.
+        */
+
+       return 0;
+}
+
+/*
+ * ulckpwdf - unlock the password files
+ */
+
+int ulckpwdf (void)
+{
+
+       /*
+        * Unlock both files.
+        */
+
+       return (pw_unlock () && spw_unlock ())? 0 : -1;
+}
+#else
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif
diff --git a/lib/nscd.c b/lib/nscd.c
new file mode 100644 (file)
index 0000000..d7fa2d5
--- /dev/null
@@ -0,0 +1,65 @@
+/* Author: Peter Vrabec <pvrabec@redhat.com> */
+
+#include <config.h>
+#ifdef USE_NSCD
+
+/* because of TEMP_FAILURE_RETRY */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <features.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <spawn.h>
+#include <errno.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include "defines.h"
+#include "nscd.h"
+
+#define MSG_NSCD_FLUSH_CACHE_FAILED "Failed to flush the nscd cache.\n"
+
+/*
+ * nscd_flush_cache - flush specified service buffer in nscd cache
+ */
+int nscd_flush_cache (const char *service)
+{
+       pid_t pid, termpid;
+       int err, status;
+       char *spawnedArgs[] = {"/usr/sbin/nscd", "nscd", "-i", service, NULL};
+       char *spawnedEnv[] = {NULL};
+
+       /* spawn process */
+       err = posix_spawn (&pid, spawnedArgs[0], NULL, NULL,
+                          spawnedArgs, spawnedEnv);
+       if(0 != err)
+       {
+               (void) fputs (_(MSG_NSCD_FLUSH_CACHE_FAILED), stderr);
+               (void) fprintf (stderr, "posix_spawn() error=%d\n", err);
+               return -1;
+       }
+
+       /* Wait for the spawned process to exit */
+       termpid = TEMP_FAILURE_RETRY (waitpid (pid, &status, 0));
+       if (-1 == termpid)
+       {
+               (void) fputs (_(MSG_NSCD_FLUSH_CACHE_FAILED), stderr);
+               perror("waitpid");
+               return -1;
+       }
+       else if (termpid != pid)
+       {
+               (void) fputs (_(MSG_NSCD_FLUSH_CACHE_FAILED), stderr);
+               (void) fprintf (stderr, "waitpid returned %ld != %ld\n",
+                              (long int) termpid, (long int) pid);
+               return -1;
+       }
+
+       return 0;
+}
+#else                          /* USE_NSCD */
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif                         /* USE_NSCD */
+
diff --git a/lib/nscd.h b/lib/nscd.h
new file mode 100644 (file)
index 0000000..a430b00
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _NSCD_H_
+#define _NSCD_H_
+
+/*
+ * nscd_flush_cache - flush specified service buffer in nscd cache
+ */
+#ifdef USE_NSCD
+extern int nscd_flush_cache (const char *service);
+#else
+#define nscd_flush_cache(service) (0)
+#endif
+
+#endif
diff --git a/lib/pam_defs.h b/lib/pam_defs.h
new file mode 100644 (file)
index 0000000..343fbb4
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 1999       , Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+#include <security/pam_appl.h>
+#ifdef HAVE_SECURITY_PAM_MISC_H
+# include <security/pam_misc.h>
+#endif
+#ifdef HAVE_SECURITY_OPENPAM_H
+# include <security/openpam.h>
+#endif
+
+
+static struct pam_conv conv = {
+       SHADOW_PAM_CONVERSATION,
+       NULL
+};
+
+/* compatibility with different versions of Linux-PAM */
+#if !HAVE_DECL_PAM_ESTABLISH_CRED
+#define PAM_ESTABLISH_CRED PAM_CRED_ESTABLISH
+#endif
+#if !HAVE_DECL_PAM_DELETE_CRED
+#define PAM_DELETE_CRED PAM_CRED_DELETE
+#endif
+#if !HAVE_DECL_PAM_NEW_AUTHTOK_REQD
+#define PAM_NEW_AUTHTOK_REQD PAM_AUTHTOKEN_REQD
+#endif
+#if !HAVE_DECL_PAM_DATA_SILENT
+#define PAM_DATA_SILENT 0
+#endif
diff --git a/lib/port.c b/lib/port.c
new file mode 100644 (file)
index 0000000..b18c239
--- /dev/null
@@ -0,0 +1,477 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: port.c 2130 2008-06-13 18:11:09Z nekral-guest $"
+
+#include <stdio.h>
+#include <ctype.h>
+#include <errno.h>
+#include "defines.h"
+#include "prototypes.h"
+#include "port.h"
+
+static FILE *ports;
+
+/*
+ * portcmp - compare the name of a port to a /etc/porttime entry
+ *
+ *     portcmp works like strcmp, except that if the last character
+ *     in a failing match is a '*', the match is considered to have
+ *     passed.  The "*" match is suppressed whenever the port is "SU",
+ *     which is the token the "su" command uses to validate access.
+ *     A match returns 0, failure returns non-zero.
+ */
+
+static int portcmp (const char *pattern, const char *port)
+{
+       const char *orig = port;
+
+       while (('\0' != *pattern) && (*pattern == *port)) {
+               pattern++;
+               port++;
+       }
+
+       if (('\0' == *pattern) && ('\0' == *port)) {
+               return 0;
+       }
+       if (('S' == orig[0]) && ('U' == orig[1]) && ('\0' == orig[2])) {
+               return 1;
+       }
+
+       return (*pattern == '*') ? 0 : 1;
+}
+
+/*
+ * setportent - open /etc/porttime file or rewind
+ *
+ *     the /etc/porttime file is rewound if already open, or
+ *     opened for reading.
+ */
+
+static void setportent (void)
+{
+       if (NULL != ports) {
+               rewind (ports);
+       } else {
+               ports = fopen (PORTS, "r");
+       }
+}
+
+/*
+ * endportent - close the /etc/porttime file
+ *
+ *     the /etc/porttime file is closed and the ports variable set
+ *     to NULL to indicate that the /etc/porttime file is no longer
+ *     open.
+ */
+
+static void endportent (void)
+{
+       if (NULL != ports) {
+               (void) fclose (ports);
+       }
+
+       ports = (FILE *) 0;
+}
+
+/*
+ * getportent - read a single entry from /etc/porttime
+ *
+ *     the next line in /etc/porttime is converted to a (struct port)
+ *     and a pointer to a static (struct port) is returned to the
+ *     invoker.  NULL is returned on either EOF or error.  errno is
+ *     set to EINVAL on error to distinguish the two conditions.
+ */
+
+static struct port *getportent (void)
+{
+       static struct port port;        /* static struct to point to         */
+       static char buf[BUFSIZ];        /* some space for stuff              */
+       static char *ttys[PORT_TTY + 1];        /* some pointers to tty names     */
+       static char *users[PORT_IDS + 1];       /* some pointers to user ids     */
+       static struct pt_time ptimes[PORT_TIMES + 1];   /* time ranges         */
+       char *cp;               /* pointer into line                 */
+       int dtime;              /* scratch time of day               */
+       int i, j;
+       int saveerr = errno;    /* errno value on entry              */
+
+       /*
+        * If the ports file is not open, open the file.  Do not rewind
+        * since we want to search from the beginning each time.
+        */
+
+       if (NULL == ports) {
+               setportent ();
+       }
+
+       if (NULL == ports) {
+               errno = saveerr;
+               return 0;
+       }
+
+       /*
+        * Common point for beginning a new line -
+        *
+        *      - read a line, and NUL terminate
+        *      - skip lines which begin with '#'
+        *      - parse off the tty names
+        *      - parse off a list of user names
+        *      - parse off a list of days and times
+        */
+
+      again:
+
+       /*
+        * Get the next line and remove the last character, which
+        * is a '\n'.  Lines which begin with '#' are all ignored.
+        */
+
+       if (fgets (buf, (int) sizeof buf, ports) == 0) {
+               errno = saveerr;
+               return 0;
+       }
+       if ('#' == buf[0]) {
+               goto again;
+       }
+
+       /*
+        * Get the name of the TTY device.  It is the first colon
+        * separated field, and is the name of the TTY with no
+        * leading "/dev".  The entry '*' is used to specify all
+        * TTY devices.
+        */
+
+       buf[strlen (buf) - 1] = 0;
+
+       port.pt_names = ttys;
+       for (cp = buf, j = 0; j < PORT_TTY; j++) {
+               port.pt_names[j] = cp;
+               while (('\0' != *cp) && (':' != *cp) && (',' != *cp)) {
+                       cp++;
+               }
+
+               if ('\0' == *cp) {
+                       goto again;     /* line format error */
+               }
+
+               if (':' == *cp) {       /* end of tty name list */
+                       break;
+               }
+
+               if (',' == *cp) {       /* end of current tty name */
+                       *cp++ = '\0';
+               }
+       }
+       *cp = '\0';
+       cp++;
+       port.pt_names[j + 1] = (char *) 0;
+
+       /*
+        * Get the list of user names.  It is the second colon
+        * separated field, and is a comma separated list of user
+        * names.  The entry '*' is used to specify all usernames.
+        * The last entry in the list is a (char *) 0 pointer.
+        */
+
+       if (':' != *cp) {
+               port.pt_users = users;
+               port.pt_users[0] = cp;
+
+               for (j = 1; ':' != *cp; cp++) {
+                       if ((',' == *cp) && (j < PORT_IDS)) {
+                               *cp = '\0';
+                               cp++;
+                               port.pt_users[j] = cp;
+                               j++;
+                       }
+               }
+               port.pt_users[j] = 0;
+       } else {
+               port.pt_users = 0;
+       }
+
+       if (':' != *cp) {
+               goto again;
+       }
+
+       *cp = '\0';
+       cp++;
+
+       /*
+        * Get the list of valid times.  The times field is the third
+        * colon separated field and is a list of days of the week and
+        * times during which this port may be used by this user.  The
+        * valid days are 'Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', and 'Sa'.
+        *
+        * In addition, the value 'Al' represents all 7 days, and 'Wk'
+        * represents the 5 weekdays.
+        *
+        * Times are given as HHMM-HHMM.  The ending time may be before
+        * the starting time.  Days are presumed to wrap at 0000.
+        */
+
+       if ('\0' == *cp) {
+               port.pt_times = 0;
+               return &port;
+       }
+
+       port.pt_times = ptimes;
+
+       /*
+        * Get the next comma separated entry
+        */
+
+       for (j = 0; ('\0' != *cp) && (j < PORT_TIMES); j++) {
+
+               /*
+                * Start off with no days of the week
+                */
+
+               port.pt_times[j].t_days = 0;
+
+               /*
+                * Check each two letter sequence to see if it is
+                * one of the abbreviations for the days of the
+                * week or the other two values.
+                */
+
+               for (i = 0;
+                    ('\0' != cp[i]) && ('\0' != cp[i + 1]) && isalpha (cp[i]);
+                    i += 2) {
+                       switch ((cp[i] << 8) | (cp[i + 1])) {
+                       case ('S' << 8) | 'u':
+                               port.pt_times[j].t_days |= 01;
+                               break;
+                       case ('M' << 8) | 'o':
+                               port.pt_times[j].t_days |= 02;
+                               break;
+                       case ('T' << 8) | 'u':
+                               port.pt_times[j].t_days |= 04;
+                               break;
+                       case ('W' << 8) | 'e':
+                               port.pt_times[j].t_days |= 010;
+                               break;
+                       case ('T' << 8) | 'h':
+                               port.pt_times[j].t_days |= 020;
+                               break;
+                       case ('F' << 8) | 'r':
+                               port.pt_times[j].t_days |= 040;
+                               break;
+                       case ('S' << 8) | 'a':
+                               port.pt_times[j].t_days |= 0100;
+                               break;
+                       case ('W' << 8) | 'k':
+                               port.pt_times[j].t_days |= 076;
+                               break;
+                       case ('A' << 8) | 'l':
+                               port.pt_times[j].t_days |= 0177;
+                               break;
+                       default:
+                               errno = EINVAL;
+                               return 0;
+                       }
+               }
+
+               /*
+                * The default is 'Al' if no days were seen.
+                */
+
+               if (0 == i) {
+                       port.pt_times[j].t_days = 0177;
+               }
+
+               /*
+                * The start and end times are separated from each
+                * other by a '-'.  The times are four digit numbers
+                * representing the times of day.
+                */
+
+               for (dtime = 0; ('\0' != cp[i]) && isdigit (cp[i]); i++) {
+                       dtime = dtime * 10 + cp[i] - '0';
+               }
+
+               if (('-' != cp[i]) || (dtime > 2400) || ((dtime % 100) > 59)) {
+                       goto again;
+               }
+               port.pt_times[j].t_start = dtime;
+               cp = cp + i + 1;
+
+               for (dtime = 0, i = 0;
+                    ('\0' != cp[i]) && isdigit (cp[i]);
+                    i++) {
+                       dtime = dtime * 10 + cp[i] - '0';
+               }
+
+               if (   ((',' != cp[i]) && ('\0' != cp[i]))
+                   || (dtime > 2400)
+                   || ((dtime % 100) > 59)) {
+                       goto again;
+               }
+
+               port.pt_times[j].t_end = dtime;
+               cp = cp + i + 1;
+       }
+
+       /*
+        * The end of the list is indicated by a pair of -1's for the
+        * start and end times.
+        */
+
+       port.pt_times[j].t_start = port.pt_times[j].t_end = -1;
+
+       return &port;
+}
+
+/*
+ * getttyuser - get ports information for user and tty
+ *
+ *     getttyuser() searches the ports file for an entry with a TTY
+ *     and user field both of which match the supplied TTY and
+ *     user name.  The file is searched from the beginning, so the
+ *     entries are treated as an ordered list.
+ */
+
+static struct port *getttyuser (const char *tty, const char *user)
+{
+       int i, j;
+       struct port *port;
+
+       setportent ();
+
+       while ((port = getportent ()) != NULL) {
+               if (   (0 == port->pt_names)
+                   || (0 == port->pt_users)) {
+                       continue;
+               }
+
+               for (i = 0; NULL != port->pt_names[i]; i++) {
+                       if (portcmp (port->pt_names[i], tty) == 0) {
+                               break;
+                       }
+               }
+
+               if (port->pt_names[i] == 0) {
+                       continue;
+               }
+
+               for (j = 0; NULL != port->pt_users[j]; j++) {
+                       if (   (strcmp (user, port->pt_users[j]) == 0)
+                           || (strcmp (port->pt_users[j], "*") == 0)) {
+                               break;
+                       }
+               }
+
+               if (port->pt_users[j] != 0) {
+                       break;
+               }
+       }
+       endportent ();
+       return port;
+}
+
+/*
+ * isttytime - tell if a given user may login at a particular time
+ *
+ *     isttytime searches the ports file for an entry which matches
+ *     the user name and TTY given.
+ */
+
+bool isttytime (const char *id, const char *port, time_t when)
+{
+       int i;
+       int dtime;
+       struct port *pp;
+       struct tm *tm;
+
+       /*
+        * Try to find a matching entry for this user.  Default to
+        * letting the user in - there are plenty of ways to have an
+        * entry to match all users.
+        */
+
+       pp = getttyuser (port, id);
+       if (NULL == pp) {
+               return true;
+       }
+
+       /*
+        * The entry is there, but has no time entries - don't
+        * ever let them login.
+        */
+
+       if (0 == pp->pt_times) {
+               return false;
+       }
+
+       /*
+        * The current time is converted to HHMM format for
+        * comparison against the time values in the TTY entry.
+        */
+
+       tm = localtime (&when);
+       dtime = tm->tm_hour * 100 + tm->tm_min;
+
+       /*
+        * Each time entry is compared against the current
+        * time.  For entries with the start after the end time,
+        * the comparison is made so that the time is between
+        * midnight and either the start or end time.
+        */
+
+       for (i = 0; pp->pt_times[i].t_start != -1; i++) {
+               if (!(pp->pt_times[i].t_days & PORT_DAY (tm->tm_wday))) {
+                       continue;
+               }
+
+               if (pp->pt_times[i].t_start <= pp->pt_times[i].t_end) {
+                       if (   (dtime >= pp->pt_times[i].t_start)
+                           && (dtime <= pp->pt_times[i].t_end)) {
+                               return true;
+                       }
+               } else {
+                       if (   (dtime >= pp->pt_times[i].t_start)
+                           || (dtime <= pp->pt_times[i].t_end)) {
+                               return true;
+                       }
+               }
+       }
+
+       /*
+        * No matching time entry was found, user shouldn't
+        * be let in right now.
+        */
+
+       return false;
+}
+
diff --git a/lib/port.h b/lib/port.h
new file mode 100644 (file)
index 0000000..8f07517
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 1989 - 1991, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * port.h - structure of /etc/porttime
+ *
+ *     $Id: port.h 1980 2008-04-27 00:40:09Z nekral-guest $
+ *
+ *     Each entry in /etc/porttime consists of a TTY device
+ *     name or "*" to indicate all TTY devices, followed by
+ *     a list of 1 or more user IDs or "*" to indicate all
+ *     user names, followed by a list of zero or more valid
+ *     login times.  Login time entries consist of zero or
+ *     more day names (Su, Mo, Tu, We, Th, Fr, Sa, Wk, Al)
+ *     followed by a pair of time values in HHMM format
+ *     separated by a "-".
+ */
+
+/*
+ * PORTS - Name of system port access time file.
+ * PORT_IDS - Allowable number of IDs per entry.
+ * PORT_TTY - Allowable number of TTYs per entry.
+ * PORT_TIMES - Allowable number of time entries per entry.
+ * PORT_DAY - Day of the week to a bit value (0 = Sunday).
+ */
+
+#define        PORTS   "/etc/porttime"
+#define        PORT_IDS        64
+#define        PORT_TTY        64
+#define        PORT_TIMES      24
+#define        PORT_DAY(day)   (1<<(day))
+
+/*
+ *     pt_names - pointer to array of device names in /dev/
+ *     pt_users - pointer to array of applicable user IDs.
+ *     pt_times - pointer to list of allowable time periods.
+ */
+
+struct port {
+       char **pt_names;
+       char **pt_users;
+       struct pt_time *pt_times;
+};
+
+/*
+ *     t_days - bit array for each day of the week (0 = Sunday)
+ *     t_start - starting time for this entry
+ *     t_end - ending time for this entry
+ */
+
+struct pt_time {
+       short t_days;
+       short t_start;
+       short t_end;
+};
diff --git a/lib/prototypes.h b/lib/prototypes.h
new file mode 100644 (file)
index 0000000..fb3b7c8
--- /dev/null
@@ -0,0 +1,406 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * prototypes.h
+ *
+ * prototypes of libmisc functions, and private lib functions.
+ *
+ * $Id: prototypes.h 2935 2009-05-18 18:32:17Z nekral-guest $
+ *
+ */
+
+#ifndef _PROTOTYPES_H
+#define _PROTOTYPES_H
+
+#include <sys/stat.h>
+#ifdef USE_UTMPX
+#include <utmpx.h>
+#else
+#include <utmp.h>
+#endif
+#include <sys/types.h>
+#include <pwd.h>
+#include <grp.h>
+#include <shadow.h>
+#include <lastlog.h>
+
+#include "defines.h"
+#include "commonio.h"
+
+extern char *Prog;
+
+/* addgrps.c */
+#if defined (HAVE_SETGROUPS) && ! defined (USE_PAM)
+extern int add_groups (const char *);
+#endif
+
+/* age.c */
+extern void agecheck (/*@null@*/const struct spwd *);
+extern int expire (const struct passwd *, /*@null@*/const struct spwd *);
+/* isexpired.c */
+extern int isexpired (const struct passwd *, /*@null@*/const struct spwd *);
+
+/* basename() renamed to Basename() to avoid libc name space confusion */
+/* basename.c */
+extern char *Basename (char *str);
+
+/* chowndir.c */
+extern int chown_tree (const char *, uid_t, uid_t, gid_t, gid_t);
+
+/* chowntty.c */
+extern void chown_tty (const struct passwd *);
+
+/* cleanup.c */
+typedef void (*cleanup_function) (/*@null@*/void *arg);
+void add_cleanup (cleanup_function pcf, /*@null@*/void *arg);
+void del_cleanup (cleanup_function pcf);
+void do_cleanups (void);
+
+/* cleanup_group.c */
+struct cleanup_info_mod {
+       char *audit_msg;
+       char *action;
+       char *name;
+};
+void cleanup_report_add_group (void *group_name);
+void cleanup_report_add_group_group (void *group_name);
+#ifdef SHADOWGRP
+void cleanup_report_add_group_gshadow (void *group_name);
+#endif
+void cleanup_report_del_group (void *group_name);
+void cleanup_report_del_group_group (void *group_name);
+#ifdef SHADOWGRP
+void cleanup_report_del_group_gshadow (void *group_name);
+#endif
+void cleanup_report_mod_passwd (void *cleanup_info);
+void cleanup_report_mod_group (void *cleanup_info);
+void cleanup_report_mod_gshadow (void *cleanup_info);
+void cleanup_unlock_group (/*@null@*/void *unused);
+#ifdef SHADOWGRP
+void cleanup_unlock_gshadow (/*@null@*/void *unused);
+#endif
+void cleanup_unlock_passwd (/*@null@*/void *unused);
+
+/* console.c */
+extern bool console (const char *);
+
+/* copydir.c */
+extern int copy_tree (const char *src_root, const char *dst_root,
+                      long int uid, long int gid);
+extern int remove_tree (const char *root);
+
+#ifdef WITH_SELINUX
+extern int selinux_file_context (const char *dst_name);
+#endif
+
+/* encrypt.c */
+extern char *pw_encrypt (const char *, const char *);
+
+/* entry.c */
+extern void pw_entry (const char *, struct passwd *);
+
+/* env.c */
+extern void addenv (const char *, /*@null@*/const char *);
+extern void initenv (void);
+extern void set_env (int, char *const *);
+extern void sanitize_env (void);
+
+/* fields.c */
+extern void change_field (char *, size_t, const char *);
+extern int valid_field (const char *, const char *);
+
+/* find_new_gid.c */
+extern int find_new_gid (bool sys_group,
+                         gid_t *gid,
+                         /*@null@*/gid_t const *preferred_gid);
+
+/* find_new_uid.c */
+extern int find_new_uid (bool sys_user,
+                         uid_t *uid,
+                         /*@null@*/uid_t const *preferred_uid);
+
+/* get_gid.c */
+extern int get_gid (const char *gidstr, gid_t *gid);
+
+/* getgr_nam_gid.c */
+extern /*@null@*/struct group *getgr_nam_gid (const char *grname);
+
+/* getlong.c */
+extern int getlong (const char *numstr, /*@out@*/long int *result);
+
+/* get_pid.c */
+extern int get_pid (const char *pidstr, pid_t *pid);
+
+/* getrange */
+extern int getrange (char *range,
+                     unsigned long *min, bool *has_min,
+                     unsigned long *max, bool *has_max);
+
+/* get_uid.c */
+extern int get_uid (const char *uidstr, uid_t *uid);
+
+/* getulong.c */
+extern int getulong (const char *numstr, /*@out@*/unsigned long int *result);
+
+/* fputsx.c */
+extern /*@null@*/char *fgetsx (/*@returned@*/ /*@out@*/char *, int, FILE *);
+extern int fputsx (const char *, FILE *);
+
+/* groupio.c */
+extern void __gr_del_entry (const struct commonio_entry *ent);
+extern /*@observer@*/const struct commonio_db *__gr_get_db (void);
+extern /*@dependent@*/ /*@null@*/struct commonio_entry *__gr_get_head (void);
+extern void __gr_set_changed (void);
+
+/* groupmem.c */
+extern /*@null@*/ /*@only@*/struct group *__gr_dup (const struct group *grent);
+extern void gr_free (/*@out@*/ /*@only@*/struct group *grent);
+
+/* hushed.c */
+extern bool hushed (const char *username);
+
+/* audit_help.c */
+#ifdef WITH_AUDIT
+extern int audit_fd;
+extern void audit_help_open (void);
+/* Use AUDIT_NO_ID when a name is provided to audit_logger instead of an ID */
+#define AUDIT_NO_ID    ((unsigned int) -1)
+typedef enum {
+       SHADOW_AUDIT_FAILURE = 0,
+       SHADOW_AUDIT_SUCCESS = 1} shadow_audit_result;
+extern void audit_logger (int type, const char *pgname, const char *op,
+                          const char *name, unsigned int id,
+                          shadow_audit_result result);
+void audit_logger_message (const char *message, shadow_audit_result result);
+#endif
+
+/* limits.c */
+#ifndef USE_PAM
+extern void setup_limits (const struct passwd *);
+#endif
+
+/* list.c */
+extern /*@only@*/ /*@out@*/char **add_list (/*@returned@*/ /*@only@*/char **, const char *);
+extern /*@only@*/ /*@out@*/char **del_list (/*@returned@*/ /*@only@*/char **, const char *);
+extern /*@only@*/ /*@out@*/char **dup_list (char *const *);
+extern bool is_on_list (char *const *list, const char *member);
+extern /*@only@*/char **comma_to_list (const char *);
+
+/* log.c */
+extern void dolastlog (
+       struct lastlog *ll,
+       const struct passwd *pw,
+       /*@unique@*/const char *line,
+       /*@unique@*/const char *host);
+
+/* login_nopam.c */
+extern int login_access (const char *user, const char *from);
+
+/* loginprompt.c */
+extern void login_prompt (const char *, char *, int);
+
+/* mail.c */
+extern void mailcheck (void);
+
+/* motd.c */
+extern void motd (void);
+
+/* myname.c */
+extern /*@null@*/struct passwd *get_my_pwent (void);
+
+/* pam_pass_non_interractive.c */
+#ifdef USE_PAM
+extern int do_pam_passwd_non_interractive (const char *pam_service,
+                                           const char *username,
+                                           const char* password);
+#endif                         /* USE_PAM */
+
+/* obscure.c */
+#ifndef USE_PAM
+extern int obscure (const char *, const char *, const struct passwd *);
+#endif
+
+/* pam_pass.c */
+#ifdef USE_PAM
+extern void do_pam_passwd (const char *user, bool silent, bool change_expired);
+#endif
+
+/* port.c */
+extern bool isttytime (const char *, const char *, time_t);
+
+/* pwd2spwd.c */
+#ifndef USE_PAM
+extern struct spwd *pwd_to_spwd (const struct passwd *);
+#endif
+
+/* pwdcheck.c */
+#ifndef USE_PAM
+extern void passwd_check (const char *, const char *, const char *);
+#endif
+
+/* pwd_init.c */
+extern void pwd_init (void);
+
+/* pwio.c */
+extern void __pw_del_entry (const struct commonio_entry *ent);
+extern struct commonio_db *__pw_get_db (void);
+extern /*@dependent@*/ /*@null@*/struct commonio_entry *__pw_get_head (void);
+
+/* pwmem.c */
+extern /*@null@*/ /*@only@*/struct passwd *__pw_dup (const struct passwd *pwent);
+extern void pw_free (/*@out@*/ /*@only@*/struct passwd *pwent);
+
+/* rlogin.c */
+extern int do_rlogin (const char *remote_host, char *name, size_t namelen,
+                      char *term, size_t termlen);
+
+/* salt.c */
+extern /*@observer@*/const char *crypt_make_salt (/*@null@*/const char *meth, /*@null@*/void *arg);
+
+/* setugid.c */
+extern int setup_groups (const struct passwd *info);
+extern int change_uid (const struct passwd *info);
+#if (defined HAVE_INITGROUPS) && (! defined USE_PAM)
+extern int setup_uid_gid (const struct passwd *info, bool is_console);
+#else
+extern int setup_uid_gid (const struct passwd *info);
+#endif
+
+/* setup.c */
+extern void setup (struct passwd *);
+
+/* setupenv.c */
+extern void setup_env (struct passwd *);
+
+/* sgetgrent.c */
+extern struct group *sgetgrent (const char *buf);
+
+/* sgetpwent.c */
+extern struct passwd *sgetpwent (const char *buf);
+
+/* sgetspent.c */
+#ifndef HAVE_SGETSPENT
+extern struct spwd *sgetspent (const char *string);
+#endif
+
+/* sgroupio.c */
+extern void __sgr_del_entry (const struct commonio_entry *ent);
+extern /*@null@*/ /*@only@*/struct sgrp *__sgr_dup (const struct sgrp *sgent);
+extern void sgr_free (/*@out@*/ /*@only@*/struct sgrp *sgent);
+extern /*@dependent@*/ /*@null@*/struct commonio_entry *__sgr_get_head (void);
+extern void __sgr_set_changed (void);
+
+/* shadowio.c */
+extern /*@dependent@*/ /*@null@*/struct commonio_entry *__spw_get_head (void);
+extern void __spw_del_entry (const struct commonio_entry *ent);
+
+/* shadowmem.c */
+extern /*@null@*/ /*@only@*/struct spwd *__spw_dup (const struct spwd *spent);
+extern void spw_free (/*@out@*/ /*@only@*/struct spwd *spent);
+
+/* shell.c */
+extern int shell (const char *file, /*@null@*/const char *arg, char *const envp[]);
+
+/* system.c */
+extern int safe_system (const char *command,
+                        const char *argv[],
+                        const char *env[],
+                        int ignore_stderr);
+
+/* strtoday.c */
+extern long strtoday (const char *);
+
+/* suauth.c */
+extern int check_su_auth (const char *actual_id, const char *wanted_id);
+
+/* sulog.c */
+extern void sulog (const char *tty,
+                   bool success,
+                   const char *oldname,
+                   const char *name);
+
+/* sub.c */
+extern void subsystem (const struct passwd *);
+
+/* ttytype.c */
+extern void ttytype (const char *);
+
+/* tz.c */
+#ifndef USE_PAM
+extern char *tz (const char *);
+#endif
+
+/* ulimit.c */
+extern int set_filesize_limit (int blocks);
+
+/* user_busy.c */
+extern int user_busy (const char *name, uid_t uid);
+
+/* utmp.c */
+extern /*@null@*/struct utmp *get_current_utmp (void);
+extern struct utmp *prepare_utmp (const char *name,
+                                  const char *line,
+                                  const char *host,
+                                  /*@null@*/const struct utmp *ut);
+extern int setutmp (struct utmp *ut);
+#ifdef USE_UTMPX
+extern struct utmpx *prepare_utmpx (const char *name,
+                                    const char *line,
+                                    const char *host,
+                                    /*@null@*/const struct utmp *ut);
+extern int setutmpx (struct utmpx *utx);
+#endif                         /* USE_UTMPX */
+
+/* valid.c */
+extern bool valid (const char *, const struct passwd *);
+
+/* xmalloc.c */
+extern /*@maynotreturn@*/ /*@out@*//*@only@*/char *xmalloc (size_t size)
+  /*@ensures MaxSet(result) == (size - 1); @*/;
+extern /*@maynotreturn@*/ /*@only@*/char *xstrdup (const char *);
+
+/* xgetpwnam.c */
+extern /*@null@*/ /*@only@*/struct passwd *xgetpwnam (const char *);
+/* xgetpwuid.c */
+extern /*@null@*/ /*@only@*/struct passwd *xgetpwuid (uid_t);
+/* xgetgrnam.c */
+extern /*@null@*/ /*@only@*/struct group *xgetgrnam (const char *);
+/* xgetgrgid.c */
+extern /*@null@*/ /*@only@*/struct group *xgetgrgid (gid_t);
+/* xgetspnam.c */
+extern /*@null@*/ /*@only@*/struct spwd *xgetspnam(const char *);
+
+/* yesno.c */
+extern bool yes_or_no (bool read_only);
+
+#endif                         /* _PROTOTYPES_H */
diff --git a/lib/pwauth.c b/lib/pwauth.c
new file mode 100644 (file)
index 0000000..bfa5c91
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 1992 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ifndef USE_PAM
+#ident "$Id: pwauth.c 2782 2009-04-23 20:46:01Z nekral-guest $"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "pwauth.h"
+#include "getdef.h"
+#ifdef SKEY
+#include <skey.h>
+#endif
+#ifdef __linux__               /* standard password prompt by default */
+static const char *PROMPT = gettext_noop ("Password: ");
+#else
+static const char *PROMPT = gettext_noop ("%s's Password: ");
+#endif
+
+bool wipe_clear_pass = true;
+/*@null@*/char *clear_pass = NULL;
+
+/*
+ * pw_auth - perform getpass/crypt authentication
+ *
+ *     pw_auth gets the user's cleartext password and encrypts it
+ *     using the salt in the encrypted password. The results are
+ *     compared.
+ */
+
+int pw_auth (const char *cipher,
+             const char *user,
+             int reason,
+             /*@null@*/const char *input)
+{
+       char prompt[1024];
+       char *clear = NULL;
+       const char *cp;
+       int retval;
+
+#ifdef SKEY
+       bool use_skey = false;
+       char challenge_info[40];
+       struct skey skey;
+#endif
+
+       /*
+        * There are programs for adding and deleting authentication data.
+        */
+
+       if ((PW_ADD == reason) || (PW_DELETE == reason)) {
+               return 0;
+       }
+
+       /*
+        * There are even programs for changing the user name ...
+        */
+
+       if ((PW_CHANGE == reason) && (NULL != input)) {
+               return 0;
+       }
+
+       /*
+        * WARNING:
+        *
+        * When we change a password and we are root, we don't prompt.
+        * This is so root can change any password without having to
+        * know it.  This is a policy decision that might have to be
+        * revisited.
+        */
+
+       if ((PW_CHANGE == reason) && (getuid () == 0)) {
+               return 0;
+       }
+
+       /*
+        * WARNING:
+        *
+        * When we are logging in a user with no ciphertext password,
+        * we don't prompt for the password or anything.  In reality
+        * the user could just hit <ENTER>, so it doesn't really
+        * matter.
+        */
+
+       if ((NULL == cipher) || ('\0' == *cipher)) {
+               return 0;
+       }
+
+#ifdef SKEY
+       /*
+        * If the user has an S/KEY entry show them the pertinent info
+        * and then we can try validating the created cyphertext and the SKEY.
+        * If there is no SKEY information we default to not using SKEY.
+        */
+
+# ifdef SKEY_BSD_STYLE
+       /*
+        * Some BSD updates to the S/KEY API adds a fourth parameter; the
+        * sizeof of the challenge info buffer.
+        */
+#  define skeychallenge(s,u,c) skeychallenge(s,u,c,sizeof(c))
+# endif
+
+       if (skeychallenge (&skey, user, challenge_info) == 0) {
+               use_skey = true;
+       }
+#endif
+
+       /*
+        * Prompt for the password as required.  FTPD and REXECD both
+        * get the cleartext password for us.
+        */
+
+       if ((PW_FTP != reason) && (PW_REXEC != reason) && (NULL == input)) {
+               cp = getdef_str ("LOGIN_STRING");
+               if (NULL == cp) {
+                       cp = _(PROMPT);
+               }
+#ifdef SKEY
+               if (use_skey) {
+                       printf ("[%s]\n", challenge_info);
+               }
+#endif
+
+               snprintf (prompt, sizeof prompt, cp, user);
+               clear = getpass (prompt);
+               if (NULL == clear) {
+                       static char c[1];
+
+                       c[0] = '\0';
+                       clear = c;
+               }
+               input = clear;
+       }
+
+       /*
+        * Convert the cleartext password into a ciphertext string.
+        * If the two match, the return value will be zero, which is
+        * SUCCESS. Otherwise we see if SKEY is being used and check
+        * the results there as well.
+        */
+
+       retval = strcmp (pw_encrypt (input, cipher), cipher);
+
+#ifdef  SKEY
+       /*
+        * If (1) The password fails to match, and
+        * (2) The password is empty and
+        * (3) We are using OPIE or S/Key, then
+        * ...Re-prompt, with echo on.
+        * -- AR 8/22/1999
+        */
+       if ((0 != retval) && ('\0' == input[0]) && use_skey) {
+               clear = getpass (prompt);
+               if (NULL == clear) {
+                       static char c[1];
+
+                       c[0] = '\0';
+                       clear = c;
+               }
+               input = clear;
+       }
+
+       if ((0 != retval) && use_skey) {
+               int passcheck = -1;
+
+               if (skeyverify (&skey, input) == 0) {
+                       passcheck = skey.n;
+               }
+               if (passcheck > 0) {
+                       retval = 0;
+               }
+       }
+#endif
+
+       /*
+        * Things like RADIUS authentication may need the password -
+        * if the external variable wipe_clear_pass is zero, we will
+        * not wipe it (the caller should wipe clear_pass when it is
+        * no longer needed).  --marekm
+        */
+
+       clear_pass = clear;
+       if (wipe_clear_pass && (NULL != clear) && ('\0' != *clear)) {
+               strzero (clear);
+       }
+       return retval;
+}
+#else                          /* !USE_PAM */
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif                         /* !USE_PAM */
diff --git a/lib/pwauth.h b/lib/pwauth.h
new file mode 100644 (file)
index 0000000..1b38343
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1992 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2009       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *     $Id: pwauth.h 2777 2009-04-23 17:43:27Z nekral-guest $
+ */
+
+#ifndef USE_PAM
+int pw_auth (const char *cipher,
+             const char *user,
+             int flag,
+             /*@null@*/const char *input);
+#endif                         /* !USE_PAM */
+
+/*
+ * Local access
+ */
+
+#define        PW_SU           1
+#define        PW_LOGIN        2
+
+/*
+ * Administrative functions
+ */
+
+#define        PW_ADD          101
+#define        PW_CHANGE       102
+#define        PW_DELETE       103
+
+/*
+ * Network access
+ */
+
+#define        PW_TELNET       201
+#define        PW_RLOGIN       202
+#define        PW_FTP          203
+#define        PW_REXEC        204
diff --git a/lib/pwio.c b/lib/pwio.c
new file mode 100644 (file)
index 0000000..112dc61
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001       , Michał Moskal
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: pwio.c 2783 2009-04-23 21:19:02Z nekral-guest $"
+
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+#include <stdio.h>
+#include "commonio.h"
+#include "pwio.h"
+
+static /*@null@*/ /*@only@*/void *passwd_dup (const void *ent)
+{
+       const struct passwd *pw = ent;
+
+       return __pw_dup (pw);
+}
+
+static void passwd_free (/*@out@*/ /*@only@*/void *ent)
+{
+       struct passwd *pw = ent;
+
+       pw_free (pw);
+}
+
+static const char *passwd_getname (const void *ent)
+{
+       const struct passwd *pw = ent;
+
+       return pw->pw_name;
+}
+
+static void *passwd_parse (const char *line)
+{
+       return (void *) sgetpwent (line);
+}
+
+static int passwd_put (const void *ent, FILE * file)
+{
+       const struct passwd *pw = ent;
+
+       return (putpwent (pw, file) == -1) ? -1 : 0;
+}
+
+static struct commonio_ops passwd_ops = {
+       passwd_dup,
+       passwd_free,
+       passwd_getname,
+       passwd_parse,
+       passwd_put,
+       fgets,
+       fputs,
+       NULL,                   /* open_hook */
+       NULL                    /* close_hook */
+};
+
+static struct commonio_db passwd_db = {
+       PASSWD_FILE,            /* filename */
+       &passwd_ops,            /* ops */
+       NULL,                   /* fp */
+#ifdef WITH_SELINUX
+       NULL,                   /* scontext */
+#endif
+       NULL,                   /* head */
+       NULL,                   /* tail */
+       NULL,                   /* cursor */
+       false,                  /* changed */
+       false,                  /* isopen */
+       false,                  /* locked */
+       false                   /* readonly */
+};
+
+int pw_setdbname (const char *filename)
+{
+       return commonio_setname (&passwd_db, filename);
+}
+
+/*@observer@*/const char *pw_dbname (void)
+{
+       return passwd_db.filename;
+}
+
+int pw_lock (void)
+{
+       return commonio_lock (&passwd_db);
+}
+
+int pw_open (int mode)
+{
+       return commonio_open (&passwd_db, mode);
+}
+
+/*@observer@*/ /*@null@*/const struct passwd *pw_locate (const char *name)
+{
+       return commonio_locate (&passwd_db, name);
+}
+
+/*@observer@*/ /*@null@*/const struct passwd *pw_locate_uid (uid_t uid)
+{
+       const struct passwd *pwd;
+
+       pw_rewind ();
+       while (   ((pwd = pw_next ()) != NULL)
+              && (pwd->pw_uid != uid)) {
+       }
+
+       return pwd;
+}
+
+int pw_update (const struct passwd *pw)
+{
+       return commonio_update (&passwd_db, (const void *) pw);
+}
+
+int pw_remove (const char *name)
+{
+       return commonio_remove (&passwd_db, name);
+}
+
+int pw_rewind (void)
+{
+       return commonio_rewind (&passwd_db);
+}
+
+/*@observer@*/ /*@null@*/const struct passwd *pw_next (void)
+{
+       return commonio_next (&passwd_db);
+}
+
+int pw_close (void)
+{
+       return commonio_close (&passwd_db);
+}
+
+int pw_unlock (void)
+{
+       return commonio_unlock (&passwd_db);
+}
+
+/*@null@*/struct commonio_entry *__pw_get_head (void)
+{
+       return passwd_db.head;
+}
+
+void __pw_del_entry (const struct commonio_entry *ent)
+{
+       commonio_del_entry (&passwd_db, ent);
+}
+
+struct commonio_db *__pw_get_db (void)
+{
+       return &passwd_db;
+}
+
+static int pw_cmp (const void *p1, const void *p2)
+{
+       uid_t u1, u2;
+
+       if ((*(struct commonio_entry **) p1)->eptr == NULL)
+               return 1;
+       if ((*(struct commonio_entry **) p2)->eptr == NULL)
+               return -1;
+
+       u1 = ((struct passwd *) (*(struct commonio_entry **) p1)->eptr)->pw_uid;
+       u2 = ((struct passwd *) (*(struct commonio_entry **) p2)->eptr)->pw_uid;
+
+       if (u1 < u2)
+               return -1;
+       else if (u1 > u2)
+               return 1;
+       else
+               return 0;
+}
+
+/* Sort entries by UID */
+int pw_sort ()
+{
+       return commonio_sort (&passwd_db, pw_cmp);
+}
diff --git a/lib/pwio.h b/lib/pwio.h
new file mode 100644 (file)
index 0000000..0ee961d
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2005       , Michał Moskal
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id: pwio.h 2783 2009-04-23 21:19:02Z nekral-guest $ */
+#ifndef _PWIO_H
+#define _PWIO_H
+
+#include <sys/types.h>
+#include <pwd.h>
+
+extern int pw_close (void);
+extern /*@observer@*/ /*@null@*/const struct passwd *pw_locate (const char *name);
+extern /*@observer@*/ /*@null@*/const struct passwd *pw_locate_uid (uid_t uid);
+extern int pw_lock (void);
+extern int pw_setdbname (const char *filename);
+extern /*@observer@*/const char *pw_dbname (void);
+extern /*@observer@*/ /*@null@*/const struct passwd *pw_next (void);
+extern int pw_open (int mode);
+extern int pw_remove (const char *name);
+extern int pw_rewind (void);
+extern int pw_unlock (void);
+extern int pw_update (const struct passwd *pw);
+extern int pw_sort (void);
+
+#endif
diff --git a/lib/pwmem.c b/lib/pwmem.c
new file mode 100644 (file)
index 0000000..d83e3dd
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001       , Michał Moskal
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: pwmem.c 2777 2009-04-23 17:43:27Z nekral-guest $"
+
+#include <stdio.h>
+#include "defines.h"
+#include "prototypes.h"
+#include "pwio.h"
+
+/*@null@*/ /*@only@*/struct passwd *__pw_dup (const struct passwd *pwent)
+{
+       struct passwd *pw;
+
+       pw = (struct passwd *) malloc (sizeof *pw);
+       if (NULL == pw) {
+               return NULL;
+       }
+       *pw = *pwent;
+       pw->pw_name = strdup (pwent->pw_name);
+       if (NULL == pw->pw_name) {
+               return NULL;
+       }
+       pw->pw_passwd = strdup (pwent->pw_passwd);
+       if (NULL == pw->pw_passwd) {
+               return NULL;
+       }
+       pw->pw_gecos = strdup (pwent->pw_gecos);
+       if (NULL == pw->pw_gecos) {
+               return NULL;
+       }
+       pw->pw_dir = strdup (pwent->pw_dir);
+       if (NULL == pw->pw_dir) {
+               return NULL;
+       }
+       pw->pw_shell = strdup (pwent->pw_shell);
+       if (NULL == pw->pw_shell) {
+               return NULL;
+       }
+
+       return pw;
+}
+
+void pw_free (/*@out@*/ /*@only@*/struct passwd *pwent)
+{
+       free (pwent->pw_name);
+       memzero (pwent->pw_passwd, strlen (pwent->pw_passwd));
+       free (pwent->pw_passwd);
+       free (pwent->pw_gecos);
+       free (pwent->pw_dir);
+       free (pwent->pw_shell);
+       free (pwent);
+}
+
diff --git a/lib/sgetgrent.c b/lib/sgetgrent.c
new file mode 100644 (file)
index 0000000..ff87bb1
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: sgetgrent.c 2579 2009-03-21 20:29:58Z nekral-guest $"
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <grp.h>
+#include "defines.h"
+#include "prototypes.h"
+
+#define        NFIELDS 4
+
+/*
+ * list - turn a comma-separated string into an array of (char *)'s
+ *
+ *     list() converts the comma-separated list of member names into
+ *     an array of character pointers.
+ *
+ *     WARNING: I profiled this once with and without strchr() calls
+ *     and found that using a register variable and an explicit loop
+ *     works best.  For large /etc/group files, this is a major win.
+ *
+ * FINALLY added dynamic allocation.  Still need to fix sgetsgent().
+ *  --marekm
+ */
+static char **list (char *s)
+{
+       static char **members = 0;
+       static int size = 0;    /* max members + 1 */
+       int i;
+       char **rbuf;
+
+       i = 0;
+       for (;;) {
+               /* check if there is room for another pointer (to a group
+                  member name, or terminating NULL).  */
+               if (i >= size) {
+                       size = i + 100; /* at least: i + 1 */
+                       if (members) {
+                               rbuf =
+                                   realloc (members, size * sizeof (char *));
+                       } else {
+                               /* for old (before ANSI C) implementations of
+                                  realloc() that don't handle NULL properly */
+                               rbuf = malloc (size * sizeof (char *));
+                       }
+                       if (!rbuf) {
+                               if (members)
+                                       free (members);
+                               members = 0;
+                               size = 0;
+                               return (char **) 0;
+                       }
+                       members = rbuf;
+               }
+               if (!s || s[0] == '\0')
+                       break;
+               members[i++] = s;
+               while (('\0' != *s) && (',' != *s)) {
+                       s++;
+               }
+               if ('\0' != *s) {
+                       *s++ = '\0';
+               }
+       }
+       members[i] = (char *) 0;
+       return members;
+}
+
+
+struct group *sgetgrent (const char *buf)
+{
+       static char *grpbuf = 0;
+       static size_t size = 0;
+       static char *grpfields[NFIELDS];
+       static struct group grent;
+       int i;
+       char *cp;
+
+       if (strlen (buf) + 1 > size) {
+               /* no need to use realloc() here - just free it and
+                  allocate a larger block */
+               if (grpbuf)
+                       free (grpbuf);
+               size = strlen (buf) + 1000;     /* at least: strlen(buf) + 1 */
+               grpbuf = malloc (size);
+               if (!grpbuf) {
+                       size = 0;
+                       return 0;
+               }
+       }
+       strcpy (grpbuf, buf);
+
+       cp = strrchr (grpbuf, '\n');
+       if (NULL != cp) {
+               *cp = '\0';
+       }
+
+       for (cp = grpbuf, i = 0; (i < NFIELDS) && (NULL != cp); i++) {
+               grpfields[i] = cp;
+               cp = strchr (cp, ':');
+               if (NULL != cp) {
+                       *cp = '\0';
+                       cp++;
+               }
+       }
+       if (i < (NFIELDS - 1) || *grpfields[2] == '\0') {
+               return (struct group *) 0;
+       }
+       grent.gr_name = grpfields[0];
+       grent.gr_passwd = grpfields[1];
+       if (get_gid (grpfields[2], &grent.gr_gid) == 0) {
+               return (struct group *) 0;
+       }
+       grent.gr_mem = list (grpfields[3]);
+       if (NULL == grent.gr_mem) {
+               return (struct group *) 0;      /* out of memory */
+       }
+
+       return &grent;
+}
+
diff --git a/lib/sgetpwent.c b/lib/sgetpwent.c
new file mode 100644 (file)
index 0000000..80a7adc
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: sgetpwent.c 2581 2009-03-21 20:45:35Z nekral-guest $"
+
+#include <sys/types.h>
+#include "defines.h"
+#include <stdio.h>
+#include <pwd.h>
+#include "prototypes.h"
+
+#define        NFIELDS 7
+
+/*
+ * sgetpwent - convert a string to a (struct passwd)
+ *
+ * sgetpwent() parses a string into the parts required for a password
+ * structure.  Strict checking is made for the UID and GID fields and
+ * presence of the correct number of colons.  Any failing tests result
+ * in a NULL pointer being returned.
+ *
+ * NOTE: This function uses hard-coded string scanning functions for
+ *     performance reasons.  I am going to come up with some conditional
+ *     compilation glarp to improve on this in the future.
+ */
+struct passwd *sgetpwent (const char *buf)
+{
+       static struct passwd pwent;
+       static char pwdbuf[1024];
+       register int i;
+       register char *cp;
+       char *fields[NFIELDS];
+
+       /*
+        * Copy the string to a static buffer so the pointers into
+        * the password structure remain valid.
+        */
+
+       if (strlen (buf) >= sizeof pwdbuf)
+               return 0;       /* fail if too long */
+       strcpy (pwdbuf, buf);
+
+       /*
+        * Save a pointer to the start of each colon separated
+        * field.  The fields are converted into NUL terminated strings.
+        */
+
+       for (cp = pwdbuf, i = 0; (i < NFIELDS) && (NULL != cp); i++) {
+               fields[i] = cp;
+               while (('\0' != *cp) && (':' != *cp)) {
+                       cp++;
+               }
+
+               if ('\0' != *cp) {
+                       *cp = '\0';
+                       cp++;
+               } else {
+                       cp = NULL;
+               }
+       }
+
+       /*
+        * There must be exactly NFIELDS colon separated fields or
+        * the entry is invalid.  Also, the UID and GID must be non-blank.
+        */
+
+       if (i != NFIELDS || *fields[2] == '\0' || *fields[3] == '\0')
+               return NULL;
+
+       /*
+        * Each of the fields is converted the appropriate data type
+        * and the result assigned to the password structure.  If the
+        * UID or GID does not convert to an integer value, a NULL
+        * pointer is returned.
+        */
+
+       pwent.pw_name = fields[0];
+       pwent.pw_passwd = fields[1];
+       if (get_uid (fields[2], &pwent.pw_uid) == 0) {
+               return NULL;
+       }
+       if (get_gid (fields[3], &pwent.pw_gid) == 0) {
+               return NULL;
+       }
+       pwent.pw_gecos = fields[4];
+       pwent.pw_dir = fields[5];
+       pwent.pw_shell = fields[6];
+
+       return &pwent;
+}
+
diff --git a/lib/sgetspent.c b/lib/sgetspent.c
new file mode 100644 (file)
index 0000000..20531eb
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2009       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+/* Newer versions of Linux libc already have shadow support.  */
+#ifndef HAVE_SGETSPENT
+
+#ident "$Id$"
+
+#include <sys/types.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <stdio.h>
+#define        FIELDS  9
+#define        OFIELDS 5
+/*
+ * sgetspent - convert string in shadow file format to (struct spwd *)
+ */
+struct spwd *sgetspent (const char *string)
+{
+       static char spwbuf[1024];
+       static struct spwd spwd;
+       char *fields[FIELDS];
+       char *cp;
+       char *cpp;
+       int i;
+
+       /*
+        * Copy string to local buffer.  It has to be tokenized and we
+        * have to do that to our private copy.
+        */
+
+       if (strlen (string) >= sizeof spwbuf) {
+               return 0;       /* fail if too long */
+       }
+       strcpy (spwbuf, string);
+
+       cp = strrchr (spwbuf, '\n');
+       if (NULL != cp) {
+               *cp = '\0';
+       }
+
+       /*
+        * Tokenize the string into colon separated fields.  Allow up to
+        * FIELDS different fields.
+        */
+
+       for (cp = spwbuf, i = 0; ('\0' != *cp) && (i < FIELDS); i++) {
+               fields[i] = cp;
+               while (('\0' != *cp) && (':' != *cp)) {
+                       cp++;
+               }
+
+               if ('\0' != *cp) {
+                       *cp = '\0';
+                       cp++;
+               }
+       }
+
+       if (i == (FIELDS - 1)) {
+               fields[i++] = cp;
+       }
+
+       if ( ((NULL != cp) && ('\0' != *cp)) ||
+            ((i != FIELDS) && (i != OFIELDS)) ) {
+               return 0;
+       }
+
+       /*
+        * Start populating the structure.  The fields are all in
+        * static storage, as is the structure we pass back.
+        */
+
+       spwd.sp_namp = fields[0];
+       spwd.sp_pwdp = fields[1];
+
+       /*
+        * Get the last changed date.  For all of the integer fields,
+        * we check for proper format.  It is an error to have an
+        * incorrectly formatted number.
+        */
+
+       if (fields[2][0] == '\0') {
+               spwd.sp_lstchg = -1;
+       } else if (   (getlong (fields[2], &spwd.sp_lstchg) == 0)
+                  || (spwd.sp_lstchg < 0)) {
+               return 0;
+       }
+
+       /*
+        * Get the minimum period between password changes.
+        */
+
+       if (fields[3][0] == '\0') {
+               spwd.sp_min = -1;
+       } else if (   (getlong (fields[3], &spwd.sp_min) == 0)
+                  || (spwd.sp_min < 0)) {
+               return 0;
+       }
+
+       /*
+        * Get the maximum number of days a password is valid.
+        */
+
+       if (fields[4][0] == '\0') {
+               spwd.sp_max = -1;
+       } else if (   (getlong (fields[4], &spwd.sp_max) == 0)
+                  || (spwd.sp_max < 0)) {
+               return 0;
+       }
+
+       /*
+        * If there are only OFIELDS fields (this is a SVR3.2 /etc/shadow
+        * formatted file), initialize the other field members to -1.
+        */
+
+       if (i == OFIELDS) {
+               spwd.sp_warn   = -1;
+               spwd.sp_inact  = -1;
+               spwd.sp_expire = -1;
+               spwd.sp_flag   = SHADOW_SP_FLAG_UNSET;
+
+               return &spwd;
+       }
+
+       /*
+        * Get the number of days of password expiry warning.
+        */
+
+       if (fields[5][0] == '\0') {
+               spwd.sp_warn = -1;
+       } else if (   (getlong (fields[5], &spwd.sp_warn) == 0)
+                  || (spwd.sp_warn < 0)) {
+               return 0;
+       }
+
+       /*
+        * Get the number of days of inactivity before an account is
+        * disabled.
+        */
+
+       if (fields[6][0] == '\0') {
+               spwd.sp_inact = -1;
+       } else if (   (getlong (fields[6], &spwd.sp_inact) == 0)
+                  || (spwd.sp_inact < 0)) {
+               return 0;
+       }
+
+       /*
+        * Get the number of days after the epoch before the account is
+        * set to expire.
+        */
+
+       if (fields[7][0] == '\0') {
+               spwd.sp_expire = -1;
+       } else if (   (getlong (fields[7], &spwd.sp_expire) == 0)
+                  || (spwd.sp_expire < 0)) {
+               return 0;
+       }
+
+       /*
+        * This field is reserved for future use.  But it isn't supposed
+        * to have anything other than a valid integer in it.
+        */
+
+       if (fields[8][0] == '\0') {
+               spwd.sp_flag = SHADOW_SP_FLAG_UNSET;
+       } else if (getlong (fields[8], &spwd.sp_flag) == 0) {
+               /* FIXME: add a getulong function */
+               return 0;
+       }
+
+       return (&spwd);
+}
+#else
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif
+
diff --git a/lib/sgroupio.c b/lib/sgroupio.c
new file mode 100644 (file)
index 0000000..64a9875
--- /dev/null
@@ -0,0 +1,283 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001       , Michał Moskal
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ifdef SHADOWGRP
+
+#ident "$Id: sgroupio.c 2797 2009-04-24 23:32:52Z nekral-guest $"
+
+#include "prototypes.h"
+#include "defines.h"
+#include "commonio.h"
+#include "sgroupio.h"
+
+/*@null@*/ /*@only@*/struct sgrp *__sgr_dup (const struct sgrp *sgent)
+{
+       struct sgrp *sg;
+       int i;
+
+       sg = (struct sgrp *) malloc (sizeof *sg);
+       if (NULL == sg) {
+               return NULL;
+       }
+       *sg = *sgent;
+       sg->sg_name = strdup (sgent->sg_name);
+       if (NULL == sg->sg_name) {
+               free (sg);
+               return NULL;
+       }
+       sg->sg_passwd = strdup (sgent->sg_passwd);
+       if (NULL == sg->sg_passwd) {
+               free (sg->sg_name);
+               free (sg);
+               return NULL;
+       }
+
+       for (i = 0; NULL != sgent->sg_adm[i]; i++);
+       sg->sg_adm = (char **) malloc ((i + 1) * sizeof (char *));
+       if (NULL == sg->sg_adm) {
+               free (sg->sg_passwd);
+               free (sg->sg_name);
+               free (sg);
+               return NULL;
+       }
+       for (i = 0; NULL != sgent->sg_adm[i]; i++) {
+               sg->sg_adm[i] = strdup (sgent->sg_adm[i]);
+               if (NULL == sg->sg_adm[i]) {
+                       for (i = 0; NULL != sg->sg_adm[i]; i++) {
+                               free (sg->sg_adm[i]);
+                       }
+                       free (sg->sg_adm);
+                       free (sg->sg_passwd);
+                       free (sg->sg_name);
+                       free (sg);
+                       return NULL;
+               }
+       }
+       sg->sg_adm[i] = NULL;
+
+       for (i = 0; NULL != sgent->sg_mem[i]; i++);
+       sg->sg_mem = (char **) malloc ((i + 1) * sizeof (char *));
+       if (NULL == sg->sg_mem) {
+               for (i = 0; NULL != sg->sg_adm[i]; i++) {
+                       free (sg->sg_adm[i]);
+               }
+               free (sg->sg_adm);
+               free (sg->sg_passwd);
+               free (sg->sg_name);
+               free (sg);
+               return NULL;
+       }
+       for (i = 0; NULL != sgent->sg_mem[i]; i++) {
+               sg->sg_mem[i] = strdup (sgent->sg_mem[i]);
+               if (NULL == sg->sg_mem[i]) {
+                       for (i = 0; NULL != sg->sg_mem[i]; i++) {
+                               free (sg->sg_mem[i]);
+                       }
+                       free (sg->sg_mem);
+                       for (i = 0; NULL != sg->sg_adm[i]; i++) {
+                               free (sg->sg_adm[i]);
+                       }
+                       free (sg->sg_adm);
+                       free (sg->sg_passwd);
+                       free (sg->sg_name);
+                       free (sg);
+                       return NULL;
+               }
+       }
+       sg->sg_mem[i] = NULL;
+
+       return sg;
+}
+
+static /*@null@*/ /*@only@*/void *gshadow_dup (const void *ent)
+{
+       const struct sgrp *sg = ent;
+
+       return __sgr_dup (sg);
+}
+
+static void gshadow_free (/*@out@*/ /*@only@*/void *ent)
+{
+       struct sgrp *sg = ent;
+
+       sgr_free (sg);
+}
+
+void sgr_free (/*@out@*/ /*@only@*/struct sgrp *sgent)
+{
+       free (sgent->sg_name);
+       memzero (sgent->sg_passwd, strlen (sgent->sg_passwd));
+       free (sgent->sg_passwd);
+       while (NULL != *(sgent->sg_adm)) {
+               free (*(sgent->sg_adm));
+               sgent->sg_adm++;
+       }
+       while (NULL != *(sgent->sg_mem)) {
+               free (*(sgent->sg_mem));
+               sgent->sg_mem++;
+       }
+       free (sgent);
+}
+
+static const char *gshadow_getname (const void *ent)
+{
+       const struct sgrp *gr = ent;
+
+       return gr->sg_name;
+}
+
+static void *gshadow_parse (const char *line)
+{
+       return (void *) sgetsgent (line);
+}
+
+static int gshadow_put (const void *ent, FILE * file)
+{
+       const struct sgrp *sg = ent;
+
+       return (putsgent (sg, file) == -1) ? -1 : 0;
+}
+
+static struct commonio_ops gshadow_ops = {
+       gshadow_dup,
+       gshadow_free,
+       gshadow_getname,
+       gshadow_parse,
+       gshadow_put,
+       fgetsx,
+       fputsx,
+       NULL,                   /* open_hook */
+       NULL                    /* close_hook */
+};
+
+static struct commonio_db gshadow_db = {
+       SGROUP_FILE,            /* filename */
+       &gshadow_ops,           /* ops */
+       NULL,                   /* fp */
+#ifdef WITH_SELINUX
+       NULL,                   /* scontext */
+#endif
+       NULL,                   /* head */
+       NULL,                   /* tail */
+       NULL,                   /* cursor */
+       false,                  /* changed */
+       false,                  /* isopen */
+       false,                  /* locked */
+       false                   /* readonly */
+};
+
+int sgr_setdbname (const char *filename)
+{
+       return commonio_setname (&gshadow_db, filename);
+}
+
+/*@observer@*/const char *sgr_dbname (void)
+{
+       return gshadow_db.filename;
+}
+
+bool sgr_file_present (void)
+{
+       return commonio_present (&gshadow_db);
+}
+
+int sgr_lock (void)
+{
+       return commonio_lock (&gshadow_db);
+}
+
+int sgr_open (int mode)
+{
+       return commonio_open (&gshadow_db, mode);
+}
+
+/*@observer@*/ /*@null@*/const struct sgrp *sgr_locate (const char *name)
+{
+       return commonio_locate (&gshadow_db, name);
+}
+
+int sgr_update (const struct sgrp *sg)
+{
+       return commonio_update (&gshadow_db, (const void *) sg);
+}
+
+int sgr_remove (const char *name)
+{
+       return commonio_remove (&gshadow_db, name);
+}
+
+int sgr_rewind (void)
+{
+       return commonio_rewind (&gshadow_db);
+}
+
+/*@null@*/const struct sgrp *sgr_next (void)
+{
+       return commonio_next (&gshadow_db);
+}
+
+int sgr_close (void)
+{
+       return commonio_close (&gshadow_db);
+}
+
+int sgr_unlock (void)
+{
+       return commonio_unlock (&gshadow_db);
+}
+
+void __sgr_set_changed (void)
+{
+       gshadow_db.changed = true;
+}
+
+/*@dependent@*/ /*@null@*/struct commonio_entry *__sgr_get_head (void)
+{
+       return gshadow_db.head;
+}
+
+void __sgr_del_entry (const struct commonio_entry *ent)
+{
+       commonio_del_entry (&gshadow_db, ent);
+}
+
+/* Sort with respect to group ordering. */
+int sgr_sort ()
+{
+       return commonio_sort_wrt (&gshadow_db, __gr_get_db ());
+}
+#else
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif
diff --git a/lib/sgroupio.h b/lib/sgroupio.h
new file mode 100644 (file)
index 0000000..ee081f7
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001       , Michał Moskal
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id: sgroupio.h 2760 2009-04-22 21:21:14Z nekral-guest $ */
+#ifndef _SGROUPIO_H
+#define _SGROUPIO_H
+
+extern int sgr_close (void);
+extern bool sgr_file_present (void);
+extern /*@null@*/const struct sgrp *sgr_locate (const char *name);
+extern int sgr_lock (void);
+extern int sgr_setdbname (const char *filename);
+extern /*@observer@*/const char *sgr_dbname (void);
+extern /*@null@*/const struct sgrp *sgr_next (void);
+extern int sgr_open (int mode);
+extern int sgr_remove (const char *name);
+extern int sgr_rewind (void);
+extern int sgr_unlock (void);
+extern int sgr_update (const struct sgrp *sg);
+extern int sgr_sort (void);
+
+#endif
diff --git a/lib/shadow.c b/lib/shadow.c
new file mode 100644 (file)
index 0000000..7f27961
--- /dev/null
@@ -0,0 +1,537 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2009       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+/* Newer versions of Linux libc already have shadow support.  */
+#ifndef HAVE_GETSPNAM
+
+#ident "$Id: shadow.c 2620 2009-04-10 22:35:14Z nekral-guest $"
+
+#include <sys/types.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <stdio.h>
+#ifdef USE_NIS
+static int nis_used;
+static int nis_ignore;
+static enum { native, start, middle, native2 } nis_state;
+static int nis_bound;
+static char *nis_domain;
+static char *nis_key;
+static int nis_keylen;
+static char *nis_val;
+static int nis_vallen;
+
+#define        IS_NISCHAR(c) ((c)=='+')
+#endif
+
+static FILE *shadow;
+
+#define        FIELDS  9
+#define        OFIELDS 5
+
+#ifdef USE_NIS
+
+/*
+ * __setspNIS - turn on or off NIS searches
+ */
+
+void __setspNIS (int flag)
+{
+       nis_ignore = !flag;
+
+       if (nis_ignore) {
+               nis_used = 0;
+       }
+}
+
+/*
+ * bind_nis - bind to NIS server
+ */
+
+static int bind_nis (void)
+{
+       if (yp_get_default_domain (&nis_domain))
+               return -1;
+
+       nis_bound = 1;
+       return 0;
+}
+#endif
+
+/*
+ * setspent - initialize access to shadow text and DBM files
+ */
+
+void setspent (void)
+{
+       if (shadow)
+               rewind (shadow);
+       else
+               shadow = fopen (SHADOW_FILE, "r");
+
+#ifdef USE_NIS
+       nis_state = native;
+#endif
+}
+
+/*
+ * endspent - terminate access to shadow text and DBM files
+ */
+
+void endspent (void)
+{
+       if (shadow)
+               (void) fclose (shadow);
+
+       shadow = (FILE *) 0;
+}
+
+/*
+ * my_sgetspent - convert string in shadow file format to (struct spwd *)
+ */
+
+static struct spwd *my_sgetspent (const char *string)
+{
+       static char spwbuf[BUFSIZ];
+       static struct spwd spwd;
+       char *fields[FIELDS];
+       char *cp;
+       char *cpp;
+       int i;
+
+       /*
+        * Copy string to local buffer.  It has to be tokenized and we
+        * have to do that to our private copy.
+        */
+
+       if (strlen (string) >= sizeof spwbuf)
+               return 0;
+       strcpy (spwbuf, string);
+
+       cp = strrchr (spwbuf, '\n');
+       if (NULL != cp)
+               *cp = '\0';
+
+       /*
+        * Tokenize the string into colon separated fields.  Allow up to
+        * FIELDS different fields.
+        */
+
+       for (cp = spwbuf, i = 0; *cp && i < FIELDS; i++) {
+               fields[i] = cp;
+               while (*cp && *cp != ':')
+                       cp++;
+
+               if (*cp)
+                       *cp++ = '\0';
+       }
+
+       if (i == (FIELDS - 1))
+               fields[i++] = cp;
+
+       if ((cp && *cp) || (i != FIELDS && i != OFIELDS))
+               return 0;
+
+       /*
+        * Start populating the structure.  The fields are all in
+        * static storage, as is the structure we pass back.  If we
+        * ever see a name with '+' as the first character, we try
+        * to turn on NIS processing.
+        */
+
+       spwd.sp_namp = fields[0];
+#ifdef USE_NIS
+       if (IS_NISCHAR (fields[0][0]))
+               nis_used = 1;
+#endif
+       spwd.sp_pwdp = fields[1];
+
+       /*
+        * Get the last changed date.  For all of the integer fields,
+        * we check for proper format.  It is an error to have an
+        * incorrectly formatted number, unless we are using NIS.
+        */
+
+       if (fields[2][0] == '\0') {
+               spwd.sp_lstchg = -1;
+       } else {
+               if (getlong (fields[2], &spwd.sp_lstchg) == 0) {
+#ifdef USE_NIS
+                       if (nis_used) {
+                               spwd.sp_lstchg = -1;
+                       } else
+#endif
+                               return 0;
+               } else if (spwd.sp_lstchg < 0) {
+                       return 0;
+               }
+       }
+
+       /*
+        * Get the minimum period between password changes.
+        */
+
+       if (fields[3][0] == '\0') {
+               spwd.sp_min = -1;
+       } else {
+               if (getlong (fields[3], &spwd.sp_min) == 0) {
+#ifdef USE_NIS
+                       if (nis_used) {
+                               spwd.sp_min = -1;
+                       } else
+#endif
+                               return 0;
+               } else if (spwd.sp_min < 0) {
+                       return 0;
+               }
+       }
+
+       /*
+        * Get the maximum number of days a password is valid.
+        */
+
+       if (fields[4][0] == '\0') {
+               spwd.sp_max = -1;
+       } else {
+               if (getlong (fields[4], &spwd.sp_max) == 0) {
+#ifdef USE_NIS
+                       if (nis_used) {
+                               spwd.sp_max = -1;
+                       } else
+#endif
+                               return 0;
+               } else if (spwd.sp_max < 0) {
+                       return 0;
+               }
+       }
+
+       /*
+        * If there are only OFIELDS fields (this is a SVR3.2 /etc/shadow
+        * formatted file), initialize the other field members to -1.
+        */
+
+       if (i == OFIELDS) {
+               spwd.sp_warn   = -1;
+               spwd.sp_inact  = -1;
+               spwd.sp_expire = -1;
+               spwd.sp_flag   = SHADOW_SP_FLAG_UNSET;
+
+               return &spwd;
+       }
+
+       /*
+        * Get the number of days of password expiry warning.
+        */
+
+       if (fields[5][0] == '\0') {
+               spwd.sp_warn = -1;
+       } else {
+               if (getlong (fields[5], &spwd.sp_warn) == 0) {
+#ifdef USE_NIS
+                       if (nis_used) {
+                               spwd.sp_warn = -1;
+                       } else
+#endif
+                               return 0;
+               } else if (spwd.sp_warn < 0) {
+                       return 0;
+               }
+       }
+
+       /*
+        * Get the number of days of inactivity before an account is
+        * disabled.
+        */
+
+       if (fields[6][0] == '\0') {
+               spwd.sp_inact = -1;
+       } else {
+               if (getlong (fields[6], &spwd.sp_inact) == 0) {
+#ifdef USE_NIS
+                       if (nis_used) {
+                               spwd.sp_inact = -1;
+                       } else
+#endif
+                               return 0;
+               } else if (spwd.sp_inact < 0) {
+                       return 0;
+               }
+       }
+
+       /*
+        * Get the number of days after the epoch before the account is
+        * set to expire.
+        */
+
+       if (fields[7][0] == '\0') {
+               spwd.sp_expire = -1;
+       } else {
+               if (getlong (fields[7], &spwd.sp_expire) == 0) {
+#ifdef USE_NIS
+                       if (nis_used) {
+                               spwd.sp_expire = -1;
+                       } else
+#endif
+                               return 0;
+               } else if (spwd.sp_expire < 0) {
+                       return 0;
+               }
+       }
+
+       /*
+        * This field is reserved for future use.  But it isn't supposed
+        * to have anything other than a valid integer in it.
+        */
+
+       if (fields[8][0] == '\0') {
+               spwd.sp_flag = SHADOW_SP_FLAG_UNSET;
+       } else {
+               if (getlong (fields[8], &spwd.sp_flag) == 0) {
+                       /* FIXME: add a getulong function */
+#ifdef USE_NIS
+                       if (nis_used) {
+                               spwd.sp_flag = SHADOW_SP_FLAG_UNSET;
+                       } else
+#endif
+                               return 0;
+               } else if (spwd.sp_flag < 0) {
+                       return 0;
+               }
+       }
+
+       return (&spwd);
+}
+
+/*
+ * fgetspent - get an entry from a /etc/shadow formatted stream
+ */
+
+struct spwd *fgetspent (FILE * fp)
+{
+       char buf[BUFSIZ];
+       char *cp;
+
+       if (NULL == fp) {
+               return (0);
+       }
+
+#ifdef USE_NIS
+       while (fgets (buf, (int) sizeof buf, fp) != (char *) 0)
+#else
+       if (fgets (buf, (int) sizeof buf, fp) != (char *) 0)
+#endif
+       {
+               cp = strchr (buf, '\n');
+               if (NULL != cp) {
+                       *cp = '\0';
+               }
+#ifdef USE_NIS
+               if (nis_ignore && IS_NISCHAR (buf[0])) {
+                       continue;
+               }
+#endif
+               return my_sgetspent (buf);
+       }
+       return 0;
+}
+
+/*
+ * getspent - get a (struct spwd *) from the current shadow file
+ */
+
+struct spwd *getspent (void)
+{
+#ifdef USE_NIS
+       int nis_1_user = 0;
+       struct spwd *val;
+       char buf[BUFSIZ];
+#endif
+       if (!shadow)
+               setspent ();
+
+#ifdef USE_NIS
+      again:
+       /*
+        * See if we are reading from the local file.
+        */
+
+       if (nis_state == native || nis_state == native2) {
+
+               /*
+                * Get the next entry from the shadow file.  Return NULL
+                * right away if there is none.
+                */
+
+               val = fgetspent (shadow);
+               if (NULL == val)
+                       return 0;
+
+               /*
+                * If this entry began with a NIS escape character, we have
+                * to see if this is just a single user, or if the entire
+                * map is being asked for.
+                */
+
+               if (IS_NISCHAR (val->sp_namp[0])) {
+                       if (val->sp_namp[1])
+                               nis_1_user = 1;
+                       else
+                               nis_state = start;
+               }
+
+               /*
+                * If this isn't a NIS user and this isn't an escape to go
+                * use a NIS map, it must be a regular local user.
+                */
+
+               if (nis_1_user == 0 && nis_state != start)
+                       return val;
+
+               /*
+                * If this is an escape to use an NIS map, switch over to
+                * that bunch of code.
+                */
+
+               if (nis_state == start)
+                       goto again;
+
+               /*
+                * NEEDSWORK.  Here we substitute pieces-parts of this entry.
+                */
+
+               return 0;
+       } else {
+               if (nis_bound == 0) {
+                       if (bind_nis ()) {
+                               nis_state = native2;
+                               goto again;
+                       }
+               }
+               if (nis_state == start) {
+                       if (yp_first (nis_domain, "shadow.bynam", &nis_key,
+                                     &nis_keylen, &nis_val, &nis_vallen)) {
+                               nis_state = native2;
+                               goto again;
+                       }
+                       nis_state = middle;
+               } else if (nis_state == middle) {
+                       if (yp_next (nis_domain, "shadow.bynam", nis_key,
+                                    nis_keylen, &nis_key, &nis_keylen,
+                                    &nis_val, &nis_vallen)) {
+                               nis_state = native2;
+                               goto again;
+                       }
+               }
+               return my_sgetspent (nis_val);
+       }
+#else
+       return (fgetspent (shadow));
+#endif
+}
+
+/*
+ * getspnam - get a shadow entry by name
+ */
+
+struct spwd *getspnam (const char *name)
+{
+       struct spwd *sp;
+
+#ifdef USE_NIS
+       char buf[BUFSIZ];
+       static char save_name[16];
+       int nis_disabled = 0;
+#endif
+
+       setspent ();
+
+#ifdef USE_NIS
+       /*
+        * Search the shadow.byname map for this user.
+        */
+
+       if (!nis_ignore && !nis_bound)
+               bind_nis ();
+
+       if (!nis_ignore && nis_bound) {
+               char *cp;
+
+               if (yp_match (nis_domain, "shadow.byname", name,
+                             strlen (name), &nis_val, &nis_vallen) == 0) {
+
+                       cp = strchr (nis_val, '\n');
+                       if (NULL != cp)
+                               *cp = '\0';
+
+                       nis_state = middle;
+                       sp = my_sgetspent (nis_val);
+                       if (NULL != sp) {
+                               strcpy (save_name, sp->sp_namp);
+                               nis_key = save_name;
+                               nis_keylen = strlen (save_name);
+                       }
+                       endspent ();
+                       return sp;
+               } else
+                       nis_state = native2;
+       }
+#endif
+#ifdef USE_NIS
+       /*
+        * NEEDSWORK -- this is a mess, and it is the same mess in the
+        * other three files.  I can't just blindly turn off NIS because
+        * this might be the first pass through the local files.  In
+        * that case, I never discover that NIS is present.
+        */
+
+       if (nis_used) {
+               nis_ignore++;
+               nis_disabled++;
+       }
+#endif
+       while ((sp = getspent ()) != (struct spwd *) 0) {
+               if (strcmp (name, sp->sp_namp) == 0)
+                       break;
+       }
+#ifdef USE_NIS
+       if (nis_disabled)
+               nis_ignore--;
+#endif
+       endspent ();
+       return (sp);
+}
+#else
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif
+
diff --git a/lib/shadowio.c b/lib/shadowio.c
new file mode 100644 (file)
index 0000000..d80f938
--- /dev/null
@@ -0,0 +1,180 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001       , Michał Moskal
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: shadowio.c 2783 2009-04-23 21:19:02Z nekral-guest $"
+
+#include "prototypes.h"
+#include "defines.h"
+#include <shadow.h>
+#include <stdio.h>
+#include "commonio.h"
+#include "shadowio.h"
+
+static /*@null@*/ /*@only@*/void *shadow_dup (const void *ent)
+{
+       const struct spwd *sp = ent;
+
+       return __spw_dup (sp);
+}
+
+static void shadow_free (/*@out@*//*@only@*/void *ent)
+{
+       struct spwd *sp = ent;
+
+       spw_free (sp);
+}
+
+static const char *shadow_getname (const void *ent)
+{
+       const struct spwd *sp = ent;
+
+       return sp->sp_namp;
+}
+
+static void *shadow_parse (const char *line)
+{
+       return (void *) sgetspent (line);
+}
+
+static int shadow_put (const void *ent, FILE * file)
+{
+       const struct spwd *sp = ent;
+
+       return (putspent (sp, file) == -1) ? -1 : 0;
+}
+
+static struct commonio_ops shadow_ops = {
+       shadow_dup,
+       shadow_free,
+       shadow_getname,
+       shadow_parse,
+       shadow_put,
+       fgets,
+       fputs,
+       NULL,                   /* open_hook */
+       NULL                    /* close_hook */
+};
+
+static struct commonio_db shadow_db = {
+       SHADOW_FILE,            /* filename */
+       &shadow_ops,            /* ops */
+       NULL,                   /* fp */
+#ifdef WITH_SELINUX
+       NULL,                   /* scontext */
+#endif
+       NULL,                   /* head */
+       NULL,                   /* tail */
+       NULL,                   /* cursor */
+       false,                  /* changed */
+       false,                  /* isopen */
+       false,                  /* locked */
+       false                   /* readonly */
+};
+
+int spw_setdbname (const char *filename)
+{
+       return commonio_setname (&shadow_db, filename);
+}
+
+/*@observer@*/const char *spw_dbname (void)
+{
+       return shadow_db.filename;
+}
+
+bool spw_file_present (void)
+{
+       return commonio_present (&shadow_db);
+}
+
+int spw_lock (void)
+{
+       return commonio_lock (&shadow_db);
+}
+
+int spw_open (int mode)
+{
+       return commonio_open (&shadow_db, mode);
+}
+
+/*@observer@*/ /*@null@*/const struct spwd *spw_locate (const char *name)
+{
+       return commonio_locate (&shadow_db, name);
+}
+
+int spw_update (const struct spwd *sp)
+{
+       return commonio_update (&shadow_db, (const void *) sp);
+}
+
+int spw_remove (const char *name)
+{
+       return commonio_remove (&shadow_db, name);
+}
+
+int spw_rewind (void)
+{
+       return commonio_rewind (&shadow_db);
+}
+
+/*@observer@*/ /*@null@*/const struct spwd *spw_next (void)
+{
+       return commonio_next (&shadow_db);
+}
+
+int spw_close (void)
+{
+       return commonio_close (&shadow_db);
+}
+
+int spw_unlock (void)
+{
+       return commonio_unlock (&shadow_db);
+}
+
+struct commonio_entry *__spw_get_head (void)
+{
+       return shadow_db.head;
+}
+
+void __spw_del_entry (const struct commonio_entry *ent)
+{
+       commonio_del_entry (&shadow_db, ent);
+}
+
+/* Sort with respect to passwd ordering. */
+int spw_sort ()
+{
+       return commonio_sort_wrt (&shadow_db, __pw_get_db ());
+}
diff --git a/lib/shadowio.h b/lib/shadowio.h
new file mode 100644 (file)
index 0000000..e4f08f1
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id: shadowio.h 2783 2009-04-23 21:19:02Z nekral-guest $ */
+#ifndef _SHADOWIO_H
+#define _SHADOWIO_H
+
+#include "defines.h"
+
+extern int spw_close (void);
+extern bool spw_file_present (void);
+extern /*@observer@*/ /*@null@*/const struct spwd *spw_locate (const char *name);
+extern int spw_lock (void);
+extern int spw_setdbname (const char *filename);
+extern /*@observer@*/const char *spw_dbname (void);
+extern /*@observer@*/ /*@null@*/const struct spwd *spw_next (void);
+extern int spw_open (int mode);
+extern int spw_remove (const char *name);
+extern int spw_rewind (void);
+extern int spw_unlock (void);
+extern int spw_update (const struct spwd *sp);
+extern int spw_sort (void);
+
+#endif
diff --git a/lib/shadowmem.c b/lib/shadowmem.c
new file mode 100644 (file)
index 0000000..4236a34
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001       , Michał Moskal
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: shadowmem.c 2777 2009-04-23 17:43:27Z nekral-guest $"
+
+#include "prototypes.h"
+#include "defines.h"
+#include <shadow.h>
+#include <stdio.h>
+#include "shadowio.h"
+
+/*@null@*/ /*@only@*/struct spwd *__spw_dup (const struct spwd *spent)
+{
+       struct spwd *sp;
+
+       sp = (struct spwd *) malloc (sizeof *sp);
+       if (NULL == sp) {
+               return NULL;
+       }
+       *sp = *spent;
+       sp->sp_namp = strdup (spent->sp_namp);
+       if (NULL == sp->sp_namp) {
+               return NULL;
+       }
+       sp->sp_pwdp = strdup (spent->sp_pwdp);
+       if (NULL == sp->sp_pwdp) {
+               return NULL;
+       }
+
+       return sp;
+}
+
+void spw_free (/*@out@*/ /*@only@*/struct spwd *spent)
+{
+       free (spent->sp_namp);
+       memzero (spent->sp_pwdp, strlen (spent->sp_pwdp));
+       free (spent->sp_pwdp);
+       free (spent);
+}
+
diff --git a/lib/utent.c b/lib/utent.c
new file mode 100644 (file)
index 0000000..b39017c
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 1993 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ifndef        HAVE_GETUTENT
+
+#include "defines.h"
+#include <stdio.h>
+#include <fcntl.h>
+#include <utmp.h>
+
+#ifndef        lint
+static char rcsid[] = "$Id: utent.c 1980 2008-04-27 00:40:09Z nekral-guest $";
+#endif
+
+static int utmp_fd = -1;
+static struct utmp utmp_buf;
+
+/*
+ * setutent - open or rewind the utmp file
+ */
+
+void setutent (void)
+{
+       if (utmp_fd == -1)
+               if ((utmp_fd = open (_UTMP_FILE, O_RDWR)) == -1)
+                       utmp_fd = open (_UTMP_FILE, O_RDONLY);
+
+       if (utmp_fd != -1)
+               lseek (utmp_fd, (off_t) 0L, SEEK_SET);
+}
+
+/*
+ * endutent - close the utmp file
+ */
+
+void endutent (void)
+{
+       if (utmp_fd != -1)
+               close (utmp_fd);
+
+       utmp_fd = -1;
+}
+
+/*
+ * getutent - get the next record from the utmp file
+ */
+
+struct utmp *getutent (void)
+{
+       if (utmp_fd == -1)
+               setutent ();
+
+       if (utmp_fd == -1)
+               return 0;
+
+       if (read (utmp_fd, &utmp_buf, sizeof utmp_buf) != sizeof utmp_buf)
+               return 0;
+
+       return &utmp_buf;
+}
+
+/*
+ * getutline - get the utmp entry matching ut_line
+ */
+
+struct utmp *getutline (const struct utmp *utent)
+{
+       struct utmp save;
+       struct utmp *new;
+
+       save = *utent;
+       while (new = getutent ())
+               if (strncmp (new->ut_line, save.ut_line, sizeof new->ut_line))
+                       continue;
+               else
+                       return new;
+
+       return (struct utmp *) 0;
+}
+#else
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif
diff --git a/libmisc/.indent.pro b/libmisc/.indent.pro
new file mode 100644 (file)
index 0000000..fe572bb
--- /dev/null
@@ -0,0 +1,5 @@
+-kr
+-i8
+-bad
+-pcs
+-l80
diff --git a/libmisc/Makefile.am b/libmisc/Makefile.am
new file mode 100644 (file)
index 0000000..dd5a084
--- /dev/null
@@ -0,0 +1,68 @@
+
+EXTRA_DIST = .indent.pro xgetXXbyYY.c
+
+INCLUDES = -I$(top_srcdir)/lib
+
+noinst_LIBRARIES = libmisc.a
+
+libmisc_a_SOURCES = \
+       addgrps.c \
+       age.c \
+       audit_help.c \
+       basename.c \
+       chkname.c \
+       chkname.h \
+       chowndir.c \
+       chowntty.c \
+       cleanup.c \
+       cleanup_group.c \
+       cleanup_user.c \
+       console.c \
+       copydir.c \
+       entry.c \
+       env.c \
+       failure.c \
+       failure.h \
+       fields.c \
+       find_new_gid.c \
+       find_new_uid.c \
+       getdate.h \
+       getdate.y \
+       getgr_nam_gid.c \
+       getrange.c \
+       hushed.c \
+       isexpired.c \
+       limits.c \
+       list.c log.c \
+       loginprompt.c \
+       mail.c \
+       motd.c \
+       myname.c \
+       obscure.c \
+       pam_pass.c \
+       pam_pass_non_interractive.c \
+       pwd2spwd.c \
+       pwdcheck.c \
+       pwd_init.c \
+       rlogin.c \
+       salt.c \
+       setugid.c \
+       setupenv.c \
+       shell.c \
+       system.c \
+       strtoday.c \
+       sub.c \
+       sulog.c \
+       ttytype.c \
+       tz.c \
+       ulimit.c \
+       user_busy.c \
+       utmp.c \
+       valid.c \
+       xgetpwnam.c \
+       xgetpwuid.c \
+       xgetgrnam.c \
+       xgetgrgid.c \
+       xgetspnam.c \
+       xmalloc.c \
+       yesno.c
diff --git a/libmisc/Makefile.in b/libmisc/Makefile.in
new file mode 100644 (file)
index 0000000..a20a865
--- /dev/null
@@ -0,0 +1,614 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = libmisc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in getdate.c
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+libmisc_a_AR = $(AR) $(ARFLAGS)
+libmisc_a_LIBADD =
+am_libmisc_a_OBJECTS = addgrps.$(OBJEXT) age.$(OBJEXT) \
+       audit_help.$(OBJEXT) basename.$(OBJEXT) chkname.$(OBJEXT) \
+       chowndir.$(OBJEXT) chowntty.$(OBJEXT) cleanup.$(OBJEXT) \
+       cleanup_group.$(OBJEXT) cleanup_user.$(OBJEXT) \
+       console.$(OBJEXT) copydir.$(OBJEXT) entry.$(OBJEXT) \
+       env.$(OBJEXT) failure.$(OBJEXT) fields.$(OBJEXT) \
+       find_new_gid.$(OBJEXT) find_new_uid.$(OBJEXT) \
+       getdate.$(OBJEXT) getgr_nam_gid.$(OBJEXT) getrange.$(OBJEXT) \
+       hushed.$(OBJEXT) isexpired.$(OBJEXT) limits.$(OBJEXT) \
+       list.$(OBJEXT) log.$(OBJEXT) loginprompt.$(OBJEXT) \
+       mail.$(OBJEXT) motd.$(OBJEXT) myname.$(OBJEXT) \
+       obscure.$(OBJEXT) pam_pass.$(OBJEXT) \
+       pam_pass_non_interractive.$(OBJEXT) pwd2spwd.$(OBJEXT) \
+       pwdcheck.$(OBJEXT) pwd_init.$(OBJEXT) rlogin.$(OBJEXT) \
+       salt.$(OBJEXT) setugid.$(OBJEXT) setupenv.$(OBJEXT) \
+       shell.$(OBJEXT) system.$(OBJEXT) strtoday.$(OBJEXT) \
+       sub.$(OBJEXT) sulog.$(OBJEXT) ttytype.$(OBJEXT) tz.$(OBJEXT) \
+       ulimit.$(OBJEXT) user_busy.$(OBJEXT) utmp.$(OBJEXT) \
+       valid.$(OBJEXT) xgetpwnam.$(OBJEXT) xgetpwuid.$(OBJEXT) \
+       xgetgrnam.$(OBJEXT) xgetgrgid.$(OBJEXT) xgetspnam.$(OBJEXT) \
+       xmalloc.$(OBJEXT) yesno.$(OBJEXT)
+libmisc_a_OBJECTS = $(am_libmisc_a_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+@MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ ||
+YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
+YLWRAP = $(top_srcdir)/ylwrap
+SOURCES = $(libmisc_a_SOURCES)
+DIST_SOURCES = $(libmisc_a_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = .indent.pro xgetXXbyYY.c
+INCLUDES = -I$(top_srcdir)/lib
+noinst_LIBRARIES = libmisc.a
+libmisc_a_SOURCES = \
+       addgrps.c \
+       age.c \
+       audit_help.c \
+       basename.c \
+       chkname.c \
+       chkname.h \
+       chowndir.c \
+       chowntty.c \
+       cleanup.c \
+       cleanup_group.c \
+       cleanup_user.c \
+       console.c \
+       copydir.c \
+       entry.c \
+       env.c \
+       failure.c \
+       failure.h \
+       fields.c \
+       find_new_gid.c \
+       find_new_uid.c \
+       getdate.h \
+       getdate.y \
+       getgr_nam_gid.c \
+       getrange.c \
+       hushed.c \
+       isexpired.c \
+       limits.c \
+       list.c log.c \
+       loginprompt.c \
+       mail.c \
+       motd.c \
+       myname.c \
+       obscure.c \
+       pam_pass.c \
+       pam_pass_non_interractive.c \
+       pwd2spwd.c \
+       pwdcheck.c \
+       pwd_init.c \
+       rlogin.c \
+       salt.c \
+       setugid.c \
+       setupenv.c \
+       shell.c \
+       system.c \
+       strtoday.c \
+       sub.c \
+       sulog.c \
+       ttytype.c \
+       tz.c \
+       ulimit.c \
+       user_busy.c \
+       utmp.c \
+       valid.c \
+       xgetpwnam.c \
+       xgetpwuid.c \
+       xgetgrnam.c \
+       xgetgrgid.c \
+       xgetspnam.c \
+       xmalloc.c \
+       yesno.c
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj .y
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  libmisc/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  libmisc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLIBRARIES:
+       -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libmisc.a: $(libmisc_a_OBJECTS) $(libmisc_a_DEPENDENCIES) 
+       -rm -f libmisc.a
+       $(libmisc_a_AR) libmisc.a $(libmisc_a_OBJECTS) $(libmisc_a_LIBADD)
+       $(RANLIB) libmisc.a
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addgrps.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/age.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audit_help.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chowndir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chowntty.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cleanup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cleanup_group.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cleanup_user.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/console.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copydir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/entry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/failure.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fields.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find_new_gid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find_new_uid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getgr_nam_gid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getrange.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hushed.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isexpired.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/limits.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loginprompt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mail.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/motd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obscure.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_pass.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pam_pass_non_interractive.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwd2spwd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwd_init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwdcheck.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rlogin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/salt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setugid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setupenv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shell.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoday.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sub.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sulog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/system.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttytype.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tz.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ulimit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/user_busy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utmp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/valid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetgrgid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetgrnam.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetpwnam.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetpwuid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetspnam.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yesno.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+.y.c:
+       $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -rm -f getdate.c
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLIBRARIES ctags distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libmisc/addgrps.c b/libmisc/addgrps.c
new file mode 100644 (file)
index 0000000..8958a0b
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#if defined (HAVE_SETGROUPS) && ! defined (USE_PAM)
+
+#include "prototypes.h"
+#include "defines.h"
+
+#include <stdio.h>
+#include <grp.h>
+#include <errno.h>
+
+#ident "$Id: addgrps.c 2595 2009-04-05 22:29:42Z nekral-guest $"
+
+#define SEP ",:"
+/*
+ * Add groups with names from LIST (separated by commas or colons)
+ * to the supplementary group set.  Silently ignore groups which are
+ * already there.  Warning: uses strtok().
+ */
+int add_groups (const char *list)
+{
+       GETGROUPS_T *grouplist, *tmp;
+       size_t i;
+       int ngroups;
+       bool added;
+       char *token;
+       char buf[1024];
+
+       if (strlen (list) >= sizeof (buf)) {
+               errno = EINVAL;
+               return -1;
+       }
+       strcpy (buf, list);
+
+       i = 16;
+       for (;;) {
+               grouplist = (gid_t *) malloc (i * sizeof (GETGROUPS_T));
+               if (NULL == grouplist) {
+                       return -1;
+               }
+               ngroups = getgroups (i, grouplist);
+               if ((-1 == ngroups) || (i > (size_t)ngroups)) {
+                       break;
+               }
+               /* not enough room, so try allocating a larger buffer */
+               free (grouplist);
+               i *= 2;
+       }
+       if (ngroups < 0) {
+               free (grouplist);
+               return -1;
+       }
+
+       added = false;
+       for (token = strtok (buf, SEP); NULL != token; token = strtok (NULL, SEP)) {
+               struct group *grp;
+
+               grp = getgrnam (token); /* local, no need for xgetgrnam */
+               if (NULL == grp) {
+                       fprintf (stderr, _("Warning: unknown group %s\n"),
+                                token);
+                       continue;
+               }
+
+               for (i = 0; i < (size_t)ngroups && grouplist[i] != grp->gr_gid; i++);
+
+               if (i < (size_t)ngroups) {
+                       continue;
+               }
+
+               if (ngroups >= sysconf (_SC_NGROUPS_MAX)) {
+                       fputs (_("Warning: too many groups\n"), stderr);
+                       break;
+               }
+               tmp = (gid_t *) realloc (grouplist, (size_t)(ngroups + 1) * sizeof (GETGROUPS_T));
+               if (NULL == tmp) {
+                       free (grouplist);
+                       return -1;
+               }
+               tmp[ngroups] = grp->gr_gid;
+               ngroups++;
+               grouplist = tmp;
+               added = true;
+       }
+
+       if (added) {
+               return setgroups ((size_t)ngroups, grouplist);
+       }
+
+       return 0;
+}
+#else                          /* HAVE_SETGROUPS && !USE_PAM */
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif                         /* HAVE_SETGROUPS && !USE_PAM */
+
diff --git a/libmisc/age.c b/libmisc/age.c
new file mode 100644 (file)
index 0000000..3ec44d4
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <time.h>
+#include <errno.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "exitcodes.h"
+#include <pwd.h>
+#include <grp.h>
+
+#ident "$Id: age.c 2775 2009-04-23 17:33:21Z nekral-guest $"
+
+#ifndef PASSWD_PROGRAM
+#define PASSWD_PROGRAM "/bin/passwd"
+#endif
+/*
+ * expire - force password change if password expired
+ *
+ *     expire() calls /bin/passwd to change the user's password
+ *     if it has expired.
+ */
+int expire (const struct passwd *pw, /*@null@*/const struct spwd *sp)
+{
+       int status;
+       pid_t child;
+       pid_t pid;
+
+       if (NULL == sp) {
+               return 0;
+       }
+
+       /*
+        * See if the user's password has expired, and if so
+        * force them to change their password.
+        */
+
+       status = isexpired (pw, sp);
+       switch (status) {
+       case 0:
+               return 0;
+       case 1:
+               (void) fputs (_("Your password has expired."), stdout);
+               break;
+       case 2:
+               (void) fputs (_("Your password is inactive."), stdout);
+               break;
+       case 3:
+               (void) fputs (_("Your login has expired."), stdout);
+               break;
+       }
+
+       /*
+        * Setting the maximum valid period to less than the minimum
+        * valid period means that the minimum period will never
+        * occur while the password is valid, so the user can never
+        * change that password.
+        */
+
+       if ((status > 1) || (sp->sp_max < sp->sp_min)) {
+               (void) puts (_("  Contact the system administrator."));
+               exit (EXIT_FAILURE);
+       }
+       (void) puts (_("  Choose a new password."));
+       (void) fflush (stdout);
+
+       /*
+        * Close all the files so that unauthorized access won't
+        * occur.  This needs to be done anyway because those files
+        * might become stale after "passwd" is executed.
+        */
+
+       endspent ();
+       endpwent ();
+#ifdef SHADOWGRP
+       endsgent ();
+#endif
+       endgrent ();
+
+       /*
+        * Execute the /bin/passwd command.  The exit status will be
+        * examined to see what the result is.  If there are any
+        * errors the routine will exit.  This forces the user to
+        * change their password before being able to use the account.
+        */
+
+       pid = fork ();
+       if (0 == pid) {
+               int err;
+
+               /*
+                * Set the UID to be that of the user.  This causes
+                * passwd to work just like it would had they executed
+                * it from the command line while logged in.
+                */
+#if defined(HAVE_INITGROUPS) && ! defined(USE_PAM)
+               if (setup_uid_gid (pw, false) != 0)
+#else
+               if (setup_uid_gid (pw) != 0)
+#endif
+               {
+                       _exit (126);
+               }
+
+               (void) execl (PASSWD_PROGRAM, PASSWD_PROGRAM, pw->pw_name, (char *) 0);
+               err = errno;
+               perror ("Can't execute " PASSWD_PROGRAM);
+               _exit ((ENOENT == err) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+       } else if ((pid_t) -1 == pid) {
+               perror ("fork");
+               exit (EXIT_FAILURE);
+       }
+
+       while (((child = wait (&status)) != pid) && (child != (pid_t)-1));
+
+       if ((child == pid) && (0 == status)) {
+               return 1;
+       }
+
+       exit (EXIT_FAILURE);
+ /*@notreached@*/}
+
+/*
+ * agecheck - see if warning is needed for password expiration
+ *
+ *     agecheck sees how many days until the user's password is going
+ *     to expire and warns the user of the pending password expiration.
+ */
+
+void agecheck (/*@null@*/const struct spwd *sp)
+{
+       long now = (long) time ((time_t *) 0) / SCALE;
+       long remain;
+
+       if (NULL == sp) {
+               return;
+       }
+
+       /*
+        * The last, max, and warn fields must be supported or the
+        * warning period cannot be calculated.
+        */
+
+       if (   (-1 == sp->sp_lstchg)
+           || (-1 == sp->sp_max)
+           || (-1 == sp->sp_warn)) {
+               return;
+       }
+
+       if (0 == sp->sp_lstchg) {
+               (void) puts (_("You must change your password."));
+               return;
+       }
+
+       remain = sp->sp_lstchg + sp->sp_max - now;
+       if (remain <= sp->sp_warn) {
+               remain /= DAY / SCALE;
+               if (remain > 1) {
+                       (void) printf (_("Your password will expire in %ld days.\n"),
+                                      remain);
+               } else if (1 == remain) {
+                       (void) puts (_("Your password will expire tomorrow."));
+               } else if (remain == 0) {
+                       (void) puts (_("Your password will expire today."));
+               }
+       }
+}
+
diff --git a/libmisc/audit_help.c b/libmisc/audit_help.c
new file mode 100644 (file)
index 0000000..8e8bc26
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2005       , Red Hat, Inc.
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *  Audit helper functions used throughout shadow
+ *
+ */
+
+#include <config.h>
+
+#ifdef WITH_AUDIT
+
+#include <stdlib.h>
+#include <syslog.h>
+#include <stdarg.h>
+#include <libaudit.h>
+#include <errno.h>
+#include <stdio.h>
+#include "prototypes.h"
+int audit_fd;
+
+void audit_help_open (void)
+{
+       audit_fd = audit_open ();
+       if (audit_fd < 0) {
+               /* You get these only when the kernel doesn't have
+                * audit compiled in. */
+               if (   (errno == EINVAL)
+                   || (errno == EPROTONOSUPPORT)
+                   || (errno == EAFNOSUPPORT)) {
+                       return;
+               }
+               (void) fputs (_("Cannot open audit interface - aborting.\n"),
+                             stderr);
+               exit (EXIT_FAILURE);
+       }
+}
+
+/*
+ * This function will log a message to the audit system using a predefined
+ * message format. Parameter usage is as follows:
+ *
+ * type - type of message: AUDIT_USER_CHAUTHTOK for changing any account 
+ *       attributes.
+ * pgname - program's name
+ * op  -  operation. "adding user", "changing finger info", "deleting group"
+ * name - user's account or group name. If not available use NULL.
+ * id  -  uid or gid that the operation is being performed on. This is used
+ *       only when user is NULL.
+ */
+void audit_logger (int type, const char *pgname, const char *op,
+                   const char *name, unsigned int id,
+                   shadow_audit_result result)
+{
+       if (audit_fd < 0) {
+               return;
+       } else {
+               audit_log_acct_message (audit_fd, type, NULL, op, name, id,
+                                       NULL, NULL, NULL, (int) result);
+       }
+}
+
+void audit_logger_message (const char *message, shadow_audit_result result)
+{
+       if (audit_fd < 0) {
+               return;
+       } else {
+               audit_log_user_message (audit_fd,
+                                       AUDIT_USYS_CONFIG,
+                                       message,
+                                       NULL, /* hostname */
+                                       NULL, /* addr */
+                                       NULL, /* tty */
+                                       (int) result);
+       }
+}
+
+#else                          /* WITH_AUDIT */
+extern int errno;      /* warning: ANSI C forbids an empty source file */
+#endif                         /* WITH_AUDIT */
+
diff --git a/libmisc/basename.c b/libmisc/basename.c
new file mode 100644 (file)
index 0000000..7e8684f
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * basename.c - not worth copyrighting :-).  Some versions of Linux libc
+ * already have basename(), other versions don't.  To avoid confusion,
+ * we will not use the function from libc and use a different name here.
+ * --marekm
+ */
+
+#include <config.h>
+
+#ident "$Id: basename.c 1980 2008-04-27 00:40:09Z nekral-guest $"
+
+#include "defines.h"
+#include "prototypes.h"
+char *Basename (char *str)
+{
+       char *cp = strrchr (str, '/');
+
+       return cp ? cp + 1 : str;
+}
diff --git a/libmisc/chkname.c b/libmisc/chkname.c
new file mode 100644 (file)
index 0000000..42111ae
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2005 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * is_valid_user_name(), is_valid_group_name() - check the new user/group
+ * name for validity;
+ * return values:
+ *   true  - OK
+ *   false - bad name
+ */
+
+#include <config.h>
+
+#ident "$Id: chkname.c 2828 2009-04-28 19:14:05Z nekral-guest $"
+
+#include <ctype.h>
+#include "defines.h"
+#include "chkname.h"
+
+static bool is_valid_name (const char *name)
+{
+       /*
+        * User/group names must match [a-z_][a-z0-9_-]*[$]
+        */
+       if (('\0' == *name) ||
+           !((('a' <= *name) && ('z' >= *name)) || ('_' == *name))) {
+               return false;
+       }
+
+       while ('\0' != *++name) {
+               if (!(( ('a' <= *name) && ('z' >= *name) ) ||
+                     ( ('0' <= *name) && ('9' >= *name) ) ||
+                     ('_' == *name) ||
+                     ('-' == *name) ||
+                     ( ('$' == *name) && ('\0' == *(name + 1)) )
+                    )) {
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+bool is_valid_user_name (const char *name)
+{
+       /*
+        * User names are limited by whatever utmp can
+        * handle.
+        */
+       if (strlen (name) > USER_NAME_MAX_LENGTH) {
+               return false;
+       }
+
+       return is_valid_name (name);
+}
+
+bool is_valid_group_name (const char *name)
+{
+       /*
+        * Arbitrary limit for group names.
+        * HP-UX 10 limits to 16 characters
+        */
+       if (   (GROUP_NAME_MAX_LENGTH > 0)
+           && (strlen (name) > GROUP_NAME_MAX_LENGTH)) {
+               return false;
+       }
+
+       return is_valid_name (name);
+}
+
diff --git a/libmisc/chkname.h b/libmisc/chkname.h
new file mode 100644 (file)
index 0000000..dbe6c8a
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1997 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id: chkname.h 2036 2008-05-25 23:31:10Z nekral-guest $ */
+#ifndef _CHKNAME_H_
+#define _CHKNAME_H_
+
+/*
+ * is_valid_user_name(), is_valid_group_name() - check the new user/group
+ * name for validity;
+ * return values:
+ *   true  - OK
+ *   false - bad name
+ */
+
+#include "defines.h"
+
+extern bool is_valid_user_name (const char *name);
+extern bool is_valid_group_name (const char *name);
+
+#endif
diff --git a/libmisc/chowndir.c b/libmisc/chowndir.c
new file mode 100644 (file)
index 0000000..3d16022
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 1992 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: chowndir.c 2020 2008-05-25 21:23:28Z nekral-guest $"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <fcntl.h>
+#include <stdio.h>
+/*
+ * chown_tree - change ownership of files in a directory tree
+ *
+ *     chown_dir() walks a directory tree and changes the ownership
+ *     of all files owned by the provided user ID.
+ */
+int
+chown_tree (const char *root, uid_t old_uid, uid_t new_uid, gid_t old_gid,
+           gid_t new_gid)
+{
+       char new_name[1024];
+       int rc = 0;
+       struct DIRECT *ent;
+       struct stat sb;
+       DIR *dir;
+
+       /*
+        * Make certain the directory exists.  This routine is called
+        * directory by the invoker, or recursively.
+        */
+
+       if (access (root, F_OK) != 0)
+               return -1;
+
+       /*
+        * Open the directory and read each entry.  Every entry is tested
+        * to see if it is a directory, and if so this routine is called
+        * recursively.  If not, it is checked to see if it is owned by
+        * old user ID.
+        */
+
+       if (!(dir = opendir (root)))
+               return -1;
+
+       while ((ent = readdir (dir))) {
+
+               /*
+                * Skip the "." and ".." entries
+                */
+
+               if (strcmp (ent->d_name, ".") == 0 ||
+                   strcmp (ent->d_name, "..") == 0)
+                       continue;
+
+               /*
+                * Make the filename for both the source and the
+                * destination files.
+                */
+
+               if (strlen (root) + strlen (ent->d_name) + 2 > sizeof new_name)
+                       break;
+
+               snprintf (new_name, sizeof new_name, "%s/%s", root,
+                         ent->d_name);
+
+               /* Don't follow symbolic links! */
+               if (LSTAT (new_name, &sb) == -1)
+                       continue;
+
+               if (S_ISDIR (sb.st_mode) && !S_ISLNK (sb.st_mode)) {
+
+                       /*
+                        * Do the entire subdirectory.
+                        */
+
+                       rc = chown_tree (new_name, old_uid, new_uid,
+                                        old_gid, new_gid);
+                       if (0 != rc) {
+                               break;
+                       }
+               }
+#ifndef HAVE_LCHOWN
+               /* don't use chown (follows symbolic links!) */
+               if (S_ISLNK (sb.st_mode))
+                       continue;
+#endif
+               if (sb.st_uid == old_uid)
+                       LCHOWN (new_name, new_uid,
+                               sb.st_gid == old_gid ? new_gid : sb.st_gid);
+       }
+       (void) closedir (dir);
+
+       /*
+        * Now do the root of the tree
+        */
+
+       if (stat (root, &sb) == 0) {
+               if (sb.st_uid == old_uid) {
+                       LCHOWN (root, new_uid,
+                               sb.st_gid == old_gid ? new_gid : sb.st_gid);
+               }
+       }
+       return rc;
+}
+
diff --git a/libmisc/chowntty.c b/libmisc/chowntty.c
new file mode 100644 (file)
index 0000000..8391efb
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2001, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: chowntty.c 2849 2009-04-30 21:08:49Z nekral-guest $"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <errno.h>
+#include <grp.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+#include "getdef.h"
+
+/*
+ *     chown_tty() sets the login tty to be owned by the new user ID
+ *     with TTYPERM modes
+ */
+
+void chown_tty (const struct passwd *info)
+{
+       struct group *grent;
+       gid_t gid;
+
+       /*
+        * See if login.defs has some value configured for the port group
+        * ID.  Otherwise, use the user's primary group ID.
+        */
+
+       grent = getgr_nam_gid (getdef_str ("TTYGROUP"));
+       if (NULL != grent) {
+               gid = grent->gr_gid;
+       } else {
+               gid = info->pw_gid;
+       }
+
+       /*
+        * Change the permissions on the TTY to be owned by the user with
+        * the group as determined above.
+        */
+
+       if (   (fchown (STDIN_FILENO, info->pw_uid, gid) != 0)
+           || (fchmod (STDIN_FILENO, getdef_num ("TTYPERM", 0600)) != 0)) {
+               int err = errno;
+
+               fprintf (stderr,
+                        _("Unable to change owner or mode of tty stdin: %s"),
+                        strerror (err));
+               SYSLOG ((LOG_WARN,
+                        "unable to change owner or mode of tty stdin for user `%s': %s\n",
+                        info->pw_name, strerror (err)));
+               if (EROFS != err) {
+                       closelog ();
+                       exit (EXIT_FAILURE);
+               }
+       }
+#ifdef __linux__
+       /*
+        * Please don't add code to chown /dev/vcs* to the user logging in -
+        * it's a potential security hole.  I wouldn't like the previous user
+        * to hold the file descriptor open and watch my screen.  We don't
+        * have the *BSD revoke() system call yet, and vhangup() only works
+        * for tty devices (which vcs* is not).  --marekm
+        */
+#endif
+}
+
diff --git a/libmisc/cleanup.c b/libmisc/cleanup.c
new file mode 100644 (file)
index 0000000..732934c
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#include <assert.h>
+#include <stdio.h>
+
+#include "prototypes.h"
+
+/*
+ * The cleanup_functions stack.
+ */
+#define CLEANUP_FUNCTIONS 10
+static cleanup_function cleanup_functions[CLEANUP_FUNCTIONS];
+static void * cleanup_function_args[CLEANUP_FUNCTIONS];
+
+/*
+ * - Cleanup functions shall not fail.
+ * - You should register do_cleanups with atexit.
+ * - You should add cleanup functions to the stack with add_cleanup when
+ *   an operation is expected to be executed later, and remove it from the
+ *   stack with del_cleanup when it has been executed.
+ *
+ **/
+
+/*
+ * do_cleanups - perform the actions stored in the cleanup_functions stack.
+ *
+ * It is intended to be used as:
+ *     atexit (do_cleanups);
+ */
+void do_cleanups (void)
+{
+       unsigned int i;
+
+       /* Make sure there were no overflow */
+       assert (NULL == cleanup_functions[CLEANUP_FUNCTIONS-1]);
+
+       i = CLEANUP_FUNCTIONS;
+       do {
+               i--;
+               if (cleanup_functions[i] != NULL) {
+                       cleanup_functions[i] (cleanup_function_args[i]);
+               }
+       } while (i>0);
+}
+
+/*
+ * add_cleanup - Add a cleanup_function to the cleanup_functions stack.
+ */
+void add_cleanup (cleanup_function pcf, /*@null@*/void *arg)
+{
+       unsigned int i;
+       assert (NULL != pcf);
+
+       assert (NULL == cleanup_functions[CLEANUP_FUNCTIONS-2]);
+
+       /* Add the cleanup_function at the end of the stack */
+       for (i=0; NULL != cleanup_functions[i]; i++);
+       cleanup_functions[i] = pcf;
+       cleanup_function_args[i] = arg;
+}
+
+/*
+ * del_cleanup - Remove a cleanup_function from the cleanup_functions stack.
+ */
+void del_cleanup (cleanup_function pcf)
+{
+       unsigned int i;
+       assert (NULL != pcf);
+
+       /* Find the pcf cleanup function */
+       for (i=0; i<CLEANUP_FUNCTIONS; i++) {
+               if (cleanup_functions[i] == pcf) {
+                       break;
+               }
+       }
+
+       /* Make sure the cleanup function was found */
+       assert (i<CLEANUP_FUNCTIONS);
+
+       /* Move the rest of the cleanup functions */
+       for (; i<CLEANUP_FUNCTIONS; i++) {
+               /* Make sure the cleanup function was specified only once */
+               assert (cleanup_functions[i+1] != pcf);
+
+               if (i == (CLEANUP_FUNCTIONS -1)) {
+                       cleanup_functions[i] = NULL;
+                       cleanup_function_args[i] = NULL;
+               } else {
+                       cleanup_functions[i] = cleanup_functions[i+1];
+                       cleanup_function_args[i] = cleanup_function_args[i+1];
+               }
+
+               /* A NULL indicates the end of the stack */
+               if (NULL == cleanup_functions[i]) {
+                       break;
+               }
+       }
+}
+
diff --git a/libmisc/cleanup_group.c b/libmisc/cleanup_group.c
new file mode 100644 (file)
index 0000000..d07adc7
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#include <assert.h>
+#include <stdio.h>
+
+#include "defines.h"
+#include "groupio.h"
+#include "sgroupio.h"
+#include "prototypes.h"
+
+/*
+ * cleanup_report_add_group - Report failure to add a group to the system
+ *
+ * It should be registered when it is decided to add a group to the system.
+ */
+void cleanup_report_add_group (void *group_name)
+{
+       const char *name = (const char *)group_name;
+
+       SYSLOG ((LOG_ERR, "failed to add group %s", name));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_GROUP, Prog,
+                     "",
+                     name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+/*
+ * cleanup_report_del_group - Report failure to remove a group from the system
+ *
+ * It should be registered when it is decided to remove a group from the system.
+ */
+void cleanup_report_del_group (void *group_name)
+{
+       const char *name = (const char *)group_name;
+
+       SYSLOG ((LOG_ERR, "failed to remove group %s", name));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_DEL_GROUP, Prog,
+                     "",
+                     name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+void cleanup_report_mod_group (void *cleanup_info)
+{
+       const struct cleanup_info_mod *info;
+       info = (const struct cleanup_info_mod *)cleanup_info;
+
+       SYSLOG ((LOG_ERR,
+                "failed to change %s (%s)",
+                gr_dbname (),
+                info->action));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_USER_ACCT, Prog,
+                     info->audit_msg,
+                     info->name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+#ifdef SHADOWGRP
+void cleanup_report_mod_gshadow (void *cleanup_info)
+{
+       const struct cleanup_info_mod *info;
+       info = (const struct cleanup_info_mod *)cleanup_info;
+
+       SYSLOG ((LOG_ERR,
+                "failed to change %s (%s)",
+                sgr_dbname (),
+                info->action));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_USER_ACCT, Prog,
+                     info->audit_msg,
+                     info->name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+}
+#endif
+
+/*
+ * cleanup_report_add_group_group - Report failure to add a group to group
+ *
+ * It should be registered when it is decided to add a group to the
+ * group database.
+ */
+void cleanup_report_add_group_group (void *group_name)
+{
+       const char *name = (const char *)group_name;
+
+       SYSLOG ((LOG_ERR, "failed to add group %s to %s", name, gr_dbname ()));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_GROUP, Prog,
+                     "adding group to /etc/group",
+                     name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+#ifdef SHADOWGRP
+/*
+ * cleanup_report_add_group_gshadow - Report failure to add a group to gshadow
+ *
+ * It should be registered when it is decided to add a group to the
+ * gshadow database.
+ */
+void cleanup_report_add_group_gshadow (void *group_name)
+{
+       const char *name = (const char *)group_name;
+
+       SYSLOG ((LOG_ERR, "failed to add group %s to %s", name, sgr_dbname ()));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_GROUP, Prog,
+                     "adding group to /etc/gshadow",
+                     name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+}
+#endif
+
+/*
+ * cleanup_report_del_group_group - Report failure to remove a group from the
+ *                                  regular group database
+ *
+ * It should be registered when it is decided to remove a group from the
+ * regular group database.
+ */
+void cleanup_report_del_group_group (void *group_name)
+{
+       const char *name = (const char *)group_name;
+
+       SYSLOG ((LOG_ERR,
+                "failed to remove group %s from %s",
+                name, gr_dbname ()));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_GROUP, Prog,
+                     "removing group from /etc/group",
+                     name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+#ifdef SHADOWGRP
+/*
+ * cleanup_report_del_group_gshadow - Report failure to remove a group from
+ *                                    gshadow
+ *
+ * It should be registered when it is decided to remove a group from the
+ * gshadow database.
+ */
+void cleanup_report_del_group_gshadow (void *group_name)
+{
+       const char *name = (const char *)group_name;
+
+       SYSLOG ((LOG_ERR,
+                "failed to remove group %s from %s",
+                name, sgr_dbname ()));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_GROUP, Prog,
+                     "removing group from /etc/gshadow",
+                     name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+}
+#endif
+
+/*
+ * cleanup_unlock_group - Unlock the group file
+ *
+ * It should be registered after the group file is successfully locked.
+ */
+void cleanup_unlock_group (unused void *arg)
+{
+       if (gr_unlock () == 0) {
+               fprintf (stderr,
+                        _("%s: failed to unlock %s\n"),
+                        Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+#ifdef WITH_AUDIT
+               audit_logger_message ("unlocking group file",
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+       }
+}
+
+#ifdef SHADOWGRP
+/*
+ * cleanup_unlock_gshadow - Unlock the gshadow file
+ *
+ * It should be registered after the gshadow file is successfully locked.
+ */
+void cleanup_unlock_gshadow (unused void *arg)
+{
+       if (sgr_unlock () == 0) {
+               fprintf (stderr,
+                        _("%s: failed to unlock %s\n"),
+                        Prog, sgr_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+#ifdef WITH_AUDIT
+               audit_logger_message ("unlocking gshadow file",
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+       }
+}
+#endif
+
diff --git a/libmisc/cleanup_user.c b/libmisc/cleanup_user.c
new file mode 100644 (file)
index 0000000..6e49751
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#include <assert.h>
+#include <stdio.h>
+
+#include "defines.h"
+#include "pwio.h"
+#include "shadowio.h"
+#include "prototypes.h"
+
+/*
+ * cleanup_report_add_user - Report failure to add an user to the system
+ *
+ * It should be registered when it is decided to add an user to the system.
+ */
+void cleanup_report_add_user (void *user_name)
+{
+       const char *name = (const char *)user_name;
+
+       SYSLOG ((LOG_ERR, "failed to add user %s", name));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_USER, Prog,
+                     "",
+                     name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+void cleanup_report_mod_passwd (void *cleanup_info)
+{
+       const struct cleanup_info_mod *info;
+       info = (const struct cleanup_info_mod *)cleanup_info;
+
+       SYSLOG ((LOG_ERR,
+                "failed to change %s (%s)",
+                pw_dbname (),
+                info->action));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_USER_ACCT, Prog,
+                     info->audit_msg,
+                     info->name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+/*
+ * cleanup_report_add_user_passwd - Report failure to add an user to
+ * /etc/passwd
+ *
+ * It should be registered when it is decided to add an user to the
+ * /etc/passwd database.
+ */
+void cleanup_report_add_user_passwd (void *user_name)
+{
+       const char *name = (const char *)user_name;
+
+       SYSLOG ((LOG_ERR, "failed to add user %s to %s", name, pw_dbname ()));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_USER, Prog,
+                     "adding user to /etc/passwd",
+                     name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+/*
+ * cleanup_report_add_user_shadow - Report failure to add an user to
+ * /etc/shadow
+ *
+ * It should be registered when it is decided to add an user to the
+ * /etc/shadow database.
+ */
+void cleanup_report_add_user_shadow (void *user_name)
+{
+       const char *name = (const char *)user_name;
+
+       SYSLOG ((LOG_ERR, "failed to add user %s to %s", name, spw_dbname ()));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_USER, Prog,
+                     "adding user to /etc/shadow",
+                     name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+}
+
+/*
+ * cleanup_unlock_passwd - Unlock the /etc/passwd database
+ *
+ * It should be registered after the passwd database is successfully locked.
+ */
+void cleanup_unlock_passwd (unused void *arg)
+{
+       if (pw_unlock () == 0) {
+               fprintf (stderr,
+                        _("%s: failed to unlock %s\n"),
+                        Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+#ifdef WITH_AUDIT
+               audit_logger_message ("unlocking passwd file",
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+       }
+}
+
+/*
+ * cleanup_unlock_shadow - Unlock the /etc/shadow database
+ *
+ * It should be registered after the shadow database is successfully locked.
+ */
+void cleanup_unlock_shadow (unused void *arg)
+{
+       if (spw_unlock () == 0) {
+               fprintf (stderr,
+                        _("%s: failed to unlock %s\n"),
+                        Prog, spw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+#ifdef WITH_AUDIT
+               audit_logger_message ("unlocking shadow file",
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+       }
+}
+
diff --git a/libmisc/console.c b/libmisc/console.c
new file mode 100644 (file)
index 0000000..843105d
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * Copyright (c) 1991       , Julianne Frances Haugh
+ * Copyright (c) 1991       , Chip Rosenthal
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+#include "defines.h"
+#include <stdio.h>
+#include "getdef.h"
+#include "prototypes.h"
+
+#ident "$Id: console.c 2929 2009-05-16 18:19:24Z nekral-guest $"
+
+/* local function prototypes */
+static bool is_listed (const char *cfgin, const char *tty, bool def);
+
+/*
+ * This is now rather generic function which decides if "tty" is listed
+ * under "cfgin" in config (directly or indirectly). Fallback to default if
+ * something is bad.
+ */
+static bool is_listed (const char *cfgin, const char *tty, bool def)
+{
+       FILE *fp;
+       char buf[200], *cons, *s;
+
+       /*
+        * If the CONSOLE configuration definition isn't given,
+        * fallback to default.
+        */
+
+       cons = getdef_str (cfgin);
+       if (NULL == cons) {
+               return def;
+       }
+
+       /*
+        * If this isn't a filename, then it is a ":" delimited list of
+        * console devices upon which root logins are allowed.
+        */
+
+       if (*cons != '/') {
+               strcpy (buf, cons);
+               while ((s = strtok (buf, ":")) != NULL) {
+                       if (strcmp (s, tty) == 0) {
+                               return true;
+                       }
+
+                       cons = NULL;
+               }
+               return false;
+       }
+
+       /*
+        * If we can't open the console list, then call everything a
+        * console - otherwise root will never be allowed to login.
+        */
+
+       fp = fopen (cons, "r");
+       if (NULL == fp) {
+               return def;
+       }
+
+       /*
+        * See if this tty is listed in the console file.
+        */
+
+       while (fgets (buf, (int) sizeof (buf), fp) != NULL) {
+               buf[strlen (buf) - 1] = '\0';
+               if (strcmp (buf, tty) == 0) {
+                       (void) fclose (fp);
+                       return true;
+               }
+       }
+
+       /*
+        * This tty isn't a console.
+        */
+
+       (void) fclose (fp);
+       return false;
+}
+
+/*
+ * console - return 1 if the "tty" is a console device, else 0.
+ *
+ * Note - we need to take extreme care here to avoid locking out root logins
+ * if something goes awry.  That's why we do things like call everything a
+ * console if the consoles file can't be opened.  Because of this, we must
+ * warn the user to protect against the remove of the consoles file since
+ * that would allow an unauthorized root login.
+ */
+
+bool console (const char *tty)
+{
+       if (strncmp (tty, "/dev/", 5) == 0) {
+               tty += 5;
+       }
+
+       return is_listed ("CONSOLE", tty, true);
+}
+
diff --git a/libmisc/copydir.c b/libmisc/copydir.c
new file mode 100644 (file)
index 0000000..fac585c
--- /dev/null
@@ -0,0 +1,750 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2001, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: copydir.c 2978 2009-05-22 10:16:12Z nekral-guest $"
+
+#include <assert.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#endif
+static /*@null@*/const char *src_orig;
+static /*@null@*/const char *dst_orig;
+
+struct link_name {
+       dev_t ln_dev;
+       ino_t ln_ino;
+       nlink_t ln_count;
+       char *ln_name;
+       /*@dependent@*/struct link_name *ln_next;
+};
+static /*@exposed@*/struct link_name *links;
+
+static int copy_entry (const char *src, const char *dst,
+                       long int uid, long int gid);
+static int copy_dir (const char *src, const char *dst,
+                     const struct stat *statp, const struct timeval mt[],
+                     long int uid, long int gid);
+#ifdef S_IFLNK
+static char *readlink_malloc (const char *filename);
+static int copy_symlink (const char *src, const char *dst,
+                         const struct stat *statp, const struct timeval mt[],
+                         long int uid, long int gid);
+#endif
+static int copy_hardlink (const char *src, const char *dst,
+                          struct link_name *lp);
+static int copy_special (const char *dst,
+                         const struct stat *statp, const struct timeval mt[],
+                         long int uid, long int gid);
+static int copy_file (const char *src, const char *dst,
+                      const struct stat *statp, const struct timeval mt[],
+                      long int uid, long int gid);
+
+#ifdef WITH_SELINUX
+/*
+ * selinux_file_context - Set the security context before any file or
+ *                        directory creation.
+ *
+ *     selinux_file_context () should be called before any creation of file,
+ *     symlink, directory, ...
+ *
+ *     Callers may have to Reset SELinux to create files with default
+ *     contexts:
+ *             setfscreatecon (NULL);
+ */
+int selinux_file_context (const char *dst_name)
+{
+       static bool selinux_checked = false;
+       static bool selinux_enabled;
+       security_context_t scontext = NULL;
+
+       if (!selinux_checked) {
+               selinux_enabled = is_selinux_enabled () > 0;
+               selinux_checked = true;
+       }
+
+       if (selinux_enabled) {
+               /* Get the default security context for this file */
+               if (matchpathcon (dst_name, 0, &scontext) < 0) {
+                       if (security_getenforce () != 0) {
+                               return 1;
+                       }
+               }
+               /* Set the security context for the next created file */
+               if (setfscreatecon (scontext) < 0) {
+                       if (security_getenforce () != 0) {
+                               return 1;
+                       }
+               }
+               freecon (scontext);
+       }
+       return 0;
+}
+#endif
+
+/*
+ * remove_link - delete a link from the linked list
+ */
+static void remove_link (/*@only@*/struct link_name *ln)
+{
+       struct link_name *lp;
+
+       if (links == ln) {
+               links = ln->ln_next;
+               free (ln->ln_name);
+               free (ln);
+               return;
+       }
+       for (lp = links; NULL !=lp; lp = lp->ln_next) {
+               if (lp->ln_next == ln) {
+                       break;
+               }
+       }
+
+       if (NULL == lp) {
+               free (ln->ln_name);
+               free (ln);
+               return;
+       }
+
+       lp->ln_next = lp->ln_next->ln_next;
+       free (ln->ln_name);
+       free (ln);
+}
+
+/*
+ * check_link - see if a file is really a link
+ */
+
+static /*@exposed@*/ /*@null@*/struct link_name *check_link (const char *name, const struct stat *sb)
+{
+       struct link_name *lp;
+       size_t src_len;
+       size_t dst_len;
+       size_t name_len;
+       size_t len;
+
+       /* copy_tree () must be the entry point */
+       assert (NULL != src_orig);
+       assert (NULL != dst_orig);
+
+       for (lp = links; NULL != lp; lp = lp->ln_next) {
+               if ((lp->ln_dev == sb->st_dev) && (lp->ln_ino == sb->st_ino)) {
+                       return lp;
+               }
+       }
+
+       if (sb->st_nlink == 1) {
+               return NULL;
+       }
+
+       lp = (struct link_name *) xmalloc (sizeof *lp);
+       src_len = strlen (src_orig);
+       dst_len = strlen (dst_orig);
+       name_len = strlen (name);
+       lp->ln_dev = sb->st_dev;
+       lp->ln_ino = sb->st_ino;
+       lp->ln_count = sb->st_nlink;
+       len = name_len - src_len + dst_len + 1;
+       lp->ln_name = (char *) xmalloc (len);
+       snprintf (lp->ln_name, len, "%s%s", dst_orig, name + src_len);
+       lp->ln_next = links;
+       links = lp;
+
+       return NULL;
+}
+
+/*
+ * copy_tree - copy files in a directory tree
+ *
+ *     copy_tree() walks a directory tree and copies ordinary files
+ *     as it goes.
+ */
+int copy_tree (const char *src_root, const char *dst_root,
+               long int uid, long int gid)
+{
+       int err = 0;
+       bool set_orig = false;
+       struct DIRECT *ent;
+       DIR *dir;
+
+       /*
+        * Make certain both directories exist.  This routine is called
+        * after the home directory is created, or recursively after the
+        * target is created.  It assumes the target directory exists.
+        */
+
+       if (   (access (src_root, F_OK) != 0)
+           || (access (dst_root, F_OK) != 0)) {
+               return -1;
+       }
+
+       /*
+        * Open the source directory and read each entry.  Every file
+        * entry in the directory is copied with the UID and GID set
+        * to the provided values.  As an added security feature only
+        * regular files (and directories ...) are copied, and no file
+        * is made set-ID.
+        */
+       dir = opendir (src_root);
+       if (NULL == dir) {
+               return -1;
+       }
+
+       if (src_orig == NULL) {
+               src_orig = src_root;
+               dst_orig = dst_root;
+               set_orig = true;
+       }
+       while ((0 == err) && (ent = readdir (dir)) != NULL) {
+               /*
+                * Skip the "." and ".." entries
+                */
+               if ((strcmp (ent->d_name, ".") != 0) &&
+                   (strcmp (ent->d_name, "..") != 0)) {
+                       char *src_name;
+                       char *dst_name;
+                       size_t src_len = strlen (ent->d_name) + 2;
+                       size_t dst_len = strlen (ent->d_name) + 2;
+                       src_len += strlen (src_root);
+                       dst_len += strlen (dst_root);
+
+                       src_name = (char *) malloc (src_len);
+                       dst_name = (char *) malloc (dst_len);
+
+                       if ((NULL == src_name) || (NULL == dst_name)) {
+                               err = -1;
+                       } else {
+                               /*
+                                * Build the filename for both the source and
+                                * the destination files.
+                                */
+                               snprintf (src_name, src_len, "%s/%s",
+                                         src_root, ent->d_name);
+                               snprintf (dst_name, dst_len, "%s/%s",
+                                         dst_root, ent->d_name);
+
+                               err = copy_entry (src_name, dst_name, uid, gid);
+                       }
+                       if (NULL != src_name) {
+                               free (src_name);
+                       }
+                       if (NULL != dst_name) {
+                               free (dst_name);
+                       }
+               }
+       }
+       (void) closedir (dir);
+
+       if (set_orig) {
+               src_orig = NULL;
+               dst_orig = NULL;
+       }
+
+#ifdef WITH_SELINUX
+       /* Reset SELinux to create files with default contexts */
+       setfscreatecon (NULL);
+#endif
+
+       /* FIXME: with the call to remove_link, we could also check that
+        *        no links remain in links.
+        * assert (NULL == links); */
+
+       return err;
+}
+
+/*
+ * copy_entry - copy the entry of a directory
+ *
+ *     Copy the entry src to dst.
+ *     Depending on the type of entry, this function will forward the
+ *     request to copy_dir(), copy_symlink(), copy_hardlink(),
+ *     copy_special(), or copy_file().
+ *
+ *     The access and modification time will not be modified.
+ *
+ *     The permissions will be set to uid/gid.
+ *
+ *     If uid (resp. gid) is equal to -1, the user (resp. group) will
+ *     not be modified.
+ */
+static int copy_entry (const char *src, const char *dst,
+                       long int uid, long int gid)
+{
+       int err = 0;
+       struct stat sb;
+       struct link_name *lp;
+       struct timeval mt[2];
+
+       if (LSTAT (src, &sb) == -1) {
+               /* If we cannot stat the file, do not care. */
+       } else {
+#ifdef HAVE_STRUCT_STAT_ST_ATIM
+               mt[0].tv_sec  = sb.st_atim.tv_sec;
+               mt[0].tv_usec = sb.st_atim.tv_nsec / 1000;
+#else
+               mt[0].tv_sec  = sb.st_atime;
+#ifdef HAVE_STRUCT_STAT_ST_ATIMENSEC
+               mt[0].tv_usec = sb.st_atimensec / 1000;
+#else
+               mt[0].tv_usec = 0;
+#endif
+#endif
+
+#ifdef HAVE_STRUCT_STAT_ST_MTIM
+               mt[1].tv_sec  = sb.st_mtim.tv_sec;
+               mt[1].tv_usec = sb.st_mtim.tv_nsec / 1000;
+#else
+               mt[1].tv_sec  = sb.st_mtime;
+#ifdef HAVE_STRUCT_STAT_ST_MTIMENSEC
+               mt[1].tv_usec = sb.st_mtimensec / 1000;
+#else
+               mt[1].tv_usec = 0;
+#endif
+#endif
+
+               if (S_ISDIR (sb.st_mode)) {
+                       err = copy_dir (src, dst, &sb, mt, uid, gid);
+               }
+
+#ifdef S_IFLNK
+               /*
+                * Copy any symbolic links
+                */
+
+               else if (S_ISLNK (sb.st_mode)) {
+                       err = copy_symlink (src, dst, &sb, mt, uid, gid);
+               }
+#endif
+
+               /*
+                * See if this is a previously copied link
+                */
+
+               else if ((lp = check_link (src, &sb)) != NULL) {
+                       err = copy_hardlink (src, dst, lp);
+               }
+
+               /*
+                * Deal with FIFOs and special files.  The user really
+                * shouldn't have any of these, but it seems like it
+                * would be nice to copy everything ...
+                */
+
+               else if (!S_ISREG (sb.st_mode)) {
+                       err = copy_special (dst, &sb, mt, uid, gid);
+               }
+
+               /*
+                * Create the new file and copy the contents.  The new
+                * file will be owned by the provided UID and GID values.
+                */
+
+               else {
+                       err = copy_file (src, dst, &sb, mt, uid, gid);
+               }
+       }
+
+       return err;
+}
+
+/*
+ * copy_dir - copy a directory
+ *
+ *     Copy a directory (recursively) from src to dst.
+ *
+ *     statp, mt, uid, gid are used to set the access and modification and the
+ *     access rights.
+ *
+ *     Return 0 on success, -1 on error.
+ */
+static int copy_dir (const char *src, const char *dst,
+                     const struct stat *statp, const struct timeval mt[],
+                     long int uid, long int gid)
+{
+       int err = 0;
+
+       /*
+        * Create a new target directory, make it owned by
+        * the user and then recursively copy that directory.
+        */
+
+#ifdef WITH_SELINUX
+       selinux_file_context (dst);
+#endif
+       if (   (mkdir (dst, statp->st_mode) != 0)
+           || (chown (dst,
+                      (uid == - 1) ? statp->st_uid : (uid_t) uid,
+                      (gid == - 1) ? statp->st_gid : (gid_t) gid) != 0)
+           || (chmod (dst, statp->st_mode) != 0)
+           || (copy_tree (src, dst, uid, gid) != 0)
+           || (utimes (dst, mt) != 0)) {
+               err = -1;
+       }
+
+       return err;
+}
+
+#ifdef S_IFLNK
+/*
+ * readlink_malloc - wrapper for readlink
+ *
+ * return NULL on error.
+ * The return string shall be freed by the caller.
+ */
+static char *readlink_malloc (const char *filename)
+{
+       size_t size = 1024;
+
+       while (1) {
+               ssize_t nchars;
+               char *buffer = (char *) malloc (size);
+               if (NULL == buffer) {
+                       return NULL;
+               }
+
+               nchars = readlink (filename, buffer, size);
+
+               if (nchars < 0) {
+                       return NULL;
+               }
+
+               if ( (size_t) nchars < size) { /* The buffer was large enough */
+                       /* readlink does not nul-terminate */
+                       buffer[nchars] = '\0';
+                       return buffer;
+               }
+
+               /* Try again with a bigger buffer */
+               free (buffer);
+               size *= 2;
+       }
+}
+
+/*
+ * copy_symlink - copy a symlink
+ *
+ *     Copy a symlink from src to dst.
+ *
+ *     statp, mt, uid, gid are used to set the access and modification and the
+ *     access rights.
+ *
+ *     Return 0 on success, -1 on error.
+ */
+static int copy_symlink (const char *src, const char *dst,
+                         const struct stat *statp, const struct timeval mt[],
+                         long int uid, long int gid)
+{
+       char *oldlink;
+
+       /* copy_tree () must be the entry point */
+       assert (NULL != src_orig);
+       assert (NULL != dst_orig);
+
+       /*
+        * Get the name of the file which the link points
+        * to.  If that name begins with the original
+        * source directory name, that part of the link
+        * name will be replaced with the original
+        * destination directory name.
+        */
+
+       oldlink = readlink_malloc (src);
+       if (NULL == oldlink) {
+               return -1;
+       }
+
+       /* If src was a link to an entry of the src_orig directory itself,
+        * create a link to the corresponding entry in the dst_orig
+        * directory.
+        * FIXME: This may change a relative link to an absolute link
+        */
+       if (strncmp (oldlink, src_orig, strlen (src_orig)) == 0) {
+               size_t len = strlen (dst_orig) + strlen (oldlink) - strlen (src_orig) + 1;
+               char *dummy = (char *) malloc (len);
+               snprintf (dummy, len, "%s%s",
+                         dst_orig,
+                         oldlink + strlen (src_orig));
+               free (oldlink);
+               oldlink = dummy;
+       }
+
+#ifdef WITH_SELINUX
+       selinux_file_context (dst);
+#endif
+       if (   (symlink (oldlink, dst) != 0)
+           || (lchown (dst,
+                       (uid == -1) ? statp->st_uid : (uid_t) uid,
+                       (gid == -1) ? statp->st_gid : (gid_t) gid) != 0)) {
+               free (oldlink);
+               return -1;
+       }
+       free (oldlink);
+
+#ifdef HAVE_LUTIMES
+       /* 2007-10-18: We don't care about
+        *  exit status of lutimes because
+        *  it returns ENOSYS on many system
+        *  - not implemented
+        */
+       lutimes (dst, mt);
+#endif
+
+       return 0;
+}
+#endif
+
+/*
+ * copy_hardlink - copy a hardlink
+ *
+ *     Copy a hardlink from src to dst.
+ *
+ *     Return 0 on success, -1 on error.
+ */
+static int copy_hardlink (const char *src, const char *dst,
+                          struct link_name *lp)
+{
+       /* TODO: selinux needed? */
+
+       if (link (lp->ln_name, dst) != 0) {
+               return -1;
+       }
+
+       /* FIXME: why is it unlinked? This is a copy, not a move */
+       if (unlink (src) != 0) {
+               return -1;
+       }
+
+       /* FIXME: idem, although it may never be used again */
+       /* If the file could be unlinked, decrement the links counter,
+        * and delete the file if it was the last reference */
+       lp->ln_count--;
+       if (lp->ln_count <= 0) {
+               remove_link (lp);
+       }
+
+       return 0;
+}
+
+/*
+ * copy_special - copy a special file
+ *
+ *     Copy a special file from src to dst.
+ *
+ *     statp, mt, uid, gid are used to set the access and modification and the
+ *     access rights.
+ *
+ *     Return 0 on success, -1 on error.
+ */
+static int copy_special (const char *dst,
+                         const struct stat *statp, const struct timeval mt[],
+                         long int uid, long int gid)
+{
+       int err = 0;
+
+#ifdef WITH_SELINUX
+       selinux_file_context (dst);
+#endif
+
+       if (   (mknod (dst, statp->st_mode & ~07777, statp->st_rdev) != 0)
+           || (chown (dst,
+                      (uid == -1) ? statp->st_uid : (uid_t) uid,
+                      (gid == -1) ? statp->st_gid : (gid_t) gid) != 0)
+           || (chmod (dst, statp->st_mode & 07777) != 0)
+           || (utimes (dst, mt) != 0)) {
+               err = -1;
+       }
+
+       return err;
+}
+
+/*
+ * copy_file - copy a file
+ *
+ *     Copy a file from src to dst.
+ *
+ *     statp, mt, uid, gid are used to set the access and modification and the
+ *     access rights.
+ *
+ *     Return 0 on success, -1 on error.
+ */
+static int copy_file (const char *src, const char *dst,
+                      const struct stat *statp, const struct timeval mt[],
+                      long int uid, long int gid)
+{
+       int err = 0;
+       int ifd;
+       int ofd;
+       char buf[1024];
+       ssize_t cnt;
+
+       ifd = open (src, O_RDONLY);
+       if (ifd < 0) {
+               return -1;
+       }
+#ifdef WITH_SELINUX
+       selinux_file_context (dst);
+#endif
+       ofd = open (dst, O_WRONLY | O_CREAT | O_TRUNC, statp->st_mode & 07777);
+       if (   (ofd < 0)
+           || (fchown (ofd,
+                       (uid == -1) ? statp->st_uid : (uid_t) uid,
+                       (gid == -1) ? statp->st_gid : (gid_t) gid) != 0)
+           || (fchmod (ofd, statp->st_mode & 07777) != 0)) {
+               (void) close (ifd);
+               return -1;
+       }
+
+       while ((cnt = read (ifd, buf, sizeof buf)) > 0) {
+               if (write (ofd, buf, (size_t)cnt) != cnt) {
+                       return -1;
+               }
+       }
+
+       (void) close (ifd);
+
+#ifdef HAVE_FUTIMES
+       if (futimes (ofd, mt) != 0) {
+               return -1;
+       }
+#endif
+
+       if (close (ofd) != 0) {
+               return -1;
+       }
+
+#ifndef HAVE_FUTIMES
+       if (utimes(dst, mt) != 0) {
+               return -1;
+       }
+#endif
+
+       return err;
+}
+
+/*
+ * remove_tree - delete a directory tree
+ *
+ *     remove_tree() walks a directory tree and deletes all the files
+ *     and directories.
+ *     At the end, it deletes the root directory itself.
+ */
+
+int remove_tree (const char *root)
+{
+       char *new_name = NULL;
+       int err = 0;
+       struct DIRECT *ent;
+       struct stat sb;
+       DIR *dir;
+
+       /*
+        * Open the source directory and read each entry.  Every file
+        * entry in the directory is copied with the UID and GID set
+        * to the provided values.  As an added security feature only
+        * regular files (and directories ...) are copied, and no file
+        * is made set-ID.
+        */
+       dir = opendir (root);
+       if (NULL == dir) {
+               return -1;
+       }
+
+       while ((ent = readdir (dir))) {
+               size_t new_len = strlen (root) + strlen (ent->d_name) + 2;
+
+               /*
+                * Skip the "." and ".." entries
+                */
+
+               if (strcmp (ent->d_name, ".") == 0 ||
+                   strcmp (ent->d_name, "..") == 0) {
+                       continue;
+               }
+
+               /*
+                * Make the filename for the current entry.
+                */
+
+               if (NULL != new_name) {
+                       free (new_name);
+               }
+               new_name = (char *) malloc (new_len);
+               if (NULL == new_name) {
+                       err = -1;
+                       break;
+               }
+               snprintf (new_name, new_len, "%s/%s", root, ent->d_name);
+               if (LSTAT (new_name, &sb) == -1) {
+                       continue;
+               }
+
+               if (S_ISDIR (sb.st_mode)) {
+                       /*
+                        * Recursively delete this directory.
+                        */
+                       if (remove_tree (new_name) != 0) {
+                               err = -1;
+                               break;
+                       }
+               } else {
+                       /*
+                        * Delete the file.
+                        */
+                       if (unlink (new_name) != 0) {
+                               err = -1;
+                               break;
+                       }
+               }
+       }
+       if (NULL != new_name) {
+               free (new_name);
+       }
+       (void) closedir (dir);
+
+       if (0 == err) {
+               if (rmdir (root) != 0) {
+                       err = -1;
+               }
+       }
+
+       return err;
+}
+
diff --git a/libmisc/entry.c b/libmisc/entry.c
new file mode 100644 (file)
index 0000000..20ad824
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: entry.c 1980 2008-04-27 00:40:09Z nekral-guest $"
+
+#include <sys/types.h>
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+
+void pw_entry (const char *name, struct passwd *pwent)
+{
+       struct passwd *passwd;
+
+       struct spwd *spwd;
+
+       if (!(passwd = getpwnam (name))) { /* local, no need for xgetpwnam */
+               pwent->pw_name = (char *) 0;
+               return;
+       } else {
+               pwent->pw_name = xstrdup (passwd->pw_name);
+               pwent->pw_uid = passwd->pw_uid;
+               pwent->pw_gid = passwd->pw_gid;
+               pwent->pw_gecos = xstrdup (passwd->pw_gecos);
+               pwent->pw_dir = xstrdup (passwd->pw_dir);
+               pwent->pw_shell = xstrdup (passwd->pw_shell);
+#if !defined(AUTOSHADOW)
+               /* local, no need for xgetspnam */
+               if ((spwd = getspnam (name))) {
+                       pwent->pw_passwd = xstrdup (spwd->sp_pwdp);
+                       return;
+               }
+#endif
+               pwent->pw_passwd = xstrdup (passwd->pw_passwd);
+       }
+}
diff --git a/libmisc/env.c b/libmisc/env.c
new file mode 100644 (file)
index 0000000..4f664e0
--- /dev/null
@@ -0,0 +1,265 @@
+/*
+ * Copyright (c) 1989 - 1992, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: env.c 2818 2009-04-27 20:07:59Z nekral-guest $"
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "prototypes.h"
+#include "defines.h"
+/*
+ * NEWENVP_STEP must be a power of two.  This is the number
+ * of (char *) pointers to allocate at a time, to avoid using
+ * realloc() too often.
+ */
+#define NEWENVP_STEP 16
+size_t newenvc = 0;
+/*@null@*/char **newenvp = NULL;
+extern char **environ;
+
+static const char *forbid[] = {
+       "_RLD_=",
+       "BASH_ENV=",            /* GNU creeping featurism strikes again... */
+       "ENV=",
+       "HOME=",
+       "IFS=",
+       "KRB_CONF=",
+       "LD_",                  /* anything with the LD_ prefix */
+       "LIBPATH=",
+       "MAIL=",
+       "NLSPATH=",
+       "PATH=",
+       "SHELL=",
+       "SHLIB_PATH=",
+       (char *) 0
+};
+
+/* these are allowed, but with no slashes inside
+   (to work around security problems in GNU gettext) */
+static const char *noslash[] = {
+       "LANG=",
+       "LANGUAGE=",
+       "LC_",                  /* anything with the LC_ prefix */
+       (char *) 0
+};
+
+/*
+ * initenv() must be called once before using addenv().
+ */
+void initenv (void)
+{
+       newenvp = (char **) xmalloc (NEWENVP_STEP * sizeof (char *));
+       *newenvp = NULL;
+}
+
+
+void addenv (const char *string, /*@null@*/const char *value)
+{
+       char *cp, *newstring;
+       size_t i;
+       size_t n;
+
+       if (NULL != value) {
+               size_t len = strlen (string) + strlen (value) + 2;
+               int wlen;
+               newstring = xmalloc (len);
+               wlen = snprintf (newstring, len, "%s=%s", string, value);
+               assert (wlen == (int) len -1);
+       } else {
+               newstring = xstrdup (string);
+       }
+
+       /*
+        * Search for a '=' character within the string and if none is found
+        * just ignore the whole string.
+        */
+
+       cp = strchr (newstring, '=');
+       if (NULL == cp) {
+               free (newstring);
+               return;
+       }
+
+       n = (size_t) (cp - newstring);
+
+       for (i = 0; i < newenvc; i++) {
+               if (   (strncmp (newstring, newenvp[i], n) == 0)
+                   && (('=' == newenvp[i][n]) || ('\0' == newenvp[i][n]))) {
+                       break;
+               }
+       }
+
+       if (i < newenvc) {
+               free (newenvp[i]);
+               newenvp[i] = newstring;
+               return;
+       }
+
+       newenvp[newenvc++] = newstring;
+
+       /*
+        * Check whether newenvc is a multiple of NEWENVP_STEP.
+        * If so we have to resize the vector.
+        * the expression (newenvc & (NEWENVP_STEP - 1)) == 0
+        * is equal to    (newenvc %  NEWENVP_STEP) == 0
+        * as long as NEWENVP_STEP is a power of 2.
+        */
+
+       if ((newenvc & (NEWENVP_STEP - 1)) == 0) {
+               char **__newenvp;
+               size_t newsize;
+
+               /*
+                * If the resize operation succeds we can
+                * happily go on, else print a message.
+                */
+
+               newsize = (newenvc + NEWENVP_STEP) * sizeof (char *);
+               __newenvp = (char **) realloc (newenvp, newsize);
+
+               if (__newenvp) {
+                       /*
+                        * If this is our current environment, update
+                        * environ so that it doesn't point to some
+                        * free memory area (realloc() could move it).
+                        */
+                       if (environ == newenvp) {
+                               environ = __newenvp;
+                       }
+                       newenvp = __newenvp;
+               } else {
+                       (void) fputs (_("Environment overflow\n"), stderr);
+                       newenvc--;
+                       free (newenvp[newenvc]);
+               }
+       }
+
+       /*
+        * The last entry of newenvp must be NULL
+        */
+
+       newenvp[newenvc] = NULL;
+}
+
+
+/*
+ * set_env - copy command line arguments into the environment
+ */
+void set_env (int argc, char *const *argv)
+{
+       int noname = 1;
+       char variable[1024];
+       char *cp;
+
+       for (; argc > 0; argc--, argv++) {
+               if (strlen (*argv) >= sizeof variable) {
+                       continue;       /* ignore long entries */
+               }
+
+               cp = strchr (*argv, '=');
+               if (NULL == cp) {
+                       int wlen;
+                       wlen = snprintf (variable, sizeof variable, "L%d", noname);
+                       assert (wlen < (int) sizeof(variable));
+                       noname++;
+                       addenv (variable, *argv);
+               } else {
+                       const char **p;
+
+                       for (p = forbid; NULL != *p; p++) {
+                               if (strncmp (*argv, *p, strlen (*p)) == 0) {
+                                       break;
+                               }
+                       }
+
+                       if (NULL != *p) {
+                               strncpy (variable, *argv, (size_t)(cp - *argv));
+                               variable[cp - *argv] = '\0';
+                               printf (_("You may not change $%s\n"),
+                                       variable);
+                               continue;
+                       }
+
+                       addenv (*argv, NULL);
+               }
+       }
+}
+
+/*
+ * sanitize_env - remove some nasty environment variables
+ * If you fall into a total paranoia, you should call this
+ * function for any root-setuid program or anything the user
+ * might change the environment with. 99% useless as almost
+ * all modern Unixes will handle setuid executables properly,
+ * but... I feel better with that silly precaution. -j.
+ */
+
+void sanitize_env (void)
+{
+       char **envp = environ;
+       const char **bad;
+       char **cur;
+       char **move;
+
+       for (cur = envp; NULL != *cur; cur++) {
+               for (bad = forbid; NULL != *bad; bad++) {
+                       if (strncmp (*cur, *bad, strlen (*bad)) == 0) {
+                               for (move = cur; NULL != *move; move++) {
+                                       *move = *(move + 1);
+                               }
+                               cur--;
+                               break;
+                       }
+               }
+       }
+
+       for (cur = envp; NULL != *cur; cur++) {
+               for (bad = noslash; NULL != *bad; bad++) {
+                       if (strncmp (*cur, *bad, strlen (*bad)) != 0) {
+                               continue;
+                       }
+                       if (strchr (*cur, '/') != NULL) {
+                               continue;       /* OK */
+                       }
+                       for (move = cur; NULL != *move; move++) {
+                               *move = *(move + 1);
+                       }
+                       cur--;
+                       break;
+               }
+       }
+}
+
diff --git a/libmisc/failure.c b/libmisc/failure.c
new file mode 100644 (file)
index 0000000..956db9b
--- /dev/null
@@ -0,0 +1,341 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: failure.c 2829 2009-04-28 19:14:50Z nekral-guest $"
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <unistd.h>
+#include "defines.h"
+#include "faillog.h"
+#include "getdef.h"
+#include "failure.h"
+#define        YEAR    (365L*DAY)
+/*
+ * failure - make failure entry
+ *
+ *     failure() creates a new (struct faillog) entry or updates an
+ *     existing one with the current failed login information.
+ */
+void failure (uid_t uid, const char *tty, struct faillog *fl)
+{
+       int fd;
+       off_t offset_uid = (off_t) (sizeof *fl) * uid;
+
+       /*
+        * Don't do anything if failure logging isn't set up.
+        */
+
+       if (access (FAILLOG_FILE, F_OK) != 0) {
+               return;
+       }
+
+       fd = open (FAILLOG_FILE, O_RDWR);
+       if (fd < 0) {
+               SYSLOG ((LOG_WARN,
+                        "Can't write faillog entry for UID %lu in %s.",
+                        (unsigned long) uid, FAILLOG_FILE));
+               return;
+       }
+
+       /*
+        * The file is indexed by UID value meaning that shared UID's
+        * share failure log records.  That's OK since they really
+        * share just about everything else ...
+        */
+
+       if (   (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
+           || (read (fd, (char *) fl, sizeof *fl) != (ssize_t) sizeof *fl)) {
+               /* This is not necessarily a failure. The file is
+                * initially zero length.
+                *
+                * If lseek() or read() failed for any other reason, this
+                * might reset the counter. But the new failure will be
+                * logged.
+                */
+               memzero (fl, sizeof *fl);
+       }
+
+       /*
+        * Update the record.  We increment the failure count to log the
+        * latest failure.  The only concern here is overflow, and we'll
+        * check for that.  The line name and time of day are both
+        * updated as well.
+        */
+
+       if (fl->fail_cnt + 1 > 0) {
+               fl->fail_cnt++;
+       }
+
+       strncpy (fl->fail_line, tty, sizeof fl->fail_line);
+       (void) time (&fl->fail_time);
+
+       /*
+        * Seek back to the correct position in the file and write the
+        * record out.  Ideally we should lock the file in case the same
+        * account is being logged simultaneously.  But the risk doesn't
+        * seem that great.
+        */
+
+       if (   (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
+           || (write (fd, (char *) fl, sizeof *fl) != (ssize_t) sizeof *fl)
+           || (close (fd) != 0)) {
+               SYSLOG ((LOG_WARN,
+                        "Can't write faillog entry for UID %lu in %s.",
+                        (unsigned long) uid, FAILLOG_FILE));
+               (void) close (fd);
+       }
+}
+
+static bool too_many_failures (const struct faillog *fl)
+{
+       time_t now;
+
+       if ((0 == fl->fail_max) || (fl->fail_cnt < fl->fail_max)) {
+               return false;
+       }
+
+       if (0 == fl->fail_locktime) {
+               return true;    /* locked until reset manually */
+       }
+
+       (void) time (&now);
+       if ((fl->fail_time + fl->fail_locktime) < now) {
+               return false;   /* enough time since last failure */
+       }
+
+       return true;
+}
+
+/*
+ * failcheck - check for failures > allowable
+ *
+ *     failcheck() is called AFTER the password has been validated.  If the
+ *     account has been "attacked" with too many login failures, failcheck()
+ *     returns 0 to indicate that the login should be denied even though
+ *     the password is valid.
+ *
+ *     failed indicates if the login failed AFTER the password has been
+ *            validated.
+ */
+
+int failcheck (uid_t uid, struct faillog *fl, bool failed)
+{
+       int fd;
+       struct faillog fail;
+       off_t offset_uid = (off_t) (sizeof *fl) * uid;
+
+       /*
+        * Suppress the check if the log file isn't there.
+        */
+
+       if (access (FAILLOG_FILE, F_OK) != 0) {
+               return 1;
+       }
+
+       fd = open (FAILLOG_FILE, failed?O_RDONLY:O_RDWR);
+       if (fd < 0) {
+               SYSLOG ((LOG_WARN,
+                        "Can't open the faillog file (%s) to check UID %lu. "
+                        "User access authorized.",
+                        FAILLOG_FILE, (unsigned long) uid));
+               return 1;
+       }
+
+       /*
+        * Get the record from the file and determine if the user has
+        * exceeded the failure limit.  If "max" is zero, any number
+        * of failures are permitted.  Only when "max" is non-zero and
+        * "cnt" is greater than or equal to "max" is the account
+        * considered to be locked.
+        *
+        * If read fails, there is no record for this user yet (the
+        * file is initially zero length and extended by writes), so
+        * no need to reset the count.
+        */
+
+       if (   (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
+           || (read (fd, (char *) fl, sizeof *fl) != (ssize_t) sizeof *fl)) {
+               (void) close (fd);
+               return 1;
+       }
+
+       if (too_many_failures (fl)) {
+               (void) close (fd);
+               return 0;
+       }
+
+       /*
+        * The record is updated if this is not a failure.  The count will
+        * be reset to zero, but the rest of the information will be left
+        * in the record in case someone wants to see where the failed
+        * login originated.
+        */
+
+       if (!failed) {
+               fail = *fl;
+               fail.fail_cnt = 0;
+
+               if (   (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
+                   || (write (fd, (const void *) &fail, sizeof fail) != (ssize_t) sizeof fail)
+                   || (close (fd) != 0)) {
+                       SYSLOG ((LOG_WARN,
+                                "Can't reset faillog entry for UID %lu in %s.",
+                                (unsigned long) uid, FAILLOG_FILE));
+                       (void) close (fd);
+               }
+       } else {
+               (void) close (fd);
+       }
+
+       return 1;
+}
+
+/*
+ * failprint - print line of failure information
+ *
+ *     failprint takes a (struct faillog) entry and formats it into a
+ *     message which is displayed at login time.
+ */
+
+void failprint (const struct faillog *fail)
+{
+       struct tm *tp;
+
+#if HAVE_STRFTIME
+       char lasttimeb[256];
+       char *lasttime = lasttimeb;
+#else
+       char *lasttime;
+#endif
+       time_t NOW;
+
+       if (0 == fail->fail_cnt) {
+               return;
+       }
+
+       tp = localtime (&(fail->fail_time));
+       (void) time (&NOW);
+
+#if HAVE_STRFTIME
+       /*
+        * Print all information we have.
+        */
+       (void) strftime (lasttimeb, sizeof lasttimeb, "%c", tp);
+#else
+
+       /*
+        * Do the same thing, but don't use strftime since it
+        * probably doesn't exist on this system
+        */
+       lasttime = asctime (tp);
+       lasttime[24] = '\0';
+
+       if ((NOW - fail->fail_time) < YEAR) {
+               lasttime[19] = '\0';
+       }
+       if ((NOW - fail->fail_time) < DAY) {
+               lasttime = lasttime + 11;
+       }
+
+       if (' ' == *lasttime) {
+               lasttime++;
+       }
+#endif
+       (void) printf (ngettext ("%d failure since last login.\n"
+                                "Last was %s on %s.\n",
+                                "%d failures since last login.\n"
+                                "Last was %s on %s.\n",
+                                (unsigned long) fail->fail_cnt),
+                      fail->fail_cnt, lasttime, fail->fail_line);
+}
+
+/*
+ * failtmp - update the cumulative failure log
+ *
+ *     failtmp updates the (struct utmp) formatted failure log which
+ *     maintains a record of all login failures.
+ */
+
+void failtmp (const char *username,
+#ifdef USE_UTMPX
+                    const struct utmpx *failent
+#else                          /* !USE_UTMPX */
+                    const struct utmp *failent
+#endif                         /* !USE_UTMPX */
+    )
+{
+       char *ftmp;
+       int fd;
+
+       /*
+        * Get the name of the failure file.  If no file has been defined
+        * in login.defs, don't do this.
+        */
+
+       ftmp = getdef_str ("FTMP_FILE");
+       if (NULL == ftmp) {
+               return;
+       }
+
+       /*
+        * Open the file for append.  It must already exist for this
+        * feature to be used.
+        */
+
+       if (access (ftmp, F_OK) != 0) {
+               return;
+       }
+
+       fd = open (ftmp, O_WRONLY | O_APPEND);
+       if (-1 == fd) {
+               SYSLOG ((LOG_WARN,
+                        "Can't append failure of user %s to %s.",
+                        username, ftmp));
+               return;
+       }
+
+       /*
+        * Append the new failure record and close the log file.
+        */
+
+       if (   (write (fd, (const void *) failent, sizeof *failent) != (ssize_t) sizeof *failent)
+           || (close (fd) != 0)) {
+               SYSLOG ((LOG_WARN,
+                        "Can't append failure of user %s to %s.",
+                        username, ftmp));
+               (void) close (fd);
+       }
+}
+
diff --git a/libmisc/failure.h b/libmisc/failure.h
new file mode 100644 (file)
index 0000000..739dc88
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1997 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id: failure.h 2831 2009-04-28 19:19:33Z nekral-guest $ */
+#ifndef _FAILURE_H_
+#define _FAILURE_H_
+
+#include "defines.h"
+#include "faillog.h"
+#ifdef USE_UTMPX
+#include <utmpx.h>
+#else                                  /* !USE_UTMPX */
+#include <utmp.h>
+#endif                                 /* !USE_UTMPX */
+
+/*
+ * failure - make failure entry
+ *
+ *     failure() creates a new (struct faillog) entry or updates an
+ *     existing one with the current failed login information.
+ */
+extern void failure (uid_t, const char *, struct faillog *);
+
+/*
+ * failcheck - check for failures > allowable
+ *
+ *     failcheck() is called AFTER the password has been validated.  If the
+ *     account has been "attacked" with too many login failures, failcheck()
+ *     returns FALSE to indicate that the login should be denied even though
+ *     the password is valid.
+ */
+extern int failcheck (uid_t uid, struct faillog *fl, bool failed);
+
+/*
+ * failprint - print line of failure information
+ *
+ *     failprint takes a (struct faillog) entry and formats it into a
+ *     message which is displayed at login time.
+ */
+extern void failprint (const struct faillog *);
+
+/*
+ * failtmp - update the cummulative failure log
+ *
+ *     failtmp updates the (struct utmp) formatted failure log which
+ *     maintains a record of all login failures.
+ */
+#ifdef USE_UTMPX
+extern void failtmp (const char *username, const struct utmpx *);
+#else                          /* !USE_UTMPX */
+extern void failtmp (const char *username, const struct utmp *);
+#endif                         /* !USE_UTMPX */
+
+#endif
+
diff --git a/libmisc/fields.c b/libmisc/fields.c
new file mode 100644 (file)
index 0000000..d1dd0e5
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 1990       , Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: fields.c 2006 2008-05-24 15:19:02Z nekral-guest $"
+
+#include <ctype.h>
+#include <string.h>
+#include <stdio.h>
+#include "prototypes.h"
+
+/*
+ * valid_field - insure that a field contains all legal characters
+ *
+ * The supplied field is scanned for non-printable and other illegal
+ * characters.
+ *  + -1 is returned if an illegal character is present.
+ *  +  1 is returned if no illegal characters are present, but the field
+ *       contains a non-printable character.
+ *  +  0 is returned otherwise.
+ */
+int valid_field (const char *field, const char *illegal)
+{
+       const char *cp;
+       int err = 0;
+
+       /* For each character of field, search if it appears in the list
+        * of illegal characters. */
+       for (cp = field; '\0' != *cp; cp++) {
+               if (strchr (illegal, *cp) != NULL) {
+                       err = -1;
+                       break;
+               }
+       }
+
+       if (0 == err) {
+               /* Search if there are some non-printable characters */
+               for (cp = field; '\0' != *cp; cp++) {
+                       if (!isprint (*cp)) {
+                               err = 1;
+                               break;
+                       }
+               }
+       }
+
+       return err;
+}
+
+/*
+ * change_field - change a single field if a new value is given.
+ *
+ * prompt the user with the name of the field being changed and the
+ * current value.
+ */
+void change_field (char *buf, size_t maxsize, const char *prompt)
+{
+       char newf[200];
+       char *cp;
+
+       if (maxsize > sizeof (newf)) {
+               maxsize = sizeof (newf);
+       }
+
+       printf ("\t%s [%s]: ", prompt, buf);
+       (void) fflush (stdout);
+       if (fgets (newf, (int) maxsize, stdin) != newf) {
+               return;
+       }
+
+       cp = strchr (newf, '\n');
+       if (NULL == cp) {
+               return;
+       }
+       *cp = '\0';
+
+       if ('\0' != newf[0]) {
+               /*
+                * Remove leading and trailing whitespace.  This also
+                * makes it possible to change the field to empty, by
+                * entering a space.  --marekm
+                */
+
+               while (--cp >= newf && isspace (*cp));
+               cp++;
+               *cp = '\0';
+
+               cp = newf;
+               while (('\0' != *cp) && isspace (*cp)) {
+                       cp++;
+               }
+
+               strncpy (buf, cp, maxsize - 1);
+               buf[maxsize - 1] = '\0';
+       }
+}
+
diff --git a/libmisc/find_new_gid.c b/libmisc/find_new_gid.c
new file mode 100644 (file)
index 0000000..19bc196
--- /dev/null
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#include <assert.h>
+#include <stdio.h>
+
+#include "prototypes.h"
+#include "groupio.h"
+#include "getdef.h"
+
+/*
+ * find_new_gid - Find a new unused GID.
+ *
+ * If successful, find_new_gid provides an unused group ID in the
+ * [GID_MIN:GID_MAX] range.
+ * This ID should be higher than all the used GID, but if not possible,
+ * the lowest unused ID in the range will be returned.
+ * 
+ * Return 0 on success, -1 if no unused GIDs are available.
+ */
+int find_new_gid (bool sys_group,
+                  gid_t *gid,
+                  /*@null@*/gid_t const *preferred_gid)
+{
+       const struct group *grp;
+       gid_t gid_min, gid_max, group_id, id;
+       bool *used_gids;
+
+       assert (gid != NULL);
+
+       if (!sys_group) {
+               gid_min = (gid_t) getdef_ulong ("GID_MIN", 1000UL);
+               gid_max = (gid_t) getdef_ulong ("GID_MAX", 60000UL);
+       } else {
+               gid_min = (gid_t) getdef_ulong ("SYS_GID_MIN", 101UL);
+               gid_max = (gid_t) getdef_ulong ("GID_MIN", 1000UL) - 1;
+               gid_max = (gid_t) getdef_ulong ("SYS_GID_MAX", (unsigned long) gid_max);
+       }
+       used_gids = alloca (sizeof (bool) * (gid_max +1));
+       memset (used_gids, false, sizeof (bool) * (gid_max + 1));
+
+       if (   (NULL != preferred_gid)
+           && (*preferred_gid >= gid_min)
+           && (*preferred_gid <= gid_max)
+           /* Check if the user exists according to NSS */
+           && (getgrgid (*preferred_gid) == NULL)
+           /* Check also the local database in case of uncommitted
+            * changes */
+           && (gr_locate_gid (*preferred_gid) == NULL)) {
+               *gid = *preferred_gid;
+               return 0;
+       }
+
+
+       /*
+        * Search the entire group file,
+        * looking for the largest unused value.
+        *
+        * We check the list of groups according to NSS (setgrent/getgrent),
+        * but we also check the local database (gr_rewind/gr_next) in case
+        * some groups were created but the changes were not committed yet.
+        */
+       if (sys_group) {
+               /* setgrent / getgrent / endgrent can be very slow with
+                * LDAP configurations (and many accounts).
+                * Since there is a limited amount of IDs to be tested
+                * for system accounts, we just check the existence
+                * of IDs with getgrgid.
+                */
+               group_id = gid_max;
+               for (id = gid_max; id >= gid_min; id--) {
+                       if (getgrgid (id) != NULL) {
+                               group_id = id - 1;
+                               used_gids[id] = true;
+                       }
+               }
+
+               gr_rewind ();
+               while ((grp = gr_next ()) != NULL) {
+                       if ((grp->gr_gid <= group_id) && (grp->gr_gid >= gid_min)) {
+                               group_id = grp->gr_gid - 1;
+                       }
+                       /* create index of used GIDs */
+                       if (grp->gr_gid <= gid_max) {
+                               used_gids[grp->gr_gid] = true;
+                       }
+               }
+       } else {
+               group_id = gid_min;
+               setgrent ();
+               while ((grp = getgrent ()) != NULL) {
+                       if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
+                               group_id = grp->gr_gid + 1;
+                       }
+                       /* create index of used GIDs */
+                       if (grp->gr_gid <= gid_max) {
+                               used_gids[grp->gr_gid] = true;
+                       }
+               }
+               endgrent ();
+
+               gr_rewind ();
+               while ((grp = gr_next ()) != NULL) {
+                       if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
+                               group_id = grp->gr_gid + 1;
+                       }
+                       /* create index of used GIDs */
+                       if (grp->gr_gid <= gid_max) {
+                               used_gids[grp->gr_gid] = true;
+                       }
+               }
+       }
+
+       /*
+        * If a group with GID equal to GID_MAX exists, the above algorithm
+        * will give us GID_MAX+1 even if not unique. Search for the first
+        * free GID starting with GID_MIN.
+        */
+       if (sys_group) {
+               if (group_id == gid_min - 1) {
+                       for (group_id = gid_max; group_id >= gid_min; group_id--) {
+                               if (false == used_gids[group_id]) {
+                                       break;
+                               }
+                       }
+                       if ( group_id < gid_min ) {
+                               fprintf (stderr,
+                                        _("%s: Can't get unique system GID (no more available GIDs)\n"),
+                                        Prog);
+                               SYSLOG ((LOG_WARN,
+                                        "no more available GID on the system"));
+                               return -1;
+                       }
+               }
+       } else {
+               if (group_id == gid_max + 1) {
+                       for (group_id = gid_min; group_id < gid_max; group_id++) {
+                               if (false == used_gids[group_id]) {
+                                       break;
+                               }
+                       }
+                       if (group_id == gid_max) {
+                               fprintf (stderr,
+                                        _("%s: Can't get unique GID (no more available GIDs)\n"),
+                                        Prog);
+                               SYSLOG ((LOG_WARN, "no more available GID on the system"));
+                               return -1;
+                       }
+               }
+       }
+
+       *gid = group_id;
+       return 0;
+}
+
diff --git a/libmisc/find_new_uid.c b/libmisc/find_new_uid.c
new file mode 100644 (file)
index 0000000..b1a188a
--- /dev/null
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#include <assert.h>
+#include <stdio.h>
+
+#include "prototypes.h"
+#include "pwio.h"
+#include "getdef.h"
+
+/*
+ * find_new_uid - Find a new unused UID.
+ *
+ * If successful, find_new_uid provides an unused user ID in the
+ * [UID_MIN:UID_MAX] range.
+ * This ID should be higher than all the used UID, but if not possible,
+ * the lowest unused ID in the range will be returned.
+ * 
+ * Return 0 on success, -1 if no unused UIDs are available.
+ */
+int find_new_uid (bool sys_user,
+                  uid_t *uid,
+                  /*@null@*/uid_t const *preferred_uid)
+{
+       const struct passwd *pwd;
+       uid_t uid_min, uid_max, user_id, id;
+       bool *used_uids;
+
+       assert (uid != NULL);
+
+       if (!sys_user) {
+               uid_min = (uid_t) getdef_ulong ("UID_MIN", 1000UL);
+               uid_max = (uid_t) getdef_ulong ("UID_MAX", 60000UL);
+       } else {
+               uid_min = (uid_t) getdef_ulong ("SYS_UID_MIN", 101UL);
+               uid_max = (uid_t) getdef_ulong ("UID_MIN", 1000UL) - 1;
+               uid_max = (uid_t) getdef_ulong ("SYS_UID_MAX", (unsigned long) uid_max);
+       }
+       used_uids = alloca (sizeof (bool) * (uid_max +1));
+       memset (used_uids, false, sizeof (bool) * (uid_max + 1));
+
+       if (   (NULL != preferred_uid)
+           && (*preferred_uid >= uid_min)
+           && (*preferred_uid <= uid_max)
+           /* Check if the user exists according to NSS */
+           && (getpwuid (*preferred_uid) == NULL)
+           /* Check also the local database in case of uncommitted
+            * changes */
+           && (pw_locate_uid (*preferred_uid) == NULL)) {
+               *uid = *preferred_uid;
+               return 0;
+       }
+
+
+       /*
+        * Search the entire password file,
+        * looking for the largest unused value.
+        *
+        * We check the list of users according to NSS (setpwent/getpwent),
+        * but we also check the local database (pw_rewind/pw_next) in case
+        * some users were created but the changes were not committed yet.
+        */
+       if (sys_user) {
+               /* setpwent / getpwent / endpwent can be very slow with
+                * LDAP configurations (and many accounts).
+                * Since there is a limited amount of IDs to be tested
+                * for system accounts, we just check the existence
+                * of IDs with getpwuid.
+                */
+               user_id = uid_max;
+               for (id = uid_max; id >= uid_min; id--) {
+                       if (getpwuid (id) != NULL) {
+                               user_id = id - 1;
+                               used_uids[id] = true;
+                       }
+               }
+
+               pw_rewind ();
+               while ((pwd = pw_next ()) != NULL) {
+                       if ((pwd->pw_uid <= user_id) && (pwd->pw_uid >= uid_min)) {
+                               user_id = pwd->pw_uid - 1;
+                       }
+                       /* create index of used UIDs */
+                       if (pwd->pw_uid <= uid_max) {
+                               used_uids[pwd->pw_uid] = true;
+                       }
+               }
+       } else {
+               user_id = uid_min;
+               setpwent ();
+               while ((pwd = getpwent ()) != NULL) {
+                       if ((pwd->pw_uid >= user_id) && (pwd->pw_uid <= uid_max)) {
+                               user_id = pwd->pw_uid + 1;
+                       }
+                       /* create index of used UIDs */
+                       if (pwd->pw_uid <= uid_max) {
+                               used_uids[pwd->pw_uid] = true;
+                       }
+               }
+               endpwent ();
+
+               pw_rewind ();
+               while ((pwd = pw_next ()) != NULL) {
+                       if ((pwd->pw_uid >= user_id) && (pwd->pw_uid <= uid_max)) {
+                               user_id = pwd->pw_uid + 1;
+                       }
+                       /* create index of used UIDs */
+                       if (pwd->pw_uid <= uid_max) {
+                               used_uids[pwd->pw_uid] = true;
+                       }
+               }
+       }
+
+       /*
+        * If a user with UID equal to UID_MAX exists, the above algorithm
+        * will give us UID_MAX+1 even if not unique. Search for the first
+        * free UID starting with UID_MIN.
+        */
+       if (sys_user) {
+               if (user_id == uid_min - 1) {
+                       for (user_id = uid_max; user_id >= uid_min; user_id--) {
+                               if (false == used_uids[user_id]) {
+                                       break;
+                               }
+                       }
+                       if (user_id < uid_min ) {
+                               fprintf (stderr,
+                                        _("%s: Can't get unique system UID (no more available UIDs)\n"),
+                                        Prog);
+                               SYSLOG ((LOG_WARN,
+                                        "no more available UID on the system"));
+                               return -1;
+                       }
+               }
+       } else {
+               if (user_id == uid_max + 1) {
+                       for (user_id = uid_min; user_id < uid_max; user_id++) {
+                               if (false == used_uids[user_id]) {
+                                       break;
+                               }
+                       }
+                       if (user_id == uid_max) {
+                               fprintf (stderr,
+                                        _("%s: Can't get unique UID (no more available UIDs)\n"),
+                                        Prog);
+                               SYSLOG ((LOG_WARN, "no more available UID on the system"));
+                               return -1;
+                       }
+               }
+       }
+
+       *uid = user_id;
+       return 0;
+}
+
diff --git a/libmisc/getdate.c b/libmisc/getdate.c
new file mode 100644 (file)
index 0000000..f637522
--- /dev/null
@@ -0,0 +1,2732 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     tAGO = 258,
+     tDAY = 259,
+     tDAY_UNIT = 260,
+     tDAYZONE = 261,
+     tDST = 262,
+     tHOUR_UNIT = 263,
+     tID = 264,
+     tMERIDIAN = 265,
+     tMINUTE_UNIT = 266,
+     tMONTH = 267,
+     tMONTH_UNIT = 268,
+     tSEC_UNIT = 269,
+     tSNUMBER = 270,
+     tUNUMBER = 271,
+     tYEAR_UNIT = 272,
+     tZONE = 273
+   };
+#endif
+/* Tokens.  */
+#define tAGO 258
+#define tDAY 259
+#define tDAY_UNIT 260
+#define tDAYZONE 261
+#define tDST 262
+#define tHOUR_UNIT 263
+#define tID 264
+#define tMERIDIAN 265
+#define tMINUTE_UNIT 266
+#define tMONTH 267
+#define tMONTH_UNIT 268
+#define tSEC_UNIT 269
+#define tSNUMBER 270
+#define tUNUMBER 271
+#define tYEAR_UNIT 272
+#define tZONE 273
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 1 "getdate.y"
+
+/*
+**  Originally written by Steven M. Bellovin <smb@research.att.com> while
+**  at the University of North Carolina at Chapel Hill.  Later tweaked by
+**  a couple of people on Usenet.  Completely overhauled by Rich $alz
+**  <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990;
+**
+**  This grammar has 13 shift/reduce conflicts.
+**
+**  This code is in the public domain and has no copyright.
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+# ifdef FORCE_ALLOCA_H
+#  include <alloca.h>
+# endif
+#endif
+
+/* Since the code of getdate.y is not included in the Emacs executable
+   itself, there is no need to #define static in this file.  Even if
+   the code were included in the Emacs executable, it probably
+   wouldn't do any harm to #undef it here; this will only cause
+   problems if we try to write to a static variable, which I don't
+   think this code needs to do.  */
+#ifdef emacs
+# undef static
+#endif
+
+#include <stdio.h>
+#include <ctype.h>
+#include <time.h>
+
+#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
+# define IN_CTYPE_DOMAIN(c) 1
+#else
+# define IN_CTYPE_DOMAIN(c) isascii(c)
+#endif
+
+#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
+#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
+#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
+#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
+
+/* ISDIGIT differs from ISDIGIT_LOCALE, as follows:
+   - Its arg may be any int or unsigned int; it need not be an unsigned char.
+   - It's guaranteed to evaluate its argument exactly once.
+   - It's typically faster.
+   Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
+   only '0' through '9' are digits.  Prefer ISDIGIT to ISDIGIT_LOCALE unless
+   it's important to use the locale's definition of `digit' even when the
+   host does not conform to Posix.  */
+#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
+
+#include "getdate.h"
+
+#if defined (STDC_HEADERS)
+# include <string.h>
+#endif
+
+/* Some old versions of bison generate parsers that use bcopy.
+   That loses on systems that don't provide the function, so we have
+   to redefine it here.  */
+#if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy)
+# define bcopy(from, to, len) memcpy ((to), (from), (len))
+#endif
+
+/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
+   as well as gratuitiously global symbol names, so we can have multiple
+   yacc generated parsers in the same program.  Note that these are only
+   the variables produced by yacc.  If other parser generators (bison,
+   byacc, etc) produce additional global names that conflict at link time,
+   then those parser generators need to be fixed instead of adding those
+   names to this list. */
+
+#define yymaxdepth gd_maxdepth
+#define yyparse gd_parse
+#define yylex   gd_lex
+#define yyerror gd_error
+#define yylval  gd_lval
+#define yychar  gd_char
+#define yydebug gd_debug
+#define yypact  gd_pact
+#define yyr1    gd_r1
+#define yyr2    gd_r2
+#define yydef   gd_def
+#define yychk   gd_chk
+#define yypgo   gd_pgo
+#define yyact   gd_act
+#define yyexca  gd_exca
+#define yyerrflag gd_errflag
+#define yynerrs gd_nerrs
+#define yyps    gd_ps
+#define yypv    gd_pv
+#define yys     gd_s
+#define yy_yys  gd_yys
+#define yystate gd_state
+#define yytmp   gd_tmp
+#define yyv     gd_v
+#define yy_yyv  gd_yyv
+#define yyval   gd_val
+#define yylloc  gd_lloc
+#define yyreds  gd_reds          /* With YYDEBUG defined */
+#define yytoks  gd_toks          /* With YYDEBUG defined */
+#define yylhs   gd_yylhs
+#define yylen   gd_yylen
+#define yydefred gd_yydefred
+#define yydgoto gd_yydgoto
+#define yysindex gd_yysindex
+#define yyrindex gd_yyrindex
+#define yygindex gd_yygindex
+#define yytable  gd_yytable
+#define yycheck  gd_yycheck
+
+static int yylex (void);
+static int yyerror (const char *s);
+
+#define EPOCH          1970
+#define HOUR(x)                ((x) * 60)
+
+#define MAX_BUFF_LEN    128   /* size of buffer to read the date into */
+
+/*
+**  An entry in the lexical lookup table.
+*/
+typedef struct _TABLE {
+    const char *name;
+    int                type;
+    int                value;
+} TABLE;
+
+
+/*
+**  Meridian:  am, pm, or 24-hour style.
+*/
+typedef enum _MERIDIAN {
+    MERam, MERpm, MER24
+} MERIDIAN;
+
+
+/*
+**  Global variables.  We could get rid of most of these by using a good
+**  union as the yacc stack.  (This routine was originally written before
+**  yacc had the %union construct.)  Maybe someday; right now we only use
+**  the %union very rarely.
+*/
+static const char      *yyInput;
+static int     yyDayOrdinal;
+static int     yyDayNumber;
+static int     yyHaveDate;
+static int     yyHaveDay;
+static int     yyHaveRel;
+static int     yyHaveTime;
+static int     yyHaveZone;
+static int     yyTimezone;
+static int     yyDay;
+static int     yyHour;
+static int     yyMinutes;
+static int     yyMonth;
+static int     yySeconds;
+static int     yyYear;
+static MERIDIAN        yyMeridian;
+static int     yyRelDay;
+static int     yyRelHour;
+static int     yyRelMinutes;
+static int     yyRelMonth;
+static int     yyRelSeconds;
+static int     yyRelYear;
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 172 "getdate.y"
+{
+    int                        Number;
+    enum _MERIDIAN     Meridian;
+}
+/* Line 187 of yacc.c.  */
+#line 308 "getdate.c"
+       YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 216 of yacc.c.  */
+#line 321 "getdate.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+    int i;
+#endif
+{
+  return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+            && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         YYSIZE_T yyi;                         \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[yyi] = (From)[yyi];            \
+       }                                       \
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)                                       \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
+       Stack = &yyptr->Stack;                                          \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  2
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   50
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  22
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  11
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  51
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  61
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   273
+
+#define YYTRANSLATE(YYX)                                               \
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    20,     2,     2,    21,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    19,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint8 yyprhs[] =
+{
+       0,     0,     3,     4,     7,     9,    11,    13,    15,    17,
+      19,    22,    27,    32,    39,    46,    48,    50,    53,    55,
+      58,    61,    65,    71,    75,    79,    82,    87,    90,    94,
+      97,    99,   102,   105,   107,   110,   113,   115,   118,   121,
+     123,   126,   129,   131,   134,   137,   139,   142,   145,   147,
+     149,   150
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      23,     0,    -1,    -1,    23,    24,    -1,    25,    -1,    26,
+      -1,    28,    -1,    27,    -1,    29,    -1,    31,    -1,    16,
+      10,    -1,    16,    19,    16,    32,    -1,    16,    19,    16,
+      15,    -1,    16,    19,    16,    19,    16,    32,    -1,    16,
+      19,    16,    19,    16,    15,    -1,    18,    -1,     6,    -1,
+      18,     7,    -1,     4,    -1,     4,    20,    -1,    16,     4,
+      -1,    16,    21,    16,    -1,    16,    21,    16,    21,    16,
+      -1,    16,    15,    15,    -1,    16,    12,    15,    -1,    12,
+      16,    -1,    12,    16,    20,    16,    -1,    16,    12,    -1,
+      16,    12,    16,    -1,    30,     3,    -1,    30,    -1,    16,
+      17,    -1,    15,    17,    -1,    17,    -1,    16,    13,    -1,
+      15,    13,    -1,    13,    -1,    16,     5,    -1,    15,     5,
+      -1,     5,    -1,    16,     8,    -1,    15,     8,    -1,     8,
+      -1,    16,    11,    -1,    15,    11,    -1,    11,    -1,    16,
+      14,    -1,    15,    14,    -1,    14,    -1,    16,    -1,    -1,
+      10,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
+{
+       0,   188,   188,   189,   192,   195,   198,   201,   204,   207,
+     210,   216,   222,   231,   237,   249,   252,   256,   261,   265,
+     269,   275,   279,   297,   303,   309,   313,   318,   322,   329,
+     337,   340,   343,   346,   349,   352,   355,   358,   361,   364,
+     367,   370,   373,   376,   379,   382,   385,   388,   391,   396,
+     430,   433
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "tAGO", "tDAY", "tDAY_UNIT", "tDAYZONE",
+  "tDST", "tHOUR_UNIT", "tID", "tMERIDIAN", "tMINUTE_UNIT", "tMONTH",
+  "tMONTH_UNIT", "tSEC_UNIT", "tSNUMBER", "tUNUMBER", "tYEAR_UNIT",
+  "tZONE", "':'", "','", "'/'", "$accept", "spec", "item", "time", "zone",
+  "day", "date", "rel", "relunit", "number", "o_merid", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,    58,
+      44,    47
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    22,    23,    23,    24,    24,    24,    24,    24,    24,
+      25,    25,    25,    25,    25,    26,    26,    26,    27,    27,
+      27,    28,    28,    28,    28,    28,    28,    28,    28,    29,
+      29,    30,    30,    30,    30,    30,    30,    30,    30,    30,
+      30,    30,    30,    30,    30,    30,    30,    30,    30,    31,
+      32,    32
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     0,     2,     1,     1,     1,     1,     1,     1,
+       2,     4,     4,     6,     6,     1,     1,     2,     1,     2,
+       2,     3,     5,     3,     3,     2,     4,     2,     3,     2,
+       1,     2,     2,     1,     2,     2,     1,     2,     2,     1,
+       2,     2,     1,     2,     2,     1,     2,     2,     1,     1,
+       0,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       2,     0,     1,    18,    39,    16,    42,    45,     0,    36,
+      48,     0,    49,    33,    15,     3,     4,     5,     7,     6,
+       8,    30,     9,    19,    25,    38,    41,    44,    35,    47,
+      32,    20,    37,    40,    10,    43,    27,    34,    46,     0,
+      31,     0,     0,    17,    29,     0,    24,    28,    23,    50,
+      21,    26,    51,    12,     0,    11,     0,    50,    22,    14,
+      13
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     1,    15,    16,    17,    18,    19,    20,    21,    22,
+      55
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -20
+static const yytype_int8 yypact[] =
+{
+     -20,     0,   -20,   -19,   -20,   -20,   -20,   -20,   -13,   -20,
+     -20,    30,    15,   -20,    14,   -20,   -20,   -20,   -20,   -20,
+     -20,    19,   -20,   -20,     4,   -20,   -20,   -20,   -20,   -20,
+     -20,   -20,   -20,   -20,   -20,   -20,    -6,   -20,   -20,    16,
+     -20,    17,    23,   -20,   -20,    24,   -20,   -20,   -20,    27,
+      28,   -20,   -20,   -20,    29,   -20,    32,    -8,   -20,   -20,
+     -20
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+     -20,   -20,   -20,   -20,   -20,   -20,   -20,   -20,   -20,   -20,
+      -7
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -1
+static const yytype_uint8 yytable[] =
+{
+       2,    23,    52,    24,     3,     4,     5,    59,     6,    46,
+      47,     7,     8,     9,    10,    11,    12,    13,    14,    31,
+      32,    43,    44,    33,    45,    34,    35,    36,    37,    38,
+      39,    48,    40,    49,    41,    25,    42,    52,    26,    50,
+      51,    27,    53,    28,    29,    57,    54,    30,    58,    56,
+      60
+};
+
+static const yytype_uint8 yycheck[] =
+{
+       0,    20,    10,    16,     4,     5,     6,    15,     8,    15,
+      16,    11,    12,    13,    14,    15,    16,    17,    18,     4,
+       5,     7,     3,     8,    20,    10,    11,    12,    13,    14,
+      15,    15,    17,    16,    19,     5,    21,    10,     8,    16,
+      16,    11,    15,    13,    14,    16,    19,    17,    16,    21,
+      57
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,    23,     0,     4,     5,     6,     8,    11,    12,    13,
+      14,    15,    16,    17,    18,    24,    25,    26,    27,    28,
+      29,    30,    31,    20,    16,     5,     8,    11,    13,    14,
+      17,     4,     5,     8,    10,    11,    12,    13,    14,    15,
+      17,    19,    21,     7,     3,    20,    15,    16,    15,    16,
+      16,    16,    10,    15,    19,    32,    21,    16,    16,    15,
+      32
+};
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                (-2)
+#define YYEOF          0
+
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT                goto yyabortlab
+#define YYERROR                goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL         goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yytoken = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK (1);                                          \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;                                                 \
+    }                                                          \
+while (YYID (0))
+
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                 \
+      if (YYID (N))                                                    \
+       {                                                               \
+         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+       }                                                               \
+      else                                                             \
+       {                                                               \
+         (Current).first_line   = (Current).last_line   =              \
+           YYRHSLOC (Rhs, 0).last_line;                                \
+         (Current).first_column = (Current).last_column =              \
+           YYRHSLOC (Rhs, 0).last_column;                              \
+       }                                                               \
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                 \
+     fprintf (File, "%d.%d-%d.%d",                     \
+             (Loc).first_line, (Loc).first_column,     \
+             (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yy_symbol_print (stderr,                                           \
+                 Type, Value); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+       break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    yytype_int16 *bottom;
+    yytype_int16 *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)                           \
+do {                                                           \
+  if (yydebug)                                                 \
+    yy_stack_print ((Bottom), (Top));                          \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+            yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                      &(yyvsp[(yyi + 1) - (yynrhs)])
+                                      );
+      fprintf (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)         \
+do {                                   \
+  if (yydebug)                         \
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+       switch (*++yyp)
+         {
+         case '\'':
+         case ',':
+           goto do_not_strip_quotes;
+
+         case '\\':
+           if (*++yyp != '\\')
+             goto do_not_strip_quotes;
+           /* Fall through.  */
+         default:
+           if (yyres)
+             yyres[yyn] = *yyp;
+           yyn++;
+           break;
+
+         case '"':
+           if (yyres)
+             yyres[yyn] = '\0';
+           return yyn;
+         }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+\f
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+       break;
+    }
+}
+\f
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+  
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;            /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       yytype_int16 *yyss1 = yyss;
+
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow (YY_("memory exhausted"),
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+
+                   &yystacksize);
+
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+       goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyexhaustedlab;
+       YYSTACK_RELOCATE (yyss);
+       YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     look-ahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to look-ahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 4:
+#line 192 "getdate.y"
+    {
+           yyHaveTime++;
+       }
+    break;
+
+  case 5:
+#line 195 "getdate.y"
+    {
+           yyHaveZone++;
+       }
+    break;
+
+  case 6:
+#line 198 "getdate.y"
+    {
+           yyHaveDate++;
+       }
+    break;
+
+  case 7:
+#line 201 "getdate.y"
+    {
+           yyHaveDay++;
+       }
+    break;
+
+  case 8:
+#line 204 "getdate.y"
+    {
+           yyHaveRel++;
+       }
+    break;
+
+  case 10:
+#line 210 "getdate.y"
+    {
+           yyHour = (yyvsp[(1) - (2)].Number);
+           yyMinutes = 0;
+           yySeconds = 0;
+           yyMeridian = (yyvsp[(2) - (2)].Meridian);
+       }
+    break;
+
+  case 11:
+#line 216 "getdate.y"
+    {
+           yyHour = (yyvsp[(1) - (4)].Number);
+           yyMinutes = (yyvsp[(3) - (4)].Number);
+           yySeconds = 0;
+           yyMeridian = (yyvsp[(4) - (4)].Meridian);
+       }
+    break;
+
+  case 12:
+#line 222 "getdate.y"
+    {
+           yyHour = (yyvsp[(1) - (4)].Number);
+           yyMinutes = (yyvsp[(3) - (4)].Number);
+           yyMeridian = MER24;
+           yyHaveZone++;
+           yyTimezone = ((yyvsp[(4) - (4)].Number) < 0
+                         ? -(yyvsp[(4) - (4)].Number) % 100 + (-(yyvsp[(4) - (4)].Number) / 100) * 60
+                         : - ((yyvsp[(4) - (4)].Number) % 100 + ((yyvsp[(4) - (4)].Number) / 100) * 60));
+       }
+    break;
+
+  case 13:
+#line 231 "getdate.y"
+    {
+           yyHour = (yyvsp[(1) - (6)].Number);
+           yyMinutes = (yyvsp[(3) - (6)].Number);
+           yySeconds = (yyvsp[(5) - (6)].Number);
+           yyMeridian = (yyvsp[(6) - (6)].Meridian);
+       }
+    break;
+
+  case 14:
+#line 237 "getdate.y"
+    {
+           yyHour = (yyvsp[(1) - (6)].Number);
+           yyMinutes = (yyvsp[(3) - (6)].Number);
+           yySeconds = (yyvsp[(5) - (6)].Number);
+           yyMeridian = MER24;
+           yyHaveZone++;
+           yyTimezone = ((yyvsp[(6) - (6)].Number) < 0
+                         ? -(yyvsp[(6) - (6)].Number) % 100 + (-(yyvsp[(6) - (6)].Number) / 100) * 60
+                         : - ((yyvsp[(6) - (6)].Number) % 100 + ((yyvsp[(6) - (6)].Number) / 100) * 60));
+       }
+    break;
+
+  case 15:
+#line 249 "getdate.y"
+    {
+           yyTimezone = (yyvsp[(1) - (1)].Number);
+       }
+    break;
+
+  case 16:
+#line 252 "getdate.y"
+    {
+           yyTimezone = (yyvsp[(1) - (1)].Number) - 60;
+       }
+    break;
+
+  case 17:
+#line 256 "getdate.y"
+    {
+           yyTimezone = (yyvsp[(1) - (2)].Number) - 60;
+       }
+    break;
+
+  case 18:
+#line 261 "getdate.y"
+    {
+           yyDayOrdinal = 1;
+           yyDayNumber = (yyvsp[(1) - (1)].Number);
+       }
+    break;
+
+  case 19:
+#line 265 "getdate.y"
+    {
+           yyDayOrdinal = 1;
+           yyDayNumber = (yyvsp[(1) - (2)].Number);
+       }
+    break;
+
+  case 20:
+#line 269 "getdate.y"
+    {
+           yyDayOrdinal = (yyvsp[(1) - (2)].Number);
+           yyDayNumber = (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 21:
+#line 275 "getdate.y"
+    {
+           yyMonth = (yyvsp[(1) - (3)].Number);
+           yyDay = (yyvsp[(3) - (3)].Number);
+       }
+    break;
+
+  case 22:
+#line 279 "getdate.y"
+    {
+         /* Interpret as YYYY/MM/DD if $1 >= 1000, otherwise as MM/DD/YY.
+            The goal in recognizing YYYY/MM/DD is solely to support legacy
+            machine-generated dates like those in an RCS log listing.  If
+            you want portability, use the ISO 8601 format.  */
+         if ((yyvsp[(1) - (5)].Number) >= 1000)
+           {
+             yyYear = (yyvsp[(1) - (5)].Number);
+             yyMonth = (yyvsp[(3) - (5)].Number);
+             yyDay = (yyvsp[(5) - (5)].Number);
+           }
+         else
+           {
+             yyMonth = (yyvsp[(1) - (5)].Number);
+             yyDay = (yyvsp[(3) - (5)].Number);
+             yyYear = (yyvsp[(5) - (5)].Number);
+           }
+       }
+    break;
+
+  case 23:
+#line 297 "getdate.y"
+    {
+           /* ISO 8601 format.  yyyy-mm-dd.  */
+           yyYear = (yyvsp[(1) - (3)].Number);
+           yyMonth = -(yyvsp[(2) - (3)].Number);
+           yyDay = -(yyvsp[(3) - (3)].Number);
+       }
+    break;
+
+  case 24:
+#line 303 "getdate.y"
+    {
+           /* e.g. 17-JUN-1992.  */
+           yyDay = (yyvsp[(1) - (3)].Number);
+           yyMonth = (yyvsp[(2) - (3)].Number);
+           yyYear = -(yyvsp[(3) - (3)].Number);
+       }
+    break;
+
+  case 25:
+#line 309 "getdate.y"
+    {
+           yyMonth = (yyvsp[(1) - (2)].Number);
+           yyDay = (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 26:
+#line 313 "getdate.y"
+    {
+           yyMonth = (yyvsp[(1) - (4)].Number);
+           yyDay = (yyvsp[(2) - (4)].Number);
+           yyYear = (yyvsp[(4) - (4)].Number);
+       }
+    break;
+
+  case 27:
+#line 318 "getdate.y"
+    {
+           yyMonth = (yyvsp[(2) - (2)].Number);
+           yyDay = (yyvsp[(1) - (2)].Number);
+       }
+    break;
+
+  case 28:
+#line 322 "getdate.y"
+    {
+           yyMonth = (yyvsp[(2) - (3)].Number);
+           yyDay = (yyvsp[(1) - (3)].Number);
+           yyYear = (yyvsp[(3) - (3)].Number);
+       }
+    break;
+
+  case 29:
+#line 329 "getdate.y"
+    {
+           yyRelSeconds = -yyRelSeconds;
+           yyRelMinutes = -yyRelMinutes;
+           yyRelHour = -yyRelHour;
+           yyRelDay = -yyRelDay;
+           yyRelMonth = -yyRelMonth;
+           yyRelYear = -yyRelYear;
+       }
+    break;
+
+  case 31:
+#line 340 "getdate.y"
+    {
+           yyRelYear += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 32:
+#line 343 "getdate.y"
+    {
+           yyRelYear += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 33:
+#line 346 "getdate.y"
+    {
+           yyRelYear++;
+       }
+    break;
+
+  case 34:
+#line 349 "getdate.y"
+    {
+           yyRelMonth += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 35:
+#line 352 "getdate.y"
+    {
+           yyRelMonth += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 36:
+#line 355 "getdate.y"
+    {
+           yyRelMonth++;
+       }
+    break;
+
+  case 37:
+#line 358 "getdate.y"
+    {
+           yyRelDay += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 38:
+#line 361 "getdate.y"
+    {
+           yyRelDay += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 39:
+#line 364 "getdate.y"
+    {
+           yyRelDay++;
+       }
+    break;
+
+  case 40:
+#line 367 "getdate.y"
+    {
+           yyRelHour += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 41:
+#line 370 "getdate.y"
+    {
+           yyRelHour += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 42:
+#line 373 "getdate.y"
+    {
+           yyRelHour++;
+       }
+    break;
+
+  case 43:
+#line 376 "getdate.y"
+    {
+           yyRelMinutes += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 44:
+#line 379 "getdate.y"
+    {
+           yyRelMinutes += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 45:
+#line 382 "getdate.y"
+    {
+           yyRelMinutes++;
+       }
+    break;
+
+  case 46:
+#line 385 "getdate.y"
+    {
+           yyRelSeconds += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 47:
+#line 388 "getdate.y"
+    {
+           yyRelSeconds += (yyvsp[(1) - (2)].Number) * (yyvsp[(2) - (2)].Number);
+       }
+    break;
+
+  case 48:
+#line 391 "getdate.y"
+    {
+           yyRelSeconds++;
+       }
+    break;
+
+  case 49:
+#line 397 "getdate.y"
+    {
+           if ((yyHaveTime != 0) && (yyHaveDate != 0) && (yyHaveRel == 0))
+             yyYear = (yyvsp[(1) - (1)].Number);
+           else
+             {
+               if ((yyvsp[(1) - (1)].Number)>10000)
+                 {
+                   yyHaveDate++;
+                   yyDay= ((yyvsp[(1) - (1)].Number))%100;
+                   yyMonth= ((yyvsp[(1) - (1)].Number)/100)%100;
+                   yyYear = (yyvsp[(1) - (1)].Number)/10000;
+                 }
+               else
+                 {
+                   yyHaveTime++;
+                   if ((yyvsp[(1) - (1)].Number) < 100)
+                     {
+                       yyHour = (yyvsp[(1) - (1)].Number);
+                       yyMinutes = 0;
+                     }
+                   else
+                     {
+                       yyHour = (yyvsp[(1) - (1)].Number) / 100;
+                       yyMinutes = (yyvsp[(1) - (1)].Number) % 100;
+                     }
+                   yySeconds = 0;
+                   yyMeridian = MER24;
+                 }
+             }
+         }
+    break;
+
+  case 50:
+#line 430 "getdate.y"
+    {
+           (yyval.Meridian) = MER24;
+         }
+    break;
+
+  case 51:
+#line 434 "getdate.y"
+    {
+           (yyval.Meridian) = (yyvsp[(1) - (1)].Meridian);
+         }
+    break;
+
+
+/* Line 1267 of yacc.c.  */
+#line 1979 "getdate.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+         {
+           YYSIZE_T yyalloc = 2 * yysize;
+           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+             yyalloc = YYSTACK_ALLOC_MAXIMUM;
+           if (yymsg != yymsgbuf)
+             YYSTACK_FREE (yymsg);
+           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+           if (yymsg)
+             yymsg_alloc = yyalloc;
+           else
+             {
+               yymsg = yymsgbuf;
+               yymsg_alloc = sizeof yymsgbuf;
+             }
+         }
+
+       if (0 < yysize && yysize <= yymsg_alloc)
+         {
+           (void) yysyntax_error (yymsg, yystate, yychar);
+           yyerror (yymsg);
+         }
+       else
+         {
+           yyerror (YY_("syntax error"));
+           if (yysize != 0)
+             goto yyexhaustedlab;
+         }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse look-ahead token after an
+        error, discard it.  */
+
+      if (yychar <= YYEOF)
+       {
+         /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+           YYABORT;
+       }
+      else
+       {
+         yydestruct ("Error: discarding",
+                     yytoken, &yylval);
+         yychar = YYEMPTY;
+       }
+    }
+
+  /* Else will try to reuse look-ahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+
+      yydestruct ("Error: popping",
+                 yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+                 yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+#line 439 "getdate.y"
+
+
+/* Month and day table. */
+static TABLE const MonthDayTable[] = {
+    { "january",       tMONTH,  1 },
+    { "february",      tMONTH,  2 },
+    { "march",         tMONTH,  3 },
+    { "april",         tMONTH,  4 },
+    { "may",           tMONTH,  5 },
+    { "june",          tMONTH,  6 },
+    { "july",          tMONTH,  7 },
+    { "august",                tMONTH,  8 },
+    { "september",     tMONTH,  9 },
+    { "sept",          tMONTH,  9 },
+    { "october",       tMONTH, 10 },
+    { "november",      tMONTH, 11 },
+    { "december",      tMONTH, 12 },
+    { "sunday",                tDAY, 0 },
+    { "monday",                tDAY, 1 },
+    { "tuesday",       tDAY, 2 },
+    { "tues",          tDAY, 2 },
+    { "wednesday",     tDAY, 3 },
+    { "wednes",                tDAY, 3 },
+    { "thursday",      tDAY, 4 },
+    { "thur",          tDAY, 4 },
+    { "thurs",         tDAY, 4 },
+    { "friday",                tDAY, 5 },
+    { "saturday",      tDAY, 6 },
+    { NULL, 0, 0 }
+};
+
+/* Time units table. */
+static TABLE const UnitsTable[] = {
+    { "year",          tYEAR_UNIT,     1 },
+    { "month",         tMONTH_UNIT,    1 },
+    { "fortnight",     tDAY_UNIT,      14 },
+    { "week",          tDAY_UNIT,      7 },
+    { "day",           tDAY_UNIT,      1 },
+    { "hour",          tHOUR_UNIT,     1 },
+    { "minute",                tMINUTE_UNIT,   1 },
+    { "min",           tMINUTE_UNIT,   1 },
+    { "second",                tSEC_UNIT,      1 },
+    { "sec",           tSEC_UNIT,      1 },
+    { NULL, 0, 0 }
+};
+
+/* Assorted relative-time words. */
+static TABLE const OtherTable[] = {
+    { "tomorrow",      tMINUTE_UNIT,   1 * 24 * 60 },
+    { "yesterday",     tMINUTE_UNIT,   -1 * 24 * 60 },
+    { "today",         tMINUTE_UNIT,   0 },
+    { "now",           tMINUTE_UNIT,   0 },
+    { "last",          tUNUMBER,       -1 },
+    { "this",          tMINUTE_UNIT,   0 },
+    { "next",          tUNUMBER,       2 },
+    { "first",         tUNUMBER,       1 },
+/*  { "second",                tUNUMBER,       2 }, */
+    { "third",         tUNUMBER,       3 },
+    { "fourth",                tUNUMBER,       4 },
+    { "fifth",         tUNUMBER,       5 },
+    { "sixth",         tUNUMBER,       6 },
+    { "seventh",       tUNUMBER,       7 },
+    { "eighth",                tUNUMBER,       8 },
+    { "ninth",         tUNUMBER,       9 },
+    { "tenth",         tUNUMBER,       10 },
+    { "eleventh",      tUNUMBER,       11 },
+    { "twelfth",       tUNUMBER,       12 },
+    { "ago",           tAGO,   1 },
+    { NULL, 0, 0 }
+};
+
+/* The timezone table. */
+static TABLE const TimezoneTable[] = {
+    { "gmt",   tZONE,     HOUR ( 0) }, /* Greenwich Mean */
+    { "ut",    tZONE,     HOUR ( 0) }, /* Universal (Coordinated) */
+    { "utc",   tZONE,     HOUR ( 0) },
+    { "wet",   tZONE,     HOUR ( 0) }, /* Western European */
+    { "bst",   tDAYZONE,  HOUR ( 0) }, /* British Summer */
+    { "wat",   tZONE,     HOUR ( 1) }, /* West Africa */
+    { "at",    tZONE,     HOUR ( 2) }, /* Azores */
+    { "ast",   tZONE,     HOUR ( 4) }, /* Atlantic Standard */
+    { "adt",   tDAYZONE,  HOUR ( 4) }, /* Atlantic Daylight */
+    { "est",   tZONE,     HOUR ( 5) }, /* Eastern Standard */
+    { "edt",   tDAYZONE,  HOUR ( 5) }, /* Eastern Daylight */
+    { "cst",   tZONE,     HOUR ( 6) }, /* Central Standard */
+    { "cdt",   tDAYZONE,  HOUR ( 6) }, /* Central Daylight */
+    { "mst",   tZONE,     HOUR ( 7) }, /* Mountain Standard */
+    { "mdt",   tDAYZONE,  HOUR ( 7) }, /* Mountain Daylight */
+    { "pst",   tZONE,     HOUR ( 8) }, /* Pacific Standard */
+    { "pdt",   tDAYZONE,  HOUR ( 8) }, /* Pacific Daylight */
+    { "yst",   tZONE,     HOUR ( 9) }, /* Yukon Standard */
+    { "ydt",   tDAYZONE,  HOUR ( 9) }, /* Yukon Daylight */
+    { "hst",   tZONE,     HOUR (10) }, /* Hawaii Standard */
+    { "hdt",   tDAYZONE,  HOUR (10) }, /* Hawaii Daylight */
+    { "cat",   tZONE,     HOUR (10) }, /* Central Alaska */
+    { "ahst",  tZONE,     HOUR (10) }, /* Alaska-Hawaii Standard */
+    { "nt",    tZONE,     HOUR (11) }, /* Nome */
+    { "idlw",  tZONE,     HOUR (12) }, /* International Date Line West */
+    { "cet",   tZONE,     -HOUR (1) }, /* Central European */
+    { "met",   tZONE,     -HOUR (1) }, /* Middle European */
+    { "mewt",  tZONE,     -HOUR (1) }, /* Middle European Winter */
+    { "mest",  tDAYZONE,  -HOUR (1) }, /* Middle European Summer */
+    { "mesz",  tDAYZONE,  -HOUR (1) }, /* Middle European Summer */
+    { "swt",   tZONE,     -HOUR (1) }, /* Swedish Winter */
+    { "sst",   tDAYZONE,  -HOUR (1) }, /* Swedish Summer */
+    { "fwt",   tZONE,     -HOUR (1) }, /* French Winter */
+    { "fst",   tDAYZONE,  -HOUR (1) }, /* French Summer */
+    { "eet",   tZONE,     -HOUR (2) }, /* Eastern Europe, USSR Zone 1 */
+    { "bt",    tZONE,     -HOUR (3) }, /* Baghdad, USSR Zone 2 */
+    { "zp4",   tZONE,     -HOUR (4) }, /* USSR Zone 3 */
+    { "zp5",   tZONE,     -HOUR (5) }, /* USSR Zone 4 */
+    { "zp6",   tZONE,     -HOUR (6) }, /* USSR Zone 5 */
+    { "wast",  tZONE,     -HOUR (7) }, /* West Australian Standard */
+    { "wadt",  tDAYZONE,  -HOUR (7) }, /* West Australian Daylight */
+    { "cct",   tZONE,     -HOUR (8) }, /* China Coast, USSR Zone 7 */
+    { "jst",   tZONE,     -HOUR (9) }, /* Japan Standard, USSR Zone 8 */
+    { "east",  tZONE,     -HOUR (10) },        /* Eastern Australian Standard */
+    { "eadt",  tDAYZONE,  -HOUR (10) },        /* Eastern Australian Daylight */
+    { "gst",   tZONE,     -HOUR (10) },        /* Guam Standard, USSR Zone 9 */
+    { "nzt",   tZONE,     -HOUR (12) },        /* New Zealand */
+    { "nzst",  tZONE,     -HOUR (12) },        /* New Zealand Standard */
+    { "nzdt",  tDAYZONE,  -HOUR (12) },        /* New Zealand Daylight */
+    { "idle",  tZONE,     -HOUR (12) },        /* International Date Line East */
+    { NULL, 0, 0 }
+};
+
+/* Military timezone table. */
+static TABLE const MilitaryTable[] = {
+    { "a",     tZONE,  HOUR (  1) },
+    { "b",     tZONE,  HOUR (  2) },
+    { "c",     tZONE,  HOUR (  3) },
+    { "d",     tZONE,  HOUR (  4) },
+    { "e",     tZONE,  HOUR (  5) },
+    { "f",     tZONE,  HOUR (  6) },
+    { "g",     tZONE,  HOUR (  7) },
+    { "h",     tZONE,  HOUR (  8) },
+    { "i",     tZONE,  HOUR (  9) },
+    { "k",     tZONE,  HOUR ( 10) },
+    { "l",     tZONE,  HOUR ( 11) },
+    { "m",     tZONE,  HOUR ( 12) },
+    { "n",     tZONE,  HOUR (- 1) },
+    { "o",     tZONE,  HOUR (- 2) },
+    { "p",     tZONE,  HOUR (- 3) },
+    { "q",     tZONE,  HOUR (- 4) },
+    { "r",     tZONE,  HOUR (- 5) },
+    { "s",     tZONE,  HOUR (- 6) },
+    { "t",     tZONE,  HOUR (- 7) },
+    { "u",     tZONE,  HOUR (- 8) },
+    { "v",     tZONE,  HOUR (- 9) },
+    { "w",     tZONE,  HOUR (-10) },
+    { "x",     tZONE,  HOUR (-11) },
+    { "y",     tZONE,  HOUR (-12) },
+    { "z",     tZONE,  HOUR (  0) },
+    { NULL, 0, 0 }
+};
+
+\f
+
+
+static int yyerror (unused const char *s)
+{
+  return 0;
+}
+
+static int ToHour (int Hours, MERIDIAN Meridian)
+{
+  switch (Meridian)
+    {
+    case MER24:
+      if (Hours < 0 || Hours > 23)
+       return -1;
+      return Hours;
+    case MERam:
+      if (Hours < 1 || Hours > 12)
+       return -1;
+      if (Hours == 12)
+       Hours = 0;
+      return Hours;
+    case MERpm:
+      if (Hours < 1 || Hours > 12)
+       return -1;
+      if (Hours == 12)
+       Hours = 0;
+      return Hours + 12;
+    default:
+      abort ();
+    }
+  /* NOTREACHED */
+}
+
+static int ToYear (int Year)
+{
+  if (Year < 0)
+    Year = -Year;
+
+  /* XPG4 suggests that years 00-68 map to 2000-2068, and
+     years 69-99 map to 1969-1999.  */
+  if (Year < 69)
+    Year += 2000;
+  else if (Year < 100)
+    Year += 1900;
+
+  return Year;
+}
+
+static int LookupWord (char *buff)
+{
+  register char *p;
+  register char *q;
+  register const TABLE *tp;
+  int i;
+  bool abbrev;
+
+  /* Make it lowercase. */
+  for (p = buff; '\0' != *p; p++)
+    if (ISUPPER (*p))
+      *p = tolower (*p);
+
+  if (strcmp (buff, "am") == 0 || strcmp (buff, "a.m.") == 0)
+    {
+      yylval.Meridian = MERam;
+      return tMERIDIAN;
+    }
+  if (strcmp (buff, "pm") == 0 || strcmp (buff, "p.m.") == 0)
+    {
+      yylval.Meridian = MERpm;
+      return tMERIDIAN;
+    }
+
+  /* See if we have an abbreviation for a month. */
+  if (strlen (buff) == 3)
+    abbrev = true;
+  else if (strlen (buff) == 4 && buff[3] == '.')
+    {
+      abbrev = true;
+      buff[3] = '\0';
+    }
+  else
+    abbrev = false;
+
+  for (tp = MonthDayTable; tp->name; tp++)
+    {
+      if (abbrev)
+       {
+         if (strncmp (buff, tp->name, 3) == 0)
+           {
+             yylval.Number = tp->value;
+             return tp->type;
+           }
+       }
+      else if (strcmp (buff, tp->name) == 0)
+       {
+         yylval.Number = tp->value;
+         return tp->type;
+       }
+    }
+
+  for (tp = TimezoneTable; tp->name; tp++)
+    if (strcmp (buff, tp->name) == 0)
+      {
+       yylval.Number = tp->value;
+       return tp->type;
+      }
+
+  if (strcmp (buff, "dst") == 0)
+    return tDST;
+
+  for (tp = UnitsTable; tp->name; tp++)
+    if (strcmp (buff, tp->name) == 0)
+      {
+       yylval.Number = tp->value;
+       return tp->type;
+      }
+
+  /* Strip off any plural and try the units table again. */
+  i = strlen (buff) - 1;
+  if (buff[i] == 's')
+    {
+      buff[i] = '\0';
+      for (tp = UnitsTable; tp->name; tp++)
+       if (strcmp (buff, tp->name) == 0)
+         {
+           yylval.Number = tp->value;
+           return tp->type;
+         }
+      buff[i] = 's';           /* Put back for "this" in OtherTable. */
+    }
+
+  for (tp = OtherTable; tp->name; tp++)
+    if (strcmp (buff, tp->name) == 0)
+      {
+       yylval.Number = tp->value;
+       return tp->type;
+      }
+
+  /* Military timezones. */
+  if (buff[1] == '\0' && ISALPHA (*buff))
+    {
+      for (tp = MilitaryTable; tp->name; tp++)
+       if (strcmp (buff, tp->name) == 0)
+         {
+           yylval.Number = tp->value;
+           return tp->type;
+         }
+    }
+
+  /* Drop out any periods and try the timezone table again. */
+  for (i = 0, p = q = buff; '\0' != *q; q++)
+    if (*q != '.')
+      *p++ = *q;
+    else
+      i++;
+  *p = '\0';
+  if (0 != i)
+    for (tp = TimezoneTable; NULL != tp->name; tp++)
+      if (strcmp (buff, tp->name) == 0)
+       {
+         yylval.Number = tp->value;
+         return tp->type;
+       }
+
+  return tID;
+}
+
+static int
+yylex (void)
+{
+  register char c;
+  register char *p;
+  char buff[20];
+  int Count;
+  int sign;
+
+  for (;;)
+    {
+      while (ISSPACE (*yyInput))
+       yyInput++;
+
+      if (ISDIGIT (c = *yyInput) || c == '-' || c == '+')
+       {
+         if (c == '-' || c == '+')
+           {
+             sign = c == '-' ? -1 : 1;
+             if (!ISDIGIT (*++yyInput))
+               /* skip the '-' sign */
+               continue;
+           }
+         else
+           sign = 0;
+         for (yylval.Number = 0; ISDIGIT (c = *yyInput++);)
+           yylval.Number = 10 * yylval.Number + c - '0';
+         yyInput--;
+         if (sign < 0)
+           yylval.Number = -yylval.Number;
+         return (0 != sign) ? tSNUMBER : tUNUMBER;
+       }
+      if (ISALPHA (c))
+       {
+         for (p = buff; (c = *yyInput++, ISALPHA (c)) || c == '.';)
+           if (p < &buff[sizeof buff - 1])
+             *p++ = c;
+         *p = '\0';
+         yyInput--;
+         return LookupWord (buff);
+       }
+      if (c != '(')
+       return *yyInput++;
+      Count = 0;
+      do
+       {
+         c = *yyInput++;
+         if (c == '\0')
+           return c;
+         if (c == '(')
+           Count++;
+         else if (c == ')')
+           Count--;
+       }
+      while (Count > 0);
+    }
+}
+
+#define TM_YEAR_ORIGIN 1900
+
+/* Yield A - B, measured in seconds.  */
+static long difftm (struct tm *a, struct tm *b)
+{
+  int ay = a->tm_year + (TM_YEAR_ORIGIN - 1);
+  int by = b->tm_year + (TM_YEAR_ORIGIN - 1);
+  long days = (
+  /* difference in day of year */
+               a->tm_yday - b->tm_yday
+  /* + intervening leap days */
+               + ((ay >> 2) - (by >> 2))
+               - (ay / 100 - by / 100)
+               + ((ay / 100 >> 2) - (by / 100 >> 2))
+  /* + difference in years * 365 */
+               + (long) (ay - by) * 365
+  );
+  return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
+               + (a->tm_min - b->tm_min))
+         + (a->tm_sec - b->tm_sec));
+}
+
+time_t get_date (const char *p, const time_t *now)
+{
+  struct tm tm, tm0, *tmp;
+  time_t Start;
+
+  yyInput = p;
+  Start = now ? *now : time ((time_t *) NULL);
+  tmp = localtime (&Start);
+  yyYear = tmp->tm_year + TM_YEAR_ORIGIN;
+  yyMonth = tmp->tm_mon + 1;
+  yyDay = tmp->tm_mday;
+  yyHour = tmp->tm_hour;
+  yyMinutes = tmp->tm_min;
+  yySeconds = tmp->tm_sec;
+  yyMeridian = MER24;
+  yyRelSeconds = 0;
+  yyRelMinutes = 0;
+  yyRelHour = 0;
+  yyRelDay = 0;
+  yyRelMonth = 0;
+  yyRelYear = 0;
+  yyHaveDate = 0;
+  yyHaveDay = 0;
+  yyHaveRel = 0;
+  yyHaveTime = 0;
+  yyHaveZone = 0;
+
+  if (yyparse ()
+      || yyHaveTime > 1 || yyHaveZone > 1 || yyHaveDate > 1 || yyHaveDay > 1)
+    return -1;
+
+  tm.tm_year = ToYear (yyYear) - TM_YEAR_ORIGIN + yyRelYear;
+  tm.tm_mon = yyMonth - 1 + yyRelMonth;
+  tm.tm_mday = yyDay + yyRelDay;
+  if ((yyHaveTime != 0) ||
+      ( (yyHaveRel != 0) && (yyHaveDate == 0) && (yyHaveDay == 0) ))
+    {
+      tm.tm_hour = ToHour (yyHour, yyMeridian);
+      if (tm.tm_hour < 0)
+       return -1;
+      tm.tm_min = yyMinutes;
+      tm.tm_sec = yySeconds;
+    }
+  else
+    {
+      tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+    }
+  tm.tm_hour += yyRelHour;
+  tm.tm_min += yyRelMinutes;
+  tm.tm_sec += yyRelSeconds;
+  tm.tm_isdst = -1;
+  tm0 = tm;
+
+  Start = mktime (&tm);
+
+  if (Start == (time_t) -1)
+    {
+
+      /* Guard against falsely reporting errors near the time_t boundaries
+         when parsing times in other time zones.  For example, if the min
+         time_t value is 1970-01-01 00:00:00 UTC and we are 8 hours ahead
+         of UTC, then the min localtime value is 1970-01-01 08:00:00; if
+         we apply mktime to 1970-01-01 00:00:00 we will get an error, so
+         we apply mktime to 1970-01-02 08:00:00 instead and adjust the time
+         zone by 24 hours to compensate.  This algorithm assumes that
+         there is no DST transition within a day of the time_t boundaries.  */
+      if (yyHaveZone)
+       {
+         tm = tm0;
+         if (tm.tm_year <= EPOCH - TM_YEAR_ORIGIN)
+           {
+             tm.tm_mday++;
+             yyTimezone -= 24 * 60;
+           }
+         else
+           {
+             tm.tm_mday--;
+             yyTimezone += 24 * 60;
+           }
+         Start = mktime (&tm);
+       }
+
+      if (Start == (time_t) -1)
+       return Start;
+    }
+
+  if (yyHaveDay && !yyHaveDate)
+    {
+      tm.tm_mday += ((yyDayNumber - tm.tm_wday + 7) % 7
+                    + 7 * (yyDayOrdinal - (0 < yyDayOrdinal)));
+      Start = mktime (&tm);
+      if (Start == (time_t) -1)
+       return Start;
+    }
+
+  if (yyHaveZone)
+    {
+      long delta = yyTimezone * 60L + difftm (&tm, gmtime (&Start));
+      if ((Start + delta < Start) != (delta < 0))
+       return -1;              /* time_t overflow */
+      Start += delta;
+    }
+
+  return Start;
+}
+
+#if    defined (TEST)
+
+/* ARGSUSED */
+int
+main (ac, av)
+     int ac;
+     char *av[];
+{
+  char buff[MAX_BUFF_LEN + 1];
+  time_t d;
+
+  (void) printf ("Enter date, or blank line to exit.\n\t> ");
+  (void) fflush (stdout);
+
+  buff[MAX_BUFF_LEN] = 0;
+  while (fgets (buff, MAX_BUFF_LEN, stdin) && buff[0])
+    {
+      d = get_date (buff, (time_t *) NULL);
+      if (d == -1)
+       (void) printf ("Bad format - couldn't convert.\n");
+      else
+       (void) printf ("%s", ctime (&d));
+      (void) printf ("\t> ");
+      (void) fflush (stdout);
+    }
+  exit (0);
+  /* NOTREACHED */
+}
+#endif /* defined (TEST) */
+
diff --git a/libmisc/getdate.h b/libmisc/getdate.h
new file mode 100644 (file)
index 0000000..d59b70a
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1997 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2005       , Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _GETDATE_H_
+#define _GETDATE_H_
+
+#include <config.h>
+#include "defines.h"
+
+time_t get_date (const char *, const time_t *);
+#endif
diff --git a/libmisc/getdate.y b/libmisc/getdate.y
new file mode 100644 (file)
index 0000000..ee00ca5
--- /dev/null
@@ -0,0 +1,977 @@
+%{
+/*
+**  Originally written by Steven M. Bellovin <smb@research.att.com> while
+**  at the University of North Carolina at Chapel Hill.  Later tweaked by
+**  a couple of people on Usenet.  Completely overhauled by Rich $alz
+**  <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990;
+**
+**  This grammar has 13 shift/reduce conflicts.
+**
+**  This code is in the public domain and has no copyright.
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+# ifdef FORCE_ALLOCA_H
+#  include <alloca.h>
+# endif
+#endif
+
+/* Since the code of getdate.y is not included in the Emacs executable
+   itself, there is no need to #define static in this file.  Even if
+   the code were included in the Emacs executable, it probably
+   wouldn't do any harm to #undef it here; this will only cause
+   problems if we try to write to a static variable, which I don't
+   think this code needs to do.  */
+#ifdef emacs
+# undef static
+#endif
+
+#include <stdio.h>
+#include <ctype.h>
+#include <time.h>
+
+#if defined (STDC_HEADERS) || (!defined (isascii) && !defined (HAVE_ISASCII))
+# define IN_CTYPE_DOMAIN(c) 1
+#else
+# define IN_CTYPE_DOMAIN(c) isascii(c)
+#endif
+
+#define ISSPACE(c) (IN_CTYPE_DOMAIN (c) && isspace (c))
+#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
+#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
+#define ISDIGIT_LOCALE(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
+
+/* ISDIGIT differs from ISDIGIT_LOCALE, as follows:
+   - Its arg may be any int or unsigned int; it need not be an unsigned char.
+   - It's guaranteed to evaluate its argument exactly once.
+   - It's typically faster.
+   Posix 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
+   only '0' through '9' are digits.  Prefer ISDIGIT to ISDIGIT_LOCALE unless
+   it's important to use the locale's definition of `digit' even when the
+   host does not conform to Posix.  */
+#define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
+
+#include "getdate.h"
+
+#if defined (STDC_HEADERS)
+# include <string.h>
+#endif
+
+/* Some old versions of bison generate parsers that use bcopy.
+   That loses on systems that don't provide the function, so we have
+   to redefine it here.  */
+#if !defined (HAVE_BCOPY) && defined (HAVE_MEMCPY) && !defined (bcopy)
+# define bcopy(from, to, len) memcpy ((to), (from), (len))
+#endif
+
+/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
+   as well as gratuitiously global symbol names, so we can have multiple
+   yacc generated parsers in the same program.  Note that these are only
+   the variables produced by yacc.  If other parser generators (bison,
+   byacc, etc) produce additional global names that conflict at link time,
+   then those parser generators need to be fixed instead of adding those
+   names to this list. */
+
+#define yymaxdepth gd_maxdepth
+#define yyparse gd_parse
+#define yylex   gd_lex
+#define yyerror gd_error
+#define yylval  gd_lval
+#define yychar  gd_char
+#define yydebug gd_debug
+#define yypact  gd_pact
+#define yyr1    gd_r1
+#define yyr2    gd_r2
+#define yydef   gd_def
+#define yychk   gd_chk
+#define yypgo   gd_pgo
+#define yyact   gd_act
+#define yyexca  gd_exca
+#define yyerrflag gd_errflag
+#define yynerrs gd_nerrs
+#define yyps    gd_ps
+#define yypv    gd_pv
+#define yys     gd_s
+#define yy_yys  gd_yys
+#define yystate gd_state
+#define yytmp   gd_tmp
+#define yyv     gd_v
+#define yy_yyv  gd_yyv
+#define yyval   gd_val
+#define yylloc  gd_lloc
+#define yyreds  gd_reds          /* With YYDEBUG defined */
+#define yytoks  gd_toks          /* With YYDEBUG defined */
+#define yylhs   gd_yylhs
+#define yylen   gd_yylen
+#define yydefred gd_yydefred
+#define yydgoto gd_yydgoto
+#define yysindex gd_yysindex
+#define yyrindex gd_yyrindex
+#define yygindex gd_yygindex
+#define yytable  gd_yytable
+#define yycheck  gd_yycheck
+
+static int yylex (void);
+static int yyerror (const char *s);
+
+#define EPOCH          1970
+#define HOUR(x)                ((x) * 60)
+
+#define MAX_BUFF_LEN    128   /* size of buffer to read the date into */
+
+/*
+**  An entry in the lexical lookup table.
+*/
+typedef struct _TABLE {
+    const char *name;
+    int                type;
+    int                value;
+} TABLE;
+
+
+/*
+**  Meridian:  am, pm, or 24-hour style.
+*/
+typedef enum _MERIDIAN {
+    MERam, MERpm, MER24
+} MERIDIAN;
+
+
+/*
+**  Global variables.  We could get rid of most of these by using a good
+**  union as the yacc stack.  (This routine was originally written before
+**  yacc had the %union construct.)  Maybe someday; right now we only use
+**  the %union very rarely.
+*/
+static const char      *yyInput;
+static int     yyDayOrdinal;
+static int     yyDayNumber;
+static int     yyHaveDate;
+static int     yyHaveDay;
+static int     yyHaveRel;
+static int     yyHaveTime;
+static int     yyHaveZone;
+static int     yyTimezone;
+static int     yyDay;
+static int     yyHour;
+static int     yyMinutes;
+static int     yyMonth;
+static int     yySeconds;
+static int     yyYear;
+static MERIDIAN        yyMeridian;
+static int     yyRelDay;
+static int     yyRelHour;
+static int     yyRelMinutes;
+static int     yyRelMonth;
+static int     yyRelSeconds;
+static int     yyRelYear;
+
+%}
+
+%union {
+    int                        Number;
+    enum _MERIDIAN     Meridian;
+}
+
+%token tAGO tDAY tDAY_UNIT tDAYZONE tDST tHOUR_UNIT tID
+%token tMERIDIAN tMINUTE_UNIT tMONTH tMONTH_UNIT
+%token tSEC_UNIT tSNUMBER tUNUMBER tYEAR_UNIT tZONE
+
+%type  <Number>        tDAY tDAY_UNIT tDAYZONE tHOUR_UNIT tMINUTE_UNIT
+%type  <Number>        tMONTH tMONTH_UNIT
+%type  <Number>        tSEC_UNIT tSNUMBER tUNUMBER tYEAR_UNIT tZONE
+%type  <Meridian>      tMERIDIAN o_merid
+
+%%
+
+spec   : /* NULL */
+       | spec item
+       ;
+
+item   : time {
+           yyHaveTime++;
+       }
+       | zone {
+           yyHaveZone++;
+       }
+       | date {
+           yyHaveDate++;
+       }
+       | day {
+           yyHaveDay++;
+       }
+       | rel {
+           yyHaveRel++;
+       }
+       | number
+       ;
+
+time   : tUNUMBER tMERIDIAN {
+           yyHour = $1;
+           yyMinutes = 0;
+           yySeconds = 0;
+           yyMeridian = $2;
+       }
+       | tUNUMBER ':' tUNUMBER o_merid {
+           yyHour = $1;
+           yyMinutes = $3;
+           yySeconds = 0;
+           yyMeridian = $4;
+       }
+       | tUNUMBER ':' tUNUMBER tSNUMBER {
+           yyHour = $1;
+           yyMinutes = $3;
+           yyMeridian = MER24;
+           yyHaveZone++;
+           yyTimezone = ($4 < 0
+                         ? -$4 % 100 + (-$4 / 100) * 60
+                         : - ($4 % 100 + ($4 / 100) * 60));
+       }
+       | tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid {
+           yyHour = $1;
+           yyMinutes = $3;
+           yySeconds = $5;
+           yyMeridian = $6;
+       }
+       | tUNUMBER ':' tUNUMBER ':' tUNUMBER tSNUMBER {
+           yyHour = $1;
+           yyMinutes = $3;
+           yySeconds = $5;
+           yyMeridian = MER24;
+           yyHaveZone++;
+           yyTimezone = ($6 < 0
+                         ? -$6 % 100 + (-$6 / 100) * 60
+                         : - ($6 % 100 + ($6 / 100) * 60));
+       }
+       ;
+
+zone   : tZONE {
+           yyTimezone = $1;
+       }
+       | tDAYZONE {
+           yyTimezone = $1 - 60;
+       }
+       |
+         tZONE tDST {
+           yyTimezone = $1 - 60;
+       }
+       ;
+
+day    : tDAY {
+           yyDayOrdinal = 1;
+           yyDayNumber = $1;
+       }
+       | tDAY ',' {
+           yyDayOrdinal = 1;
+           yyDayNumber = $1;
+       }
+       | tUNUMBER tDAY {
+           yyDayOrdinal = $1;
+           yyDayNumber = $2;
+       }
+       ;
+
+date   : tUNUMBER '/' tUNUMBER {
+           yyMonth = $1;
+           yyDay = $3;
+       }
+       | tUNUMBER '/' tUNUMBER '/' tUNUMBER {
+         /* Interpret as YYYY/MM/DD if $1 >= 1000, otherwise as MM/DD/YY.
+            The goal in recognizing YYYY/MM/DD is solely to support legacy
+            machine-generated dates like those in an RCS log listing.  If
+            you want portability, use the ISO 8601 format.  */
+         if ($1 >= 1000)
+           {
+             yyYear = $1;
+             yyMonth = $3;
+             yyDay = $5;
+           }
+         else
+           {
+             yyMonth = $1;
+             yyDay = $3;
+             yyYear = $5;
+           }
+       }
+       | tUNUMBER tSNUMBER tSNUMBER {
+           /* ISO 8601 format.  yyyy-mm-dd.  */
+           yyYear = $1;
+           yyMonth = -$2;
+           yyDay = -$3;
+       }
+       | tUNUMBER tMONTH tSNUMBER {
+           /* e.g. 17-JUN-1992.  */
+           yyDay = $1;
+           yyMonth = $2;
+           yyYear = -$3;
+       }
+       | tMONTH tUNUMBER {
+           yyMonth = $1;
+           yyDay = $2;
+       }
+       | tMONTH tUNUMBER ',' tUNUMBER {
+           yyMonth = $1;
+           yyDay = $2;
+           yyYear = $4;
+       }
+       | tUNUMBER tMONTH {
+           yyMonth = $2;
+           yyDay = $1;
+       }
+       | tUNUMBER tMONTH tUNUMBER {
+           yyMonth = $2;
+           yyDay = $1;
+           yyYear = $3;
+       }
+       ;
+
+rel    : relunit tAGO {
+           yyRelSeconds = -yyRelSeconds;
+           yyRelMinutes = -yyRelMinutes;
+           yyRelHour = -yyRelHour;
+           yyRelDay = -yyRelDay;
+           yyRelMonth = -yyRelMonth;
+           yyRelYear = -yyRelYear;
+       }
+       | relunit
+       ;
+
+relunit        : tUNUMBER tYEAR_UNIT {
+           yyRelYear += $1 * $2;
+       }
+       | tSNUMBER tYEAR_UNIT {
+           yyRelYear += $1 * $2;
+       }
+       | tYEAR_UNIT {
+           yyRelYear++;
+       }
+       | tUNUMBER tMONTH_UNIT {
+           yyRelMonth += $1 * $2;
+       }
+       | tSNUMBER tMONTH_UNIT {
+           yyRelMonth += $1 * $2;
+       }
+       | tMONTH_UNIT {
+           yyRelMonth++;
+       }
+       | tUNUMBER tDAY_UNIT {
+           yyRelDay += $1 * $2;
+       }
+       | tSNUMBER tDAY_UNIT {
+           yyRelDay += $1 * $2;
+       }
+       | tDAY_UNIT {
+           yyRelDay++;
+       }
+       | tUNUMBER tHOUR_UNIT {
+           yyRelHour += $1 * $2;
+       }
+       | tSNUMBER tHOUR_UNIT {
+           yyRelHour += $1 * $2;
+       }
+       | tHOUR_UNIT {
+           yyRelHour++;
+       }
+       | tUNUMBER tMINUTE_UNIT {
+           yyRelMinutes += $1 * $2;
+       }
+       | tSNUMBER tMINUTE_UNIT {
+           yyRelMinutes += $1 * $2;
+       }
+       | tMINUTE_UNIT {
+           yyRelMinutes++;
+       }
+       | tUNUMBER tSEC_UNIT {
+           yyRelSeconds += $1 * $2;
+       }
+       | tSNUMBER tSEC_UNIT {
+           yyRelSeconds += $1 * $2;
+       }
+       | tSEC_UNIT {
+           yyRelSeconds++;
+       }
+       ;
+
+number : tUNUMBER
+          {
+           if ((yyHaveTime != 0) && (yyHaveDate != 0) && (yyHaveRel == 0))
+             yyYear = $1;
+           else
+             {
+               if ($1>10000)
+                 {
+                   yyHaveDate++;
+                   yyDay= ($1)%100;
+                   yyMonth= ($1/100)%100;
+                   yyYear = $1/10000;
+                 }
+               else
+                 {
+                   yyHaveTime++;
+                   if ($1 < 100)
+                     {
+                       yyHour = $1;
+                       yyMinutes = 0;
+                     }
+                   else
+                     {
+                       yyHour = $1 / 100;
+                       yyMinutes = $1 % 100;
+                     }
+                   yySeconds = 0;
+                   yyMeridian = MER24;
+                 }
+             }
+         }
+       ;
+
+o_merid        : /* NULL */
+         {
+           $$ = MER24;
+         }
+       | tMERIDIAN
+         {
+           $$ = $1;
+         }
+       ;
+
+%%
+
+/* Month and day table. */
+static TABLE const MonthDayTable[] = {
+    { "january",       tMONTH,  1 },
+    { "february",      tMONTH,  2 },
+    { "march",         tMONTH,  3 },
+    { "april",         tMONTH,  4 },
+    { "may",           tMONTH,  5 },
+    { "june",          tMONTH,  6 },
+    { "july",          tMONTH,  7 },
+    { "august",                tMONTH,  8 },
+    { "september",     tMONTH,  9 },
+    { "sept",          tMONTH,  9 },
+    { "october",       tMONTH, 10 },
+    { "november",      tMONTH, 11 },
+    { "december",      tMONTH, 12 },
+    { "sunday",                tDAY, 0 },
+    { "monday",                tDAY, 1 },
+    { "tuesday",       tDAY, 2 },
+    { "tues",          tDAY, 2 },
+    { "wednesday",     tDAY, 3 },
+    { "wednes",                tDAY, 3 },
+    { "thursday",      tDAY, 4 },
+    { "thur",          tDAY, 4 },
+    { "thurs",         tDAY, 4 },
+    { "friday",                tDAY, 5 },
+    { "saturday",      tDAY, 6 },
+    { NULL, 0, 0 }
+};
+
+/* Time units table. */
+static TABLE const UnitsTable[] = {
+    { "year",          tYEAR_UNIT,     1 },
+    { "month",         tMONTH_UNIT,    1 },
+    { "fortnight",     tDAY_UNIT,      14 },
+    { "week",          tDAY_UNIT,      7 },
+    { "day",           tDAY_UNIT,      1 },
+    { "hour",          tHOUR_UNIT,     1 },
+    { "minute",                tMINUTE_UNIT,   1 },
+    { "min",           tMINUTE_UNIT,   1 },
+    { "second",                tSEC_UNIT,      1 },
+    { "sec",           tSEC_UNIT,      1 },
+    { NULL, 0, 0 }
+};
+
+/* Assorted relative-time words. */
+static TABLE const OtherTable[] = {
+    { "tomorrow",      tMINUTE_UNIT,   1 * 24 * 60 },
+    { "yesterday",     tMINUTE_UNIT,   -1 * 24 * 60 },
+    { "today",         tMINUTE_UNIT,   0 },
+    { "now",           tMINUTE_UNIT,   0 },
+    { "last",          tUNUMBER,       -1 },
+    { "this",          tMINUTE_UNIT,   0 },
+    { "next",          tUNUMBER,       2 },
+    { "first",         tUNUMBER,       1 },
+/*  { "second",                tUNUMBER,       2 }, */
+    { "third",         tUNUMBER,       3 },
+    { "fourth",                tUNUMBER,       4 },
+    { "fifth",         tUNUMBER,       5 },
+    { "sixth",         tUNUMBER,       6 },
+    { "seventh",       tUNUMBER,       7 },
+    { "eighth",                tUNUMBER,       8 },
+    { "ninth",         tUNUMBER,       9 },
+    { "tenth",         tUNUMBER,       10 },
+    { "eleventh",      tUNUMBER,       11 },
+    { "twelfth",       tUNUMBER,       12 },
+    { "ago",           tAGO,   1 },
+    { NULL, 0, 0 }
+};
+
+/* The timezone table. */
+static TABLE const TimezoneTable[] = {
+    { "gmt",   tZONE,     HOUR ( 0) }, /* Greenwich Mean */
+    { "ut",    tZONE,     HOUR ( 0) }, /* Universal (Coordinated) */
+    { "utc",   tZONE,     HOUR ( 0) },
+    { "wet",   tZONE,     HOUR ( 0) }, /* Western European */
+    { "bst",   tDAYZONE,  HOUR ( 0) }, /* British Summer */
+    { "wat",   tZONE,     HOUR ( 1) }, /* West Africa */
+    { "at",    tZONE,     HOUR ( 2) }, /* Azores */
+    { "ast",   tZONE,     HOUR ( 4) }, /* Atlantic Standard */
+    { "adt",   tDAYZONE,  HOUR ( 4) }, /* Atlantic Daylight */
+    { "est",   tZONE,     HOUR ( 5) }, /* Eastern Standard */
+    { "edt",   tDAYZONE,  HOUR ( 5) }, /* Eastern Daylight */
+    { "cst",   tZONE,     HOUR ( 6) }, /* Central Standard */
+    { "cdt",   tDAYZONE,  HOUR ( 6) }, /* Central Daylight */
+    { "mst",   tZONE,     HOUR ( 7) }, /* Mountain Standard */
+    { "mdt",   tDAYZONE,  HOUR ( 7) }, /* Mountain Daylight */
+    { "pst",   tZONE,     HOUR ( 8) }, /* Pacific Standard */
+    { "pdt",   tDAYZONE,  HOUR ( 8) }, /* Pacific Daylight */
+    { "yst",   tZONE,     HOUR ( 9) }, /* Yukon Standard */
+    { "ydt",   tDAYZONE,  HOUR ( 9) }, /* Yukon Daylight */
+    { "hst",   tZONE,     HOUR (10) }, /* Hawaii Standard */
+    { "hdt",   tDAYZONE,  HOUR (10) }, /* Hawaii Daylight */
+    { "cat",   tZONE,     HOUR (10) }, /* Central Alaska */
+    { "ahst",  tZONE,     HOUR (10) }, /* Alaska-Hawaii Standard */
+    { "nt",    tZONE,     HOUR (11) }, /* Nome */
+    { "idlw",  tZONE,     HOUR (12) }, /* International Date Line West */
+    { "cet",   tZONE,     -HOUR (1) }, /* Central European */
+    { "met",   tZONE,     -HOUR (1) }, /* Middle European */
+    { "mewt",  tZONE,     -HOUR (1) }, /* Middle European Winter */
+    { "mest",  tDAYZONE,  -HOUR (1) }, /* Middle European Summer */
+    { "mesz",  tDAYZONE,  -HOUR (1) }, /* Middle European Summer */
+    { "swt",   tZONE,     -HOUR (1) }, /* Swedish Winter */
+    { "sst",   tDAYZONE,  -HOUR (1) }, /* Swedish Summer */
+    { "fwt",   tZONE,     -HOUR (1) }, /* French Winter */
+    { "fst",   tDAYZONE,  -HOUR (1) }, /* French Summer */
+    { "eet",   tZONE,     -HOUR (2) }, /* Eastern Europe, USSR Zone 1 */
+    { "bt",    tZONE,     -HOUR (3) }, /* Baghdad, USSR Zone 2 */
+    { "zp4",   tZONE,     -HOUR (4) }, /* USSR Zone 3 */
+    { "zp5",   tZONE,     -HOUR (5) }, /* USSR Zone 4 */
+    { "zp6",   tZONE,     -HOUR (6) }, /* USSR Zone 5 */
+    { "wast",  tZONE,     -HOUR (7) }, /* West Australian Standard */
+    { "wadt",  tDAYZONE,  -HOUR (7) }, /* West Australian Daylight */
+    { "cct",   tZONE,     -HOUR (8) }, /* China Coast, USSR Zone 7 */
+    { "jst",   tZONE,     -HOUR (9) }, /* Japan Standard, USSR Zone 8 */
+    { "east",  tZONE,     -HOUR (10) },        /* Eastern Australian Standard */
+    { "eadt",  tDAYZONE,  -HOUR (10) },        /* Eastern Australian Daylight */
+    { "gst",   tZONE,     -HOUR (10) },        /* Guam Standard, USSR Zone 9 */
+    { "nzt",   tZONE,     -HOUR (12) },        /* New Zealand */
+    { "nzst",  tZONE,     -HOUR (12) },        /* New Zealand Standard */
+    { "nzdt",  tDAYZONE,  -HOUR (12) },        /* New Zealand Daylight */
+    { "idle",  tZONE,     -HOUR (12) },        /* International Date Line East */
+    { NULL, 0, 0 }
+};
+
+/* Military timezone table. */
+static TABLE const MilitaryTable[] = {
+    { "a",     tZONE,  HOUR (  1) },
+    { "b",     tZONE,  HOUR (  2) },
+    { "c",     tZONE,  HOUR (  3) },
+    { "d",     tZONE,  HOUR (  4) },
+    { "e",     tZONE,  HOUR (  5) },
+    { "f",     tZONE,  HOUR (  6) },
+    { "g",     tZONE,  HOUR (  7) },
+    { "h",     tZONE,  HOUR (  8) },
+    { "i",     tZONE,  HOUR (  9) },
+    { "k",     tZONE,  HOUR ( 10) },
+    { "l",     tZONE,  HOUR ( 11) },
+    { "m",     tZONE,  HOUR ( 12) },
+    { "n",     tZONE,  HOUR (- 1) },
+    { "o",     tZONE,  HOUR (- 2) },
+    { "p",     tZONE,  HOUR (- 3) },
+    { "q",     tZONE,  HOUR (- 4) },
+    { "r",     tZONE,  HOUR (- 5) },
+    { "s",     tZONE,  HOUR (- 6) },
+    { "t",     tZONE,  HOUR (- 7) },
+    { "u",     tZONE,  HOUR (- 8) },
+    { "v",     tZONE,  HOUR (- 9) },
+    { "w",     tZONE,  HOUR (-10) },
+    { "x",     tZONE,  HOUR (-11) },
+    { "y",     tZONE,  HOUR (-12) },
+    { "z",     tZONE,  HOUR (  0) },
+    { NULL, 0, 0 }
+};
+
+\f
+
+
+static int yyerror (unused const char *s)
+{
+  return 0;
+}
+
+static int ToHour (int Hours, MERIDIAN Meridian)
+{
+  switch (Meridian)
+    {
+    case MER24:
+      if (Hours < 0 || Hours > 23)
+       return -1;
+      return Hours;
+    case MERam:
+      if (Hours < 1 || Hours > 12)
+       return -1;
+      if (Hours == 12)
+       Hours = 0;
+      return Hours;
+    case MERpm:
+      if (Hours < 1 || Hours > 12)
+       return -1;
+      if (Hours == 12)
+       Hours = 0;
+      return Hours + 12;
+    default:
+      abort ();
+    }
+  /* NOTREACHED */
+}
+
+static int ToYear (int Year)
+{
+  if (Year < 0)
+    Year = -Year;
+
+  /* XPG4 suggests that years 00-68 map to 2000-2068, and
+     years 69-99 map to 1969-1999.  */
+  if (Year < 69)
+    Year += 2000;
+  else if (Year < 100)
+    Year += 1900;
+
+  return Year;
+}
+
+static int LookupWord (char *buff)
+{
+  register char *p;
+  register char *q;
+  register const TABLE *tp;
+  int i;
+  bool abbrev;
+
+  /* Make it lowercase. */
+  for (p = buff; '\0' != *p; p++)
+    if (ISUPPER (*p))
+      *p = tolower (*p);
+
+  if (strcmp (buff, "am") == 0 || strcmp (buff, "a.m.") == 0)
+    {
+      yylval.Meridian = MERam;
+      return tMERIDIAN;
+    }
+  if (strcmp (buff, "pm") == 0 || strcmp (buff, "p.m.") == 0)
+    {
+      yylval.Meridian = MERpm;
+      return tMERIDIAN;
+    }
+
+  /* See if we have an abbreviation for a month. */
+  if (strlen (buff) == 3)
+    abbrev = true;
+  else if (strlen (buff) == 4 && buff[3] == '.')
+    {
+      abbrev = true;
+      buff[3] = '\0';
+    }
+  else
+    abbrev = false;
+
+  for (tp = MonthDayTable; tp->name; tp++)
+    {
+      if (abbrev)
+       {
+         if (strncmp (buff, tp->name, 3) == 0)
+           {
+             yylval.Number = tp->value;
+             return tp->type;
+           }
+       }
+      else if (strcmp (buff, tp->name) == 0)
+       {
+         yylval.Number = tp->value;
+         return tp->type;
+       }
+    }
+
+  for (tp = TimezoneTable; tp->name; tp++)
+    if (strcmp (buff, tp->name) == 0)
+      {
+       yylval.Number = tp->value;
+       return tp->type;
+      }
+
+  if (strcmp (buff, "dst") == 0)
+    return tDST;
+
+  for (tp = UnitsTable; tp->name; tp++)
+    if (strcmp (buff, tp->name) == 0)
+      {
+       yylval.Number = tp->value;
+       return tp->type;
+      }
+
+  /* Strip off any plural and try the units table again. */
+  i = strlen (buff) - 1;
+  if (buff[i] == 's')
+    {
+      buff[i] = '\0';
+      for (tp = UnitsTable; tp->name; tp++)
+       if (strcmp (buff, tp->name) == 0)
+         {
+           yylval.Number = tp->value;
+           return tp->type;
+         }
+      buff[i] = 's';           /* Put back for "this" in OtherTable. */
+    }
+
+  for (tp = OtherTable; tp->name; tp++)
+    if (strcmp (buff, tp->name) == 0)
+      {
+       yylval.Number = tp->value;
+       return tp->type;
+      }
+
+  /* Military timezones. */
+  if (buff[1] == '\0' && ISALPHA (*buff))
+    {
+      for (tp = MilitaryTable; tp->name; tp++)
+       if (strcmp (buff, tp->name) == 0)
+         {
+           yylval.Number = tp->value;
+           return tp->type;
+         }
+    }
+
+  /* Drop out any periods and try the timezone table again. */
+  for (i = 0, p = q = buff; '\0' != *q; q++)
+    if (*q != '.')
+      *p++ = *q;
+    else
+      i++;
+  *p = '\0';
+  if (0 != i)
+    for (tp = TimezoneTable; NULL != tp->name; tp++)
+      if (strcmp (buff, tp->name) == 0)
+       {
+         yylval.Number = tp->value;
+         return tp->type;
+       }
+
+  return tID;
+}
+
+static int
+yylex (void)
+{
+  register char c;
+  register char *p;
+  char buff[20];
+  int Count;
+  int sign;
+
+  for (;;)
+    {
+      while (ISSPACE (*yyInput))
+       yyInput++;
+
+      if (ISDIGIT (c = *yyInput) || c == '-' || c == '+')
+       {
+         if (c == '-' || c == '+')
+           {
+             sign = c == '-' ? -1 : 1;
+             if (!ISDIGIT (*++yyInput))
+               /* skip the '-' sign */
+               continue;
+           }
+         else
+           sign = 0;
+         for (yylval.Number = 0; ISDIGIT (c = *yyInput++);)
+           yylval.Number = 10 * yylval.Number + c - '0';
+         yyInput--;
+         if (sign < 0)
+           yylval.Number = -yylval.Number;
+         return (0 != sign) ? tSNUMBER : tUNUMBER;
+       }
+      if (ISALPHA (c))
+       {
+         for (p = buff; (c = *yyInput++, ISALPHA (c)) || c == '.';)
+           if (p < &buff[sizeof buff - 1])
+             *p++ = c;
+         *p = '\0';
+         yyInput--;
+         return LookupWord (buff);
+       }
+      if (c != '(')
+       return *yyInput++;
+      Count = 0;
+      do
+       {
+         c = *yyInput++;
+         if (c == '\0')
+           return c;
+         if (c == '(')
+           Count++;
+         else if (c == ')')
+           Count--;
+       }
+      while (Count > 0);
+    }
+}
+
+#define TM_YEAR_ORIGIN 1900
+
+/* Yield A - B, measured in seconds.  */
+static long difftm (struct tm *a, struct tm *b)
+{
+  int ay = a->tm_year + (TM_YEAR_ORIGIN - 1);
+  int by = b->tm_year + (TM_YEAR_ORIGIN - 1);
+  long days = (
+  /* difference in day of year */
+               a->tm_yday - b->tm_yday
+  /* + intervening leap days */
+               + ((ay >> 2) - (by >> 2))
+               - (ay / 100 - by / 100)
+               + ((ay / 100 >> 2) - (by / 100 >> 2))
+  /* + difference in years * 365 */
+               + (long) (ay - by) * 365
+  );
+  return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
+               + (a->tm_min - b->tm_min))
+         + (a->tm_sec - b->tm_sec));
+}
+
+time_t get_date (const char *p, const time_t *now)
+{
+  struct tm tm, tm0, *tmp;
+  time_t Start;
+
+  yyInput = p;
+  Start = now ? *now : time ((time_t *) NULL);
+  tmp = localtime (&Start);
+  yyYear = tmp->tm_year + TM_YEAR_ORIGIN;
+  yyMonth = tmp->tm_mon + 1;
+  yyDay = tmp->tm_mday;
+  yyHour = tmp->tm_hour;
+  yyMinutes = tmp->tm_min;
+  yySeconds = tmp->tm_sec;
+  yyMeridian = MER24;
+  yyRelSeconds = 0;
+  yyRelMinutes = 0;
+  yyRelHour = 0;
+  yyRelDay = 0;
+  yyRelMonth = 0;
+  yyRelYear = 0;
+  yyHaveDate = 0;
+  yyHaveDay = 0;
+  yyHaveRel = 0;
+  yyHaveTime = 0;
+  yyHaveZone = 0;
+
+  if (yyparse ()
+      || yyHaveTime > 1 || yyHaveZone > 1 || yyHaveDate > 1 || yyHaveDay > 1)
+    return -1;
+
+  tm.tm_year = ToYear (yyYear) - TM_YEAR_ORIGIN + yyRelYear;
+  tm.tm_mon = yyMonth - 1 + yyRelMonth;
+  tm.tm_mday = yyDay + yyRelDay;
+  if ((yyHaveTime != 0) ||
+      ( (yyHaveRel != 0) && (yyHaveDate == 0) && (yyHaveDay == 0) ))
+    {
+      tm.tm_hour = ToHour (yyHour, yyMeridian);
+      if (tm.tm_hour < 0)
+       return -1;
+      tm.tm_min = yyMinutes;
+      tm.tm_sec = yySeconds;
+    }
+  else
+    {
+      tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+    }
+  tm.tm_hour += yyRelHour;
+  tm.tm_min += yyRelMinutes;
+  tm.tm_sec += yyRelSeconds;
+  tm.tm_isdst = -1;
+  tm0 = tm;
+
+  Start = mktime (&tm);
+
+  if (Start == (time_t) -1)
+    {
+
+      /* Guard against falsely reporting errors near the time_t boundaries
+         when parsing times in other time zones.  For example, if the min
+         time_t value is 1970-01-01 00:00:00 UTC and we are 8 hours ahead
+         of UTC, then the min localtime value is 1970-01-01 08:00:00; if
+         we apply mktime to 1970-01-01 00:00:00 we will get an error, so
+         we apply mktime to 1970-01-02 08:00:00 instead and adjust the time
+         zone by 24 hours to compensate.  This algorithm assumes that
+         there is no DST transition within a day of the time_t boundaries.  */
+      if (yyHaveZone)
+       {
+         tm = tm0;
+         if (tm.tm_year <= EPOCH - TM_YEAR_ORIGIN)
+           {
+             tm.tm_mday++;
+             yyTimezone -= 24 * 60;
+           }
+         else
+           {
+             tm.tm_mday--;
+             yyTimezone += 24 * 60;
+           }
+         Start = mktime (&tm);
+       }
+
+      if (Start == (time_t) -1)
+       return Start;
+    }
+
+  if (yyHaveDay && !yyHaveDate)
+    {
+      tm.tm_mday += ((yyDayNumber - tm.tm_wday + 7) % 7
+                    + 7 * (yyDayOrdinal - (0 < yyDayOrdinal)));
+      Start = mktime (&tm);
+      if (Start == (time_t) -1)
+       return Start;
+    }
+
+  if (yyHaveZone)
+    {
+      long delta = yyTimezone * 60L + difftm (&tm, gmtime (&Start));
+      if ((Start + delta < Start) != (delta < 0))
+       return -1;              /* time_t overflow */
+      Start += delta;
+    }
+
+  return Start;
+}
+
+#if    defined (TEST)
+
+/* ARGSUSED */
+int
+main (ac, av)
+     int ac;
+     char *av[];
+{
+  char buff[MAX_BUFF_LEN + 1];
+  time_t d;
+
+  (void) printf ("Enter date, or blank line to exit.\n\t> ");
+  (void) fflush (stdout);
+
+  buff[MAX_BUFF_LEN] = 0;
+  while (fgets (buff, MAX_BUFF_LEN, stdin) && buff[0])
+    {
+      d = get_date (buff, (time_t *) NULL);
+      if (d == -1)
+       (void) printf ("Bad format - couldn't convert.\n");
+      else
+       (void) printf ("%s", ctime (&d));
+      (void) printf ("\t> ");
+      (void) fflush (stdout);
+    }
+  exit (0);
+  /* NOTREACHED */
+}
+#endif /* defined (TEST) */
diff --git a/libmisc/getgr_nam_gid.c b/libmisc/getgr_nam_gid.c
new file mode 100644 (file)
index 0000000..39e4419
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id$"
+
+#include <stdlib.h>
+#include <errno.h>
+#include <grp.h>
+#include "prototypes.h"
+
+/*
+ * getgr_nam_gid - Return a pointer to the group specified by a string.
+ * The string may be a valid GID or a valid groupname.
+ * If the group does not exist on the system, NULL is returned.
+ */
+extern /*@null@*/struct group *getgr_nam_gid (const char *grname)
+{
+       long long int gid;
+       char *endptr;
+
+       if (NULL == grname) {
+               return NULL;
+       }
+
+       errno = 0;
+       gid = strtoll (grname, &endptr, 10);
+       if (   ('\0' != *grname)
+           && ('\0' == *endptr)
+           && (ERANGE != errno)
+           && (/*@+longintegral@*/gid == (gid_t)gid)/*@=longintegral@*/) {
+               return xgetgrgid ((gid_t) gid);
+       }
+       return xgetgrnam (grname);
+}
+
diff --git a/libmisc/getrange.c b/libmisc/getrange.c
new file mode 100644 (file)
index 0000000..9b5e611
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: $"
+
+#include <ctype.h>
+#include <stdlib.h>
+
+#include "defines.h"
+#include "prototypes.h"
+
+/*
+ * Parse a range and indicate if the range is valid.
+ * Valid ranges are in the form:
+ *     <long>          -> min=max=long         has_min  has_max
+ *     -<long>         -> max=long            !has_min  has_max
+ *     <long>-         -> min=long             has_min !has_max
+ *     <long1>-<long2> -> min=long1 max=long2  has_min  has_max
+ *
+ * If the range is valid, getrange returns 1.
+ * If the range is not valid, getrange returns 0.
+ */
+int getrange (char *range,
+              unsigned long *min, bool *has_min,
+              unsigned long *max, bool *has_max)
+{
+       char *endptr;
+       unsigned long n;
+
+       if (NULL == range) {
+               return 0;
+       }
+
+       if ('-' == range[0]) {
+               if (!isdigit(range[1])) {
+                       /* invalid */
+                       return 0;
+               }
+               errno = 0;
+               n = strtoul (&range[1], &endptr, 10);
+               if (('\0' != *endptr) || (ERANGE == errno)) {
+                       /* invalid */
+                       return 0;
+               }
+               /* -<long> */
+               *has_min = false;
+               *has_max = true;
+               *max = n;
+       } else {
+               errno = 0;
+               n = strtoul (range, &endptr, 10);
+               if (ERANGE == errno) {
+                       /* invalid */
+                       return 0;
+               }
+               switch (*endptr) {
+                       case '\0':
+                               /* <long> */
+                               *has_min = true;
+                               *has_max = true;
+                               *min = n;
+                               *max = n;
+                               break;
+                       case '-':
+                               endptr++;
+                               if ('\0' == *endptr) {
+                                       /* <long>- */
+                                       *has_min = true;
+                                       *has_max = false;
+                                       *min = n;
+                               } else if (!isdigit (*endptr)) {
+                                       /* invalid */
+                                       return 0;
+                               } else {
+                                       *has_min = true;
+                                       *min = n;
+                                       errno = 0;
+                                       n = strtoul (endptr, &endptr, 10);
+                                       if (   ('\0' != *endptr)
+                                           || (ERANGE == errno)) {
+                                               /* invalid */
+                                               return 0;
+                                       }
+                                       /* <long>-<long> */
+                                       *has_max = true;
+                                       *max = n;
+                               }
+                               break;
+                       default:
+                               return 0;
+               }
+       }
+
+       return 1;
+}
+
diff --git a/libmisc/hushed.c b/libmisc/hushed.c
new file mode 100644 (file)
index 0000000..565b9ca
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1991 - 1993, Chip Rosenthal
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: hushed.c 2731 2009-04-21 22:03:33Z nekral-guest $"
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <pwd.h>
+#include "defines.h"
+#include "prototypes.h"
+#include "getdef.h"
+/*
+ * hushed - determine if a user receives login messages
+ *
+ * Look in the hushed-logins file (or user's home directory) to see
+ * if the user is to receive the login-time messages.
+ */
+bool hushed (const char *username)
+{
+       struct passwd *pw;
+       char *hushfile;
+       char buf[BUFSIZ];
+       bool found;
+       FILE *fp;
+
+       /*
+        * Get the name of the file to use.  If this option is not
+        * defined, default to a noisy login.
+        */
+
+       hushfile = getdef_str ("HUSHLOGIN_FILE");
+       if (NULL == hushfile) {
+               return false;
+       }
+
+       pw = getpwnam (username);
+       if (NULL == pw) {
+               return false;
+       }
+
+       /*
+        * If this is not a fully rooted path then see if the
+        * file exists in the user's home directory.
+        */
+
+       if (hushfile[0] != '/') {
+               snprintf (buf, sizeof (buf), "%s/%s", pw->pw_dir, hushfile);
+               return (access (buf, F_OK) == 0);
+       }
+
+       /*
+        * If this is a fully rooted path then go through the file
+        * and see if this user, or its shell is in there.
+        */
+
+       fp = fopen (hushfile, "r");
+       if (NULL == fp) {
+               return false;
+       }
+       for (found = false; !found && (fgets (buf, (int) sizeof buf, fp) == buf);) {
+               buf[strlen (buf) - 1] = '\0';
+               found = (strcmp (buf, pw->pw_shell) == 0) ||
+                       (strcmp (buf, pw->pw_name) == 0);
+       }
+       (void) fclose (fp);
+       return found;
+}
+
diff --git a/libmisc/isexpired.c b/libmisc/isexpired.c
new file mode 100644 (file)
index 0000000..21b4921
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Extracted from age.c and made part of libshadow.a - may be useful
+ * in other shadow-aware programs.  --marekm
+ */
+
+#include <config.h>
+
+#include <sys/types.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+#include <time.h>
+
+#ident "$Id: isexpired.c 2777 2009-04-23 17:43:27Z nekral-guest $"
+
+
+/*
+ * isexpired - determine if account is expired yet
+ *
+ *     isexpired calculates the expiration date based on the
+ *     password expiration criteria.
+ *
+ * Return value:
+ *     0: The password is still valid
+ *     1: The password has expired, it must be changed
+ *     2: The password has expired since a long time and the account is
+ *        now disabled. (password cannot be changed)
+ *     3: The account has expired
+ */
+int isexpired (const struct passwd *pw, /*@null@*/const struct spwd *sp)
+{
+       long now;
+
+       now = (long) time ((time_t *) 0) / SCALE;
+
+       if (NULL == sp) {
+               return 0;
+       }
+
+       /*
+        * Quick and easy - there is an expired account field
+        * along with an inactive account field.  Do the expired
+        * one first since it is worse.
+        */
+
+       if ((sp->sp_expire > 0) && (now >= sp->sp_expire)) {
+               return 3;
+       }
+
+       /*
+        * Last changed date 1970-01-01 (not very likely) means that
+        * the password must be changed on next login (passwd -e).
+        *
+        * The check for "x" is a workaround for RedHat NYS libc bug -
+        * if /etc/shadow doesn't exist, getspnam() still succeeds and
+        * returns sp_lstchg==0 (must change password) instead of -1!
+        */
+       if (   (0 == sp->sp_lstchg)
+           && (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) == 0)) {
+               return 1;
+       }
+
+       if (   (sp->sp_lstchg > 0)
+           && (sp->sp_max >= 0)
+           && (sp->sp_inact >= 0)
+           && (now >= (sp->sp_lstchg + sp->sp_max + sp->sp_inact))) {
+               return 2;
+       }
+
+       /*
+        * The last and max fields must be present for an account
+        * to have an expired password.  A maximum of >10000 days
+        * is considered to be infinite.
+        */
+
+       if (   (-1 == sp->sp_lstchg)
+           || (-1 == sp->sp_max)
+           || (sp->sp_max >= (10000L * DAY / SCALE))) {
+               return 0;
+       }
+
+       /*
+        * Calculate today's day and the day on which the password
+        * is going to expire.  If that date has already passed,
+        * the password has expired.
+        */
+
+       if (now >= (sp->sp_lstchg + sp->sp_max)) {
+               return 1;
+       }
+       return 0;
+}
+
diff --git a/libmisc/limits.c b/libmisc/limits.c
new file mode 100644 (file)
index 0000000..ab17990
--- /dev/null
@@ -0,0 +1,497 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Separated from setup.c.  --marekm
+ * Resource limits thanks to Cristian Gafton.
+ */
+
+#include <config.h>
+
+#ifndef USE_PAM
+
+#ident "$Id: limits.c 2849 2009-04-30 21:08:49Z nekral-guest $"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+#include "getdef.h"
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#define LIMITS
+#endif
+#ifdef LIMITS
+#ifndef LIMITS_FILE
+#define LIMITS_FILE "/etc/limits"
+#endif
+#define LOGIN_ERROR_RLIMIT     1
+#define LOGIN_ERROR_LOGIN      2
+/* Set a limit on a resource */
+/*
+ *     rlimit - RLIMIT_XXXX
+ *     value - string value to be read
+ *     multiplier - value*multiplier is the actual limit
+ */
+static int
+setrlimit_value (unsigned int resource, const char *value,
+                unsigned int multiplier)
+{
+       struct rlimit rlim;
+       long limit;
+
+       if (getlong (value, &limit) == 0) {
+               return 0;
+       }
+       limit *= multiplier;
+       if (limit != (rlim_t) limit) {
+               return 0;
+       }
+       rlim.rlim_cur = (rlim_t) limit;
+       rlim.rlim_max = (rlim_t) limit;
+       if (setrlimit (resource, &rlim) != 0) {
+               return LOGIN_ERROR_RLIMIT;
+       }
+       return 0;
+}
+
+
+static int set_prio (const char *value)
+{
+       long prio;
+
+       if (   (getlong (value, &prio) == 0)
+           || (prio != (int) prio)) {
+               return 0;
+       }
+       if (setpriority (PRIO_PROCESS, 0, (int) prio) != 0) {
+               return LOGIN_ERROR_RLIMIT;
+       }
+       return 0;
+}
+
+
+static int set_umask (const char *value)
+{
+       unsigned long int mask;
+
+       if (   (getulong (value, &mask) == 0)
+           || (mask != (mode_t) mask)) {
+               return 0;
+       }
+
+       (void) umask ((mode_t) mask);
+       return 0;
+}
+
+
+/* Counts the number of user logins and check against the limit */
+static int check_logins (const char *name, const char *maxlogins)
+{
+#ifdef USE_UTMPX
+       struct utmpx *ut;
+#else                          /* !USE_UTMPX */
+       struct utmp *ut;
+#endif                         /* !USE_UTMPX */
+       unsigned long limit, count;
+
+       if (getulong (maxlogins, &limit) == 0) {
+               return 0;
+       }
+
+       if (0 == limit) {       /* maximum 0 logins ? */
+               SYSLOG ((LOG_WARN, "No logins allowed for `%s'\n", name));
+               return LOGIN_ERROR_LOGIN;
+       }
+
+       count = 0;
+#ifdef USE_UTMPX
+       setutxent ();
+       while ((ut = getutxent ())) {
+#else                          /* !USE_UTMPX */
+       setutent ();
+       while ((ut = getutent ())) {
+#endif                         /* !USE_UTMPX */
+               if (USER_PROCESS != ut->ut_type) {
+                       continue;
+               }
+               if ('\0' == ut->ut_user[0]) {
+                       continue;
+               }
+               if (strncmp (name, ut->ut_user, sizeof (ut->ut_user)) != 0) {
+                       continue;
+               }
+               count++;
+               if (count > limit) {
+                       break;
+               }
+       }
+#ifdef USE_UTMPX
+       endutxent ();
+#else                          /* !USE_UTMPX */
+       endutent ();
+#endif                         /* !USE_UTMPX */
+       /*
+        * This is called after setutmp(), so the number of logins counted
+        * includes the user who is currently trying to log in.
+        */
+       if (count > limit) {
+               SYSLOG ((LOG_WARN, "Too many logins (max %d) for %s\n",
+                        limit, name));
+               return LOGIN_ERROR_LOGIN;
+       }
+       return 0;
+}
+
+/* Function setup_user_limits - checks/set limits for the curent login
+ * Original idea from Joel Katz's lshell. Ported to shadow-login
+ * by Cristian Gafton - gafton@sorosis.ro
+ *
+ * We are passed a string of the form ('BASH' constants for ulimit)
+ *     [Aa][Cc][Dd][Ff][Mm][Nn][Rr][Ss][Tt][Uu][Ll][Pp][Ii][Oo]
+ *     (eg. 'C2F256D2048N5' or 'C2 F256 D2048 N5')
+ * where:
+ * [Aa]: a = RLIMIT_AS         max address space (KB)
+ * [Cc]: c = RLIMIT_CORE       max core file size (KB)
+ * [Dd]: d = RLIMIT_DATA       max data size (KB)
+ * [Ff]: f = RLIMIT_FSIZE      max file size (KB)
+ * [Mm]: m = RLIMIT_MEMLOCK    max locked-in-memory address space (KB)
+ * [Nn]: n = RLIMIT_NOFILE     max number of open files
+ * [Rr]: r = RLIMIT_RSS                max resident set size (KB)
+ * [Ss]: s = RLIMIT_STACK      max stack size (KB)
+ * [Tt]: t = RLIMIT_CPU                max CPU time (MIN)
+ * [Uu]: u = RLIMIT_NPROC      max number of processes
+ * [Kk]: k = file creation masK (umask)
+ * [Ll]: l = max number of logins for this user
+ * [Pp]: p = process priority -20..20 (negative = high, positive = low)
+ * [Ii]: i = RLIMIT_NICE    max nice value (0..39 translates to 20..-19)
+ * [Oo]: o = RLIMIT_RTPRIO  max real time priority (linux/sched.h 0..MAX_RT_PRIO)
+ *
+ * Return value:
+ *             0 = okay, of course
+ *             LOGIN_ERROR_RLIMIT = error setting some RLIMIT
+ *             LOGIN_ERROR_LOGIN  = error - too many logins for this user
+ *
+ * buf - the limits string
+ * name - the username
+ */
+static int do_user_limits (const char *buf, const char *name)
+{
+       const char *pp;
+       int retval = 0;
+       bool reported = false;
+
+       pp = buf;
+
+       while ('\0' != *pp) {
+               switch (*pp++) {
+#ifdef RLIMIT_AS
+               case 'a':
+               case 'A':
+                       /* RLIMIT_AS - max address space (KB) */
+                       retval |= setrlimit_value (RLIMIT_AS, pp, 1024);
+                       break;
+#endif
+#ifdef RLIMIT_CPU
+               case 't':
+               case 'T':
+                       /* RLIMIT_CPU - max CPU time (MIN) */
+                       retval |= setrlimit_value (RLIMIT_CPU, pp, 60);
+                       break;
+#endif
+#ifdef RLIMIT_DATA
+               case 'd':
+               case 'D':
+                       /* RLIMIT_DATA - max data size (KB) */
+                       retval |= setrlimit_value (RLIMIT_DATA, pp, 1024);
+                       break;
+#endif
+#ifdef RLIMIT_FSIZE
+               case 'f':
+               case 'F':
+                       /* RLIMIT_FSIZE - Maximum filesize (KB) */
+                       retval |= setrlimit_value (RLIMIT_FSIZE, pp, 1024);
+                       break;
+#endif
+#ifdef RLIMIT_NPROC
+               case 'u':
+               case 'U':
+                       /* RLIMIT_NPROC - max number of processes */
+                       retval |= setrlimit_value (RLIMIT_NPROC, pp, 1);
+                       break;
+#endif
+#ifdef RLIMIT_CORE
+               case 'c':
+               case 'C':
+                       /* RLIMIT_CORE - max core file size (KB) */
+                       retval |= setrlimit_value (RLIMIT_CORE, pp, 1024);
+                       break;
+#endif
+#ifdef RLIMIT_MEMLOCK
+               case 'm':
+               case 'M':
+                       /* RLIMIT_MEMLOCK - max locked-in-memory address space (KB) */
+                       retval |= setrlimit_value (RLIMIT_MEMLOCK, pp, 1024);
+                       break;
+#endif
+#ifdef RLIMIT_NOFILE
+               case 'n':
+               case 'N':
+                       /* RLIMIT_NOFILE - max number of open files */
+                       retval |= setrlimit_value (RLIMIT_NOFILE, pp, 1);
+                       break;
+#endif
+#ifdef RLIMIT_RSS
+               case 'r':
+               case 'R':
+                       /* RLIMIT_RSS - max resident set size (KB) */
+                       retval |= setrlimit_value (RLIMIT_RSS, pp, 1024);
+                       break;
+#endif
+#ifdef RLIMIT_STACK
+               case 's':
+               case 'S':
+                       /* RLIMIT_STACK - max stack size (KB) */
+                       retval |= setrlimit_value (RLIMIT_STACK, pp, 1024);
+                       break;
+#endif
+#ifdef RLIMIT_NICE
+               case 'i':
+               case 'I':
+                       /* RLIMIT_NICE - max scheduling priority (0..39) */
+                       retval |= setrlimit_value (RLIMIT_NICE, pp, 1);
+                       break;
+#endif
+#ifdef RLIMIT_RTPRIO
+               case 'o':
+               case 'O':
+                       /* RLIMIT_RTPRIO - max real time priority (0..MAX_RT_PRIO) */
+                       retval |= setrlimit_value (RLIMIT_RTPRIO, pp, 1);
+                       break;
+#endif
+               case 'k':
+               case 'K':
+                       retval |= set_umask (pp);
+                       break;
+               case 'l':
+               case 'L':
+                       /* LIMIT the number of concurrent logins */
+                       retval |= check_logins (name, pp);
+                       break;
+               case 'p':
+               case 'P':
+                       retval |= set_prio (pp);
+                       break;
+               default:
+                       /* Only report invalid strings once */
+                       if (!reported) {
+                               SYSLOG ((LOG_WARN,
+                                        "Invalid limit string: '%s'",
+                                        pp-1));
+                               reported = true;
+                               retval |= LOGIN_ERROR_RLIMIT;
+                       }
+               }
+       }
+       return retval;
+}
+
+static int setup_user_limits (const char *uname)
+{
+       /* TODO: allow and use @group syntax --cristiang */
+       FILE *fil;
+       char buf[1024];
+       char name[1024];
+       char limits[1024];
+       char deflimits[1024];
+       char tempbuf[1024];
+
+       /* init things */
+       memzero (buf, sizeof (buf));
+       memzero (name, sizeof (name));
+       memzero (limits, sizeof (limits));
+       memzero (deflimits, sizeof (deflimits));
+       memzero (tempbuf, sizeof (tempbuf));
+
+       /* start the checks */
+       fil = fopen (LIMITS_FILE, "r");
+       if (fil == NULL) {
+               return 0;
+       }
+       /* The limits file have the following format:
+        * - '#' (comment) chars only as first chars on a line;
+        * - username must start on first column
+        * A better (smarter) checking should be done --cristiang */
+       while (fgets (buf, 1024, fil) != NULL) {
+               if (('#' == buf[0]) || ('\n' == buf[0])) {
+                       continue;
+               }
+               memzero (tempbuf, sizeof (tempbuf));
+               /* a valid line should have a username, then spaces,
+                * then limits
+                * we allow the format:
+                * username    L2  D2048  R4096
+                * where spaces={' ',\t}. Also, we reject invalid limits.
+                * Imposing a limit should be done with care, so a wrong
+                * entry means no care anyway :-). A '-' as a limits
+                * strings means no limits --cristiang */
+               if (sscanf (buf, "%s%[ACDFMNRSTULPIOacdfmnrstulpio0-9 \t-]",
+                           name, tempbuf) == 2) {
+                       if (strcmp (name, uname) == 0) {
+                               strcpy (limits, tempbuf);
+                               break;
+                       } else if (strcmp (name, "*") == 0) {
+                               strcpy (deflimits, tempbuf);
+                       }
+               }
+       }
+       (void) fclose (fil);
+       if (limits[0] == '\0') {
+               /* no user specific limits */
+               if (deflimits[0] == '\0') {     /* no default limits */
+                       return 0;
+               }
+               strcpy (limits, deflimits);     /* use the default limits */
+       }
+       return do_user_limits (limits, uname);
+}
+#endif                         /* LIMITS */
+
+
+static void setup_usergroups (const struct passwd *info)
+{
+       const struct group *grp;
+       mode_t tmpmask;
+
+/*
+ *     if not root, and UID == GID, and username is the same as primary
+ *     group name, set umask group bits to be the same as owner bits
+ *     (examples: 022 -> 002, 077 -> 007).
+ */
+       if ((0 != info->pw_uid) && (info->pw_uid == info->pw_gid)) {
+               /* local, no need for xgetgrgid */
+               grp = getgrgid (info->pw_gid);
+               if (   (NULL != grp)
+                   && (strcmp (info->pw_name, grp->gr_name) == 0)) {
+                       tmpmask = umask (0777);
+                       tmpmask = (tmpmask & ~070) | ((tmpmask >> 3) & 070);
+                       (void) umask (tmpmask);
+               }
+       }
+}
+
+/*
+ *     set the process nice, ulimit, and umask from the password file entry
+ */
+
+void setup_limits (const struct passwd *info)
+{
+       char *cp;
+
+       if (getdef_bool ("USERGROUPS_ENAB")) {
+               setup_usergroups (info);
+       }
+
+       /*
+        * See if the GECOS field contains values for NICE, UMASK or ULIMIT.
+        * If this feature is enabled in /etc/login.defs, we make those
+        * values the defaults for this login session.
+        */
+
+       if (getdef_bool ("QUOTAS_ENAB")) {
+#ifdef LIMITS
+               if (info->pw_uid != 0) {
+                       if (setup_user_limits (info->pw_name) &
+                           LOGIN_ERROR_LOGIN) {
+                               (void) fputs (_("Too many logins.\n"), stderr);
+                               (void) sleep (2); /* XXX: Should be FAIL_DELAY */
+                               exit (EXIT_FAILURE);
+                       }
+               }
+#endif
+               for (cp = info->pw_gecos; cp != NULL; cp = strchr (cp, ',')) {
+                       if (',' == *cp) {
+                               cp++;
+                       }
+
+                       if (strncmp (cp, "pri=", 4) == 0) {
+                               long int inc;
+                               if (   (getlong (cp + 4, &inc) == 1)
+                                   && (inc >= -20) && (inc <= 20)) {
+                                       errno = 0;
+                                       if (   (nice ((int) inc) != -1)
+                                           || (0 != errno)) {
+                                               continue;
+                                       }
+                               }
+
+                               /* Failed to parse or failed to nice() */
+                               SYSLOG ((LOG_WARN,
+                                        "Can't set the nice value for user %s",
+                                        info->pw_name));
+
+                               continue;
+                       }
+                       if (strncmp (cp, "ulimit=", 7) == 0) {
+                               long int blocks;
+                               if (   (getlong (cp + 7, &blocks) == 0)
+                                   || (blocks != (int) blocks)
+                                   || (set_filesize_limit ((int) blocks) != 0)) {
+                                       SYSLOG ((LOG_WARN,
+                                                "Can't set the ulimit for user %s",
+                                                info->pw_name));
+                               }
+                               continue;
+                       }
+                       if (strncmp (cp, "umask=", 6) == 0) {
+                               unsigned long int mask;
+                               if (   (getulong (cp + 6, &mask) == 0)
+                                   || (mask != (mode_t) mask)) {
+                                       SYSLOG ((LOG_WARN,
+                                                "Can't set umask value for user %s",
+                                                info->pw_name));
+                               } else {
+                                       (void) umask ((mode_t) mask);
+                               }
+
+                               continue;
+                       }
+               }
+       }
+}
+
+#else                          /* !USE_PAM */
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif                         /* !USE_PAM */
+
diff --git a/libmisc/list.c b/libmisc/list.c
new file mode 100644 (file)
index 0000000..2e81794
--- /dev/null
@@ -0,0 +1,259 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: list.c 2763 2009-04-23 09:57:03Z nekral-guest $"
+
+#include <assert.h>
+#include "prototypes.h"
+#include "defines.h"
+/*
+ * add_list - add a member to a list of group members
+ *
+ *     the array of member names is searched for the new member
+ *     name, and if not present it is added to a freshly allocated
+ *     list of users.
+ */
+/*@only@*/ /*@out@*/char **add_list (/*@returned@*/ /*@only@*/char **list, const char *member)
+{
+       int i;
+       char **tmp;
+
+       assert (NULL != member);
+       assert (NULL != list);
+
+       /*
+        * Scan the list for the new name.  Return the original list
+        * pointer if it is present.
+        */
+
+       for (i = 0; list[i] != (char *) 0; i++) {
+               if (strcmp (list[i], member) == 0) {
+                       return list;
+               }
+       }
+
+       /*
+        * Allocate a new list pointer large enough to hold all the
+        * old entries, and the new entries as well.
+        */
+
+       tmp = (char **) xmalloc ((i + 2) * sizeof member);
+
+       /*
+        * Copy the original list to the new list, then append the
+        * new member and NULL terminate the result.  This new list
+        * is returned to the invoker.
+        */
+
+       for (i = 0; list[i] != (char *) 0; i++) {
+               tmp[i] = list[i];
+       }
+
+       tmp[i] = xstrdup (member);
+       tmp[i+1] = (char *) 0;
+
+       return tmp;
+}
+
+/*
+ * del_list - delete a member from a list of group members
+ *
+ *     the array of member names is searched for the old member
+ *     name, and if present it is deleted from a freshly allocated
+ *     list of users.
+ */
+
+/*@only@*/ /*@out@*/char **del_list (/*@returned@*/ /*@only@*/char **list, const char *member)
+{
+       int i, j;
+       char **tmp;
+
+       assert (NULL != member);
+       assert (NULL != list);
+
+       /*
+        * Scan the list for the old name.  Return the original list
+        * pointer if it is not present.
+        */
+
+       for (i = j = 0; list[i] != (char *) 0; i++) {
+               if (strcmp (list[i], member) != 0) {
+                       j++;
+               }
+       }
+
+       if (j == i) {
+               return list;
+       }
+
+       /*
+        * Allocate a new list pointer large enough to hold all the
+        * old entries.
+        */
+
+       tmp = (char **) xmalloc ((j + 1) * sizeof member);
+
+       /*
+        * Copy the original list except the deleted members to the
+        * new list, then NULL terminate the result.  This new list
+        * is returned to the invoker.
+        */
+
+       for (i = j = 0; list[i] != (char *) 0; i++) {
+               if (strcmp (list[i], member) != 0) {
+                       tmp[j] = list[i];
+                       j++;
+               }
+       }
+
+       tmp[j] = (char *) 0;
+
+       return tmp;
+}
+
+/*@only@*/ /*@out@*/char **dup_list (char *const *list)
+{
+       int i;
+       char **tmp;
+
+       assert (NULL != list);
+
+       for (i = 0; NULL != list[i]; i++);
+
+       tmp = (char **) xmalloc ((i + 1) * sizeof (char *));
+
+       i = 0;
+       while (NULL != *list) {
+               tmp[i] = xstrdup (*list);
+               i++;
+               list++;
+       }
+
+       tmp[i] = (char *) 0;
+       return tmp;
+}
+
+bool is_on_list (char *const *list, const char *member)
+{
+       assert (NULL != member);
+       assert (NULL != list);
+
+       while (NULL != *list) {
+               if (strcmp (*list, member) == 0) {
+                       return true;
+               }
+               list++;
+       }
+
+       return false;
+}
+
+/*
+ * comma_to_list - convert comma-separated list to (char *) array
+ */
+
+/*@only@*/char **comma_to_list (const char *comma)
+{
+       char *members;
+       char **array;
+       int i;
+       const char *cp;
+       char *cp2;
+
+       assert (NULL != comma);
+
+       /*
+        * Make a copy since we are going to be modifying the list
+        */
+
+       members = xstrdup (comma);
+
+       /*
+        * Count the number of commas in the list
+        */
+
+       for (cp = members, i = 0;; i++) {
+               cp2 = strchr (cp, ',');
+               if (NULL != cp2) {
+                       cp = cp2 + 1;
+               } else {
+                       break;
+               }
+       }
+
+       /*
+        * Add 2 - one for the ending NULL, the other for the last item
+        */
+
+       i += 2;
+
+       /*
+        * Allocate the array we're going to store the pointers into.
+        */
+
+       array = (char **) xmalloc (sizeof (char *) * i);
+
+       /*
+        * Empty list is special - 0 members, not 1 empty member.  --marekm
+        */
+
+       if ('\0' == *members) {
+               *array = (char *) 0;
+               return array;
+       }
+
+       /*
+        * Now go walk that list all over again, this time building the
+        * array of pointers.
+        */
+
+       for (cp = members, i = 0;; i++) {
+               array[i] = cp;
+               cp2 = strchr (cp, ',');
+               if (NULL != cp2) {
+                       *cp2 = '\0';
+                       cp2++;
+                       cp = cp2;
+               } else {
+                       array[i + 1] = (char *) 0;
+                       break;
+               }
+       }
+
+       /*
+        * Return the new array of pointers
+        */
+
+       return array;
+}
+
diff --git a/libmisc/log.c b/libmisc/log.c
new file mode 100644 (file)
index 0000000..92a0160
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: log.c 2820 2009-04-27 20:15:09Z nekral-guest $"
+
+#include <sys/types.h>
+#include <pwd.h>
+#include <fcntl.h>
+#include <time.h>
+#include "defines.h"
+#include <lastlog.h>
+#include "prototypes.h"
+
+/* 
+ * dolastlog - create lastlog entry
+ *
+ *     A "last login" entry is created for the user being logged in.  The
+ *     UID is extracted from the global (struct passwd) entry and the
+ *     TTY information is gotten from the (struct utmp).
+ */
+void dolastlog (
+       struct lastlog *ll,
+       const struct passwd *pw,
+       /*@unique@*/const char *line,
+       /*@unique@*/const char *host)
+{
+       int fd;
+       off_t offset;
+       struct lastlog newlog;
+       time_t ll_time;
+
+       /*
+        * If the file does not exist, don't create it.
+        */
+
+       fd = open (LASTLOG_FILE, O_RDWR);
+       if (-1 == fd) {
+               return;
+       }
+
+       /*
+        * The file is indexed by UID number.  Seek to the record
+        * for this UID.  Negative UID's will create problems, but ...
+        */
+
+       offset = (off_t) pw->pw_uid * sizeof newlog;
+
+       if (lseek (fd, offset, SEEK_SET) != offset) {
+               SYSLOG ((LOG_WARN,
+                        "Can't read last lastlog entry for UID %lu in %s. Entry not updated.",
+                        (unsigned long) pw->pw_uid, LASTLOG_FILE));
+               (void) close (fd);
+               return;
+       }
+
+       /*
+        * Read the old entry so we can tell the user when they last
+        * logged in.  Then construct the new entry and write it out
+        * the way we read the old one in.
+        */
+
+       if (read (fd, (void *) &newlog, sizeof newlog) != (ssize_t) sizeof newlog) {
+               memzero (&newlog, sizeof newlog);
+       }
+       if (NULL != ll) {
+               *ll = newlog;
+       }
+
+       ll_time = newlog.ll_time;
+       (void) time (&ll_time);
+       newlog.ll_time = ll_time;
+       strncpy (newlog.ll_line, line, sizeof newlog.ll_line);
+#if HAVE_LL_HOST
+       strncpy (newlog.ll_host, host, sizeof newlog.ll_host);
+#endif
+       if (   (lseek (fd, offset, SEEK_SET) != offset)
+           || (write (fd, (const void *) &newlog, sizeof newlog) != (ssize_t) sizeof newlog)
+           || (close (fd) != 0)) {
+               SYSLOG ((LOG_WARN,
+                        "Can't write lastlog entry for UID %lu in %s.",
+                        (unsigned long) pw->pw_uid, LASTLOG_FILE));
+               (void) close (fd);
+       }
+}
+
diff --git a/libmisc/loginprompt.c b/libmisc/loginprompt.c
new file mode 100644 (file)
index 0000000..89eed4e
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+ * Copyright (c) 1989 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: loginprompt.c 2787 2009-04-24 22:46:06Z nekral-guest $"
+
+#include <assert.h>
+#include <stdio.h>
+#include <signal.h>
+#include <ctype.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+
+static void login_exit (unused int sig)
+{
+       exit (EXIT_FAILURE);
+}
+
+/*
+ * login_prompt - prompt the user for their login name
+ *
+ * login_prompt() displays the standard login prompt.  If ISSUE_FILE
+ * is set in login.defs, this file is displayed before the prompt.
+ */
+
+void login_prompt (const char *prompt, char *name, int namesize)
+{
+       char buf[1024];
+
+#define MAX_ENV 32
+       char *envp[MAX_ENV];
+       int envc;
+       char *cp;
+       int i;
+       FILE *fp;
+
+       RETSIGTYPE (*sigquit) (int);
+#ifdef SIGTSTP
+       RETSIGTYPE (*sigtstp) (int);
+#endif
+
+       /*
+        * There is a small chance that a QUIT character will be part of
+        * some random noise during a prompt.  Deal with this by exiting
+        * instead of core dumping.  If SIGTSTP is defined, do the same
+        * thing for that signal.
+        */
+
+       sigquit = signal (SIGQUIT, login_exit);
+#ifdef SIGTSTP
+       sigtstp = signal (SIGTSTP, login_exit);
+#endif
+
+       /*
+        * See if the user has configured the issue file to
+        * be displayed and display it before the prompt.
+        */
+
+       if (NULL != prompt) {
+               cp = getdef_str ("ISSUE_FILE");
+               if (NULL != cp) {
+                       fp = fopen (cp, "r");
+                       if (NULL != fp) {
+                               while ((i = getc (fp)) != EOF) {
+                                       (void) putc (i, stdout);
+                               }
+
+                               (void) fclose (fp);
+                       }
+               }
+               gethostname (buf, sizeof buf);
+               printf (prompt, buf);
+               (void) fflush (stdout);
+       }
+
+       /* 
+        * Read the user's response.  The trailing newline will be
+        * removed.
+        */
+
+       memzero (buf, sizeof buf);
+       if (fgets (buf, (int) sizeof buf, stdin) != buf) {
+               exit (EXIT_FAILURE);
+       }
+
+       cp = strchr (buf, '\n');
+       if (NULL == cp) {
+               exit (EXIT_FAILURE);
+       }
+       *cp = '\0';             /* remove \n [ must be there ] */
+
+       /*
+        * Skip leading whitespace.  This makes "  username" work right.
+        * Then copy the rest (up to the end or the first "non-graphic"
+        * character into the username.
+        */
+
+       for (cp = buf; *cp == ' ' || *cp == '\t'; cp++);
+
+       for (i = 0; i < namesize - 1 && isgraph (*cp); name[i++] = *cp++);
+       while (isgraph (*cp)) {
+               cp++;
+       }
+
+       if ('\0' != *cp) {
+               cp++;
+       }
+
+       name[i] = '\0';
+
+       /*
+        * This is a disaster, at best.  The user may have entered extra
+        * environmental variables at the prompt.  There are several ways
+        * to do this, and I just take the easy way out.
+        */
+
+       if ('\0' != *cp) {      /* process new variables */
+               char *nvar;
+               int count = 1;
+
+               for (envc = 0; envc < MAX_ENV; envc++) {
+                       nvar = strtok ((0 != envc) ? (char *) 0 : cp, " \t,");
+                       if (NULL == nvar) {
+                               break;
+                       }
+                       if (strchr (nvar, '=') != NULL) {
+                               envp[envc] = nvar;
+                       } else {
+                               size_t len = strlen (nvar) + 32;
+                               int wlen;
+                               envp[envc] = xmalloc (len);
+                               wlen = snprintf (envp[envc], len, "L%d=%s", count++, nvar);
+                               assert (wlen == (int) len -1);
+                       }
+               }
+               set_env (envc, envp);
+       }
+
+       /*
+        * Set the SIGQUIT handler back to its original value
+        */
+
+       (void) signal (SIGQUIT, sigquit);
+#ifdef SIGTSTP
+       (void) signal (SIGTSTP, sigtstp);
+#endif
+}
+
diff --git a/libmisc/mail.c b/libmisc/mail.c
new file mode 100644 (file)
index 0000000..e5de320
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 1989 - 1991, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <assert.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "getdef.h"
+
+#ident "$Id: mail.c 2819 2009-04-27 20:09:18Z nekral-guest $"
+
+
+void mailcheck (void)
+{
+       struct stat statbuf;
+       char *mailbox;
+
+       if (!getdef_bool ("MAIL_CHECK_ENAB")) {
+               return;
+       }
+
+       /*
+        * Check incoming mail in Maildir format - J.
+        */
+       mailbox = getenv ("MAILDIR");
+       if (NULL != mailbox) {
+               char *newmail;
+               size_t len = strlen (mailbox) + 5;
+               int wlen;
+
+               newmail = xmalloc (len);
+               wlen = snprintf (newmail, len, "%s/new", mailbox);
+               assert (wlen == (int) len - 1);
+
+               if (stat (newmail, &statbuf) != -1 && statbuf.st_size != 0) {
+                       if (statbuf.st_mtime > statbuf.st_atime) {
+                               free (newmail);
+                               (void) puts (_("You have new mail."));
+                               return;
+                       }
+               }
+               free (newmail);
+       }
+
+       mailbox = getenv ("MAIL");
+       if (NULL == mailbox) {
+               return;
+       }
+
+       if (   (stat (mailbox, &statbuf) == -1)
+           || (statbuf.st_size == 0)) {
+               (void) puts (_("No mail."));
+       } else if (statbuf.st_atime > statbuf.st_mtime) {
+               (void) puts (_("You have mail."));
+       } else {
+               (void) puts (_("You have new mail."));
+       }
+}
+
diff --git a/libmisc/motd.c b/libmisc/motd.c
new file mode 100644 (file)
index 0000000..53566e5
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 1989 - 1991, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <config.h>
+
+#ident "$Id: motd.c 1980 2008-04-27 00:40:09Z nekral-guest $"
+
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+/*
+ * motd -- output the /etc/motd file
+ *
+ * motd() determines the name of a login announcement file and outputs
+ * it to the user's terminal at login time.  The MOTD_FILE configuration
+ * option is a colon-delimited list of filenames.
+ */
+void motd (void)
+{
+       FILE *fp;
+       char motdlist[BUFSIZ], *motdfile, *mb;
+       register int c;
+
+       if ((mb = getdef_str ("MOTD_FILE")) == NULL)
+               return;
+
+       strncpy (motdlist, mb, sizeof (motdlist));
+       motdlist[sizeof (motdlist) - 1] = '\0';
+
+       for (mb = motdlist; (motdfile = strtok (mb, ":")) != NULL; mb = NULL) {
+               if ((fp = fopen (motdfile, "r")) != NULL) {
+                       while ((c = getc (fp)) != EOF)
+                               putchar (c);
+                       fclose (fp);
+               }
+       }
+       fflush (stdout);
+}
diff --git a/libmisc/myname.c b/libmisc/myname.c
new file mode 100644 (file)
index 0000000..092e5c6
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * myname.c - determine the current username and get the passwd entry
+ *
+ */
+
+#include <config.h>
+
+#ident "$Id: myname.c 2813 2009-04-26 17:10:49Z nekral-guest $"
+
+#include "defines.h"
+#include <pwd.h>
+#include "prototypes.h"
+/*@null@*/ /*@only@*/struct passwd *get_my_pwent (void)
+{
+       struct passwd *pw;
+       const char *cp = getlogin ();
+       uid_t ruid = getuid ();
+
+       /*
+        * Try getlogin() first - if it fails or returns a non-existent
+        * username, or a username which doesn't match the real UID, fall
+        * back to getpwuid(getuid()).  This should work reasonably with
+        * usernames longer than the utmp limit (8 characters), as well as
+        * shared UIDs - but not both at the same time...
+        *
+        * XXX - when running from su, will return the current user (not
+        * the original user, like getlogin() does).  Does this matter?
+        */
+       if ((NULL != cp) && ('\0' != *cp)) {
+               pw = xgetpwnam (cp);
+               if ((NULL != pw) && (pw->pw_uid == ruid)) {
+                       return pw;
+               }
+       }
+
+       return xgetpwuid (ruid);
+}
+
diff --git a/libmisc/obscure.c b/libmisc/obscure.c
new file mode 100644 (file)
index 0000000..cc0d896
--- /dev/null
@@ -0,0 +1,320 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ifndef USE_PAM
+
+#ident "$Id: obscure.c 2791 2009-04-24 23:04:27Z nekral-guest $"
+
+
+/*
+ * This version of obscure.c contains modifications to support "cracklib"
+ * by Alec Muffet (alec.muffett@uk.sun.com).  You must obtain the Cracklib
+ * library source code for this function to operate.
+ */
+#include <ctype.h>
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+/*
+ * can't be a palindrome - like `R A D A R' or `M A D A M'
+ */
+static bool palindrome (unused const char *old, const char *new)
+{
+       size_t i, j;
+
+       i = strlen (new);
+
+       for (j = 0; j < i; j++) {
+               if (new[i - j - 1] != new[j]) {
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+/*
+ * more than half of the characters are different ones.
+ */
+
+static bool similar (const char *old, const char *new)
+{
+       int i, j;
+
+       /*
+        * XXX - sometimes this fails when changing from a simple password
+        * to a really long one (MD5).  For now, I just return success if
+        * the new password is long enough.  Please feel free to suggest
+        * something better...  --marekm
+        */
+       if (strlen (new) >= 8) {
+               return false;
+       }
+
+       for (i = j = 0; ('\0' != new[i]) && ('\0' != old[i]); i++) {
+               if (strchr (new, old[i]) != NULL) {
+                       j++;
+               }
+       }
+
+       if (i >= j * 2) {
+               return false;
+       }
+
+       return true;
+}
+
+/*
+ * a nice mix of characters.
+ */
+
+static int simple (unused const char *old, const char *new)
+{
+       bool digits = false;
+       bool uppers = false;
+       bool lowers = false;
+       bool others = false;
+       int size;
+       int i;
+
+       for (i = 0; '\0' != new[i]; i++) {
+               if (isdigit (new[i])) {
+                       digits = true;
+               } else if (isupper (new[i])) {
+                       uppers = true;
+               } else if (islower (new[i])) {
+                       lowers = true;
+               } else {
+                       others = true;
+               }
+       }
+
+       /*
+        * The scam is this - a password of only one character type
+        * must be 8 letters long.  Two types, 7, and so on.
+        */
+
+       size = 9;
+       if (digits) {
+               size--;
+       }
+       if (uppers) {
+               size--;
+       }
+       if (lowers) {
+               size--;
+       }
+       if (others) {
+               size--;
+       }
+
+       if (size <= i) {
+               return false;
+       }
+
+       return true;
+}
+
+static char *str_lower (char *string)
+{
+       char *cp;
+
+       for (cp = string; '\0' != *cp; cp++) {
+               *cp = tolower (*cp);
+       }
+       return string;
+}
+
+static const char *password_check (const char *old, const char *new,
+                                  const struct passwd *pwdp)
+{
+       const char *msg = NULL;
+       char *oldmono, *newmono, *wrapped;
+
+#ifdef HAVE_LIBCRACK
+       char *dictpath;
+
+#ifdef HAVE_LIBCRACK_PW
+       char *FascistCheckPw ();
+#else
+       char *FascistCheck ();
+#endif
+#endif
+
+       if (strcmp (new, old) == 0) {
+               return _("no change");
+       }
+
+       newmono = str_lower (xstrdup (new));
+       oldmono = str_lower (xstrdup (old));
+       wrapped = xmalloc (strlen (oldmono) * 2 + 1);
+       strcpy (wrapped, oldmono);
+       strcat (wrapped, oldmono);
+
+       if (palindrome (oldmono, newmono)) {
+               msg = _("a palindrome");
+       } else if (strcmp (oldmono, newmono) == 0) {
+               msg = _("case changes only");
+       } else if (similar (oldmono, newmono)) {
+               msg = _("too similar");
+       } else if (simple (old, new)) {
+               msg = _("too simple");
+       } else if (strstr (wrapped, newmono) != NULL) {
+               msg = _("rotated");
+       } else {
+#ifdef HAVE_LIBCRACK
+               /*
+                * Invoke Alec Muffett's cracklib routines.
+                */
+
+               dictpath = getdef_str ("CRACKLIB_DICTPATH");
+               if (NULL != dictpath) {
+#ifdef HAVE_LIBCRACK_PW
+                       msg = FascistCheckPw (new, dictpath, pwdp);
+#else
+                       msg = FascistCheck (new, dictpath);
+#endif
+               }
+#endif
+       }
+       strzero (newmono);
+       strzero (oldmono);
+       strzero (wrapped);
+       free (newmono);
+       free (oldmono);
+       free (wrapped);
+
+       return msg;
+}
+
+/*ARGSUSED*/
+static const char *obscure_msg (const char *old, const char *new,
+                                   const struct passwd *pwdp)
+{
+       size_t maxlen, oldlen, newlen;
+       char *new1, *old1;
+       const char *msg;
+       char *result;
+
+       oldlen = strlen (old);
+       newlen = strlen (new);
+
+       if (newlen < (size_t) getdef_num ("PASS_MIN_LEN", 0)) {
+               return _("too short");
+       }
+
+       /*
+        * Remaining checks are optional.
+        */
+       if (!getdef_bool ("OBSCURE_CHECKS_ENAB")) {
+               return NULL;
+       }
+
+       msg = password_check (old, new, pwdp);
+       if (NULL != msg) {
+               return msg;
+       }
+
+       result = getdef_str ("ENCRYPT_METHOD");
+       if (NULL == result) {
+       /* The traditional crypt() truncates passwords to 8 chars.  It is
+          possible to circumvent the above checks by choosing an easy
+          8-char password and adding some random characters to it...
+          Example: "password$%^&*123".  So check it again, this time
+          truncated to the maximum length.  Idea from npasswd.  --marekm */
+
+               if (getdef_bool ("MD5_CRYPT_ENAB")) {
+                       return NULL;
+               }
+
+       } else {
+
+               if (   (strcmp (result, "MD5")    == 0)
+#ifdef USE_SHA_CRYPT
+                   || (strcmp (result, "SHA256") == 0)
+                   || (strcmp (result, "SHA512") == 0)
+#endif
+                   ) {
+                       return NULL;
+               }
+
+       }
+       maxlen = (size_t) getdef_num ("PASS_MAX_LEN", 8);
+       if (   (oldlen <= maxlen)
+           && (newlen <= maxlen)) {
+               return NULL;
+       }
+
+       new1 = xstrdup (new);
+       old1 = xstrdup (old);
+       if (newlen > maxlen) {
+               new1[maxlen] = '\0';
+       }
+       if (oldlen > maxlen) {
+               old1[maxlen] = '\0';
+       }
+
+       msg = password_check (old1, new1, pwdp);
+
+       memzero (new1, newlen);
+       memzero (old1, oldlen);
+       free (new1);
+       free (old1);
+
+       return msg;
+}
+
+/*
+ * Obscure - see if password is obscure enough.
+ *
+ *     The programmer is encouraged to add as much complexity to this
+ *     routine as desired.  Included are some of my favorite ways to
+ *     check passwords.
+ */
+
+int obscure (const char *old, const char *new, const struct passwd *pwdp)
+{
+       const char *msg = obscure_msg (old, new, pwdp);
+
+       if (NULL != msg) {
+               printf (_("Bad password: %s.  "), msg);
+               return 0;
+       }
+       return 1;
+}
+
+#else                          /* !USE_PAM */
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif                         /* !USE_PAM */
diff --git a/libmisc/pam_pass.c b/libmisc/pam_pass.c
new file mode 100644 (file)
index 0000000..303a974
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 1997 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ifdef USE_PAM
+
+#ident "$Id: pam_pass.c 2870 2009-05-09 13:15:17Z nekral-guest $"
+
+
+/*
+ * Change the user's password using PAM.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include "defines.h"
+#include "pam_defs.h"
+#include "prototypes.h"
+
+void do_pam_passwd (const char *user, bool silent, bool change_expired)
+{
+       pam_handle_t *pamh = NULL;
+       int flags = 0, ret;
+
+       if (silent)
+               flags |= PAM_SILENT;
+       if (change_expired)
+               flags |= PAM_CHANGE_EXPIRED_AUTHTOK;
+
+       ret = pam_start ("passwd", user, &conv, &pamh);
+       if (ret != PAM_SUCCESS) {
+               fprintf (stderr,
+                        _("passwd: pam_start() failed, error %d\n"), ret);
+               exit (10);      /* XXX */
+       }
+
+       ret = pam_chauthtok (pamh, flags);
+       if (ret != PAM_SUCCESS) {
+               fprintf (stderr, _("passwd: %s\n"), pam_strerror (pamh, ret));
+               fputs (_("passwd: password unchanged\n"), stderr);
+               pam_end (pamh, ret);
+               exit (10);      /* XXX */
+       }
+
+       fputs (_("passwd: password updated successfully\n"), stderr);
+       (void) pam_end (pamh, PAM_SUCCESS);
+}
+#else                          /* !USE_PAM */
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif                         /* !USE_PAM */
diff --git a/libmisc/pam_pass_non_interractive.c b/libmisc/pam_pass_non_interractive.c
new file mode 100644 (file)
index 0000000..8bdb342
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c)        2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id:$"
+
+#ifdef USE_PAM
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <security/pam_appl.h>
+#include "prototypes.h"
+
+/*@null@*/ /*@only@*/static char *non_interactive_password = NULL;
+static int ni_conv (int num_msg,
+                    const struct pam_message **msg,
+                    struct pam_response **resp,
+                    unused void *appdata_ptr);
+static struct pam_conv non_interactive_pam_conv = {
+       ni_conv,
+       NULL
+};
+
+
+
+static int ni_conv (int num_msg,
+                    const struct pam_message **msg,
+                    struct pam_response **resp,
+                    unused void *appdata_ptr)
+{
+       struct pam_response *responses;
+       int count;
+
+       assert (NULL != non_interactive_password);
+
+       if (num_msg <= 0) {
+               return PAM_CONV_ERR;
+       }
+
+       responses = (struct pam_response *) calloc ((size_t) num_msg,
+                                                   sizeof (*responses));
+       if (NULL == responses) {
+               return PAM_CONV_ERR;
+       }
+
+       for (count=0; count < num_msg; count++) {
+               responses[count].resp_retcode = 0;
+
+               switch (msg[count]->msg_style) {
+               case PAM_PROMPT_ECHO_ON:
+                       fprintf (stderr,
+                                _("%s: PAM modules requesting echoing are not supported.\n"),
+                                Prog);
+                       goto failed_conversation;
+               case PAM_PROMPT_ECHO_OFF:
+                       responses[count].resp = strdup (non_interactive_password);
+                       if (NULL == responses[count].resp) {
+                               goto failed_conversation;
+                       }
+                       break;
+               case PAM_ERROR_MSG:
+                       if (   (NULL == msg[count]->msg)
+                           || (fprintf (stderr, "%s\n", msg[count]->msg) <0)) {
+                               goto failed_conversation;
+                       }
+                       responses[count].resp = NULL;
+                       break;
+               case PAM_TEXT_INFO:
+                       if (   (NULL == msg[count]->msg)
+                           || (fprintf (stdout, "%s\n", msg[count]->msg) <0)) {
+                               goto failed_conversation;
+                       }
+                       responses[count].resp = NULL;
+                       break;
+               default:
+                       (void) fprintf (stderr,
+                                       _("%s: conversation type %d not supported.\n"),
+                                       Prog, msg[count]->msg_style);
+                       goto failed_conversation;
+               }
+       }
+
+       *resp = responses;
+
+       return PAM_SUCCESS;
+
+failed_conversation:
+       for (count=0; count < num_msg; count++) {
+               if (NULL != responses[count].resp) {
+                       memset (responses[count].resp, 0,
+                               strlen (responses[count].resp));
+                       free (responses[count].resp);
+                       responses[count].resp = NULL;
+               }
+       }
+
+       free (responses);
+       *resp = NULL;
+
+       return PAM_CONV_ERR;
+}
+
+
+/*
+ * Change non interactively the user's password using PAM.
+ *
+ * Return 0 on success, 1 on failure.
+ */
+int do_pam_passwd_non_interractive (const char *pam_service,
+                                    const char *username,
+                                    const char* password)
+{
+       pam_handle_t *pamh = NULL;
+       int ret;
+
+       ret = pam_start (pam_service, username, &non_interactive_pam_conv, &pamh);
+       if (ret != PAM_SUCCESS) {
+               fprintf (stderr,
+                        _("%s: (user %s) pam_start failure %d\n"),
+                        Prog, username, ret);
+               return 1;
+       }
+
+       non_interactive_password = password;
+       ret = pam_chauthtok (pamh, 0);
+       if (ret != PAM_SUCCESS) {
+               fprintf (stderr,
+                        _("%s: (user %s) pam_chauthtok() failed, error:\n"
+                          "%s\n"),
+                        Prog, username, pam_strerror (pamh, ret));
+       }
+
+       (void) pam_end (pamh, PAM_SUCCESS);
+
+       return ((PAM_SUCCESS == ret) ? 0 : 1);
+}
+#else                          /* !USE_PAM */
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif                         /* !USE_PAM */
diff --git a/libmisc/pwd2spwd.c b/libmisc/pwd2spwd.c
new file mode 100644 (file)
index 0000000..dc4fbcf
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: pwd2spwd.c 2595 2009-04-05 22:29:42Z nekral-guest $"
+
+#ifndef USE_PAM
+
+#include <sys/types.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+extern time_t time (time_t *);
+
+/*
+ * pwd_to_spwd - create entries for new spwd structure
+ *
+ *     pwd_to_spwd() creates a new (struct spwd) containing the
+ *     information in the pointed-to (struct passwd).
+ */
+
+struct spwd *pwd_to_spwd (const struct passwd *pw)
+{
+       static struct spwd sp;
+
+       /*
+        * Nice, easy parts first.  The name and passwd map directly
+        * from the old password structure to the new one.
+        */
+       sp.sp_namp = pw->pw_name;
+       sp.sp_pwdp = pw->pw_passwd;
+
+       {
+               /*
+                * Defaults used if there is no pw_age information.
+                */
+               sp.sp_min = 0;
+               sp.sp_max = (10000L * DAY) / SCALE;
+               sp.sp_lstchg = (long) time ((time_t *) 0) / SCALE;
+               if (0 == sp.sp_lstchg) {
+                       /* Better disable aging than requiring a password
+                        * change */
+                       sp.sp_lstchg = -1;
+               }
+       }
+
+       /*
+        * These fields have no corresponding information in the password
+        * file.  They are set to uninitialized values.
+        */
+       sp.sp_warn = -1;
+       sp.sp_expire = -1;
+       sp.sp_inact = -1;
+       sp.sp_flag = SHADOW_SP_FLAG_UNSET;
+
+       return &sp;
+}
+#else                          /* USE_PAM */
+extern int errno;      /* warning: ANSI C forbids an empty source file */
+#endif                         /* !USE_PAM */
+
diff --git a/libmisc/pwd_init.c b/libmisc/pwd_init.c
new file mode 100644 (file)
index 0000000..cbc8cb4
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1997       , Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: pwd_init.c 1980 2008-04-27 00:40:09Z nekral-guest $"
+
+#include "defines.h"
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
+
+#include "prototypes.h"
+
+/*
+ * pwd_init - ignore signals, and set resource limits to safe
+ * values.  Call this before modifying password files, so that
+ * it is less likely to fail in the middle of operation.
+ */
+void pwd_init (void)
+{
+#ifdef HAVE_SYS_RESOURCE_H
+       struct rlimit rlim;
+
+#ifdef RLIMIT_CORE
+       rlim.rlim_cur = rlim.rlim_max = 0;
+       setrlimit (RLIMIT_CORE, &rlim);
+#endif
+       rlim.rlim_cur = rlim.rlim_max = RLIM_INFINITY;
+#ifdef RLIMIT_AS
+       setrlimit (RLIMIT_AS, &rlim);
+#endif
+#ifdef RLIMIT_CPU
+       setrlimit (RLIMIT_CPU, &rlim);
+#endif
+#ifdef RLIMIT_DATA
+       setrlimit (RLIMIT_DATA, &rlim);
+#endif
+#ifdef RLIMIT_FSIZE
+       setrlimit (RLIMIT_FSIZE, &rlim);
+#endif
+#ifdef RLIMIT_NOFILE
+       setrlimit (RLIMIT_NOFILE, &rlim);
+#endif
+#ifdef RLIMIT_RSS
+       setrlimit (RLIMIT_RSS, &rlim);
+#endif
+#ifdef RLIMIT_STACK
+       setrlimit (RLIMIT_STACK, &rlim);
+#endif
+#else                          /* !HAVE_SYS_RESOURCE_H */
+       set_filesize_limit (30000);
+       /* don't know how to set the other limits... */
+#endif                         /* !HAVE_SYS_RESOURCE_H */
+
+       signal (SIGALRM, SIG_IGN);
+       signal (SIGHUP, SIG_IGN);
+       signal (SIGINT, SIG_IGN);
+       signal (SIGPIPE, SIG_IGN);
+       signal (SIGQUIT, SIG_IGN);
+       signal (SIGTERM, SIG_IGN);
+#ifdef SIGTSTP
+       signal (SIGTSTP, SIG_IGN);
+#endif
+#ifdef SIGTTOU
+       signal (SIGTTOU, SIG_IGN);
+#endif
+
+       umask (077);
+}
diff --git a/libmisc/pwdcheck.c b/libmisc/pwdcheck.c
new file mode 100644 (file)
index 0000000..0131380
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2000 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: pwdcheck.c 2779 2009-04-23 20:17:02Z nekral-guest $"
+
+#ifndef USE_PAM
+
+#include <stdio.h>
+#include <shadow.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "pwauth.h"
+
+void passwd_check (const char *user, const char *passwd, unused const char *progname)
+{
+       struct spwd *sp;
+
+       sp = getspnam (user); /* !USE_PAM, no need for xgetspnam */
+       if (NULL != sp) {
+               passwd = sp->sp_pwdp;
+       }
+       if (pw_auth (passwd, user, PW_LOGIN, (char *) 0) != 0) {
+               SYSLOG ((LOG_WARN, "incorrect password for `%s'", user));
+               (void) sleep (1);
+               fprintf (stderr, _("Incorrect password for %s.\n"), user);
+               exit (EXIT_FAILURE);
+       }
+}
+#else                  /* USE_PAM */
+extern int errno;      /* warning: ANSI C forbids an empty source file */
+#endif                 /* USE_PAM */
diff --git a/libmisc/rlogin.c b/libmisc/rlogin.c
new file mode 100644 (file)
index 0000000..1364c9c
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ifdef RLOGIN
+
+#ident "$Id: rlogin.c 2849 2009-04-30 21:08:49Z nekral-guest $"
+
+#include "prototypes.h"
+#include "defines.h"
+#include <stdio.h>
+#include <pwd.h>
+#include <netdb.h>
+static struct {
+       int spd_name;
+       int spd_baud;
+} speed_table[] =
+{
+#ifdef B50
+       {
+       B50, 50},
+#endif
+#ifdef B75
+       {
+       B75, 75},
+#endif
+#ifdef B110
+       {
+       B110, 110},
+#endif
+#ifdef B134
+       {
+       B134, 134},
+#endif
+#ifdef B150
+       {
+       B150, 150},
+#endif
+#ifdef B200
+       {
+       B200, 200},
+#endif
+#ifdef B300
+       {
+       B300, 300},
+#endif
+#ifdef B600
+       {
+       B600, 600},
+#endif
+#ifdef B1200
+       {
+       B1200, 1200},
+#endif
+#ifdef B1800
+       {
+       B1800, 1800},
+#endif
+#ifdef B2400
+       {
+       B2400, 2400},
+#endif
+#ifdef B4800
+       {
+       B4800, 4800},
+#endif
+#ifdef B9600
+       {
+       B9600, 9600},
+#endif
+#ifdef B19200
+       {
+       B19200, 19200},
+#endif
+#ifdef B38400
+       {
+       B38400, 38400},
+#endif
+       {
+       -1, -1}
+};
+
+static void get_remote_string (char *buf, size_t size)
+{
+       for (;;) {
+               if (read (0, buf, 1) != 1) {
+                       exit (EXIT_FAILURE);
+               }
+               if ('\0' == *buf) {
+                       return;
+               }
+               --size;
+               if (size > 0) {
+                       ++buf;
+               }
+       }
+ /*NOTREACHED*/}
+
+int
+do_rlogin (const char *remote_host, char *name, size_t namelen, char *term,
+           size_t termlen)
+{
+       struct passwd *pwd;
+       char remote_name[32];
+       char *cp;
+       unsigned long remote_speed = 9600;
+       int speed_name = B9600;
+       int i;
+       TERMIO termio;
+
+       get_remote_string (remote_name, sizeof remote_name);
+       get_remote_string (name, namelen);
+       get_remote_string (term, termlen);
+
+       cp = strchr (term, '/');
+       if (NULL != cp) {
+               *cp = '\0';
+               cp++;
+
+               if (getulong (cp, &remote_speed) == 0) {
+                       remote_speed = 9600;
+               }
+       }
+       for (i = 0;
+            (   (speed_table[i].spd_baud != remote_speed)
+             && (speed_table[i].spd_name != -1));
+            i++);
+
+       if (-1 != speed_table[i].spd_name) {
+               speed_name = speed_table[i].spd_name;
+       }
+
+       /*
+        * Put the terminal in cooked mode with echo turned on.
+        */
+
+       GTTY (0, &termio);
+       termio.c_iflag |= ICRNL | IXON;
+       termio.c_oflag |= OPOST | ONLCR;
+       termio.c_lflag |= ICANON | ECHO | ECHOE;
+#ifdef CBAUD
+       termio.c_cflag = (termio.c_cflag & ~CBAUD) | speed_name;
+#else
+       termio.c_cflag = (termio.c_cflag) | speed_name;
+#endif
+       STTY (0, &termio);
+
+       pwd = getpwnam (name); /* local, no need for xgetpwnam */
+       if (NULL == pwd) {
+               return 0;
+       }
+
+       /*
+        * ruserok() returns 0 for success on modern systems, and 1 on
+        * older ones.  If you are having trouble with people logging
+        * in without giving a required password, THIS is the culprit -
+        * go fix the #define in config.h.
+        */
+
+#ifndef        RUSEROK
+       return 0;
+#else
+       return ruserok (remote_host, pwd->pw_uid == 0,
+                       remote_name, name) == RUSEROK;
+#endif
+}
+#endif                         /* RLOGIN */
+
diff --git a/libmisc/salt.c b/libmisc/salt.c
new file mode 100644 (file)
index 0000000..6058f85
--- /dev/null
@@ -0,0 +1,257 @@
+/*
+ * salt.c - generate a random salt string for crypt()
+ *
+ * Written by Marek Michalkiewicz <marekm@i17linuxb.ists.pwr.wroc.pl>,
+ * it is in the public domain.
+ *
+ * l64a was Written by J.T. Conklin <jtc@netbsd.org>. Public domain.
+ */
+
+#include <config.h>
+
+#ident "$Id: salt.c 2788 2009-04-24 22:49:20Z nekral-guest $"
+
+#include <sys/time.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+
+/* local function prototypes */
+static void seedRNG (void);
+static /*@observer@*/const char *gensalt (size_t salt_size);
+#ifdef USE_SHA_CRYPT
+static size_t SHA_salt_size (void);
+static /*@observer@*/const char *SHA_salt_rounds (/*@null@*/int *prefered_rounds);
+#endif /* USE_SHA_CRYPT */
+
+#ifndef HAVE_L64A
+static /*@observer@*/char *l64a(long value)
+{
+       static char buf[8];
+       char *s = buf;
+       int digit;
+       int i;
+
+       if (value < 0) {
+               errno = EINVAL;
+               return(NULL);
+       }
+
+       for (i = 0; value != 0 && i < 6; i++) {
+               digit = value & 0x3f;
+
+               if (digit < 2) {
+                       *s = digit + '.';
+               } else if (digit < 12) {
+                       *s = digit + '0' - 2;
+               } else if (digit < 38) {
+                       *s = digit + 'A' - 12;
+               } else {
+                       *s = digit + 'a' - 38;
+               }
+
+               value >>= 6;
+               s++;
+       }
+
+       *s = '\0';
+
+       return(buf);
+}
+#endif /* !HAVE_L64A */
+
+static void seedRNG (void)
+{
+       struct timeval tv;
+       static int seeded = 0;
+
+       if (0 == seeded) {
+               (void) gettimeofday (&tv, NULL);
+               srandom (tv.tv_sec ^ tv.tv_usec ^ getpid ());
+               seeded = 1;
+       }
+}
+
+/*
+ * Add the salt prefix.
+ */
+#define MAGNUM(array,ch)       (array)[0]=(array)[2]='$',(array)[1]=(ch),(array)[3]='\0'
+
+#ifdef USE_SHA_CRYPT
+/*
+ * Return the salt size.
+ * The size of the salt string is between 8 and 16 bytes for the SHA crypt
+ * methods.
+ */
+static size_t SHA_salt_size (void)
+{
+       double rand_size;
+       seedRNG ();
+       rand_size = (double) 9.0 * random () / RAND_MAX;
+       return (size_t) (8 + rand_size);
+}
+
+/* Default number of rounds if not explicitly specified.  */
+#define ROUNDS_DEFAULT 5000
+/* Minimum number of rounds.  */
+#define ROUNDS_MIN 1000
+/* Maximum number of rounds.  */
+#define ROUNDS_MAX 999999999
+
+/*
+ * Return a salt prefix specifying the rounds number for the SHA crypt methods.
+ */
+static /*@observer@*/const char *SHA_salt_rounds (/*@null@*/int *prefered_rounds)
+{
+       static char rounds_prefix[18];
+       long rounds;
+
+       if (NULL == prefered_rounds) {
+               long min_rounds = getdef_long ("SHA_CRYPT_MIN_ROUNDS", -1);
+               long max_rounds = getdef_long ("SHA_CRYPT_MAX_ROUNDS", -1);
+               double rand_rounds;
+
+               if ((-1 == min_rounds) && (-1 == max_rounds)) {
+                       return "";
+               }
+
+               if (-1 == min_rounds) {
+                       min_rounds = max_rounds;
+               }
+
+               if (-1 == max_rounds) {
+                       max_rounds = min_rounds;
+               }
+
+               if (min_rounds > max_rounds) {
+                       max_rounds = min_rounds;
+               }
+
+               seedRNG ();
+               rand_rounds = (double) (max_rounds-min_rounds+1.0) * random ();
+               rand_rounds /= RAND_MAX;
+               rounds = min_rounds + rand_rounds;
+       } else if (0 == *prefered_rounds) {
+               return "";
+       } else {
+               rounds = *prefered_rounds;
+       }
+
+       /* Sanity checks. The libc should also check this, but this
+        * protects against a rounds_prefix overflow. */
+       if (rounds < ROUNDS_MIN) {
+               rounds = ROUNDS_MIN;
+       }
+
+       if (rounds > ROUNDS_MAX) {
+               rounds = ROUNDS_MAX;
+       }
+
+       snprintf (rounds_prefix, 18, "rounds=%ld$", rounds);
+
+       /* Sanity checks. That should not be necessary. */
+       rounds_prefix[17] = '\0';
+       if ('$' != rounds_prefix[16]) {
+               rounds_prefix[17] = '$';
+       }
+
+       return rounds_prefix;
+}
+#endif /* USE_SHA_CRYPT */
+
+/*
+ *  Generate salt of size salt_size.
+ */
+#define MAX_SALT_SIZE 16
+#define MIN_SALT_SIZE 8
+
+static /*@observer@*/const char *gensalt (size_t salt_size)
+{
+       static char salt[32];
+
+       salt[0] = '\0';
+
+       assert (salt_size >= MIN_SALT_SIZE &&
+               salt_size <= MAX_SALT_SIZE);
+       seedRNG ();
+       strcat (salt, l64a (random()));
+       do {
+               strcat (salt, l64a (random()));
+       } while (strlen (salt) < salt_size);
+
+       salt[salt_size] = '\0';
+
+       return salt;
+}
+
+/*
+ * Generate 8 base64 ASCII characters of random salt.  If MD5_CRYPT_ENAB
+ * in /etc/login.defs is "yes", the salt string will be prefixed by "$1$"
+ * (magic) and pw_encrypt() will execute the MD5-based FreeBSD-compatible
+ * version of crypt() instead of the standard one.
+ * Other methods can be set with ENCRYPT_METHOD
+ *
+ * The method can be forced with the meth parameter.
+ * If NULL, the method will be defined according to the MD5_CRYPT_ENAB and
+ * ENCRYPT_METHOD login.defs variables.
+ *
+ * If meth is specified, an additional parameter can be provided.
+ *  * For the SHA256 and SHA512 method, this specifies the number of rounds
+ *    (if not NULL).
+ */
+/*@observer@*/const char *crypt_make_salt (/*@null@*/const char *meth, /*@null@*/void *arg)
+{
+       /* Max result size for the SHA methods:
+        *  +3          $5$
+        *  +17         rounds=999999999$
+        *  +16         salt
+        *  +1          \0
+        */
+       static char result[40];
+       size_t salt_len = 8;
+       const char *method;
+
+       result[0] = '\0';
+
+       if (NULL != meth)
+               method = meth;
+       else {
+               method = getdef_str ("ENCRYPT_METHOD");
+               if (NULL == method) {
+                       method = getdef_bool ("MD5_CRYPT_ENAB") ? "MD5" : "DES";
+               }
+       }
+
+       if (0 == strcmp (method, "MD5")) {
+               MAGNUM(result, '1');
+#ifdef USE_SHA_CRYPT
+       } else if (0 == strcmp (method, "SHA256")) {
+               MAGNUM(result, '5');
+               strcat(result, SHA_salt_rounds((int *)arg));
+               salt_len = SHA_salt_size();
+       } else if (0 == strcmp (method, "SHA512")) {
+               MAGNUM(result, '6');
+               strcat(result, SHA_salt_rounds((int *)arg));
+               salt_len = SHA_salt_size();
+#endif /* USE_SHA_CRYPT */
+       } else if (0 != strcmp (method, "DES")) {
+               fprintf (stderr,
+                        _("Invalid ENCRYPT_METHOD value: '%s'.\n"
+                          "Defaulting to DES.\n"),
+                        method);
+               result[0] = '\0';
+       }
+
+       /*
+        * Concatenate a pseudo random salt.
+        */
+       assert (sizeof (result) > strlen (result) + salt_len);
+       strncat (result, gensalt (salt_len),
+                sizeof (result) - strlen (result) - 1);
+
+       return result;
+}
+
diff --git a/libmisc/setugid.c b/libmisc/setugid.c
new file mode 100644 (file)
index 0000000..3218be6
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Separated from setup.c.  --marekm
+ */
+
+#include <config.h>
+
+#ident "$Id: setugid.c 2717 2009-04-20 11:43:36Z nekral-guest $"
+
+#include <stdio.h>
+#include <grp.h>
+#include <errno.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+#include "getdef.h"
+
+/*
+ * setup_groups - set the group credentials
+ *     set the group ID to the value from the password file entry
+ *     set the supplementary group IDs
+ *
+ * In case of PAM enabled configurations, this shall be called before
+ * pam_setcred.
+ *
+ * Returns 0 on success, or -1 on failure.
+ */
+int setup_groups (const struct passwd *info)
+{
+       /*
+        * Set the real group ID to the primary group ID in the password
+        * file.
+        */
+       if (setgid (info->pw_gid) == -1) {
+               int err = errno;
+               perror ("setgid");
+               SYSLOG ((LOG_ERR, "bad group ID `%d' for user `%s': %s\n",
+                        info->pw_gid, info->pw_name, strerror (err)));
+               closelog ();
+               return -1;
+       }
+#ifdef HAVE_INITGROUPS
+       /*
+        * For systems which support multiple concurrent groups, go get
+        * the group set from the /etc/group file.
+        */
+       if (initgroups (info->pw_name, info->pw_gid) == -1) {
+               int err = errno;
+               perror ("initgroups");
+               SYSLOG ((LOG_ERR, "initgroups failed for user `%s': %s\n",
+                        info->pw_name, strerror (err)));
+               closelog ();
+               return -1;
+       }
+#endif
+       return 0;
+}
+
+/*
+ * change_uid - Set the real UID
+ *
+ * Returns 0 on success, or -1 on failure.
+ */
+int change_uid (const struct passwd *info)
+{
+       /*
+        * Set the real UID to the UID value in the password file.
+        */
+       if (setuid (info->pw_uid) != 0) {
+               int err = errno;
+               perror ("setuid");
+               SYSLOG ((LOG_ERR, "bad user ID `%d' for user `%s': %s\n",
+                        (int) info->pw_uid, info->pw_name, strerror (err)));
+               closelog ();
+               return -1;
+       }
+       return 0;
+}
+
+/*
+ *     setup_uid_gid() performs the following steps -
+ *
+ *     set the group ID to the value from the password file entry
+ *     set the supplementary group IDs
+ *     optionally call specified function which may add more groups
+ *     set the user ID to the value from the password file entry
+ *
+ *     Returns 0 on success, or -1 on failure.
+ */
+
+#if defined (HAVE_INITGROUPS) && ! (defined USE_PAM)
+int setup_uid_gid (const struct passwd *info, bool is_console)
+#else
+int setup_uid_gid (const struct passwd *info)
+#endif
+{
+       if (setup_groups (info) < 0) {
+               return -1;
+       }
+
+#if defined (HAVE_INITGROUPS) && ! defined (USE_PAM)
+       if (is_console) {
+               char *cp = getdef_str ("CONSOLE_GROUPS");
+
+               if ((NULL != cp) && (add_groups (cp) != 0)) {
+                       perror ("Warning: add_groups");
+               }
+       }
+#endif                         /* HAVE_INITGROUPS && !USE_PAM*/
+
+       if (change_uid (info) < 0) {
+               return -1;
+       }
+
+       return 0;
+}
+
diff --git a/libmisc/setupenv.c b/libmisc/setupenv.c
new file mode 100644 (file)
index 0000000..3985fc2
--- /dev/null
@@ -0,0 +1,310 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Separated from setup.c.  --marekm
+ */
+
+#include <config.h>
+
+#ident "$Id: setupenv.c 3034 2009-07-22 13:30:06Z nekral-guest $"
+
+#include <assert.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <ctype.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+#include "getdef.h"
+
+#ifndef USE_PAM
+static void
+addenv_path (const char *varname, const char *dirname, const char *filename)
+{
+       char *buf;
+       size_t len = strlen (dirname) + strlen (filename) + 2;
+       int wlen;
+
+       buf = xmalloc (len);
+       wlen = snprintf (buf, len, "%s/%s", dirname, filename);
+       assert (wlen == (int) len - 1);
+
+       addenv (varname, buf);
+       free (buf);
+}
+
+static void read_env_file (const char *filename)
+{
+       FILE *fp;
+       char buf[1024];
+       char *cp, *name, *val;
+
+       fp = fopen (filename, "r");
+       if (NULL == fp) {
+               return;
+       }
+       while (fgets (buf, sizeof buf, fp) == buf) {
+               cp = strrchr (buf, '\n');
+               if (NULL == cp) {
+                       break;
+               }
+               *cp = '\0';
+
+               cp = buf;
+               /* ignore whitespace and comments */
+               while (('\0' != *cp) && isspace (*cp)) {
+                       cp++;
+               }
+               if (('\0' == *cp) || ('#' == *cp)) {
+                       continue;
+               }
+               /*
+                * ignore lines which don't follow the name=value format
+                * (for example, the "export NAME" shell commands)
+                */
+               name = cp;
+               while (('\0' != *cp) && !isspace (*cp) && ('=' != *cp)) {
+                       cp++;
+               }
+               if ('=' != *cp) {
+                       continue;
+               }
+               /* NUL-terminate the name */
+               *cp = '\0';
+               cp++;
+               val = cp;
+#if 0                          /* XXX untested, and needs rewrite with fewer goto's :-) */
+/*
+ (state, char_type) -> (state, action)
+
+ state: unquoted, single_quoted, double_quoted, escaped, double_quoted_escaped
+ char_type: normal, white, backslash, single, double
+ action: remove_curr, remove_curr_skip_next, remove_prev, finish XXX
+*/
+             no_quote:
+               if (*cp == '\\') {
+                       /* remove the backslash */
+                       remove_char (cp);
+                       /* skip over the next character */
+                       if (*cp)
+                               cp++;
+                       goto no_quote;
+               } else if (*cp == '\'') {
+                       /* remove the quote */
+                       remove_char (cp);
+                       /* now within single quotes */
+                       goto s_quote;
+               } else if (*cp == '"') {
+                       /* remove the quote */
+                       remove_char (cp);
+                       /* now within double quotes */
+                       goto d_quote;
+               } else if (*cp == '\0') {
+                       /* end of string */
+                       goto finished;
+               } else if (isspace (*cp)) {
+                       /* unescaped whitespace - end of string */
+                       *cp = '\0';
+                       goto finished;
+               } else {
+                       cp++;
+                       goto no_quote;
+               }
+             s_quote:
+               if (*cp == '\'') {
+                       /* remove the quote */
+                       remove_char (cp);
+                       /* unquoted again */
+                       goto no_quote;
+               } else if (*cp == '\0') {
+                       /* end of string */
+                       goto finished;
+               } else {
+                       /* preserve everything within single quotes */
+                       cp++;
+                       goto s_quote;
+               }
+             d_quote:
+               if (*cp == '\"') {
+                       /* remove the quote */
+                       remove_char (cp);
+                       /* unquoted again */
+                       goto no_quote;
+               } else if (*cp == '\\') {
+                       cp++;
+                       /* if backslash followed by double quote, remove backslash
+                          else skip over the backslash and following char */
+                       if (*cp == '"')
+                               remove_char (cp - 1);
+                       else if (*cp)
+                               cp++;
+                       goto d_quote;
+               }
+               eise if (*cp == '\0') {
+                       /* end of string */
+                       goto finished;
+               } else {
+                       /* preserve everything within double quotes */
+                       goto d_quote;
+               }
+             finished:
+#endif                         /* 0 */
+               /*
+                * XXX - should handle quotes, backslash escapes, etc.
+                * like the shell does.
+                */
+               addenv (name, val);
+       }
+       (void) fclose (fp);
+}
+#endif                         /* USE_PAM */
+
+
+/*
+ *     change to the user's home directory
+ *     set the HOME, SHELL, MAIL, PATH, and LOGNAME or USER environmental
+ *     variables.
+ */
+
+void setup_env (struct passwd *info)
+{
+#ifndef USE_PAM
+       char *envf;
+#endif
+       char *cp;
+
+       /*
+        * Change the current working directory to be the home directory
+        * of the user.  It is a fatal error for this process to be unable
+        * to change to that directory.  There is no "default" home
+        * directory.
+        *
+        * We no longer do it as root - should work better on NFS-mounted
+        * home directories.  Some systems default to HOME=/, so we make
+        * this a configurable option.  --marekm
+        */
+
+       if (chdir (info->pw_dir) == -1) {
+               static char temp_pw_dir[] = "/";
+
+               if (!getdef_bool ("DEFAULT_HOME") || chdir ("/") == -1) {
+                       fprintf (stderr, _("Unable to cd to '%s'\n"),
+                                info->pw_dir);
+                       SYSLOG ((LOG_WARN,
+                                "unable to cd to `%s' for user `%s'\n",
+                                info->pw_dir, info->pw_name));
+                       closelog ();
+                       exit (EXIT_FAILURE);
+               }
+               (void) puts (_("No directory, logging in with HOME=/"));
+               info->pw_dir = temp_pw_dir;
+       }
+
+       /*
+        * Create the HOME environmental variable and export it.
+        */
+
+       addenv ("HOME", info->pw_dir);
+
+       /*
+        * Create the SHELL environmental variable and export it.
+        */
+
+       if ((NULL == info->pw_shell) || ('\0' == *info->pw_shell)) {
+               static char temp_pw_shell[] = SHELL;
+
+               info->pw_shell = temp_pw_shell;
+       }
+
+       addenv ("SHELL", info->pw_shell);
+
+       /*
+        * Export the user name.  For BSD derived systems, it's "USER", for
+        * all others it's "LOGNAME".  We set both of them.
+        */
+
+       addenv ("USER", info->pw_name);
+       addenv ("LOGNAME", info->pw_name);
+
+       /*
+        * Create the PATH environmental variable and export it.
+        */
+
+       cp = getdef_str ((info->pw_uid == 0) ? "ENV_SUPATH" : "ENV_PATH");
+
+       if (NULL == cp) {
+               /* not specified, use a minimal default */
+               addenv ("PATH=/bin:/usr/bin", NULL);
+       } else if (strchr (cp, '=')) {
+               /* specified as name=value (PATH=...) */
+               addenv (cp, NULL);
+       } else {
+               /* only value specified without "PATH=" */
+               addenv ("PATH", cp);
+       }
+
+#ifndef USE_PAM
+       /*
+        * Create the MAIL environmental variable and export it.  login.defs
+        * knows the prefix.
+        */
+
+       if (getdef_bool ("MAIL_CHECK_ENAB")) {
+               cp = getdef_str ("MAIL_DIR");
+               if (NULL != cp) {
+                       addenv_path ("MAIL", cp, info->pw_name);
+               } else {
+                       cp = getdef_str ("MAIL_FILE");
+                       if (NULL != cp) {
+                               addenv_path ("MAIL", info->pw_dir, cp);
+                       } else {
+#if defined(MAIL_SPOOL_FILE)
+                               addenv_path ("MAIL", info->pw_dir, MAIL_SPOOL_FILE);
+#elif defined(MAIL_SPOOL_DIR)
+                               addenv_path ("MAIL", MAIL_SPOOL_DIR, info->pw_name);
+#endif
+                       }
+               }
+       }
+
+       /*
+        * Read environment from optional config file.  --marekm
+        */
+       envf = getdef_str ("ENVIRON_FILE");
+       if (NULL != envf) {
+               read_env_file (envf);
+       }
+#endif                         /* !USE_PAM */
+}
+
diff --git a/libmisc/shell.c b/libmisc/shell.c
new file mode 100644 (file)
index 0000000..6d016b5
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 1989 - 1991, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2009       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: shell.c 3035 2009-07-22 13:35:57Z nekral-guest $"
+
+#include <stdio.h>
+#include <errno.h>
+#include "prototypes.h"
+#include "defines.h"
+extern char **newenvp;
+extern size_t newenvc;
+
+/*
+ * shell - execute the named program
+ *
+ *     shell begins by trying to figure out what argv[0] is going to
+ *     be for the named process.  The user may pass in that argument,
+ *     or it will be the last pathname component of the file with a
+ *     '-' prepended.
+ *     Then, it executes the named file.
+ */
+
+int shell (const char *file, /*@null@*/const char *arg, char *const envp[])
+{
+       char arg0[1024];
+       int err;
+
+       if (file == (char *) 0) {
+               errno = EINVAL;
+               return errno;
+       }
+
+       /*
+        * The argv[0]'th entry is usually the path name, but
+        * for various reasons the invoker may want to override
+        * that.  So, we determine the 0'th entry only if they
+        * don't want to tell us what it is themselves.
+        */
+       if (arg == (char *) 0) {
+               snprintf (arg0, sizeof arg0, "-%s", Basename ((char *) file));
+               arg = arg0;
+       }
+
+       /*
+        * First we try the direct approach.  The system should be
+        * able to figure out what we are up to without too much
+        * grief.
+        */
+       execle (file, arg, (char *) 0, envp);
+       err = errno;
+
+       if (access (file, R_OK|X_OK) == 0) {
+               /*
+                * Assume this is a shell script (with no shebang).
+                * Interpret it with /bin/sh
+                */
+               execle (SHELL, "sh", "-", file, (char *)0, envp);
+               err = errno;
+       }
+
+       /*
+        * Obviously something is really wrong - I can't figure out
+        * how to execute this stupid shell, so I might as well give
+        * up in disgust ...
+        */
+       snprintf (arg0, sizeof arg0, _("Cannot execute %s"), file);
+       errno = err;
+       perror (arg0);
+       return err;
+}
+
diff --git a/libmisc/strtoday.c b/libmisc/strtoday.c
new file mode 100644 (file)
index 0000000..23355f1
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if !defined(__GLIBC__)
+#define _XOPEN_SOURCE 500
+#endif
+
+#include <config.h>
+
+#ident "$Id: strtoday.c 2139 2008-06-13 19:48:11Z nekral-guest $"
+
+#include "defines.h"
+#include "prototypes.h"
+
+#ifndef USE_GETDATE
+#define USE_GETDATE 1
+#endif
+#if USE_GETDATE
+#include "getdate.h"
+/*
+ * strtoday() now uses get_date() (borrowed from GNU shellutils)
+ * which can handle many date formats, for example:
+ *     1970-09-17      # ISO 8601.
+ *     70-9-17         # This century assumed by default.
+ *     70-09-17        # Leading zeros are ignored.
+ *     9/17/72         # Common U.S. writing.
+ *     24 September 1972
+ *     24 Sept 72      # September has a special abbreviation.
+ *     24 Sep 72       # Three-letter abbreviations always allowed.
+ *     Sep 24, 1972
+ *     24-sep-72
+ *     24sep72
+ */
+long strtoday (const char *str)
+{
+       time_t t;
+
+       /*
+        * get_date() interprets an empty string as the current date,
+        * which is not what we expect, unless you're a BOFH :-).
+        * (useradd sets sp_expire = current date for new lusers)
+        */
+       if ((NULL == str) || ('\0' == *str)) {
+               return -1;
+       }
+
+       t = get_date (str, (time_t *) 0);
+       if ((time_t) - 1 == t) {
+               return -1;
+       }
+       /* convert seconds to days since 1970-01-01 */
+       return (long) (t + DAY / 2) / DAY;
+}
+
+#else                          /* !USE_GETDATE */
+/*
+ * Old code, just in case get_date() doesn't work as expected...
+ */
+#include <stdio.h>
+#ifdef HAVE_STRPTIME
+/*
+ * for now we allow just one format, but we can define more later
+ * (we try them all until one succeeds).  --marekm
+ */
+static char *date_formats[] = {
+       "%Y-%m-%d",
+       (char *) 0
+};
+#else
+/*
+ * days and juldays are used to compute the number of days in the
+ * current month, and the cummulative number of days in the preceding
+ * months.  they are declared so that january is 1, not 0.
+ */
+static short days[13] = { 0,
+       31, 28, 31, 30, 31, 30, /* JAN - JUN */
+       31, 31, 30, 31, 30, 31
+};                             /* JUL - DEC */
+
+static short juldays[13] = { 0,
+       0, 31, 59, 90, 120, 151,        /* JAN - JUN */
+       181, 212, 243, 273, 304, 334
+};                             /* JUL - DEC */
+#endif
+
+/*
+ * strtoday - compute the number of days since 1970.
+ *
+ * the total number of days prior to the current date is
+ * computed.  january 1, 1970 is used as the origin with
+ * it having a day number of 0.
+ */
+
+long strtoday (const char *str)
+{
+#ifdef HAVE_STRPTIME
+       struct tm tp;
+       char *const *fmt;
+       char *cp;
+       time_t result;
+
+       memzero (&tp, sizeof tp);
+       for (fmt = date_formats; *fmt; fmt++) {
+               cp = strptime ((char *) str, *fmt, &tp);
+               if ((NULL == cp) || ('\0' != *cp)) {
+                       continue;
+               }
+
+               result = mktime (&tp);
+               if ((time_t) - 1 == result) {
+                       continue;
+               }
+
+               return (long) (result / DAY);   /* success */
+       }
+       return -1;
+#else
+       char slop[2];
+       int month;
+       int day;
+       int year;
+       long total;
+
+       /*
+        * start by separating the month, day and year.  the order
+        * is compiled in ...
+        */
+
+       if (sscanf (str, "%d/%d/%d%c", &year, &month, &day, slop) != 3) {
+               return -1;
+       }
+
+       /*
+        * the month, day of the month, and year are checked for
+        * correctness and the year adjusted so it falls between
+        * 1970 and 2069.
+        */
+
+       if ((month < 1) || (month > 12)) {
+               return -1;
+       }
+
+       if (day < 1) {
+               return -1;
+       }
+
+       if (   ((2 != month) || ((year % 4) != 0))
+           && (day > days[month])) {
+               return -1;
+       } else if ((month == 2) && ((year % 4) == 0) && (day > 29)) {
+               return -1;
+       }
+
+       if (year < 0) {
+               return -1;
+       } else if (year <= 69) {
+               year += 2000;
+       } else if (year <= 99) {
+               year += 1900;
+       }
+
+       /*
+        * On systems with 32-bit signed time_t, time wraps around in 2038
+        * - for now we just limit the year to 2037 (instead of 2069).
+        * This limit can be removed once no one is using 32-bit systems
+        * anymore :-).  --marekm
+        */
+       if ((year < 1970) || (year > 2037)) {
+               return -1;
+       }
+
+       /*
+        * the total number of days is the total number of days in all
+        * the whole years, plus the number of leap days, plus the
+        * number of days in the whole months preceding, plus the number
+        * of days so far in the month.
+        */
+
+       total = (long) ((year - 1970) * 365L) + (((year + 1) - 1970) / 4);
+       total += (long) juldays[month] + (month > 2 && (year % 4) == 0 ? 1 : 0);
+       total += (long) day - 1;
+
+       return total;
+#endif                         /* HAVE_STRPTIME */
+}
+#endif                         /* !USE_GETDATE */
diff --git a/libmisc/sub.c b/libmisc/sub.c
new file mode 100644 (file)
index 0000000..a7deaa6
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 1989 - 1991, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: sub.c 2849 2009-04-30 21:08:49Z nekral-guest $"
+
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "prototypes.h"
+#include "defines.h"
+#define        BAD_SUBROOT2    "invalid root `%s' for user `%s'\n"
+#define        NO_SUBROOT2     "no subsystem root `%s' for user `%s'\n"
+/*
+ * subsystem - change to subsystem root
+ *
+ *     A subsystem login is indicated by the presense of a "*" as
+ *     the first character of the login shell.  The given home
+ *     directory will be used as the root of a new filesystem which
+ *     the user is actually logged into.
+ */
+void subsystem (const struct passwd *pw)
+{
+       /*
+        * The new root directory must begin with a "/" character.
+        */
+
+       if (pw->pw_dir[0] != '/') {
+               printf (_("Invalid root directory '%s'\n"), pw->pw_dir);
+               SYSLOG ((LOG_WARN, BAD_SUBROOT2, pw->pw_dir, pw->pw_name));
+               closelog ();
+               exit (EXIT_FAILURE);
+       }
+
+       /*
+        * The directory must be accessible and the current process
+        * must be able to change into it.
+        */
+
+       if (chdir (pw->pw_dir) || chroot (pw->pw_dir)) {
+               printf (_("Can't change root directory to '%s'\n"),
+                       pw->pw_dir);
+               SYSLOG ((LOG_WARN, NO_SUBROOT2, pw->pw_dir, pw->pw_name));
+               closelog ();
+               exit (EXIT_FAILURE);
+       }
+}
diff --git a/libmisc/sulog.c b/libmisc/sulog.c
new file mode 100644 (file)
index 0000000..ac7f584
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 1989 - 1992, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: sulog.c 2849 2009-04-30 21:08:49Z nekral-guest $"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <time.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+
+/*
+ * sulog - log a SU command execution result
+ */
+void sulog (const char *tty, bool success, const char *oldname, const char *name)
+{
+       char *sulog_file;
+       time_t now;
+       struct tm *tm;
+       FILE *fp;
+       mode_t oldmask;
+       gid_t oldgid = 0;
+
+       if (success) {
+               SYSLOG ((LOG_INFO,
+                       "Successful su for %s by %s",name,oldname));
+       } else {
+               SYSLOG ((LOG_NOTICE,
+                       "FAILED su for %s by %s",name,oldname));
+       }
+
+       if ((sulog_file = getdef_str ("SULOG_FILE")) == (char *) 0)
+               return;
+
+       oldgid = getgid ();
+       oldmask = umask (077);
+       /* Switch to group root to avoid creating the sulog file with
+        * the wrong group ownership. */
+       if ((oldgid != 0) && (setgid (0) != 0)) {
+               SYSLOG ((LOG_INFO,
+                        "su session not logged to %s", sulog_file));
+               /* Continue, but do not switch back to oldgid later */
+               oldgid = 0;
+       }
+       fp = fopen (sulog_file, "a+");
+       (void) umask (oldmask);
+       if ((oldgid != 0) && (setgid (oldgid) != 0)) {
+               perror ("setgid");
+               SYSLOG ((LOG_ERR,
+                        "can't switch back to group `%d' in sulog",
+                        oldgid));
+               /* Do not return if the group permission were raised. */
+               exit (EXIT_FAILURE);
+       }
+       if (fp == (FILE *) 0) {
+               return;         /* can't open or create logfile */
+       }
+
+       (void) time (&now);
+       tm = localtime (&now);
+
+       fprintf (fp, "SU %.02d/%.02d %.02d:%.02d %c %s %s-%s\n",
+                tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min,
+                success ? '+' : '-', tty, oldname, name);
+
+       (void) fflush (fp);
+       fsync (fileno (fp));
+       fclose (fp);
+       /* TODO: log if failure */
+}
+
diff --git a/libmisc/system.c b/libmisc/system.c
new file mode 100644 (file)
index 0000000..71cdb80
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2009       , Dan Walsh <dwalsh@redhat.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <config.h>
+
+#ident "$Id: system.c 2849 2009-04-30 21:08:49Z nekral-guest $"
+
+#include <stdio.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+#include "prototypes.h"
+#include "defines.h"
+
+int safe_system (const char *command,
+                 const char *argv[],
+                 const char *env[],
+                 int ignore_stderr)
+{
+       int status = -1;
+       int fd;
+       pid_t pid;
+       
+       pid = fork();
+       if (pid < 0) {
+               return -1;
+       }
+
+       if (pid) {       /* Parent */
+               if (waitpid (pid, &status, 0) > 0) {
+                       return status;
+               } else {
+                       return -1;
+               }
+       }
+
+       fd = open ("/dev/null", O_RDWR);
+       /* Child */
+       dup2 (fd, 0);   // Close Stdin
+       if (ignore_stderr) {
+               dup2 (fd, 2);   // Close Stderr
+       }
+
+       execve (command, (char *const *) argv, (char *const *) env);
+       fprintf (stderr, _("Failed to exec '%s'\n"), argv[0]);
+       exit (EXIT_FAILURE);
+}
+
diff --git a/libmisc/ttytype.c b/libmisc/ttytype.c
new file mode 100644 (file)
index 0000000..1c40b1d
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: ttytype.c 2714 2009-04-20 11:31:05Z nekral-guest $"
+
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+/*
+ * ttytype - set ttytype from port to terminal type mapping database
+ */
+void ttytype (const char *line)
+{
+       FILE *fp;
+       char buf[BUFSIZ];
+       char *typefile;
+       char *cp;
+       char type[BUFSIZ];
+       char port[BUFSIZ];
+
+       if (getenv ("TERM") != NULL) {
+               return;
+       }
+       typefile = getdef_str ("TTYTYPE_FILE");
+       if (NULL == typefile) {
+               return;
+       }
+       if (access (typefile, F_OK) != 0) {
+               return;
+       }
+
+       fp = fopen (typefile, "r");
+       if (NULL == fp) {
+               perror (typefile);
+               return;
+       }
+       while (fgets (buf, (int) sizeof buf, fp) == buf) {
+               if (buf[0] == '#') {
+                       continue;
+               }
+
+               cp = strchr (buf, '\n');
+               if (NULL != cp) {
+                       *cp = '\0';
+               }
+
+               if ((sscanf (buf, "%s %s", type, port) == 2) &&
+                   (strcmp (line, port) == 0)) {
+                       break;
+               }
+       }
+       if ((feof (fp) == 0) && (ferror (fp) == 0)) {
+               addenv ("TERM", type);
+       }
+
+       (void) fclose (fp);
+}
+
diff --git a/libmisc/tz.c b/libmisc/tz.c
new file mode 100644 (file)
index 0000000..313fa3d
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1991 - 1994, Chip Rosenthal
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ifndef USE_PAM
+
+#ident "$Id: tz.c 2355 2008-09-06 16:42:41Z nekral-guest $"
+
+#include <stdio.h>
+#include <string.h>
+#include "defines.h"
+#include "prototypes.h"
+#include "getdef.h"
+
+/*
+ * tz - return local timezone name
+ *
+ * tz() determines the name of the local timezone by reading the
+ * contents of the file named by ``fname''.
+ */
+char *tz (const char *fname)
+{
+       FILE *fp = 0;
+       static char tzbuf[BUFSIZ];
+       const char *def_tz = "TZ=CST6CDT";
+
+       if ((fp = fopen (fname, "r")) == NULL ||
+           fgets (tzbuf, (int) sizeof (tzbuf), fp) == NULL) {
+               if (!(def_tz = getdef_str ("ENV_TZ")) || def_tz[0] == '/')
+                       def_tz = "TZ=CST6CDT";
+
+               strcpy (tzbuf, def_tz);
+       } else
+               tzbuf[strlen (tzbuf) - 1] = '\0';
+
+       if (fp)
+               (void) fclose (fp);
+
+       return tzbuf;
+}
+#else                          /* !USE_PAM */
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif                         /* !USE_PAM */
+
diff --git a/libmisc/ulimit.c b/libmisc/ulimit.c
new file mode 100644 (file)
index 0000000..d05b840
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1997, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: ulimit.c 2188 2008-06-15 21:59:41Z nekral-guest $"
+
+#if HAVE_ULIMIT_H
+#include <ulimit.h>
+#ifndef UL_SETFSIZE
+#ifdef UL_SFILLIM
+#define UL_SETFSIZE UL_SFILLIM
+#else
+#define UL_SETFSIZE 2
+#endif
+#endif
+#elif HAVE_SYS_RESOURCE_H
+#include <sys/time.h>          /* for struct timeval on sunos4 */
+/* XXX - is the above ok or should it be <time.h> on ultrix? */
+#include <sys/resource.h>
+#endif
+#include "prototypes.h"
+
+int set_filesize_limit (int blocks)
+{
+       int ret = -1;
+#if HAVE_ULIMIT_H
+       if (ulimit (UL_SETFSIZE, blocks) != -1) {
+               ret = 0;
+       }
+#elif defined(RLIMIT_FSIZE)
+       struct rlimit rlimit_fsize;
+
+       rlimit_fsize.rlim_cur = 512L * blocks;
+       rlimit_fsize.rlim_max = rlimit_fsize.rlim_cur;
+       ret = setrlimit (RLIMIT_FSIZE, &rlimit_fsize);
+#endif
+
+       return ret;
+}
+
diff --git a/libmisc/user_busy.c b/libmisc/user_busy.c
new file mode 100644 (file)
index 0000000..ff626b0
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: $"
+
+#include <assert.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include "defines.h"
+#include "prototypes.h"
+
+#ifdef __linux__
+static int check_status (const char *sname, uid_t uid);
+static int user_busy_processes (uid_t uid);
+#else                          /* !__linux__ */
+static int user_busy_utmp (const char *name);
+#endif                         /* !__linux__ */
+
+/*
+ * user_busy - check if an user if currently running processes
+ */
+int user_busy (const char *name, uid_t uid)
+{
+       /* There are no standard ways to get the list of processes.
+        * An option could be to run an external tool (ps).
+        */
+#ifdef __linux__
+       /* On Linux, directly parse /proc */
+       return user_busy_processes (uid);
+#else                          /* !__linux__ */
+       /* If we cannot rely on /proc, check is there is a record in utmp
+        * indicating that the user is still logged in */
+       return user_busy_utmp (name);
+#endif                         /* !__linux__ */
+}
+
+#ifndef __linux__
+static int user_busy_utmp (const char *name)
+{
+#ifdef USE_UTMPX
+       struct utmpx *utent;
+
+       setutxent ();
+       while ((utent = getutxent ()) != NULL)
+#else                          /* !USE_UTMPX */
+       struct utmp *utent;
+
+       setutent ();
+       while ((utent = getutent ()) != NULL)
+#endif                         /* !USE_UTMPX */
+       {
+               if (utent->ut_type != USER_PROCESS) {
+                       continue;
+               }
+               if (strncmp (utent->ut_user, name, sizeof utent->ut_user) != 0) {
+                       continue;
+               }
+               if (kill (utent->ut_pid, 0) != 0) {
+                       continue;
+               }
+
+               return 1;
+       }
+
+       return 0;
+}
+#endif                         /* !__linux__ */
+
+#ifdef __linux__
+static int check_status (const char *sname, uid_t uid)
+{
+       /* 40: /proc/xxxxxxxxxx/task/xxxxxxxxxx/status + \0 */
+       char status[40];
+       char line[1024];
+       FILE *sfile;
+
+       snprintf (status, 40, "/proc/%s/status", sname);
+       status[39] = '\0';
+
+       sfile = fopen (status, "r");
+       if (NULL == sfile) {
+               return 0;
+       }
+       while (fgets (line, sizeof (line), sfile) == line) {
+               if (strncmp (line, "Uid:\t", 5) == 0) {
+                       unsigned long ruid, euid, suid;
+                       assert (uid == (unsigned long) uid);
+                       if (sscanf (line,
+                                   "Uid:\t%lu\t%lu\t%lu\n",
+                                   &ruid, &euid, &suid) == 3) {
+                               if (   (ruid == (unsigned long) uid)
+                                   || (euid == (unsigned long) uid)
+                                   || (suid == (unsigned long) uid)) {
+                                       (void) fclose (sfile);
+                                       return 1;
+                               }
+                       } else {
+                               /* Ignore errors. This is just a best effort. */
+                       }
+                       (void) fclose (sfile);
+                       return 0;
+               }
+       }
+       (void) fclose (sfile);
+       return 0;
+}
+
+static int user_busy_processes (uid_t uid)
+{
+       DIR *proc;
+       struct dirent *ent;
+       char *tmp_d_name;
+       pid_t pid;
+       DIR *task_dir;
+       /* 22: /proc/xxxxxxxxxx/task + \0 */
+       char task_path[22];
+       char root_path[22];
+       struct stat sbroot;
+       struct stat sbroot_process;
+
+       proc = opendir ("/proc");
+       if (proc == NULL) {
+               perror ("opendir /proc");
+               return 0;
+       }
+       if (stat ("/", &sbroot) != 0) {
+               perror ("stat (\"/\")");
+               (void) closedir (proc);
+               return 0;
+       }
+
+       while ((ent = readdir (proc)) != NULL) {
+               tmp_d_name = ent->d_name;
+               /*
+                * Ingo Molnar's patch introducing NPTL for 2.4 hides
+                * threads in the /proc directory by prepending a period.
+                * This patch is applied by default in some RedHat
+                * kernels.
+                */
+               if (   (strcmp (tmp_d_name, ".") == 0)
+                   || (strcmp (tmp_d_name, "..") == 0)) {
+                       continue;
+               }
+               if (*tmp_d_name == '.') {
+                       tmp_d_name++;
+               }
+
+               /* Check if this is a valid PID */
+               if (get_pid (tmp_d_name, &pid) == 0) {
+                       continue;
+               }
+
+               /* Check if the process is in our chroot */
+               snprintf (root_path, 22, "/proc/%lu/root", (unsigned long) pid);
+               root_path[21] = '\0';
+               if (stat (root_path, &sbroot_process) != 0) {
+                       continue;
+               }
+               if (   (sbroot.st_dev != sbroot_process.st_dev)
+                   || (sbroot.st_ino != sbroot_process.st_ino)) {
+                       continue;
+               }
+
+               if (check_status (tmp_d_name, uid) != 0) {
+                       (void) closedir (proc);
+                       return 1;
+               }
+
+               snprintf (task_path, 22, "/proc/%lu/task", (unsigned long) pid);
+               task_path[21] = '\0';
+               task_dir = opendir (task_path);
+               if (task_dir != NULL) {
+                       while ((ent = readdir (task_dir)) != NULL) {
+                               pid_t tid;
+                               if (get_pid (ent->d_name, &tid) == 0) {
+                                       continue;
+                               }
+                               if (tid == pid) {
+                                       continue;
+                               }
+                               if (check_status (task_path+6, uid) != 0) {
+                                       (void) closedir (proc);
+                                       return 1;
+                               }
+                       }
+                       (void) closedir (task_dir);
+               } else {
+                       /* Ignore errors. This is just a best effort */
+               }
+       }
+
+       (void) closedir (proc);
+       return 0;
+}
+#endif                         /* __linux__ */
+
diff --git a/libmisc/utmp.c b/libmisc/utmp.c
new file mode 100644 (file)
index 0000000..8a4d337
--- /dev/null
@@ -0,0 +1,455 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#include "defines.h"
+#include "prototypes.h"
+
+#include <utmp.h>
+
+#ifdef USE_UTMPX
+#include <utmpx.h>
+#endif
+
+#include <assert.h>
+#include <netdb.h>
+#include <stdio.h>
+
+#ident "$Id: utmp.c 2834 2009-04-28 20:03:23Z nekral-guest $"
+
+
+/*
+ * is_my_tty -- determine if "tty" is the same TTY stdin is using
+ */
+static bool is_my_tty (const char *tty)
+{
+       /* full_tty shall be at least sizeof utmp.ut_line + 5 */
+       char full_tty[200];
+       /* tmptty shall be bigger than full_tty */
+       static char tmptty[sizeof (full_tty)+1];
+
+       if ('/' != *tty) {
+               (void) snprintf (full_tty, sizeof full_tty, "/dev/%s", tty);
+               tty = &full_tty[0];
+       }
+
+       if ('\0' == tmptty[0]) {
+               const char *tname = ttyname (STDIN_FILENO);
+               if (NULL != tname) {
+                       (void) strncpy (tmptty, tname, sizeof tmptty);
+                       tmptty[sizeof (tmptty) - 1] = '\0';
+               }
+       }
+
+       if (NULL == tmptty) {
+               (void) puts (_("Unable to determine your tty name."));
+               exit (EXIT_FAILURE);
+       } else if (strncmp (tty, tmptty, sizeof (tmptty)) != 0) {
+               return false;
+       } else {
+               return true;
+       }
+}
+
+/*
+ * get_current_utmp - return the most probable utmp entry for the current
+ *                    session
+ *
+ *     The utmp file is scanned for an entry with the same process ID.
+ *     The line enterred by the *getty / telnetd, etc. should also match
+ *     the current terminal.
+ *
+ *     When an entry is returned by get_current_utmp, and if the utmp
+ *     structure has a ut_id field, this field should be used to update
+ *     the entry information.
+ *
+ *     Return NULL if no entries exist in utmp for the current process.
+ */
+/*@null@*/ /*@only@*/struct utmp *get_current_utmp (void)
+{
+       struct utmp *ut;
+       struct utmp *ret = NULL;
+
+       setutent ();
+
+       /* First, try to find a valid utmp entry for this process.  */
+       while ((ut = getutent ()) != NULL) {
+               if (   (ut->ut_pid == getpid ())
+#ifdef HAVE_STRUCT_UTMP_UT_ID
+                   && ('\0' != ut->ut_id[0])
+#endif
+#ifdef HAVE_STRUCT_UTMP_UT_TYPE
+                   && (   (LOGIN_PROCESS == ut->ut_type)
+                       || (USER_PROCESS  == ut->ut_type))
+#endif
+                   /* A process may have failed to close an entry
+                    * Check if this entry refers to the current tty */
+                   && is_my_tty (ut->ut_line)) {
+                       break;
+               }
+       }
+
+       if (NULL != ut) {
+               ret = (struct utmp *) xmalloc (sizeof (*ret));
+               memcpy (ret, ut, sizeof (*ret));
+       }
+
+       endutent ();
+
+       return ret;
+}
+
+/*
+ * Some systems already have updwtmp() and possibly updwtmpx().  Others
+ * don't, so we re-implement these functions if necessary.
+ */
+#ifndef HAVE_UPDWTMP
+static void updwtmp (const char *filename, const struct utmp *ut)
+{
+       int fd;
+
+       fd = open (filename, O_APPEND | O_WRONLY, 0);
+       if (fd >= 0) {
+               write (fd, (const char *) ut, sizeof (*ut));
+               close (fd);
+       }
+}
+#endif                         /* ! HAVE_UPDWTMP */
+
+#ifdef USE_UTMPX
+#ifndef HAVE_UPDWTMPX
+static void updwtmpx (const char *filename, const struct utmpx *utx)
+{
+       int fd;
+
+       fd = open (filename, O_APPEND | O_WRONLY, 0);
+       if (fd >= 0) {
+               write (fd, (const char *) utx, sizeof (*utx));
+               close (fd);
+       }
+}
+#endif                         /* ! HAVE_UPDWTMPX */
+#endif                         /* ! USE_UTMPX */
+
+
+/*
+ * prepare_utmp - prepare an utmp entry so that it can be logged in a
+ *                utmp/wtmp file.
+ *
+ *     It accepts an utmp entry in input (ut) to return an entry with
+ *     the right ut_id. This is typically an entry returned by
+ *     get_current_utmp
+ *     If ut is NULL, ut_id will be forged based on the line argument.
+ *
+ *     The ut_host field of the input structure may also be kept, and is
+ *     used to define the ut_addr/ut_addr_v6 fields. (if these fields
+ *     exist)
+ *
+ *     Other fields are discarded and filed with new values (if they
+ *     exist).
+ *
+ *     The returned structure shall be freed by the caller.
+ */
+/*@only@*/struct utmp *prepare_utmp (const char *name,
+                                     const char *line,
+                                     const char *host,
+                                     /*@null@*/const struct utmp *ut)
+{
+       struct timeval tv;
+       char *hostname = NULL;
+       struct utmp *utent;
+
+       assert (NULL != name);
+       assert (NULL != line);
+
+
+
+       if (   (NULL != host)
+           && ('\0' != host[0])) {
+               hostname = (char *) xmalloc (strlen (host) + 1);
+               strcpy (hostname, host);
+#ifdef HAVE_STRUCT_UTMP_UT_HOST
+       } else if (   (NULL != ut)
+                  && (NULL != ut->ut_host)
+                  && ('\0' != ut->ut_host[0])) {
+               hostname = (char *) xmalloc (sizeof (ut->ut_host) + 1);
+               strncpy (hostname, ut->ut_host, sizeof (ut->ut_host));
+               hostname[sizeof (ut->ut_host)] = '\0';
+#endif                         /* HAVE_STRUCT_UTMP_UT_HOST */
+       }
+
+       if (strncmp(line, "/dev/", 5) == 0) {
+               line += 5;
+       }
+
+
+       utent = (struct utmp *) xmalloc (sizeof (*utent));
+       memzero (utent, sizeof (*utent));
+
+
+
+#ifdef HAVE_STRUCT_UTMP_UT_TYPE
+       utent->ut_type = USER_PROCESS;
+#endif                         /* HAVE_STRUCT_UTMP_UT_TYPE */
+       utent->ut_pid = getpid ();
+       strncpy (utent->ut_line, line,      sizeof (utent->ut_line));
+#ifdef HAVE_STRUCT_UTMP_UT_ID
+       if (NULL != ut) {
+               strncpy (utent->ut_id, ut->ut_id, sizeof (utent->ut_id));
+       } else {
+               /* XXX - assumes /dev/tty?? */
+               strncpy (utent->ut_id, line + 3, sizeof (utent->ut_id));
+       }
+#endif                         /* HAVE_STRUCT_UTMP_UT_ID */
+#ifdef HAVE_STRUCT_UTMP_UT_NAME
+       strncpy (utent->ut_name, name,      sizeof (utent->ut_name));
+#endif                         /* HAVE_STRUCT_UTMP_UT_NAME */
+#ifdef HAVE_STRUCT_UTMP_UT_USER
+       strncpy (utent->ut_user, name,      sizeof (utent->ut_user));
+#endif                         /* HAVE_STRUCT_UTMP_UT_USER */
+       if (NULL != hostname) {
+               struct addrinfo *info = NULL;
+#ifdef HAVE_STRUCT_UTMP_UT_HOST
+               strncpy (utent->ut_host, hostname, sizeof (utent->ut_host));
+#endif                         /* HAVE_STRUCT_UTMP_UT_HOST */
+#ifdef HAVE_STRUCT_UTMP_UT_SYSLEN
+               utent->ut_syslen = MIN (strlen (hostname),
+                                       sizeof (utent->ut_host));
+#endif                         /* HAVE_STRUCT_UTMP_UT_SYSLEN */
+#if defined(HAVE_STRUCT_UTMP_UT_ADDR) || defined(HAVE_STRUCT_UTMP_UT_ADDR_V6)
+               if (getaddrinfo (hostname, NULL, NULL, &info) == 0) {
+                       /* getaddrinfo might not be reliable.
+                        * Just try to log what may be useful.
+                        */
+                       if (info->ai_family == AF_INET) {
+                               struct sockaddr_in *sa =
+                                       (struct sockaddr_in *) info->ai_addr;
+#ifdef HAVE_STRUCT_UTMP_UT_ADDR
+                               memcpy (&(utent->ut_addr),
+                                       &(sa->sin_addr),
+                                       MIN (sizeof (utent->ut_addr),
+                                            sizeof (sa->sin_addr)));
+#endif                         /* HAVE_STRUCT_UTMP_UT_ADDR */
+#ifdef HAVE_STRUCT_UTMP_UT_ADDR_V6
+                               memcpy (utent->ut_addr_v6,
+                                       &(sa->sin_addr),
+                                       MIN (sizeof (utent->ut_addr_v6),
+                                            sizeof (sa->sin_addr)));
+                       } else if (info->ai_family == AF_INET6) {
+                               struct sockaddr_in6 *sa =
+                                       (struct sockaddr_in6 *) info->ai_addr;
+                               memcpy (utent->ut_addr_v6,
+                                       &(sa->sin6_addr),
+                                       MIN (sizeof (utent->ut_addr_v6),
+                                            sizeof (sa->sin6_addr)));
+#endif                         /* HAVE_STRUCT_UTMP_UT_ADDR_V6 */
+                       }
+                       freeaddrinfo (info);
+               }
+#endif         /* HAVE_STRUCT_UTMP_UT_ADDR || HAVE_STRUCT_UTMP_UT_ADDR_V6 */
+               free (hostname);
+       }
+       /* ut_exit is only for DEAD_PROCESS */
+       utent->ut_session = getsid (0);
+       if (gettimeofday (&tv, NULL) == 0) {
+#ifdef HAVE_STRUCT_UTMP_UT_TIME
+               utent->ut_time = tv.tv_sec;
+#endif                         /* HAVE_STRUCT_UTMP_UT_TIME */
+#ifdef HAVE_STRUCT_UTMP_UT_XTIME
+               utent->ut_xtime = tv.tv_usec;
+#endif                         /* HAVE_STRUCT_UTMP_UT_XTIME */
+#ifdef HAVE_STRUCT_UTMP_UT_TV
+               utent->ut_tv.tv_sec  = tv.tv_sec;
+               utent->ut_tv.tv_usec = tv.tv_usec;
+#endif                         /* HAVE_STRUCT_UTMP_UT_TV */
+       }
+
+       return utent;
+}
+
+/*
+ * setutmp - Update an entry in utmp and log an entry in wtmp
+ *
+ *     Return 1 on failure and 0 on success.
+ */
+int setutmp (struct utmp *ut)
+{
+       int err = 0;
+
+       assert (NULL != ut);
+
+       setutent ();
+       if (pututline (ut) == NULL) {
+               err = 1;
+       }
+       endutent ();
+
+       updwtmp (_WTMP_FILE, ut);
+
+       return err;
+}
+
+#ifdef USE_UTMPX
+/*
+ * prepare_utmpx - the UTMPX version for prepare_utmp
+ */
+/*@only@*/struct utmpx *prepare_utmpx (const char *name,
+                                       const char *line,
+                                       const char *host,
+                                       /*@null@*/const struct utmp *ut)
+{
+       struct timeval tv;
+       char *hostname = NULL;
+       struct utmpx *utxent;
+
+       assert (NULL != name);
+       assert (NULL != line);
+
+
+
+       if (   (NULL != host)
+           && ('\0' != host[0])) {
+               hostname = (char *) xmalloc (strlen (host) + 1);
+               strcpy (hostname, host);
+#ifdef HAVE_STRUCT_UTMP_UT_HOST
+       } else if (   (NULL != ut)
+                  && (NULL != ut->ut_host)
+                  && ('\0' != ut->ut_host[0])) {
+               hostname = (char *) xmalloc (sizeof (ut->ut_host) + 1);
+               strncpy (hostname, ut->ut_host, sizeof (ut->ut_host));
+               hostname[sizeof (ut->ut_host)] = '\0';
+#endif                         /* HAVE_STRUCT_UTMP_UT_TYPE */
+       }
+
+       if (strncmp(line, "/dev/", 5) == 0) {
+               line += 5;
+       }
+
+       utxent = (struct utmpx *) xmalloc (sizeof (*utxent));
+       memzero (utxent, sizeof (*utxent));
+
+
+
+       utxent->ut_type = USER_PROCESS;
+       utxent->ut_pid = getpid ();
+       strncpy (utxent->ut_line, line,      sizeof (utxent->ut_line));
+       /* existence of ut->ut_id is enforced by configure */
+       if (NULL != ut) {
+               strncpy (utxent->ut_id, ut->ut_id, sizeof (utxent->ut_id));
+       } else {
+               /* XXX - assumes /dev/tty?? */
+               strncpy (utxent->ut_id, line + 3, sizeof (utxent->ut_id));
+       }
+#ifdef HAVE_STRUCT_UTMPX_UT_NAME
+       strncpy (utxent->ut_name, name,      sizeof (utxent->ut_name));
+#endif                         /* HAVE_STRUCT_UTMPX_UT_NAME */
+       strncpy (utxent->ut_user, name,      sizeof (utxent->ut_user));
+       if (NULL != hostname) {
+               struct addrinfo *info = NULL;
+#ifdef HAVE_STRUCT_UTMPX_UT_HOST
+               strncpy (utxent->ut_host, hostname, sizeof (utxent->ut_host));
+#endif                         /* HAVE_STRUCT_UTMPX_UT_HOST */
+#ifdef HAVE_STRUCT_UTMPX_UT_SYSLEN
+               utxent->ut_syslen = MIN (strlen (hostname),
+                                        sizeof (utxent->ut_host));
+#endif                         /* HAVE_STRUCT_UTMPX_UT_SYSLEN */
+#if defined(HAVE_STRUCT_UTMPX_UT_ADDR) || defined(HAVE_STRUCT_UTMPX_UT_ADDR_V6)
+               if (getaddrinfo (hostname, NULL, NULL, &info) == 0) {
+                       /* getaddrinfo might not be reliable.
+                        * Just try to log what may be useful.
+                        */
+                       if (info->ai_family == AF_INET) {
+                               struct sockaddr_in *sa =
+                                       (struct sockaddr_in *) info->ai_addr;
+#ifdef HAVE_STRUCT_UTMPX_UT_ADDR
+                               memcpy (utxent->ut_addr,
+                                       &(sa->sin_addr),
+                                       MIN (sizeof (utxent->ut_addr),
+                                            sizeof (sa->sin_addr)));
+#endif                         /* HAVE_STRUCT_UTMPX_UT_ADDR */
+#ifdef HAVE_STRUCT_UTMPX_UT_ADDR_V6
+                               memcpy (utxent->ut_addr_v6,
+                                       &(sa->sin_addr),
+                                       MIN (sizeof (utxent->ut_addr_v6),
+                                            sizeof (sa->sin_addr)));
+                       } else if (info->ai_family == AF_INET6) {
+                               struct sockaddr_in6 *sa =
+                                       (struct sockaddr_in6 *) info->ai_addr;
+                               memcpy (utxent->ut_addr_v6,
+                                       &(sa->sin6_addr),
+                                       MIN (sizeof (utxent->ut_addr_v6),
+                                            sizeof (sa->sin6_addr)));
+#endif                         /* HAVE_STRUCT_UTMPX_UT_ADDR_V6 */
+                       }
+                       freeaddrinfo (info);
+               }
+#endif         /* HAVE_STRUCT_UTMPX_UT_ADDR || HAVE_STRUCT_UTMPX_UT_ADDR_V6 */
+               free (hostname);
+       }
+       /* ut_exit is only for DEAD_PROCESS */
+       utxent->ut_session = getsid (0);
+       if (gettimeofday (&tv, NULL) == 0) {
+#ifdef HAVE_STRUCT_UTMPX_UT_TIME
+               utxent->ut_time = tv.tv_sec;
+#endif                         /* HAVE_STRUCT_UTMPX_UT_TIME */
+#ifdef HAVE_STRUCT_UTMPX_UT_XTIME
+               utxent->ut_xtime = tv.tv_usec;
+#endif                         /* HAVE_STRUCT_UTMPX_UT_XTIME */
+               utxent->ut_tv.tv_sec  = tv.tv_sec;
+               utxent->ut_tv.tv_usec = tv.tv_usec;
+       }
+
+       return utxent;
+}
+
+/*
+ * setutmpx - the UTMPX version for setutmp
+ */
+int setutmpx (struct utmpx *utx)
+{
+       int err = 0;
+
+       assert (NULL != utx);
+
+       setutxent ();
+       if (pututxline (utx) == NULL) {
+               err = 1;
+       }
+       endutxent ();
+
+       updwtmpx (_WTMP_FILE "x", utx);
+
+       return err;
+}
+#endif                         /* USE_UTMPX */
+
diff --git a/libmisc/valid.c b/libmisc/valid.c
new file mode 100644 (file)
index 0000000..fc71fd4
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 1989 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1999, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: valid.c 2116 2008-06-10 21:52:34Z nekral-guest $"
+
+#include <sys/types.h>
+#include <stdio.h>
+#include "prototypes.h"
+#include "defines.h"
+#include <pwd.h>
+/*
+ * valid - compare encrypted passwords
+ *
+ *     Valid() compares the DES encrypted password from the password file
+ *     against the password which the user has entered after it has been
+ *     encrypted using the same salt as the original.  Entries which do
+ *     not have a password file entry have a NULL pw_name field and this
+ *     is used to indicate that a dummy salt must be used to encrypt the
+ *     password anyway.
+ */
+bool valid (const char *password, const struct passwd *ent)
+{
+       const char *encrypted;
+       const char *salt;
+
+       /*
+        * Start with blank or empty password entries.  Always encrypt
+        * a password if no such user exists.  Only if the ID exists and
+        * the password is really empty do you return quickly.  This
+        * routine is meant to waste CPU time.
+        */
+
+       if ((NULL != ent->pw_name) && ('\0' == ent->pw_passwd[0])) {
+               if ('\0' == password[0]) {
+                       return true;    /* user entered nothing */
+               } else {
+                       return false;   /* user entered something! */
+               }
+       }
+
+       /*
+        * If there is no entry then we need a salt to use.
+        */
+
+       if ((NULL == ent->pw_name) || ('\0' == ent->pw_passwd[0])) {
+               salt = "xx";
+       } else {
+               salt = ent->pw_passwd;
+       }
+
+       /*
+        * Now, perform the encryption using the salt from before on
+        * the users input.  Since we always encrypt the string, it
+        * should be very difficult to determine if the user exists by
+        * looking at execution time.
+        */
+
+       encrypted = pw_encrypt (password, salt);
+
+       /*
+        * One last time we must deal with there being no password file
+        * entry for the user.  We use the pw_name == NULL idiom to
+        * cause non-existent users to not be validated.
+        */
+
+       if (   (NULL != ent->pw_name)
+           && (strcmp (encrypted, ent->pw_passwd) == 0)) {
+               return true;
+       } else {
+               return false;
+       }
+}
+
diff --git a/libmisc/xgetXXbyYY.c b/libmisc/xgetXXbyYY.c
new file mode 100644 (file)
index 0000000..b3d2cd1
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * According to the Linux-PAM documentation:
+ *
+ *  4.1. Care about standard library calls
+ *
+ *  In general, writers of authorization-granting applications should
+ *  assume that each module is likely to call any or all 'libc' functions.
+ *  For 'libc' functions that return pointers to static/dynamically
+ *  allocated structures (ie.  the library allocates the memory and the
+ *  user is not expected to 'free()' it) any module call to this function
+ *  is likely to corrupt a pointer previously obtained by the application.
+ *  The application programmer should either re-call such a 'libc'
+ *  function after a call to the Linux-PAM library, or copy the structure
+ *  contents to some safe area of memory before passing control to the
+ *  Linux-PAM library.
+ *
+ *  Two important function classes that fall into this category are
+ *  getpwnam(3) and syslog(3).
+ *
+ * This file provide wrapper to the getpwnam or getpwnam_r functions.
+ */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include "prototypes.h"
+
+#define XFUNCTION_NAME XPREFIX (FUNCTION_NAME)
+#define XPREFIX(name) XPREFIX1 (name)
+#define XPREFIX1(name) x##name
+#define REENTRANT_NAME APPEND_R (FUNCTION_NAME)
+#define APPEND_R(name) APPEND_R1 (name)
+#define APPEND_R1(name) name##_r
+#define STRINGIZE(name) STRINGIZE1 (name)
+#define STRINGIZE1(name) #name
+
+/*@null@*/ /*@only@*/LOOKUP_TYPE *XFUNCTION_NAME (ARG_TYPE ARG_NAME)
+{
+#if HAVE_FUNCTION_R
+       LOOKUP_TYPE *result=NULL;
+       char *buffer=NULL;
+       /* we have to start with something */
+       size_t length = 0x100;
+
+       result = malloc(sizeof(LOOKUP_TYPE));
+       if (NULL == result) {
+               fprintf (stderr, _("%s: out of memory\n"),
+                        "x" STRINGIZE(FUNCTION_NAME));
+               exit (13);
+       }
+
+       while (true) {
+               int status;
+               LOOKUP_TYPE *resbuf = NULL;
+               buffer = (char *)realloc (buffer, length);
+               if (NULL == buffer) {
+                       fprintf (stderr, _("%s: out of memory\n"),
+                                "x" STRINGIZE(FUNCTION_NAME));
+                       exit (13);
+               }
+               errno = 0;
+               status = REENTRANT_NAME(ARG_NAME, result, buffer,
+                                       length, &resbuf);
+               if ((0 ==status) && (resbuf == result)) {
+                       /* Build a result structure that can be freed by
+                        * the shadow *_free functions. */
+                       LOOKUP_TYPE *ret_result = DUP_FUNCTION(result);
+                       free(buffer);
+                       free(result);
+                       return ret_result;
+               }
+
+               if (ERANGE != errno) {
+                       free (buffer);
+                       free (result);
+                       return NULL;
+               }
+
+               if (length <= ((size_t)-1 / 4)) {
+                       length *= 4;
+               } else if (length == (size_t) -1) {
+                       break;
+               } else {
+                       length = (size_t) -1;
+               }
+       }
+
+       free(buffer);
+       free(result);
+       return NULL;
+
+#else /* !HAVE_FUNCTION_R */
+
+       /* No reentrant function.
+        * Duplicate the structure to avoid other call to overwrite it.
+        *
+        * We should also restore the initial structure. But that would be
+        * overkill.
+        */
+       LOOKUP_TYPE *result = FUNCTION_NAME(ARG_NAME);
+
+       if (result) {
+               result = DUP_FUNCTION(result);
+               if (NULL == result) {
+                       fprintf (stderr, _("%s: out of memory\n"),
+                                "x" STRINGIZE(FUNCTION_NAME));
+                       exit (13);
+               }
+       }
+
+       return result;
+#endif
+}
+
diff --git a/libmisc/xgetgrgid.c b/libmisc/xgetgrgid.c
new file mode 100644 (file)
index 0000000..2ef171d
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * According to the Linux-PAM documentation:
+ *
+ *  4.1. Care about standard library calls
+ *
+ *  In general, writers of authorization-granting applications should
+ *  assume that each module is likely to call any or all 'libc' functions.
+ *  For 'libc' functions that return pointers to static/dynamically
+ *  allocated structures (ie.  the library allocates the memory and the
+ *  user is not expected to 'free()' it) any module call to this function
+ *  is likely to corrupt a pointer previously obtained by the application.
+ *  The application programmer should either re-call such a 'libc'
+ *  function after a call to the Linux-PAM library, or copy the structure
+ *  contents to some safe area of memory before passing control to the
+ *  Linux-PAM library.
+ *
+ *  Two important function classes that fall into this category are
+ *  getpwnam(3) and syslog(3).
+ *
+ * This file provide wrapper to the getpwnam or getpwnam_r functions.
+ */
+
+#include <config.h>
+
+#include "groupio.h"
+
+#define LOOKUP_TYPE    struct group
+#define FUNCTION_NAME  getgrgid
+#define ARG_TYPE       gid_t
+#define ARG_NAME       gid
+#define DUP_FUNCTION   __gr_dup
+#define HAVE_FUNCTION_R (defined HAVE_GETGRGID_R)
+
+#include "xgetXXbyYY.c"
+
diff --git a/libmisc/xgetgrnam.c b/libmisc/xgetgrnam.c
new file mode 100644 (file)
index 0000000..a07d0c3
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * According to the Linux-PAM documentation:
+ *
+ *  4.1. Care about standard library calls
+ *
+ *  In general, writers of authorization-granting applications should
+ *  assume that each module is likely to call any or all 'libc' functions.
+ *  For 'libc' functions that return pointers to static/dynamically
+ *  allocated structures (ie.  the library allocates the memory and the
+ *  user is not expected to 'free()' it) any module call to this function
+ *  is likely to corrupt a pointer previously obtained by the application.
+ *  The application programmer should either re-call such a 'libc'
+ *  function after a call to the Linux-PAM library, or copy the structure
+ *  contents to some safe area of memory before passing control to the
+ *  Linux-PAM library.
+ *
+ *  Two important function classes that fall into this category are
+ *  getpwnam(3) and syslog(3).
+ *
+ * This file provide wrapper to the getpwnam or getpwnam_r functions.
+ */
+
+#include <config.h>
+
+#include "groupio.h"
+
+#define LOOKUP_TYPE    struct group
+#define FUNCTION_NAME  getgrnam
+#define ARG_TYPE       const char *
+#define ARG_NAME       name
+#define DUP_FUNCTION   __gr_dup
+#define HAVE_FUNCTION_R (defined HAVE_GETGRNAM_R)
+
+#include "xgetXXbyYY.c"
+
diff --git a/libmisc/xgetpwnam.c b/libmisc/xgetpwnam.c
new file mode 100644 (file)
index 0000000..db65abb
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * According to the Linux-PAM documentation:
+ *
+ *  4.1. Care about standard library calls
+ *
+ *  In general, writers of authorization-granting applications should
+ *  assume that each module is likely to call any or all 'libc' functions.
+ *  For 'libc' functions that return pointers to static/dynamically
+ *  allocated structures (ie.  the library allocates the memory and the
+ *  user is not expected to 'free()' it) any module call to this function
+ *  is likely to corrupt a pointer previously obtained by the application.
+ *  The application programmer should either re-call such a 'libc'
+ *  function after a call to the Linux-PAM library, or copy the structure
+ *  contents to some safe area of memory before passing control to the
+ *  Linux-PAM library.
+ *
+ *  Two important function classes that fall into this category are
+ *  getpwnam(3) and syslog(3).
+ *
+ * This file provide wrapper to the getpwnam or getpwnam_r functions.
+ */
+
+#include <config.h>
+
+#include "pwio.h"
+
+#define LOOKUP_TYPE    struct passwd
+#define FUNCTION_NAME  getpwnam
+#define ARG_TYPE       const char *
+#define ARG_NAME       name
+#define DUP_FUNCTION   __pw_dup
+#define HAVE_FUNCTION_R (defined HAVE_GETPWNAM_R)
+
+#include "xgetXXbyYY.c"
+
diff --git a/libmisc/xgetpwuid.c b/libmisc/xgetpwuid.c
new file mode 100644 (file)
index 0000000..8924134
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * According to the Linux-PAM documentation:
+ *
+ *  4.1. Care about standard library calls
+ *
+ *  In general, writers of authorization-granting applications should
+ *  assume that each module is likely to call any or all 'libc' functions.
+ *  For 'libc' functions that return pointers to static/dynamically
+ *  allocated structures (ie.  the library allocates the memory and the
+ *  user is not expected to 'free()' it) any module call to this function
+ *  is likely to corrupt a pointer previously obtained by the application.
+ *  The application programmer should either re-call such a 'libc'
+ *  function after a call to the Linux-PAM library, or copy the structure
+ *  contents to some safe area of memory before passing control to the
+ *  Linux-PAM library.
+ *
+ *  Two important function classes that fall into this category are
+ *  getpwnam(3) and syslog(3).
+ *
+ * This file provide wrapper to the getpwnam or getpwnam_r functions.
+ */
+
+#include <config.h>
+
+#include "pwio.h"
+
+#define LOOKUP_TYPE    struct passwd
+#define FUNCTION_NAME  getpwuid
+#define ARG_TYPE       uid_t
+#define ARG_NAME       uid
+#define DUP_FUNCTION   __pw_dup
+#define HAVE_FUNCTION_R (defined HAVE_GETPWUID_R)
+
+#include "xgetXXbyYY.c"
+
diff --git a/libmisc/xgetspnam.c b/libmisc/xgetspnam.c
new file mode 100644 (file)
index 0000000..287e97f
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2008 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * According to the Linux-PAM documentation:
+ *
+ *  4.1. Care about standard library calls
+ *
+ *  In general, writers of authorization-granting applications should
+ *  assume that each module is likely to call any or all 'libc' functions.
+ *  For 'libc' functions that return pointers to static/dynamically
+ *  allocated structures (ie.  the library allocates the memory and the
+ *  user is not expected to 'free()' it) any module call to this function
+ *  is likely to corrupt a pointer previously obtained by the application.
+ *  The application programmer should either re-call such a 'libc'
+ *  function after a call to the Linux-PAM library, or copy the structure
+ *  contents to some safe area of memory before passing control to the
+ *  Linux-PAM library.
+ *
+ *  Two important function classes that fall into this category are
+ *  getpwnam(3) and syslog(3).
+ *
+ * This file provide wrapper to the getpwnam or getpwnam_r functions.
+ */
+
+#include <config.h>
+
+#include "shadowio.h"
+
+#define LOOKUP_TYPE    struct spwd
+#define FUNCTION_NAME  getspnam
+#define ARG_TYPE       const char *
+#define ARG_NAME       name
+#define DUP_FUNCTION   __spw_dup
+#define HAVE_FUNCTION_R (defined HAVE_GETSPNAM_R)
+
+#include "xgetXXbyYY.c"
+
diff --git a/libmisc/xmalloc.c b/libmisc/xmalloc.c
new file mode 100644 (file)
index 0000000..45bb786
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+ * Copyright (c) 2003 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Replacements for malloc and strdup with error checking.  Too trivial
+   to be worth copyrighting :-).  I did that because a lot of code used
+   malloc and strdup without checking for NULL pointer, and I like some
+   message better than a core dump...  --marekm
+   
+   Yeh, but.  Remember that bailing out might leave the system in some
+   bizarre state.  You really want to put in error checking, then add
+   some back-out failure recovery code. -- jfh */
+
+#include <config.h>
+
+#ident "$Id: xmalloc.c 2017 2008-05-25 20:39:31Z nekral-guest $"
+
+#include <stdio.h>
+#include "defines.h"
+#include "prototypes.h"
+
+char *xmalloc (size_t size)
+{
+       char *ptr;
+
+       ptr = (char *) malloc (size);
+       if ((NULL == ptr) && (0 != size)) {
+               fprintf (stderr, _("malloc(%d) failed\n"), (int) size);
+               exit (13);
+       }
+       return ptr;
+}
+
+char *xstrdup (const char *str)
+{
+       return strcpy (xmalloc (strlen (str) + 1), str);
+}
diff --git a/libmisc/yesno.c b/libmisc/yesno.c
new file mode 100644 (file)
index 0000000..0605237
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 1992 - 1994, Julianne Frances Haugh
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Common code for yes/no prompting
+ *
+ * Used by pwck.c and grpck.c
+ */
+
+#include <config.h>
+
+#ident "$Id: yesno.c 2765 2009-04-23 11:14:56Z nekral-guest $"
+
+#include <stdio.h>
+#include "prototypes.h"
+
+/*
+ * yes_or_no - get answer to question from the user
+ *
+ *     It returns false if no.
+ *
+ *     If the read_only flag is set, it will print No, and will return
+ *     false.
+ */
+bool yes_or_no (bool read_only)
+{
+       char buf[80];
+
+       /*
+        * In read-only mode all questions are answered "no".
+        */
+       if (read_only) {
+               (void) puts (_("No"));
+               return false;
+       }
+
+       /*
+        * Typically, there's a prompt on stdout, sometimes unflushed.
+        */
+       (void) fflush (stdout);
+
+       /*
+        * Get a line and see what the first character is.
+        */
+       /* TODO: use gettext */
+       if (fgets (buf, (int) sizeof buf, stdin) == buf) {
+               return buf[0] == 'y' || buf[0] == 'Y';
+       }
+
+       return false;
+}
+
diff --git a/ltmain.sh b/ltmain.sh
new file mode 100755 (executable)
index 0000000..3506ead
--- /dev/null
+++ b/ltmain.sh
@@ -0,0 +1,8413 @@
+# Generated from ltmain.m4sh.
+
+# ltmain.sh (GNU libtool) 2.2.6
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+#     --config             show all configuration variables
+#     --debug              enable verbose shell tracing
+# -n, --dry-run            display commands without modifying any files
+#     --features           display basic configuration information and exit
+#     --mode=MODE          use operation mode MODE
+#     --preserve-dup-deps  don't remove duplicate dependency libraries
+#     --quiet, --silent    don't print informational messages
+#     --tag=TAG            use configuration variables from tag TAG
+# -v, --verbose            print informational messages (default)
+#     --version            print version information
+# -h, --help               print short or long help message
+#
+# MODE must be one of the following:
+#
+#       clean              remove files from the build directory
+#       compile            compile a source file into a libtool object
+#       execute            automatically set library path, then run a program
+#       finish             complete the installation of libtool libraries
+#       install            install libraries or executables
+#       link               create a library or an executable
+#       uninstall          remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+#       host-triplet:  $host
+#       shell:         $SHELL
+#       compiler:              $LTCC
+#       compiler flags:                $LTCFLAGS
+#       linker:                $LD (gnu? $with_gnu_ld)
+#       $progname:             (GNU libtool) 2.2.6 Debian-2.2.6a-4
+#       automake:              $automake_version
+#       autoconf:              $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION="2.2.6 Debian-2.2.6a-4"
+TIMESTAMP=""
+package_revision=1.3012
+
+# Be Bourne compatible
+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
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# NLS nuisances: We save the old values to restore during execute mode.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+          save_$lt_var=\$$lt_var
+          $lt_var=C
+         export $lt_var
+         lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+         lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+       fi"
+done
+
+$lt_unset CDPATH
+
+
+
+
+
+: ${CP="cp -f"}
+: ${ECHO="echo"}
+: ${EGREP="/bin/grep -E"}
+: ${FGREP="/bin/grep -F"}
+: ${GREP="/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/bin/sed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77     # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS="  $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# Generated shell functions inserted here.
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+case $progname in
+  -*) progname=./$progname ;;
+esac
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=$func_dirname_result
+     progdir=`cd "$progdir" && pwd`
+     progpath="$progdir/$progname"
+     ;;
+  *)
+     save_IFS="$IFS"
+     IFS=:
+     for progdir in $PATH; do
+       IFS="$save_IFS"
+       test -x "$progdir/$progname" && break
+     done
+     IFS="$save_IFS"
+     test -n "$progdir" || progdir=`pwd`
+     progpath="$progdir/$progname"
+     ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+  s/$bs4/&\\
+/g
+  s/^$bs2$dollar/$bs&/
+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+  s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+    $ECHO "$progname${mode+: }$mode: $*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $opt_verbose && func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+
+    # bash bug again:
+    :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    func_error ${1+"$@"}
+    func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information."  ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    my_directory_path="$1"
+    my_dir_list=
+
+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+      # Protect directory names starting with `-'
+      case $my_directory_path in
+        -*) my_directory_path="./$my_directory_path" ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$my_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+       # list incase some portion of path contains whitespace.
+        my_dir_list="$my_directory_path:$my_dir_list"
+
+        # If the last portion added has no slash in it, the list is done
+        case $my_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+      done
+      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+
+      save_mkdir_p_IFS="$IFS"; IFS=':'
+      for my_dir in $my_dir_list; do
+       IFS="$save_mkdir_p_IFS"
+        # mkdir can fail with a `File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$my_dir" 2>/dev/null || :
+      done
+      IFS="$save_mkdir_p_IFS"
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$my_directory_path" || \
+        func_fatal_error "Failed to create \`$1'"
+    fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$opt_dry_run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+        save_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$my_tmpdir"
+        umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || \
+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+    fi
+
+    $ECHO "X$my_tmpdir" | $Xsed
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+    case $1 in
+      *[\\\`\"\$]*)
+       func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+      *)
+        func_quote_for_eval_unquoted_result="$1" ;;
+    esac
+
+    case $func_quote_for_eval_unquoted_result in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting, command substitution and and variable
+      # expansion for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+        ;;
+      *)
+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+    esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    case $1 in
+      *[\\\`\"]*)
+       my_arg=`$ECHO "X$1" | $Xsed \
+           -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        my_arg="$1" ;;
+    esac
+
+    case $my_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        my_arg="\"$my_arg\""
+        ;;
+    esac
+
+    func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$my_cmd"
+      my_status=$?
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$lt_user_locale
+           $my_cmd"
+      my_status=$?
+      eval "$lt_safe_locale"
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+        s/^# //
+       s/^# *$//
+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+        p
+     }' < "$progpath"
+     exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $SED -n '/^# Usage:/,/# -h/ {
+        s/^# //
+       s/^# *$//
+       s/\$progname/'$progname'/
+       p
+    }' < "$progpath"
+    $ECHO
+    $ECHO "run \`$progname --help | more' for full usage"
+    exit $?
+}
+
+# func_help
+# Echo long help message to standard output and exit.
+func_help ()
+{
+    $SED -n '/^# Usage:/,/# Report bugs to/ {
+        s/^# //
+       s/^# *$//
+       s*\$progname*'$progname'*
+       s*\$host*'"$host"'*
+       s*\$SHELL*'"$SHELL"'*
+       s*\$LTCC*'"$LTCC"'*
+       s*\$LTCFLAGS*'"$LTCFLAGS"'*
+       s*\$LD*'"$LD"'*
+       s/\$with_gnu_ld/'"$with_gnu_ld"'/
+       s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+       s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+       p
+     }' < "$progpath"
+    exit $?
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    func_error "missing argument for $1"
+    exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+# Check that we have a working $ECHO.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell, and then maybe $ECHO will work.
+  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit $EXIT_SUCCESS
+fi
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+# $mode is unset
+nonopt=
+execute_dlfiles=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func_error ${1+"$@"}
+    func_error "See the $PACKAGE documentation for more information."
+    func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+    $ECHO "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      $ECHO "enable shared libraries"
+    else
+      $ECHO "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      $ECHO "enable static libraries"
+    else
+      $ECHO "disable static libraries"
+    fi
+
+    exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+  # Global variable:
+  tagname="$1"
+
+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+  # Validate tagname.
+  case $tagname in
+    *[!-_A-Za-z0-9,/]*)
+      func_fatal_error "invalid tag name: $tagname"
+      ;;
+  esac
+
+  # Don't test for the "default" C tag, as we know it's
+  # there but not specially marked.
+  case $tagname in
+    CC) ;;
+    *)
+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+       taglist="$taglist $tagname"
+
+       # Evaluate the configuration.  Be careful to quote the path
+       # and the sed script, to avoid splitting on whitespace, but
+       # also don't use non-portable quotes within backquotes within
+       # quotes we have to do it in 2 steps:
+       extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+       eval "$extractedcf"
+      else
+       func_error "ignoring unknown tag $tagname"
+      fi
+      ;;
+  esac
+}
+
+# Parse options once, thoroughly.  This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+  # Shorthand for --mode=foo, only valid as the first argument
+  case $1 in
+  clean|clea|cle|cl)
+    shift; set dummy --mode clean ${1+"$@"}; shift
+    ;;
+  compile|compil|compi|comp|com|co|c)
+    shift; set dummy --mode compile ${1+"$@"}; shift
+    ;;
+  execute|execut|execu|exec|exe|ex|e)
+    shift; set dummy --mode execute ${1+"$@"}; shift
+    ;;
+  finish|finis|fini|fin|fi|f)
+    shift; set dummy --mode finish ${1+"$@"}; shift
+    ;;
+  install|instal|insta|inst|ins|in|i)
+    shift; set dummy --mode install ${1+"$@"}; shift
+    ;;
+  link|lin|li|l)
+    shift; set dummy --mode link ${1+"$@"}; shift
+    ;;
+  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+    shift; set dummy --mode uninstall ${1+"$@"}; shift
+    ;;
+  esac
+
+  # Parse non-mode specific arguments:
+  while test "$#" -gt 0; do
+    opt="$1"
+    shift
+
+    case $opt in
+      --config)                func_config                                     ;;
+
+      --debug)         preserve_args="$preserve_args $opt"
+                       func_echo "enabling shell trace mode"
+                       opt_debug='set -x'
+                       $opt_debug
+                       ;;
+
+      -dlopen)         test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       execute_dlfiles="$execute_dlfiles $1"
+                       shift
+                       ;;
+
+      --dry-run | -n)  opt_dry_run=:                                   ;;
+      --features)       func_features                                  ;;
+      --finish)                mode="finish"                                   ;;
+
+      --mode)          test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       case $1 in
+                         # Valid mode arguments:
+                         clean)        ;;
+                         compile)      ;;
+                         execute)      ;;
+                         finish)       ;;
+                         install)      ;;
+                         link)         ;;
+                         relink)       ;;
+                         uninstall)    ;;
+
+                         # Catch anything else as an error
+                         *) func_error "invalid argument for $opt"
+                            exit_cmd=exit
+                            break
+                            ;;
+                       esac
+
+                       mode="$1"
+                       shift
+                       ;;
+
+      --preserve-dup-deps)
+                       opt_duplicate_deps=:                            ;;
+
+      --quiet|--silent)        preserve_args="$preserve_args $opt"
+                       opt_silent=:
+                       ;;
+
+      --verbose| -v)   preserve_args="$preserve_args $opt"
+                       opt_silent=false
+                       ;;
+
+      --tag)           test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       preserve_args="$preserve_args $opt $1"
+                       func_enable_tag "$1"    # tagname is set here
+                       shift
+                       ;;
+
+      # Separate optargs to long options:
+      -dlopen=*|--mode=*|--tag=*)
+                       func_opt_split "$opt"
+                       set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+                       shift
+                       ;;
+
+      -\?|-h)          func_usage                                      ;;
+      --help)          opt_help=:                                      ;;
+      --version)       func_version                                    ;;
+
+      -*)              func_fatal_help "unrecognized option \`$opt'"   ;;
+
+      *)               nonopt="$opt"
+                       break
+                       ;;
+    esac
+  done
+
+
+  case $host in
+    *cygwin* | *mingw* | *pw32* | *cegcc*)
+      # don't eliminate duplications in $postdeps and $predeps
+      opt_duplicate_compiler_generated_deps=:
+      ;;
+    *)
+      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      ;;
+  esac
+
+  # Having warned about all mis-specified options, bail out if
+  # anything was wrong.
+  $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+$opt_help || {
+  # Sanity checks first:
+  func_check_version_match
+
+  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+    func_fatal_configuration "not configured to build any kind of library"
+  fi
+
+  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+  # Darwin sucks
+  eval std_shrext=\"$shrext_cmds\"
+
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    func_error "unrecognized option \`-dlopen'"
+    $ECHO "$help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$progname --help --mode=$mode' for more information."
+}
+
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null \
+        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+       for lalib_p_l in 1 2 3 4
+       do
+           read lalib_p_line
+           case "$lalib_p_line" in
+               \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+           esac
+       done
+       exec 0<&5 5<&-
+    fi
+    test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_ltwrapper_scriptname_result=""
+    if func_ltwrapper_executable_p "$1"; then
+       func_dirname_and_basename "$1" "" "."
+       func_stripname '' '.exe' "$func_basename_result"
+       func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+    fi
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $opt_debug
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$save_ifs
+      eval cmd=\"$cmd\"
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $opt_debug
+    case $1 in
+    */* | *\\*)        . "$1" ;;
+    *)         . "./$1" ;;
+    esac
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $opt_debug
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+        func_quote_for_eval "$arg"
+       CC_quoted="$CC_quoted $func_quote_for_eval_result"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+       for z in $available_tags; do
+         if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+           # Evaluate the configuration.
+           eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+           CC_quoted=
+           for arg in $CC; do
+             # Double-quote args containing other shell metacharacters.
+             func_quote_for_eval "$arg"
+             CC_quoted="$CC_quoted $func_quote_for_eval_result"
+           done
+           case "$@ " in
+             " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+             # The compiler in the base compile command matches
+             # the one in the tagged configuration.
+             # Assume this is the tagged configuration we want.
+             tagname=$z
+             break
+             ;;
+           esac
+         fi
+       done
+       # If $tagname still isn't set, then no tagged configuration
+       # was found and let the user know that the "--tag" command
+       # line option must be used.
+       if test -z "$tagname"; then
+         func_echo "unable to infer tagged configuration"
+         func_fatal_error "specify a tag with \`--tag'"
+#      else
+#        func_verbose "using $tagname tagged configuration"
+       fi
+       ;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=${1}
+    if test "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; then
+      write_oldobj=\'${3}\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "${write_libobj}"
+    }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $opt_debug
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+       # do not "continue".  Instead, add this to base_compile
+       lastarg="$arg"
+       arg_mode=normal
+       ;;
+
+      target )
+       libobj="$arg"
+       arg_mode=normal
+       continue
+       ;;
+
+      normal )
+       # Accept any command-line options.
+       case $arg in
+       -o)
+         test -n "$libobj" && \
+           func_fatal_error "you cannot specify \`-o' more than once"
+         arg_mode=target
+         continue
+         ;;
+
+       -pie | -fpie | -fPIE)
+          pie_flag="$pie_flag $arg"
+         continue
+         ;;
+
+       -shared | -static | -prefer-pic | -prefer-non-pic)
+         later="$later $arg"
+         continue
+         ;;
+
+       -no-suppress)
+         suppress_opt=no
+         continue
+         ;;
+
+       -Xcompiler)
+         arg_mode=arg  #  the next one goes into the "base_compile" arg list
+         continue      #  The current "srcfile" will either be retained or
+         ;;            #  replaced later.  I would guess that would be a bug.
+
+       -Wc,*)
+         func_stripname '-Wc,' '' "$arg"
+         args=$func_stripname_result
+         lastarg=
+         save_ifs="$IFS"; IFS=','
+         for arg in $args; do
+           IFS="$save_ifs"
+           func_quote_for_eval "$arg"
+           lastarg="$lastarg $func_quote_for_eval_result"
+         done
+         IFS="$save_ifs"
+         func_stripname ' ' '' "$lastarg"
+         lastarg=$func_stripname_result
+
+         # Add the arguments to base_compile.
+         base_compile="$base_compile $lastarg"
+         continue
+         ;;
+
+       *)
+         # Accept the current argument as the source file.
+         # The previous "srcfile" becomes the current argument.
+         #
+         lastarg="$srcfile"
+         srcfile="$arg"
+         ;;
+       esac  #  case $arg
+       ;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_quote_for_eval "$lastarg"
+      base_compile="$base_compile $func_quote_for_eval_result"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with \`-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+       func_basename "$srcfile"
+       libobj="$func_basename_result"
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       continue
+       ;;
+
+      -static)
+       build_libtool_libs=no
+       build_old_libs=yes
+       continue
+       ;;
+
+      -prefer-pic)
+       pic_mode=yes
+       continue
+       ;;
+
+      -prefer-non-pic)
+       pic_mode=no
+       continue
+       ;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'   &()|`$[]' \
+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname="$func_basename_result"
+    xdir="$func_dirname_result"
+    lobj=${xdir}$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+       func_echo "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+       $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+      removelist="$removelist $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    removelist="$removelist $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+       command="$base_compile $qsrcfile $pic_flag"
+      else
+       # Don't build PIC code
+       command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+       # Place PIC objects in $objdir
+       command="$command -o $lobj"
+      fi
+
+      func_show_eval_locale "$command" \
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+       func_show_eval '$MV "$output_obj" "$lobj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+       suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+       # Don't build PIC code
+       command="$base_compile $qsrcfile$pie_flag"
+      else
+       command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+       command="$command -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+       func_show_eval '$MV "$output_obj" "$obj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test "$need_locks" != no; then
+       removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+test "$mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
+  -shared           do not build a \`.o' file suitable for static linking
+  -static           only build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode \`$mode'"
+        ;;
+    esac
+
+    $ECHO
+    $ECHO "Try \`$progname --help' for more information about other modes."
+
+    exit $?
+}
+
+  # Now that we've collected a possible --mode arg, show help if necessary
+  $opt_help && func_mode_help
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $opt_debug
+    # The first argument is the command name.
+    cmd="$nonopt"
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      test -f "$file" \
+       || func_fatal_help "\`$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+       # Read the libtool library.
+       dlname=
+       library_names=
+       func_source "$file"
+
+       # Skip this library if it cannot be dlopened.
+       if test -z "$dlname"; then
+         # Warn if it was a shared library.
+         test -n "$library_names" && \
+           func_warning "\`$file' was not linked with \`-export-dynamic'"
+         continue
+       fi
+
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+
+       if test -f "$dir/$objdir/$dlname"; then
+         dir="$dir/$objdir"
+       else
+         if test ! -f "$dir/$dlname"; then
+           func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+         fi
+       fi
+       ;;
+
+      *.lo)
+       # Just add the directory containing the .lo file.
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+       ;;
+
+      *)
+       func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+       continue
+       ;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+       eval "$shlibpath_var=\"\$dir\""
+      else
+       eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -*) ;;
+      *)
+       # Do a test to see if this is really a libtool program.
+       if func_ltwrapper_script_p "$file"; then
+         func_source "$file"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       elif func_ltwrapper_executable_p "$file"; then
+         func_ltwrapper_scriptname "$file"
+         func_source "$func_ltwrapper_scriptname_result"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       fi
+       ;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_quote_for_eval "$file"
+      args="$args $func_quote_for_eval_result"
+    done
+
+    if test "X$opt_dry_run" = Xfalse; then
+      if test -n "$shlibpath_var"; then
+       # Export the shlibpath_var.
+       eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+       eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+             else
+               $lt_unset $lt_var
+             fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+       eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+       $ECHO "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $opt_debug
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+       libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+       if test -n "$finish_cmds"; then
+         # Do each command in the finish commands.
+         func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+       fi
+       if test -n "$finish_eval"; then
+         # Do the single finish_eval.
+         eval cmds=\"$finish_eval\"
+         $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+       $cmds"
+       fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_silent && exit $EXIT_SUCCESS
+
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    $ECHO "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      $ECHO "   $libdir"
+    done
+    $ECHO
+    $ECHO "If you ever happen to want to link against installed libraries"
+    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $ECHO "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      $ECHO "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
+      $ECHO "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      $ECHO "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      $ECHO "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+    fi
+    $ECHO
+
+    $ECHO "See any operating system documentation about shared libraries for"
+    case $host in
+      solaris2.[6789]|solaris2.1[0-9])
+        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+       $ECHO "pages."
+       ;;
+      *)
+        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+        ;;
+    esac
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $opt_debug
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    install_prog="$install_prog$func_quote_for_eval_result"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+       files="$files $dest"
+       dest=$arg
+       continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f)
+       case " $install_prog " in
+       *[\\\ /]cp\ *) ;;
+       *) prev=$arg ;;
+       esac
+       ;;
+      -g | -m | -o)
+       prev=$arg
+       ;;
+      -s)
+       stripme=" -s"
+       continue
+       ;;
+      -*)
+       ;;
+      *)
+       # If the previous option needed an argument, then skip it.
+       if test -n "$prev"; then
+         prev=
+       else
+         dest=$arg
+         continue
+       fi
+       ;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      install_prog="$install_prog $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prev' option requires an argument"
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+       func_fatal_help "no file or destination specified"
+      else
+       func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir="$func_dirname_result"
+      destname="$func_basename_result"
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+       func_fatal_help "\`$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+       case $file in
+       *.lo) ;;
+       *)
+         func_fatal_help "\`$destdir' must be an absolute directory name"
+         ;;
+       esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+       # Do the static libraries later.
+       staticlibs="$staticlibs $file"
+       ;;
+
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$file' is not a valid libtool archive"
+
+       library_names=
+       old_library=
+       relink_command=
+       func_source "$file"
+
+       # Add the libdir to current_libdirs if it is the destination.
+       if test "X$destdir" = "X$libdir"; then
+         case "$current_libdirs " in
+         *" $libdir "*) ;;
+         *) current_libdirs="$current_libdirs $libdir" ;;
+         esac
+       else
+         # Note the libdir as a future libdir.
+         case "$future_libdirs " in
+         *" $libdir "*) ;;
+         *) future_libdirs="$future_libdirs $libdir" ;;
+         esac
+       fi
+
+       func_dirname "$file" "/" ""
+       dir="$func_dirname_result"
+       dir="$dir$objdir"
+
+       if test -n "$relink_command"; then
+         # Determine the prefix the user has applied to our future dir.
+         inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+
+         # Don't allow the user to place us outside of our expected
+         # location b/c this prevents finding dependent libraries that
+         # are installed to the same prefix.
+         # At present, this check doesn't affect windows .dll's that
+         # are installed into $libdir/../bin (currently, that works fine)
+         # but it's something to keep an eye on.
+         test "$inst_prefix_dir" = "$destdir" && \
+           func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+         if test -n "$inst_prefix_dir"; then
+           # Stick the inst_prefix_dir data into the link command.
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+         else
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+         fi
+
+         func_warning "relinking \`$file'"
+         func_show_eval "$relink_command" \
+           'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+       fi
+
+       # See the names of the shared library.
+       set dummy $library_names; shift
+       if test -n "$1"; then
+         realname="$1"
+         shift
+
+         srcname="$realname"
+         test -n "$relink_command" && srcname="$realname"T
+
+         # Install the shared library and build the symlinks.
+         func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+             'exit $?'
+         tstripme="$stripme"
+         case $host_os in
+         cygwin* | mingw* | pw32* | cegcc*)
+           case $realname in
+           *.dll.a)
+             tstripme=""
+             ;;
+           esac
+           ;;
+         esac
+         if test -n "$tstripme" && test -n "$striplib"; then
+           func_show_eval "$striplib $destdir/$realname" 'exit $?'
+         fi
+
+         if test "$#" -gt 0; then
+           # Delete the old symlinks, and create new ones.
+           # Try `ln -sf' first, because the `ln' binary might depend on
+           # the symlink we replace!  Solaris /bin/ln does not understand -f,
+           # so we also need to try rm && ln -s.
+           for linkname
+           do
+             test "$linkname" != "$realname" \
+               && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+           done
+         fi
+
+         # Do each command in the postinstall commands.
+         lib="$destdir/$realname"
+         func_execute_cmds "$postinstall_cmds" 'exit $?'
+       fi
+
+       # Install the pseudo-library for information purposes.
+       func_basename "$file"
+       name="$func_basename_result"
+       instname="$dir/$name"i
+       func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+       # Maybe install the static library, too.
+       test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+       ;;
+
+      *.lo)
+       # Install (i.e. copy) a libtool object.
+
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # Deduce the name of the destination old-style object file.
+       case $destfile in
+       *.lo)
+         func_lo2o "$destfile"
+         staticdest=$func_lo2o_result
+         ;;
+       *.$objext)
+         staticdest="$destfile"
+         destfile=
+         ;;
+       *)
+         func_fatal_help "cannot copy a libtool object to \`$destfile'"
+         ;;
+       esac
+
+       # Install the libtool object if requested.
+       test -n "$destfile" && \
+         func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+       # Install the old object if enabled.
+       if test "$build_old_libs" = yes; then
+         # Deduce the name of the old-style object file.
+         func_lo2o "$file"
+         staticobj=$func_lo2o_result
+         func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+       fi
+       exit $EXIT_SUCCESS
+       ;;
+
+      *)
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # If the file is missing, and there is a .exe on the end, strip it
+       # because it is most likely a libtool script we actually want to
+       # install
+       stripped_ext=""
+       case $file in
+         *.exe)
+           if test ! -f "$file"; then
+             func_stripname '' '.exe' "$file"
+             file=$func_stripname_result
+             stripped_ext=".exe"
+           fi
+           ;;
+       esac
+
+       # Do a test to see if this is really a libtool program.
+       case $host in
+       *cygwin* | *mingw*)
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             wrapper=$func_ltwrapper_scriptname_result
+           else
+             func_stripname '' '.exe' "$file"
+             wrapper=$func_stripname_result
+           fi
+           ;;
+       *)
+           wrapper=$file
+           ;;
+       esac
+       if func_ltwrapper_script_p "$wrapper"; then
+         notinst_deplibs=
+         relink_command=
+
+         func_source "$wrapper"
+
+         # Check the variables that should have been set.
+         test -z "$generated_by_libtool_version" && \
+           func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+         finalize=yes
+         for lib in $notinst_deplibs; do
+           # Check to see that each library is installed.
+           libdir=
+           if test -f "$lib"; then
+             func_source "$lib"
+           fi
+           libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+           if test -n "$libdir" && test ! -f "$libfile"; then
+             func_warning "\`$lib' has not been installed in \`$libdir'"
+             finalize=no
+           fi
+         done
+
+         relink_command=
+         func_source "$wrapper"
+
+         outputname=
+         if test "$fast_install" = no && test -n "$relink_command"; then
+           $opt_dry_run || {
+             if test "$finalize" = yes; then
+               tmpdir=`func_mktempdir`
+               func_basename "$file$stripped_ext"
+               file="$func_basename_result"
+               outputname="$tmpdir/$file"
+               # Replace the output file specification.
+               relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+               $opt_silent || {
+                 func_quote_for_expand "$relink_command"
+                 eval "func_echo $func_quote_for_expand_result"
+               }
+               if eval "$relink_command"; then :
+                 else
+                 func_error "error: relink \`$file' with the above command before installing it"
+                 $opt_dry_run || ${RM}r "$tmpdir"
+                 continue
+               fi
+               file="$outputname"
+             else
+               func_warning "cannot relink \`$file'"
+             fi
+           }
+         else
+           # Install the binary that we compiled earlier.
+           file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+         fi
+       fi
+
+       # remove .exe since cygwin /usr/bin/install will append another
+       # one anyway
+       case $install_prog,$host in
+       */usr/bin/install*,*cygwin*)
+         case $file:$destfile in
+         *.exe:*.exe)
+           # this is ok
+           ;;
+         *.exe:*)
+           destfile=$destfile.exe
+           ;;
+         *:*.exe)
+           func_stripname '' '.exe' "$destfile"
+           destfile=$func_stripname_result
+           ;;
+         esac
+         ;;
+       esac
+       func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+       $opt_dry_run || if test -n "$outputname"; then
+         ${RM}r "$tmpdir"
+       fi
+       ;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name="$func_basename_result"
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+       func_show_eval "$old_striplib $oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $opt_debug
+    my_outputname="$1"
+    my_originator="$2"
+    my_pic_p="${3-no}"
+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+       my_dlsyms="${my_outputname}S.c"
+      else
+       func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+       # Discover the nlist of each of the dlfiles.
+       nlist="$output_objdir/${my_outputname}.nm"
+
+       func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+       # Parse the name list into a source file.
+       func_verbose "creating $output_objdir/$my_dlsyms"
+
+       $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+       if test "$dlself" = yes; then
+         func_verbose "generating symbol list for \`$output'"
+
+         $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+         # Add our own program objects to the symbol list.
+         progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+         for progfile in $progfiles; do
+           func_verbose "extracting global C symbols from \`$progfile'"
+           $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+         done
+
+         if test -n "$exclude_expsyms"; then
+           $opt_dry_run || {
+             eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         if test -n "$export_symbols_regex"; then
+           $opt_dry_run || {
+             eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         # Prepare the list of exported symbols
+         if test -z "$export_symbols"; then
+           export_symbols="$output_objdir/$outputname.exp"
+           $opt_dry_run || {
+             $RM $export_symbols
+             eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+             case $host in
+             *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+               ;;
+             esac
+           }
+         else
+           $opt_dry_run || {
+             eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+             eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+             case $host in
+               *cygwin | *mingw* | *cegcc* )
+                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                 eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+                 ;;
+             esac
+           }
+         fi
+       fi
+
+       for dlprefile in $dlprefiles; do
+         func_verbose "extracting global C symbols from \`$dlprefile'"
+         func_basename "$dlprefile"
+         name="$func_basename_result"
+         $opt_dry_run || {
+           eval '$ECHO ": $name " >> "$nlist"'
+           eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+         }
+       done
+
+       $opt_dry_run || {
+         # Make sure we have at least an empty file.
+         test -f "$nlist" || : > "$nlist"
+
+         if test -n "$exclude_expsyms"; then
+           $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+           $MV "$nlist"T "$nlist"
+         fi
+
+         # Try sorting and uniquifying the output.
+         if $GREP -v "^: " < "$nlist" |
+             if sort -k 3 </dev/null >/dev/null 2>&1; then
+               sort -k 3
+             else
+               sort +2
+             fi |
+             uniq > "$nlist"S; then
+           :
+         else
+           $GREP -v "^: " < "$nlist" > "$nlist"S
+         fi
+
+         if test -f "$nlist"S; then
+           eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+         else
+           $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+         fi
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+"
+         case $host in
+         *cygwin* | *mingw* | *cegcc* )
+           $ECHO >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+   runtime relocations are performed -- see ld's documentation
+   on pseudo-relocs.  */"
+           lt_dlsym_const= ;;
+         *osf5*)
+           echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+           lt_dlsym_const= ;;
+         *)
+           lt_dlsym_const=const ;;
+         esac
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+  { \"$my_originator\", (void *) 0 },"
+
+         case $need_lib_prefix in
+         no)
+           eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         *)
+           eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         esac
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+       } # !$opt_dry_run
+
+       pic_flag_for_symtable=
+       case "$compile_command " in
+       *" -static "*) ;;
+       *)
+         case $host in
+         # compiling the symbol table file with pic_flag works around
+         # a FreeBSD bug that causes programs to crash when -lm is
+         # linked before any other PIC object.  But we must not use
+         # pic_flag when linking with -static.  The problem exists in
+         # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+         *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+           pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+         *-*-hpux*)
+           pic_flag_for_symtable=" $pic_flag"  ;;
+         *)
+           if test "X$my_pic_p" != Xno; then
+             pic_flag_for_symtable=" $pic_flag"
+           fi
+           ;;
+         esac
+         ;;
+       esac
+       symtab_cflags=
+       for arg in $LTCFLAGS; do
+         case $arg in
+         -pie | -fpie | -fPIE) ;;
+         *) symtab_cflags="$symtab_cflags $arg" ;;
+         esac
+       done
+
+       # Now compile the dynamic symbol file.
+       func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+       # Clean up the generated files.
+       func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+       # Transform the symbol file into the correct name.
+       symfileobj="$output_objdir/${my_outputname}S.$objext"
+       case $host in
+       *cygwin* | *mingw* | *cegcc* )
+         if test -f "$output_objdir/$my_outputname.def"; then
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+         else
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         fi
+         ;;
+       *)
+         compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         ;;
+       esac
+       ;;
+      *)
+       func_fatal_error "unknown suffix for \`$my_dlsyms'"
+       ;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+  $opt_debug
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 |
+       $SED -n -e '
+           1,100{
+               / I /{
+                   s,.*,import,
+                   p
+                   q
+               }
+           }'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $opt_debug
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $opt_debug
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+       [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+       *) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib="$func_basename_result"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+       *" $my_xlib_u "*)
+         func_arith $extracted_serial + 1
+         extracted_serial=$func_arith_result
+         my_xlib_u=lt$extracted_serial-$my_xlib ;;
+       *) break ;;
+       esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+       func_verbose "Extracting $my_xabs"
+       # Do not bother doing anything if just a dry run
+       $opt_dry_run || {
+         darwin_orig_dir=`pwd`
+         cd $my_xdir || exit $?
+         darwin_archive=$my_xabs
+         darwin_curdir=`pwd`
+         darwin_base_archive=`basename "$darwin_archive"`
+         darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+         if test -n "$darwin_arches"; then
+           darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+           darwin_arch=
+           func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+           for darwin_arch in  $darwin_arches ; do
+             func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+             cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+             cd "$darwin_curdir"
+             $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+           done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+           darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+           darwin_file=
+           darwin_files=
+           for darwin_file in $darwin_filelist; do
+             darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+             $LIPO -create -output "$darwin_file" $darwin_files
+           done # $darwin_filelist
+           $RM -rf unfat-$$
+           cd "$darwin_orig_dir"
+         else
+           cd $darwin_orig_dir
+           func_extract_an_archive "$my_xdir" "$my_xabs"
+         fi # $darwin_arches
+       } # !$opt_dry_run
+       ;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+       ;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+    done
+
+    func_extract_archives_result="$my_oldobjs"
+}
+
+
+
+# func_emit_wrapper_part1 [arg=no]
+#
+# Emit the first part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part1 ()
+{
+       func_emit_wrapper_part1_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_part1_arg1=$1
+       fi
+
+       $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+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
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    ECHO=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$ECHO works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$ECHO will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+       $ECHO "\
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+  done
+"
+}
+# end: func_emit_wrapper_part1
+
+# func_emit_wrapper_part2 [arg=no]
+#
+# Emit the second part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part2 ()
+{
+       func_emit_wrapper_part2_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_part2_arg1=$1
+       fi
+
+       $ECHO "\
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+       if test "$fast_install" = yes; then
+         $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+         $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+       $ECHO \"\$relink_command_output\" >&2
+       $RM \"\$progdir/\$file\"
+       exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+       else
+         $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+       fi
+
+       $ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+       # Export our shlibpath_var if we have one.
+       if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+         $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+       fi
+
+       # fixup the dll searchpath if we need to.
+       if test -n "$dllsearchpath"; then
+         $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+       fi
+
+       $ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+       case $host in
+       # Backslashes separate directories on plain windows
+       *-*-mingw | *-*-os2* | *-cegcc*)
+         $ECHO "\
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+         ;;
+
+       *)
+         $ECHO "\
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+         ;;
+       esac
+       $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+# end: func_emit_wrapper_part2
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+       func_emit_wrapper_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_arg1=$1
+       fi
+
+       # split this up so that func_emit_cwrapperexe_src
+       # can call each part independently.
+       func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
+       func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
+}
+
+
+# func_to_host_path arg
+#
+# Convert paths to host format when used with build tools.
+# Intended for use with "native" mingw (where libtool itself
+# is running under the msys shell), or in the following cross-
+# build environments:
+#    $build          $host
+#    mingw (msys)    mingw  [e.g. native]
+#    cygwin          mingw
+#    *nix + wine     mingw
+# where wine is equipped with the `winepath' executable.
+# In the native mingw case, the (msys) shell automatically
+# converts paths for any non-msys applications it launches,
+# but that facility isn't available from inside the cwrapper.
+# Similar accommodations are necessary for $host mingw and
+# $build cygwin.  Calling this function does no harm for other
+# $host/$build combinations not listed above.
+#
+# ARG is the path (on $build) that should be converted to
+# the proper representation for $host. The result is stored
+# in $func_to_host_path_result.
+func_to_host_path ()
+{
+  func_to_host_path_result="$1"
+  if test -n "$1" ; then
+    case $host in
+      *mingw* )
+        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+        case $build in
+          *mingw* ) # actually, msys
+            # awkward: cmd appends spaces to result
+            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
+              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          *cygwin* )
+            func_to_host_path_tmp1=`cygpath -w "$1"`
+            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          * )
+            # Unfortunately, winepath does not exit with a non-zero
+            # error code, so we are forced to check the contents of
+            # stdout. On the other hand, if the command is not
+            # found, the shell will set an exit code of 127 and print
+            # *an error message* to stdout. So we must check for both
+            # error code of zero AND non-empty stdout, which explains
+            # the odd construction:
+            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
+            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
+              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+                $SED -e "$lt_sed_naive_backslashify"`
+            else
+              # Allow warning below.
+              func_to_host_path_result=""
+            fi
+            ;;
+        esac
+        if test -z "$func_to_host_path_result" ; then
+          func_error "Could not determine host path corresponding to"
+          func_error "  '$1'"
+          func_error "Continuing, but uninstalled executables may not work."
+          # Fallback:
+          func_to_host_path_result="$1"
+        fi
+        ;;
+    esac
+  fi
+}
+# end: func_to_host_path
+
+# func_to_host_pathlist arg
+#
+# Convert pathlists to host format when used with build tools.
+# See func_to_host_path(), above. This function supports the
+# following $build/$host combinations (but does no harm for
+# combinations not listed here):
+#    $build          $host
+#    mingw (msys)    mingw  [e.g. native]
+#    cygwin          mingw
+#    *nix + wine     mingw
+#
+# Path separators are also converted from $build format to
+# $host format. If ARG begins or ends with a path separator
+# character, it is preserved (but converted to $host format)
+# on output.
+#
+# ARG is a pathlist (on $build) that should be converted to
+# the proper representation on $host. The result is stored
+# in $func_to_host_pathlist_result.
+func_to_host_pathlist ()
+{
+  func_to_host_pathlist_result="$1"
+  if test -n "$1" ; then
+    case $host in
+      *mingw* )
+        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+        # Remove leading and trailing path separator characters from
+        # ARG. msys behavior is inconsistent here, cygpath turns them
+        # into '.;' and ';.', and winepath ignores them completely.
+        func_to_host_pathlist_tmp2="$1"
+        # Once set for this call, this variable should not be
+        # reassigned. It is used in tha fallback case.
+        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
+          $SED -e 's|^:*||' -e 's|:*$||'`
+        case $build in
+          *mingw* ) # Actually, msys.
+            # Awkward: cmd appends spaces to result.
+            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
+              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          *cygwin* )
+            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
+            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          * )
+            # unfortunately, winepath doesn't convert pathlists
+            func_to_host_pathlist_result=""
+            func_to_host_pathlist_oldIFS=$IFS
+            IFS=:
+            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
+              IFS=$func_to_host_pathlist_oldIFS
+              if test -n "$func_to_host_pathlist_f" ; then
+                func_to_host_path "$func_to_host_pathlist_f"
+                if test -n "$func_to_host_path_result" ; then
+                  if test -z "$func_to_host_pathlist_result" ; then
+                    func_to_host_pathlist_result="$func_to_host_path_result"
+                  else
+                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
+                  fi
+                fi
+              fi
+              IFS=:
+            done
+            IFS=$func_to_host_pathlist_oldIFS
+            ;;
+        esac
+        if test -z "$func_to_host_pathlist_result" ; then
+          func_error "Could not determine the host path(s) corresponding to"
+          func_error "  '$1'"
+          func_error "Continuing, but uninstalled executables may not work."
+          # Fallback. This may break if $1 contains DOS-style drive
+          # specifications. The fix is not to complicate the expression
+          # below, but for the user to provide a working wine installation
+          # with winepath so that path translation in the cross-to-mingw
+          # case works properly.
+          lt_replace_pathsep_nix_to_dos="s|:|;|g"
+          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
+            $SED -e "$lt_replace_pathsep_nix_to_dos"`
+        fi
+        # Now, add the leading and trailing path separators back
+        case "$1" in
+          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
+            ;;
+        esac
+        case "$1" in
+          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
+            ;;
+        esac
+        ;;
+    esac
+  fi
+}
+# end: func_to_host_pathlist
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+       cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "$SHELL $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+           cat <<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+# define setmode _setmode
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+#  define HAVE_SETENV
+#  ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+#  endif
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+#ifdef _MSC_VER
+# define S_IXUSR _S_IEXEC
+# define stat _stat
+# ifndef _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+       (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifdef __CYGWIN__
+# define FOPEN_WB "wb"
+#endif
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#undef LTWRAPPER_DEBUGPRINTF
+#if defined DEBUGWRAPPER
+# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+static void
+ltwrapper_debugprintf (const char *fmt, ...)
+{
+    va_list args;
+    va_start (args, fmt);
+    (void) vfprintf (stderr, fmt, args);
+    va_end (args);
+}
+#else
+# define LTWRAPPER_DEBUGPRINTF(args)
+#endif
+
+const char *program_name = NULL;
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_opt_process_env_set (const char *arg);
+void lt_opt_process_env_prepend (const char *arg);
+void lt_opt_process_env_append (const char *arg);
+int lt_split_name_value (const char *arg, char** name, char** value);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+
+static const char *script_text_part1 =
+EOF
+
+           func_emit_wrapper_part1 yes |
+               $SED -e 's/\([\\"]\)/\\\1/g' \
+                    -e 's/^/  "/' -e 's/$/\\n"/'
+           echo ";"
+           cat <<EOF
+
+static const char *script_text_part2 =
+EOF
+           func_emit_wrapper_part2 yes |
+               $SED -e 's/\([\\"]\)/\\\1/g' \
+                    -e 's/^/  "/' -e 's/$/\\n"/'
+           echo ";"
+
+           cat <<EOF
+const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+           if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_pathlist "$temp_rpath"
+             cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
+EOF
+           else
+             cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test -n "$dllsearchpath"; then
+              func_to_host_pathlist "$dllsearchpath:"
+             cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
+EOF
+           else
+             cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test "$fast_install" = yes; then
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+           else
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+           fi
+
+
+           cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
+
+static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+
+static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
+static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
+  /* argument is putenv-style "foo=bar", value of foo is set to bar */
+
+static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
+static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
+  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
+
+static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
+static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
+  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  intptr_t rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+
+  /* very simple arg parsing; don't want to rely on getopt */
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], dumpscript_opt) == 0)
+       {
+EOF
+           case "$host" in
+             *mingw* | *cygwin* )
+               # make stdout use "unix" line endings
+               echo "          setmode(1,_O_BINARY);"
+               ;;
+             esac
+
+           cat <<"EOF"
+         printf ("%s", script_text_part1);
+         printf ("%s", script_text_part2);
+         return 0;
+       }
+    }
+
+  newargz = XMALLOC (char *, argc + 1);
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal ("Couldn't find %s", argv[0]);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+                         tmp_pathspec));
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+                         actual_cwrapper_path));
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
+                         target_name));
+EOF
+
+           cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+                   strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+           cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+           case $host_os in
+             mingw*)
+           cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+       *p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+       *p = '/';
+      }
+  }
+EOF
+           ;;
+           esac
+
+           cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
+        {
+          if (argv[i][env_set_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_set_opt_len + 1;
+              lt_opt_process_env_set (p);
+            }
+          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_set (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_set_opt);
+          continue;
+        }
+      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
+        {
+          if (argv[i][env_prepend_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_prepend_opt_len + 1;
+              lt_opt_process_env_prepend (p);
+            }
+          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_prepend_opt);
+          continue;
+        }
+      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
+        {
+          if (argv[i][env_append_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_append_opt_len + 1;
+              lt_opt_process_env_append (p);
+            }
+          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_append (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_append_opt);
+          continue;
+        }
+      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal ("Unrecognized option in %s namespace: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+  for (i = 0; i < newargc; i++)
+    {
+      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+    }
+
+EOF
+
+           case $host_os in
+             mingw*)
+               cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+      return 127;
+    }
+  return rval;
+EOF
+               ;;
+             *)
+               cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+               ;;
+           esac
+
+           cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+                         string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char *concat_name;
+
+  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
+                         wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+       return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+       {
+         concat_name = xstrdup (wrapper);
+         if (check_executable (concat_name))
+           return concat_name;
+         XFREE (concat_name);
+       }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+       has_slash = 1;
+       break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+       {
+         for (p = path; *p; p = p_next)
+           {
+             const char *q;
+             size_t p_len;
+             for (q = p; *q; q++)
+               if (IS_PATH_SEPARATOR (*q))
+                 break;
+             p_len = q - p;
+             p_next = (*q == '\0' ? q : q + 1);
+             if (p_len == 0)
+               {
+                 /* empty path: current directory */
+                 if (getcwd (tmp, LT_PATHMAX) == NULL)
+                   lt_fatal ("getcwd failed");
+                 tmp_len = strlen (tmp);
+                 concat_name =
+                   XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, tmp, tmp_len);
+                 concat_name[tmp_len] = '/';
+                 strcpy (concat_name + tmp_len + 1, wrapper);
+               }
+             else
+               {
+                 concat_name =
+                   XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, p, p_len);
+                 concat_name[p_len] = '/';
+                 strcpy (concat_name + p_len + 1, wrapper);
+               }
+             if (check_executable (concat_name))
+               return concat_name;
+             XFREE (concat_name);
+           }
+       }
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+                             tmp_pathspec));
+      if (lstat (tmp_pathspec, &s) == 0)
+       {
+         if (S_ISLNK (s.st_mode) != 0)
+           {
+             has_symlinks = 1;
+             break;
+           }
+
+         /* search backwards for last DIR_SEPARATOR */
+         p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+         while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           p--;
+         if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           {
+             /* no more DIR_SEPARATORS left */
+             break;
+           }
+         *p = '\0';
+       }
+      else
+       {
+         char *errstr = strerror (errno);
+         lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+       }
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal ("Could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (strcmp (str, pat) == 0)
+       *str = '\0';
+    }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char *mode,
+              const char *message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    int len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      int orig_value_len = strlen (orig_value);
+      int add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+int
+lt_split_name_value (const char *arg, char** name, char** value)
+{
+  const char *p;
+  int len;
+  if (!arg || !*arg)
+    return 1;
+
+  p = strchr (arg, (int)'=');
+
+  if (!p)
+    return 1;
+
+  *value = xstrdup (++p);
+
+  len = strlen (arg) - strlen (*value);
+  *name = XMALLOC (char, len);
+  strncpy (*name, arg, len-1);
+  (*name)[len - 1] = '\0';
+
+  return 0;
+}
+
+void
+lt_opt_process_env_set (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
+    }
+
+  lt_setenv (name, value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_opt_process_env_prepend (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+  char *new_value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
+    }
+
+  new_value = lt_extend_str (getenv (name), value, 0);
+  lt_setenv (name, new_value);
+  XFREE (new_value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_opt_process_env_append (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+  char *new_value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
+    }
+
+  new_value = lt_extend_str (getenv (name), value, 1);
+  lt_setenv (name, new_value);
+  XFREE (new_value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      int len = strlen (new_value);
+      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[len-1] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $opt_debug
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module="${wl}-single_module"
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       break
+       ;;
+      -all-static | -static | -static-libtool-libs)
+       case $arg in
+       -all-static)
+         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+           func_warning "complete static linking is impossible in this configuration"
+         fi
+         if test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       -static)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=built
+         ;;
+       -static-libtool-libs)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       esac
+       build_libtool_libs=no
+       build_old_libs=yes
+       break
+       ;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+       case $prev in
+       output)
+         func_append compile_command " @OUTPUT@"
+         func_append finalize_command " @OUTPUT@"
+         ;;
+       esac
+
+       case $prev in
+       dlfiles|dlprefiles)
+         if test "$preload" = no; then
+           # Add the symbol object into the linking commands.
+           func_append compile_command " @SYMFILE@"
+           func_append finalize_command " @SYMFILE@"
+           preload=yes
+         fi
+         case $arg in
+         *.la | *.lo) ;;  # We handle these cases below.
+         force)
+           if test "$dlself" = no; then
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         self)
+           if test "$prev" = dlprefiles; then
+             dlself=yes
+           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+             dlself=yes
+           else
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         *)
+           if test "$prev" = dlfiles; then
+             dlfiles="$dlfiles $arg"
+           else
+             dlprefiles="$dlprefiles $arg"
+           fi
+           prev=
+           continue
+           ;;
+         esac
+         ;;
+       expsyms)
+         export_symbols="$arg"
+         test -f "$arg" \
+           || func_fatal_error "symbol file \`$arg' does not exist"
+         prev=
+         continue
+         ;;
+       expsyms_regex)
+         export_symbols_regex="$arg"
+         prev=
+         continue
+         ;;
+       framework)
+         case $host in
+           *-*-darwin*)
+             case "$deplibs " in
+               *" $qarg.ltframework "*) ;;
+               *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+                  ;;
+             esac
+             ;;
+         esac
+         prev=
+         continue
+         ;;
+       inst_prefix)
+         inst_prefix_dir="$arg"
+         prev=
+         continue
+         ;;
+       objectlist)
+         if test -f "$arg"; then
+           save_arg=$arg
+           moreargs=
+           for fil in `cat "$save_arg"`
+           do
+#            moreargs="$moreargs $fil"
+             arg=$fil
+             # A libtool-controlled object.
+
+             # Check to see that this really is a libtool object.
+             if func_lalib_unsafe_p "$arg"; then
+               pic_object=
+               non_pic_object=
+
+               # Read the .lo file
+               func_source "$arg"
+
+               if test -z "$pic_object" ||
+                  test -z "$non_pic_object" ||
+                  test "$pic_object" = none &&
+                  test "$non_pic_object" = none; then
+                 func_fatal_error "cannot find name of object for \`$arg'"
+               fi
+
+               # Extract subdirectory from the argument.
+               func_dirname "$arg" "/" ""
+               xdir="$func_dirname_result"
+
+               if test "$pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 pic_object="$xdir$pic_object"
+
+                 if test "$prev" = dlfiles; then
+                   if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+                     dlfiles="$dlfiles $pic_object"
+                     prev=
+                     continue
+                   else
+                     # If libtool objects are unsupported, then we need to preload.
+                     prev=dlprefiles
+                   fi
+                 fi
+
+                 # CHECK ME:  I think I busted this.  -Ossama
+                 if test "$prev" = dlprefiles; then
+                   # Preload the old-style object.
+                   dlprefiles="$dlprefiles $pic_object"
+                   prev=
+                 fi
+
+                 # A PIC object.
+                 func_append libobjs " $pic_object"
+                 arg="$pic_object"
+               fi
+
+               # Non-PIC object.
+               if test "$non_pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 non_pic_object="$xdir$non_pic_object"
+
+                 # A standard non-PIC object
+                 func_append non_pic_objects " $non_pic_object"
+                 if test -z "$pic_object" || test "$pic_object" = none ; then
+                   arg="$non_pic_object"
+                 fi
+               else
+                 # If the PIC object exists, use it instead.
+                 # $xdir was prepended to $pic_object above.
+                 non_pic_object="$pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               fi
+             else
+               # Only an error if not doing a dry-run.
+               if $opt_dry_run; then
+                 # Extract subdirectory from the argument.
+                 func_dirname "$arg" "/" ""
+                 xdir="$func_dirname_result"
+
+                 func_lo2o "$arg"
+                 pic_object=$xdir$objdir/$func_lo2o_result
+                 non_pic_object=$xdir$func_lo2o_result
+                 func_append libobjs " $pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               else
+                 func_fatal_error "\`$arg' is not a valid libtool object"
+               fi
+             fi
+           done
+         else
+           func_fatal_error "link input file \`$arg' does not exist"
+         fi
+         arg=$save_arg
+         prev=
+         continue
+         ;;
+       precious_regex)
+         precious_files_regex="$arg"
+         prev=
+         continue
+         ;;
+       release)
+         release="-$arg"
+         prev=
+         continue
+         ;;
+       rpath | xrpath)
+         # We need an absolute path.
+         case $arg in
+         [\\/]* | [A-Za-z]:[\\/]*) ;;
+         *)
+           func_fatal_error "only absolute run-paths are allowed"
+           ;;
+         esac
+         if test "$prev" = rpath; then
+           case "$rpath " in
+           *" $arg "*) ;;
+           *) rpath="$rpath $arg" ;;
+           esac
+         else
+           case "$xrpath " in
+           *" $arg "*) ;;
+           *) xrpath="$xrpath $arg" ;;
+           esac
+         fi
+         prev=
+         continue
+         ;;
+       shrext)
+         shrext_cmds="$arg"
+         prev=
+         continue
+         ;;
+       weak)
+         weak_libs="$weak_libs $arg"
+         prev=
+         continue
+         ;;
+       xcclinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xcompiler)
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xlinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $wl$qarg"
+         prev=
+         func_append compile_command " $wl$qarg"
+         func_append finalize_command " $wl$qarg"
+         continue
+         ;;
+       *)
+         eval "$prev=\"\$arg\""
+         prev=
+         continue
+         ;;
+       esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+       if test -n "$link_static_flag"; then
+         # See comment for -static flag below, for more details.
+         func_append compile_command " $link_static_flag"
+         func_append finalize_command " $link_static_flag"
+       fi
+       continue
+       ;;
+
+      -allow-undefined)
+       # FIXME: remove this flag sometime in the future.
+       func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+       ;;
+
+      -avoid-version)
+       avoid_version=yes
+       continue
+       ;;
+
+      -dlopen)
+       prev=dlfiles
+       continue
+       ;;
+
+      -dlpreopen)
+       prev=dlprefiles
+       continue
+       ;;
+
+      -export-dynamic)
+       export_dynamic=yes
+       continue
+       ;;
+
+      -export-symbols | -export-symbols-regex)
+       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+         func_fatal_error "more than one -exported-symbols argument is not allowed"
+       fi
+       if test "X$arg" = "X-export-symbols"; then
+         prev=expsyms
+       else
+         prev=expsyms_regex
+       fi
+       continue
+       ;;
+
+      -framework)
+       prev=framework
+       continue
+       ;;
+
+      -inst-prefix-dir)
+       prev=inst_prefix
+       continue
+       ;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+       case $with_gcc/$host in
+       no/*-*-irix* | /*-*-irix*)
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+         ;;
+       esac
+       continue
+       ;;
+
+      -L*)
+       func_stripname '-L' '' "$arg"
+       dir=$func_stripname_result
+       if test -z "$dir"; then
+         if test "$#" -gt 0; then
+           func_fatal_error "require no space between \`-L' and \`$1'"
+         else
+           func_fatal_error "need path for \`-L' option"
+         fi
+       fi
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         absdir=`cd "$dir" && pwd`
+         test -z "$absdir" && \
+           func_fatal_error "cannot determine absolute directory name of \`$dir'"
+         dir="$absdir"
+         ;;
+       esac
+       case "$deplibs " in
+       *" -L$dir "*) ;;
+       *)
+         deplibs="$deplibs -L$dir"
+         lib_search_path="$lib_search_path $dir"
+         ;;
+       esac
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$dir:"*) ;;
+         ::) dllsearchpath=$dir;;
+         *) dllsearchpath="$dllsearchpath:$dir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+       continue
+       ;;
+
+      -l*)
+       if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+           # These systems don't actually have a C or math library (as such)
+           continue
+           ;;
+         *-*-os2*)
+           # These systems don't actually have a C library (as such)
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C and math libraries are in the System framework
+           deplibs="$deplibs System.ltframework"
+           continue
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           test "X$arg" = "X-lc" && continue
+           ;;
+         esac
+       elif test "X$arg" = "X-lc_r"; then
+        case $host in
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+          # Do not include libc_r directly, use -pthread flag.
+          continue
+          ;;
+        esac
+       fi
+       deplibs="$deplibs $arg"
+       continue
+       ;;
+
+      -module)
+       module=yes
+       continue
+       ;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       prev=xcompiler
+       continue
+       ;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       case "$new_inherited_linker_flags " in
+           *" $arg "*) ;;
+           * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+       esac
+       continue
+       ;;
+
+      -multi_module)
+       single_module="${wl}-multi_module"
+       continue
+       ;;
+
+      -no-fast-install)
+       fast_install=no
+       continue
+       ;;
+
+      -no-install)
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+         # The PATH hackery in wrapper scripts is required on Windows
+         # and Darwin in order for the loader to find any dlls it needs.
+         func_warning "\`-no-install' is ignored for $host"
+         func_warning "assuming \`-no-fast-install' instead"
+         fast_install=no
+         ;;
+       *) no_install=yes ;;
+       esac
+       continue
+       ;;
+
+      -no-undefined)
+       allow_undefined=no
+       continue
+       ;;
+
+      -objectlist)
+       prev=objectlist
+       continue
+       ;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+       prev=precious_regex
+       continue
+       ;;
+
+      -release)
+       prev=release
+       continue
+       ;;
+
+      -rpath)
+       prev=rpath
+       continue
+       ;;
+
+      -R)
+       prev=xrpath
+       continue
+       ;;
+
+      -R*)
+       func_stripname '-R' '' "$arg"
+       dir=$func_stripname_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         func_fatal_error "only absolute run-paths are allowed"
+         ;;
+       esac
+       case "$xrpath " in
+       *" $dir "*) ;;
+       *) xrpath="$xrpath $dir" ;;
+       esac
+       continue
+       ;;
+
+      -shared)
+       # The effects of -shared are defined in a previous loop.
+       continue
+       ;;
+
+      -shrext)
+       prev=shrext
+       continue
+       ;;
+
+      -static | -static-libtool-libs)
+       # The effects of -static are defined in a previous loop.
+       # We used to do the same as -all-static on platforms that
+       # didn't have a PIC flag, but the assumption that the effects
+       # would be equivalent was wrong.  It would break on at least
+       # Digital Unix and AIX.
+       continue
+       ;;
+
+      -thread-safe)
+       thread_safe=yes
+       continue
+       ;;
+
+      -version-info)
+       prev=vinfo
+       continue
+       ;;
+
+      -version-number)
+       prev=vinfo
+       vinfo_number=yes
+       continue
+       ;;
+
+      -weak)
+        prev=weak
+       continue
+       ;;
+
+      -Wc,*)
+       func_stripname '-Wc,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Wl,*)
+       func_stripname '-Wl,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+         linker_flags="$linker_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Xcompiler)
+       prev=xcompiler
+       continue
+       ;;
+
+      -Xlinker)
+       prev=xlinker
+       continue
+       ;;
+
+      -XCClinker)
+       prev=xcclinker
+       continue
+       ;;
+
+      # -msg_* for osf cc
+      -msg_*)
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+      # -r[0-9][0-9]* specifies the processor on the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+      # +DA*, +DD* enable 64-bit mode on the HP compiler
+      # -q* pass through compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* pass through architecture-specific
+      # compiler args for GCC
+      # -F/path gives path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+      # @file GCC response files
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        compiler_flags="$compiler_flags $arg"
+        continue
+        ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      *.$objext)
+       # A standard object.
+       objs="$objs $arg"
+       ;;
+
+      *.lo)
+       # A libtool-controlled object.
+
+       # Check to see that this really is a libtool object.
+       if func_lalib_unsafe_p "$arg"; then
+         pic_object=
+         non_pic_object=
+
+         # Read the .lo file
+         func_source "$arg"
+
+         if test -z "$pic_object" ||
+            test -z "$non_pic_object" ||
+            test "$pic_object" = none &&
+            test "$non_pic_object" = none; then
+           func_fatal_error "cannot find name of object for \`$arg'"
+         fi
+
+         # Extract subdirectory from the argument.
+         func_dirname "$arg" "/" ""
+         xdir="$func_dirname_result"
+
+         if test "$pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           pic_object="$xdir$pic_object"
+
+           if test "$prev" = dlfiles; then
+             if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+               dlfiles="$dlfiles $pic_object"
+               prev=
+               continue
+             else
+               # If libtool objects are unsupported, then we need to preload.
+               prev=dlprefiles
+             fi
+           fi
+
+           # CHECK ME:  I think I busted this.  -Ossama
+           if test "$prev" = dlprefiles; then
+             # Preload the old-style object.
+             dlprefiles="$dlprefiles $pic_object"
+             prev=
+           fi
+
+           # A PIC object.
+           func_append libobjs " $pic_object"
+           arg="$pic_object"
+         fi
+
+         # Non-PIC object.
+         if test "$non_pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           non_pic_object="$xdir$non_pic_object"
+
+           # A standard non-PIC object
+           func_append non_pic_objects " $non_pic_object"
+           if test -z "$pic_object" || test "$pic_object" = none ; then
+             arg="$non_pic_object"
+           fi
+         else
+           # If the PIC object exists, use it instead.
+           # $xdir was prepended to $pic_object above.
+           non_pic_object="$pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         fi
+       else
+         # Only an error if not doing a dry-run.
+         if $opt_dry_run; then
+           # Extract subdirectory from the argument.
+           func_dirname "$arg" "/" ""
+           xdir="$func_dirname_result"
+
+           func_lo2o "$arg"
+           pic_object=$xdir$objdir/$func_lo2o_result
+           non_pic_object=$xdir$func_lo2o_result
+           func_append libobjs " $pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         else
+           func_fatal_error "\`$arg' is not a valid libtool object"
+         fi
+       fi
+       ;;
+
+      *.$libext)
+       # An archive.
+       deplibs="$deplibs $arg"
+       old_deplibs="$old_deplibs $arg"
+       continue
+       ;;
+
+      *.la)
+       # A libtool-controlled library.
+
+       if test "$prev" = dlfiles; then
+         # This library was specified with -dlopen.
+         dlfiles="$dlfiles $arg"
+         prev=
+       elif test "$prev" = dlprefiles; then
+         # The library was specified with -dlpreopen.
+         dlprefiles="$dlprefiles $arg"
+         prev=
+       else
+         deplibs="$deplibs $arg"
+       fi
+       continue
+       ;;
+
+      # Some other compiler argument.
+      *)
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prevarg' option requires an argument"
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname="$func_basename_result"
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    func_dirname "$output" "/" ""
+    output_objdir="$func_dirname_result$objdir"
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_duplicate_deps ; then
+       case "$libs " in
+       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+       esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+       for pre_post_dep in $predeps $postdeps; do
+         case "$pre_post_deps " in
+         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+         esac
+         pre_post_deps="$pre_post_deps $pre_post_dep"
+       done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+       passes="conv dlpreopen link"
+       for file in $dlfiles $dlprefiles; do
+         case $file in
+         *.la) ;;
+         *)
+           func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+           ;;
+         esac
+       done
+       ;;
+    prog)
+       compile_deplibs=
+       finalize_deplibs=
+       alldeplibs=no
+       newdlfiles=
+       newdlprefiles=
+       passes="conv scan dlopen dlpreopen link"
+       ;;
+    *)  passes="conv"
+       ;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test "$linkmode,$pass" = "lib,link"; then
+       ## FIXME: Find the place where the list is rebuilt in the wrong
+       ##        order, and fix it there properly
+        tmp_deplibs=
+       for deplib in $deplibs; do
+         tmp_deplibs="$deplib $tmp_deplibs"
+       done
+       deplibs="$tmp_deplibs"
+      fi
+
+      if test "$linkmode,$pass" = "lib,link" ||
+        test "$linkmode,$pass" = "prog,scan"; then
+       libs="$deplibs"
+       deplibs=
+      fi
+      if test "$linkmode" = prog; then
+       case $pass in
+       dlopen) libs="$dlfiles" ;;
+       dlpreopen) libs="$dlprefiles" ;;
+       link)
+         libs="$deplibs %DEPLIBS%"
+         test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+         ;;
+       esac
+      fi
+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+       # Collect and forward deplibs of preopened libtool libs
+       for lib in $dlprefiles; do
+         # Ignore non-libtool-libs
+         dependency_libs=
+         case $lib in
+         *.la) func_source "$lib" ;;
+         esac
+
+         # Collect preopened libtool deplibs, except any this library
+         # has declared as weak libs
+         for deplib in $dependency_libs; do
+            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+           case " $weak_libs " in
+           *" $deplib_base "*) ;;
+           *) deplibs="$deplibs $deplib" ;;
+           esac
+         done
+       done
+       libs="$dlprefiles"
+      fi
+      if test "$pass" = dlopen; then
+       # Collect dlpreopened libraries
+       save_deplibs="$deplibs"
+       deplibs=
+      fi
+
+      for deplib in $libs; do
+       lib=
+       found=no
+       case $deplib in
+       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           compiler_flags="$compiler_flags $deplib"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -l*)
+         if test "$linkmode" != lib && test "$linkmode" != prog; then
+           func_warning "\`-l' is ignored for archives/objects"
+           continue
+         fi
+         func_stripname '-l' '' "$deplib"
+         name=$func_stripname_result
+         if test "$linkmode" = lib; then
+           searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+         else
+           searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+         fi
+         for searchdir in $searchdirs; do
+           for search_ext in .la $std_shrext .so .a; do
+             # Search the libtool library
+             lib="$searchdir/lib${name}${search_ext}"
+             if test -f "$lib"; then
+               if test "$search_ext" = ".la"; then
+                 found=yes
+               else
+                 found=no
+               fi
+               break 2
+             fi
+           done
+         done
+         if test "$found" != yes; then
+           # deplib doesn't seem to be a libtool library
+           if test "$linkmode,$pass" = "prog,link"; then
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             deplibs="$deplib $deplibs"
+             test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+           fi
+           continue
+         else # deplib is a libtool library
+           # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+           # We need to do some special things here, and not later.
+           if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+             case " $predeps $postdeps " in
+             *" $deplib "*)
+               if func_lalib_p "$lib"; then
+                 library_names=
+                 old_library=
+                 func_source "$lib"
+                 for l in $old_library $library_names; do
+                   ll="$l"
+                 done
+                 if test "X$ll" = "X$old_library" ; then # only static version available
+                   found=no
+                   func_dirname "$lib" "" "."
+                   ladir="$func_dirname_result"
+                   lib=$ladir/$old_library
+                   if test "$linkmode,$pass" = "prog,link"; then
+                     compile_deplibs="$deplib $compile_deplibs"
+                     finalize_deplibs="$deplib $finalize_deplibs"
+                   else
+                     deplibs="$deplib $deplibs"
+                     test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+                   fi
+                   continue
+                 fi
+               fi
+               ;;
+             *) ;;
+             esac
+           fi
+         fi
+         ;; # -l
+       *.ltframework)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           deplibs="$deplib $deplibs"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -L*)
+         case $linkmode in
+         lib)
+           deplibs="$deplib $deplibs"
+           test "$pass" = conv && continue
+           newdependency_libs="$deplib $newdependency_libs"
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         prog)
+           if test "$pass" = conv; then
+             deplibs="$deplib $deplibs"
+             continue
+           fi
+           if test "$pass" = scan; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         *)
+           func_warning "\`-L' is ignored for archives/objects"
+           ;;
+         esac # linkmode
+         continue
+         ;; # -L
+       -R*)
+         if test "$pass" = link; then
+           func_stripname '-R' '' "$deplib"
+           dir=$func_stripname_result
+           # Make sure the xrpath contains only unique directories.
+           case "$xrpath " in
+           *" $dir "*) ;;
+           *) xrpath="$xrpath $dir" ;;
+           esac
+         fi
+         deplibs="$deplib $deplibs"
+         continue
+         ;;
+       *.la) lib="$deplib" ;;
+       *.$libext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+           continue
+         fi
+         case $linkmode in
+         lib)
+           # Linking convenience modules into shared libraries is allowed,
+           # but linking other static libraries is non-portable.
+           case " $dlpreconveniencelibs " in
+           *" $deplib "*) ;;
+           *)
+             valid_a_lib=no
+             case $deplibs_check_method in
+               match_pattern*)
+                 set dummy $deplibs_check_method; shift
+                 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+                 if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+                   | $EGREP "$match_pattern_regex" > /dev/null; then
+                   valid_a_lib=yes
+                 fi
+               ;;
+               pass_all)
+                 valid_a_lib=yes
+               ;;
+             esac
+             if test "$valid_a_lib" != yes; then
+               $ECHO
+               $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because the file extensions .$libext of this argument makes me believe"
+               $ECHO "*** that it is just a static archive that I should not use here."
+             else
+               $ECHO
+               $ECHO "*** Warning: Linking the shared library $output against the"
+               $ECHO "*** static library $deplib is not portable!"
+               deplibs="$deplib $deplibs"
+             fi
+             ;;
+           esac
+           continue
+           ;;
+         prog)
+           if test "$pass" != link; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           continue
+           ;;
+         esac # linkmode
+         ;; # *.$libext
+       *.lo | *.$objext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+         elif test "$linkmode" = prog; then
+           if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+             # If there is no dlopen support or we're linking statically,
+             # we need to preload.
+             newdlprefiles="$newdlprefiles $deplib"
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             newdlfiles="$newdlfiles $deplib"
+           fi
+         fi
+         continue
+         ;;
+       %DEPLIBS%)
+         alldeplibs=yes
+         continue
+         ;;
+       esac # case $deplib
+
+       if test "$found" = yes || test -f "$lib"; then :
+       else
+         func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+       fi
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$lib" \
+         || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+       func_dirname "$lib" "" "."
+       ladir="$func_dirname_result"
+
+       dlname=
+       dlopen=
+       dlpreopen=
+       libdir=
+       library_names=
+       old_library=
+       inherited_linker_flags=
+       # If the library was installed with an old release of libtool,
+       # it will not redefine variables installed, or shouldnotlink
+       installed=yes
+       shouldnotlink=no
+       avoidtemprpath=
+
+
+       # Read the .la file
+       func_source "$lib"
+
+       # Convert "-framework foo" to "foo.ltframework"
+       if test -n "$inherited_linker_flags"; then
+         tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+         for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+           case " $new_inherited_linker_flags " in
+             *" $tmp_inherited_linker_flag "*) ;;
+             *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+           esac
+         done
+       fi
+       dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       if test "$linkmode,$pass" = "lib,link" ||
+          test "$linkmode,$pass" = "prog,scan" ||
+          { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+         test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+         test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+       fi
+
+       if test "$pass" = conv; then
+         # Only check for convenience libraries
+         deplibs="$lib $deplibs"
+         if test -z "$libdir"; then
+           if test -z "$old_library"; then
+             func_fatal_error "cannot find name of link library for \`$lib'"
+           fi
+           # It is a libtool convenience library, so add in its objects.
+           convenience="$convenience $ladir/$objdir/$old_library"
+           old_convenience="$old_convenience $ladir/$objdir/$old_library"
+           tmp_libs=
+           for deplib in $dependency_libs; do
+             deplibs="$deplib $deplibs"
+             if $opt_duplicate_deps ; then
+               case "$tmp_libs " in
+               *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+               esac
+             fi
+             tmp_libs="$tmp_libs $deplib"
+           done
+         elif test "$linkmode" != prog && test "$linkmode" != lib; then
+           func_fatal_error "\`$lib' is not a convenience library"
+         fi
+         continue
+       fi # $pass = conv
+
+
+       # Get the name of the library we link against.
+       linklib=
+       for l in $old_library $library_names; do
+         linklib="$l"
+       done
+       if test -z "$linklib"; then
+         func_fatal_error "cannot find name of link library for \`$lib'"
+       fi
+
+       # This library was specified with -dlopen.
+       if test "$pass" = dlopen; then
+         if test -z "$libdir"; then
+           func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+         fi
+         if test -z "$dlname" ||
+            test "$dlopen_support" != yes ||
+            test "$build_libtool_libs" = no; then
+           # If there is no dlname, no dlopen support or we're linking
+           # statically, we need to preload.  We also need to preload any
+           # dependent libraries so libltdl's deplib preloader doesn't
+           # bomb out in the load deplibs phase.
+           dlprefiles="$dlprefiles $lib $dependency_libs"
+         else
+           newdlfiles="$newdlfiles $lib"
+         fi
+         continue
+       fi # $pass = dlopen
+
+       # We need an absolute path.
+       case $ladir in
+       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+       *)
+         abs_ladir=`cd "$ladir" && pwd`
+         if test -z "$abs_ladir"; then
+           func_warning "cannot determine absolute directory name of \`$ladir'"
+           func_warning "passing it literally to the linker, although it might fail"
+           abs_ladir="$ladir"
+         fi
+         ;;
+       esac
+       func_basename "$lib"
+       laname="$func_basename_result"
+
+       # Find the relevant object directory and library name.
+       if test "X$installed" = Xyes; then
+         if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           func_warning "library \`$lib' was moved."
+           dir="$ladir"
+           absdir="$abs_ladir"
+           libdir="$abs_ladir"
+         else
+           dir="$libdir"
+           absdir="$libdir"
+         fi
+         test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+       else
+         if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           dir="$ladir"
+           absdir="$abs_ladir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         else
+           dir="$ladir/$objdir"
+           absdir="$abs_ladir/$objdir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         fi
+       fi # $installed = yes
+       func_stripname 'lib' '.la' "$laname"
+       name=$func_stripname_result
+
+       # This library was specified with -dlpreopen.
+       if test "$pass" = dlpreopen; then
+         if test -z "$libdir" && test "$linkmode" = prog; then
+           func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+         fi
+         # Prefer using a static library (so that no silly _DYNAMIC symbols
+         # are required to link).
+         if test -n "$old_library"; then
+           newdlprefiles="$newdlprefiles $dir/$old_library"
+           # Keep a list of preopened convenience libraries to check
+           # that they are being used correctly in the link pass.
+           test -z "$libdir" && \
+               dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+         # Otherwise, use the dlname, so that lt_dlopen finds it.
+         elif test -n "$dlname"; then
+           newdlprefiles="$newdlprefiles $dir/$dlname"
+         else
+           newdlprefiles="$newdlprefiles $dir/$linklib"
+         fi
+       fi # $pass = dlpreopen
+
+       if test -z "$libdir"; then
+         # Link the convenience library
+         if test "$linkmode" = lib; then
+           deplibs="$dir/$old_library $deplibs"
+         elif test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$dir/$old_library $compile_deplibs"
+           finalize_deplibs="$dir/$old_library $finalize_deplibs"
+         else
+           deplibs="$lib $deplibs" # used for prog,scan pass
+         fi
+         continue
+       fi
+
+
+       if test "$linkmode" = prog && test "$pass" != link; then
+         newlib_search_path="$newlib_search_path $ladir"
+         deplibs="$lib $deplibs"
+
+         linkalldeplibs=no
+         if test "$link_all_deplibs" != no || test -z "$library_names" ||
+            test "$build_libtool_libs" = no; then
+           linkalldeplibs=yes
+         fi
+
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           case $deplib in
+           -L*) func_stripname '-L' '' "$deplib"
+                newlib_search_path="$newlib_search_path $func_stripname_result"
+                ;;
+           esac
+           # Need to link against all dependency_libs?
+           if test "$linkalldeplibs" = yes; then
+             deplibs="$deplib $deplibs"
+           else
+             # Need to hardcode shared library paths
+             # or/and link against static libraries
+             newdependency_libs="$deplib $newdependency_libs"
+           fi
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done # for deplib
+         continue
+       fi # $linkmode = prog...
+
+       if test "$linkmode,$pass" = "prog,link"; then
+         if test -n "$library_names" &&
+            { { test "$prefer_static_libs" = no ||
+                test "$prefer_static_libs,$installed" = "built,yes"; } ||
+              test -z "$old_library"; }; then
+           # We need to hardcode the library path
+           if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+             # Make sure the rpath contains only unique directories.
+             case "$temp_rpath:" in
+             *"$absdir:"*) ;;
+             *) temp_rpath="$temp_rpath$absdir:" ;;
+             esac
+           fi
+
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi # $linkmode,$pass = prog,link...
+
+         if test "$alldeplibs" = yes &&
+            { test "$deplibs_check_method" = pass_all ||
+              { test "$build_libtool_libs" = yes &&
+                test -n "$library_names"; }; }; then
+           # We only need to search for static libraries
+           continue
+         fi
+       fi
+
+       link_static=no # Whether the deplib will be linked statically
+       use_static_libs=$prefer_static_libs
+       if test "$use_static_libs" = built && test "$installed" = yes; then
+         use_static_libs=no
+       fi
+       if test -n "$library_names" &&
+          { test "$use_static_libs" = no || test -z "$old_library"; }; then
+         case $host in
+         *cygwin* | *mingw* | *cegcc*)
+             # No point in relinking DLLs because paths are not encoded
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=no
+           ;;
+         *)
+           if test "$installed" = no; then
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=yes
+           fi
+           ;;
+         esac
+         # This is a shared library
+
+         # Warn about portability, can't link against -module's on some
+         # systems (darwin).  Don't bleat about dlopened modules though!
+         dlopenmodule=""
+         for dlpremoduletest in $dlprefiles; do
+           if test "X$dlpremoduletest" = "X$lib"; then
+             dlopenmodule="$dlpremoduletest"
+             break
+           fi
+         done
+         if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+           $ECHO
+           if test "$linkmode" = prog; then
+             $ECHO "*** Warning: Linking the executable $output against the loadable module"
+           else
+             $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+           fi
+           $ECHO "*** $linklib is not portable!"
+         fi
+         if test "$linkmode" = lib &&
+            test "$hardcode_into_libs" = yes; then
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi
+
+         if test -n "$old_archive_from_expsyms_cmds"; then
+           # figure out the soname
+           set dummy $library_names
+           shift
+           realname="$1"
+           shift
+           libname=`eval "\\$ECHO \"$libname_spec\""`
+           # use dlname if we got it. it's perfectly good, no?
+           if test -n "$dlname"; then
+             soname="$dlname"
+           elif test -n "$soname_spec"; then
+             # bleh windows
+             case $host in
+             *cygwin* | mingw* | *cegcc*)
+               func_arith $current - $age
+               major=$func_arith_result
+               versuffix="-$major"
+               ;;
+             esac
+             eval soname=\"$soname_spec\"
+           else
+             soname="$realname"
+           fi
+
+           # Make a new name for the extract_expsyms_cmds to use
+           soroot="$soname"
+           func_basename "$soroot"
+           soname="$func_basename_result"
+           func_stripname 'lib' '.dll' "$soname"
+           newlib=libimp-$func_stripname_result.a
+
+           # If the library has no export list, then create one now
+           if test -f "$output_objdir/$soname-def"; then :
+           else
+             func_verbose "extracting exported symbol list from \`$soname'"
+             func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+           fi
+
+           # Create $newlib
+           if test -f "$output_objdir/$newlib"; then :; else
+             func_verbose "generating import library for \`$soname'"
+             func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+           fi
+           # make sure the library variables are pointing to the new library
+           dir=$output_objdir
+           linklib=$newlib
+         fi # test -n "$old_archive_from_expsyms_cmds"
+
+         if test "$linkmode" = prog || test "$mode" != relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           lib_linked=yes
+           case $hardcode_action in
+           immediate | unsupported)
+             if test "$hardcode_direct" = no; then
+               add="$dir/$linklib"
+               case $host in
+                 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+                 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+                 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+                   *-*-unixware7*) add_dir="-L$dir" ;;
+                 *-*-darwin* )
+                   # if the lib is a (non-dlopened) module then we can not
+                   # link against it, someone is ignoring the earlier warnings
+                   if /usr/bin/file -L $add 2> /dev/null |
+                        $GREP ": [^:]* bundle" >/dev/null ; then
+                     if test "X$dlopenmodule" != "X$lib"; then
+                       $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+                       if test -z "$old_library" ; then
+                         $ECHO
+                         $ECHO "*** And there doesn't seem to be a static archive available"
+                         $ECHO "*** The link will probably fail, sorry"
+                       else
+                         add="$dir/$old_library"
+                       fi
+                     elif test -n "$old_library"; then
+                       add="$dir/$old_library"
+                     fi
+                   fi
+               esac
+             elif test "$hardcode_minus_L" = no; then
+               case $host in
+               *-*-sunos*) add_shlibpath="$dir" ;;
+               esac
+               add_dir="-L$dir"
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = no; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           relink)
+             if test "$hardcode_direct" = yes &&
+                test "$hardcode_direct_absolute" = no; then
+               add="$dir/$linklib"
+             elif test "$hardcode_minus_L" = yes; then
+               add_dir="-L$dir"
+               # Try looking first in the location we're being installed to.
+               if test -n "$inst_prefix_dir"; then
+                 case $libdir in
+                   [\\/]*)
+                     add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                     ;;
+                 esac
+               fi
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = yes; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           *) lib_linked=no ;;
+           esac
+
+           if test "$lib_linked" != yes; then
+             func_fatal_configuration "unsupported hardcode properties"
+           fi
+
+           if test -n "$add_shlibpath"; then
+             case :$compile_shlibpath: in
+             *":$add_shlibpath:"*) ;;
+             *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+             esac
+           fi
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+             test -n "$add" && compile_deplibs="$add $compile_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+             if test "$hardcode_direct" != yes &&
+                test "$hardcode_minus_L" != yes &&
+                test "$hardcode_shlibpath_var" = yes; then
+               case :$finalize_shlibpath: in
+               *":$libdir:"*) ;;
+               *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+               esac
+             fi
+           fi
+         fi
+
+         if test "$linkmode" = prog || test "$mode" = relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           # Finalize command for both is simple: just hardcode it.
+           if test "$hardcode_direct" = yes &&
+              test "$hardcode_direct_absolute" = no; then
+             add="$libdir/$linklib"
+           elif test "$hardcode_minus_L" = yes; then
+             add_dir="-L$libdir"
+             add="-l$name"
+           elif test "$hardcode_shlibpath_var" = yes; then
+             case :$finalize_shlibpath: in
+             *":$libdir:"*) ;;
+             *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+             esac
+             add="-l$name"
+           elif test "$hardcode_automatic" = yes; then
+             if test -n "$inst_prefix_dir" &&
+                test -f "$inst_prefix_dir$libdir/$linklib" ; then
+               add="$inst_prefix_dir$libdir/$linklib"
+             else
+               add="$libdir/$linklib"
+             fi
+           else
+             # We cannot seem to hardcode it, guess we'll fake it.
+             add_dir="-L$libdir"
+             # Try looking first in the location we're being installed to.
+             if test -n "$inst_prefix_dir"; then
+               case $libdir in
+                 [\\/]*)
+                   add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                   ;;
+               esac
+             fi
+             add="-l$name"
+           fi
+
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+             test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+           fi
+         fi
+       elif test "$linkmode" = prog; then
+         # Here we assume that one of hardcode_direct or hardcode_minus_L
+         # is not unsupported.  This is valid on all known static and
+         # shared platforms.
+         if test "$hardcode_direct" != unsupported; then
+           test -n "$old_library" && linklib="$old_library"
+           compile_deplibs="$dir/$linklib $compile_deplibs"
+           finalize_deplibs="$dir/$linklib $finalize_deplibs"
+         else
+           compile_deplibs="-l$name -L$dir $compile_deplibs"
+           finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+         fi
+       elif test "$build_libtool_libs" = yes; then
+         # Not a shared library
+         if test "$deplibs_check_method" != pass_all; then
+           # We're trying link a shared library against a static one
+           # but the system doesn't support it.
+
+           # Just print a warning and add the library to dependency_libs so
+           # that the program can be linked against the static library.
+           $ECHO
+           $ECHO "*** Warning: This system can not link to static lib archive $lib."
+           $ECHO "*** I have the capability to make that library automatically link in when"
+           $ECHO "*** you link to this library.  But I can only do this if you have a"
+           $ECHO "*** shared version of the library, which you do not appear to have."
+           if test "$module" = yes; then
+             $ECHO "*** But as you try to build a module library, libtool will still create "
+             $ECHO "*** a static module, that should work as long as the dlopening application"
+             $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+             if test -z "$global_symbol_pipe"; then
+               $ECHO
+               $ECHO "*** However, this would only work if libtool was able to extract symbol"
+               $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+               $ECHO "*** not find such a program.  So, this module is probably useless."
+               $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+             fi
+             if test "$build_old_libs" = no; then
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         else
+           deplibs="$dir/$old_library $deplibs"
+           link_static=yes
+         fi
+       fi # link shared/static library?
+
+       if test "$linkmode" = lib; then
+         if test -n "$dependency_libs" &&
+            { test "$hardcode_into_libs" != yes ||
+              test "$build_old_libs" = yes ||
+              test "$link_static" = yes; }; then
+           # Extract -R from dependency_libs
+           temp_deplibs=
+           for libdir in $dependency_libs; do
+             case $libdir in
+             -R*) func_stripname '-R' '' "$libdir"
+                  temp_xrpath=$func_stripname_result
+                  case " $xrpath " in
+                  *" $temp_xrpath "*) ;;
+                  *) xrpath="$xrpath $temp_xrpath";;
+                  esac;;
+             *) temp_deplibs="$temp_deplibs $libdir";;
+             esac
+           done
+           dependency_libs="$temp_deplibs"
+         fi
+
+         newlib_search_path="$newlib_search_path $absdir"
+         # Link against this library
+         test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+         # ... and its dependency_libs
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           newdependency_libs="$deplib $newdependency_libs"
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done
+
+         if test "$link_all_deplibs" != no; then
+           # Add the search paths of all dependency libraries
+           for deplib in $dependency_libs; do
+             path=
+             case $deplib in
+             -L*) path="$deplib" ;;
+             *.la)
+               func_dirname "$deplib" "" "."
+               dir="$func_dirname_result"
+               # We need an absolute path.
+               case $dir in
+               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+               *)
+                 absdir=`cd "$dir" && pwd`
+                 if test -z "$absdir"; then
+                   func_warning "cannot determine absolute directory name of \`$dir'"
+                   absdir="$dir"
+                 fi
+                 ;;
+               esac
+               if $GREP "^installed=no" $deplib > /dev/null; then
+               case $host in
+               *-*-darwin*)
+                 depdepl=
+                 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+                 if test -n "$deplibrary_names" ; then
+                   for tmp in $deplibrary_names ; do
+                     depdepl=$tmp
+                   done
+                   if test -f "$absdir/$objdir/$depdepl" ; then
+                     depdepl="$absdir/$objdir/$depdepl"
+                     darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+                     compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+                     linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+                     path=
+                   fi
+                 fi
+                 ;;
+               *)
+                 path="-L$absdir/$objdir"
+                 ;;
+               esac
+               else
+                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 test -z "$libdir" && \
+                   func_fatal_error "\`$deplib' is not a valid libtool archive"
+                 test "$absdir" != "$libdir" && \
+                   func_warning "\`$deplib' seems to be moved"
+
+                 path="-L$absdir"
+               fi
+               ;;
+             esac
+             case " $deplibs " in
+             *" $path "*) ;;
+             *) deplibs="$path $deplibs" ;;
+             esac
+           done
+         fi # link_all_deplibs != no
+       fi # linkmode = lib
+      done # for deplib in $libs
+      if test "$pass" = link; then
+       if test "$linkmode" = "prog"; then
+         compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+         finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+       else
+         compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       fi
+      fi
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+       # Link the dlpreopened libraries before other libraries
+       for deplib in $save_deplibs; do
+         deplibs="$deplib $deplibs"
+       done
+      fi
+      if test "$pass" != dlopen; then
+       if test "$pass" != conv; then
+         # Make sure lib_search_path contains only unique directories.
+         lib_search_path=
+         for dir in $newlib_search_path; do
+           case "$lib_search_path " in
+           *" $dir "*) ;;
+           *) lib_search_path="$lib_search_path $dir" ;;
+           esac
+         done
+         newlib_search_path=
+       fi
+
+       if test "$linkmode,$pass" != "prog,link"; then
+         vars="deplibs"
+       else
+         vars="compile_deplibs finalize_deplibs"
+       fi
+       for var in $vars dependency_libs; do
+         # Add libraries to $var in reverse order
+         eval tmp_libs=\"\$$var\"
+         new_libs=
+         for deplib in $tmp_libs; do
+           # FIXME: Pedantically, this is the right thing to do, so
+           #        that some nasty dependency loop isn't accidentally
+           #        broken:
+           #new_libs="$deplib $new_libs"
+           # Pragmatically, this seems to cause very few problems in
+           # practice:
+           case $deplib in
+           -L*) new_libs="$deplib $new_libs" ;;
+           -R*) ;;
+           *)
+             # And here is the reason: when a library appears more
+             # than once as an explicit dependence of a library, or
+             # is implicitly linked in more than once by the
+             # compiler, it is considered special, and multiple
+             # occurrences thereof are not removed.  Compare this
+             # with having the same library being listed as a
+             # dependency of multiple other libraries: in this case,
+             # we know (pedantically, we assume) the library does not
+             # need to be listed more than once, so we keep only the
+             # last copy.  This is not always right, but it is rare
+             # enough that we require users that really mean to play
+             # such unportable linking tricks to link the library
+             # using -Wl,-lname, so that libtool does not consider it
+             # for duplicate removal.
+             case " $specialdeplibs " in
+             *" $deplib "*) new_libs="$deplib $new_libs" ;;
+             *)
+               case " $new_libs " in
+               *" $deplib "*) ;;
+               *) new_libs="$deplib $new_libs" ;;
+               esac
+               ;;
+             esac
+             ;;
+           esac
+         done
+         tmp_libs=
+         for deplib in $new_libs; do
+           case $deplib in
+           -L*)
+             case " $tmp_libs " in
+             *" $deplib "*) ;;
+             *) tmp_libs="$tmp_libs $deplib" ;;
+             esac
+             ;;
+           *) tmp_libs="$tmp_libs $deplib" ;;
+           esac
+         done
+         eval $var=\"$tmp_libs\"
+       done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+       case " $predeps $postdeps $compiler_lib_search_path " in
+       *" $i "*)
+         i=""
+         ;;
+       esac
+       if test -n "$i" ; then
+         tmp_libs="$tmp_libs $i"
+       fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+    fi
+    if test "$linkmode" = prog || test "$linkmode" = lib; then
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+       func_warning "\`-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      objs="$objs$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+       func_stripname 'lib' '.la' "$outputname"
+       name=$func_stripname_result
+       eval shared_ext=\"$shrext_cmds\"
+       eval libname=\"$libname_spec\"
+       ;;
+      *)
+       test "$module" = no && \
+         func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+       if test "$need_lib_prefix" != no; then
+         # Add the "lib" prefix for modules if required
+         func_stripname '' '.la' "$outputname"
+         name=$func_stripname_result
+         eval shared_ext=\"$shrext_cmds\"
+         eval libname=\"$libname_spec\"
+       else
+         func_stripname '' '.la' "$outputname"
+         libname=$func_stripname_result
+       fi
+       ;;
+      esac
+
+      if test -n "$objs"; then
+       if test "$deplibs_check_method" != pass_all; then
+         func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+       else
+         $ECHO
+         $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+         $ECHO "*** objects $objs is not portable!"
+         libobjs="$libobjs $objs"
+       fi
+      fi
+
+      test "$dlself" != no && \
+       func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test "$#" -gt 1 && \
+       func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+      install_libdir="$1"
+
+      oldlibs=
+      if test -z "$rpath"; then
+       if test "$build_libtool_libs" = yes; then
+         # Building a libtool convenience library.
+         # Some compilers have problems with a `.al' extension so
+         # convenience libraries should have the same extension an
+         # archive normally would.
+         oldlibs="$output_objdir/$libname.$libext $oldlibs"
+         build_libtool_libs=convenience
+         build_old_libs=yes
+       fi
+
+       test -n "$vinfo" && \
+         func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+       test -n "$release" && \
+         func_warning "\`-release' is ignored for convenience libraries"
+      else
+
+       # Parse the version information argument.
+       save_ifs="$IFS"; IFS=':'
+       set dummy $vinfo 0 0 0
+       shift
+       IFS="$save_ifs"
+
+       test -n "$7" && \
+         func_fatal_help "too many parameters to \`-version-info'"
+
+       # convert absolute version numbers to libtool ages
+       # this retains compatibility with .la files and attempts
+       # to make the code below a bit more comprehensible
+
+       case $vinfo_number in
+       yes)
+         number_major="$1"
+         number_minor="$2"
+         number_revision="$3"
+         #
+         # There are really only two kinds -- those that
+         # use the current revision as the major version
+         # and those that subtract age and use age as
+         # a minor version.  But, then there is irix
+         # which has an extra 1 added just for fun
+         #
+         case $version_type in
+         darwin|linux|osf|windows|none)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age="$number_minor"
+           revision="$number_revision"
+           ;;
+         freebsd-aout|freebsd-elf|sunos)
+           current="$number_major"
+           revision="$number_minor"
+           age="0"
+           ;;
+         irix|nonstopux)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age="$number_minor"
+           revision="$number_minor"
+           lt_irix_increment=no
+           ;;
+         *)
+           func_fatal_configuration "$modename: unknown library version type \`$version_type'"
+           ;;
+         esac
+         ;;
+       no)
+         current="$1"
+         revision="$2"
+         age="$3"
+         ;;
+       esac
+
+       # Check that each of the things are valid numbers.
+       case $current in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "CURRENT \`$current' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $revision in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "REVISION \`$revision' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $age in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "AGE \`$age' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       if test "$age" -gt "$current"; then
+         func_error "AGE \`$age' is greater than the current interface number \`$current'"
+         func_fatal_error "\`$vinfo' is not valid version information"
+       fi
+
+       # Calculate the version variables.
+       major=
+       versuffix=
+       verstring=
+       case $version_type in
+       none) ;;
+
+       darwin)
+         # Like Linux, but with the current version available in
+         # verstring for coding it into the library header
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix="$major.$age.$revision"
+         # Darwin ld doesn't like 0 for these options...
+         func_arith $current + 1
+         minor_current=$func_arith_result
+         xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+         verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+         ;;
+
+       freebsd-aout)
+         major=".$current"
+         versuffix=".$current.$revision";
+         ;;
+
+       freebsd-elf)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       irix | nonstopux)
+         if test "X$lt_irix_increment" = "Xno"; then
+           func_arith $current - $age
+         else
+           func_arith $current - $age + 1
+         fi
+         major=$func_arith_result
+
+         case $version_type in
+           nonstopux) verstring_prefix=nonstopux ;;
+           *)         verstring_prefix=sgi ;;
+         esac
+         verstring="$verstring_prefix$major.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$revision
+         while test "$loop" -ne 0; do
+           func_arith $revision - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring="$verstring_prefix$major.$iface:$verstring"
+         done
+
+         # Before this point, $major must not contain `.'.
+         major=.$major
+         versuffix="$major.$revision"
+         ;;
+
+       linux)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix="$major.$age.$revision"
+         ;;
+
+       osf)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=".$current.$age.$revision"
+         verstring="$current.$age.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$age
+         while test "$loop" -ne 0; do
+           func_arith $current - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring="$verstring:${iface}.0"
+         done
+
+         # Make executables depend on our current version.
+         verstring="$verstring:${current}.0"
+         ;;
+
+       qnx)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       sunos)
+         major=".$current"
+         versuffix=".$current.$revision"
+         ;;
+
+       windows)
+         # Use '-' rather than '.', since we only want one
+         # extension on DOS 8.3 filesystems.
+         func_arith $current - $age
+         major=$func_arith_result
+         versuffix="-$major"
+         ;;
+
+       *)
+         func_fatal_configuration "unknown library version type \`$version_type'"
+         ;;
+       esac
+
+       # Clear the version info if we defaulted, and they specified a release.
+       if test -z "$vinfo" && test -n "$release"; then
+         major=
+         case $version_type in
+         darwin)
+           # we can't check for "0.0" in archive_cmds due to quoting
+           # problems, so we reset it completely
+           verstring=
+           ;;
+         *)
+           verstring="0.0"
+           ;;
+         esac
+         if test "$need_version" = no; then
+           versuffix=
+         else
+           versuffix=".0.0"
+         fi
+       fi
+
+       # Remove version info from name if versioning should be avoided
+       if test "$avoid_version" = yes && test "$need_version" = no; then
+         major=
+         versuffix=
+         verstring=""
+       fi
+
+       # Check to see if the archive will have undefined symbols.
+       if test "$allow_undefined" = yes; then
+         if test "$allow_undefined_flag" = unsupported; then
+           func_warning "undefined symbols not allowed in $host shared libraries"
+           build_libtool_libs=no
+           build_old_libs=yes
+         fi
+       else
+         # Don't allow undefined symbols.
+         allow_undefined_flag="$no_undefined_flag"
+       fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" "yes"
+      libobjs="$libobjs $symfileobj"
+      test "X$libobjs" = "X " && libobjs=
+
+      if test "$mode" != relink; then
+       # Remove our outputs, but don't remove object files since they
+       # may have been created when compiling PIC objects.
+       removelist=
+       tempremovelist=`$ECHO "$output_objdir/*"`
+       for p in $tempremovelist; do
+         case $p in
+           *.$objext | *.gcno)
+              ;;
+           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+              if test "X$precious_files_regex" != "X"; then
+                if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+                then
+                  continue
+                fi
+              fi
+              removelist="$removelist $p"
+              ;;
+           *) ;;
+         esac
+       done
+       test -n "$removelist" && \
+         func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+       oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+       # Transform .lo files to .o files.
+       oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #        lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+      #        deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+      #        dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       temp_xrpath=
+       for libdir in $xrpath; do
+         temp_xrpath="$temp_xrpath -R$libdir"
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+       if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+         dependency_libs="$temp_xrpath $dependency_libs"
+       fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+       case " $dlprefiles $dlfiles " in
+       *" $lib "*) ;;
+       *) dlfiles="$dlfiles $lib" ;;
+       esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+       case "$dlprefiles " in
+       *" $lib "*) ;;
+       *) dlprefiles="$dlprefiles $lib" ;;
+       esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+       if test -n "$rpath"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+           # these systems don't actually have a c library (as such)!
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C library is in the System framework
+           deplibs="$deplibs System.ltframework"
+           ;;
+         *-*-netbsd*)
+           # Don't link with libc until the a.out ld.so is fixed.
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           ;;
+         *)
+           # Add libc to deplibs on all other systems if necessary.
+           if test "$build_libtool_need_lc" = "yes"; then
+             deplibs="$deplibs -lc"
+           fi
+           ;;
+         esac
+       fi
+
+       # Transform deplibs into only deplibs that can be linked in shared.
+       name_save=$name
+       libname_save=$libname
+       release_save=$release
+       versuffix_save=$versuffix
+       major_save=$major
+       # I'm not sure if I'm treating the release correctly.  I think
+       # release should show up in the -l (ie -lgmp5) so we don't want to
+       # add it in twice.  Is that correct?
+       release=""
+       versuffix=""
+       major=""
+       newdeplibs=
+       droppeddeps=no
+       case $deplibs_check_method in
+       pass_all)
+         # Don't check for shared/static.  Everything works.
+         # This might be a little naive.  We might want to check
+         # whether the library exists or not.  But this is on
+         # osf3 & osf4 and I'm not really sure... Just
+         # implementing what was already the behavior.
+         newdeplibs=$deplibs
+         ;;
+       test_compile)
+         # This code stresses the "libraries are programs" paradigm to its
+         # limits. Maybe even breaks it.  We compile a program, linking it
+         # against the deplibs as a proxy for the library.  Then we can check
+         # whether they linked in statically or dynamically with ldd.
+         $opt_dry_run || $RM conftest.c
+         cat > conftest.c <<EOF
+         int main() { return 0; }
+EOF
+         $opt_dry_run || $RM conftest
+         if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+           ldd_output=`ldd conftest`
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                 case " $predeps $postdeps " in
+                 *" $i "*)
+                   newdeplibs="$newdeplibs $i"
+                   i=""
+                   ;;
+                 esac
+               fi
+               if test -n "$i" ; then
+                 libname=`eval "\\$ECHO \"$libname_spec\""`
+                 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                 set dummy $deplib_matches; shift
+                 deplib_match=$1
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                   newdeplibs="$newdeplibs $i"
+                 else
+                   droppeddeps=yes
+                   $ECHO
+                   $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                   $ECHO "*** I have the capability to make that library automatically link in when"
+                   $ECHO "*** you link to this library.  But I can only do this if you have a"
+                   $ECHO "*** shared version of the library, which I believe you do not have"
+                   $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+                   $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+                 fi
+               fi
+               ;;
+             *)
+               newdeplibs="$newdeplibs $i"
+               ;;
+             esac
+           done
+         else
+           # Error occurred in the first compile.  Let's try to salvage
+           # the situation: Compile a separate program for each library.
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               $opt_dry_run || $RM conftest
+               if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+                 ldd_output=`ldd conftest`
+                 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                   case " $predeps $postdeps " in
+                   *" $i "*)
+                     newdeplibs="$newdeplibs $i"
+                     i=""
+                     ;;
+                   esac
+                 fi
+                 if test -n "$i" ; then
+                   libname=`eval "\\$ECHO \"$libname_spec\""`
+                   deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                   set dummy $deplib_matches; shift
+                   deplib_match=$1
+                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                     newdeplibs="$newdeplibs $i"
+                   else
+                     droppeddeps=yes
+                     $ECHO
+                     $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                     $ECHO "*** I have the capability to make that library automatically link in when"
+                     $ECHO "*** you link to this library.  But I can only do this if you have a"
+                     $ECHO "*** shared version of the library, which you do not appear to have"
+                     $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+                     $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+                   fi
+                 fi
+               else
+                 droppeddeps=yes
+                 $ECHO
+                 $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+                 $ECHO "*** make it link in!  You will probably need to install it or some"
+                 $ECHO "*** library that it depends on before this library will be fully"
+                 $ECHO "*** functional.  Installing it before continuing would be even better."
+               fi
+               ;;
+             *)
+               newdeplibs="$newdeplibs $i"
+               ;;
+             esac
+           done
+         fi
+         ;;
+       file_magic*)
+         set dummy $deplibs_check_method; shift
+         file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                     # Follow soft links.
+                     if ls -lLd "$potent_lib" 2>/dev/null |
+                        $GREP " -> " >/dev/null; then
+                       continue
+                     fi
+                     # The statement above tries to avoid entering an
+                     # endless loop below, in case of cyclic links.
+                     # We might still enter an endless loop, since a link
+                     # loop can be closed while we follow links,
+                     # but so what?
+                     potlib="$potent_lib"
+                     while test -h "$potlib" 2>/dev/null; do
+                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+                       case $potliblink in
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+                       *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+                       esac
+                     done
+                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+                        $SED -e 10q |
+                        $EGREP "$file_magic_regex" > /dev/null; then
+                       newdeplibs="$newdeplibs $a_deplib"
+                       a_deplib=""
+                       break 2
+                     fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a file magic. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       match_pattern*)
+         set dummy $deplibs_check_method; shift
+         match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                   potlib="$potent_lib" # see symlink-check above in file_magic test
+                   if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+                      $EGREP "$match_pattern_regex" > /dev/null; then
+                     newdeplibs="$newdeplibs $a_deplib"
+                     a_deplib=""
+                     break 2
+                   fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a regex pattern. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       none | unknown | *)
+         newdeplibs=""
+         tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+             -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+         if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+           for i in $predeps $postdeps ; do
+             # can't use Xsed below, because $i might contain '/'
+             tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+           done
+         fi
+         if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[      ]//g' |
+            $GREP . >/dev/null; then
+           $ECHO
+           if test "X$deplibs_check_method" = "Xnone"; then
+             $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+           else
+             $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+           fi
+           $ECHO "*** All declared inter-library dependencies are being dropped."
+           droppeddeps=yes
+         fi
+         ;;
+       esac
+       versuffix=$versuffix_save
+       major=$major_save
+       release=$release_save
+       libname=$libname_save
+       name=$name_save
+
+       case $host in
+       *-*-rhapsody* | *-*-darwin1.[012])
+         # On Rhapsody replace the C library with the System framework
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+         ;;
+       esac
+
+       if test "$droppeddeps" = yes; then
+         if test "$module" = yes; then
+           $ECHO
+           $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+           $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+           $ECHO "*** a static module, that should work as long as the dlopening"
+           $ECHO "*** application is linked with the -dlopen flag."
+           if test -z "$global_symbol_pipe"; then
+             $ECHO
+             $ECHO "*** However, this would only work if libtool was able to extract symbol"
+             $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+             $ECHO "*** not find such a program.  So, this module is probably useless."
+             $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+           fi
+           if test "$build_old_libs" = no; then
+             oldlibs="$output_objdir/$libname.$libext"
+             build_libtool_libs=module
+             build_old_libs=yes
+           else
+             build_libtool_libs=no
+           fi
+         else
+           $ECHO "*** The inter-library dependencies that have been dropped here will be"
+           $ECHO "*** automatically added whenever a program is linked with this library"
+           $ECHO "*** or is declared to -dlopen it."
+
+           if test "$allow_undefined" = no; then
+             $ECHO
+             $ECHO "*** Since this library must not contain undefined symbols,"
+             $ECHO "*** because either the platform does not support them or"
+             $ECHO "*** it was explicitly requested with -no-undefined,"
+             $ECHO "*** libtool will only create a static version of it."
+             if test "$build_old_libs" = no; then
+               oldlibs="$output_objdir/$libname.$libext"
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         fi
+       fi
+       # Done checking deplibs!
+       deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+       *-*-darwin*)
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      deplibs="$new_libs"
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+       if test "$hardcode_into_libs" = yes; then
+         # Hardcode the library paths
+         hardcode_libdirs=
+         dep_rpath=
+         rpath="$finalize_rpath"
+         test "$mode" != relink && rpath="$compile_rpath$rpath"
+         for libdir in $rpath; do
+           if test -n "$hardcode_libdir_flag_spec"; then
+             if test -n "$hardcode_libdir_separator"; then
+               if test -z "$hardcode_libdirs"; then
+                 hardcode_libdirs="$libdir"
+               else
+                 # Just accumulate the unique libdirs.
+                 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+                 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+                   ;;
+                 *)
+                   hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+                   ;;
+                 esac
+               fi
+             else
+               eval flag=\"$hardcode_libdir_flag_spec\"
+               dep_rpath="$dep_rpath $flag"
+             fi
+           elif test -n "$runpath_var"; then
+             case "$perm_rpath " in
+             *" $libdir "*) ;;
+             *) perm_rpath="$perm_rpath $libdir" ;;
+             esac
+           fi
+         done
+         # Substitute the hardcoded libdirs into the rpath.
+         if test -n "$hardcode_libdir_separator" &&
+            test -n "$hardcode_libdirs"; then
+           libdir="$hardcode_libdirs"
+           if test -n "$hardcode_libdir_flag_spec_ld"; then
+             eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+           else
+             eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+           fi
+         fi
+         if test -n "$runpath_var" && test -n "$perm_rpath"; then
+           # We should set the runpath_var.
+           rpath=
+           for dir in $perm_rpath; do
+             rpath="$rpath$dir:"
+           done
+           eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+         fi
+         test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+       fi
+
+       shlibpath="$finalize_shlibpath"
+       test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+       if test -n "$shlibpath"; then
+         eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+       fi
+
+       # Get the real and link names of the library.
+       eval shared_ext=\"$shrext_cmds\"
+       eval library_names=\"$library_names_spec\"
+       set dummy $library_names
+       shift
+       realname="$1"
+       shift
+
+       if test -n "$soname_spec"; then
+         eval soname=\"$soname_spec\"
+       else
+         soname="$realname"
+       fi
+       if test -z "$dlname"; then
+         dlname=$soname
+       fi
+
+       lib="$output_objdir/$realname"
+       linknames=
+       for link
+       do
+         linknames="$linknames $link"
+       done
+
+       # Use standard objects if they are pic
+       test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       test "X$libobjs" = "X " && libobjs=
+
+       delfiles=
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+         export_symbols="$output_objdir/$libname.uexp"
+         delfiles="$delfiles $export_symbols"
+       fi
+
+       orig_export_symbols=
+       case $host_os in
+       cygwin* | mingw* | cegcc*)
+         if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+           # exporting using user supplied symfile
+           if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+             # and it's NOT already a .def file. Must figure out
+             # which of the given symbols are data symbols and tag
+             # them as such. So, trigger use of export_symbols_cmds.
+             # export_symbols gets reassigned inside the "prepare
+             # the list of exported symbols" if statement, so the
+             # include_expsyms logic still works.
+             orig_export_symbols="$export_symbols"
+             export_symbols=
+             always_export_symbols=yes
+           fi
+         fi
+         ;;
+       esac
+
+       # Prepare the list of exported symbols
+       if test -z "$export_symbols"; then
+         if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+           func_verbose "generating symbol list for \`$libname.la'"
+           export_symbols="$output_objdir/$libname.exp"
+           $opt_dry_run || $RM $export_symbols
+           cmds=$export_symbols_cmds
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $cmds; do
+             IFS="$save_ifs"
+             eval cmd=\"$cmd\"
+             func_len " $cmd"
+             len=$func_len_result
+             if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+               func_show_eval "$cmd" 'exit $?'
+               skipped_export=false
+             else
+               # The command line is too long to execute in one step.
+               func_verbose "using reloadable object file for export list..."
+               skipped_export=:
+               # Break out early, otherwise skipped_export may be
+               # set to false by a later but shorter cmd.
+               break
+             fi
+           done
+           IFS="$save_ifs"
+           if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+       fi
+
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         tmp_export_symbols="$export_symbols"
+         test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+         $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+       fi
+
+       if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+         # The given exports_symbols file has to be filtered, so filter it.
+         func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+         # FIXME: $output_objdir/$libname.filter potentially contains lots of
+         # 's' commands which not all seds can handle. GNU sed should be fine
+         # though. Also, the filter scales superlinearly with the number of
+         # global variables. join(1) would be nice here, but unfortunately
+         # isn't a blessed tool.
+         $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+         delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+         export_symbols=$output_objdir/$libname.def
+         $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+       fi
+
+       tmp_deplibs=
+       for test_deplib in $deplibs; do
+         case " $convenience " in
+         *" $test_deplib "*) ;;
+         *)
+           tmp_deplibs="$tmp_deplibs $test_deplib"
+           ;;
+         esac
+       done
+       deplibs="$tmp_deplibs"
+
+       if test -n "$convenience"; then
+         if test -n "$whole_archive_flag_spec" &&
+           test "$compiler_needs_object" = yes &&
+           test -z "$libobjs"; then
+           # extract the archives, so we have objects to list.
+           # TODO: could optimize this to just extract one archive.
+           whole_archive_flag_spec=
+         fi
+         if test -n "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         else
+           gentop="$output_objdir/${outputname}x"
+           generated="$generated $gentop"
+
+           func_extract_archives $gentop $convenience
+           libobjs="$libobjs $func_extract_archives_result"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+       fi
+
+       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+         eval flag=\"$thread_safe_flag_spec\"
+         linker_flags="$linker_flags $flag"
+       fi
+
+       # Make a backup of the uninstalled library when relinking
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+       fi
+
+       # Do each of the archive commands.
+       if test "$module" = yes && test -n "$module_cmds" ; then
+         if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+           eval test_cmds=\"$module_expsym_cmds\"
+           cmds=$module_expsym_cmds
+         else
+           eval test_cmds=\"$module_cmds\"
+           cmds=$module_cmds
+         fi
+       else
+         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+           eval test_cmds=\"$archive_expsym_cmds\"
+           cmds=$archive_expsym_cmds
+         else
+           eval test_cmds=\"$archive_cmds\"
+           cmds=$archive_cmds
+         fi
+       fi
+
+       if test "X$skipped_export" != "X:" &&
+          func_len " $test_cmds" &&
+          len=$func_len_result &&
+          test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         :
+       else
+         # The command line is too long to link in one step, link piecewise
+         # or, if using GNU ld and skipped_export is not :, use a linker
+         # script.
+
+         # Save the value of $output and $libobjs because we want to
+         # use them later.  If we have whole_archive_flag_spec, we
+         # want to use save_libobjs as it was before
+         # whole_archive_flag_spec was expanded, because we can't
+         # assume the linker understands whole_archive_flag_spec.
+         # This may have to be revisited, in case too many
+         # convenience libraries get linked in and end up exceeding
+         # the spec.
+         if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+         fi
+         save_output=$output
+         output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+
+         # Clear the reloadable object creation command queue and
+         # initialize k to one.
+         test_cmds=
+         concat_cmds=
+         objlist=
+         last_robj=
+         k=1
+
+         if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+           output=${output_objdir}/${output_la}.lnkscript
+           func_verbose "creating GNU ld script: $output"
+           $ECHO 'INPUT (' > $output
+           for obj in $save_libobjs
+           do
+             $ECHO "$obj" >> $output
+           done
+           $ECHO ')' >> $output
+           delfiles="$delfiles $output"
+         elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+           output=${output_objdir}/${output_la}.lnk
+           func_verbose "creating linker input file list: $output"
+           : > $output
+           set x $save_libobjs
+           shift
+           firstobj=
+           if test "$compiler_needs_object" = yes; then
+             firstobj="$1 "
+             shift
+           fi
+           for obj
+           do
+             $ECHO "$obj" >> $output
+           done
+           delfiles="$delfiles $output"
+           output=$firstobj\"$file_list_spec$output\"
+         else
+           if test -n "$save_libobjs"; then
+             func_verbose "creating reloadable object files..."
+             output=$output_objdir/$output_la-${k}.$objext
+             eval test_cmds=\"$reload_cmds\"
+             func_len " $test_cmds"
+             len0=$func_len_result
+             len=$len0
+
+             # Loop over the list of objects to be linked.
+             for obj in $save_libobjs
+             do
+               func_len " $obj"
+               func_arith $len + $func_len_result
+               len=$func_arith_result
+               if test "X$objlist" = X ||
+                  test "$len" -lt "$max_cmd_len"; then
+                 func_append objlist " $obj"
+               else
+                 # The command $test_cmds is almost too long, add a
+                 # command to the queue.
+                 if test "$k" -eq 1 ; then
+                   # The first file doesn't have a previous command to add.
+                   eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+                 else
+                   # All subsequent reloadable object files will link in
+                   # the last one created.
+                   eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+                 fi
+                 last_robj=$output_objdir/$output_la-${k}.$objext
+                 func_arith $k + 1
+                 k=$func_arith_result
+                 output=$output_objdir/$output_la-${k}.$objext
+                 objlist=$obj
+                 func_len " $last_robj"
+                 func_arith $len0 + $func_len_result
+                 len=$func_arith_result
+               fi
+             done
+             # Handle the remaining objects by creating one last
+             # reloadable object file.  All subsequent reloadable object
+             # files will link in the last one created.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+             fi
+             delfiles="$delfiles $output"
+
+           else
+             output=
+           fi
+
+           if ${skipped_export-false}; then
+             func_verbose "generating symbol list for \`$libname.la'"
+             export_symbols="$output_objdir/$libname.exp"
+             $opt_dry_run || $RM $export_symbols
+             libobjs=$output
+             # Append the command to create the export file.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+             fi
+           fi
+
+           test -n "$save_libobjs" &&
+             func_verbose "creating a temporary reloadable object file: $output"
+
+           # Loop through the commands generated above and execute them.
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $concat_cmds; do
+             IFS="$save_ifs"
+             $opt_silent || {
+                 func_quote_for_expand "$cmd"
+                 eval "func_echo $func_quote_for_expand_result"
+             }
+             $opt_dry_run || eval "$cmd" || {
+               lt_exit=$?
+
+               # Restore the uninstalled library and exit
+               if test "$mode" = relink; then
+                 ( cd "$output_objdir" && \
+                   $RM "${realname}T" && \
+                   $MV "${realname}U" "$realname" )
+               fi
+
+               exit $lt_exit
+             }
+           done
+           IFS="$save_ifs"
+
+           if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+
+          if ${skipped_export-false}; then
+           if test -n "$export_symbols" && test -n "$include_expsyms"; then
+             tmp_export_symbols="$export_symbols"
+             test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+             $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+           fi
+
+           if test -n "$orig_export_symbols"; then
+             # The given exports_symbols file has to be filtered, so filter it.
+             func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+             # FIXME: $output_objdir/$libname.filter potentially contains lots of
+             # 's' commands which not all seds can handle. GNU sed should be fine
+             # though. Also, the filter scales superlinearly with the number of
+             # global variables. join(1) would be nice here, but unfortunately
+             # isn't a blessed tool.
+             $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+             delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+             export_symbols=$output_objdir/$libname.def
+             $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+           fi
+         fi
+
+         libobjs=$output
+         # Restore the value of output.
+         output=$save_output
+
+         if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+         # Expand the library linking commands again to reset the
+         # value of $libobjs for piecewise linking.
+
+         # Do each of the archive commands.
+         if test "$module" = yes && test -n "$module_cmds" ; then
+           if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+             cmds=$module_expsym_cmds
+           else
+             cmds=$module_cmds
+           fi
+         else
+           if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+             cmds=$archive_expsym_cmds
+           else
+             cmds=$archive_cmds
+           fi
+         fi
+       fi
+
+       if test -n "$delfiles"; then
+         # Append the command to remove temporary files to $cmds.
+         eval cmds=\"\$cmds~\$RM $delfiles\"
+       fi
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         libobjs="$libobjs $func_extract_archives_result"
+         test "X$libobjs" = "X " && libobjs=
+       fi
+
+       save_ifs="$IFS"; IFS='~'
+       for cmd in $cmds; do
+         IFS="$save_ifs"
+         eval cmd=\"$cmd\"
+         $opt_silent || {
+           func_quote_for_expand "$cmd"
+           eval "func_echo $func_quote_for_expand_result"
+         }
+         $opt_dry_run || eval "$cmd" || {
+           lt_exit=$?
+
+           # Restore the uninstalled library and exit
+           if test "$mode" = relink; then
+             ( cd "$output_objdir" && \
+               $RM "${realname}T" && \
+               $MV "${realname}U" "$realname" )
+           fi
+
+           exit $lt_exit
+         }
+       done
+       IFS="$save_ifs"
+
+       # Restore the uninstalled library and exit
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+         if test -n "$convenience"; then
+           if test -z "$whole_archive_flag_spec"; then
+             func_show_eval '${RM}r "$gentop"'
+           fi
+         fi
+
+         exit $EXIT_SUCCESS
+       fi
+
+       # Create links to the real library.
+       for linkname in $linknames; do
+         if test "$realname" != "$linkname"; then
+           func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+         fi
+       done
+
+       # If -module or -export-dynamic was specified, set the dlname.
+       if test "$module" = yes || test "$export_dynamic" = yes; then
+         # On all known operating systems, these are identical.
+         dlname="$soname"
+       fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for objects"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+       test -n "$objs$old_deplibs" && \
+         func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+       libobj=$output
+       func_lo2o "$libobj"
+       obj=$func_lo2o_result
+       ;;
+      *)
+       libobj=
+       obj="$output"
+       ;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
+      wl=
+
+      if test -n "$convenience"; then
+       if test -n "$whole_archive_flag_spec"; then
+         eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+         reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+       else
+         gentop="$output_objdir/${obj}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $convenience
+         reload_conv_objs="$reload_objs $func_extract_archives_result"
+       fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       # Create an invalid libtool object if no PIC, so that we don't
+       # accidentally link it into a program.
+       # $show "echo timestamp > $libobj"
+       # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+       exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+       # Only do commands if we really have different PIC objects.
+       reload_objs="$libobjs $reload_conv_objs"
+       output="$libobj"
+       func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+       func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+       *cygwin*) func_stripname '' '.exe' "$output"
+                 output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for programs"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for programs"
+
+      test "$preload" = yes \
+        && test "$dlopen_support" = unknown \
+       && test "$dlopen_self" = unknown \
+       && test "$dlopen_self_static" = unknown && \
+         func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+       # On Rhapsody replace the C library is the System framework
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       ;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+       # Don't allow lazy linking, it breaks C++ global constructors
+       # But is supposedly fixed on 10.4 or later (yay!).
+       if test "$tagname" = CXX ; then
+         case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+           10.[0123])
+             compile_command="$compile_command ${wl}-bind_at_load"
+             finalize_command="$finalize_command ${wl}-bind_at_load"
+           ;;
+         esac
+       fi
+       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       ;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $compile_deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $compile_deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath $xrpath; do
+         # This is the magic to use -rpath.
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$perm_rpath " in
+         *" $libdir "*) ;;
+         *) perm_rpath="$perm_rpath $libdir" ;;
+         esac
+       fi
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$libdir:"*) ;;
+         ::) dllsearchpath=$libdir;;
+         *) dllsearchpath="$dllsearchpath:$libdir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$finalize_perm_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+       # Transform all the library objects into standard objects.
+       compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+       func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=yes
+      case $host in
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *cegcc)
+        # Disable wrappers for cegcc, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
+      *)
+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
+       # Replace the output file specification.
+       compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       link_command="$compile_command$compile_rpath"
+
+       # We have no uninstalled library dependencies, so finalize right now.
+       exit_status=0
+       func_show_eval "$link_command" 'exit_status=$?'
+
+       # Delete the generated files.
+       if test -f "$output_objdir/${outputname}S.${objext}"; then
+         func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+       fi
+
+       exit $exit_status
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+       compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+       finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+       if test -n "$perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+       if test -n "$finalize_perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $finalize_perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+      fi
+
+      if test "$no_install" = yes; then
+       # We don't need to create a wrapper script.
+       link_command="$compile_var$compile_command$compile_rpath"
+       # Replace the output file specification.
+       link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       # Delete the old output file.
+       $opt_dry_run || $RM $output
+       # Link the executable and exit
+       func_show_eval "$link_command" 'exit $?'
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+       # Fast installation is not supported
+       link_command="$compile_var$compile_command$compile_rpath"
+       relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+       func_warning "this platform does not like uninstalled shared libraries"
+       func_warning "\`$output' will be relinked during installation"
+      else
+       if test "$fast_install" != no; then
+         link_command="$finalize_var$compile_command$finalize_rpath"
+         if test "$fast_install" = yes; then
+           relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+         else
+           # fast_install is set to needless
+           relink_command=
+         fi
+       else
+         link_command="$compile_var$compile_command$compile_rpath"
+         relink_command="$finalize_var$finalize_command$finalize_rpath"
+       fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+       # Preserve any variables that may affect compiler behavior
+       for var in $variables_saved_for_relink; do
+         if eval test -z \"\${$var+set}\"; then
+           relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+         elif eval var_value=\$$var; test -z "$var_value"; then
+           relink_command="$var=; export $var; $relink_command"
+         else
+           func_quote_for_eval "$var_value"
+           relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+         fi
+       done
+       relink_command="(cd `pwd`; $relink_command)"
+       relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $ECHO for shipping.
+      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+       case $progpath in
+       [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+       *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+       esac
+       qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+       qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+       # win32 will think the script is a binary if it has
+       # a .exe suffix, so we strip it off here.
+       case $output in
+         *.exe) func_stripname '' '.exe' "$output"
+                output=$func_stripname_result ;;
+       esac
+       # test for cygwin because mv fails w/o .exe extensions
+       case $host in
+         *cygwin*)
+           exeext=.exe
+           func_stripname '' '.exe' "$outputname"
+           outputname=$func_stripname_result ;;
+         *) exeext= ;;
+       esac
+       case $host in
+         *cygwin* | *mingw* )
+           func_dirname_and_basename "$output" "" "."
+           output_name=$func_basename_result
+           output_path=$func_dirname_result
+           cwrappersource="$output_path/$objdir/lt-$output_name.c"
+           cwrapper="$output_path/$output_name.exe"
+           $RM $cwrappersource $cwrapper
+           trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_cwrapperexe_src > $cwrappersource
+
+           # The wrapper executable is built using the $host compiler,
+           # because it contains $host paths and files. If cross-
+           # compiling, it, like the target executable, must be
+           # executed on the $host or under an emulation environment.
+           $opt_dry_run || {
+             $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+             $STRIP $cwrapper
+           }
+
+           # Now, create the wrapper script for func_source use:
+           func_ltwrapper_scriptname $cwrapper
+           $RM $func_ltwrapper_scriptname_result
+           trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+           $opt_dry_run || {
+             # note: this script will not be executed, so do not chmod.
+             if test "x$build" = "x$host" ; then
+               $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+             else
+               func_emit_wrapper no > $func_ltwrapper_scriptname_result
+             fi
+           }
+         ;;
+         * )
+           $RM $output
+           trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_wrapper no > $output
+           chmod +x $output
+         ;;
+       esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+       oldobjs="$libobjs_save $symfileobj"
+       addlibs="$convenience"
+       build_libtool_libs=no
+      else
+       if test "$build_libtool_libs" = module; then
+         oldobjs="$libobjs_save"
+         build_libtool_libs=no
+       else
+         oldobjs="$old_deplibs $non_pic_objects"
+         if test "$preload" = yes && test -f "$symfileobj"; then
+           oldobjs="$oldobjs $symfileobj"
+         fi
+       fi
+       addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+       gentop="$output_objdir/${outputname}x"
+       generated="$generated $gentop"
+
+       func_extract_archives $gentop $addlibs
+       oldobjs="$oldobjs $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+       cmds=$old_archive_from_new_cmds
+      else
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         oldobjs="$oldobjs $func_extract_archives_result"
+       fi
+
+       # POSIX demands no paths to be encoded in archives.  We have
+       # to avoid creating archives with duplicate basenames if we
+       # might have to extract them afterwards, e.g., when creating a
+       # static archive out of a convenience library, or when linking
+       # the entirety of a libtool archive into another (currently
+       # not supported by libtool).
+       if (for obj in $oldobjs
+           do
+             func_basename "$obj"
+             $ECHO "$func_basename_result"
+           done | sort | sort -uc >/dev/null 2>&1); then
+         :
+       else
+         $ECHO "copying selected object files to avoid basename conflicts..."
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+         func_mkdir_p "$gentop"
+         save_oldobjs=$oldobjs
+         oldobjs=
+         counter=1
+         for obj in $save_oldobjs
+         do
+           func_basename "$obj"
+           objbase="$func_basename_result"
+           case " $oldobjs " in
+           " ") oldobjs=$obj ;;
+           *[\ /]"$objbase "*)
+             while :; do
+               # Make sure we don't pick an alternate name that also
+               # overlaps.
+               newobj=lt$counter-$objbase
+               func_arith $counter + 1
+               counter=$func_arith_result
+               case " $oldobjs " in
+               *[\ /]"$newobj "*) ;;
+               *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+               esac
+             done
+             func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+             oldobjs="$oldobjs $gentop/$newobj"
+             ;;
+           *) oldobjs="$oldobjs $obj" ;;
+           esac
+         done
+       fi
+       eval cmds=\"$old_archive_cmds\"
+
+       func_len " $cmds"
+       len=$func_len_result
+       if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         cmds=$old_archive_cmds
+       else
+         # the command line is too long to link in one step, link in parts
+         func_verbose "using piecewise archive linking..."
+         save_RANLIB=$RANLIB
+         RANLIB=:
+         objlist=
+         concat_cmds=
+         save_oldobjs=$oldobjs
+         oldobjs=
+         # Is there a better way of finding the last object in the list?
+         for obj in $save_oldobjs
+         do
+           last_oldobj=$obj
+         done
+         eval test_cmds=\"$old_archive_cmds\"
+         func_len " $test_cmds"
+         len0=$func_len_result
+         len=$len0
+         for obj in $save_oldobjs
+         do
+           func_len " $obj"
+           func_arith $len + $func_len_result
+           len=$func_arith_result
+           func_append objlist " $obj"
+           if test "$len" -lt "$max_cmd_len"; then
+             :
+           else
+             # the above command should be used before it gets too long
+             oldobjs=$objlist
+             if test "$obj" = "$last_oldobj" ; then
+               RANLIB=$save_RANLIB
+             fi
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+             objlist=
+             len=$len0
+           fi
+         done
+         RANLIB=$save_RANLIB
+         oldobjs=$objlist
+         if test "X$oldobjs" = "X" ; then
+           eval cmds=\"\$concat_cmds\"
+         else
+           eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+         fi
+       fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+       if eval test -z \"\${$var+set}\"; then
+         relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+       elif eval var_value=\$$var; test -z "$var_value"; then
+         relink_command="$var=; export $var; $relink_command"
+       else
+         func_quote_for_eval "$var_value"
+         relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+       fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+       relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+       for installed in no yes; do
+         if test "$installed" = yes; then
+           if test -z "$install_libdir"; then
+             break
+           fi
+           output="$output_objdir/$outputname"i
+           # Replace all uninstalled libtool libraries with the installed ones
+           newdependency_libs=
+           for deplib in $dependency_libs; do
+             case $deplib in
+             *.la)
+               func_basename "$deplib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$deplib' is not a valid libtool archive"
+               newdependency_libs="$newdependency_libs $libdir/$name"
+               ;;
+             *) newdependency_libs="$newdependency_libs $deplib" ;;
+             esac
+           done
+           dependency_libs="$newdependency_libs"
+           newdlfiles=
+
+           for lib in $dlfiles; do
+             case $lib in
+             *.la)
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlfiles="$newdlfiles $libdir/$name"
+               ;;
+             *) newdlfiles="$newdlfiles $lib" ;;
+             esac
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+             *.la)
+               # Only pass preopened files to the pseudo-archive (for
+               # eventual linking with the app. that links it) if we
+               # didn't already link the preopened objects directly into
+               # the library:
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlprefiles="$newdlprefiles $libdir/$name"
+               ;;
+             esac
+           done
+           dlprefiles="$newdlprefiles"
+         else
+           newdlfiles=
+           for lib in $dlfiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlfiles="$newdlfiles $abs"
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlprefiles="$newdlprefiles $abs"
+           done
+           dlprefiles="$newdlprefiles"
+         fi
+         $RM $output
+         # place dlname in correct position for cygwin
+         tdlname=$dlname
+         case $host,$output,$installed,$module,$dlname in
+           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+         esac
+         $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+         if test "$installed" = no && test "$need_relink" = yes; then
+           $ECHO >> $output "\
+relink_command=\"$relink_command\""
+         fi
+       done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+{ test "$mode" = link || test "$mode" = relink; } &&
+    func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $opt_debug
+    RM="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) RM="$RM $arg"; rmforce=yes ;;
+      -*) RM="$RM $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    origobjdir="$objdir"
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir="$func_dirname_result"
+      if test "X$dir" = X.; then
+       objdir="$origobjdir"
+      else
+       objdir="$dir/$origobjdir"
+      fi
+      func_basename "$file"
+      name="$func_basename_result"
+      test "$mode" = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test "$mode" = clean; then
+       case " $rmdirs " in
+         *" $objdir "*) ;;
+         *) rmdirs="$rmdirs $objdir" ;;
+       esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+        { test -h "$file"; } >/dev/null 2>&1 ||
+        test -f "$file"; then
+       :
+      elif test -d "$file"; then
+       exit_status=1
+       continue
+      elif test "$rmforce" = yes; then
+       continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+       # Possibly a libtool archive, so verify it.
+       if func_lalib_p "$file"; then
+         func_source $dir/$name
+
+         # Delete the libtool libraries and symlinks.
+         for n in $library_names; do
+           rmfiles="$rmfiles $objdir/$n"
+         done
+         test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+
+         case "$mode" in
+         clean)
+           case "  $library_names " in
+           # "  " in the beginning catches empty $dlname
+           *" $dlname "*) ;;
+           *) rmfiles="$rmfiles $objdir/$dlname" ;;
+           esac
+           test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+           ;;
+         uninstall)
+           if test -n "$library_names"; then
+             # Do each command in the postuninstall commands.
+             func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+
+           if test -n "$old_library"; then
+             # Do each command in the old_postuninstall commands.
+             func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+           # FIXME: should reinstall the best remaining shared library.
+           ;;
+         esac
+       fi
+       ;;
+
+      *.lo)
+       # Possibly a libtool object, so verify it.
+       if func_lalib_p "$file"; then
+
+         # Read the .lo file
+         func_source $dir/$name
+
+         # Add PIC object to the list of files to remove.
+         if test -n "$pic_object" &&
+            test "$pic_object" != none; then
+           rmfiles="$rmfiles $dir/$pic_object"
+         fi
+
+         # Add non-PIC object to the list of files to remove.
+         if test -n "$non_pic_object" &&
+            test "$non_pic_object" != none; then
+           rmfiles="$rmfiles $dir/$non_pic_object"
+         fi
+       fi
+       ;;
+
+      *)
+       if test "$mode" = clean ; then
+         noexename=$name
+         case $file in
+         *.exe)
+           func_stripname '' '.exe' "$file"
+           file=$func_stripname_result
+           func_stripname '' '.exe' "$name"
+           noexename=$func_stripname_result
+           # $file with .exe has already been added to rmfiles,
+           # add $file without .exe
+           rmfiles="$rmfiles $file"
+           ;;
+         esac
+         # Do a test to see if this is a libtool program.
+         if func_ltwrapper_p "$file"; then
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             relink_command=
+             func_source $func_ltwrapper_scriptname_result
+             rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+           else
+             relink_command=
+             func_source $dir/$noexename
+           fi
+
+           # note $name still contains .exe if it was in $file originally
+           # as does the version of $file that was added into $rmfiles
+           rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+           if test "$fast_install" = yes && test -n "$relink_command"; then
+             rmfiles="$rmfiles $objdir/lt-$name"
+           fi
+           if test "X$noexename" != "X$name" ; then
+             rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+           fi
+         fi
+       fi
+       ;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+       func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+    func_mode_uninstall ${1+"$@"}
+
+test -z "$mode" && {
+  help="$generic_help"
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode \`$mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/man/Makefile.am b/man/Makefile.am
new file mode 100644 (file)
index 0000000..a8e9a5a
--- /dev/null
@@ -0,0 +1,192 @@
+
+# subdirectories for translated manual pages
+if USE_NLS
+SUBDIRS = po cs de es fi fr hu id it ja ko pl pt_BR ru sv tr zh_CN zh_TW
+else
+SUBDIRS =
+endif
+
+man_MANS = \
+       chage.1 \
+       chfn.1 \
+       chgpasswd.8 \
+       chpasswd.8 \
+       chsh.1 \
+       expiry.1 \
+       faillog.5 \
+       faillog.8 \
+       getspnam.3 \
+       gpasswd.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmems.8 \
+       groupmod.8 \
+       groups.1 \
+       grpck.8 \
+       grpconv.8 \
+       grpunconv.8 \
+       gshadow.5 \
+       lastlog.8 \
+       login.1 \
+       login.defs.5 \
+       logoutd.8 \
+       newgrp.1 \
+       newusers.8 \
+       nologin.8 \
+       passwd.1 \
+       passwd.5 \
+       pwck.8 \
+       pwconv.8 \
+       pwunconv.8 \
+       sg.1 \
+       shadow.3 \
+       shadow.5 \
+       su.1 \
+       suauth.5 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8 \
+       vigr.8 \
+       vipw.8
+
+man_nopam = \
+       limits.5 \
+       login.access.5 \
+       porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+man_XMANS = \
+       chage.1.xml \
+       chfn.1.xml \
+       chgpasswd.8.xml \
+       chpasswd.8.xml \
+       chsh.1.xml \
+       expiry.1.xml \
+       faillog.5.xml \
+       faillog.8.xml \
+       gpasswd.1.xml \
+       groupadd.8.xml \
+       groupdel.8.xml \
+       groupmems.8.xml \
+       groupmod.8.xml \
+       groups.1.xml \
+       grpck.8.xml \
+       gshadow.5.xml \
+       lastlog.8.xml \
+       limits.5.xml \
+       login.1.xml \
+       login.access.5.xml \
+       login.defs.5.xml \
+       logoutd.8.xml \
+       newgrp.1.xml \
+       newusers.8.xml \
+       nologin.8.xml \
+       passwd.1.xml \
+       passwd.5.xml \
+       porttime.5.xml \
+       pwck.8.xml \
+       pwconv.8.xml \
+       shadow.3.xml \
+       shadow.5.xml \
+       sg.1.xml \
+       su.1.xml \
+       suauth.5.xml \
+       useradd.8.xml \
+       userdel.8.xml \
+       usermod.8.xml \
+       vipw.8.xml
+
+login_defs_v = \
+       CHFN_AUTH.xml \
+       CHFN_RESTRICT.xml \
+       CHSH_AUTH.xml \
+       CONSOLE.xml \
+       CONSOLE_GROUPS.xml \
+       CREATE_HOME.xml \
+       DEFAULT_HOME.xml \
+       ENCRYPT_METHOD.xml \
+       ENV_HZ.xml \
+       ENVIRON_FILE.xml \
+       ENV_PATH.xml \
+       ENV_SUPATH.xml \
+       ENV_TZ.xml \
+       ERASECHAR.xml \
+       FAIL_DELAY.xml \
+       FAILLOG_ENAB.xml \
+       FAKE_SHELL.xml \
+       FTMP_FILE.xml \
+       GID_MAX.xml \
+       HUSHLOGIN_FILE.xml \
+       ISSUE_FILE.xml \
+       KILLCHAR.xml \
+       LASTLOG_ENAB.xml \
+       LOGIN_RETRIES.xml \
+       LOGIN_STRING.xml \
+       LOGIN_TIMEOUT.xml \
+       LOG_OK_LOGINS.xml \
+       LOG_UNKFAIL_ENAB.xml \
+       MAIL_CHECK_ENAB.xml \
+       MAIL_DIR.xml \
+       MAX_MEMBERS_PER_GROUP.xml \
+       MD5_CRYPT_ENAB.xml \
+       MOTD_FILE.xml \
+       NOLOGINS_FILE.xml \
+       OBSCURE_CHECKS_ENAB.xml \
+       PASS_ALWAYS_WARN.xml \
+       PASS_CHANGE_TRIES.xml \
+       PASS_MAX_DAYS.xml \
+       PASS_MAX_LEN.xml \
+       PASS_MIN_DAYS.xml \
+       PASS_WARN_AGE.xml \
+       PORTTIME_CHECKS_ENAB.xml \
+       QUOTAS_ENAB.xml \
+       SHA_CRYPT_MIN_ROUNDS.xml \
+       SULOG_FILE.xml \
+       SU_NAME.xml \
+       SU_WHEEL_ONLY.xml \
+       SYSLOG_SG_ENAB.xml \
+       SYSLOG_SU_ENAB.xml \
+       TTYGROUP.xml \
+       TTYTYPE_FILE.xml \
+       UID_MAX.xml \
+       ULIMIT.xml \
+       UMASK.xml \
+       USERDEL_CMD.xml \
+       USERGROUPS_ENAB.xml \
+       SYS_GID_MAX.xml \
+       SYS_UID_MAX.xml
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_XMANS) \
+       $(addprefix login.defs.d/,$(login_defs_v)) \
+       $(man_nopam) \
+       id.1 \
+       id.1.xml \
+       sulogin.8 \
+       sulogin.8.xml \
+       generate_mans.mak \
+       generate_translations.mak
+
+generate_mans.deps: *.xml
+       awk 'BEGIN{FS="\"";} /^<!ENTITY .* * SYSTEM ".*">$$/{ f=FILENAME; sub(/.xml/,"",f); print f ": " $$2 }' $(man_XMANS) > $@
+
+if ENABLE_REGENERATE_MAN
+
+include generate_mans.deps
+
+include generate_mans.mak
+
+CLEANFILES = $(man_MANS)
+
+else
+$(man_MANS):
+       @echo ""
+       @echo "Error: you need to run configure with '--enable-man'"
+       @echo "       in order to regenerate man pages."
+       @echo ""
+       @false
+endif
diff --git a/man/Makefile.in b/man/Makefile.in
new file mode 100644 (file)
index 0000000..7426e26
--- /dev/null
@@ -0,0 +1,1052 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(srcdir)/config.xml.in $(srcdir)/generate_mans.deps \
+       $(srcdir)/generate_mans.mak
+subdir = man
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = config.xml
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+       "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = po cs de es fi fr hu id it ja ko pl pt_BR ru sv tr \
+       zh_CN zh_TW
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@USE_NLS_FALSE@SUBDIRS = 
+
+# subdirectories for translated manual pages
+@USE_NLS_TRUE@SUBDIRS = po cs de es fi fr hu id it ja ko pl pt_BR ru sv tr zh_CN zh_TW
+man_MANS = chage.1 chfn.1 chgpasswd.8 chpasswd.8 chsh.1 expiry.1 \
+       faillog.5 faillog.8 getspnam.3 gpasswd.1 groupadd.8 groupdel.8 \
+       groupmems.8 groupmod.8 groups.1 grpck.8 grpconv.8 grpunconv.8 \
+       gshadow.5 lastlog.8 login.1 login.defs.5 logoutd.8 newgrp.1 \
+       newusers.8 nologin.8 passwd.1 passwd.5 pwck.8 pwconv.8 \
+       pwunconv.8 sg.1 shadow.3 shadow.5 su.1 suauth.5 useradd.8 \
+       userdel.8 usermod.8 vigr.8 vipw.8 $(am__append_1)
+man_nopam = \
+       limits.5 \
+       login.access.5 \
+       porttime.5
+
+man_XMANS = \
+       chage.1.xml \
+       chfn.1.xml \
+       chgpasswd.8.xml \
+       chpasswd.8.xml \
+       chsh.1.xml \
+       expiry.1.xml \
+       faillog.5.xml \
+       faillog.8.xml \
+       gpasswd.1.xml \
+       groupadd.8.xml \
+       groupdel.8.xml \
+       groupmems.8.xml \
+       groupmod.8.xml \
+       groups.1.xml \
+       grpck.8.xml \
+       gshadow.5.xml \
+       lastlog.8.xml \
+       limits.5.xml \
+       login.1.xml \
+       login.access.5.xml \
+       login.defs.5.xml \
+       logoutd.8.xml \
+       newgrp.1.xml \
+       newusers.8.xml \
+       nologin.8.xml \
+       passwd.1.xml \
+       passwd.5.xml \
+       porttime.5.xml \
+       pwck.8.xml \
+       pwconv.8.xml \
+       shadow.3.xml \
+       shadow.5.xml \
+       sg.1.xml \
+       su.1.xml \
+       suauth.5.xml \
+       useradd.8.xml \
+       userdel.8.xml \
+       usermod.8.xml \
+       vipw.8.xml
+
+login_defs_v = \
+       CHFN_AUTH.xml \
+       CHFN_RESTRICT.xml \
+       CHSH_AUTH.xml \
+       CONSOLE.xml \
+       CONSOLE_GROUPS.xml \
+       CREATE_HOME.xml \
+       DEFAULT_HOME.xml \
+       ENCRYPT_METHOD.xml \
+       ENV_HZ.xml \
+       ENVIRON_FILE.xml \
+       ENV_PATH.xml \
+       ENV_SUPATH.xml \
+       ENV_TZ.xml \
+       ERASECHAR.xml \
+       FAIL_DELAY.xml \
+       FAILLOG_ENAB.xml \
+       FAKE_SHELL.xml \
+       FTMP_FILE.xml \
+       GID_MAX.xml \
+       HUSHLOGIN_FILE.xml \
+       ISSUE_FILE.xml \
+       KILLCHAR.xml \
+       LASTLOG_ENAB.xml \
+       LOGIN_RETRIES.xml \
+       LOGIN_STRING.xml \
+       LOGIN_TIMEOUT.xml \
+       LOG_OK_LOGINS.xml \
+       LOG_UNKFAIL_ENAB.xml \
+       MAIL_CHECK_ENAB.xml \
+       MAIL_DIR.xml \
+       MAX_MEMBERS_PER_GROUP.xml \
+       MD5_CRYPT_ENAB.xml \
+       MOTD_FILE.xml \
+       NOLOGINS_FILE.xml \
+       OBSCURE_CHECKS_ENAB.xml \
+       PASS_ALWAYS_WARN.xml \
+       PASS_CHANGE_TRIES.xml \
+       PASS_MAX_DAYS.xml \
+       PASS_MAX_LEN.xml \
+       PASS_MIN_DAYS.xml \
+       PASS_WARN_AGE.xml \
+       PORTTIME_CHECKS_ENAB.xml \
+       QUOTAS_ENAB.xml \
+       SHA_CRYPT_MIN_ROUNDS.xml \
+       SULOG_FILE.xml \
+       SU_NAME.xml \
+       SU_WHEEL_ONLY.xml \
+       SYSLOG_SG_ENAB.xml \
+       SYSLOG_SU_ENAB.xml \
+       TTYGROUP.xml \
+       TTYTYPE_FILE.xml \
+       UID_MAX.xml \
+       ULIMIT.xml \
+       UMASK.xml \
+       USERDEL_CMD.xml \
+       USERGROUPS_ENAB.xml \
+       SYS_GID_MAX.xml \
+       SYS_UID_MAX.xml
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_XMANS) \
+       $(addprefix login.defs.d/,$(login_defs_v)) \
+       $(man_nopam) \
+       id.1 \
+       id.1.xml \
+       sulogin.8 \
+       sulogin.8.xml \
+       generate_mans.mak \
+       generate_translations.mak
+
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@CLEANFILES = $(man_MANS)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/generate_mans.deps $(srcdir)/generate_mans.mak $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+config.xml: $(top_builddir)/config.status $(srcdir)/config.xml.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man3: $(man3_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)"
+       @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.3*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           3*) ;; \
+           *) ext='3' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst"; \
+       done
+uninstall-man3:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.3*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           3*) ;; \
+           *) ext='3' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man3dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(MANS)
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+       uninstall-man8
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+       install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic clean-libtool \
+       ctags ctags-recursive distclean distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-man1 install-man3 \
+       install-man5 install-man8 install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am uninstall-man uninstall-man1 \
+       uninstall-man3 uninstall-man5 uninstall-man8
+
+
+generate_mans.deps: *.xml
+       awk 'BEGIN{FS="\"";} /^<!ENTITY .* * SYSTEM ".*">$$/{ f=FILENAME; sub(/.xml/,"",f); print f ": " $$2 }' $(man_XMANS) > $@
+@ENABLE_REGENERATE_MAN_TRUE@chfn.1: login.defs.d/CHFN_AUTH.xml
+@ENABLE_REGENERATE_MAN_TRUE@chfn.1: login.defs.d/CHFN_RESTRICT.xml
+@ENABLE_REGENERATE_MAN_TRUE@chfn.1: login.defs.d/LOGIN_STRING.xml
+@ENABLE_REGENERATE_MAN_TRUE@chgpasswd.8: login.defs.d/ENCRYPT_METHOD.xml
+@ENABLE_REGENERATE_MAN_TRUE@chgpasswd.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@chgpasswd.8: login.defs.d/MD5_CRYPT_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@chgpasswd.8: login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
+@ENABLE_REGENERATE_MAN_TRUE@chpasswd.8: login.defs.d/ENCRYPT_METHOD.xml
+@ENABLE_REGENERATE_MAN_TRUE@chpasswd.8: login.defs.d/MD5_CRYPT_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@chpasswd.8: login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
+@ENABLE_REGENERATE_MAN_TRUE@chsh.1: login.defs.d/CHSH_AUTH.xml
+@ENABLE_REGENERATE_MAN_TRUE@chsh.1: login.defs.d/LOGIN_STRING.xml
+@ENABLE_REGENERATE_MAN_TRUE@gpasswd.1: login.defs.d/ENCRYPT_METHOD.xml
+@ENABLE_REGENERATE_MAN_TRUE@gpasswd.1: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@gpasswd.1: login.defs.d/MD5_CRYPT_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@gpasswd.1: login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
+@ENABLE_REGENERATE_MAN_TRUE@groupadd.8: login.defs.d/GID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@groupadd.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@groupadd.8: login.defs.d/SYS_GID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@groupadd.8: config.xml
+@ENABLE_REGENERATE_MAN_TRUE@groupdel.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@groupmems.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@groupmod.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@grpck.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/CONSOLE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/CONSOLE_GROUPS.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/DEFAULT_HOME.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/ENV_HZ.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/ENV_PATH.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/ENV_SUPATH.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/ENV_TZ.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/ENVIRON_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/ERASECHAR.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/FAIL_DELAY.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/FAILLOG_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/FAKE_SHELL.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/FTMP_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/HUSHLOGIN_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/ISSUE_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/KILLCHAR.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/LASTLOG_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/LOGIN_RETRIES.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/LOGIN_STRING.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/LOGIN_TIMEOUT.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/LOG_OK_LOGINS.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/LOG_UNKFAIL_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/MAIL_CHECK_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/MAIL_DIR.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/MOTD_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/NOLOGINS_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/PORTTIME_CHECKS_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/QUOTAS_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/TTYGROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/TTYTYPE_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/ULIMIT.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/UMASK.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.1: login.defs.d/USERGROUPS_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/CHFN_AUTH.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/CHFN_RESTRICT.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/CHSH_AUTH.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/CONSOLE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/CONSOLE_GROUPS.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/CREATE_HOME.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/DEFAULT_HOME.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/ENCRYPT_METHOD.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/ENV_HZ.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/ENV_PATH.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/ENV_SUPATH.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/ENV_TZ.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/ENVIRON_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/ERASECHAR.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/FAIL_DELAY.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/FAILLOG_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/FAKE_SHELL.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/FTMP_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/GID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/HUSHLOGIN_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/ISSUE_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/KILLCHAR.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/LASTLOG_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/LOG_OK_LOGINS.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/LOG_UNKFAIL_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/LOGIN_RETRIES.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/LOGIN_STRING.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/LOGIN_TIMEOUT.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/MAIL_CHECK_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/MAIL_DIR.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/MD5_CRYPT_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/MOTD_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/NOLOGINS_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/OBSCURE_CHECKS_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/PASS_ALWAYS_WARN.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/PASS_CHANGE_TRIES.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/PASS_MAX_LEN.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/PASS_MAX_DAYS.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/PASS_MIN_DAYS.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/PASS_WARN_AGE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/PORTTIME_CHECKS_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/QUOTAS_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/SULOG_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/SU_NAME.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/SU_WHEEL_ONLY.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/SYS_GID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/SYSLOG_SG_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/SYSLOG_SU_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/SYS_UID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/TTYGROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/TTYTYPE_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/UID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/ULIMIT.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/UMASK.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/USERDEL_CMD.xml
+@ENABLE_REGENERATE_MAN_TRUE@login.defs.5: login.defs.d/USERGROUPS_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@newgrp.1: login.defs.d/SYSLOG_SG_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@newusers.8: login.defs.d/ENCRYPT_METHOD.xml
+@ENABLE_REGENERATE_MAN_TRUE@newusers.8: login.defs.d/GID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@newusers.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@newusers.8: login.defs.d/MD5_CRYPT_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@newusers.8: login.defs.d/PASS_MAX_DAYS.xml
+@ENABLE_REGENERATE_MAN_TRUE@newusers.8: login.defs.d/PASS_MIN_DAYS.xml
+@ENABLE_REGENERATE_MAN_TRUE@newusers.8: login.defs.d/PASS_WARN_AGE.xml
+@ENABLE_REGENERATE_MAN_TRUE@newusers.8: login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
+@ENABLE_REGENERATE_MAN_TRUE@newusers.8: login.defs.d/SYS_GID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@newusers.8: login.defs.d/SYS_UID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@newusers.8: login.defs.d/UID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@newusers.8: login.defs.d/UMASK.xml
+@ENABLE_REGENERATE_MAN_TRUE@passwd.1: login.defs.d/ENCRYPT_METHOD.xml
+@ENABLE_REGENERATE_MAN_TRUE@passwd.1: login.defs.d/MD5_CRYPT_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@passwd.1: login.defs.d/OBSCURE_CHECKS_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@passwd.1: login.defs.d/PASS_ALWAYS_WARN.xml
+@ENABLE_REGENERATE_MAN_TRUE@passwd.1: login.defs.d/PASS_CHANGE_TRIES.xml
+@ENABLE_REGENERATE_MAN_TRUE@passwd.1: login.defs.d/PASS_MAX_LEN.xml
+@ENABLE_REGENERATE_MAN_TRUE@passwd.1: login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
+@ENABLE_REGENERATE_MAN_TRUE@pwck.8: login.defs.d/PASS_MAX_DAYS.xml
+@ENABLE_REGENERATE_MAN_TRUE@pwck.8: login.defs.d/PASS_MIN_DAYS.xml
+@ENABLE_REGENERATE_MAN_TRUE@pwck.8: login.defs.d/PASS_WARN_AGE.xml
+@ENABLE_REGENERATE_MAN_TRUE@pwconv.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@pwconv.8: login.defs.d/PASS_MAX_DAYS.xml
+@ENABLE_REGENERATE_MAN_TRUE@pwconv.8: login.defs.d/PASS_MIN_DAYS.xml
+@ENABLE_REGENERATE_MAN_TRUE@pwconv.8: login.defs.d/PASS_WARN_AGE.xml
+@ENABLE_REGENERATE_MAN_TRUE@sg.1: login.defs.d/SYSLOG_SG_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/CONSOLE.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/CONSOLE_GROUPS.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/DEFAULT_HOME.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/ENV_HZ.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/ENVIRON_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/ENV_PATH.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/ENV_SUPATH.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/ENV_TZ.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/LOGIN_STRING.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/MAIL_CHECK_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/MAIL_DIR.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/QUOTAS_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/SULOG_FILE.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/SU_NAME.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/SU_WHEEL_ONLY.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/SYSLOG_SU_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@su.1: login.defs.d/USERGROUPS_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@useradd.8: login.defs.d/CREATE_HOME.xml
+@ENABLE_REGENERATE_MAN_TRUE@useradd.8: login.defs.d/GID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@useradd.8: login.defs.d/MAIL_DIR.xml
+@ENABLE_REGENERATE_MAN_TRUE@useradd.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@useradd.8: login.defs.d/PASS_MAX_DAYS.xml
+@ENABLE_REGENERATE_MAN_TRUE@useradd.8: login.defs.d/PASS_MIN_DAYS.xml
+@ENABLE_REGENERATE_MAN_TRUE@useradd.8: login.defs.d/PASS_WARN_AGE.xml
+@ENABLE_REGENERATE_MAN_TRUE@useradd.8: login.defs.d/SYS_GID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@useradd.8: login.defs.d/SYS_UID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@useradd.8: login.defs.d/UID_MAX.xml
+@ENABLE_REGENERATE_MAN_TRUE@useradd.8: login.defs.d/UMASK.xml
+@ENABLE_REGENERATE_MAN_TRUE@useradd.8: login.defs.d/USERGROUPS_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@userdel.8: login.defs.d/MAIL_DIR.xml
+@ENABLE_REGENERATE_MAN_TRUE@userdel.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+@ENABLE_REGENERATE_MAN_TRUE@userdel.8: login.defs.d/USERDEL_CMD.xml
+@ENABLE_REGENERATE_MAN_TRUE@userdel.8: login.defs.d/USERGROUPS_ENAB.xml
+@ENABLE_REGENERATE_MAN_TRUE@usermod.8: login.defs.d/MAIL_DIR.xml
+@ENABLE_REGENERATE_MAN_TRUE@usermod.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+
+@ENABLE_REGENERATE_MAN_TRUE@%: %.xml Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(SHA_CRYPT_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@               -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@grpconv.8 grpunconv.8 pwunconv.8: pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@getspnam.3: shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@vigr.8: vipw.8
+
+@ENABLE_REGENERATE_MAN_FALSE@$(man_MANS):
+@ENABLE_REGENERATE_MAN_FALSE@  @echo ""
+@ENABLE_REGENERATE_MAN_FALSE@  @echo "Error: you need to run configure with '--enable-man'"
+@ENABLE_REGENERATE_MAN_FALSE@  @echo "       in order to regenerate man pages."
+@ENABLE_REGENERATE_MAN_FALSE@  @echo ""
+@ENABLE_REGENERATE_MAN_FALSE@  @false
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/chage.1 b/man/chage.1
new file mode 100644 (file)
index 0000000..1f55c77
--- /dev/null
@@ -0,0 +1,162 @@
+'\" t
+.\"     Title: chage
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: English
+.\"
+.TH "CHAGE" "1" "07/24/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chage \- change user password expiry information
+.SH "SYNOPSIS"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIoptions\fR] [\fILOGIN\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchage\fR
+command changes the number of days between password changes and the date of the last password change\&. This information is used by the system to determine when a user must change his/her password\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchage\fR
+command are:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR \fILAST_DAY\fR
+.RS 4
+Set the number of days since January 1st, 1970 when the password was last changed\&. The date may also be expressed in the format YYYY\-MM\-DD (or the format more commonly used in your area)\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR \fIEXPIRE_DATE\fR
+.RS 4
+Set the date or number of days since January 1, 1970 on which the user\'s account will no longer be accessible\&. The date may also be expressed in the format YYYY\-MM\-DD (or the format more commonly used in your area)\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIEXPIRE_DATE\fR
+will remove an account expiration date\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR \fIINACTIVE\fR
+.RS 4
+Set the number of days of inactivity after a password has expired before the account is locked\&. The
+\fIINACTIVE\fR
+option is the number of days of inactivity\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIINACTIVE\fR
+will remove an account\'s inactivity\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Show account aging information\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR \fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change his/her password at any time\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR \fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days during which a password is valid\&. When
+\fIMAX_DAYS\fR
+plus
+\fILAST_DAY\fR
+is less than the current day, the user will be required to change his/her password before being able to use his/her account\&. This occurrence can be planned for in advance by use of the
+\fB\-W\fR
+option, which provides the user with advance warning\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\'s validity\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR \fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned his/her password is about to expire\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchage\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTE"
+.PP
+The
+\fBchage\fR
+program requires a shadow password file to be available\&.
+.PP
+The
+\fBchage\fR
+command is restricted to the root user, except for the
+\fB\-l\fR
+option, which may be used by an unprivileged user to determine when his/her password or account is due to expire\&.
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBchage\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI15\fR
+.RS 4
+can\'t find the shadow password file
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/chage.1.xml b/man/chage.1.xml
new file mode 100644 (file)
index 0000000..13b2898
--- /dev/null
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1990 - 1994, Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='chage.1'>
+  <!--  $Id: chage.1.xml 2435 2008-10-11 11:44:43Z nekral-guest $  -->
+  <refmeta>
+    <refentrytitle>chage</refentrytitle>
+    <manvolnum>1</manvolnum>
+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>chage</refname>
+    <refpurpose>change user password expiry information</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>chage</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+      </arg>
+      <arg choice='opt'>
+        <replaceable>LOGIN</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>chage</command> command changes the number of days between
+      password changes and the date of the last password change. This
+      information is used by the system to determine when a user must change
+      his/her password.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>chage</command> command are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-d</option>, <option>--lastday</option> <replaceable>LAST_DAY</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Set the number of days since January 1st, 1970 when the password
+           was last changed. The date may also be expressed in the format
+           YYYY-MM-DD (or the format more commonly used in your area).
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-E</option>, <option>--expiredate</option> <replaceable>EXPIRE_DATE</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Set the date or number of days since January 1, 1970 on which the
+           user's account will no longer be accessible. The date may also
+           be expressed in the format YYYY-MM-DD (or the format more
+           commonly used in your area). A user whose account is locked must
+           contact the system administrator before being able to use the
+           system again.
+         </para>
+         <para>
+           Passing the number <emphasis remap='I'>-1</emphasis> as the
+           <replaceable>EXPIRE_DATE</replaceable> will remove an account
+           expiration date.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-h</option>, <option>--help</option></term>
+       <listitem>
+         <para>Display help message and exit.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-I</option>, <option>--inactive</option> <replaceable>INACTIVE</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Set the number of days of inactivity after a password has
+           expired before the account is locked. The
+           <replaceable>INACTIVE</replaceable> option is the number of days
+           of inactivity. A user whose account is locked must contact the
+           system administrator before being able to use the system again.
+         </para>
+         <para>
+           Passing the number <emphasis remap='I'>-1</emphasis> as the
+           <replaceable>INACTIVE</replaceable> will remove an account's
+           inactivity.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-l</option>, <option>--list</option>
+       </term>
+       <listitem>
+         <para>
+         Show account aging information.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-m</option>, <option>--mindays</option> <replaceable>MIN_DAYS</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Set the minimum number of days between password changes to
+           <replaceable>MIN_DAYS</replaceable>. A value of zero for this field
+           indicates that the user may change his/her password at any time.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-M</option>, <option>--maxdays</option> <replaceable>MAX_DAYS</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Set the maximum number of days during which a password is valid. 
+           When <replaceable>MAX_DAYS</replaceable> plus
+           <replaceable>LAST_DAY</replaceable> is less than the current
+           day, the user will be required to change his/her password before
+           being able to use his/her account. This occurrence can be planned for
+           in advance by use of the <option>-W</option> option, which
+           provides the user with advance warning.
+         </para>
+         <para>
+           Passing the number <emphasis remap='I'>-1</emphasis> as
+           <replaceable>MAX_DAYS</replaceable> will remove checking a
+           password's validity.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-W</option>, <option>--warndays</option> <replaceable>WARN_DAYS</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Set the number of days of warning before a password change is
+           required. The <replaceable>WARN_DAYS</replaceable> option is the
+           number of days prior to the password expiring that a user will
+           be warned his/her password is about to expire.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+    <para>
+      If none of the options are selected, <command>chage</command> operates
+      in an interactive fashion, prompting the user with the current values
+      for all of the fields. Enter the new value to change the field, or
+      leave the line blank to use the current value. The current value is
+      displayed between a pair of <emphasis>[ ]</emphasis> marks.
+    </para>
+  </refsect1>
+  <refsect1 id='note'>
+    <title>NOTE</title>
+    <para>
+      The <command>chage</command> program requires a shadow password file to
+      be available.
+    </para>
+    <para>The <command>chage</command> command is restricted to the root
+      user, except for the <option>-l</option> option, which may be used by
+      an unprivileged user to determine when his/her password or account is due
+      to expire.
+    </para>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term>
+         <filename>/etc/passwd</filename>
+       </term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <filename>/etc/shadow</filename>
+       </term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='exit_values'>
+    <title>EXIT VALUES</title>
+    <para>
+      The <command>chage</command> command exits with the following values:
+      <variablelist>
+       <varlistentry>
+         <term><replaceable>0</replaceable></term>
+         <listitem>
+           <para>success</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>1</replaceable></term>
+         <listitem>
+           <para>permission denied</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>2</replaceable></term>
+         <listitem>
+           <para>invalid command syntax</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>15</replaceable></term>
+         <listitem>
+           <para>can't find the shadow password file</para>
+         </listitem>
+       </varlistentry>
+      </variablelist>
+    </para>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/chfn.1 b/man/chfn.1
new file mode 100644 (file)
index 0000000..87857ba
--- /dev/null
@@ -0,0 +1,111 @@
+'\" t
+.\"     Title: chfn
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: English
+.\"
+.TH "CHFN" "1" "07/24/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chfn \- change real user name and information
+.SH "SYNOPSIS"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\-f\ \fIfull_name\fR] [\-r\ \fIroom_no\fR] [\-w\ \fIwork_ph\fR] [\-h\ \fIhome_ph\fR] [\-o\ \fIother\fR] [\fIuser\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchfn\fR
+command changes user fullname, office number, office extension, and home phone number information for a user\'s account\&. This information is typically printed by
+\fBfinger\fR(1)
+and similar programs\&. A normal user may only change the fields for her own account, subject to the restrictions in
+/etc/login\&.defs\&. (The default configuration is to prevent users from changing their fullname\&.) The superuser may change any field for any account\&. Additionally, only the superuser may use the
+\fB\-o\fR
+option to change the undefined portions of the GECOS field\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.PP
+If none of the options are selected,
+\fBchfn\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fB[ ]\fR
+marks\&. Without options,
+\fBchfn\fR
+prompts for the current user account\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.SH "FILES"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/chfn.1.xml b/man/chfn.1.xml
new file mode 100644 (file)
index 0000000..4ebf22d
--- /dev/null
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1990 - 1994, Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY CHFN_AUTH             SYSTEM "login.defs.d/CHFN_AUTH.xml">
+<!ENTITY CHFN_RESTRICT         SYSTEM "login.defs.d/CHFN_RESTRICT.xml">
+<!ENTITY LOGIN_STRING          SYSTEM "login.defs.d/LOGIN_STRING.xml">
+]>
+
+<refentry id='chfn.1'>
+  <!-- $Id: chfn.1.xml 2435 2008-10-11 11:44:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>chfn</refentrytitle>
+    <manvolnum>1</manvolnum>
+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>chfn</refname>
+    <refpurpose>change real user name and information</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>chfn</command>
+      <arg choice='opt'>-f <replaceable>full_name</replaceable></arg>
+      <arg choice='opt'>-r <replaceable>room_no</replaceable></arg>
+      <arg choice='opt'>-w <replaceable>work_ph</replaceable></arg>
+      <arg choice='opt'>-h <replaceable>home_ph</replaceable></arg>
+      <arg choice='opt'>-o <replaceable>other</replaceable></arg>
+      <arg choice='opt'><replaceable>user</replaceable></arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>chfn</command> command changes user fullname,
+      office number, office extension, and home phone number information
+      for a user's account. This information is typically printed by
+      <citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry> and similar programs. A normal user may only change
+      the fields for her own account, subject to the restrictions in
+      <filename>/etc/login.defs</filename>. (The default configuration is to
+      prevent users from changing their fullname.) The superuser may change
+      any field for any account. Additionally, only the superuser may use
+      the <option>-o</option> option to change the undefined portions of the
+      GECOS field.
+    </para>
+
+    <para>
+      These fields must not contain any colons. Except for the
+      <emphasis remap='I'>other</emphasis> field, they should not contain
+      any comma or equal sign. It is also recommended to avoid
+      non-US-ASCII characters, but this is only enforced for the phone
+      numbers. The <emphasis remap='I'>other</emphasis> field is used to
+      store accounting information used by other applications.
+    </para>
+
+    <para>
+      If none of the options are selected, <command>chfn</command>
+      operates in an interactive fashion, prompting the user with the
+      current values for all of the fields. Enter the new value to change
+      the field, or leave the line blank to use the current value. The
+      current value is displayed between a pair of <emphasis remap='B'>[
+      ]</emphasis> marks. Without options, <command>chfn</command>
+      prompts for the current user account.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &CHFN_AUTH;
+      &CHFN_RESTRICT;
+      &LOGIN_STRING;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/chgpasswd.8 b/man/chgpasswd.8
new file mode 100644 (file)
index 0000000..0f1192b
--- /dev/null
@@ -0,0 +1,233 @@
+'\" t
+.\"     Title: chgpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "CHGPASSWD" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chgpasswd \- update group passwords in batch mode
+.SH "SYNOPSIS"
+.HP \w'\fBchgpasswd\fR\ 'u
+\fBchgpasswd\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchgpasswd\fR
+command reads a list of group name and password pairs from standard input and uses this information to update a set of existing groups\&. Each line is of the format:
+.PP
+
+\fIgroup_name\fR:\fIpassword\fR
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchgpasswd\fR\&.
+.PP
+The default encryption algorithm can be defined for the system with the ENCRYPT_METHOD variable of
+/etc/login\&.defs, and can be overwiten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+This command is intended to be used in a large system environment where many accounts are created at a single time\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchgpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Supplied passwords are in encrypted form\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Use MD5 encryption instead of DES when the supplied passwords are not encrypted\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "CAVEATS"
+.PP
+Remember to set permissions or umask to prevent readability of unencrypted files by other users\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBgpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBlogin.defs\fR(5)\&.
diff --git a/man/chgpasswd.8.xml b/man/chgpasswd.8.xml
new file mode 100644 (file)
index 0000000..cf83f47
--- /dev/null
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 2006       , Tomasz Kłoczko
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY ENCRYPT_METHOD        SYSTEM "login.defs.d/ENCRYPT_METHOD.xml">
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!ENTITY MD5_CRYPT_ENAB        SYSTEM "login.defs.d/MD5_CRYPT_ENAB.xml">
+<!ENTITY SHA_CRYPT_MIN_ROUNDS  SYSTEM "login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml">
+]>
+
+<refentry id='chgpasswd.8'>
+  <!-- $Id: chgpasswd.8.xml 2949 2009-05-19 21:29:26Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>chgpasswd</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>chgpasswd</refname>
+    <refpurpose>update group passwords in batch mode</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>chgpasswd</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>chgpasswd</command> command reads a list of group name
+      and password pairs from standard input and uses this information to
+      update a set of existing groups. Each line is of the format:
+    </para>
+    <para>
+      <emphasis remap='I'>group_name</emphasis>:<emphasis
+      remap='I'>password</emphasis>
+    </para>
+    <para>
+      By default the supplied password must be in clear-text, and is
+      encrypted by <command>chgpasswd</command>.
+    </para>
+    <para>
+      The default encryption algorithm can be defined for the system with
+      the ENCRYPT_METHOD variable of <filename>/etc/login.defs</filename>,
+      and can be overwiten with the <option>-e</option>,
+      <option>-m</option>, or <option>-c</option> options.
+    </para>
+    <para>
+      This command is intended to be used in a large system environment
+      where many accounts are created at a single time.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>chgpasswd</command> command
+      are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term><option>-c</option>, <option>--crypt-method</option></term>
+       <listitem>
+         <para>Use the specified method to encrypt the passwords.</para>
+         <para condition="no_sha_crypt">
+           The available methods are DES, MD5, and NONE.
+         </para>
+         <para condition="sha_crypt">
+           The available methods are DES, MD5, NONE, and SHA256 or SHA512
+           if your libc support these methods.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-e</option>, <option>--encrypted</option></term>
+       <listitem>
+         <para>Supplied passwords are in encrypted form.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-h</option>, <option>--help</option></term>
+       <listitem>
+         <para>Display help message and exit.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-m</option>, <option>--md5</option></term>
+       <listitem>
+         <para>
+           Use MD5 encryption instead of DES when the supplied passwords are
+           not encrypted.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="sha_crypt">
+       <term><option>-s</option>, <option>--sha-rounds</option></term>
+       <listitem>
+         <para>
+           Use the specified number of rounds to encrypt the passwords.
+         </para>
+         <para>
+           The value 0 means that the system will choose the default
+           number of rounds for the crypt method (5000).
+         </para>
+         <para>
+           A minimal value of 1000 and a maximal value of 999,999,999
+           will be enforced.
+         </para>
+         <para>
+           You can only use this option with the SHA256 or SHA512
+           crypt method.
+         </para>
+         <para>
+           By default, the number of rounds is defined by the
+           SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+           <filename>/etc/login.defs</filename>.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      Remember to set permissions or umask to prevent readability of
+      unencrypted files by other users.
+    </para>
+    <para>
+      You should make sure the passwords and the encryption method respect
+      the system's password policy.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &ENCRYPT_METHOD;
+      &MAX_MEMBERS_PER_GROUP;
+      &MD5_CRYPT_ENAB;
+      &SHA_CRYPT_MIN_ROUNDS; <!--This also document SHA_CRYPT_MAX_ROUNDS-->
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="gshadow">
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>gpasswd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/chpasswd.8 b/man/chpasswd.8
new file mode 100644 (file)
index 0000000..efa81ed
--- /dev/null
@@ -0,0 +1,224 @@
+'\" t
+.\"     Title: chpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "CHPASSWD" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chpasswd \- update passwords in batch mode
+.SH "SYNOPSIS"
+.HP \w'\fBchpasswd\fR\ 'u
+\fBchpasswd\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchpasswd\fR
+command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users\&. Each line is of the format:
+.PP
+
+\fIuser_name\fR:\fIpassword\fR
+.SS ""
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchpasswd\fR\&. Also the password age will be updated, if present\&.
+.PP
+The default encryption algorithm can be defined for the system with the ENCRYPT_METHOD variable of
+/etc/login\&.defs, and can be overwiten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+
+\fBchpasswd\fR
+first update the password in memory, and then commit all the changes to disk if no errors occured for any users\&.
+.PP
+This command is intended to be used in a large system environment where many accounts are created at a single time\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchpasswd\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Supplied passwords are in encrypted form\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Use MD5 encryption instead of DES when the supplied passwords are not encrypted\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "CAVEATS"
+.PP
+Remember to set permissions or umask to prevent readability of unencrypted files by other users\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBpasswd\fR(1),
+\fBnewusers\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/chpasswd.8.xml b/man/chpasswd.8.xml
new file mode 100644 (file)
index 0000000..88b9dcc
--- /dev/null
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1991       , Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY ENCRYPT_METHOD        SYSTEM "login.defs.d/ENCRYPT_METHOD.xml">
+<!ENTITY MD5_CRYPT_ENAB        SYSTEM "login.defs.d/MD5_CRYPT_ENAB.xml">
+<!ENTITY SHA_CRYPT_MIN_ROUNDS  SYSTEM "login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml">
+]>
+
+<refentry id='chpasswd.8'>
+  <!-- $Id: chpasswd.8.xml 3005 2009-05-25 19:41:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>chpasswd</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>chpasswd</refname>
+    <refpurpose>update passwords in batch mode</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>chpasswd</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>chpasswd</command> command reads a list of user name and
+      password pairs from standard input and uses this information to update
+      a group of existing users. Each line is of the format:
+    </para>
+    <para>
+      <emphasis remap='I'>user_name</emphasis>:<emphasis
+      remap='I'>password</emphasis>
+    </para>
+    <refsect2 condition="no_pam">
+    <para>
+      By default the supplied password must be in clear-text, and is
+      encrypted by <command>chpasswd</command>.
+      Also the password age will be updated, if present.
+    </para>
+    <para>
+      The default encryption algorithm can be defined for the system with
+      the ENCRYPT_METHOD variable of <filename>/etc/login.defs</filename>,
+      and can be overwiten with the <option>-e</option>,
+      <option>-m</option>, or <option>-c</option> options.
+    </para>
+      <para>
+       <command>chpasswd</command> first update the password in memory,
+       and then commit all the changes to disk if no errors occured for
+       any users.
+      </para>
+    </refsect2>
+    <refsect2 condition="pam">
+      <para>
+       The supplied passwords must be in clear-text.
+      </para>
+      <para>
+       PAM is used to update the password in the system database
+       according to the PAM chpasswd configuration.
+      </para>
+      <para>
+       When <command>chpasswd</command> fails to update a password, it
+       continues updating the passwords of the next users, and will
+       return an error code on exit.
+      </para>
+    </refsect2>
+    <para>
+      This command is intended to be used in a large system environment
+      where many accounts are created at a single time.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>chpasswd</command> command
+      are:
+    </para>
+    <variablelist remap='IP' condition="no_pam">
+      <varlistentry>
+       <term><option>-c</option>, <option>--crypt-method</option></term>
+       <listitem>
+         <para>Use the specified method to encrypt the passwords.</para>
+         <para condition="no_sha_crypt">
+           The available methods are DES, MD5, and NONE.
+         </para>
+         <para condition="sha_crypt">
+           The available methods are DES, MD5, NONE, and SHA256 or SHA512
+           if your libc support these methods.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-e</option>, <option>--encrypted</option></term>
+       <listitem>
+         <para>Supplied passwords are in encrypted form.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term><option>-h</option>, <option>--help</option></term>
+       <listitem>
+         <para>Display help message and exit.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+    <variablelist remap='IP' condition="no_pam">
+      <varlistentry>
+       <term><option>-m</option>, <option>--md5</option></term>
+       <listitem>
+         <para>
+           Use MD5 encryption instead of DES when the supplied passwords are
+           not encrypted.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="sha_crypt">
+       <term><option>-s</option>, <option>--sha-rounds</option></term>
+       <listitem>
+         <para>
+           Use the specified number of rounds to encrypt the passwords.
+         </para>
+         <para>
+           The value 0 means that the system will choose the default
+           number of rounds for the crypt method (5000).
+         </para>
+         <para>
+           A minimal value of 1000 and a maximal value of 999,999,999
+           will be enforced.
+         </para>
+         <para>
+           You can only use this option with the SHA256 or SHA512
+           crypt method.
+         </para>
+         <para>
+           By default, the number of rounds is defined by the
+           SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+           <filename>/etc/login.defs</filename>.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      Remember to set permissions or umask to prevent readability of
+      unencrypted files by other users.
+    </para>
+    <para condition="no_pam">
+      You should make sure the passwords and the encryption method respect
+      the system's password policy.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration' condition="no_pam">
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &ENCRYPT_METHOD;
+      &MD5_CRYPT_ENAB;
+      &SHA_CRYPT_MIN_ROUNDS; <!--documents also SHA_CRYPT_MAX_ROUNDS-->
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry condition="no_pam">
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="no_pam">
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="no_pam">
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="pam">
+       <term><filename>/etc/pam.d/chpasswd</filename></term>
+       <listitem>
+         <para>PAM configuration for <command>chpasswd</command>.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <phrase condition="no_pam">
+       <citerefentry>
+         <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+       </citerefentry>,
+      </phrase>
+      <citerefentry>
+       <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/chsh.1 b/man/chsh.1
new file mode 100644 (file)
index 0000000..c5dfa28
--- /dev/null
@@ -0,0 +1,104 @@
+'\" t
+.\"     Title: chsh
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: English
+.\"
+.TH "CHSH" "1" "07/24/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chsh \- change login shell
+.SH "SYNOPSIS"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIoptions\fR] [\fILOGIN\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchsh\fR
+command changes the user login shell\&. This determines the name of the user\'s initial login command\&. A normal user may only change the login shell for her own account, the superuser may change the login shell for any account\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBchsh\fR
+command are:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fISHELL\fR
+.RS 4
+The name of the user\'s new login shell\&. Setting this field to blank causes the system to select the default login shell\&.
+.RE
+.PP
+If the
+\fB\-s\fR
+option is not selected,
+\fBchsh\fR
+operates in an interactive fashion, prompting the user with the current login shell\&. Enter the new value to change the shell, or leave the line blank to use the current one\&. The current shell is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTE"
+.PP
+The only restriction placed on the login shell is that the command name must be listed in
+/etc/shells, unless the invoker is the superuser, and then any value may be added\&. An account with a restricted login shell may not change her login shell\&. For this reason, placing
+/bin/rsh
+in
+/etc/shells
+is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shells
+.RS 4
+List of valid login shells\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/chsh.1.xml b/man/chsh.1.xml
new file mode 100644 (file)
index 0000000..7beaa6d
--- /dev/null
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1990       , Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY CHSH_AUTH             SYSTEM "login.defs.d/CHSH_AUTH.xml">
+<!ENTITY LOGIN_STRING          SYSTEM "login.defs.d/LOGIN_STRING.xml">
+]>
+
+<refentry id='chsh.1'>
+  <!-- $Id: chsh.1.xml 2435 2008-10-11 11:44:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>chsh</refentrytitle>
+    <manvolnum>1</manvolnum>
+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>chsh</refname>
+    <refpurpose>change login shell</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>chsh</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+      </arg>
+      <arg choice='opt'>
+        <replaceable>LOGIN</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>chsh</command> command changes the user login shell.
+      This determines the name of the user's initial login command. A normal
+      user may only change the login shell for her own account, the
+      superuser may change the login shell for any account.
+    </para>
+
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>chsh</command> command are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term><option>-h</option>, <option>--help</option></term>
+       <listitem>
+         <para>Display help message and exit.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-s</option>, <option>--shell</option> <replaceable>SHELL</replaceable>
+       </term>
+        <listitem>                                                                                                                   
+         <para>
+           The name of the user's new login shell. Setting this field to
+           blank causes the system to select the default login shell.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+    <para>
+      If the <option>-s</option> option is not selected,
+      <command>chsh</command> operates in an interactive fashion, prompting
+      the user with the current login shell. Enter the new value to change
+      the shell, or leave the line blank to use the current one. The current
+      shell is displayed between a pair of <emphasis>[ ]</emphasis> marks.
+    </para>
+  </refsect1>
+
+  <refsect1 id='note'>
+    <title>NOTE</title>
+    <para>
+      The only restriction placed on the login shell is that the command
+      name must be listed in <filename>/etc/shells</filename>, unless the
+      invoker is the superuser, and then any value may be added. An
+      account with a restricted login shell may not change her login shell.
+      For this reason, placing <filename>/bin/rsh</filename> in
+      <filename>/etc/shells</filename> is discouraged since accidentally
+      changing to a restricted shell would prevent the user from ever
+      changing her login shell back to its original value.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration' condition="no_pam">
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &CHSH_AUTH;
+      &LOGIN_STRING;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shells</filename></term>
+       <listitem>
+         <para>List of valid login shells.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/config.xml.in b/man/config.xml.in
new file mode 100644 (file)
index 0000000..322f619
--- /dev/null
@@ -0,0 +1 @@
+<!ENTITY GROUP_NAME_MAX_LENGTH '@GROUP_NAME_MAX_LENGTH@'>
diff --git a/man/cs/Makefile.am b/man/cs/Makefile.am
new file mode 100644 (file)
index 0000000..2898762
--- /dev/null
@@ -0,0 +1,25 @@
+
+mandir = @mandir@/cs
+
+man_MANS = \
+       expiry.1 \
+       faillog.5 \
+       faillog.8 \
+       gpasswd.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       groups.1 \
+       grpck.8 \
+       gshadow.5 \
+       lastlog.8 \
+       nologin.8 \
+       passwd.5 \
+       shadow.5 \
+       su.1 \
+       vipw.8
+
+EXTRA_DIST = $(man_MANS) \
+       id.1 \
+       groupmems.8 \
+       logoutd.8
diff --git a/man/cs/Makefile.in b/man/cs/Makefile.in
new file mode 100644 (file)
index 0000000..0ccb18e
--- /dev/null
@@ -0,0 +1,529 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/cs
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+       "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/cs
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+       expiry.1 \
+       faillog.5 \
+       faillog.8 \
+       gpasswd.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       groups.1 \
+       grpck.8 \
+       gshadow.5 \
+       lastlog.8 \
+       nologin.8 \
+       passwd.5 \
+       shadow.5 \
+       su.1 \
+       vipw.8
+
+EXTRA_DIST = $(man_MANS) \
+       id.1 \
+       groupmems.8 \
+       logoutd.8
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/cs/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/cs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man5 install-man8 install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/cs/expiry.1 b/man/cs/expiry.1
new file mode 100644 (file)
index 0000000..99a0b4e
--- /dev/null
@@ -0,0 +1,25 @@
+.TH "EXPIRY" "1" "11/05/2005" "User Commands" "User Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+expiry \- zkontroluje a vynutí politiku vypršení platnosti hesla
+.SH "POUŽITÍ"
+.HP 7
+\fBexpiry\fR [\-c] [\-f]
+.SH "POPIS"
+.PP
+\fBexpiry\fR
+zkontroluje (\fB\-c\fR) vypršení platnosti aktuálního hesla a případně vynutí (\fB\-f\fR) změnu. Příkaz lze spustit jako běžný uživatel.
+.SH "SOUBORY"
+.TP
+\fI/etc/passwd\fR
+informace o uživatelských účtech
+.TP
+\fI/etc/shadow\fR
+důvěrné informace o uživatelských účtech
+.SH "VIZ TAKÉ"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5).
diff --git a/man/cs/faillog.5 b/man/cs/faillog.5
new file mode 100644 (file)
index 0000000..99036ff
--- /dev/null
@@ -0,0 +1,35 @@
+.TH "FAILLOG" "5" "11/05/2005" "" ""
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+faillog \- Soubor pro zaznamenávání chybných pokusů o přihlášení
+.SH "POPIS"
+.PP
+\fI/var/log/faillog\fR
+uchovává pro každý účet počet chybných přihlášení a jejich
+limity. Záznamy v souboru mají pevnou délku a jsou indexovány
+číselným UID. Každý záznam obsahuje počet chybných pokusů o
+přihlášení od posledního úspěšného přihlášení, maximální počet
+chybných pokusů o přihlášení před zablokováním účtu, linku, na které
+byl zaznamenán poslední chybný pokus o přihlášení, a datum,
+kdy byl zaznamenán poslední chybný pokus o přihlášení.
+.PP
+Struktura souboru vypadá následovně:
+.sp
+.nf
+struct faillog {
+       short   fail_cnt;
+       short   fail_max;
+       char    fail_line[12];
+       time_t  fail_time;
+};
+.fi
+.SH "SOUBORY"
+.TP
+\fI/var/log/faillog\fR
+soubor pro záznam chybných pokusů o přihlášení
+.SH "VIZ TAKÉ"
+.PP
+\fBfaillog\fR(8)
diff --git a/man/cs/faillog.8 b/man/cs/faillog.8
new file mode 100644 (file)
index 0000000..e4dcae0
--- /dev/null
@@ -0,0 +1,86 @@
+.TH "FAILLOG" "8" "11/05/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+faillog \- zobrazí záznamy faillogu nebo nastaví limity na chybná přihlášení
+.SH "POUŽITÍ"
+.HP 8
+\fBfaillog\fR [\fIvolby\fR]
+.SH "POPIS"
+.PP
+\fBfaillog\fR
+formátuje obsah souboru
+\fI/var/log/faillog\fR,
+ve kterém se zaznamenávají neúspěšné pokusy o přihlášení. Také jej
+můžete použít pro správu počitadel neúspěšných přihlášení a pro
+nastavení limitů. Spuštení programu
+\fBfaillog\fR
+bez argumentů vypíše záznamy o neúspěšném přihlášení těch uživatelů,
+u kterých je zaznamenáno alespoň jedno chybné přihlášení.
+.SH "VOLBY"
+.PP
+Příkaz
+\fBfaillog\fR
+akceptuje následující volby:
+.TP
+\fB\-a\fR, \fB\-\-all\fR
+Zobrazí záznamy faillogu všech uživatelů.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Zobrazí nápovědu a skončí.
+.TP
+\fB\-l\fR, \fB\-\-lock\-time\fR \fISEK\fR
+Po neúspěšném přihlášení zamkne účet na
+\fISEK\fR
+sekund.
+.TP
+\fB\-m\fR, \fB\-\-maximum\fR \fIMAX\fR
+Nastaví maximální počet chybných přihlášení na MAX. Poté se účet
+zablokuje. Hodnotou 0 tento limit zrušíte. Pro uživatele
+\fIroot\fR
+by hodnota
+\fIMAX\fR
+měla být vždy 0, abyste předešli útokům typu odepření služby.
+.TP
+\fB\-r\fR, \fB\-\-reset\fR
+Vynuluje počitadla chybných přihlášení všech uživatelů. Při použití s
+parametrem \-u
+\fIÚČET\fR
+vynuluje počitadlo pouze pro daný účet. Tato operace vyžaduje práva
+zápisu k souboru
+\fI/var/log/faillog\fR.
+.TP
+\fB\-t\fR, \fB\-\-time\fR \fIDNŮ\fR
+Zobrazí záznamy faillogu novější než
+\fIDNŮ\fR. Volba
+\fB\-t\fR
+má vyšší prioritu než
+\fB\-u\fR.
+.TP
+\fB\-u\fR, \fB\-\-user\fR \fIÚČET\fR
+Zobrazí záznamy faillogu (resp. s volbami
+\fB\-l\fR,
+\fB\-m\fR
+nebo
+\fB\-r\fR
+upraví počitadla nebo limity chybných přihlášení) pouze pro uživatele
+\fIÚČET\fR.
+.SH "ZÁLUDNOSTI"
+.PP
+\fBfaillog\fR
+vypíše pouze uživatele, bez úspěšného přihlášení od poslední
+chyby. Chcete-li vypsat i uživatele, kteří se od poslední chyby
+úspěšně přihlásili, musíte si je explicitně vyžádat volbou
+\fB\-u\fR
+nebo
+\fB\-a\fR.
+.SH "SOUBORY"
+.TP
+\fI/var/log/faillog\fR
+soubor pro záznam chybných pokusů o přihlášení
+.SH "VIZ TAKÉ"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5).
diff --git a/man/cs/gpasswd.1 b/man/cs/gpasswd.1
new file mode 100644 (file)
index 0000000..32e4288
--- /dev/null
@@ -0,0 +1,76 @@
+.TH "GPASSWD" "1" "11/05/2005" "User Commands" "User Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+gpasswd \- spravuje soubor /etc/group
+.SH "POUŽITÍ"
+.HP 8
+\fBgpasswd\fR \fIskupina\fR
+.HP 8
+\fBgpasswd\fR \-a\ \fIuživatel\fR \fIskupina\fR
+.HP 8
+\fBgpasswd\fR \-d\ \fIuživatel\fR \fIskupina\fR
+.HP 8
+\fBgpasswd\fR \-R\ \fIskupina\fR
+.HP 8
+\fBgpasswd\fR \-r\ \fIskupina\fR
+.HP 8
+\fBgpasswd\fR [\-A\ \fIuživatel,\fR...] [\-M\ \fIuživatel,\fR...] \fIskupina\fR
+.SH "POPIS"
+.PP
+\fBgpasswd\fR
+se používá pro správu souboru
+\fI/etc/group\fR
+(a pokud je zkompilován s podporou SHADOWGRP, tak i
+\fI/etc/gshadow\fR).
+Každá skupina může mít správce, členy a heslo. Systémový správce může
+volbou
+\fB\-A\fR
+definovat správce skupiny, volbou
+\fB\-M\fR
+členy skupiny a má všechna práva skupinových správců a členů.
+.SS "Poznámka o skupinových heslech"
+.PP
+Skupinová hesla jsou samozřejmě bezpečnostním problémem, jelikož je
+heslo sdíleno více uživateli. Skupiny jsou nicméně užitečným nástrojem
+pro spolupráci mezi různými uživateli.
+.SH "VOLBY"
+.PP
+Správce skupiny může přidávat resp. mazat uživatele pomocí
+\fB\-a\fR
+resp.
+\fB\-d\fR.
+Správcové mohou odstranit skupinové heslo pomocí přepínače
+\fB\-r\fR.
+Pokud není heslo nastaveno, mohou použít příkaz
+\fBnewgrp\fR
+pro zapojení do skupiny pouze členové skupiny. Volba
+\fB\-R\fR
+zakáže přístup do skupiny skrze příkaz
+\fBnewgrp\fR
+(členové skupiny se do ní budou moci stále přepnout).
+.PP
+Pokud je
+\fBgpasswd\fR
+spušten správcem skupiny a jediným parametrem je jméno skupiny, zeptá
+se na skupinové heslo. Pokud je heslo nastaveno, mohou členové používat
+\fBnewgrp\fR(1)
+stále bez hesla, nečlenové musí heslo zadat.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.SH "VIZ TAKÉ"
+.PP
+\fBnewgrp\fR(1),
+\fBgshadow\fR(5),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5).
diff --git a/man/cs/groupadd.8 b/man/cs/groupadd.8
new file mode 100644 (file)
index 0000000..c8e3977
--- /dev/null
@@ -0,0 +1,113 @@
+.TH "GROUPADD" "8" "01/02/2006" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+groupadd \- Vytvoří skupinu
+.SH "POUŽITÍ"
+.HP 9
+\fBgroupadd\fR [\-g\ \fIGID\fR\ [\-o]] [\-f] [\-K\ \fIKLÍČ\fR=\fIHODNOTA\fR] \fIskupina\fR
+.SH "POPIS"
+.PP
+Příkaz
+\fBgroupadd\fR
+vytváří nové skupinové účty na základě zadaných hodnot a výchozích
+hodnot nastavených v systému. Nová skupina bude podle pořeby zařazena
+do příslušných systémových souborů.
+.SH "VOLBY"
+.PP
+Příkaz
+\fBgroupadd\fR
+akceptuje následující volby:
+.TP
+\fB\-f\fR
+Tato volba způsobí, že v případě kolize se stávající skupinou se vrátí
+úspěšný návratový kód. Při použití s volbou
+\fB\-g\fR, pokud již dané GID existuje, vybere se unikární GID
+automaticky, (tj. jako kdybyste
+\fB\-g\fR
+nezadali).
+.TP
+\fB\-g\fR \fIGID\fR
+Číselná hodnota skupinového ID. Tato hodnota musí být unikátní (s
+výjimkou volby
+\fB\-o\fR).
+Hodnota musí být nezáporné celé číslo. Jako výchozí hodnota se použije
+nejmenší ID větší než 999 a zároveň větší než ID všech ostatních
+skupin. Hodnoty mezi 0 a 999 jsou obvykle rezervovány pro systémové účty.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Zobrazí nápovědu a skončí.
+.TP
+\fB\-K \fR\fB\fIKLÍČ\fR\fR\fB=\fR\fB\fIHODNOTA\fR\fR
+Přepíše výchozí nastavení /etc/login.defs (GID_MIN, GID_MAX
+apod.). Můžete zadat i více voleb najednou.
+.sp
+Příklad:
+\fB\-K \fR\fIGID_MIN\fR=\fI100\fR\fB \-K \fR\fIGID_MAX\fR=\fI499\fR
+.sp
+Poznámka:
+\fB\-K \fR\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+zatím nefunguje.
+.TP
+\fB\-o\fR
+Tato volba povolí přidání skupiny s neunikátním GID.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.TP
+\fI/etc/login.defs\fR
+nastavení systému shadow
+.SH "ZÁLUDNOSTI"
+.PP
+Názvy skupin musí začínat malým písmenem nebo podtržítkem a mohou
+obsahovat pouze malá písmena, čísla, podtržítka, pomlčky a závěrečný
+dolar. Vyjádřeno regulárním výrazem: [a\-z_][a\-z0\-9_\-]*[$]
+.PP
+Délka názvu skupiny nesmí překročit 16 znaků.
+.PP
+Jestliže již název skupiny existuje v externí databázi typu NIS,
+příkaz
+\fBgroupadd\fR
+odmítne požadavek na vytvoření této skupiny.
+.SH "NÁVRATOVÉ HODNOTY"
+.PP
+Příkaz
+\fBgroupadd\fR
+může skončit s následujícími návratovými hodnotami:
+.TP
+\fI0\fR
+úspěch
+.TP
+\fI2\fR
+chybná syntaxe příkazu
+.TP
+\fI3\fR
+chybný argument parametru
+.TP
+\fI4\fR
+GID není unikátní (pokud nepoužijete
+\fB\-o\fR)
+.TP
+\fI9\fR
+název skupiny není unikátní
+.TP
+\fI10\fR
+nelze aktualizovat soubor group
+.SH "VIZ TAKÉ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
diff --git a/man/cs/groupdel.8 b/man/cs/groupdel.8
new file mode 100644 (file)
index 0000000..7991d9d
--- /dev/null
@@ -0,0 +1,60 @@
+.TH "GROUPDEL" "8" "11/05/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+groupdel \- Smaže skupinu
+.SH "POUŽITÍ"
+.HP 9
+\fBgroupdel\fR \fIskupina\fR
+.SH "POPIS"
+.PP
+Příkaz
+\fBgroupdel\fR
+upraví soubory se systémovými účty tak, že smaže všechy záznamy, které
+se odkazují na
+\fIskupinu\fR. Daná skupina musí existovat.
+.PP
+Abyste zajistili, že na souborových systémech nezůstanou soubory
+vlastněné mazanou skupinou, musíte je sami vyhledat a příslušně
+opravit.
+.SH "ZÁLUDNOSTI"
+.PP
+Nelze odstranit primární skupinu uživatele. Nejprve musíte odstranit
+uživatele a pak teprve danou skupinu.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.SH "NÁVRATOVÉ HODNOTY"
+.PP
+Příkaz
+\fBgroupdel\fR
+může skončit s následujícími návratovými hodnotami:
+.TP
+\fI0\fR
+úspěch
+.TP
+\fI2\fR
+chybná syntaxe příkazu
+.TP
+\fI8\fR
+nelze odstranit primární skupinu uživatele
+.TP
+\fI10\fR
+nelze aktualizovat soubor group
+.SH "VIZ TAKÉ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)
diff --git a/man/cs/groupmems.8 b/man/cs/groupmems.8
new file mode 100644 (file)
index 0000000..729fce4
--- /dev/null
@@ -0,0 +1,85 @@
+.TH "GROUPMEMS" "8" "10/20/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+groupmems \- Spravuje členy uživatelovy primární skupiny
+.SH "POUŽITÍ"
+.HP 10
+\fBgroupmems\fR \-a\ \fIuživatel\fR \-d\ \fIuživatel\fR \-l \-D [\-g\ \fIskupina\fR]
+.SH "POPIS"
+.PP
+Nástroj
+\fBgroupmems\fR
+umožňuje uživatelům spravovat členství ve své primární skupině, aniž
+by museli mít superuživatelská práva. Nástroj
+\fBgroupmems\fR
+je zamýšlen pro systémy, které pro každého uživatele vytváří vlastní
+primární skupinu (tj. novak / novak).
+.PP
+Pouze superuživatel (root) může použít
+\fBgroupmems\fR
+ke změně členství v ostatních skupinách.
+.SH "VOLBY"
+.PP
+Příkaz
+\fBgroupmems\fR
+akceptuje následující volby:
+.TP
+\fB\-a\fR \fIuživatel\fR
+Přidá do seznamu členů skupiny nového uživatele.
+.TP
+\fB\-d\fR \fIuživatel\fR
+Ze seznamu členů skupiny odebere daného uživatele.
+.TP
+\fB\-D\fR
+Ze seznamu členů skupiny odebere všechny uživatele.
+.TP
+\fB\-g\fR \fIskupina\fR
+Superuživatel může zadat skupinu, které se mají změny týkat.
+.TP
+\fB\-l\fR
+Vypíše seznam členů skupiny.
+.SH "NASTAVENÍ"
+.PP
+Příkaz
+\fBgroupmems\fR
+by měl mít nastavena práva
+2770
+a měl by jej vlastnit uživatel
+\fIroot\fR
+a skupina
+\fIgroups\fR. Správce systému může uživatelům povolit
+používání nástroje
+\fBgroupmems\fR
+tím, že přidá uživatele do skupiny groups. Uživatelé si pak mohou sami
+spravovat členství ve skupinách.
+.sp
+.nf
+       $ groupadd \-r groups
+       $ chmod 2770 groupmems
+       $ chown root.groups groupmems
+       $ groupmems \-g groups \-a gk4
+
+.fi
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.SH "VIZ TAKÉ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
+.SH "AUTOR"
+.PP
+George Kraft IV (gk4@us.ibm.com)
diff --git a/man/cs/groupmod.8 b/man/cs/groupmod.8
new file mode 100644 (file)
index 0000000..9338994
--- /dev/null
@@ -0,0 +1,79 @@
+.TH "GROUPMOD" "8" "11/05/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+groupmod \- upraví skupinu
+.SH "POUŽITÍ"
+.HP 9
+\fBgroupmod\fR [\-g\ \fIgid\fR\ [\-o\ ]] [\-n\ \fInové_jméno_skupiny\fR] \fIskupina\fR
+.SH "POPIS"
+.PP
+Příkaz
+\fBgroupmod\fR
+upravuje soubory se systémovými účty tak, aby odpovídaly změnám
+zadaným na příkazové řádce.
+.SH "VOLBY"
+.PP
+Příkaz
+\fBgroupmod\fR
+akceptuje následující volby:
+.TP
+\fB\-g\fR \fIgid\fR
+Číselná hodnota skupinového ID. Tato hodnota musí být unikátní (s
+výjimkou volby
+\fB\-o\fR.
+Hodnota musí být nezáporné celé číslo. Hodnoty mezi 0 a 999 jsou
+obvykle rezervovány pro systémové účty. U souborů, které měly skupinu
+nastavenu na staré GID, ji musíte přenastavit na nové GID ručně.
+.TP
+\fB\-n\fR \fInové_jméno_skupiny\fR
+Jméno skupiny se změní ze
+\fIskupina\fR
+na
+\fInové_jméno_skupiny\fR.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.SH "NÁVRATOVÉ HODNOTY"
+.PP
+Příkaz
+\fBgroupmod\fR
+může skončit s následujícími návratovými hodnotami:
+.TP
+\fI0\fR
+úspěch
+.TP
+\fI2\fR
+chybná syntaxe příkazu
+.TP
+\fI3\fR
+chybný argument parametru
+.TP
+\fI4\fR
+zadaná skupina neexistuje
+.TP
+\fI6\fR
+zadaná skupina neexistuje
+.TP
+\fI9\fR
+skupina je již používána
+.TP
+\fI10\fR
+nelze aktualizovat soubor group
+.SH "VIZ TAKÉ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
diff --git a/man/cs/groups.1 b/man/cs/groups.1
new file mode 100644 (file)
index 0000000..6deab53
--- /dev/null
@@ -0,0 +1,29 @@
+.TH GROUPS 1 "GNU Shell Utilities" "FSF" \" \-*\- nroff \-*\-
+.do hla cs
+.do hpf hyphen.cs
+.SH JMÉNO
+groups \- vypíše skupiny, jichž je uživatel členem
+.SH POUŽITÍ
+\fBgroups\fR [\fIuživatel...\fR]
+.SH POPIS
+Tato dokumentace není dále udržována a může být nepřesná nebo neúplná.
+Autoritativním zdrojem je Texinfo dokumentace.
+.PP
+Tato manuálová stránka popisuje GNU verzi příkazu
+.BR groups .
+Příkaz
+.B groups
+vypíše jména všech skupin, v nichž je zadaný \fIuživatel\fR nebo aktuální proces,
+pokud uživatel není zadán, členem. Pokud jsou zadána jména uživatelů, potom bude
+jméno každého z uživatelů vypsáno před seznam skupin, jichž je členem.
+.PP
+Seznam skupin je ekvivalentní s výstupem příkazu `id \-Gn'.
+.SH VOLBY
+Když je GNU příkaz \fBgroups\fR vyvolán právě s jedním parametrem,
+jsou rozpoznávány následující volby:
+.TP
+.I "\-\-help"
+Vypíše návod k použití na standardní výstup a bezchybně skončí.
+.TP
+.I "\-\-version"
+Vypíše číslo verze na standardní výstup a bezchybně skončí.
diff --git a/man/cs/grpck.8 b/man/cs/grpck.8
new file mode 100644 (file)
index 0000000..07e67d7
--- /dev/null
@@ -0,0 +1,111 @@
+.TH "GRPCK" "8" "11/05/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+grpck \- ověří integritu skupinových souborů
+.SH "POUŽITÍ"
+.HP 6
+\fBgrpck\fR [\-r] [\fIgroup\fR\ \fIshadow\fR]
+.SH "POPIS"
+.PP
+\fBgrpck\fR
+ověří integritu informací používaných při autentizaci vůči
+systému. Kontrolují se všechny záznamy v souborech
+\fI/etc/group\fR
+a
+\fI/etc/gshadow\fR,
+zda mají správný formát a zda jsou ve všech polích jen povolená
+data. Při nalezení chybně formátovaných a jinak neopravitelných
+záznamů je uživatel vybídnut, aby tyto záznamy smazal.
+.PP
+U každého záznamu se kontroluje, zda:
+.TP 3
+\(bu
+má správný počet polí
+.TP
+\(bu
+má unikátní název skupiny
+.TP
+\(bu
+obsahuje platný seznam členů a administrátorů
+.PP
+Kontroly na správný počet polí a unikátnost názvu skupiny jsou
+kritické. Pokud má záznam chybný počet polí, je uživatel vybídnut, aby
+záznam smazal. Nebude-li uživatel souhlasit, jsou všechny další
+kontroly přeskočeny. U záznamu s duplicitním názvem skupiny je
+uživatel taktéž vybídnut ke smazání záznamu, ovšem následné kontroly
+nejsou přeskočeny. Všechny ostatní chyby jsou považovány pouze za
+varování a uživatel je vyzván k nápravě chyby pomocí příkazu
+\fBgroupmod\fR.
+.PP
+Příkazy pracující se souborem
+\fI/etc/group\fR
+nemohou měnit porušené nebo duplicitní záznamy. V takových případech
+byste měli použít
+\fBgrpck\fR
+a chybné záznamy odstranit.
+.SH "VOLBY"
+.PP
+\fBgrpck\fR
+implicitně pracuje nad soubory
+\fI/etc/group\fR
+a
+\fI/etc/gshadow\fR. Uživatel může zvolit jiné soubory pomocí parametrů
+\fIgroup\fR
+a
+\fIshadow\fR.
+Uživatel dále může parametrem
+\fB\-r\fR
+zapnout režim jen pro čtení. Prakticky to znamená, že na všechny
+otázky ohledně změn se automaticky odpoví
+\fIne\fR.
+\fBgrpck\fR
+také umí setřítit záznamy v souborech
+\fI/etc/group\fR
+a
+\fI/etc/gshadow\fR
+podle GID. Pro třídící režim zadejte parametr
+\fB\-s\fR.
+V takovém případě se neprovádí žádné kontroly, soubory se pouze
+setřídí.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.TP
+\fI/etc/passwd\fR
+informace o uživatelských účtech
+.SH "NÁVRATOVÉ HODNOTY"
+.PP
+Příkaz
+\fBgrpck\fR
+může skončit s následujícími návratovými hodnotami:
+.TP
+\fI0\fR
+úspěch
+.TP
+\fI1\fR
+chybná syntaxe příkazu
+.TP
+\fI2\fR
+jeden či více chybných záznamů
+.TP
+\fI3\fR
+nelze otevřít soubory skupin
+.TP
+\fI4\fR
+nelze zamknout soubory skupin
+.TP
+\fI5\fR
+nelze aktualizovat soubory skupin
+.SH "VIZ TAKÉ"
+.PP
+\fBgroup\fR(5),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBgroupmod\fR(8).
diff --git a/man/cs/gshadow.5 b/man/cs/gshadow.5
new file mode 100644 (file)
index 0000000..ad8750d
--- /dev/null
@@ -0,0 +1,52 @@
+.TH "GSHADOW" "5" "11/05/2005" "File Formats and Conversions" "File Formats and Conversions"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+gshadow \- stínový soubor se skupinami
+.SH "POPIS"
+.PP
+\fI/etc/gshadow\fR
+Obsahuje stínové informace ke skupinovým účtům. Obsahuje řádky
+s pevnou strukturou, kde jsou jednotlivá pole oddělená dvojtečkami:
+.TP 3
+\(bu
+název skupiny
+.TP
+\(bu
+zašifrované heslo
+.TP
+\(bu
+čárkami oddělený seznam administrátorů skupiny
+.TP
+\(bu
+čárkami oddělený seznam členů skupiny
+.PP
+Pole pro název skupiny a heslo musí být vyplněná. Zašifrované heslo se
+skládá ze znaků 64 znakové abecedy (a-z, A-Z, 0-9, \\ a /).
+Podrobnosti o hesle naleznete v
+\fBcrypt\fR(3).
+Pokud pole s heslem obsahuje znak, který není platným výsledkem
+funkce
+\fBcrypt\fR(3), např. ! nebo *, uživatel se nebude moci pomocí tohoto
+hesla přihlásit, ale záleží také na systému
+\fBpam\fR(7).
+.PP
+Heslo v tomto souboru má přednost před heslem ze souboru
+\fI/etc/group\fR.
+.PP
+Má-li být zachována bezpečnost hesel, nesmí být tento soubor čitelný
+pro běžné uživatele.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+citlivé informace o skupinových účtech
+.SH "VIZ TAKÉ"
+.PP
+\fBgroup\fR(5),
+\fBgpasswd\fR(5),
+\fBnewgrp\fR(5).
diff --git a/man/cs/id.1 b/man/cs/id.1
new file mode 100644 (file)
index 0000000..9eafaf1
--- /dev/null
@@ -0,0 +1,62 @@
+.TH ID 1 "GNU Shell Utilities" "FSF" \" \-*\- nroff \-*\-
+.do hla cs
+.do hpf hyphen.cs
+.SH JMÉNO
+id \- vypíše reálný a efektivní UID a GID
+.SH POUŽITÍ
+.B id
+[\-gnruG] [\-\-group] [\-\-name] [\-\-real] [\-\-user] [\-\-groups]
+[\-\-help] [\-\-version] [uživatel]
+.SH POPIS
+Tato dokumentace není dále udržována a může být nepřesná nebo neúplná.
+Autoritativním zdrojem je Texinfo dokumentace.
+.PP
+Tato manuálová stránka popisuje GNU verzi příkazu
+.BR id .
+Příkaz
+.B id
+vypíše informace o zadaném uživateli nebo (pokud není jméno uživatele
+zadáno) o uživateli, který program
+.B id
+spustil. Implicitně vypisuje reálné user ID, reálné group ID,
+efektivní user ID, pokud se liší od reálného user ID, efektivní
+group ID, pokud se liší od reálného group ID, a group ID skupin,
+v nichž je uživatel členem. Před každou z hodnot je vypsán řetězec
+určující o jakou hodnotu se jedná a za každou jsou odpovídající
+jména skupin a uživatelů v závorkách.
+.PP
+Volby způsobí, že program
+.B id
+vypisuje pouze některé z těchto informací.
+.SS VOLBY
+.TP
+.I "\-g, \-\-group"
+Vypíše pouze group ID.
+.TP
+.I "\-G, \-\-groups"
+Vypíše pouze skupiny, v nichž je uživatel členem.
+.TP
+.I "\-\-help"
+Vypíše návod k použití na standardní výstup a bezchybně skončí.
+.TP
+.I "\-n, \-\-name"
+Vypíše jméno uživatele nebo skupiny místo čísla ID.
+Vyžaduje
+.IR \-u ,
+.IR \-g ,
+nebo
+.IR \-G .
+.TP
+.I "\-r, \-\-real"
+Vypíše reálné místo efektivních user a group ID.
+Vyžaduje
+.IR \-u ,
+.IR \-g ,
+nebo
+.IR \-G .
+.TP
+.I "\-u, \-\-user"
+Vypíše pouze user ID.
+.TP
+.I "\-\-version"
+Vypíše číslo verze na standardní výstup a bezchybně skončí.
diff --git a/man/cs/lastlog.8 b/man/cs/lastlog.8
new file mode 100644 (file)
index 0000000..928d579
--- /dev/null
@@ -0,0 +1,40 @@
+.\"    @(#)lastlog.8   3.3     08:24:58        29 Sep 1993 (National Guard Release)
+.\"    $Id: lastlog.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH LASTLOG 8
+.SH JMÉNO
+lastlog \- prozkoumá soubor lastlog
+.SH SYNTAXE
+.B lastlog
+.RB [ \-u
+.IR přihlašovací\-jméno ]
+.RB [ \-t
+.IR dny ]
+.SH POPIS
+\fBlastlog\fR setřídí a zobrazí obsah souboru
+\fI/var/log/lastlog\fR,
+který obsahuje záznamy o přihlašování a odhlašování uživatelů v systému.
+Zobrazí se \fBpřihlašovací jméno\fR, \fBjméno terminálu\fR a \fBčas posledního
+přihlašení\fR.
+Standardně (tj. bez dalších voleb) lastlog zobrazí záznamy setříděné
+podle čísla UID.
+Použití přepínače \fB\-u \fIpřihlašovací\-jméno\fR
+způsobí, že bude vytištěn pouze poslední záznam o přihlášení příslušného uživatele.
+Zadáním \fB\-t \fIdny\fR se zobrazí pouze
+ta přihlášení, které jsou dřívější než zadané \fIdny\fR.
+Parametr \fB\-t\fR překryje případný parametr \fB\-u\fR.
+.PP
+Pokud se uživatel ještě nikdy nepřihlásil, zobrazí se zpráva \fB"**Never logged in**"\fR (Nikdy nepřihlášen)
+místo jména terminálu a času.
+.SH SOUBORY
+/var/log/lastlog \- soubor se záznamy o přihlášení a odhlášení
+.SH NÁMITKY
+Velké rozdíly v UID číslech jsou způsobeny tím, že lastlog program běžel dlouho bez
+výstupu na obrazovku (např. mmdf=800 a poslední uid=170, program se bude
+jevit jako s uid 171\-799).
+.SH AUTOŘI
+Julianne Frances Haugh (jfh@austin.ibm.com)
+.br
+Phillip Street
+.SH PŘELOŽIL
+Ondřej Pavlíček (mox@post.cz).
diff --git a/man/cs/logoutd.8 b/man/cs/logoutd.8
new file mode 100644 (file)
index 0000000..ed264c4
--- /dev/null
@@ -0,0 +1,30 @@
+.TH "LOGOUTD" "8" "11/05/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+logoutd \- Omezuje čas přihlášení
+.SH "POUŽITÍ"
+.HP 8
+\fBlogoutd\fR
+.SH "POPIS"
+.PP
+\fBlogoutd\fR
+omezí čas přihlášení a seznam povolených portů podle pravidel zadaných v
+\fI/etc/porttime\fR.
+\fBlogoutd\fR
+by se měl spouštět z
+\fI/etc/rc\fR. Program pak pravidelně kontroluje soubor
+\fI/var/run/utmp\fR
+a zkoumá, zda má daný uživatel oprávnění být přihlášen na daném portu
+v daný čas. Všechna sezení, která porušují pravidla zadaná v
+\fI/etc/porttime\fR,
+jsou ukončena.
+.SH "SOUBORY"
+.TP
+\fI/etc/porttime\fR
+oprávnění k portům a přihlášení
+.TP
+\fI/var/run/utmp\fR
+seznam aktuálních sezení
diff --git a/man/cs/nologin.8 b/man/cs/nologin.8
new file mode 100644 (file)
index 0000000..92d6be8
--- /dev/null
@@ -0,0 +1,28 @@
+.TH "NOLOGIN" "8" "01/07/2006" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+nologin \- slušně odmítne přihlášení
+.SH "PŘEHLED"
+.HP 8
+\fBnologin\fR
+.SH "POPIS"
+.PP
+\fBnologin\fR
+zobrazí oznámení, že účet není dostupný a skončí s nenulovým
+návratovým kódem. Program je zamýšlen jako vhodná náhrada pole shell
+v souboru passwd pro zablokované účty.
+.PP
+Pro zakázání všech přihlášení prozkoumejte
+\fBnologin\fR(5).
+.SH "VIZ TAKÉ"
+.PP
+\fBlogin\fR(1),
+\fBnologin\fR(5).
+.SH "HISTORIE"
+.PP
+Příkaz
+\fBnologin\fR
+se objevil v BSD 4.4.
diff --git a/man/cs/passwd.5 b/man/cs/passwd.5
new file mode 100644 (file)
index 0000000..1b00228
--- /dev/null
@@ -0,0 +1,57 @@
+.TH PASSWD 5 "19. března 1997" "Linux" "Linux \- příručka programátora"
+.do hla cs
+.do hpf hyphen.cs
+.SH JMÉNO
+passwd \- seznam hesel uživatelů
+.SH POPIS
+.B Passwd
+je čitelný textový soubor, který obsahuje seznam uživatelů systému a hesel,
+která musejí použít pro přístup. Seznam hesel uživatelů by měl být s právy
+pro čtení pro každého, což v pořádku, protože jsou hesla zašifrována, ale 
+zápisová práva má jenom superuživatel. Jestliže vytvoříte nový login,
+nechejte pole pro heslo prázdné a použijte \fBpasswd\fP(1) pro doplnění.
+Hvězdička nebo něco podobného v poli hesel značí, že tento uživatel se nemůže
+přihlásit přes \fBlogin\fP(1). Jestliže je váš kořenový adresář v 
+.IR /dev/ram,
+tak musíte uložit změněný soubor hesel do vašeho kořenového adresáře na
+disketě něž systém vypnete. Jestliže chcete
+vytvořit skupinu uživatelů, jejich GID musí být stejná a musí pro ni
+existovat záznam v souboru \fI/etc/group\fP, nebo skupina nebude existovat.
+.PP
+Každý řádek tvoří jeden záznam, který má následující formát:
+.sp
+.RS
+login_name:passwd:UID:GID:user_name:directory:shell
+.RE
+.sp
+Popis jednotlivých polí:
+.sp
+.RS
+.TP 1.0in
+.I login_name
+přihlašovací jméno uživatele systému
+.TP
+.I password
+zašifrované heslo uživatele
+.TP
+.I UID
+číselná identifikace uživatele (user ID)
+.TP
+.I GID
+číselná identifikace  skupiny  (group ID)
+.TP
+.I user_name
+(volitelné) poznámka (často celé jméno uživatele)
+.TP
+.I directory
+domovský adresář uživatele ($HOME)
+.TP
+.I shell
+program, který je spuštěn po úspěšném přihlášení (jestliže je prázdný,
+použije se
+.IR /bin/sh ).
+.RE
+.SH SOUBORY
+.I /etc/passwd
+.SH DALŠÍ INFORMACE
+.BR passwd "(1), " login "(1), " group (5)
diff --git a/man/cs/shadow.5 b/man/cs/shadow.5
new file mode 100644 (file)
index 0000000..fdbe0a1
--- /dev/null
@@ -0,0 +1,64 @@
+.TH SHADOW 5
+.do hla cs
+.do hpf hyphen.cs
+.SH JMÉNO
+shadow \- soubor se zašifrovanými hesly
+.SH POPIS
+.I shadow
+obsahuje informace o zašifrovaných heslech uživatelských účtů a
+volitelně může obsahovat informace o stárnutí hesel. Soubor obsahuje
+
+.IP "" .5i
+Přihlašovací jméno
+.IP "" .5i
+Zašifrované heslo
+.IP "" .5i
+Počet dnů od 1. ledna 1970, kdy bylo heslo naposledy změněno
+.IP "" .5i
+Počet dnů, po jejichž uplynutí může být heslo změněno
+.IP "" .5i
+Počet dnů, po jejichž uplynutí musí být heslo změněno
+.IP "" .5i
+Počet dnů před lhůtou, kdy je uživatel varován, že heslo vyprší
+.IP "" .5i
+Počet dnů, po jejichž uplynutí po propadnutí hesla je zablokován účet.
+.IP "" .5i
+Počet dnů od 1. ledna 1970, kdy byl účet zablokován
+.IP "" .5i
+Rezervované pole
+.PP
+Pole hesla musí být vyplněno. Zašifrované heslo se skládá ze 13 až 24
+znaků z 64 prvkové množiny znaků (a až z, A až Z, 0 až 9, \. a
+/). \fIcrypt(3)\fR obsahuje detailní informace o tom, jak
+interpretovat tento řetězec.
+.PP
+Datum poslední změny hesla je dáno počtem dní od 1. ledna 1970. Heslo
+nesmí býti znovu změněno dokud řádně neuplyne specifikovaný počet dní,
+a musí být změněno po uplynutí maximálního počtu dní. Pokud je
+minimální počet dnů platnosti hesla vyšší než maximální počet
+povolených dní, heslo nemůže být změněno uživatelem.
+.PP
+Účet je považován za neaktivní a bude zablokován, jestliže heslo není
+změněno během určeného počtu dní po vypršení platnosti hesla. Účet
+bude také zablokován v určený den nezávisle na ostatních informacích o
+vypršení hesla.
+.PP
+Tyto informace o heslu a době jeho platnosti mají prioritu před
+informacemi uloženými v souboru \fB/etc/passwd\fR.
+.PP
+Tento soubor nesmí být čitelný řádnými uživateli, má\-li být
+ochrana hesel účinná.
+.SH SOUBORY
+\fI/etc/passwd\fR \- informace o uživatelských účtech
+.br
+\fI/etc/shadow\fR \- zašifrovaná hesla uživatelů
+.SH DALŠÍ INFORMACE
+chage(1),
+login(1),
+passwd(1),
+su(1),
+sulogin(1M),
+shadow(3),
+passwd(5),
+pwconv(8),
+pwunconv(8)
diff --git a/man/cs/su.1 b/man/cs/su.1
new file mode 100644 (file)
index 0000000..e8a6842
--- /dev/null
@@ -0,0 +1,111 @@
+.TH SU 1 "GNU Shell Utilities" "FSF" \" \-*\- nroff \-*\-
+.do hla cs
+.do hpf hyphen.cs
+.SH JMÉNO
+su \- spustí shell pod jiným uživatelským a skupinovým ID
+.SH POUŽITÍ
+.B su
+[\-flmp] [\-c příkaz] [\-s shell] [\-\-login] [\-\-fast]
+[\-\-preserve\-environment] [\-\-command=příkaz] [\-\-shell=shell] [\-]
+[\-\-help] [\-\-version] [uživatel [arg...]]
+.SH POPIS
+Tato dokumentace není dále udržována a může být nepřesná nebo neúplná.
+Autoritativním zdrojem je Texinfo dokumentace.
+.PP
+Tato manuálová stránka popisuje GNU verzi příkazu
+.BR su .
+Příkaz
+.B su
+umožňuje, aby se uživatel dočasně stal jiným uživatelem. Spustí
+shell s reálným a efektivním user ID, group ID, i skupinami, jichž
+je zadaný
+.I uživatel
+členem. Pokud není zadán
+.IR uživatel ,
+dosadí se root, superuživatel. Jméno shellu je převzato ze souboru
+/etc/passwd. Pokud v /etc/passwd jméno shellu není, použije se
+/bin/sh. Pokud má uživatelský účet heslo, a příkaz
+.B su
+není spuštěn pod reálným user ID 0 (tj. superuživatelem), bude
+požadovat zadání hesla.
+.PP
+Příkaz
+.B su
+implicitně nemění aktuální adresář. Nastavuje proměnné prostředí
+`HOME' a `SHELL' podle údajů z /etc/passwd a pokud zadaný
+.I uživatel
+není superuživatelem, nastaví proměnné `USER' a `LOGNAME' na
+.IR uživatel .
+Implicitně není spuštěný shell login shellem.
+.PP
+Jsou\-li zadány další argumenty, budou předány jako argumenty shellu.
+.PP
+Příkaz
+.B su
+nezpracovává speciálně /bin/sh nebo ostatní shelly (nastavením
+argv[0] na "\-su", předáním volby `\-c' pouze jistým shellům, atd.).
+.PP
+Na systémech se syslog démonem může být příkaz
+.B su
+přeložen tak, aby zaznamenával pomocí syslogu neúspěšná
+a volitelně i úspěšná vyvolání příkazu
+.BR su .
+.SS VOLBY
+.TP
+.I "\-c příkaz, \-\-command=příkaz"
+Místo odstartování interaktivního shellu předá
+.I příkaz
+s volbou
+.I \-c
+jako jediný příkazový řádek shellu.
+.TP
+.I "\-f, \-\-fast"
+Předá shellu volbu
+.IR \-f .
+Tuto volbu je pravděpodobně vhodné používat pouze pro shelly
+.B csh
+a
+.BR tcsh ,
+u nichž zabrání provedení startovacího souboru (.cshrc).
+U shellů vycházejících z Bourne shellu volba
+.I \-f
+zakazuje expanzi žolíkových znaků, což obecně není žádoucí.
+.TP
+.I "\-\-help"
+Vypíše návod k použití na standardní výstup a bezchybně skončí.
+.TP
+.I "\-, \-l, \-\-login"
+Spustí shell jako login shell. To znamená, že nebude nastaven obsah
+žádných proměnných prostředí kromě `TERM', `HOME', a `SHELL' (které
+budou nastaveny, jak je popsáno výše), `USER' a `LOGNAME' (které
+budou nastaveny i pro superuživatele jak je popsáno výše). Proměnná
+prostředí `PATH' bude nastavena na hodnotu definovanou při překladu.
+Aktuální adresář bude nastaven na domovský adresář; před jméno
+shellu bude předřazen znak "\-", který způsobí, že bude zpracován
+startovací soubor nebo soubory.
+.TP
+.I "\-m, \-p, \-\-preserve\-environment"
+Nebude měnit proměnné prostředí `HOME', `USER', `LOGNAME' ani
+`SHELL'. Je chybou, pokud uživatel, který spustil příkaz
+.B su
+není superuživatel a přitom má nový uživatel omezený shell. Jinak
+se spustí místo uživatelova shellu z /etc/passwd shell zadaný
+v proměnné prostředí `SHELL'. Omezený shell je takový, který
+není uveden v souboru /etc/shells, nebo v zakompilován seznamu
+souborů, pokud /etc/shells neexistuje. Chování příkazu
+.B su
+s touto volbou lze změnit volbami
+.I \-\-login
+a
+.I \-\-shell
+(má přednost před hodnotou proměnné prostředí SHELL).
+.TP
+.I "\-s, \-\-shell shell"
+Spustí zadaný shell místo uživatelova shellu z /etc/passwd.
+Je chybou, pokud uživatel, který spustil
+.B su
+není superuživatel a přitom shell nového uživatele uvedený
+v /etc/passwd je omezený.
+.TP
+.I "\-\-version"
+Vypíše číslo verze na standardní výstup a bezchybně skončí.
diff --git a/man/cs/vipw.8 b/man/cs/vipw.8
new file mode 100644 (file)
index 0000000..fbef380
--- /dev/null
@@ -0,0 +1,71 @@
+.TH "VIPW" "8" "12/07/2005" "System Management Commands" "System Management Commands"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "JMÉNO"
+vipw, vigr \- slouží k úpravě souborů password, group, shadow-password a shadow-group.
+.SH "POUŽITÍ"
+.HP 5
+\fBvipw\fR [volby]
+.HP 5
+\fBvigr\fR [volby]
+.SH "POPIS"
+.PP
+\fBvipw\fR
+a
+\fBvigr\fR
+upravují soubory
+\fI/etc/passwd\fR
+a
+\fI/etc/group\fR. S přepínačem
+\fB\-s\fR
+budou upravovat stínové verze obou souborů, tj.
+\fI/etc/shadow\fR
+a
+\fI/etc/gshadow\fR. Programy používají zámky, aby předešly porušení
+souborů. Při hledání editoru nejprve zkusí proměnnou prostředí
+\fB$VISUAL\fR, poté proměnnou prostředí
+\fB$EDITOR\fR a na konec spustí standardní editor
+\fBvi\fR(1).
+.SH "VOLBY"
+.PP
+Příkazy
+\fBvipw\fR
+a
+\fBvigr\fR
+akceptují následující volby:
+.TP
+\fB\-g\fR, \fB\-\-group\fR
+Upraví databázi skupin.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Zobrazí nápovědu a skončí.
+.TP
+\fB\-p\fR, \fB\-\-passwd\fR
+Upraví databázi hesel.
+.TP
+\fB\-q\fR, \fB\-\-quiet\fR
+Tichý režim.
+.TP
+\fB\-s\fR, \fB\-\-shadow\fR
+Upraví databázi shadow nebo gshadow.
+.SH "SOUBORY"
+.TP
+\fI/etc/group\fR
+informace o skupinových účtech
+.TP
+\fI/etc/gshadow\fR
+stínový soubor pro skupiny
+.TP
+\fI/etc/passwd\fR
+informace o uživatelských účtech
+.TP
+\fI/etc/shadow\fR
+citlivé informace o uživatelských účtech
+.SH "VIZ TAKÉ"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)\fBpasswd\fR(5),
+\fBshadow\fR(5).
diff --git a/man/de/Makefile.am b/man/de/Makefile.am
new file mode 100644 (file)
index 0000000..de411dd
--- /dev/null
@@ -0,0 +1,19 @@
+
+mandir = @mandir@/de
+
+man_MANS = \
+       chsh.1 \
+       chfn.1 \
+       groups.1 \
+       login.1 \
+       newgrp.1 \
+       passwd.1 \
+       passwd.5 \
+       su.1 \
+       vigr.8 \
+       vipw.8
+
+EXTRA_DIST = $(man_MANS)
+
+include ../generate_translations.mak
+
diff --git a/man/de/Makefile.in b/man/de/Makefile.in
new file mode 100644 (file)
index 0000000..63d8a59
--- /dev/null
@@ -0,0 +1,551 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/../generate_mans.mak \
+       $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+subdir = man/de
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+       "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/de
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+       chsh.1 \
+       chfn.1 \
+       groups.1 \
+       login.1 \
+       newgrp.1 \
+       passwd.1 \
+       passwd.5 \
+       su.1 \
+       vigr.8 \
+       vipw.8
+
+EXTRA_DIST = $(man_MANS)
+@ENABLE_REGENERATE_MAN_TRUE@LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@CLEANFILES = .xml2po.mo $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST))
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/de/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/de/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man5 install-man8 install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
+
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@   [ ! -f ../config.xml ] || mv ../config.xml ../config.xml.bak
+@ENABLE_REGENERATE_MAN_TRUE@   xml2po --expand-all-entities -l $(LANG) -p ../po/$(LANG).po -o $@ ../$@
+@ENABLE_REGENERATE_MAN_TRUE@   sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+@ENABLE_REGENERATE_MAN_TRUE@   [ ! -f ../config.xml.bak ] || mv ../config.xml.bak ../config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   sed -i 's/config SYSTEM "config.xml">/config SYSTEM "config.xml">\%config;/' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@   make -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%: %.xml Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(SHA_CRYPT_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@               -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@grpconv.8 grpunconv.8 pwunconv.8: pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@getspnam.3: shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@vigr.8: vipw.8
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/de/chfn.1 b/man/de/chfn.1
new file mode 100644 (file)
index 0000000..3745cef
--- /dev/null
@@ -0,0 +1,111 @@
+'\" t
+.\"     Title: chfn
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24.07.2009
+.\"    Manual: Dienstprogramme f\(:ur Benutzer
+.\"    Source: Dienstprogramme f\(:ur Benutzer
+.\"  Language: German
+.\"
+.TH "CHFN" "1" "24.07.2009" "Dienstprogramme f\(:ur Benutzer" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chfn \- \(:andert den Benutzernamen und sonstige Informationen
+.SH "SYNOPSIS"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\-f\ \fIVoller_Name\fR] [\-r\ \fIZimmer_Nr\fR] [\-w\ \fITel_Arbeit\fR] [\-h\ \fITel_Privat\fR] [\-o\ \fIsonstiges\fR] [\fIBenutzer\fR]
+.SH "BESCHREIBUNG"
+.PP
+Der Befehl
+\fBchfn\fR
+\(:andert den vollen Namen, die B\(:uronummer und B\(:uroerweiterung sowie private Telefonnummer f\(:ur ein Benutzerkonto\&. Diese Informationen werden typischerweise von
+\fBfinger\fR(1)
+und anderen Programmen verwendet\&. Ein normaler Benutzer darf nur die Felder f\(:ur seines eigenen Kontos \(:andern und muss dabei zudem die Einschr\(:ankungen in
+/etc/login\&.defs
+beachten\&. So ist es Benutzern standardm\(:a\(ssig nicht m\(:oglich, ihren vollen Namen zu \(:andern\&. Root kann die Felder aller Konten ver\(:andern\&. Au\(sserdem darf nur Root mittels der Option
+\fB\-o\fR
+die undefinierten Teile des GECOS\-Feldes \(:andern\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.PP
+Wenn keine Option ausgew\(:ahlt wird, arbeitet
+\fBchfn\fR
+interaktiv\&. Dabei wird der Benutzer nach den aktuellen Werten f\(:ur alle Felder befragt\&. Bei Eingabe eines neuen Wertes wird dieser verwendet, bei Eingabe einer Leerzeile stattdessen der Originalwert beibehalten\&. Der aktuelle Wert wird zwischen einem Paar von
+\fB[ ]\fR
+angezeigt\&. Ohne Optionen fragt
+\fBchfn\fR
+nach einem Benutzerkonto\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration des Shadow\-Passwort\-Systems
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten\&.
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/de/chsh.1 b/man/de/chsh.1
new file mode 100644 (file)
index 0000000..431a644
--- /dev/null
@@ -0,0 +1,102 @@
+'\" t
+.\"     Title: chsh
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24.07.2009
+.\"    Manual: Dienstprogramme f\(:ur Benutzer
+.\"    Source: Dienstprogramme f\(:ur Benutzer
+.\"  Language: German
+.\"
+.TH "CHSH" "1" "24.07.2009" "Dienstprogramme f\(:ur Benutzer" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+chsh \- \(:andert die Login\-Shell
+.SH "SYNOPSIS"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIOptionen\fR] [\fILOGIN\fR]
+.SH "BESCHREIBUNG"
+.PP
+chsh \(:andert die Login\-Shell eines Benutzers\&. Es legt den Befehl fest, der bei der Anmeldung ausgef\(:uhrt wird\&. Ein normaler Benutzer kann nur die Login\-Shell seines eigenen Kontos \(:andern, w\(:ahrend Root dies f\(:ur alle Konten darf\&.
+.SH "OPTIONEN"
+.PP
+Die Optionen, die vom Befehl
+\fBchsh\fR
+unterst\(:utzt werden, sind:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Zeigt die Hilfe an und beendet das Programm\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fISHELL\fR
+.RS 4
+Der Name der neuen Login\-Shell des Benutzers\&. Falls dieses Feld leer gelassen wird, verwendet das System die Standard\-Login\-Shell\&.
+.RE
+.PP
+Wenn die Option
+\fB\-s\fR
+nicht ausgew\(:ahlt ist, wird
+\fBchsh\fR
+im interaktiven Modus betrieben\&. Dabei wird der Benutzer mit der aktuellen Login\-Shell zur Eingabe einer neuen aufgefordert\&. Durch Eingabe eines Wertes wird die Shell ge\(:andert, w\(:ahrend sie bei einer leeren Zeile beibehalten wird\&. Die aktuelle Shell wird zwischen einem Paar von
+\fI[ ]\fR
+angezeigt\&.
+.SH "ANMERKUNGEN"
+.PP
+Die einzige Beschr\(:ankung f\(:ur die Login\-Shell ist, dass der Name des Befehls in der Datei
+/etc/shells
+enthalten sein muss\&. Root darf allerdings jeden beliebigen Befehl ausf\(:uhren\&. Bei Konten, denen eine beschr\(:ankte Login\-Shell zugewiesen ist, ist es nicht m\(:oglich, die Login\-Shell zu \(:andern\&. Daher ist es nicht ratsam,
+/bin/rsh
+in
+/etc/shells
+einzutragen, da ein Benutzer nicht zu seiner urspr\(:unglichen Login\-Shell zur\(:uckwechseln kann, falls er versehentlich eine beschr\(:ankte Shell als Login\-Shell ausw\(:ahlt\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten\&.
+.RE
+.PP
+/etc/shells
+.RS 4
+Liste der m\(:oglichen Login\-Shells\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration des Shadow\-Passwort\-Systems
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/de/groups.1 b/man/de/groups.1
new file mode 100644 (file)
index 0000000..2dda51b
--- /dev/null
@@ -0,0 +1,57 @@
+'\" t
+.\"     Title: groups
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24.07.2009
+.\"    Manual: Dienstprogramme f\(:ur Benutzer
+.\"    Source: Dienstprogramme f\(:ur Benutzer
+.\"  Language: German
+.\"
+.TH "GROUPS" "1" "24.07.2009" "Dienstprogramme f\(:ur Benutzer" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groups \- zeigt die aktuell verwendeten Gruppennamen an
+.SH "SYNOPSIS"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIBenutzer\fR]
+.SH "BESCHREIBUNG"
+.PP
+Der Befehl
+\fBgroups\fR
+zeigt die momentan verwendeten Gruppennamen oder IDs an\&. Wenn einem Wert kein Eintrag in
+/etc/group
+entspricht, wird die Gruppennummer ausgegeben\&. Mit der Option
+\fIuser\fR
+werden nur die Gruppen des bezeichneten
+\fIBenutzers\fR
+angezeigt\&.
+.SH "ANMERKUNGEN"
+.PP
+Auf Systemen, die keine simultanen Gruppen unterst\(:utzen, werden die Informationen aus
+/etc/group
+ausgegeben\&. Wenn der Benutzer seine Gruppen\-ID \(:andern will, muss er
+\fBnewgrp\fR
+oder
+\fBsg\fR
+verwenden\&.
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten\&.
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/de/login.1 b/man/de/login.1
new file mode 100644 (file)
index 0000000..8333716
--- /dev/null
@@ -0,0 +1,478 @@
+'\" t
+.\"     Title: login
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24.07.2009
+.\"    Manual: Dienstprogramme f\(:ur Benutzer
+.\"    Source: Dienstprogramme f\(:ur Benutzer
+.\"  Language: German
+.\"
+.TH "LOGIN" "1" "24.07.2009" "Dienstprogramme f\(:ur Benutzer" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+login \- startet eine Sitzung auf dem System
+.SH "SYNOPSIS"
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIHost\fR] [\fIBenutzername\fR] [\fIENV=VAR\fR...]
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIHost\fR] \-f \fIBenutzername\fR
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] \-r\ \fIHost\fR
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBlogin\fR
+program is used to establish a new session with the system\&. It is normally invoked automatically by responding to the
+\fIlogin:\fR
+prompt on the user\'s terminal\&.
+\fBlogin\fR
+may be special to the shell and may not be invoked as a sub\-process\&. When called from a shell,
+\fBlogin\fR
+should be executed as
+\fBexec login\fR
+which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller)\&. Attempting to execute
+\fBlogin\fR
+from any shell but the login shell will produce an error message\&.
+.PP
+Falls erforderlich, wird der Benutzer anschlie\(ssend nach einem Passwort gefragt\&. Dieses wird w\(:ahrend der Eingabe nicht angezeigt\&. Es sind nur eine kleine Anzahl von Anmeldeversuchen zul\(:assig, ehe
+\fBlogin\fR
+abbricht und die Kommunikation getrennt wird\&.
+.PP
+Falls der Passwortverfall f\(:ur Ihr Konto aktiviert wurde, kann es sein, dass Sie vor der weiteren Nutzung nach einem neuen Passwort gefragt werden\&. Sie m\(:ussen Ihr altes und neues Passwort angegeben, bevor fortgefahren werden kann\&. In der Dokumentation zu
+\fBpasswd\fR(1)
+finden sich weitere Informationen\&.
+.PP
+Nach einer erfolgreichen Anmeldung werden Ihnen Systemmeldungen pr\(:asentiert, sowie das Vorhandensein von Mails angezeigt\&. Die Anzeige der systemweiten Nachrichtendatei
+/etc/motd
+kann abgeschaltet werden, indem im Login\-Verzeichnis eine leere Datei
+\&.hushlogin
+angelegt wird\&. Je nach Zustand der Mailbox des Benutzers ist die Mailnachricht entweder "\fISie haben neue Mails\&.\fR", "\fISie haben Mails\&.\fR" oder "\fIKeine Mails\&.\fR"\&.
+.PP
+Die Benutzer\- und Gruppen\-IDs werden gem\(:a\(ss den Werten in
+/etc/passwd
+gesetzt\&. Die Werte f\(:ur
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$PATH\fR,
+\fB$LOGNAME\fR
+und
+\fB$MAIL\fR
+werden ebenfalls entsprechend den Feldern im Passworteintrag gesetzt\&. Werte f\(:ur ulimit, umask und nice k\(:onnen ebenfalls gem\(:a\(ss den Werten im GECOS\-Feld gesetzt werden\&.
+.PP
+Bei einigen Installationen wird anf\(:anglich die Umgebungsvariable
+\fB$TERM\fR
+entsprechend dem Terminaltyp Ihrer tty\-Zeile, wie sie in
+/etc/ttytype
+angegeben ist, gesetzt\&.
+.PP
+Ein Initialisierungsskript f\(:ur Ihren Befehls\-Interpreter kann auch ausgef\(:uhrt werden\&. Sehen Sie bitte in den entsprechenden Handbuchseiten f\(:ur weitere Informationen dar\(:uber nach\&.
+.PP
+Eine Subsystem\-Anmeldung wird durch einen "*" als erstes Zeichen der Login\-Shell gekennzeichnet\&. Das angegebene Home\-Verzeichnis wird als Wurzel f\(:ur das Dateisystem verwendet, auf welchem der Benutzer tats\(:achlich angemeldet ist\&.
+.PP
+Es liegt NICHT in der Verantwortung von
+\fBlogin\fR, Benutzer aus der utmp\-Datei zu entfernen\&. Sowohl
+\fBgetty\fR(8)
+als auch
+\fBinit\fR(8)
+sind daf\(:ur zust\(:andig, die offenkundige Eigent\(:umerschaft einer Terminalsitzung aufzur\(:aumen\&. Falls Sie
+\fBlogin\fR
+von der Shell ohne
+\fBexec\fR
+verwenden, wird der Benutzer, den Sie verwenden, weiterhin als angemeldet erscheinen, obwohl Sie die Subsitzung abgemeldet haben\&.
+.SH "OPTIONEN"
+.PP
+\fB\-f\fR
+.RS 4
+Keine Authentifizierung durchf\(:uhren, Benutzer ist bereits angemeldet\&.
+.sp
+Note: In that case,
+\fIusername\fR
+is mandatory\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+Name des entfernten Rechners f\(:ur die Anmeldung\&.
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+Behalte die Umgebungseinstellungen bei\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+F\(:uhre das Autologin\-Protokoll f\(:ur rlogin aus\&.
+.RE
+.PP
+Die Optionen
+\fB\-r\fR,
+\fB\-h\fR
+und
+\fB\-f\fR
+k\(:onnen nur verwendet werden, wenn
+\fBlogin\fR
+von Root ausgef\(:uhrt wird\&.
+.SH "WARNUNGEN"
+.PP
+Diese Version von
+\fBlogin\fR
+hat viele Optionen f\(:ur die Kompilierung, davon sind eventuell nur einige auf bestimmten Systemen in Gebrauch\&.
+.PP
+Der Ort der Konfigurationsdateien kann entsprechend der Systemkonfiguration abweichen\&.
+.PP
+Es liegt NICHT in der Verantwortung von
+\fBlogin\fR, Benutzer aus der utmp\-Datei zu entfernen\&. Sowohl
+\fBgetty\fR(8)
+als auch
+\fBinit\fR(8)
+sind daf\(:ur zust\(:andig, die offenkundige Eigent\(:umerschaft einer Terminalsitzung aufzur\(:aumen\&. Falls Sie
+\fBlogin\fR
+von der Shell ohne
+\fBexec\fR
+verwenden, wird der Benutzer, den Sie verwenden, weiterhin als angemeldet erscheinen, obwohl Sie die Subsitzung abgemeldet haben\&.
+.PP
+As with any program,
+\fBlogin\fR\'s appearance can be faked\&. If non\-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine\&. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Delay in seconds before being allowed another attempt after a login failure\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\' shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+If defined, login failures will be logged in this file in a utmp format\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\'s name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\'s home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+If defined, this file will be displayed before each login prompt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of /var/log/lastlog login time info\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Maximum number of login retries in case of bad password\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Max time in seconds for login\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Enable logging of successful logins\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Enable display of unknown usernames when login failures are recorded\&.
+.sp
+Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Das Verzeichnis des Mail\-Spools\&. Diese Angabe wird ben\(:otigt, um die Mailbox zu bearbeiten, nachdem das entsprechende Benutzerkonto ver\(:andert oder gel\(:oscht wurde\&. Falls nicht angegeben, wird ein Standard verwendet, der beim Kompilieren festgelegt wurde\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in /etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\'s primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "DATEIEN"
+.PP
+/var/run/utmp
+.RS 4
+Liste der aktuellen Login\-Sitzungen\&.
+.RE
+.PP
+/var/log/wtmp
+.RS 4
+Liste der vorangegangenen Login\-Sitzungen
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Verschl\(:usselte Informationen zu den Benutzerkonten\&.
+.RE
+.PP
+/etc/motd
+.RS 4
+Datei mit der Systemmeldung des Tages\&.
+.RE
+.PP
+/etc/nologin
+.RS 4
+Verhindert, dass sich Benutzer au\(sser Root anmelden\&.
+.RE
+.PP
+/etc/ttytype
+.RS 4
+Liste der Terminaltypen\&.
+.RE
+.PP
+$HOME/\&.hushlogin
+.RS 4
+Unterdr\(:uckt die Ausgabe von Systemnachrichten\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration des Shadow\-Passwort\-Systems
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBmail\fR(1),
+\fBpasswd\fR(1),
+\fBsh\fR(1),
+\fBsu\fR(1),
+\fBlogin.defs\fR(5),
+\fBnologin\fR(5),
+\fBpasswd\fR(5),
+\fBsecuretty\fR(5),
+\fBgetty\fR(8)\&.
diff --git a/man/de/newgrp.1 b/man/de/newgrp.1
new file mode 100644 (file)
index 0000000..76a6d85
--- /dev/null
@@ -0,0 +1,88 @@
+'\" t
+.\"     Title: newgrp
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24.07.2009
+.\"    Manual: Dienstprogramme f\(:ur Benutzer
+.\"    Source: Dienstprogramme f\(:ur Benutzer
+.\"  Language: German
+.\"
+.TH "NEWGRP" "1" "24.07.2009" "Dienstprogramme f\(:ur Benutzer" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+newgrp \- als neue Gruppe anmelden
+.SH "SYNOPSIS"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIGruppe\fR]
+.SH "BESCHREIBUNG"
+.PP
+Mit dem Befehl
+\fBnewgrp\fR
+kann w\(:ahrend einer Login\-Sitzung die aktuelle Gruppen\-ID ge\(:andert werden\&. Wenn zus\(:atzlich der Schalter
+\fB\-\fR
+angegeben wird, wird die Benutzerumgebung neu gestartet, so als ob sich der Benutzer angemeldet h\(:atte\&. Anderenfalls bleibt die aktuelle Umgebung einschlie\(sslich des aktuellen Arbeitsverzeichnisses unver\(:andert\&.
+.PP
+\fBnewgrp\fR
+wechselt von der aktuellen echten Gruppen\-ID zu der angegeben Gruppe oder, falls kein Gruppenname angegeben wird, so der Standardgruppe, wie sie in
+/etc/passwd
+festgelegt ist\&. Zudem versucht
+\fBnewgrp\fR, die Gruppe der Gruppensammlung des Benutzers hinzuzuf\(:ugen\&. Wenn der Benutzer kein Passwort (in
+/etc/shadow, falls er einen Eintrag in der Shadow\-Passwort\-Datei hat, anderenfalls in
+/etc/passwd), die Gruppe aber eines hat, oder wenn der Benutzer nicht Mitglied der Gruppe ist und die Gruppe ein Passwort besitzt, und der Benutzer nicht Root ist, wird er nach einem Passwort gefragt\&. Der Zugriff wird verweigert, wenn das Gruppenpasswort leer ist und der Benutzer nicht Gruppenmitglied ist\&.
+.PP
+Wenn sich in
+/etc/gshadow
+ein Eintrag f\(:ur diese Gruppe befindet, wird die Mitgliederliste und das Passwort dieser Gruppe dieser Datei entnommen\&. Anderenfalls ist der Eintrag in
+/etc/group
+relevant\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Verschl\(:usselte Informationen zu den Benutzerkonten\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Verschl\(:usselte Informationen zu den Gruppenkonten\&.
+.RE
+.SH "SIEHE AUCH"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/de/passwd.1 b/man/de/passwd.1
new file mode 100644 (file)
index 0000000..9025cd0
--- /dev/null
@@ -0,0 +1,386 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24.07.2009
+.\"    Manual: Dienstprogramme f\(:ur Benutzer
+.\"    Source: Dienstprogramme f\(:ur Benutzer
+.\"  Language: German
+.\"
+.TH "PASSWD" "1" "24.07.2009" "Dienstprogramme f\(:ur Benutzer" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+passwd \- \(:andert das Passwort eines Benutzers
+.SH "SYNOPSIS"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIOptionen\fR] [\fILOGIN\fR]
+.SH "BESCHREIBUNG"
+.PP
+The
+\fBpasswd\fR
+command changes passwords for user accounts\&. A normal user may only change the password for his/her own account, while the superuser may change the password for any account\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "Ver\(:andern des Passworts"
+.PP
+The user is first prompted for his/her old password, if one is present\&. This password is then encrypted and compared against the stored password\&. The user has only one chance to enter the correct password\&. The superuser is permitted to bypass this step so that forgotten passwords may be changed\&.
+.PP
+Nachdem das Passwort eingegeben wurde, werden Informationen \(:uber die G\(:ultigkeitsdauer des Passworts abgefragt, um festzustellen, ob der Benutzer das Passwort zu dieser Zeit ver\(:andern darf\&. Wenn nicht, lehnt
+\fBpasswd\fR
+die \(:Anderung des Passworts ab und beendet sich\&.
+.PP
+Der Benutzer wird dann aufgefordert, zweimal ein neues Passwort einzugeben\&. Beide Eingaben werden miteinander verglichen\&. Sie m\(:ussen \(:ubereinstimmen, damit das Passwort ge\(:andert wird\&.
+.PP
+Anschlie\(ssend wird das Passwort auf seine Komplexit\(:at \(:uberpr\(:uft\&. Eine allgemeine Richtlinie ist, dass Passw\(:orter aus sechs bis acht Zeichen bestehen sollten und ein oder mehrere Zeichen aus folgenden Mengen enthalten sollten:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Kleinbuchstaben
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Ziffern 0 bis 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Satzzeichen
+.RE
+.PP
+Seien Sie vorsichtig, dass Sie nicht die standardm\(:a\(ssigen L\(:osch\- und Kill\-Zeichen des Systems eingeben\&.
+\fBpasswd\fR
+weist Passw\(:orter zur\(:uck, die nicht hinreichend komplex sind\&.
+.SS "Hinweise zu Benutzerpassw\(:ortern"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+Gefahren f\(:ur die Sicherheit von Passw\(:ortern kommen gew\(:ohnlich von sorgloser Wahl oder Handhabung des Passworts\&. Daher sollten Sie kein Passwort w\(:ahlen, das in einem W\(:orterbuch auftaucht oder das aufgeschrieben werden muss\&. Das Passwort sollte somit kein echter Name, Ihr Autokennzeichen, Geburtstag oder Ihre Adresse sein\&. All das kann dazu verwendet werden, das Passwort zu erraten, und stellt daher eine Gefahr f\(:ur die Sicherheit Ihres Systems dar\&.
+.PP
+You can find advices on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "OPTIONEN"
+.PP
+Die Optionen, die vom Befehl
+\fBpasswd\fR
+unterst\(:utzt werden, sind:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Diese Option kann nur in Verbindung mit
+\fB\-S\fR
+verwendet werden und f\(:uhrt dazu, dass der Status aller Benutzer angezeigt wird\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+L\(:oscht das Passwort eines Benutzers (macht es leer)\&. Dies ist ein schneller Weg, um das Passwort eines Kontos zu deaktivieren\&. Dem Konto ist dann kein Passwort zugeordnet\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+L\(:asst das Passwort eines Kontos sofort verfallen\&. Im Ergebnis kann damit erreicht werden, dass ein Benutzer beim n\(:achsten Login das Passwort \(:andern muss\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Zeigt die Hilfe an und beendet das Programm\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR\fIINAKTIV\fR
+.RS 4
+Mit dieser Option wird ein Konto deaktiviert, nachdem das Passwort f\(:ur eine bestimmte Anzahl von Tagen abgelaufen ist\&. Wenn ein Benutzerkonto ein abgelaufenes Passwort f\(:ur l\(:anger als
+\fIINAKTIV\fR
+Tage hatte, kann sich der Benutzer nicht mehr auf diesem Konto anmelden\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Indicate password change should be performed only for expired authentication tokens (passwords)\&. The user wishes to keep their non\-expired tokens as before\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Lock the password of the named account\&. This option disables a password by changing it to a value which matches no possible encrypted value (it adds a \(aa!\(aa at the beginning of the password)\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\'s expire date to Jan 2, 1970)\&.
+.sp
+Users with a locked password are not allowed to change their password\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR \fIMIN_DAYS\fR
+.RS 4
+Setzt die Anzahl von Tagen, die mindestens zwischen zwei \(:Anderungen eines Passworts vergehen m\(:ussen, auf
+\fIMIN_TAGE\fR\&. Ein Wert von Null in diesem Feld bedeutet, dass der Benutzer sein Passwort jederzeit \(:andern darf\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Stiller Modus\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR\fIPASSWORTDEPOT\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Display account status information\&. The status information consists of 7 fields\&. The first field is the user\'s login name\&. The second field indicates if the user account has a locked password (L), has no password (NP), or has a usable password (P)\&. The third field gives the date of the last password change\&. The next four fields are the minimum age, maximum age, warning period, and inactivity period for the password\&. These ages are expressed in days\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR\fIWARN_TAGE\fR
+.RS 4
+Legt die Anzahl der Tage fest, an denen der Benutzer eine Warnung erh\(:alt, bevor sein Passwort ung\(:ultig wird\&. Die Option
+\fIWARN_TAGE\fR
+bezeichnet die Anzahl der Tage, f\(:ur die ein Benutzer vor Verfall seines Passworts gewarnt wird\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR\fIMAX_TAGE\fR
+.RS 4
+Bestimmt die maximale Anzahl von Tagen, die das Passwort g\(:ultig bleibt\&. Nach
+\fIMAX_TAGE\fR
+Tagen muss das Passwort ge\(:andert werden\&.
+.RE
+.SH "WARNUNGEN"
+.PP
+Password complexity checking may vary from site to site\&. The user is urged to select a password as complex as he or she feels comfortable with\&.
+.PP
+Users may not be able to change their password on a system if NIS is enabled and they are not logged into the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\'t change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Verschl\(:usselte Informationen zu den Benutzerkonten\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration des Shadow\-Passwort\-Systems
+.RE
+.SH "R\(:UCKGABEWERTE"
+.PP
+Der Befehl
+\fBpasswd\fR
+gibt beim Beenden folgende Werte zur\(:uck:
+.PP
+\fI0\fR
+.RS 4
+Erfolg
+.RE
+.PP
+\fI1\fR
+.RS 4
+Berechtigung verweigert
+.RE
+.PP
+\fI2\fR
+.RS 4
+ung\(:ultige Kombination von Optionen
+.RE
+.PP
+\fI3\fR
+.RS 4
+unerwarteter Fehler, nichts wurde ver\(:andert
+.RE
+.PP
+\fI4\fR
+.RS 4
+unerwarteter Fehler, die Datei
+passwd
+fehlt
+.RE
+.PP
+\fI5\fR
+.RS 4
+Datei
+passwd
+wird benutzt, bitte nochmal versuchen
+.RE
+.PP
+\fI6\fR
+.RS 4
+ung\(:ultiges Argument f\(:ur Option
+.RE
+.SH "SIEHE AUCH"
+.PP
+
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/de/passwd.5 b/man/de/passwd.5
new file mode 100644 (file)
index 0000000..5f62e9e
--- /dev/null
@@ -0,0 +1,171 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24.07.2009
+.\"    Manual: Dateiformate und -konvertierung
+.\"    Source: Dateiformate und -konvertierung
+.\"  Language: German
+.\"
+.TH "PASSWD" "5" "24.07.2009" "Dateiformate und -konvertierun" "Dateiformate und \-konvertieru"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+passwd \- die Passwortdatei
+.SH "BESCHREIBUNG"
+.PP
+/etc/passwd
+enth\(:alt einen Eintrag pro Benutzerkonto, wobei jeder Eintrag sieben Felder besitzt, die durch Doppelpunkt (\(Bq:\(lq) getrennt sind\&. Diese Felder sind:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Login\-Name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional verschl\(:usseltes Passwort
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerische Benutzer\-ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerische Gruppen\-ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Benutzername oder Kommentarfeld
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Home\-Verzeichnis des Benutzers
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional Befehlsinterpreter des Benutzers
+.RE
+.PP
+Das Feld f\(:ur das verschl\(:usselte Passwort kann leer sein\&. In diesem Fall wird kein Passwort ben\(:otigt, um sich beim System anzumelden\&. Allerdings werden einige Anwendung, die
+/etc/passwd
+auswerten,
+\fIkeinen\fR
+Zugriff erlauben, wenn das
+\fIPasswort\fR\-Feld leer ist\&. Wenn das
+\fIPasswort\fR\-Feld ein kleines
+\(Bqx\(lq
+enth\(:alt, ist das Passwort in der Datei
+\fBshadow\fR(5)
+gespeichert\&. Es
+\fImuss\fR
+sich dann ein passender Eintrag in
+/etc/shadow
+befinden, oder das Benutzerkonto ist ung\(:ultig\&. Wenn das
+\fIPasswort\fR\-Feld eine andere Zeichenkette enth\(:alt, wird diese als ein verschl\(:usseltes Passwort behandelt\&. Genaueres dazu befindet sich unter
+\fBcrypt\fR(3)\&.
+.PP
+Das Kommentarfeld wird von verschiedenen Systemprogrammen wie z\&.B\&.
+\fBfinger\fR(1)
+ausgewertet\&.
+.PP
+Das Feld f\(:ur das Home\-Verzeichnis gibt den Namen f\(:ur das anf\(:angliche Arbeitsverzeichnis an\&. Das Programm
+\fBlogin\fR
+benutzt diese Information, um den Wert der Umgebungsvariable
+\fB$HOME\fR
+zu setzen\&.
+.PP
+Das Feld f\(:ur den Befehlsinterpreter enth\(:alt den Namen des Befehlssprachen\-Interpreters des Benutzers oder den Namen des Programms, das zuerst ausgef\(:uhrt werden soll\&. Das Programm
+\fBlogin\fR
+benutzt diese Information, um den Wert der Umgebungsvariable
+\fB$SHELL\fR
+zu setzen\&. Falls dieses Feld leer ist, wird ihm standardm\(:a\(ssig der Wert
+/bin/sh
+zugewiesen\&.
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+optionale Datei f\(:ur verschl\(:usseltes Passwort
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+Backup file for /etc/passwd\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "SIEHE AUCH"
+.PP
+
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/de/su.1 b/man/de/su.1
new file mode 100644 (file)
index 0000000..7f6442c
--- /dev/null
@@ -0,0 +1,400 @@
+'\" t
+.\"     Title: su
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24.07.2009
+.\"    Manual: Dienstprogramme f\(:ur Benutzer
+.\"    Source: Dienstprogramme f\(:ur Benutzer
+.\"  Language: German
+.\"
+.TH "SU" "1" "24.07.2009" "Dienstprogramme f\(:ur Benutzer" "Dienstprogramme f\(:ur Benutzer"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+su \- \(:andert die Benutzer\-ID oder wechselt zu Root
+.SH "SYNOPSIS"
+.HP \w'\fBsu\fR\ 'u
+\fBsu\fR [\fIOptionen\fR] [\fIBenutzername\fR]
+.SH "BESCHREIBUNG"
+.PP
+Der Befehl
+\fBsu\fR
+dient dazu, w\(:ahrend einer Sitzung ein anderer Benutzer zu werden\&. Wenn
+\fBsu\fR
+ohne
+\fBusername\fR
+aufgerufen wird, wechselt es standardm\(:a\(ssig zu Root\&. Zus\(:atzlich kann das Argument
+\fB\-\fR
+angegeben werden\&. Damit wird eine Umgebung zur Verf\(:ugung gestellt, die der entspricht, die der Benutzer nach einer direkten Anmeldung erwartet\&.
+.PP
+Zus\(:atzliche Argumente k\(:onnen nach dem Benutzername angegeben werden\&. In diesem Fall werden sie an die Login\-Shell des Benutzers weitergereicht\&. Insbesondere f\(:uhrt das Argument
+\fB\-c\fR
+dazu, dass das n\(:achste Argument von den meisten Interpretatoren als Befehl behandelt wird\&. Dieser Befehl wird von der Shell ausgef\(:uhrt, die in
+/etc/passwd
+f\(:ur den Zielbenutzer angegeben ist\&.
+.PP
+Sie k\(:onnen das Argument
+\fB\-\-\fR
+verwenden, um Optionen f\(:ur
+\fBsu\fR
+von Argumenten f\(:ur die Shell zu trennen\&.
+.PP
+Der Benutzer wird gegebenenfalls nach einem Passwort gefragt\&. Unrichtige Passworteingaben werden eine Fehlermeldung erzeugen\&. Sowohl erfolgreiche als auch misslungene Versuche werden protokolliert, um Missbrauch des Systems zu entdecken\&.
+.PP
+The current environment is passed to the new shell\&. The value of
+\fB$PATH\fR
+is reset to
+/bin:/usr/bin
+for normal users, or
+/sbin:/bin:/usr/sbin:/usr/bin
+for the superuser\&. This may be changed with the
+\fBENV_PATH\fR
+and
+\fBENV_SUPATH\fR
+definitions in
+/etc/login\&.defs\&.
+.PP
+Eine Subsystem\-Anmeldung wird durch einen "*" als erstes Zeichen der Login\-Shell gekennzeichnet\&. Das angegebene Home\-Verzeichnis wird als Wurzel f\(:ur das Dateisystem verwendet, auf welchem der Benutzer tats\(:achlich angemeldet ist\&.
+.SH "OPTIONEN"
+.PP
+Die Optionen, die vom Befehl
+\fBsu\fR
+unterst\(:utzt werden, sind:
+.PP
+\fB\-c\fR, \fB\-\-command\fR\fIBEFEHL\fR
+.RS 4
+Gibt einen Befehl an, der von der Shell mittels ihrer Option
+\fB\-c\fR
+ausgef\(:uhrt wird\&.
+.RE
+.PP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+.RS 4
+Eine Umgebung wird zur Verf\(:ugung gestellt, die der entspricht, die der Benutzer nach einer direkten Anmeldung erwartet\&.
+.sp
+Wenn
+\fB\-\fR
+verwendet wird, muss es als die letzte Option von
+\fBsu\fR
+angegeben werden\&. Die \(:ubrigen Formen ((\fB\-l\fR
+und
+\fB\-\-login\fR) unterliegen nicht dieser Beschr\(:ankung\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fISHELL\fR
+.RS 4
+Die Shell, die gestartet wird\&.
+.sp
+Die aufgerufene Shell wird bestimmt durch (h\(:ochste Priorit\(:at zuerst):
+.PP
+.RS 4
+Die Shell, die mit \-\-shell angegeben wurde\&.
+.RE
+.PP
+.RS 4
+Falls
+\fB\-\-preserve\-environment\fR
+verwendet wird, die Shell, die durch die Umgebungsvariable
+\fB$SHELL\fR
+festgelegt wird\&.
+.RE
+.PP
+.RS 4
+Die Shell, die in
+/etc/passwd
+f\(:ur den Zielbenutzer angegeben ist\&.
+.RE
+.PP
+.RS 4
+/bin/sh, falls durch die obigen Methoden keine Shell gefunden werden kann\&.
+.RE
+.sp
+Falls der Zielbenutzer eine beschr\(:ankte Shell hat (d\&.h\&. das Feld f\(:ur die Shell im Eintrag des Benutzers in
+/etc/passwd
+ist nicht in
+/etc/shell) aufgef\(:uhrt), wird die Option
+\fB\-\-shell\fR
+und die Umgebungsvariable
+\fB$SHELL\fR
+nicht beachtet, sofern
+\fBsu\fR
+nicht von Root aufgerufen wird\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+.RS 4
+Preserve the current environment, except for:
+.PP
+\fB$PATH\fR
+.RS 4
+reset according to the
+/etc/login\&.defs
+options
+\fBENV_PATH\fR
+or
+\fBENV_SUPATH\fR
+(see below);
+.RE
+.PP
+\fB$IFS\fR
+.RS 4
+reset to
+\(Bq<space><tab><newline>\(lq, if it was set\&.
+.RE
+.sp
+Falls der Zielbenutzer eine beschr\(:ankte Shell besitzt, hat diese Option keinen Effekt (sofern
+\fBsu\fR
+nicht von Root aufgerufen wird)\&.
+.sp
+Note that the default behavior for the environment is the following:
+.PP
+.RS 4
+The
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$USER\fR,
+\fB$LOGNAME\fR,
+\fB$PATH\fR, and
+\fB$IFS\fR
+environment variables are reset\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is not used, the environment is copied, except for the variables above\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TERM\fR,
+\fB$COLORTERM\fR,
+\fB$DISPLAY\fR, and
+\fB$XAUTHORITY\fR
+environment variables are copied if they were set\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TZ\fR,
+\fB$HZ\fR, and
+\fB$MAIL\fR
+environment variables are set according to the
+/etc/login\&.defs
+options
+\fBENV_TZ\fR,
+\fBENV_HZ\fR,
+\fBMAIL_DIR\fR, and
+\fBMAIL_FILE\fR
+(see below)\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, other environment variables might be set by the
+\fBENVIRON_FILE\fR
+file (see below)\&.
+.RE
+.sp
+.RE
+.SH "WARNUNGEN"
+.PP
+Diese Version von
+\fBsu\fR
+hat viele Kompilierungsoptionen\&. Deren N\(:utzlichkeit h\(:angt von den Anforderungen der jeweiligen Umgebung ab\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Das Verzeichnis des Mail\-Spools\&. Diese Angabe wird ben\(:otigt, um die Mailbox zu bearbeiten, nachdem das entsprechende Benutzerkonto ver\(:andert oder gel\(:oscht wurde\&. Falls nicht angegeben, wird ein Standard verwendet, der beim Kompilieren festgelegt wurde\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+If defined, all su activity is logged to this file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\'t exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Verschl\(:usselte Informationen zu den Benutzerkonten\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguration des Shadow\-Passwort\-Systems
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsg\fR(1),
+\fBsh\fR(1)\&.
diff --git a/man/de/vigr.8 b/man/de/vigr.8
new file mode 100644 (file)
index 0000000..ff72d7a
--- /dev/null
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/de/vipw.8 b/man/de/vipw.8
new file mode 100644 (file)
index 0000000..ae469f3
--- /dev/null
@@ -0,0 +1,106 @@
+'\" t
+.\"     Title: vipw
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24.07.2009
+.\"    Manual: Befehle zur Systemverwaltung
+.\"    Source: Befehle zur Systemverwaltung
+.\"  Language: German
+.\"
+.TH "VIPW" "8" "24.07.2009" "Befehle zur Systemverwaltung" "Befehle zur Systemverwaltung"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+vipw, vigr \- bearbeitet die Passwort\-, Gruppen\-, Shadow\-Passwort\- oder Shadow\-Gruppen\-Datei
+.SH "SYNOPSIS"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIOptionen\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIOptionen\fR]
+.SH "BESCHREIBUNG"
+.PP
+Die Befehle
+\fBvipw\fR
+und
+\fBvigr\fR
+bearbeiten die Dateien
+/etc/passwd
+beziehungsweise
+/etc/group\&. Mit der Option
+\fB\-s\fR
+bearbeiten sie die Shadow\-Versionen beider Dateien,
+/etc/shadow
+und
+/etc/gshadow\&. Die Programme werden die notwendige Sperre einrichten, um eine Besch\(:adigung der Dateien zu verhindern\&. Wenn ein Editor ben\(:otigt wird, werden zuerst die Umgebungsvariable
+\fB$VISUAL\fR
+ausgewertet, danach die Umgebungsvariable
+\fB$EDITOR\fR\&. Zuletzt wird der Standardeditor
+\fBvi\fR(1)
+verwendet\&.
+.SH "OPTIONEN"
+.PP
+Die Optionen, die von den Befehlen
+\fBvipw\fR
+und
+\fBvigr\fR
+unterst\(:utzt werden, sind:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+Bearbeitet die Gruppen\-Datenbank\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Zeigt die Hilfe an und beendet das Programm\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+Bearbeitet die Passwd\-Datenbank\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Stiller Modus\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+Bearbeitet die Shadow\- oder Gshadow\-Datenbank\&.
+.RE
+.SH "DATEIEN"
+.PP
+/etc/group
+.RS 4
+Informationen zu den Gruppenkonten\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Verschl\(:usselte Informationen zu den Gruppenkonten\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informationen zu den Benutzerkonten\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Verschl\(:usselte Informationen zu den Benutzerkonten\&.
+.RE
+.SH "SIEHE AUCH"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/es/Makefile.am b/man/es/Makefile.am
new file mode 100644 (file)
index 0000000..51cab43
--- /dev/null
@@ -0,0 +1,17 @@
+
+mandir = @mandir@/es
+
+man_MANS = 
+
+# These Spanish manpages are outdated.
+# Please contact pkg-shadow-devel@lists.alioth.debian.org if you wish to
+# provide updates.
+#      login.1 \
+#      newgrp.1 \
+#      passwd.1 \
+#      passwd.5 \
+#      su.1 \
+#      vigr.8 \
+#      vipw.8
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/es/Makefile.in b/man/es/Makefile.in
new file mode 100644 (file)
index 0000000..2e027dd
--- /dev/null
@@ -0,0 +1,370 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/es
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/es
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = 
+
+# These Spanish manpages are outdated.
+# Please contact pkg-shadow-devel@lists.alioth.debian.org if you wish to
+# provide updates.
+#      login.1 \
+#      newgrp.1 \
+#      passwd.1 \
+#      passwd.5 \
+#      su.1 \
+#      vigr.8 \
+#      vipw.8
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/es/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/es/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/expiry.1 b/man/expiry.1
new file mode 100644 (file)
index 0000000..3af13b3
--- /dev/null
@@ -0,0 +1,46 @@
+'\" t
+.\"     Title: expiry
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: English
+.\"
+.TH "EXPIRY" "1" "07/24/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+expiry \- check and enforce password expiration policy
+.SH "SYNOPSIS"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR [\-c] [\-f]
+.SH "DESCRIPTION"
+.PP
+The
+\fBexpiry\fR
+command checks (\fB\-c\fR) the current password expiration and forces (\fB\-f\fR) changes when required\&. It is callable as a normal user command\&.
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/expiry.1.xml b/man/expiry.1.xml
new file mode 100644 (file)
index 0000000..0d4bdc3
--- /dev/null
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1990 - 1994, Julianne Frances Haugh
+   Copyright (c) 1999       , Ben Collins
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!--ENTITY CONSOLE_GROUPS        SYSTEM "login.defs.d/CONSOLE_GROUPS.xml"-->
+<!-- A call to CONSOLE_GROUPS is linked, but not used -->
+]>
+
+<refentry id='expiry.1'>
+  <!-- $Id: expiry.1.xml 2435 2008-10-11 11:44:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>expiry</refentrytitle>
+    <manvolnum>1</manvolnum>
+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>expiry</refname>
+    <refpurpose>check and enforce password expiration policy</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>expiry</command>
+      <arg choice='opt'>-c </arg>
+      <arg choice='opt'>-f </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>expiry</command> command checks (<option>-c</option>)
+      the current password expiration and forces (<option>-f</option>)
+      changes when required. It is callable as a normal user command.
+    </para>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/faillog.5 b/man/faillog.5
new file mode 100644 (file)
index 0000000..6cfe437
--- /dev/null
@@ -0,0 +1,57 @@
+'\" t
+.\"     Title: faillog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual:  File Formats and Conversions
+.\"    Source:  File Formats and Conversions
+.\"  Language: English
+.\"
+.TH "FAILLOG" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+faillog \- login failure logging file
+.SH "DESCRIPTION"
+.PP
+
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+The file contains fixed length records, indexed by numerical UID\&. Each record contains the count of login failures since the last successful login; the maximum number of failures before the account is disabled; the line on whiche the last login failure occurred; the date of the last login failure; and the duration (in seconds) during which the account will be locked after a failure\&.
+.PP
+The structure of the file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+       short   fail_cnt;
+       short   fail_max;
+       char    fail_line[12];
+       time_t  fail_time;
+       long    fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FILES"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBfaillog\fR(8)
diff --git a/man/faillog.5.xml b/man/faillog.5.xml
new file mode 100644 (file)
index 0000000..289adde
--- /dev/null
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1989 - 1994, Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='faillog.5'>
+  <!-- $Id: faillog.5.xml 2967 2009-05-21 14:01:16Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>faillog</refentrytitle>
+    <manvolnum>5</manvolnum>
+    <refmiscinfo class="sectdesc"> File Formats and Conversions</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>faillog</refname>
+    <refpurpose>login failure logging file</refpurpose>
+  </refnamediv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      <filename>/var/log/faillog</filename> maintains a count of login
+      failures and the limits for each account.
+    </para>
+    <para>
+      The file contains fixed length
+      records, indexed by numerical UID. Each record contains the count of
+      login failures since the last successful login; the maximum number of
+      failures before the account is disabled; the line on whiche the last login
+      failure occurred; the date of the last login failure;
+      and the duration (in seconds) during which the account will be locked after
+      a failure.
+    </para>
+
+    <para>The structure of the file is:</para>
+      <programlisting>
+struct faillog {
+       short   fail_cnt;
+       short   fail_max;
+       char    fail_line[12];
+       time_t  fail_time;
+       long    fail_locktime;
+};</programlisting>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/var/log/faillog</filename></term>
+       <listitem>
+         <para>Failure logging file.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>faillog</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>
+    </para>
+  </refsect1>
+</refentry>
+
diff --git a/man/faillog.8 b/man/faillog.8
new file mode 100644 (file)
index 0000000..21575a2
--- /dev/null
@@ -0,0 +1,143 @@
+'\" t
+.\"     Title: faillog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "FAILLOG" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+faillog \- display faillog records or set login failure limits
+.SH "SYNOPSIS"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBfaillog\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-time\fR \fISEC\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR \fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+Reset the counters of login failures\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR \fIDAYS\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR \fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.PP
+NOTE: in display mode, only the records of users which currently exist in the system are displayed\&. In the other modes (when the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used), the records of the user, or the range of users, or all the users that may have an entry in the faillog database will be changed\&. This is useful to reset records of users that have been deleted or set a policy in advance for a range of users\&.
+.SH "CAVEATS"
+.PP
+
+\fBfaillog\fR
+only prints out users with no successful login since the last failure\&. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the
+\fB\-u\fR
+flag, or print out all users with the
+\fB\-a\fR
+flag\&.
+.SH "FILES"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/faillog.8.xml b/man/faillog.8.xml
new file mode 100644 (file)
index 0000000..3099979
--- /dev/null
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1989 - 1994, Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='faillog.8'>
+  <!--  $Id: faillog.8.xml 2968 2009-05-21 14:04:53Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>faillog</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>faillog</refname>
+    <refpurpose>display faillog records or set login failure limits</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>faillog</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      <command>faillog</command> displays the contents of the failure log
+      database (<filename>/var/log/faillog</filename>). It can also
+      set the failure counters and limits. When
+      <command>faillog</command> is run without arguments, it only displays the
+      faillog records of the users who had a login failure.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>faillog</command> command
+      are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term><option>-a</option>, <option>--all</option></term>
+       <listitem>
+         <para>
+           Display (or act on) faillog records for all users having an
+           entry in the <filename>faillog</filename> database.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-h</option>, <option>--help</option></term>
+       <listitem>
+         <para>Display help message and exit.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-l</option>, <option>--lock-time</option>
+         <replaceable>SEC</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Lock account for <replaceable>SEC</replaceable>
+           seconds after failed login.
+         </para>
+         <para>
+           Write access to <filename>/var/log/faillog</filename>
+           is required for this option.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-m</option>, <option>--maximum</option>
+         <replaceable>MAX</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Set the maximum number of login failures after the account is
+           disabled to <replaceable>MAX</replaceable>.
+         </para>
+         <para>
+           Selecting a
+           <replaceable>MAX</replaceable> value of 0 has the effect of not
+           placing a limit on the number of failed logins.
+         </para>
+         <para>
+           The maximum
+           failure count should always be 0 for <emphasis>root</emphasis>
+           to prevent a denial of services attack against the system.
+         </para>
+         <para>
+           Write access to <filename>/var/log/faillog</filename>
+           is required for this option.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-r</option>, <option>--reset</option></term>
+       <listitem>
+         <para>
+           Reset the counters of login failures.
+         </para>
+         <para>
+           Write access to <filename>/var/log/faillog</filename>
+           is required for this option.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-t</option>, <option>--time</option>
+       <replaceable>DAYS</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Display faillog records more recent than
+           <replaceable>DAYS</replaceable>.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-u</option>, <option>--user</option>
+         <replaceable>LOGIN</replaceable>|<replaceable>RANGE</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Display faillog record or maintains failure counters and limits
+           (if used with <option>-l</option>, <option>-m</option> or
+           <option>-r</option> options) only for the specified user(s).
+         </para>
+         <para>
+           The users can be specified by a login name, a numerical user
+           ID, or a <replaceable>RANGE</replaceable> of users.  This
+           <replaceable>RANGE</replaceable> of users can be specified
+           with a min and max values
+           (<replaceable>UID_MIN-UID_MAX</replaceable>), a max value
+           (<replaceable>-UID_MAX</replaceable>), or a min value
+           (<replaceable>UID_MIN-</replaceable>).
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>
+      When none of the <option>-l</option>, <option>-m</option>, or
+      <option>-r</option> options are used, <command>faillog</command>
+      displays the faillog record of the specified user(s).
+    </para>
+    <para>
+      NOTE: in display mode, only the records of users which currently
+      exist in the system are displayed.  In the other modes (when the
+      <option>-l</option>, <option>-m</option>, or <option>-r</option>
+      options are used), the records of the user, or the range of users,
+      or all the users that may have an entry in the faillog database will
+      be changed.  This is useful to reset records of users that have been
+      deleted or set a policy in advance for a range of users.
+    </para>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      <command>faillog</command> only prints out users with no successful
+      login since the last failure. To print out a user who has had a
+      successful login since their last failure, you must explicitly request
+      the user with the <option>-u</option> flag, or print out all users
+      with the <option>-a</option> flag.
+    </para>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/var/log/faillog</filename></term>
+       <listitem>
+         <para>Failure logging file.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>faillog</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/fi/Makefile.am b/man/fi/Makefile.am
new file mode 100644 (file)
index 0000000..ee18d4f
--- /dev/null
@@ -0,0 +1,12 @@
+
+mandir = @mandir@/fi
+
+man_MANS = \
+       chfn.1 \
+       chsh.1 \
+       su.1
+
+# Outdated manpages
+#      passwd.1 (https://bugs.launchpad.net/ubuntu/+bug/384024)
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/fi/Makefile.in b/man/fi/Makefile.in
new file mode 100644 (file)
index 0000000..b79fc81
--- /dev/null
@@ -0,0 +1,421 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/fi
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/fi
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+       chfn.1 \
+       chsh.1 \
+       su.1
+
+
+# Outdated manpages
+#      passwd.1 (https://bugs.launchpad.net/ubuntu/+bug/384024)
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/fi/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/fi/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       uninstall uninstall-am uninstall-man uninstall-man1
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/fi/chfn.1 b/man/fi/chfn.1
new file mode 100644 (file)
index 0000000..2a10395
--- /dev/null
@@ -0,0 +1,68 @@
+.\"
+.\"  chfn.1 -- change your finger information
+.\"  (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\"  this program is free software.  you can redistribute it and
+.\"  modify it under the terms of the gnu general public license.
+.\"  there is no warranty.
+.\"
+.\"  $Author: kloczek $
+.\"  $Revision: 1.2 $
+.\"  $Date: 2005/12/01 20:38:25 $
+.\" Proofread by Raimo Koski, Nov-Dec. 1999
+.\" Translated into Finnish by Lauri Nurmi (lanurmi@kauhajoki.fi)
+.\" Proofread by Juhana Siren (Juhana.Siren@oulu.fi)
+.\"
+.TH CHFN 1 "24. huhtikuuta 1998" "chfn" "Käyttäjän sovellusohjelmat"
+.SH NIMI
+chfn \- muuta finger-tietojasi
+.SH "YLEISKATSAUS"
+.B chfn
+[\ \-f\ koko nimi\ ] [\ \-o\ toimisto\ ] [\ \-p\ toimiston puhelin\ ]
+[\ \-h\ kotipuhelin\ ] [\ \-u\ ] [\ \-v\ ] [\ käyttäjänimi\ ]
+.SH KUVAUS
+.B chfn:ää
+käytetään finger-tietojen muuttamiseen. Nämä tiedot ovat
+.I /etc/passwd
+-tiedostossa, ja niitä voidaan katsoa
+.B finger\fR-ohjelmalla.
+Linuxin
+.B finger\fR-komento
+näyttää neljä tietoa, joita voidaan muuttaa
+.B chfn\fR:llä
+: todellinen nimesi, työhuoneesi ja puhelin, sekä kotipuhelimesi.
+.SS KOMENTORIVI
+Jokainen neljästä tiedosta voidaan määritellä komentorivillä. Jos
+komentorivillä ei anneta tietoja,
+.B chfn
+käynnistyy vuorovaikutteisessa tilassa.
+.SS VUOROVAIKUTTEINEN TILA
+Vuorovaikutteisessa tilassa
+.B chfn
+kysyy erikseen jokaista kenttää. Voit syöttää kenttään uuden tiedon, tai
+painaa Enteriä jättääksesi kentän ennalleen. Syötä sana "none" saadaksesi
+kentän tyhjäksi.
+.SH OPTIOT
+.TP
+.I "\-f, \-\-full-name"
+Määritä todellinen nimesi.
+.TP
+.I "\-o, \-\-office"
+Määritä toimistohuoneesi numero.
+.TP
+.I "\-p, \-\-office-phone"
+Määritä toimistohuoneesi puhelinnumero.
+.TP
+.I "\-h, \-\-home-phone"
+Määritä kotipuhelinnumerosi.
+.TP
+.I "\-u, \-\-help"
+Näytä lyhyt ohje komennoista.
+.TP
+.I "-v, \-\-version"
+Näytä versiotiedot.
+.SH TEKIJÄ
+Salvatore Valente <svalente@mit.edu>
+.SH "KATSO MYÖS"
+.BR finger (1),
+.BR passwd (5),
diff --git a/man/fi/chsh.1 b/man/fi/chsh.1
new file mode 100644 (file)
index 0000000..ed9cb95
--- /dev/null
@@ -0,0 +1,49 @@
+.\" ** You probably do not want to edit this file directly **
+.\" It was generated using the DocBook XSL Stylesheets (version 1.69.1).
+.\" Instead of manually editing it, you probably should edit the DocBook XML
+.\" source for it and then use the DocBook XSL Stylesheets to regenerate it.
+.TH "CHSH" "1" "03/07/2006" "Käyttäjän sovellukset" "Käyttäjän sovellukset"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+chsh \- vaihda sisäänkirjautumiskuorta
+.SH "SYNOPSIS"
+.HP 5
+\fBchsh\fR [\-s\ \fIsisäänkirjautumiskuori\fR] [\fIkäyttäjä\fR]
+.SH "KUVAUS"
+.PP
+\fBchsh\fR
+vaihtaa käyttäjän sisäänkirjautumiskuorta. Tämä määrittää käyttäjän ensimmäisen kirjautumiskomennon. Tavallinen käyttäjä voi vaihtaa ainoastaan oman tunnuksensa kirjautumiskuorta, mutta pääkäyttäjä voi vaihtaa kenen tahansa kirjautumiskuoren.
+.PP
+Ainoa rajoitus kirjautumiskuorelle on, että komennon nimen täytyy olla lueteltuna tiedostossa
+\fI/etc/shells\fR
+ellei komentoa käynnistänyt pääkäyttäjä, jolloin mikä tahansa arvo voidaan lisätä. Tunnus, jolla on rajoitettu kirjautumiskuori, ei voi vaihtaa omaa kirjautumiskuortaan. Tästä syystä komennon
+\fI/bin/rsh\fR
+lisääminen tiedostoon
+\fI/etc/shells\fR
+ei ole suositeltavaa, koska käyttäjän vahingossa vaihtaessa rajoitettuun kuoreen, ei hän voi koskaan vaihtaa kirjautumiskuortaan takaisin alkuperäiseen arvoon.
+.SH "VALITSIMET"
+.PP
+Mikäli valitsinta
+\fB\-s\fR
+ei ole annettu,
+\fBchsh\fR
+toimii interaktiivisesti kysyen käyttäjältä kirjautumiskuorta. Syöttämällä uuden arvon vaihdetaan kuorta, ja antamalla tyhjän syötteen, vanha kuori jää voimaan. Nykyinen kuori tulostetaan
+\fI[ ]\fR\-merkkiparin välissä.
+.SH "TIEDOSTOT"
+.TP
+\fI/etc/passwd\fR
+käyttäjätunnuksien tiedot
+.TP
+\fI/etc/shells\fR
+luettelo sallituista kirjautumiskuorista
+.TP
+\fI/etc/login.defs\fR
+varjosalasanakaluston asetukset
+.SH "KATSO MYÖS"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)
diff --git a/man/fi/su.1 b/man/fi/su.1
new file mode 100644 (file)
index 0000000..4c29823
--- /dev/null
@@ -0,0 +1,119 @@
+.\" ** You probably do not want to edit this file directly **
+.\" It was generated using the DocBook XSL Stylesheets (version 1.69.1).
+.\" Instead of manually editing it, you probably should edit the DocBook XML
+.\" source for it and then use the DocBook XSL Stylesheets to regenerate it.
+.TH "SU" "1" "03/07/2006" "Käyttäjän sovellukset" "Käyttäjän sovellukset"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+su \- vaihda käyttäjätunnusta tai tule pääkäyttäjäksi
+.SH "SYNOPSIS"
+.HP 3
+\fBsu\fR [\fIvalitsimet\fR] [\-] [\fIkäyttäjätunnus\fR\ [\ \fIparametrit\fR\ ]]
+.SH "KUVAUS"
+.PP
+\fBsu\fR\-komentoa käytetään vaihtamaan toiseksi käyttäjäksi kesken istunnon. Kun komento ajetaan ilman käyttäjänimeä,
+\fBsu\fR
+oletuksena vaihtaa pääkäyttäjäksi. Valinnainen parametri
+\fB\-\fR
+voidaan antaa kun halutaan samanlainen ympäristö kuin käyttäjä odottaa kirjautuessaan suoraan sisään.
+.PP
+Muita parametreja voidaan antaa käyttäjänimen jälkeen, jolloin ne välitetään käyttäjän sisäänkirjautumiskuorelle. Erityisesti parametri
+\fB\-c\fR
+tarkoittaa, että seuraava parametri on komento useimmissa komentotulkeissa. Komento suoritetaan kuorella, joka on määritetty
+\fI/etc/passwd\fR\-tiedostossa kohdekäyttäjälle.
+.PP
+Voit käyttää parametria
+\fB\-\-\fR
+erottamaan
+\fBsu\fR\-valitsimet kuorelle välitettävistä parametreista.
+.PP
+Käyttäjältä pyydetään salasanaa tarvittaessa. Väärä salasana tuottaa virheilmoituksen. Kaikki yritykset, niin kelvolliset kuin virheellisetkin, kirjataan lokiin järjestelmän väärinkäytösten tunnistamiseksi.
+.PP
+Nykyinen ympäristö välitetään kuorelle.
+\fB$PATH\fR\-muuttujan arvo tyhjätään arvoksi
+\fI/bin:/usr/bin\fR
+tavallisille käyttäjille taikka
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR
+pääkäyttäjälle. Tämän käyttäytymisen voi vaihtaa asetuksilla
+\fIENV_PATH\fR
+ja
+\fIENV_SUPATH\fR
+tiedostossa
+\fI/etc/login.defs\fR.
+.PP
+Sisäinen kirjautuminen ilmoitetaan lisäämällä "*" ensimmäiseksi merkiksi sisäänkirjautumiskuoreen. Annettua kotihakemistoa käytetään uuden tiedostojärjestelmän juurena, jonne käyttäjä tosiasiassa kirjautuu.
+.SH "VALITSIMET"
+.PP
+\fBsu\fR\-komennon valitsimet ovat:
+.TP
+\fB\-c\fR, \fB\-\-command\fR \fIKUORI\fR
+Määritä komento, jonka kuori käynnistää sen
+\fB\-c\fR\-valitsimella.
+.TP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+Tarjoa samankaltainen ympäristö kuin käyttäjä saisi kirjautuessaan suoraa sisään.
+.sp
+Kun
+\fB\-\fR
+on käytössä, se täytyy antaa viimeisenä valitsimena
+\fBsu\fR\-komennolle. Muilla valitsimilla (\fB\-l\fR
+sekä
+\fB\-\-login\fR) ei ole tätä rajoitusta.
+.TP
+\fB\-s\fR, \fB\-\-shell\fR \fIKUORI\fR
+Käynnistettävä kuori
+.sp
+Käynnistettävä kuori valitaan seuraavasti (tärkeimmästä alkaen):
+.RS
+.TP 3
+\(bu
+Kuori, joka määritetään valitsimella \-\-shell
+.TP
+\(bu
+Mikäli valitsinta
+\fB\-\-preserve\-environment\fR
+on käytetty, kuori onka määrittää ympäristömuuttuja
+\fB$SHELL\fR.
+.TP
+\(bu
+Kuori, joka on asetettu /etc/passwd\-tietueessa kohdekäyttäjälle.
+.TP
+\(bu
+/bin/sh mikäli kuorta ei löytynyt millään edellisistä tavoista.
+.RE
+.IP
+.sp
+Mikäli kohdekäyttäjällä on rajoitettu kuori (esim. kuorikenttä käyttäjän tietueessa
+\fI/etc/passwd\fR\-tiedostossa ei löydy tiedostosta
+\fI/etc/shell\fR), niin valitsin
+\fB\-\-shell\fR
+ja ympäristömuuttuja
+\fB$SHELL\fR
+jätetään huomiotta paitsi kun komennon
+\fBsu\fR
+käynnistää pääkäyttäjä.
+.TP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+Säilytä nykyinen ympäristö.
+.sp
+Mikäli kohdekäyttäjällä on rajoitettu ympäristö, tällä valitsimella ei ole vaikutusta (ellei
+\fBsu\fR\-komentoa käynnistänyt pääkäyttäjä).
+.SH "VAROITUKSET"
+.PP
+Tällä versiolla
+\fBsu\fR\-sovelluksesta on useita käännösaikaisia valitsimia, ja niistä vain osa saattaa olla käytössä tietyissä paikoissa.
+.SH "TIEDOSTOT"
+.TP
+\fI/etc/passwd\fR
+käyttäjätunnuksien tiedot
+.TP
+\fI/etc/shadow\fR
+turvalliset käyttäjätunnuksien tiedot
+.SH "KATSO MYÖS"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsh\fR(1)
diff --git a/man/fr/Makefile.am b/man/fr/Makefile.am
new file mode 100644 (file)
index 0000000..2907e7d
--- /dev/null
@@ -0,0 +1,59 @@
+
+mandir = @mandir@/fr
+
+man_MANS = \
+       chage.1 \
+       chfn.1 \
+       chpasswd.8 \
+       chsh.1 \
+       expiry.1 \
+       faillog.5 \
+       faillog.8 \
+       getspnam.3 \
+       gpasswd.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       groups.1 \
+       grpck.8 \
+       grpconv.8 \
+       grpunconv.8 \
+       gshadow.5 \
+       lastlog.8 \
+       login.1 \
+       login.defs.5 \
+       logoutd.8 \
+       newgrp.1 \
+       newusers.8 \
+       passwd.1 \
+       passwd.5 \
+       pwck.8 \
+       pwconv.8 \
+       pwunconv.8 \
+       sg.1 \
+       shadow.3 \
+       shadow.5 \
+       su.1 \
+       suauth.5 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8 \
+       vigr.8 \
+       vipw.8
+
+man_nopam = \
+       limits.5 \
+       login.access.5 \
+       porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_nopam) \
+       id.1
+
+include ../generate_translations.mak
+
diff --git a/man/fr/Makefile.in b/man/fr/Makefile.in
new file mode 100644 (file)
index 0000000..3fe45cb
--- /dev/null
@@ -0,0 +1,604 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+DIST_COMMON = $(srcdir)/../generate_mans.mak \
+       $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+subdir = man/fr
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+       "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/fr
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = chage.1 chfn.1 chpasswd.8 chsh.1 expiry.1 faillog.5 \
+       faillog.8 getspnam.3 gpasswd.1 groupadd.8 groupdel.8 \
+       groupmod.8 groups.1 grpck.8 grpconv.8 grpunconv.8 gshadow.5 \
+       lastlog.8 login.1 login.defs.5 logoutd.8 newgrp.1 newusers.8 \
+       passwd.1 passwd.5 pwck.8 pwconv.8 pwunconv.8 sg.1 shadow.3 \
+       shadow.5 su.1 suauth.5 useradd.8 userdel.8 usermod.8 vigr.8 \
+       vipw.8 $(am__append_1)
+man_nopam = \
+       limits.5 \
+       login.access.5 \
+       porttime.5
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_nopam) \
+       id.1
+
+@ENABLE_REGENERATE_MAN_TRUE@LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@CLEANFILES = .xml2po.mo $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST))
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/fr/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/fr/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man3: $(man3_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)"
+       @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.3*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           3*) ;; \
+           *) ext='3' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst"; \
+       done
+uninstall-man3:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.3*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           3*) ;; \
+           *) ext='3' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man3dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+       uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man3 install-man5 install-man8 install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man3 uninstall-man5 \
+       uninstall-man8
+
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@   [ ! -f ../config.xml ] || mv ../config.xml ../config.xml.bak
+@ENABLE_REGENERATE_MAN_TRUE@   xml2po --expand-all-entities -l $(LANG) -p ../po/$(LANG).po -o $@ ../$@
+@ENABLE_REGENERATE_MAN_TRUE@   sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+@ENABLE_REGENERATE_MAN_TRUE@   [ ! -f ../config.xml.bak ] || mv ../config.xml.bak ../config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   sed -i 's/config SYSTEM "config.xml">/config SYSTEM "config.xml">\%config;/' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@   make -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%: %.xml Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(SHA_CRYPT_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@               -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@grpconv.8 grpunconv.8 pwunconv.8: pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@getspnam.3: shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@vigr.8: vipw.8
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/fr/chage.1 b/man/fr/chage.1
new file mode 100644 (file)
index 0000000..7fdd854
--- /dev/null
@@ -0,0 +1,158 @@
+'\" t
+.\"     Title: chage
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes utilisateur
+.\"    Source: Commandes utilisateur
+.\"  Language: French
+.\"
+.TH "CHAGE" "1" "24/07/2009" "Commandes utilisateur" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+chage \- Modifier les informations de validit\('e d\'un mot de passe
+.SH "SYNOPSIS"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIoptions\fR] [\fILOGIN\fR]
+.SH "DESCRIPTION"
+.PP
+La commande
+\fBchage\fR
+modifie le nombre de jours entre les changements de mot de passe et la date du dernier changement\&. Ces informations sont utilis\('ees par le syst\(`eme pour d\('eterminer si un utilisateur doit changer son mot de passe\&.
+.SH "OPTIONS"
+.PP
+Les options disponibles pour la commande
+\fBchage\fR
+sont\ \&:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR \fIDERNIER_JOUR\fR
+.RS 4
+Fixer le nombre du jour, \(`a compter du 1er janvier 1970, o\(`u le mot de passe a \('et\('e chang\('e la derni\(`ere fois\&. La date peut aussi \(^etre exprim\('ee dans le format AAAA\-MM\-JJ (ou le format utilis\('e plus commun\('ement dans votre r\('egion)\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR \fIDATE_FIN_VALIDIT\('E\fR
+.RS 4
+Fixer la date, ou le nombre de jours \(`a compter du 1er janvier 1970, \(`a partir de laquelle le compte de l\'utilisateur ne sera plus accessible\&. La date peut aussi \(^etre exprim\('ee dans le format AAAA\-MM\-JJ (ou le format plus commun\('ement utilis\('e dans votre r\('egion)\&. Un utilisateur dont le compte est bloqu\('e doit contacter l\'administrateur syst\(`eme pour pouvoir utiliser \(`a nouveau le syst\(`eme\&.
+.sp
+Une valeur de
+\fI\-1\fR
+pour
+\fIDATE_FIN_VALIDIT\('E\fR
+aura pour effet de supprimer la date de fin de validit\('e\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\'aide et quitter\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR \fIDUR\('EE_INACTIVIT\('E\fR
+.RS 4
+Fixer le nombre de jours d\'inactivit\('e, apr\(`es qu\'un mot de passe ait d\('epass\('e la date de fin de validit\('e, avant que le compte ne soit bloqu\('e\&. La valeur
+\fIDUR\('EE_INACTIVIT\('E\fR
+est le nombre de jours d\'inactivit\('e\&. Un utilisateur dont le compte est bloqu\('e doit contacter l\'administrateur syst\(`eme avant de pouvoir utiliser de nouveau le syst\(`eme\&.
+.sp
+Une valeur de
+\fI\-1\fR
+pour
+\fIDUR\('EE_INACTIVIT\('E\fR
+supprime la dur\('ee d\'inactivit\('e pour un compte\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Afficher les informations sur l\'\(^age des comptes\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR \fIJOURS_MIN\fR
+.RS 4
+D\('efinit le nombre minimum de jours entre chaque changement de mot de passe \(`a
+\fIMIN_DAYS\fR\&. Une valeur de z\('ero pour ce champ indique que l\'utilisateur peut changer son mot de passe quand il le souhaite\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR \fIJOURS_MAX\fR
+.RS 4
+Fixer le nombre maximum de jours pendant lesquels un mot de passe est valable\&. Quand
+\fIJOURS_MAX\fR
+plus
+\fIDERNIER_JOUR\fR
+est inf\('erieur \(`a la date actuelle, l\'utilisateur est oblig\('e de changer son mot de passe avant de pouvoir utiliser son compte\&. Cet \('ev\('enement peut \(^etre d\('eclench\('e plus t\(^ot gr\(^ace \(`a l\'option
+\fB\-W\fR
+qui pr\('evient l\'utilisateur \(`a l\'avance par un message d\'alerte\&.
+.sp
+Une valeur de
+\fI\-1\fR
+pour
+\fIJOURS_MAX\fR
+supprime la v\('erification de validit\('e\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR \fIDUR\('EE_AVERTISSEMENT\fR
+.RS 4
+Fixer le nombre de jours d\'avertissement avant que le changement de mot de passe ne soit obligatoire\&. La valeur
+\fIDUR\('EE_AVERTISSEMENT\fR
+est le nombre de jours pr\('ec\('edant la fin de validit\('e pendant lesquels un utilisateur sera pr\('evenu que son mot de passe est sur le point d\'arriver en fin de validit\('e\&.
+.RE
+.PP
+Si aucune de ces options n\'est donn\('ee,
+\fBchage\fR
+utilise un mode interactif, demandant confirmation \(`a l\'utilisateur pour les valeurs de tous les champs\&. Entrez la nouvelle valeur pour modifier la valeur du champ, ou laissez la ligne vide pour conserver la valeur actuelle\&. La valeur actuelle est affich\('ee entre crochets\&.
+.SH "NOTE"
+.PP
+Le programme
+\fBchage\fR
+n\('ecessite l\'utilisation d\'un fichier de mots de passe cach\('es (\(Fo\ \&shadow password file\ \&\(Fc)\&.
+.PP
+La commande
+\fBchage\fR
+est r\('eserv\('ee \(`a l\'utilisateur root, sauf pour l\'option
+\fB\-l\fR, qui peut \(^etre utilis\('ee par un utilisateur non privil\('egi\('e pour lui permettre de savoir quand son mot de passe ou son compte arrivera en fin de validit\('e\&.
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+La commande
+\fBchage\fR
+retourne les valeurs suivantes en quittant\ \&:
+.PP
+\fI0\fR
+.RS 4
+succ\(`es
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission refus\('ee
+.RE
+.PP
+\fI2\fR
+.RS 4
+erreur de syntaxe
+.RE
+.PP
+\fI15\fR
+.RS 4
+impossible de trouver le fichier des mots de passe cach\('es
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/fr/chfn.1 b/man/fr/chfn.1
new file mode 100644 (file)
index 0000000..5272991
--- /dev/null
@@ -0,0 +1,108 @@
+'\" t
+.\"     Title: chfn
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes utilisateur
+.\"    Source: Commandes utilisateur
+.\"  Language: French
+.\"
+.TH "CHFN" "1" "24/07/2009" "Commandes utilisateur" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+chfn \- Modifier le nom complet et les informations associ\('ees \(`a un utilisateur
+.SH "SYNOPSIS"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\-f\ \fInom_complet\fR] [\-r\ \fIno_bureau\fR] [\-w\ \fItel_bureau\fR] [\-h\ \fItel_perso\fR] [\-o\ \fIautre\fR] [\fIutilisateur\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchfn\fR
+command changes user fullname, office number, office extension, and home phone number information for a user\'s account\&. This information is typically printed by
+\fBfinger\fR(1)
+and similar programs\&. A normal user may only change the fields for her own account, subject to the restrictions in
+/etc/login\&.defs\&. (The default configuration is to prevent users from changing their fullname\&.) The superuser may change any field for any account\&. Additionally, only the superuser may use the
+\fB\-o\fR
+option to change the undefined portions of the GECOS field\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.PP
+Si aucune option n\'est s\('electionn\('ee,
+\fBchfn\fR
+op\(`ere de mani\(`ere interactive, demandant \(`a l\'utilisateur d\'entrer les valeurs actuelles de chacun des champs\&. Entrer une nouvelle valeur pour la modifier, ou de laisser une ligne blanche pour conserver la valeur actuelle\&. La valeur actuelle est indiqu\('ee entre crochets (\fB[ ]\fR)\&. En l\'absence d\'option,
+\fBchfn\fR
+op\(`ere sur l\'utilisateur actuel\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBCHFN_AUTH\fR (bool\('een)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+La cha\(^ine de caract\(`eres utilis\('ee pour l\'invite de mot de passe\&. La valeur par d\('efaut est d\'utiliser "Password: " (\(Fo\ \&mot de passe\ \&:\ \&\(Fc), ou une traduction de cette cha\(^ine\&. Si vous d\('efinissez cette variable, l\'invite ne sera pas traduite\&.
+.sp
+Si la cha\(^ine contient
+\fI%s\fR, ces caract\(`eres seront remplac\('es par le nom de l\'utilisateur\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/fr/chpasswd.8 b/man/fr/chpasswd.8
new file mode 100644 (file)
index 0000000..0f824c6
--- /dev/null
@@ -0,0 +1,222 @@
+'\" t
+.\"     Title: chpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "CHPASSWD" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+chpasswd \- Mettre \(`a jour des mots de passe par lot
+.SH "SYNOPSIS"
+.HP \w'\fBchpasswd\fR\ 'u
+\fBchpasswd\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchpasswd\fR
+command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users\&. Each line is of the format:
+.PP
+\fInom_utilisateur\fR:\fImot_de_passe\fR
+.SS ""
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchpasswd\fR\&. Also the password age will be updated, if present\&.
+.PP
+The default encryption algorithm can be defined for the system with the ENCRYPT_METHOD variable of
+/etc/login\&.defs, and can be overwiten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+
+\fBchpasswd\fR
+first update the password in memory, and then commit all the changes to disk if no errors occured for any users\&.
+.PP
+Cette commande est destin\('ee aux gros syst\(`emes pour lesquels un nombre importants de comptes sont cr\('e\('es en une seule fois\&.
+.SH "OPTIONS"
+.PP
+Les options disponibles pour la commande
+\fBchpasswd\fR
+sont\ \&:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Indique que les mots de passe fournis sont chiffr\('es\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\'aide et quitter\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Permettre d\'utiliser le chiffrement MD5, plut\(^ot que DES, lorsque les mots de passe fournis ne sont pas chiffr\('es\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+Pensez \(`a fixer les permissions ou umask afin d\'emp\(^echer la lecture par les autres utilisateurs des fichiers non chiffr\('es\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBENCRYPT_METHOD\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+D\('efinit les algorithmes de chiffrement par d\('efaut du syst\(`eme pour coder les mots de passes (si aucun algorithme n\'a \('et\('e indiqu\('e sur la ligne de commandes)\&.
+.sp
+Il peut prendre une de ces valeurs\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(par d\('efaut)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Remarque\ \&: ce param\(`etre remplace la variable
+\fBMD5_CRYPT_ENAB\fR\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (bool\('een)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (nombre), \fBSHA_CRYPT_MAX_ROUNDS\fR (nombre)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+
+\fBpasswd\fR(1),
+\fBnewusers\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/fr/chsh.1 b/man/fr/chsh.1
new file mode 100644 (file)
index 0000000..8a56d93
--- /dev/null
@@ -0,0 +1,101 @@
+'\" t
+.\"     Title: chsh
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes utilisateur
+.\"    Source: Commandes utilisateur
+.\"  Language: French
+.\"
+.TH "CHSH" "1" "24/07/2009" "Commandes utilisateur" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+chsh \- Changer l\'interpr\('eteur de commandes initial
+.SH "SYNOPSIS"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIoptions\fR] [\fILOGIN\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBchsh\fR
+command changes the user login shell\&. This determines the name of the user\'s initial login command\&. A normal user may only change the login shell for her own account, the superuser may change the login shell for any account\&.
+.SH "OPTIONS"
+.PP
+Les options applicables \(`a la commande
+\fBchsh\fR
+sont\ \&:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\'aide et quitter\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fIINTERPR\('ETEUR\fR
+.RS 4
+Nom du nouvel interpr\('eteur de commandes initial (\(Fo\ \&login shell\ \&\(Fc) de l\'utilisateur\&. Si ce champ est vide, le syst\(`eme s\('electionnera l\'interpr\('eteur de commandes initial par d\('efaut\&.
+.RE
+.PP
+Quand l\'option
+\fB\-s\fR
+n\'est pas s\('electionn\('ee,
+\fBchsh\fR
+op\(`ere de fa\(,con interactive, demandant \(`a l\'utilisateur quel doit \(^etre le nouvel interpr\('eteur de commandes initial (\(Fo\ \&login shell\ \&\(Fc)\&. L\'utilisateur pourra entrer une nouvelle valeur pour modifier l\'interpr\('eteur, ou laisser la ligne blanche pour conserver l\'interpr\('eteur actuel\&. L\'interpr\('eteur actuel est indiqu\('e entre crochets (\fI[\ \&]\fR)\&.
+.SH "NOTE"
+.PP
+The only restriction placed on the login shell is that the command name must be listed in
+/etc/shells, unless the invoker is the superuser, and then any value may be added\&. An account with a restricted login shell may not change her login shell\&. For this reason, placing
+/bin/rsh
+in
+/etc/shells
+is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBCHSH_AUTH\fR (bool\('een)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+La cha\(^ine de caract\(`eres utilis\('ee pour l\'invite de mot de passe\&. La valeur par d\('efaut est d\'utiliser "Password: " (\(Fo\ \&mot de passe\ \&:\ \&\(Fc), ou une traduction de cette cha\(^ine\&. Si vous d\('efinissez cette variable, l\'invite ne sera pas traduite\&.
+.sp
+Si la cha\(^ine contient
+\fI%s\fR, ces caract\(`eres seront remplac\('es par le nom de l\'utilisateur\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shells
+.RS 4
+Liste des interpr\('eteurs de commandes initiaux valables\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/fr/expiry.1 b/man/fr/expiry.1
new file mode 100644 (file)
index 0000000..0658de8
--- /dev/null
@@ -0,0 +1,45 @@
+'\" t
+.\"     Title: expiry
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes utilisateur
+.\"    Source: Commandes utilisateur
+.\"  Language: French
+.\"
+.TH "EXPIRY" "1" "24/07/2009" "Commandes utilisateur" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+expiry \- V\('erifier et s\('ecuriser la dur\('ee de validit\('e des mots de passe
+.SH "SYNOPSIS"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR [\-c] [\-f]
+.SH "DESCRIPTION"
+.PP
+The
+\fBexpiry\fR
+command checks (\fB\-c\fR) the current password expiration and forces (\fB\-f\fR) changes when required\&. It is callable as a normal user command\&.
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/fr/faillog.5 b/man/fr/faillog.5
new file mode 100644 (file)
index 0000000..41a99c3
--- /dev/null
@@ -0,0 +1,56 @@
+'\" t
+.\"     Title: faillog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Formats et conversions de fichiers
+.\"    Source: Formats et conversions de fichiers
+.\"  Language: French
+.\"
+.TH "FAILLOG" "5" "24/07/2009" "Formats et conversions de fich" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+faillog \- journal des \('echecs de connexion
+.SH "DESCRIPTION"
+.PP
+
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+The file contains fixed length records, indexed by numerical UID\&. Each record contains the count of login failures since the last successful login; the maximum number of failures before the account is disabled; the line on whiche the last login failure occurred; the date of the last login failure; and the duration (in seconds) during which the account will be locked after a failure\&.
+.PP
+La structure du fichier est la suivante\ \&:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+       short   fail_cnt;      /* compteur des \('echecs */
+       short   fail_max;      /* nb max avant d\('esactivation */
+       char    fail_line[12]; /* ligne du dernier \('echec */
+       time_t  fail_time;     /* date du dernier \('echec */
+       long    fail_locktime;};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FICHIERS"
+.PP
+/var/log/faillog
+.RS 4
+Journal des \('echecs de connexion\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+
+\fBfaillog\fR(8)
diff --git a/man/fr/faillog.8 b/man/fr/faillog.8
new file mode 100644 (file)
index 0000000..59601f8
--- /dev/null
@@ -0,0 +1,139 @@
+'\" t
+.\"     Title: faillog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "FAILLOG" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+faillog \- Examiner le fichier faillog, et fixer les limites d\'\('echecs de connexion
+.SH "SYNOPSIS"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "OPTIONS"
+.PP
+Les options disponibles pour la commande
+\fBfaillog\fR
+sont\ \&:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\'aide et quitter\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-time\fR \fISEC\fR
+.RS 4
+Verrouiller le compte pendant
+\fISEC\fR
+secondes apr\(`es un \('echec de connexion\&.
+.sp
+L\'acc\(`es en \('ecriture sur
+/var/log/faillog
+est n\('ecessaire pour cette option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR \fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+L\'acc\(`es en \('ecriture sur
+/var/log/faillog
+est n\('ecessaire pour cette option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+Reset the counters of login failures\&.
+.sp
+L\'acc\(`es en \('ecriture sur
+/var/log/faillog
+est n\('ecessaire pour cette option\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR \fIJOURS\fR
+.RS 4
+Afficher les entr\('ees de faillog plus r\('ecentes que
+\fIJOURS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\fILOGIN\fR|\fIINTERVALLE\fR
+.RS 4
+Afficher l\'entr\('ee de faillog ou maintient le d\('ecompte et les limitations (suivant que l\'option
+\fB\-l\fR,
+\fB\-m\fR
+ou
+\fB\-r\fR
+est utilis\('ee) seulement pour les utilisateurs indiqu\('es\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.PP
+NOTE: in display mode, only the records of users which currently exist in the system are displayed\&. In the other modes (when the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used), the records of the user, or the range of users, or all the users that may have an entry in the faillog database will be changed\&. This is useful to reset records of users that have been deleted or set a policy in advance for a range of users\&.
+.SH "AVERTISSEMENTS"
+.PP
+\fBFaillog\fR
+n\'affiche que les utilisateurs n\'ayant pas eu de connexion r\('eussie depuis leur dernier \('echec\&. Pour afficher un utilisateur ayant eu une connexion r\('eussie depuis son dernier \('echec, vous devez explicitement demander cet utilisateur avec l\'option
+\fB\-u\fR, ou demander l\'affichage de tous les utilisateurs avec l\'option
+\fB\-a\fR\&.
+.SH "FICHIERS"
+.PP
+/var/log/faillog
+.RS 4
+Journal des \('echecs de connexion\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/fr/getspnam.3 b/man/fr/getspnam.3
new file mode 100644 (file)
index 0000000..cd473da
--- /dev/null
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/fr/gpasswd.1 b/man/fr/gpasswd.1
new file mode 100644 (file)
index 0000000..6a6e9b7
--- /dev/null
@@ -0,0 +1,252 @@
+'\" t
+.\"     Title: gpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes utilisateur
+.\"    Source: Commandes utilisateur
+.\"  Language: French
+.\"
+.TH "GPASSWD" "1" "24/07/2009" "Commandes utilisateur" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+gpasswd \- administer /etc/group and /etc/gshadow
+.SH "SYNOPSIS"
+.HP \w'\fBgpasswd\fR\ 'u
+\fBgpasswd\fR [\fIoption\fR] \fIgroupe\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgpasswd\fR
+command is used to administer
+/etc/group, and /etc/gshadow\&. Every group can have
+administrators,
+members and a password\&.
+.PP
+System administrators can use the
+\fB\-A\fR
+option to define group administrator(s) and the
+\fB\-M\fR
+option to define members\&. They have all rights of group administrators and members\&.
+.PP
+
+\fBgpasswd\fR
+called by
+a group administrator
+with a group name only prompts for the new password of the
+\fIgroup\fR\&.
+.PP
+If a password is set the members can still use
+\fBnewgrp\fR(1)
+without a password, and non\-members must supply the password\&.
+.SS "Notes sur les mots de passe de groupe"
+.PP
+Les mots de passe de groupe repr\('esentent naturellement un risque en mati\(`ere de s\('ecurit\('e, puisque plusieurs personnes ont connaissance du mot de passe\&. Cependant, les groupes sont utiles pour permettre la coop\('eration entre diff\('erents utilisateurs\&.
+.SH "OPTIONS"
+.PP
+Except for the
+\fB\-A\fR
+and
+\fB\-M\fR
+options, the options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR\fIutilisateur\fR
+.RS 4
+Add the
+\fIuser\fR
+to the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR\fIutilisateur\fR
+.RS 4
+Remove the
+\fIuser\fR
+from the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\-password\fR
+.RS 4
+Remove the password from the named
+\fIgroup\fR\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-restrict\fR
+.RS 4
+Restrict the access to the named
+\fIgroup\fR\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-A\fR, \fB\-\-administrators\fR\fIutilisateur\fR,\&.\&.\&.
+.RS 4
+Set the list of administrative users\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-members\fR\fIutilisateur\fR,\&.\&.\&.
+.RS 4
+Set the list of group members\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+This tool only operates on the
+/etc/group
+and /etc/gshadow files\&.
+Thus you cannot change any NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBENCRYPT_METHOD\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+D\('efinit les algorithmes de chiffrement par d\('efaut du syst\(`eme pour coder les mots de passes (si aucun algorithme n\'a \('et\('e indiqu\('e sur la ligne de commandes)\&.
+.sp
+Il peut prendre une de ces valeurs\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(par d\('efaut)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Remarque\ \&: ce param\(`etre remplace la variable
+\fBMD5_CRYPT_ENAB\fR\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (nombre)
+.RS 4
+Nombre maximum de membres par entr\('ee de groupe\&. Lorsque le maximum est atteint, une nouvelle entr\('ee de groupe (ligne) est d\('emarr\('ee dans
+/etc/group
+(avec le m\(^eme nom, m\(^eme mot de passe, et m\(^eme GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\'il n\'y a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\'assurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de fixer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\'outils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (bool\('een)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (nombre), \fBSHA_CRYPT_MAX_ROUNDS\fR (nombre)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBnewgrp\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/fr/groupadd.8 b/man/fr/groupadd.8
new file mode 100644 (file)
index 0000000..e3b168c
--- /dev/null
@@ -0,0 +1,219 @@
+'\" t
+.\"     Title: groupadd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "GROUPADD" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+groupadd \- Cr\('eer un nouveau groupe
+.SH "SYNOPSIS"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIoptions\fR] \fIgroupe\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "OPTIONS"
+.PP
+Les options disponibles pour la commande
+\fBgroupadd\fR
+sont\ \&:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGID\fR
+.RS 4
+La valeur num\('erique de l\'identifiant du groupe (\(Fo\ \&group ID\ \&\(Fc ou GID)\&. Cette valeur doit \(^etre unique, \(`a moins que l\'option
+\fB\-o\fR
+ne soit utilis\('ee\&. La valeur ne doit pas \(^etre n\('egative\&. Par d\('efaut le plus petit identifiant plus grand que 999 et que les identifiants des groupes existants est utilis\('e\&. Les valeurs comprises entre 0 et 999 sont g\('en\('eralement r\('eserv\('ees aux comptes syst\(`eme\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\'aide et quitter\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR \fICL\('E\fR=\fIVALEUR\fR
+.RS 4
+Surcharger les valeurs par d\('efaut du fichier
+/etc/login\&.defs
+(GID_MIN, GID_MAX et autres)\&. L\'option
+\fB\-K\fR
+peut \(^etre indiqu\('ee plusieurs fois\&.
+.sp
+Exemple\ \&:
+\fB\-K\fR
+\fIGID_MIN\fR=\fI10\fR
+\fB\-K\fR
+\fIGID_MAX\fR=\fI499\fR
+.sp
+Note\ \&:
+\fB\-K\fR
+\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+ne fonctionne pas pour l\'instant\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+This option permits to add a group with a non\-unique GID\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR \fIMOT_DE_PASSE\fR
+.RS 4
+Le mot de passe chiffr\('e, comme renvoy\('e par
+\fBcrypt\fR(3)\&. Le comportement par d\('efaut est de d\('esactiver le mot de passe\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Cr\('eer un groupe syst\(`eme\&.
+.sp
+The numeric identifiers of new system groups are choosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBGID_MAX\fR (nombre), \fBGID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques de groupes que les commandes
+\fBuseradd\fR,
+\fBgroupadd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation des groupes normaux\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (nombre)
+.RS 4
+Nombre maximum de membres par entr\('ee de groupe\&. Lorsque le maximum est atteint, une nouvelle entr\('ee de groupe (ligne) est d\('emarr\('ee dans
+/etc/group
+(avec le m\(^eme nom, m\(^eme mot de passe, et m\(^eme GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\'il n\'y a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\'assurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de fixer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\'outils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (nombre), \fBSYS_GID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques de groupes que les commandes
+\fBuseradd\fR,
+\fBgroupadd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation de groupes syst\(`eme\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+Les noms de groupe doivent commencer par une lettre minuscule ou un tiret bas (\(Fo\ \&underscore\ \&\(Fc), et seuls des lettres minuscules, des chiffres, des \(Fo\ \&underscore\ \&\(Fc, ou des tirets peuvent suivre\&. Ils peuvent se terminer par un signe dollar\&. Soit, sous la forme d\'une expression rationnelle\ \&: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Les noms de groupe sont limit\('es \(`a 16 caract\(`eres\&.
+.PP
+You may not add a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "VALEURS DE RETOUR"
+.PP
+La commande
+\fBgroupadd\fR
+retourne les valeurs suivantes en quittant\ \&:
+.PP
+\fI0\fR
+.RS 4
+succ\(`es
+.RE
+.PP
+\fI2\fR
+.RS 4
+erreur de syntaxe
+.RE
+.PP
+\fI3\fR
+.RS 4
+param\(`etre non valable pour l\'option
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID d\('ej\(`a utilis\('e (et
+\fB\-o\fR
+n\'est pas utilis\('e)
+.RE
+.PP
+\fI9\fR
+.RS 4
+nom de groupe d\('ej\(`a utilis\('e
+.RE
+.PP
+\fI10\fR
+.RS 4
+impossible de mettre \(`a jour le fichier des groupes
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/groupdel.8 b/man/fr/groupdel.8
new file mode 100644 (file)
index 0000000..f64aba7
--- /dev/null
@@ -0,0 +1,108 @@
+'\" t
+.\"     Title: groupdel
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "GROUPDEL" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+groupdel \- Supprimer un groupe
+.SH "SYNOPSIS"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR \fIgroupe\fR
+.SH "DESCRIPTION"
+.PP
+La commande
+\fBgroupdel\fR
+modifie les fichiers d\'administration des comptes du syst\(`eme, en supprimant les entr\('ees qui se r\('ef\(`erent \(`a
+\fIgroupe\fR\&. Le groupe indiqu\('e doit exister\&.
+.SH "AVERTISSEMENTS"
+.PP
+Vous ne pouvez pas supprimer le groupe primaire d\'un utilisateur existant\&. Vous devez supprimer l\'utilisateur auparavant\&.
+.PP
+Vous devriez v\('erifier vous\-m\(^eme qu\'aucun fichier poss\('ed\('e par le groupe ne subsiste sur tous les syst\(`emes de fichiers\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (nombre)
+.RS 4
+Nombre maximum de membres par entr\('ee de groupe\&. Lorsque le maximum est atteint, une nouvelle entr\('ee de groupe (ligne) est d\('emarr\('ee dans
+/etc/group
+(avec le m\(^eme nom, m\(^eme mot de passe, et m\(^eme GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\'il n\'y a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\'assurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de fixer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\'outils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+La commande
+\fBgroupdel\fR
+retourne les valeurs suivantes en quittant\ \&:
+.PP
+\fI0\fR
+.RS 4
+succ\(`es
+.RE
+.PP
+\fI2\fR
+.RS 4
+erreur de syntaxe
+.RE
+.PP
+\fI6\fR
+.RS 4
+le groupe sp\('ecifi\('e n\'existe pas
+.RE
+.PP
+\fI8\fR
+.RS 4
+impossible de supprimer le groupe primaire d\'un utilisateur existant
+.RE
+.PP
+\fI10\fR
+.RS 4
+impossible de mettre \(`a jour le fichier des groupes
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)
diff --git a/man/fr/groupmod.8 b/man/fr/groupmod.8
new file mode 100644 (file)
index 0000000..5daeb9b
--- /dev/null
@@ -0,0 +1,170 @@
+'\" t
+.\"     Title: groupmod
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "GROUPMOD" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+groupmod \- Modifier la d\('efinition d\'un groupe du syst\(`eme
+.SH "SYNOPSIS"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIoptions\fR] \fIGROUPE\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupmod\fR
+command modifies the definition of the specified
+\fIGROUP\fR
+by modifying the appropriate entry in the group database\&.
+.SH "OPTIONS"
+.PP
+Les options disponibles pour la commande
+\fBgroupmod\fR
+sont\ \&:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. Values between 0 and 999 are typically reserved for system groups\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\'aide et quitter\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR \fINOUVEAU_NOM_GROUPE\fR
+.RS 4
+Le nom du groupe sera modifi\('e de
+\fIGROUPE\fR
+vers
+\fINOUVEAU_NOM_GROUPE\fR\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR \fIMOT_DE_PASSE\fR
+.RS 4
+Mot de passe chiffr\('e, comme renvoy\('e par
+\fBcrypt\fR(3)\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (nombre)
+.RS 4
+Nombre maximum de membres par entr\('ee de groupe\&. Lorsque le maximum est atteint, une nouvelle entr\('ee de groupe (ligne) est d\('emarr\('ee dans
+/etc/group
+(avec le m\(^eme nom, m\(^eme mot de passe, et m\(^eme GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\'il n\'y a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\'assurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de fixer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\'outils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+La commande
+\fBgroupmod\fR
+retourne les valeurs suivantes en quittant\ \&:
+.PP
+\fI0\fR
+.RS 4
+succ\(`es
+.RE
+.PP
+\fI2\fR
+.RS 4
+erreur de syntaxe
+.RE
+.PP
+\fI3\fR
+.RS 4
+param\(`etre non valable pour l\'option
+.RE
+.PP
+\fI4\fR
+.RS 4
+le groupe sp\('ecifi\('e n\'existe pas
+.RE
+.PP
+\fI6\fR
+.RS 4
+le groupe sp\('ecifi\('e n\'existe pas
+.RE
+.PP
+\fI9\fR
+.RS 4
+nom de groupe d\('ej\(`a utilis\('e
+.RE
+.PP
+\fI10\fR
+.RS 4
+impossible de mettre \(`a jour le fichier des groupes
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/groups.1 b/man/fr/groups.1
new file mode 100644 (file)
index 0000000..076fac4
--- /dev/null
@@ -0,0 +1,55 @@
+'\" t
+.\"     Title: groups
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes utilisateur
+.\"    Source: Commandes utilisateur
+.\"  Language: French
+.\"
+.TH "GROUPS" "1" "24/07/2009" "Commandes utilisateur" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+groups \- Afficher la liste des groupes auxquels appartient l\'utilisateur
+.SH "SYNOPSIS"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIutilisateur\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "NOTE"
+.PP
+Sur les syst\(`emes qui ne g\(`erent pas l\'appartenance \(`a plusieurs groupes, seules les informations contenues dans
+/etc/group
+sont affich\('ees\&. L\'utilisateur doit utiliser
+\fBnewgrp\fR
+ou
+\fBsg\fR
+pour modifier l\'identifiant de groupe r\('eel et effectif\&.
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/fr/grpck.8 b/man/fr/grpck.8
new file mode 100644 (file)
index 0000000..a21e890
--- /dev/null
@@ -0,0 +1,219 @@
+'\" t
+.\"     Title: grpck
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "GRPCK" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+grpck \- V\('erifier l\'int\('egrit\('e des fichiers d\'administration des groupes
+.SH "SYNOPSIS"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [\-r] [\fIgroupe\fR\ [\ \fIshadow\fR\ ]]
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [\-s] [\fIgroupe\fR\ [\ \fIshadow\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Voici les v\('erifications effectu\('ees\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+nombre correct de champs
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid group name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "OPTIONS"
+.PP
+Les options disponibles pour la commande
+\fBgrpck\fR
+sont\ \&:
+.PP
+\fB\-r\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+Trie les entr\('ees de
+/etc/groupet /etc/gshadow
+par GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/groupand /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (nombre)
+.RS 4
+Nombre maximum de membres par entr\('ee de groupe\&. Lorsque le maximum est atteint, une nouvelle entr\('ee de groupe (ligne) est d\('emarr\('ee dans
+/etc/group
+(avec le m\(^eme nom, m\(^eme mot de passe, et m\(^eme GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\'il n\'y a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\'assurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de fixer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\'outils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+La commande
+\fBgrpck\fR
+retourne les valeurs suivantes en quittant\ \&:
+.PP
+\fI0\fR
+.RS 4
+succ\(`es
+.RE
+.PP
+\fI1\fR
+.RS 4
+erreur de syntaxe
+.RE
+.PP
+\fI2\fR
+.RS 4
+une entr\('ee de groupe ou plus est incorrecte
+.RE
+.PP
+\fI3\fR
+.RS 4
+impossible d\'ouvrir les fichiers group
+.RE
+.PP
+\fI4\fR
+.RS 4
+impossible de verrouiller les fichiers group
+.RE
+.PP
+\fI5\fR
+.RS 4
+impossible de mettre \(`a jour les fichiers group
+.RE
+.SH "VOIR AUSSI"
+.PP
+
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/fr/grpconv.8 b/man/fr/grpconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/fr/grpunconv.8 b/man/fr/grpunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/fr/gshadow.5 b/man/fr/gshadow.5
new file mode 100644 (file)
index 0000000..88c5cad
--- /dev/null
@@ -0,0 +1,92 @@
+'\" t
+.\"     Title: gshadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Formats et conversions de fichiers
+.\"    Source: Formats et conversions de fichiers
+.\"  Language: French
+.\"
+.TH "GSHADOW" "5" "24/07/2009" "Formats et conversions de fich" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+gshadow \- informations cach\('ees sur les groupes
+.SH "DESCRIPTION"
+.PP
+/etc/gshadow
+contient les informations cach\('ees sur les groupes\&.
+.PP
+Ce fichier ne doit pas \(^etre accessible en lecture par les utilisateurs normaux afin de maintenir la s\('ecurit\('e des mots de passe, en particuliers pour pr\('evenir les attaques par dictionnaires\&.
+.PP
+Chaque ligne de ce fichier contient les champs suivants, s\('epar\('es par des deux\-points (\(Fo\ \&:\ \&\(Fc)\ \&:
+.PP
+\fBnom du groupe\fR
+.RS 4
+It must be a valid group name, which exist on the system\&.
+.RE
+.PP
+\fBmot de passe chiffr\('e\fR
+.RS 4
+Consultez
+\fBcrypt\fR(3)
+pour plus d\'informations sur le traitement de cette cha\(^ine\&.
+.sp
+Si le champ du mot de passe contient une cha\(^ine qui ne peut pas \(^etre un r\('esultat valable de
+\fBcrypt\fR(3), par exemple si elle contient les caract\(`eres ! ou *, les utilisateurs ne pourront pas utiliser le mot de passe UNIX pour acc\('eder au groupe (mais les membres du groupe n\'ont pas besoin de mot de passe)\&.
+.sp
+The password is used when an user who is not a member of the group wants to gain the permissions of this group (see
+\fBnewgrp\fR(1))\&.
+.sp
+This field may be empty, in which case only the group members can gain the group permissions\&.
+.sp
+A password field which starts with a exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+Ce mot de passe remplace tout mot de passe indiqu\('e dans
+/etc/group\&.
+.RE
+.PP
+\fBadministrateurs\fR
+.RS 4
+Ce champ doit \(^etre une liste d\'utilisateurs, s\('epar\('es par des virgules\&.
+.sp
+Administrators can change the password or the members of the group\&.
+.sp
+Administrators also have the same permissions as the members (see below)\&.
+.RE
+.PP
+\fBmembres\fR
+.RS 4
+Ce champ doit \(^etre une liste d\'utilisateurs, s\('epar\('es par des virgules\&.
+.sp
+Members can access the group without being prompted for a password\&.
+.sp
+You should use the same list of users as in
+/etc/group\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBgpasswd\fR(5),
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBgrpconv\fR(8),
+\fBnewgrp\fR(1)\&.
diff --git a/man/fr/id.1 b/man/fr/id.1
new file mode 100644 (file)
index 0000000..5398527
--- /dev/null
@@ -0,0 +1,52 @@
+'\" t
+.\"     Title: id
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes utilisateur
+.\"    Source: Commandes utilisateur
+.\"  Language: French
+.\"
+.TH "ID" "1" "24/07/2009" "Commandes utilisateur" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+id \- display current user and group ID names
+.SH "SYNOPSIS"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "DESCRIPTION"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/fr/lastlog.8 b/man/fr/lastlog.8
new file mode 100644 (file)
index 0000000..c6c9585
--- /dev/null
@@ -0,0 +1,89 @@
+'\" t
+.\"     Title: lastlog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "LASTLOG" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+lastlog \- signaler les connexions les plus r\('ecentes de tous les utilisateurs ou d\'un utilisateur donn\('e
+.SH "SYNOPSIS"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+\fBLastlog\fR
+affiche le contenu du journal des derni\(`eres connexions (/var/log/lastlog)\&. Les champs
+\fIUtilisateur\fR,
+\fIPort\fR, date de
+\fIDerni\(`ere\fR
+connexion sont affich\('es\&. Par d\('efaut (aucune option de sp\('ecifi\('ee), les entr\('ees de laslog sont affich\('ees tri\('ees par ordre d\'apparition dans
+/etc/passwd\&.
+.SH "OPTIONS"
+.PP
+Les options disponibles pour la commande
+\fBlastlog\fR
+sont\ \&:
+.PP
+\fB\-b\fR, \fB\-\-before\fR \fIJOURS\fR
+.RS 4
+N\'affiche que les entr\('ees du fichier lastlog plus anciennes que
+\fIJOURS\fR\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\'aide et quitter\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR \fIJOURS\fR
+.RS 4
+Affiche les entr\('ees du fichier lastlog plus r\('ecentes que
+\fIJOURS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR\fILOGIN\fR|\fIINTERVALLE\fR
+.RS 4
+N\'afficher que les entr\('ees correspondant aux utilisateurs indiqu\('es\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+Dans le cas o\(`u l\'utilisateur ne s\'est jamais connect\('e, le message \(Fo\ \&\fI**Never logged in**\fR\ \&\(Fc (\(Fo\ \&\fI**Jamais connect\('e**\fR\ \&\(Fc) est affich\('e \(`a la place des champs
+\fIPort\fR
+et date de
+\fIDerni\(`ere\fR
+connexion\&.
+.PP
+Only the entries for the current users of the system will be displayed\&. Other entries may exist for users that were deleted previously\&.
+.SH "NOTE"
+.PP
+Le fichier
+lastlog
+est une base de donn\('ees qui contient des informations concernant la derni\(`ere connexion de chaque utilisateur\&. Vous n\'avez pas \(`a faire de rotation (avec rotate) sur ce fichier\&. C\'est un fichier \(Fo\ \&creux\ \&\(Fc, donc sa taille sur le disque est bien plus petite que celle affich\('ee par \(Fo\ \&\fBls \-l\fR\ \&\(Fc (qui peut indiquer un tr\(`es gros fichier si vous avez des utilisateurs avec des UID \('elev\('es)\&. Vous pouvez afficher sa taille r\('eelle avec \(Fo\ \&\fBls \-s\fR\ \&\(Fc\&.
+.SH "FICHIERS"
+.PP
+/var/log/lastlog
+.RS 4
+Base de donn\('ees de l\'heure des connexions pr\('ec\('edentes des utilisateurs\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+S\'il y a des trous importants dans les valeurs des UID, lastlog s\'ex\('ecutera plus lentement, sans affichage \(`a l\'\('ecran (par exemple, s\'il n\'y a pas d\'entr\('ee pour les utilisateurs ayant un UID compris entre 170 et 800 dans base de donn\('ees lastlog, le programme lastlog semblera bloqu\('e comme s\'il traitait les entr\('ees correspondant aux UID 171 \(`a 799)\&.
diff --git a/man/fr/limits.5 b/man/fr/limits.5
new file mode 100644 (file)
index 0000000..9c84466
--- /dev/null
@@ -0,0 +1,248 @@
+'\" t
+.\"     Title: limits
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Formats et conversions de fichiers
+.\"    Source: Formats et conversions de fichiers
+.\"  Language: French
+.\"
+.TH "LIMITS" "5" "24/07/2009" "Formats et conversions de fich" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+limits \- d\('efinition des limites de ressources
+.SH "DESCRIPTION"
+.PP
+Le fichier
+\fIlimits\fR
+(/etc/limits
+par d\('efaut ou LIMITS_FILE d\('efinit dans
+config\&.h) d\('ecrit les limites de ressource que vous voulez imposer\&. Il doit \(^etre poss\('ed\('e et ne doit \(^etre lisible que par le compte root\&.
+.PP
+Par d\('efaut, aucun quota (aucune limite) n\'est impos\('e \(`a \(Fo\ \&root\ \&\(Fc\&. En fait, il n\'est pas possible d\'imposer de cette fa\(,con de limite aux comptes root ou \('equivalents (comptes ayant un UID de 0)\&.
+.PP
+Chaque ligne d\('ecrit une limite pour un utilisateur, elle est de la forme suivante\ \&:
+.PP
+
+\fIutilisateur LISTE_DE_LIMITES\fR
+.PP
+O\(`u
+\fILISTE_DE_LIMITES\fR
+est une cha\(^ine construite par la concat\('enation d\'une liste de limites de ressource\&. Chaque limite consiste en une lettre (identifiant le type de limite) et une valeur num\('erique\&.
+.PP
+Les identifiants possibles sont\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+A\ \&: espace d\'adressage maximal (en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+C\ \&: taille maximale d\'un fichier image de la m\('emoire (\(Fo\ \&core\ \&\(Fc, en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+D\ \&: taille maximale du segment de donn\('ees d\'un programme (en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+F\ \&: taille maximale des fichiers (en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+M\ \&: taille maximale de m\('emoire verrouill\('ee (\(Fo\ \&locked\-in\-memory\ \&\(Fc, en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+N\ \&: nombre maximal de fichiers ouverts
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+R\ \&: taille maximale de la m\('emoire r\('esidente (\(Fo\ \&resident set size\ \&\(Fc, en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+S\ \&: taille maximale de la pile (en kilo octets)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+T\ \&: temps processeur maximal consomm\('e (en minutes)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+U\ \&: nombre maximal de processus
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+K\ \&: masque de cr\('eation de fichier, positionn\('e par
+\fBumask\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+L\ \&: nombre maximal de connexions simultan\('ees pour cet utilisateur
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+P\ \&: priorit\('e des processus, positionn\('e par
+\fBsetpriority\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+I: max nice value (0\&.\&.39 which translates to 20\&.\&.\-19)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+O: max real time priority
+.RE
+.PP
+Par exemple,
+\fIL2D2048N5\fR
+est une cha\(^ine
+\fILISTE_DE_LIMITES\fR
+valable\&. Pour faciliter la lecture, les entr\('ees suivantes sont \('equivalentes\ \&:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      utilisateur L2D2048N5
+      utilisateur L2 D2048 N5
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Attention\ \&: tout ce qui suit
+\fIutilisateur\fR
+est consid\('er\('e comme une limite de cha\(^ine\&. Les commentaires ne sont pas autoris\('es\&. Une cha\(^ine de limites non valable sera rejet\('ee (non utilis\('ee) par le programme
+\fBlogin\fR\&.
+.PP
+L\'entr\('ee par d\('efaut est repr\('esent\('ee par un utilisateur d\('enomm\('e \(Fo\ \&\fI*\fR\ \&\(Fc\&. Si plusieurs entr\('ees par d\('efaut sont pr\('esentes dans le fichier de limites, alors seule la derni\(`ere sera prise en compte\&.
+.PP
+Un simple tiret \(Fo\ \&\fI\-\fR\ \&\(Fc sera suffisant pour d\('esactiver toute limite \(`a un utilisateur,
+.PP
+Notez \('egalement que les limites ne sont sp\('ecifi\('ees que PAR CONNEXION\&. Il n\'y a pas de limite globale ou permanente\&. Des limites globales pourraient voir le jour, mais pour l\'instant, il faut faire sans\&.
+.SH "FICHIERS"
+.PP
+/etc/limits
+.RS 4
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1),
+\fBsetpriority\fR(2),
+\fBsetrlimit\fR(2)\&.
diff --git a/man/fr/login.1 b/man/fr/login.1
new file mode 100644 (file)
index 0000000..6371789
--- /dev/null
@@ -0,0 +1,467 @@
+'\" t
+.\"     Title: login
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes utilisateur
+.\"    Source: Commandes utilisateur
+.\"  Language: French
+.\"
+.TH "LOGIN" "1" "24/07/2009" "Commandes utilisateur" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+login \- D\('emarrer une session sur le syst\(`eme
+.SH "SYNOPSIS"
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIh\(^ote\fR] [\fInom_utilisateur\fR] [\fIENV=VAR\fR...]
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIh\(^ote\fR] \-f \fInom_utilisateur\fR
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] \-r\ \fIh\(^ote\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBlogin\fR
+program is used to establish a new session with the system\&. It is normally invoked automatically by responding to the
+\fIlogin:\fR
+prompt on the user\'s terminal\&.
+\fBlogin\fR
+may be special to the shell and may not be invoked as a sub\-process\&. When called from a shell,
+\fBlogin\fR
+should be executed as
+\fBexec login\fR
+which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller)\&. Attempting to execute
+\fBlogin\fR
+from any shell but the login shell will produce an error message\&.
+.PP
+Un mot de passe est ensuite demand\('e \(`a l\'utilisateur\&. L\'affichage du mot de passe est d\('esactiv\('e pour \('eviter de r\('ev\('eler le mot de passe\&. Seul un petit nombre d\'\('echecs est permis avant que
+\fBlogin\fR
+ne quitte et que la liaison ne soit interrompue\&.
+.PP
+Si une date de fin de validit\('e du mot de passe a \('et\('e d\('efinie pour ce compte, un nouveau mot de passe pourra vous \(^etre demand\('e\&. Votre ancien mot de passe et votre nouveau mot de passe vous seront alors demand\('es avant de pouvoir continuer\&. Veuillez lire la page de manuel
+\fBpasswd\fR(1)
+pour plus d\'informations\&.
+.PP
+Apr\(`es une connexion r\('eussie, vous serez inform\('e des messages du syst\(`eme et de la pr\('esence de courrier\&. Vous pouvez d\('esactiver l\'affichage du message du syst\(`eme (/etc/motd), en cr\('eant un fichier vide
+\&.hushlogin
+dans le r\('epertoire de votre compte\&. Le message concernant les courriers sera \(Fo\ \&\fIYou have new mail\&.\fR\ \&\(Fc, \(Fo\ \&\fIYou have mail\&.\fR\ \&\(Fc, ou \(Fo\ \&\fINo Mail\&.\fR\ \&\(Fc suivant l\'\('etat de votre bo\(^ite aux lettres\&.
+.PP
+Vos identifiants d\'utilisateur et de groupe seront d\('efinis en fonction des valeurs sp\('ecifi\('ees dans le fichier
+/etc/passwd\&. Les valeurs des variables d\'environnement
+\fI$HOME\fR,
+\fI$SHELL\fR,
+\fI$PATH\fR,
+\fI$LOGNAME\fR, et
+\fI$MAIL\fR
+seront d\('efinies en fonction des champs appropri\('es de l\'entr\('ee qui vous correspond\&. Les valeurs d\'ulimit, d\'umask et de nice pourront \('egalement \(^etre affect\('ees en fonction des entr\('ees du champ GECOS\&.
+.PP
+Sur certains syst\(`emes, la variable d\'environnement
+\fI$TERM\fR
+sera initialis\('ee au type de terminal de votre tty, comme sp\('ecifi\('e dans
+/etc/ttytype\&.
+.PP
+Un script d\'initialisation pour votre interpr\('eteur de commandes pourra \('egalement \(^etre ex\('ecut\('e\&. Veuillez vous r\('ef\('erer \(`a la section de manuel appropri\('ee pour plus d\'informations sur cette fonctionnalit\('e\&.
+.PP
+Une connexion \(`a un sous\-syst\(`eme est indiqu\('ee par la pr\('esence d\'un \(Fo\ \&*\ \&\(Fc comme premier caract\(`ere de l\'interpr\('eteur de commandes initial\&. Le r\('epertoire personnel sera utilis\('e comme racine d\'un nouveau syst\(`eme de fichiers dans lequel l\'utilisateur sera connect\('e\&.
+.PP
+Le programme
+\fBlogin\fR
+n\'est PAS responsable de la suppression d\'utilisateurs dans le fichier utmp\&. Les responsables du nettoyage de l\'appartenance des sessions de terminal sont
+\fBgetty\fR(8)
+et
+\fBinit\fR(8)\&. Si vous utilisez
+\fBlogin\fR
+depuis un interpr\('eteur de commandes sans
+\fBexec\fR, l\'utilisateur que vous utilisez continuera \(`a appara\(^itre comme \('etant connect\('e m\(^eme apr\(`es s\'\(^etre d\('econnect\('e de cette \(Fo\ \&sous\-session\ \&\(Fc\&.
+.SH "OPTIONS"
+.PP
+\fB\-f\fR
+.RS 4
+Ne pas r\('ealiser d\'authentification\&. L\'utilisateur est pr\('e\-authentifi\('e\&.
+.sp
+Note: In that case,
+\fIusername\fR
+is mandatory\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+Nom de l\'h\(^ote distant pour cette connexion\&.
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+Pr\('eserver l\'environnement\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Ex\('ecuter le protocole de connexion automatique (autologin) pour rlogin\&.
+.RE
+.PP
+Les options
+\fB\-r\fR,
+\fB\-h\fR
+et
+\fB\-f\fR
+ne peuvent \(^etre utilis\('ees que par root\&.
+.SH "AVERTISSEMENTS"
+.PP
+Cette version de
+\fBlogin\fR
+comporte de nombreuses options de compilation\&. Seules certaines d\'entre elles peuvent avoir \('et\('e activ\('ees sur votre site\&.
+.PP
+L\'emplacement des fichiers peut varier suivant la configuration du syst\(`eme\&.
+.PP
+Le programme
+\fBlogin\fR
+n\'est PAS responsable de la suppression d\'utilisateurs dans le fichier utmp\&. Les responsables du nettoyage de l\'appartenance des sessions de terminal sont
+\fBgetty\fR(8)
+et
+\fBinit\fR(8)\&. Si vous utilisez
+\fBlogin\fR
+depuis un interpr\('eteur de commandes sans
+\fBexec\fR, l\'utilisateur que vous utilisez continuera \(`a appara\(^itre comme \('etant connect\('e m\(^eme apr\(`es s\'\(^etre d\('econnect\('e de cette \(Fo\ \&sous\-session\ \&\(Fc\&.
+.PP
+As with any program,
+\fBlogin\fR\'s appearance can be faked\&. If non\-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine\&. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBCONSOLE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, soit un chemin complet du fichier contenant les noms de p\('eriph\('eriques (un par ligne), soit une liste de noms du p\('eriph\('erique d\('elimit\('ee par des \(Fo\ \&:\ \&\(Fc\&. Les connexions d\'un administrateur ne seront autoris\('ees que depuis ces p\('eriph\('eriques\&.
+.sp
+S\'il n\'est pas d\('efini, root pourra se connecter depuis n\'importe quel p\('eriph\('erique\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+Une liste de groupes \(`a rajouter aux groupes suppl\('ementaires de l\'utilisateur lors d\'une connexion sur une console (d\('etermin\('e par le param\(`etre CONSOLE)\&. Par d\('efaut, aucun groupe n\'est ajout\('e\&.
+
+\(`A utiliser avec pr\('ecaution\ \&: il est possible que les utilisateurs aient un acc\(`es permanent \(`a\ \&ces groupes, et cela m\(^eme s\'ils ne sont pas connect\('es sur la console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (bool\('een)
+.RS 4
+Indiquer si la connexion est permise si on ne peut pas acc\('eder au r\('epertoire personnel\&. Le r\('eglage par d\('efaut est \(Fo\ \&no\ \&\(Fc\&.
+.sp
+S\'il est r\('egl\('e sur
+\fIyes\fR, l\'utilisateur va se connecter dans le r\('epertoire racine (/) s\'il n\'est pas possible d\'acc\('eder \(`a\ \&son r\('epertoire personnel\&.
+.RE
+.PP
+\fBENV_HZ\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, il sera utilis\('e pour d\('efinir la variable d\'environnement HZ lorsqu\'un utilisateur se connecte\&. La valeur doit \(^etre pr\('ec\('ed\('ee par
+\fIHZ=\fR\&. Une valeur commune sur Linux est
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, il sera utilis\('e pour d\('efinir la variable d\'environnement PATH quand un utilisateur ordinaire se connecte\&. La valeur peut \(^etre pr\('ec\('ed\('ee par
+\fIPATH=\fR, ou une liste de chemins s\('epar\('es par des deux points (par exemple
+\fI/bin:/usr/bin\fR)\&. La valeur par d\('efaut est
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, il sera utilis\('e pour d\('efinir la variable d\'environnement PATH quand le super\-utilisateur se connecte\&. La valeur peut \(^etre pr\('ec\('ed\('ee par
+\fIPATH=\fR
+ou une liste de chemins s\('epar\('es par deux points (par exemple
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. La valeur par d\('efaut est
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, il sera utilis\('e pour d\('efinir la variable d\'environnement TZ quand un utilisateur se connecte\&. La valeur peut \(^etre le nom d\'un fuseau horaire pr\('ec\('ed\('e par
+\fITZ=\fR
+(par exemple
+\fITZ=CST6CDT\fR), ou le chemin complet vers le fichier contenant la sp\('ecification du fuseau horaire (par exemple
+/etc/tzname)\&.
+.sp
+Si un chemin complet est sp\('ecifi\('e mais que le fichier n\'existe pas ou ne peut pas \(^etre lu, la valeur par d\('efaut utilis\('ee est
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+Si ce fichier existe et est lisible, l\'environnement de connexion sera lu \(`a\ \& partir de lui\&. Chaque ligne doit \(^etre sous la forme nom=valeur\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (nombre)
+.RS 4
+Le caract\(`ere ERASE du terminal (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+La valeur peut \(^etre pr\('efix\('ee par \(Fo\ \&0\ \&\(Fc pour une valeur octale, ou \(Fo\ \&0x\ \&\(Fc pour une valeur hexad\('ecimale\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (nombre)
+.RS 4
+Le d\('elai en secondes avant qu\'un nouvel essai soit permit apr\(`es un \('echec de connexion\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (bool\('een)
+.RS 4
+Activer l\'enregistrement et l\'affichage des informations d\'\('echec de connexion de
+/var/log/faillog
+.RE
+.PP
+\fBFAKE_SHELL\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini,
+\fBlogin\fR
+ex\('ecutera cet interpr\('eteur de commandes au lieu de l\'interpr\('eteur de l\'utilisateur sp\('ecifi\('e dans
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, les \('echecs de connexion seront enregistr\('es dans ce fichier sous le format utmp
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, ce fichier peut d\('esactiver tous les affichages habituels durant la s\('equence de connexion\&. Si un nom de chemin complet est sp\('ecifi\('e, alors le mode taiseux sera activ\('e si le nom ou l\'interpr\('eteur de commandes de l\'utilisateur sont trouv\('es dans le fichier\&. Si ce n\'est pas un nom de chemin complet, alors le mode taiseux sera activ\('e si le fichier existe dans le r\('epertoire personnel de l\'utilisateur\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, ce fichier sera affich\('e avant chaque invite de connexion\&.
+.RE
+.PP
+\fBKILLCHAR\fR (nombre)
+.RS 4
+Le caract\(`ere KILL du terminal (\fI025\fR
+= CTRL/U)\&.
+.sp
+La valeur peut \(^etre pr\('efix\('ee par \(Fo\ \&0\ \&\(Fc pour une valeur octale, ou \(Fo\ \&0x\ \&\(Fc pour une valeur hexad\('ecimale\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (bool\('een)
+.RS 4
+Activer la journalisation et l\'affichage des informations de derni\(`ere connexion de /var/log/lastlog\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (nombre)
+.RS 4
+Le nombre maximum de tentatives de connexion en cas de mauvais mot de passe\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+La cha\(^ine de caract\(`eres utilis\('ee pour l\'invite de mot de passe\&. La valeur par d\('efaut est d\'utiliser "Password: " (\(Fo\ \&mot de passe\ \&:\ \&\(Fc), ou une traduction de cette cha\(^ine\&. Si vous d\('efinissez cette variable, l\'invite ne sera pas traduite\&.
+.sp
+Si la cha\(^ine contient
+\fI%s\fR, ces caract\(`eres seront remplac\('es par le nom de l\'utilisateur\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (nombre)
+.RS 4
+Le temps maximum en secondes pour la connexion\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (bool\('een)
+.RS 4
+Activer la journalisation des connexions r\('eussies\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (bool\('een)
+.RS 4
+Activer l\'affichage des noms d\'utilisateurs inconnus quand les \('echecs de connexions sont enregistr\('es\&.
+.sp
+Remarque\ \&: la journalisation des noms d\'utilisateurs inconnus peut \(^etre un probl\(`eme de s\('ecurit\('e si un utilisateur entre son mot de passe au lieu de son nom d\'utilisateur\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (bool\('een)
+.RS 4
+Activer le contr\(^ole et l\'affichage du statut de la bo\(^ite aux lettres durant la connexion\&.
+.sp
+Vous devriez le d\('esactiver si les fichiers de d\('emarrage de l\'interpr\('eteur de commandes v\('erifie d\('ej\(`a la pr\('esence de courriers (\(Fo\ \&mail \-e\ \&\(Fc ou \('equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+R\('epertoire d\'attente des courriels (\(Fo\ \&mail spool directory\ \&\(Fc)\&. Ce param\(`etre est n\('ecessaire pour manipuler les bo\(^ites \(`a lettres lorsque le compte d\'un utilisateur est modifi\('e ou supprim\('e\&. S\'il n\'est pas sp\('ecifi\('e, une valeur par d\('efaut d\('efinie \(`a la compilation est utilis\('ee\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+D\('efinit l\'emplacement des bo\(^ites aux lettres des utilisateurs relativement \(`a leur r\('epertoire personnel\&.
+.RE
+.PP
+Les param\(`etres
+\fBMAIL_DIR\fR
+et
+\fBMAIL_FILE\fR
+sont utilis\('ees par
+\fBuseradd\fR,
+\fBusermod\fR, et
+\fBuserdel\fR
+pour cr\('eer, d\('eplacer, ou supprimer les bo\(^ites aux lettres des utilisateurs\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMOTD_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (bool\('een)
+.RS 4
+Enable checking of time restrictions specified in /etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (bool\('een)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBTTYGROUP\fR (cha\(^ine ce caract\(`eres), \fBTTYPERM\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\'s primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBULIMIT\fR (nombre)
+.RS 4
+Valeur par d\('efaut d\'\fBulimit\fR\&.
+.RE
+.PP
+\fBUMASK\fR (nombre)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (bool\('een)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FICHIERS"
+.PP
+/var/run/utmp
+.RS 4
+Liste des sessions de connexion en cours\&.
+.RE
+.PP
+/var/log/wtmp
+.RS 4
+Liste des sessions de connexion pr\('ec\('edentes\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/motd
+.RS 4
+Fichier contenant le message du syst\(`eme\&.
+.RE
+.PP
+/etc/nologin
+.RS 4
+Emp\(^echer les utilisateurs non\-root de se connecter\&.
+.RE
+.PP
+/etc/ttytype
+.RS 4
+Liste des types de terminaux\&.
+.RE
+.PP
+$HOME/\&.hushlogin
+.RS 4
+Supprimer l\'affichage des messages du syst\(`eme\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBmail\fR(1),
+\fBpasswd\fR(1),
+\fBsh\fR(1),
+\fBsu\fR(1),
+\fBlogin.defs\fR(5),
+\fBnologin\fR(5),
+\fBpasswd\fR(5),
+\fBsecuretty\fR(5),
+\fBgetty\fR(8)\&.
diff --git a/man/fr/login.access.5 b/man/fr/login.access.5
new file mode 100644 (file)
index 0000000..97a5062
--- /dev/null
@@ -0,0 +1,58 @@
+'\" t
+.\"     Title: login.access
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Formats et conversions de fichiers
+.\"    Source: Formats et conversions de fichiers
+.\"  Language: French
+.\"
+.TH "LOGIN\&.ACCESS" "5" "24/07/2009" "Formats et conversions de fich" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+login.access \- table de contr\(^ole des connexions
+.SH "DESCRIPTION"
+.PP
+Le fichier
+\fIlogin\&.access\fR
+permet de sp\('ecifier des paires (utilisateur, h\(^ote) et/ou (utilisateur, tty) pour lesquels toute connexion sera soit accept\('ee soit refus\('ee\&.
+.PP
+Lorsqu\'un utilisateur se connecte, le fichier
+\fIlogin\&.access\fR
+est lu jusqu\'\(`a la premi\(`ere entr\('ee correspondant \(`a la paire (utilisateur, h\(^ote) ou, dans le cas d\'une connexion ne passant pas par le r\('eseau, \(`a la premi\(`ere entr\('ee correspondant au couple (utilisateur, tty)\&. Le champ des permissions de la table pour cette entr\('ee d\('etermine alors si la connexion doit \(^etre accept\('ee ou refus\('ee\&.
+.PP
+Chaque ligne de la table de contr\(^ole des connexions (\(Fo\ \&login access control table\ \&\(Fc) est compos\('ee de trois champs s\('epar\('es par le caract\(`ere \(Fo\ \&:\ \&\(Fc\ \&:
+.PP
+\fIpermission\fR:\fIutilisateurs\fR:\fIorigines\fR
+.PP
+Le premier champ est soit un \(Fo\ \&\fI+\fR\ \&\(Fc (acc\(`es autoris\('e), soit un \(Fo\ \&\fI\-\fR\ \&\(Fc (acc\(`es refus\('e)\&. Le second champ est une liste d\'un ou plusieurs noms d\'utilisateurs ou de groupes, ou
+\fIALL\fR
+(correspond \(`a tous les utilisateurs)\&. Le troisi\(`eme champ est une liste d\'un ou plusieurs noms de tty (pour les connexions hors r\('eseau), noms d\'h\(^otes, noms de domaines (commen\(,cant par un \(Fo\ \&\&.\ \&\(Fc), adresses d\'h\(^ote, adresses de sous\-r\('eseau (terminant par un \(Fo\ \&\&.\ \&\(Fc),
+\fIALL\fR
+(pour sp\('ecifier n\'importe quelle connexion), ou
+\fILOCAL\fR
+(correspond \(`a n\'importe quelle cha\(^ine ne contenant pas de \(Fo\ \&\&.\ \&\(Fc)\&. Si vous utilisez NIS, vous pouvez utiliser @nomdegroupe pour les motifs d\'utilisateur et d\'h\(^ote\&.
+.PP
+L\'op\('erateur
+\fIEXCEPT\fR
+permet d\'\('ecrire des r\(`egles tr\(`es compactes\&.
+.PP
+Le fichier d\'informations sur les groupes (/etc/group) n\'est utilis\('e que lorsqu\'un nom ne correspond \(`a aucun des utilisateurs connect\('es\&. Seuls les groupes pour lesquels la liste des utilisateurs est sp\('ecifi\('ee sont utilis\('es\ \&: le programme ne recherche pas parmi les groupes primaires des utilisateurs\&.
+.SH "FICHIERS"
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/fr/login.defs.5 b/man/fr/login.defs.5
new file mode 100644 (file)
index 0000000..2fe1f91
--- /dev/null
@@ -0,0 +1,796 @@
+'\" t
+.\"     Title: login.defs
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Formats et conversions de fichiers
+.\"    Source: Formats et conversions de fichiers
+.\"  Language: French
+.\"
+.TH "LOGIN\&.DEFS" "5" "24/07/2009" "Formats et conversions de fich" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+login.defs \- configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc
+.SH "DESCRIPTION"
+.PP
+Le fichier
+/etc/login\&.defs
+d\('efinit la configuration de la suite shadow password (mots de passe cach\('es) pour le syst\(`eme\&. Ce fichier est indispensable\&. Son absence n\'emp\(^echera pas le syst\(`eme de fonctionner, mais aura probablement des cons\('equences ind\('esirables\&.
+.PP
+Ce fichier est un fichier texte, dont chaque ligne d\('ecrit un param\(`etre de configuration\&. Les lignes consistent en un nom et une valeur, s\('epar\('es par un espace\&. Les lignes blanches et les lignes de commentaires sont ignor\('ees\&. Les commentaires commencent par un caract\(`ere \(Fo\ \&#\ \&\(Fc, qui doit \(^etre le premier caract\(`ere non blanc de la ligne\&.
+.PP
+Parameter values may be of four types: strings, booleans, numbers, and long numbers\&. A string is comprised of any printable characters\&. A boolean should be either the value
+\fIyes\fR
+or
+\fIno\fR\&. An undefined boolean parameter or one with a value other than these will be given a
+\fIno\fR
+value\&. Numbers (both regular and long) may be either decimal values, octal values (precede the value with
+\fI0\fR) or hexadecimal values (precede the value with
+\fI0x\fR)\&. The maximum value of the regular and long numeric parameters is machine\-dependent\&.
+.PP
+Les param\(`etres de configuration suivants sont fournis\ \&:
+.PP
+\fBCHFN_AUTH\fR (bool\('een)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBCHSH_AUTH\fR (bool\('een)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCONSOLE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, soit un chemin complet du fichier contenant les noms de p\('eriph\('eriques (un par ligne), soit une liste de noms du p\('eriph\('erique d\('elimit\('ee par des \(Fo\ \&:\ \&\(Fc\&. Les connexions d\'un administrateur ne seront autoris\('ees que depuis ces p\('eriph\('eriques\&.
+.sp
+S\'il n\'est pas d\('efini, root pourra se connecter depuis n\'importe quel p\('eriph\('erique\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+Une liste de groupes \(`a rajouter aux groupes suppl\('ementaires de l\'utilisateur lors d\'une connexion sur une console (d\('etermin\('e par le param\(`etre CONSOLE)\&. Par d\('efaut, aucun groupe n\'est ajout\('e\&.
+
+\(`A utiliser avec pr\('ecaution\ \&: il est possible que les utilisateurs aient un acc\(`es permanent \(`a\ \&ces groupes, et cela m\(^eme s\'ils ne sont pas connect\('es sur la console\&.
+.RE
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indiquer si un r\('epertoire personnel doit \(^etre cr\('e\('e par d\('efaut pour les nouveaux utilisateurs\&.
+.sp
+Ce r\('eglage ne s\'applique pas pour les utilisateurs syst\(`eme, et peut \(^etre annul\('e sur la ligne de commande\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (bool\('een)
+.RS 4
+Indiquer si la connexion est permise si on ne peut pas acc\('eder au r\('epertoire personnel\&. Le r\('eglage par d\('efaut est \(Fo\ \&no\ \&\(Fc\&.
+.sp
+S\'il est r\('egl\('e sur
+\fIyes\fR, l\'utilisateur va se connecter dans le r\('epertoire racine (/) s\'il n\'est pas possible d\'acc\('eder \(`a\ \&son r\('epertoire personnel\&.
+.RE
+.PP
+\fBENCRYPT_METHOD\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+D\('efinit les algorithmes de chiffrement par d\('efaut du syst\(`eme pour coder les mots de passes (si aucun algorithme n\'a \('et\('e indiqu\('e sur la ligne de commandes)\&.
+.sp
+Il peut prendre une de ces valeurs\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(par d\('efaut)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Remarque\ \&: ce param\(`etre remplace la variable
+\fBMD5_CRYPT_ENAB\fR\&.
+.RE
+.PP
+\fBENV_HZ\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, il sera utilis\('e pour d\('efinir la variable d\'environnement HZ lorsqu\'un utilisateur se connecte\&. La valeur doit \(^etre pr\('ec\('ed\('ee par
+\fIHZ=\fR\&. Une valeur commune sur Linux est
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, il sera utilis\('e pour d\('efinir la variable d\'environnement PATH quand un utilisateur ordinaire se connecte\&. La valeur peut \(^etre pr\('ec\('ed\('ee par
+\fIPATH=\fR, ou une liste de chemins s\('epar\('es par des deux points (par exemple
+\fI/bin:/usr/bin\fR)\&. La valeur par d\('efaut est
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, il sera utilis\('e pour d\('efinir la variable d\'environnement PATH quand le super\-utilisateur se connecte\&. La valeur peut \(^etre pr\('ec\('ed\('ee par
+\fIPATH=\fR
+ou une liste de chemins s\('epar\('es par deux points (par exemple
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. La valeur par d\('efaut est
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, il sera utilis\('e pour d\('efinir la variable d\'environnement TZ quand un utilisateur se connecte\&. La valeur peut \(^etre le nom d\'un fuseau horaire pr\('ec\('ed\('e par
+\fITZ=\fR
+(par exemple
+\fITZ=CST6CDT\fR), ou le chemin complet vers le fichier contenant la sp\('ecification du fuseau horaire (par exemple
+/etc/tzname)\&.
+.sp
+Si un chemin complet est sp\('ecifi\('e mais que le fichier n\'existe pas ou ne peut pas \(^etre lu, la valeur par d\('efaut utilis\('ee est
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+Si ce fichier existe et est lisible, l\'environnement de connexion sera lu \(`a\ \& partir de lui\&. Chaque ligne doit \(^etre sous la forme nom=valeur\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (nombre)
+.RS 4
+Le caract\(`ere ERASE du terminal (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+La valeur peut \(^etre pr\('efix\('ee par \(Fo\ \&0\ \&\(Fc pour une valeur octale, ou \(Fo\ \&0x\ \&\(Fc pour une valeur hexad\('ecimale\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (nombre)
+.RS 4
+Le d\('elai en secondes avant qu\'un nouvel essai soit permit apr\(`es un \('echec de connexion\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (bool\('een)
+.RS 4
+Activer l\'enregistrement et l\'affichage des informations d\'\('echec de connexion de
+/var/log/faillog
+.RE
+.PP
+\fBFAKE_SHELL\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini,
+\fBlogin\fR
+ex\('ecutera cet interpr\('eteur de commandes au lieu de l\'interpr\('eteur de l\'utilisateur sp\('ecifi\('e dans
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, les \('echecs de connexion seront enregistr\('es dans ce fichier sous le format utmp
+.RE
+.PP
+\fBGID_MAX\fR (nombre), \fBGID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques de groupes que les commandes
+\fBuseradd\fR,
+\fBgroupadd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation des groupes normaux\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, ce fichier peut d\('esactiver tous les affichages habituels durant la s\('equence de connexion\&. Si un nom de chemin complet est sp\('ecifi\('e, alors le mode taiseux sera activ\('e si le nom ou l\'interpr\('eteur de commandes de l\'utilisateur sont trouv\('es dans le fichier\&. Si ce n\'est pas un nom de chemin complet, alors le mode taiseux sera activ\('e si le fichier existe dans le r\('epertoire personnel de l\'utilisateur\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, ce fichier sera affich\('e avant chaque invite de connexion\&.
+.RE
+.PP
+\fBKILLCHAR\fR (nombre)
+.RS 4
+Le caract\(`ere KILL du terminal (\fI025\fR
+= CTRL/U)\&.
+.sp
+La valeur peut \(^etre pr\('efix\('ee par \(Fo\ \&0\ \&\(Fc pour une valeur octale, ou \(Fo\ \&0x\ \&\(Fc pour une valeur hexad\('ecimale\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (bool\('een)
+.RS 4
+Activer la journalisation et l\'affichage des informations de derni\(`ere connexion de /var/log/lastlog\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (bool\('een)
+.RS 4
+Activer la journalisation des connexions r\('eussies\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (bool\('een)
+.RS 4
+Activer l\'affichage des noms d\'utilisateurs inconnus quand les \('echecs de connexions sont enregistr\('es\&.
+.sp
+Remarque\ \&: la journalisation des noms d\'utilisateurs inconnus peut \(^etre un probl\(`eme de s\('ecurit\('e si un utilisateur entre son mot de passe au lieu de son nom d\'utilisateur\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (nombre)
+.RS 4
+Le nombre maximum de tentatives de connexion en cas de mauvais mot de passe\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+La cha\(^ine de caract\(`eres utilis\('ee pour l\'invite de mot de passe\&. La valeur par d\('efaut est d\'utiliser "Password: " (\(Fo\ \&mot de passe\ \&:\ \&\(Fc), ou une traduction de cette cha\(^ine\&. Si vous d\('efinissez cette variable, l\'invite ne sera pas traduite\&.
+.sp
+Si la cha\(^ine contient
+\fI%s\fR, ces caract\(`eres seront remplac\('es par le nom de l\'utilisateur\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (nombre)
+.RS 4
+Le temps maximum en secondes pour la connexion\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (bool\('een)
+.RS 4
+Activer le contr\(^ole et l\'affichage du statut de la bo\(^ite aux lettres durant la connexion\&.
+.sp
+Vous devriez le d\('esactiver si les fichiers de d\('emarrage de l\'interpr\('eteur de commandes v\('erifie d\('ej\(`a la pr\('esence de courriers (\(Fo\ \&mail \-e\ \&\(Fc ou \('equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+R\('epertoire d\'attente des courriels (\(Fo\ \&mail spool directory\ \&\(Fc)\&. Ce param\(`etre est n\('ecessaire pour manipuler les bo\(^ites \(`a lettres lorsque le compte d\'un utilisateur est modifi\('e ou supprim\('e\&. S\'il n\'est pas sp\('ecifi\('e, une valeur par d\('efaut d\('efinie \(`a la compilation est utilis\('ee\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+D\('efinit l\'emplacement des bo\(^ites aux lettres des utilisateurs relativement \(`a leur r\('epertoire personnel\&.
+.RE
+.PP
+Les param\(`etres
+\fBMAIL_DIR\fR
+et
+\fBMAIL_FILE\fR
+sont utilis\('ees par
+\fBuseradd\fR,
+\fBusermod\fR, et
+\fBuserdel\fR
+pour cr\('eer, d\('eplacer, ou supprimer les bo\(^ites aux lettres des utilisateurs\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (nombre)
+.RS 4
+Nombre maximum de membres par entr\('ee de groupe\&. Lorsque le maximum est atteint, une nouvelle entr\('ee de groupe (ligne) est d\('emarr\('ee dans
+/etc/group
+(avec le m\(^eme nom, m\(^eme mot de passe, et m\(^eme GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\'il n\'y a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\'assurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de fixer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\'outils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (bool\('een)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBMOTD_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (bool\('een)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (bool\('een)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (nombre)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (nombre)
+.RS 4
+Nombre maximum de jours de validit\('e d\'un mot de passe\&. Apr\(`es cette dur\('ee, une modification du mot de passe est obligatoire\&. S\'il n\'est pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (nombre)
+.RS 4
+Nombre minimum de jours autoris\('e avant la modification d\'un mot de passe\&. Toute tentative de modification du mot de passe avant cette dur\('ee est rejet\('ee\&. S\'il n\'est pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (nombre)
+.RS 4
+Nombre de jours durant lesquels l\'utilisateur recevra un avertissement avant que son mot de passe n\'arrive en fin de validit\('e\&. Une valeur n\('egative signifie qu\'aucun avertissement n\'est donn\('e\&. S\'il n\'est pas pr\('ecis\('e, aucun avertissement n\'est donn\('e\&.
+.RE
+.PP
+
+\fBPASS_MAX_DAYS\fR,
+\fBPASS_MIN_DAYS\fR
+and
+\fBPASS_WARN_AGE\fR
+are only used at the time of account creation\&. Any changes to these settings won\'t affect existing accounts\&.
+.PP
+\fBPASS_MAX_LEN\fR (nombre), \fBPASS_MIN_LEN\fR (nombre)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\'t change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (bool\('een)
+.RS 4
+Enable checking of time restrictions specified in /etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (bool\('een)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (nombre), \fBSHA_CRYPT_MAX_ROUNDS\fR (nombre)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, les activit\('es de su seront enregistr\('ees dans ce fichier\&.
+.RE
+.PP
+\fBSU_NAME\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (bool\('een)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\'t exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (nombre), \fBSYS_GID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques de groupes que les commandes
+\fBuseradd\fR,
+\fBgroupadd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation de groupes syst\(`eme\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (nombre), \fBSYS_UID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques d\'utilisateurs que les commandes
+\fBuseradd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation d\'utilisateurs syst\(`eme\&.
+.RE
+.PP
+\fBSYSLOG_SG_ENAB\fR (bool\('een)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (bool\('een)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBTTYGROUP\fR (cha\(^ine ce caract\(`eres), \fBTTYPERM\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\'s primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBUID_MAX\fR (nombre), \fBUID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques d\'utilisateurs que les commandes
+\fBuseradd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation d\'utilisateurs normaux\&.
+.RE
+.PP
+\fBULIMIT\fR (nombre)
+.RS 4
+Valeur par d\('efaut d\'\fBulimit\fR\&.
+.RE
+.PP
+\fBUMASK\fR (nombre)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+Si ce param\(`etre est d\('efini, cette commande est ex\('ecut\('ee lors de la suppression d\'un utilisateur\&. Elle pourra supprimer toutes les t\(^aches p\('eriodiques cron ou at, tous les travaux d\'impression, etc\&. de l\'utilisateur (qui sera fourni comme premier param\(`etre)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\'s cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+       echo "Usage: $0 username"
+       exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+      
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (bool\('een)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "R\('EF\('ERENCES CROIS\('EES"
+.PP
+Les r\('ef\('erences crois\('ees ci\-dessous montrent quels sont les param\(`etres utilis\('es par les diff\('erents programmes de la suite shadow password\&.
+.PP
+chfn
+.RS 4
+
+CHFN_AUTH
+CHFN_RESTRICT
+LOGIN_STRING
+.RE
+.PP
+chgpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chpasswd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chsh
+.RS 4
+CHSH_AUTH LOGIN_STRING
+.RE
+.PP
+gpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+groupadd
+.RS 4
+GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN
+.RE
+.PP
+groupdel
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmems
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmod
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpck
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpunconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+login
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE
+ERASECHAR FAIL_DELAY
+FAILLOG_ENAB
+FAKE_SHELL
+FTMP_FILE
+HUSHLOGIN_FILE
+ISSUE_FILE
+KILLCHAR
+LASTLOG_ENAB
+LOGIN_RETRIES
+LOGIN_STRING
+LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
+MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB
+TTYGROUP TTYPERM TTYTYPE_FILE
+ULIMIT UMASK
+USERGROUPS_ENAB
+.RE
+.PP
+newgrp / sg
+.RS 4
+SYSLOG_SG_ENAB
+.RE
+.PP
+newusers
+.RS 4
+ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+passwd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+pwck
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+pwconv
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+su
+.RS 4
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENVIRON_FILE
+ENV_PATH ENV_SUPATH
+ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB
+SULOG_FILE SU_NAME
+SU_WHEEL_ONLY
+SYSLOG_SU_ENAB
+USERGROUPS_ENAB
+.RE
+.PP
+sulogin
+.RS 4
+ENV_HZ
+ENV_TZ
+.RE
+.PP
+useradd
+.RS 4
+CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+userdel
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB
+.RE
+.PP
+usermod
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBpam\fR(8)\&.
diff --git a/man/fr/logoutd.8 b/man/fr/logoutd.8
new file mode 100644 (file)
index 0000000..abb2754
--- /dev/null
@@ -0,0 +1,48 @@
+'\" t
+.\"     Title: logoutd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "LOGOUTD" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+logoutd \- Imposer les restrictions de connexion dans le temps
+.SH "SYNOPSIS"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "DESCRIPTION"
+.PP
+\fBLogoutd\fR
+impose les restrictions (sur les ports, la date et l\'heure de connexion) sp\('ecifi\('ees dans
+/etc/porttime\&.
+\fBLogoutd\fR
+doit \(^etre d\('emarr\('e depuis
+/etc/rc\&. Il analyse le fichier
+/var/run/utmp
+r\('eguli\(`erement, et, pour chaque utilisateur, il v\('erifie que ce nom d\'utilisateur est autoris\('e \(`a \(^etre connect\('e \(`a ce port \(`a ce moment\&. Toute session en violation avec les restrictions de
+/etc/porttime
+est termin\('ee\&.
+.SH "FICHIERS"
+.PP
+/etc/porttime
+.RS 4
+Fichier contenant le port d\'acc\(`es\&.
+.RE
+.PP
+/var/run/utmp
+.RS 4
+Liste des sessions de connexion en cours\&.
+.RE
diff --git a/man/fr/newgrp.1 b/man/fr/newgrp.1
new file mode 100644 (file)
index 0000000..1b568d9
--- /dev/null
@@ -0,0 +1,89 @@
+'\" t
+.\"     Title: newgrp
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes utilisateur
+.\"    Source: Commandes utilisateur
+.\"  Language: French
+.\"
+.TH "NEWGRP" "1" "24/07/2009" "Commandes utilisateur" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+newgrp \- se connecter avec un nouveau groupe
+.SH "SYNOPSIS"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIgroupe\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\'s environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+\fBNewgrp\fR
+change l\'identifiant de groupe r\('eel actuel \(`a la valeur du groupe indiqu\('e, ou au groupe par d\('efaut d\('efini dans
+/etc/passwd
+si aucun nom de groupe n\'est fourni\&.
+\fBNewgrp\fR
+essaiera \('egalement d\'ajouter le groupe \(`a l\'ensemble des groupes de l\'utilisateur\&. Si l\'utilisateur n\'est pas superutilisateur, un mot de passe lui sera demand\('e s\'il n\'utilise pas de mot de passe (dans
+/etc/shadow, si cet utilisateur a une entr\('ee dans le fichier des mots de passe cach\('es, ou dans
+/etc/passwd
+sinon), mais que le groupe en a un, ou si l\'utilisateur n\'est pas dans la liste des membres de ce groupe et que ce groupe utilise un mot de passe\&. L\'acc\(`es sera refus\('e si le mot de passe du groupe est vide et que l\'utilisateur ne fait pas partie de ses membres\&.
+.PP
+S\'il y a une entr\('ee pour ce groupe dans
+/etc/gshadow, alors la liste des membres et le mot de passe de ce groupe seront pris dans ce fichier, sinon, l\'entr\('ee du fichier
+/etc/group
+est utilis\('ee\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBSYSLOG_SG_ENAB\fR (bool\('een)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/fr/newusers.8 b/man/fr/newusers.8
new file mode 100644 (file)
index 0000000..7f184ee
--- /dev/null
@@ -0,0 +1,381 @@
+'\" t
+.\"     Title: newusers
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "NEWUSERS" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+newusers \- Mettre \(`a jour, ou cr\('eer de nouveaux utilisateurs par lots
+.SH "SYNOPSIS"
+.HP \w'\fBnewusers\fR\ 'u
+\fBnewusers\fR [\fIoptions\fR\ \fInouveaux_utilisateurs\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBnewusers\fR
+command reads a file of user name and clear\-text password pairs and uses this information to update a group of existing users or to create new users\&. Each line is in the same format as the standard password file (see
+\fBpasswd\fR(5)) with the exceptions explained below:
+.PP
+pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
+.PP
+\fIpw_name\fR
+.RS 4
+This is the name of the user\&.
+.sp
+It can be the name of a new user or the name of an existing user (or an user created before by
+\fBnewusers\fR)\&. In case of an existing user, the user\'s information will be changed, otherwise a new user will be created\&.
+.RE
+.PP
+\fIpw_passwd\fR
+.RS 4
+Ce champ sera chiffr\('e et utilis\('e comme la nouvelle valeur du mot de passe chiffr\('e\&.
+.RE
+.PP
+\fIpw_uid\fR
+.RS 4
+This field is used to define the UID of the user\&.
+.sp
+If the field is empty, an new (unused) UID will be defined automatically by
+\fBnewusers\fR\&.
+.sp
+If this field contains a number, this number will be used as the UID\&.
+.sp
+If this field contains the name of an existing user (or the name of an user created before by
+\fBnewusers\fR), the UID of the specified user will be used\&.
+.sp
+If the UID of an existing user is changed, the files ownership of the user\'s file should be fixed manually\&.
+.RE
+.PP
+\fIpw_gid\fR
+.RS 4
+This field is used to define the primary group ID for the user\&.
+.sp
+If this field contains the name of an existing group (or a group created before by
+\fBnewusers\fR), the GID of this group will be used as the primary group ID for the user\&.
+.sp
+If this field is a number, this number will be used as the primary group ID of the user\&. If no groups exist with this GID, a new group will be created with this GID, and the name of the user\&.
+.sp
+If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and as the GID for the new group\&.
+.sp
+If this field contains the name of a group which does not exist (and was not created earlier wbefore by
+\fBnewusers\fR), a new group will be created with the specified name and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and Gs the ID for the new group\&.
+.RE
+.PP
+\fIpw_gecos\fR
+.RS 4
+This field is copied in the GECOS field of the user\&.
+.RE
+.PP
+\fIpw_dir\fR
+.RS 4
+This field is used to define the home directory of the user\&.
+.sp
+If this field does not specify an existing directory, the specified directory is created, with ownership set to the user being created or updated and its primary group\&.
+.sp
+If the home directory of an existing user is changed,
+\fBnewusers\fR
+does not move or copy the content of the old directory to the new location\&. This should be done manually\&.
+.RE
+.PP
+\fIpw_shell\fR
+.RS 4
+This field defines the shell of the user\&. No checks are performed on this field\&.
+.RE
+.PP
+
+\fBnewusers\fR
+first tries to create or change all the specified users, and then write these changes to the user or group databases\&. If an error occurs (except in the final writes to the databases), no changes are committed to the databases\&.
+.PP
+Cette commande a \('et\('e con\(,cue pour les gros syst\(`emes pour lesquels un grand nombre de comptes sont mis \(`a jour \(`a un m\(^eme instant\&.
+.SH "OPTIONS"
+.PP
+Les options disponibles pour la commande
+\fBnewusers\fR
+sont\ \&:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\'aide et quitter\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Cr\('eer un compte syst\(`eme\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are choosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+Le fichier d\'entr\('ee doit \(^etre correctement prot\('eg\('e puisqu\'il contient des mots de passe en clair\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBENCRYPT_METHOD\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+D\('efinit les algorithmes de chiffrement par d\('efaut du syst\(`eme pour coder les mots de passes (si aucun algorithme n\'a \('et\('e indiqu\('e sur la ligne de commandes)\&.
+.sp
+Il peut prendre une de ces valeurs\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(par d\('efaut)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Remarque\ \&: ce param\(`etre remplace la variable
+\fBMD5_CRYPT_ENAB\fR\&.
+.RE
+.PP
+\fBGID_MAX\fR (nombre), \fBGID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques de groupes que les commandes
+\fBuseradd\fR,
+\fBgroupadd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation des groupes normaux\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (nombre)
+.RS 4
+Nombre maximum de membres par entr\('ee de groupe\&. Lorsque le maximum est atteint, une nouvelle entr\('ee de groupe (ligne) est d\('emarr\('ee dans
+/etc/group
+(avec le m\(^eme nom, m\(^eme mot de passe, et m\(^eme GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\'il n\'y a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\'assurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de fixer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\'outils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (bool\('een)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (nombre)
+.RS 4
+Nombre maximum de jours de validit\('e d\'un mot de passe\&. Apr\(`es cette dur\('ee, une modification du mot de passe est obligatoire\&. S\'il n\'est pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (nombre)
+.RS 4
+Nombre minimum de jours autoris\('e avant la modification d\'un mot de passe\&. Toute tentative de modification du mot de passe avant cette dur\('ee est rejet\('ee\&. S\'il n\'est pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (nombre)
+.RS 4
+Nombre de jours durant lesquels l\'utilisateur recevra un avertissement avant que son mot de passe n\'arrive en fin de validit\('e\&. Une valeur n\('egative signifie qu\'aucun avertissement n\'est donn\('e\&. S\'il n\'est pas pr\('ecis\('e, aucun avertissement n\'est donn\('e\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (nombre), \fBSHA_CRYPT_MAX_ROUNDS\fR (nombre)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (nombre), \fBSYS_GID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques de groupes que les commandes
+\fBuseradd\fR,
+\fBgroupadd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation de groupes syst\(`eme\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (nombre), \fBSYS_UID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques d\'utilisateurs que les commandes
+\fBuseradd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation d\'utilisateurs syst\(`eme\&.
+.RE
+.PP
+\fBUID_MAX\fR (nombre), \fBUID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques d\'utilisateurs que les commandes
+\fBuseradd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation d\'utilisateurs normaux\&.
+.RE
+.PP
+\fBUMASK\fR (nombre)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(1),
+\fBuseradd\fR(8)\&.
diff --git a/man/fr/passwd.1 b/man/fr/passwd.1
new file mode 100644 (file)
index 0000000..86a310c
--- /dev/null
@@ -0,0 +1,383 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes utilisateur
+.\"    Source: Commandes utilisateur
+.\"  Language: French
+.\"
+.TH "PASSWD" "1" "24/07/2009" "Commandes utilisateur" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+passwd \- Modifier le mot de passe d\'un utilisateur
+.SH "SYNOPSIS"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIoptions\fR] [\fILOGIN\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBpasswd\fR
+command changes passwords for user accounts\&. A normal user may only change the password for his/her own account, while the superuser may change the password for any account\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "Modifications du mot de passe"
+.PP
+The user is first prompted for his/her old password, if one is present\&. This password is then encrypted and compared against the stored password\&. The user has only one chance to enter the correct password\&. The superuser is permitted to bypass this step so that forgotten passwords may be changed\&.
+.PP
+Une fois que le mot de passe a \('et\('e entr\('e, les informations de limite de validit\('e du mot de passe sont v\('erifi\('ees pour s\'assurer que l\'utilisateur est autoris\('e \(`a modifier son mot de passe \(`a cet instant\&. Dans le cas contraire,
+\fBpasswd\fR
+refuse de changer le mot de passe, et quitte\&.
+.PP
+Le nouveau mot de passe sera demand\('e deux fois \(`a l\'utilisateur\&. Le second mot de passe est compar\('e avec le premier\&. Ces deux mots de passe devront \(^etre identiques pour que le mot de passe soit chang\('e\&.
+.PP
+La complexit\('e de ce mot de passe est alors test\('ee\&. Comme ligne de conduite g\('en\('erale, un mot de passe doit toujours \(^etre constitu\('e de 6 \(`a 8 caract\(`eres en en choisissant un ou plus parmi chacun des ensembles suivants\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+caract\(`eres alphab\('etiques minuscules
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+chiffres de 0 \(`a 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+marques de ponctuation
+.RE
+.PP
+Il faudra faire attention \(`a ne pas utiliser les caract\(`eres de suppression ou d\'effacement\&.
+\fBPasswd\fR
+rejettera tout mot de passe dont la complexit\('e ne sera pas suffisante\&.
+.SS "Astuces pour les mots de passe"
+.PP
+La s\('ecurit\('e d\'un mot de passe repose sur la force de l\'algorithme de chiffrement et sur la taille de l\'espace de cl\('es utilis\('e\&. La m\('ethode de chiffrement des syst\(`emes
+\fIUNIX\fR
+est bas\('ee sur l\'algorithme NBS DES\&. Des m\('ethodes plus r\('ecentes sont maintenant recommand\('ees (voir
+\fBENCRYPT_METHOD\fR)\&. La taille de l\'espace de cl\('es d\('epend de l\'al\('ea du mot de passe utilis\('e\&.
+.PP
+Les compromissions de la s\('ecurit\('e des mots de passe r\('esultent le plus souvent d\'une n\('egligence dans le choix du mot de passe, ou lors de son utilisation\&. Pour cette raison, vous ne devez pas s\('electionner de mot de passe apparaissant dans un dictionnaire ou devant \(^etre \('ecrit\&. Le mot de passe ne doit pas non plus \(^etre un nom propre, un num\('ero min\('eralogique, une date de naissance, ou une adresse\&. En effet ceux\-ci pourraient \(^etre devin\('es pour violer la s\('ecurit\('e du syst\(`eme\&.
+.PP
+You can find advices on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "OPTIONS"
+.PP
+Les options disponibles pour la commande
+\fBpasswd\fR
+sont\ \&:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Cette option ne peut \(^etre utilis\('ee qu\'avec
+\fB\-S\fR
+et permet d\'afficher l\'\('etat des mots de passe pour tous les utilisateurs\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+Supprime le mot de passe (le rend vide) d\'un utilisateur\&. C\'est une fa\(,con rapide de supprimer l\'authentification par mot de passe pour un compte\&. Il rend le compte indiqu\('e sans mot de passe\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+Annule imm\('ediatement la validit\('e du mot de passe d\'un compte\&. Ceci permet d\'obliger un utilisateur \(`a changer son mot de passe lors de sa prochaine connexion\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\'aide et quitter\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR \fIDUR\('EE_INACTIVIT\('E\fR
+.RS 4
+Cette option permet de d\('esactiver un compte un certain nombre de jours apr\(`es que son mot de passe soit arriv\('e en fin de validit\('e\&. Apr\(`es qu\'un mot de passe soit arriv\('e en fin de validit\('e depuis plus de
+\fIDUR\('EE_INACTIVIT\('E\fR
+jours, l\'utilisateur ne pourra plus se connecter avec ce compte\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Indicate password change should be performed only for expired authentication tokens (passwords)\&. The user wishes to keep their non\-expired tokens as before\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Lock the password of the named account\&. This option disables a password by changing it to a value which matches no possible encrypted value (it adds a \(aa!\(aa at the beginning of the password)\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\'s expire date to Jan 2, 1970)\&.
+.sp
+Users with a locked password are not allowed to change their password\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR \fIMIN_DAYS\fR
+.RS 4
+D\('efinit le nombre minimum de jours entre chaque changement de mot de passe \(`a
+\fIMIN_DAYS\fR\&. Une valeur de z\('ero pour ce champ indique que l\'utilisateur peut changer son mot de passe quand il le souhaite\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Mode silencieux\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR \fIREPOSITORY\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Afficher l\'\('etat d\'un compte\&. Cet \('etat est constitu\('e de 7 champs\&. Le premier champ est le nom du compte\&. Le second champ indique si le mot de passe est bloqu\('e (L), n\'a pas de mot de passe (NP) ou a un mot de passe utilisable (P)\&. Le troisi\(`eme champ donne la date de derni\(`ere modification du mot de passe\&. Les quatre champs suivants sont\ \&: la dur\('ee minimum avant modification, la dur\('ee maximum de validit\('e, la dur\('ee d\'avertissement, et la dur\('ee d\'inactivit\('e autoris\('ee pour le mot de passe\&. Les dur\('ees sont exprim\('ees en jours\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+D\('everrouille le mot de passe du compte indiqu\('e\&. Cette option r\('eactive un mot de passe en remettant le mot de passe \(`a sa valeur pr\('ec\('edente (la valeur pr\('esente avant l\'utilisation de l\'option
+\fB\-l\fR)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR \fIDUR\('EE_AVERTISSEMENT\fR
+.RS 4
+Fixe le nombre de jours d\'avertissement avant que le changement de mot de passe ne soit obligatoire\&. La valeur
+\fIDUR\('EE_AVERTISSEMENT\fR
+est le nombre de jours pr\('ec\('edant la fin de validit\('e pendant lesquels un utilisateur sera pr\('evenu que son mot de passe est sur le point d\'arriver en fin de validit\('e\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR \fIJOURS_MAX\fR
+.RS 4
+Fixe le nombre maximum de jours pendant lesquels un mot de passe reste valable\&. Apr\(`es
+\fIJOURS_MAX\fR, le mot de passe devra \(^etre modifi\('e\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+La v\('erification de la complexit\('e des mots de passe peut varier d\'un site \(`a l\'autre\&. Il est vivement conseill\('e aux utilisateurs de choisir un mot de passe aussi complexe que possible dans la limite de ce qu\'il est capable de m\('emoriser\&.
+.PP
+Il se peut que les utilisateurs ne puisse pas changer leur mot de passe sur un syst\(`eme si NIS est activ\('e et qu\'ils ne sont pas connect\('es au serveur NIS\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBENCRYPT_METHOD\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+D\('efinit les algorithmes de chiffrement par d\('efaut du syst\(`eme pour coder les mots de passes (si aucun algorithme n\'a \('et\('e indiqu\('e sur la ligne de commandes)\&.
+.sp
+Il peut prendre une de ces valeurs\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(par d\('efaut)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Remarque\ \&: ce param\(`etre remplace la variable
+\fBMD5_CRYPT_ENAB\fR\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (bool\('een)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (bool\('een)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (bool\('een)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (nombre)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (nombre), \fBPASS_MIN_LEN\fR (nombre)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\'t change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (nombre), \fBSHA_CRYPT_MAX_ROUNDS\fR (nombre)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+La commande
+\fBpasswd\fR
+retourne les valeurs suivantes en quittant\ \&:
+.PP
+\fI0\fR
+.RS 4
+succ\(`es
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission refus\('ee
+.RE
+.PP
+\fI2\fR
+.RS 4
+combinaison d\'options non valable
+.RE
+.PP
+\fI3\fR
+.RS 4
+\('echec inattendu, rien n\'a \('et\('e fait
+.RE
+.PP
+\fI4\fR
+.RS 4
+\('echec inattendu, le fichier
+passwd
+est manquant
+.RE
+.PP
+\fI5\fR
+.RS 4
+fichier
+passwd
+en cours d\'utilisation, veuillez r\('eessayer plus tard
+.RE
+.PP
+\fI6\fR
+.RS 4
+param\(`etre non valable pour l\'option
+.RE
+.SH "VOIR AUSSI"
+.PP
+
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/passwd.5 b/man/fr/passwd.5
new file mode 100644 (file)
index 0000000..4adc235
--- /dev/null
@@ -0,0 +1,162 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Formats et conversions de fichiers
+.\"    Source: Formats et conversions de fichiers
+.\"  Language: French
+.\"
+.TH "PASSWD" "5" "24/07/2009" "Formats et conversions de fich" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+passwd \- fichier des mots de passe
+.SH "DESCRIPTION"
+.PP
+/etc/passwd
+contient diff\('erentes informations sur les comptes utilisateurs\&. Ces informations consistent en sept champs s\('epar\('es par des deux\-points (\(Fo\ \&:\ \&\(Fc)\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+nom de connexion de l\'utilisateur (\(Fo\ \&login\ \&\(Fc)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+un mot de passe chiffr\('e optionnel
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+l\'identifiant num\('erique de l\'utilisateur
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+l\'identifiant num\('erique du groupe de l\'utilisateur
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+le nom complet de l\'utilisateur ou un champ de commentaires
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+le r\('epertoire personnel de l\'utilisateur
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+l\'interpr\('eteur de commandes de l\'utilisateur (optionnel)
+.RE
+.PP
+Le champ du mot de passe chiffr\('e peut \(^etre vide\&. Dans ce cas, aucun mot de passe n\'est n\('ecessaire pour s\'authentifier avec le compte donn\('e\&. Cependant, certaines applications qui lisent le fichier
+/etc/passwd
+peuvent d\('ecider de ne donner aucun acc\(`es si le
+\fImot de\fR
+passe est vide\&. Si le mot de passe est un
+\(Fo\ \&x\ \&\(Fc
+minuscule, alors le mot de passe chiffr\('e se trouve dans le fichier
+\fBshadow\fR(5)\ \&; il
+\fIdoit\fR
+y avoir une ligne correspondante dans le fichier
+shadow, sinon le compte de l\'utilisateur n\'est pas valide\&. Si le mot de passe est constitu\('e d\'une autre cha\(^ine, alors il est consid\('er\('e comme un mot de passe chiffr\('e, comme indiqu\('e dans
+\fBcrypt\fR(3)\&.
+.PP
+Le champ de commentaire est utilis\('e par diff\('erents utilitaires syst\(`eme, tels que
+\fBfinger\fR(1)\&.
+.PP
+Le champ du r\('epertoire personnel de l\'utilisateur correspond au nom du r\('epertoire de travail initial\&.
+\fBLogin\fR
+utilise cette information pour d\('efinir la valeur de la variable d\'environnement
+\fB$HOME\fR\&.
+.PP
+Le champ de l\'interpr\('eteur de commandes correspond au nom de l\'interpr\('eteur de commandes de l\'utilisateur, ou au nom d\'un programme initial \(`a ex\('ecuter\&.
+\fBLogin\fR
+utilise cette information pour d\('efinir la valeur de la variable d\'environnement
+\fB$SHELL\fR\&. Si ce champ est vide,
+/bin/sh
+est utilis\('e par d\('efaut\&.
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+un mot de passe chiffr\('e optionnel
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+Backup file for /etc/passwd\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/fr/porttime.5 b/man/fr/porttime.5
new file mode 100644 (file)
index 0000000..829bb4a
--- /dev/null
@@ -0,0 +1,90 @@
+'\" t
+.\"     Title: porttime
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Formats et conversions de fichiers
+.\"    Source: Formats et conversions de fichiers
+.\"  Language: French
+.\"
+.TH "PORTTIME" "5" "24/07/2009" "Formats et conversions de fich" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+porttime \- Fichier de configuration des droits d\'acc\(`es en fonction de la date et de l\'heure
+.SH "DESCRIPTION"
+.PP
+\fIporttime\fR
+contient une liste de tty, noms d\'utilisateurs, et horaires d\'acc\(`es autoris\('es\&.
+.PP
+Chaque entr\('ee consiste en trois champs s\('epar\('es par un caract\(`ere deux\-points \(Fo\ \&:\ \&\(Fc\&. Le premier champ est une liste de tty s\('epar\('es par des virgules, ou un ast\('erisque \(Fo\ \&*\ \&\(Fc pour indiquer que l\'entr\('ee correspond \(`a toutes les tty\&. Le second champ est une liste de noms d\'utilisateurs, ou un ast\('erisque pour indiquer que cette entr\('ee correspond \(`a n\'importe quel utilisateur\&. Le troisi\(`eme champ est une liste d\'horaires d\'acc\(`es autoris\('es\&.
+.PP
+Chaque horaire d\'acc\(`es consiste en z\('ero ou plusieurs abr\('eviations de jours de la semaine\ \&:
+\fISu\fR
+(dimanche),
+\fIMo\fR
+(lundi),
+\fITu\fR
+(mardi),
+\fIWe\fR
+(mercredi),
+\fITh\fR
+(jeudi),
+\fIFr\fR
+(vendredi),
+\fISa\fR
+(samedi), suivi d\'un couple d\'horaires s\('epar\('es par un tiret\&. L\'abr\('eviation
+\fIWk\fR
+peut \(^etre utilis\('ee pour repr\('esenter les jours de la semaine du lundi au vendredi, et
+\fIAl\fR
+permet de sp\('ecifier l\'ensemble des jours de la semaine\&. Par d\('efaut, si aucun jour n\'est sp\('ecifi\('e,
+\fIAl\fR
+est utilis\('e\&.
+.SH "EXEMPLES"
+.PP
+L\'entr\('ee suivante autorise l\'acc\(`es \(`a l\'utilisateur
+\fBjfh\fR
+sur n\'importe quel port pendant la semaine de 9 heures \(`a 17 heures\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+L\'entr\('ee suivante autorise l\'acc\(`es \(`a /dev/console uniquement aux utilisateurs
+\fIroot\fR
+et
+\fIoper\fR
+\(`a n\'importe quelle heure\&. Ceci permet de montrer l\'importance de l\'ordre des entr\('ees dans le fichier
+/etc/porttime\&. Les autres utilisateurs ne satisferont que la deuxi\(`eme entr\('ee, qui n\'autorise aucun acc\(`es\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      console:root,oper:Al0000\-2400
+      console:*:
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+L\'entr\('ee suivante autorise l\'acc\(`es \(`a tous les ports pour l\'utilisateur
+\fIgames\fR, en dehors des heures de travail\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "FICHIERS"
+.PP
+/etc/porttime
+.RS 4
+Fichier contenant le port d\'acc\(`es\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/fr/pwck.8 b/man/fr/pwck.8
new file mode 100644 (file)
index 0000000..40387cc
--- /dev/null
@@ -0,0 +1,296 @@
+'\" t
+.\"     Title: pwck
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "PWCK" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+pwck \- V\('erifier l\'int\('egrit\('e des fichiers de mots de passe
+.SH "SYNOPSIS"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [\-q] [\-s] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [\-q] [\-r] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Voici les v\('erifications effectu\('ees\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+nombre correct de champs
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+validit\('e des identifiants d\'utilisateur et de groupe
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+validit\('e du groupe primaire
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+validit\('e du r\('epertoire personnel
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+validit\('e de l\'interpr\('eteur de commandes initial (\(Fo\ \&login shell\ \&\(Fc)
+.RE
+.PP
+
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+These checks are the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+every passwd entry has a matching shadow entry, and every shadow entry has a matching passwd entry
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+passwords are specified in the shadowed file
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries have the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries are unique in shadow
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the last password changes are not in the future
+.RE
+.PP
+Une erreur dans le nombre de champs ou la non unicit\('e d\'un nom d\'utilisateur sera fatale\&. Si le nombre de champs n\'est pas correct, il sera demand\('e \(`a l\'utilisateur de supprimer la ligne\&. Si l\'utilisateur ne r\('epond pas par l\'affirmative, les v\('erifications suivantes ne seront pas effectu\('ees\&. Il sera \('egalement demand\('e de supprimer les entr\('ees correspondant aux noms d\'utilisateur redondants, mais dans ce cas, les autres v\('erifications seront effectu\('ees\&. Toutes les autres erreurs ne sont que des avertissements et l\'utilisateur est encourag\('e \(`a utiliser
+\fBusermod\fR
+pour les corriger\&.
+.PP
+Les commandes qui op\(`erent sur le fichier
+/etc/passwd
+ne peuvent pas modifier les entr\('ees corrompues ou redondantes\&.
+\fBPwck\fR
+doit \(^etre utilis\('e dans ce cas pour retirer ces entr\('ees\&.
+.SH "OPTIONS"
+.PP
+Les options disponibles pour la commande
+\fBpwck\fR
+sont\ \&:
+.PP
+\fB\-q\fR
+.RS 4
+Ne signaler que les erreurs\&. Les avertissements qui ne n\('ecessite pas une action de la part de l\'utilisateur ne seront pas affich\('es\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Permet d\'ex\('ecuter
+\fBpwck\fR
+dans le mode lecture seule\&.
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+Trie les entr\('ees de
+/etc/passwd
+et
+/etc/shadow
+par UID\&.
+.RE
+.PP
+Par d\('efaut,
+\fBpwck\fR
+op\(`ere sur les fichiers
+/etc/passwd
+et
+/etc/shadow\&. L\'utilisateur peut sp\('ecifier d\'autres fichiers avec les param\(`etres
+\fIfichier_passwd\fR
+et
+\fIfichier_shadow\fR\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBPASS_MAX_DAYS\fR (nombre)
+.RS 4
+Nombre maximum de jours de validit\('e d\'un mot de passe\&. Apr\(`es cette dur\('ee, une modification du mot de passe est obligatoire\&. S\'il n\'est pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (nombre)
+.RS 4
+Nombre minimum de jours autoris\('e avant la modification d\'un mot de passe\&. Toute tentative de modification du mot de passe avant cette dur\('ee est rejet\('ee\&. S\'il n\'est pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (nombre)
+.RS 4
+Nombre de jours durant lesquels l\'utilisateur recevra un avertissement avant que son mot de passe n\'arrive en fin de validit\('e\&. Une valeur n\('egative signifie qu\'aucun avertissement n\'est donn\('e\&. S\'il n\'est pas pr\('ecis\('e, aucun avertissement n\'est donn\('e\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+La commande
+\fBpwck\fR
+retourne les valeurs suivantes en quittant\ \&:
+.PP
+\fI0\fR
+.RS 4
+succ\(`es
+.RE
+.PP
+\fI1\fR
+.RS 4
+erreur de syntaxe
+.RE
+.PP
+\fI2\fR
+.RS 4
+une entr\('ee de mot de passe ou plus est incorrecte
+.RE
+.PP
+\fI3\fR
+.RS 4
+impossible d\'ouvrir les fichiers de mots de passe
+.RE
+.PP
+\fI4\fR
+.RS 4
+impossible de verrouiller les fichiers de mots de passe
+.RE
+.PP
+\fI5\fR
+.RS 4
+impossible de mettre \(`a jour les fichiers des mots de passe
+.RE
+.PP
+\fI6\fR
+.RS 4
+impossible de trier les fichiers de mots de passe
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/pwconv.8 b/man/fr/pwconv.8
new file mode 100644 (file)
index 0000000..ad66cb0
--- /dev/null
@@ -0,0 +1,172 @@
+'\" t
+.\"     Title: pwconv
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "PWCONV" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+pwconv, pwunconv, grpconv, grpunconv \- Convertir vers ou depuis les fichiers de mots de passe ou de groupe cach\('es
+.SH "SYNOPSIS"
+.HP \w'\fBpwconv\fR\ 'u
+\fBpwconv\fR
+.HP \w'\fBpwunconv\fR\ 'u
+\fBpwunconv\fR
+.HP \w'\fBgrpconv\fR\ 'u
+\fBgrpconv\fR
+.HP \w'\fBgrpunconv\fR\ 'u
+\fBgrpunconv\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBpwconv\fR
+command creates
+\fIshadow\fR
+from
+\fIpasswd\fR
+and an optionally existing
+\fIshadow\fR\&.
+.PP
+The
+\fBpwunconv\fR
+command creates
+\fIpasswd\fR
+from
+\fIpasswd\fR
+and
+\fIshadow\fR
+and then removes
+\fIshadow\fR\&.
+.PP
+The
+\fBgrpconv\fR
+command creates
+\fIgshadow\fR
+from
+\fIgroup\fR
+and an optionally existing
+\fIgshadow\fR\&.
+.PP
+The
+\fBgrpunconv\fR
+command creates
+\fIgroup\fR
+from
+\fIgroup\fR
+and
+\fIgshadow\fR
+and then removes
+\fIgshadow\fR\&.
+.PP
+Ces quatre programmes op\(`erent sur les fichiers de mots de passe et d\'informations sur les groupes cach\('es ou non\ \&:
+/etc/passwd,
+/etc/group,
+/etc/shadow, et
+/etc/gshadow\&.
+.PP
+Chaque programme place les verrous n\('ecessaires avant d\'effectuer la conversion\&.
+\fBPwconv\fR
+et
+\fBgrpconv\fR
+sont similaires\&. Dans un premier temps, les entr\('ees du fichier de mots de passe cach\('es (/etc/shadow
+ou
+/etc/gshadow) qui n\'existent pas dans le fichier principal (passwd
+ou
+group), sont retir\('ees\&. Ensuite, les entr\('ees du fichier
+shadow
+n\'ayant pas pour mot de passe \(Fo\ \&x\ \&\(Fc dans le fichier
+passwd
+sont mises \(`a jour\&. Enfin, les mots de passe du fichier
+passwd
+sont remplac\('es par \(Fo\ \&x\ \&\(Fc\&. Ces programmes peuvent \(^etre utilis\('es pour une premi\(`ere conversion, ou bien pour une mise \(`a jour, si les fichiers principaux [\ \&NdT\ \&: non cach\('es\ \&] ont \('et\('e \('edit\('es \(`a la main\&.
+.PP
+Lors de l\'ajout de nouvelles entr\('ees dans
+/etc/shadow,
+\fBpwconv\fR
+utilisera les valeurs de
+\fIPASS_MIN_DAYS\fR,
+\fIPASS_MAX_DAYS\fR, et
+\fIPASS_WARN_AGE\fR
+d\('efinies dans le fichier
+/etc/login\&.defs\&.
+.PP
+De m\(^eme,
+\fBpwunconv\fR
+et
+\fBgrpunconv\fR
+sont similaires\&. Les mots de passe des fichiers principaux sont mis \(`a jour \(`a partir des fichiers d\'informations cach\('ees (\(Fo\ \&shadowed file\ \&\(Fc)\&. Les entr\('ees existant dans un fichier principal, mais pas dans le fichier cach\('e sont laiss\('ees\&. Enfin, le fichier cach\('e est supprim\('e\&. Certaines informations d\'\(^age des mots de passe sont perdues par
+\fBpwunconv\fR\&. Il ne convertit que ce qu\'il peut\&.
+.SH "BOGUES"
+.PP
+Des erreurs dans les fichiers de mots de passe ou d\'informations sur les groupes (comme des entr\('ees invalides ou redondantes) peuvent conduire ces programmes \(`a boucler ind\('efiniment ou \(`a \('echouer d\'une mani\(`ere toute aussi \('etrange\&. Veuillez ex\('ecuter
+\fBpwck\fR
+et
+\fBgrpck\fR
+pour corriger ces erreurs avant lancer toute conversion\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variable in
+/etc/login\&.defs
+changes the behavior of
+\fBgrpconv\fR
+and
+\fBgrpunconv\fR:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (nombre)
+.RS 4
+Nombre maximum de membres par entr\('ee de groupe\&. Lorsque le maximum est atteint, une nouvelle entr\('ee de groupe (ligne) est d\('emarr\('ee dans
+/etc/group
+(avec le m\(^eme nom, m\(^eme mot de passe, et m\(^eme GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\'il n\'y a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\'assurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de fixer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\'outils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of
+\fBpwconv\fR:
+.PP
+\fBPASS_MAX_DAYS\fR (nombre)
+.RS 4
+Nombre maximum de jours de validit\('e d\'un mot de passe\&. Apr\(`es cette dur\('ee, une modification du mot de passe est obligatoire\&. S\'il n\'est pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (nombre)
+.RS 4
+Nombre minimum de jours autoris\('e avant la modification d\'un mot de passe\&. Toute tentative de modification du mot de passe avant cette dur\('ee est rejet\('ee\&. S\'il n\'est pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (nombre)
+.RS 4
+Nombre de jours durant lesquels l\'utilisateur recevra un avertissement avant que son mot de passe n\'arrive en fin de validit\('e\&. Une valeur n\('egative signifie qu\'aucun avertissement n\'est donn\('e\&. S\'il n\'est pas pr\('ecis\('e, aucun avertissement n\'est donn\('e\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBgrpck\fR(8),
+\fBlogin.defs\fR(5),
+\fBpwck\fR(8)\&.
diff --git a/man/fr/pwunconv.8 b/man/fr/pwunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/fr/sg.1 b/man/fr/sg.1
new file mode 100644 (file)
index 0000000..de2f17a
--- /dev/null
@@ -0,0 +1,85 @@
+'\" t
+.\"     Title: sg
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes utilisateur
+.\"    Source: Commandes utilisateur
+.\"  Language: French
+.\"
+.TH "SG" "1" "24/07/2009" "Commandes utilisateur" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+sg \- ex\('ecuter une commande avec un autre identifiant de groupe
+.SH "SYNOPSIS"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [groupe\ [\-c]\ commande]
+.SH "DESCRIPTION"
+.PP
+La commande
+\fBsg\fR
+fonctionne de la m\(^eme mani\(`ere que
+\fBnewgrp\fR, mais prend une commande comme param\(`etre\&. Cette commande sera ex\('ecut\('ee avec un interpr\('eteur de commandes
+/bin/sh\&. Avec la plupart des interpr\('eteurs de commandes permettant d\'ex\('ecuter
+\fBsg\fR, si la commande comporte plusieurs mots, il faut la placer entre des guillemets (\(Fo\ \&"\ \&\(Fc)\&. Une autre diff\('erence entre
+\fBnewgrp\fR
+et
+\fBsg\fR
+est que certains interpr\('eteurs de commandes traitent
+\fBnewgrp\fR
+de fa\(,con particuli\(`ere, en se rempla\(,cant eux\-m\(^emes par une nouvelle instance d\'un interpr\('eteur que
+\fBnewgrp\fR
+cr\('ee\&. Ceci n\'est pas le cas de
+\fBsg\fR, ce qui permet de retrouver le groupe pr\('ec\('edent \(`a la sortie de
+\fBsg\fR\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBSYSLOG_SG_ENAB\fR (bool\('een)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/fr/shadow.3 b/man/fr/shadow.3
new file mode 100644 (file)
index 0000000..c7fe095
--- /dev/null
@@ -0,0 +1,244 @@
+'\" t
+.\"     Title: shadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Appels de biblioth\(`eque
+.\"    Source: Appels de biblioth\(`eque
+.\"  Language: French
+.\"
+.TH "SHADOW" "3" "24/07/2009" "Appels de biblioth\(`eque" "Appels de biblioth\(`eque"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+shadow, getspnam \- routines d\'utilisation des mots de passe cach\('es
+.SH "SYNTAX"
+.PP
+
+\fI#include <shadow\&.h>\fR
+.PP
+
+\fIstruct spwd *getspent();\fR
+.PP
+
+\fIstruct spwd *getspnam(char\fR
+\fI*nom\fR\fI);\fR
+.PP
+
+\fIvoid setspent();\fR
+.PP
+
+\fIvoid endspent();\fR
+.PP
+
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIFICHIER\fR
+\fI*fp\fR\fI);\fR
+.PP
+
+\fIint lckpwdf();\fR
+.PP
+
+\fIint ulckpwdf();\fR
+.SH "DESCRIPTION"
+.PP
+\fIshadow\fR
+manipule le contenu du fichier des mots de passe cach\('es,
+/etc/shadow\&. La structure d\('efinie dans le fichier inclus est\ \&:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+      char             *sp_namp; /* nom de connexion de l\'utilisateur */
+      char             *sp_pwdp; /* mot de passe chiffr\('e */
+      long int         sp_lstchg; /* dernier changement de mot de passe */
+      long int         sp_min; /* jours avant de pouvoir changer de mot de passe */
+      long int         sp_max; /* jours avant l\'obligation de changer de mot de passe */
+      long int         sp_warn; /* jours d\'avertissement avant la fin de validit\('e */
+      long int         sp_inact; /* jours avant que le compte soit inactif */
+      long int         sp_expire; /* date de fin de validit\('e du compte */
+      unsigned long int        sp_flag; /* r\('eserv\('e pour une utilisation future */
+}
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+La signification de chaque champ est la suivante\ \&:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- pointeur vers le nom d\'utilisateur termin\('e par un z\('ero binaire (\(Fo\ \&null\-terminated\ \&\(Fc)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- pointeur vers le mot de passe termin\('e par un z\('ero binaire ( \(Fo\ \&null\-terminated\ \&\(Fc)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- nombre de jours, compt\('es \(`a partir du 1er janvier 1970, depuis la derni\(`ere modification du mot de passe
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- nombre de jours pendant lesquels le mot de passe ne peut pas \(^etre chang\('e
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- nombre maximal de jours avant que le mot de passe doive \(^etre chang\('e
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- nombre de jours avant que le mot de passe n\'arrive en fin de validit\('e pendant lesquels l\'utilisateur est averti de la fin prochaine de la validit\('e de son mot de passe
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- nombre de jours apr\(`es la fin de validit\('e du mot de passe avant de consid\('erer que le compte est inactif et soit d\('esactiv\('e
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- nombre de jours, compt\('es \(`a partir du 1er janvier 1970, apr\(`es lesquels le compte sera d\('esactiv\('e
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- r\('eserv\('e pour une utilisation future
+.RE
+.SH "DESCRIPTION"
+.PP
+\fIGetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, et
+\fIsgetspent\fR
+renvoient tous un pointeur vers une structure
+\fIstruct spwd\fR\&.
+\fIGetspent\fR
+renvoie l\'entr\('ee suivante du fichier, et
+\fIfgetspent\fR
+renvoie l\'entr\('ee suivante du flux qui est consid\('er\('e comme \('etant un fichier au format correct\&.
+\fISgetspent\fR
+renvoie un pointeur vers une structure
+\fIstruct spwd\fR
+en utilisant la cha\(^ine de caract\(`ere fournie en entr\('ee\&.
+\fIGetspnam\fR
+cherche \(`a partir de la position courante une entr\('ee correspondant \(`a
+\fInom\fR
+dans le fichier fourni en entr\('ee\&.
+.PP
+\fISetspent\fR
+et
+\fIendspent\fR
+peuvent \(^etre utilis\('es pour d\('ebuter et terminer l\'acc\(`es au fichier de mots de passe cach\('es\&.
+.PP
+Les fonctions
+\fIlckpwdf\fR
+et
+\fIulckpwdf\fR
+doivent \(^etre utilis\('ees pour garantir un acc\(`es exclusif au fichier
+/etc/shadow\&.
+\fILckpwdf\fR
+essaie de placer un verrou avec
+\fIpw_lock\fR
+pendant 15 secondes\&. Il essaie ensuite de placer un second verrou en utilisant
+\fIspw_lock\fR
+pendant le reste de ces 15 secondes\&. Si un de ces verrous ne peut \(^etre plac\('e,
+\fIlckpwdf\fR
+renvoie \-1\&. Quand les deux verrous peuvent \(^etre plac\('es, la valeur 0 est renvoy\('ee\&.
+.SH "DIAGNOSTICS"
+.PP
+Les fonctions renvoient NULL si plus aucune entr\('ee n\'est disponible ou si une erreur est survenue lors du traitement\&. Les fonctions dont la valeur de retour est un
+\fIint\fR
+renvoient 0 en cas de succ\(`es et \-1 en cas d\'\('echec\&.
+.SH "AVERTISSEMENTS"
+.PP
+These routines may only be used by the superuser as access to the shadow password file is restricted\&.
+.SH "FICHIERS"
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/fr/shadow.5 b/man/fr/shadow.5
new file mode 100644 (file)
index 0000000..58a8174
--- /dev/null
@@ -0,0 +1,139 @@
+'\" t
+.\"     Title: shadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Formats et conversions de fichiers
+.\"    Source: Formats et conversions de fichiers
+.\"  Language: French
+.\"
+.TH "SHADOW" "5" "24/07/2009" "Formats et conversions de fich" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+shadow \- shadowed password file
+.SH "DESCRIPTION"
+.PP
+shadow
+est un fichier qui contient les informations cach\('ees concernant les mots de passe des utilisateurs et leurs dates de validit\('e\&.
+.PP
+Ce fichier ne doit pas \(^etre accessible en lecture par les utilisateurs normaux afin de maintenir la s\('ecurit\('e des mots de passe, en particuliers pour pr\('evenir les attaques par dictionnaires\&.
+.PP
+Each line of this file contains 9 fields, separated by colons (\(Fo\ \&:\ \&\(Fc), in the following order:
+.PP
+\fBnom de connexion de l\'utilisateur (\(Fo\ \&login\ \&\(Fc)\fR
+.RS 4
+It must be a valid account name, which exist on the system\&.
+.RE
+.PP
+\fBmot de passe chiffr\('e\fR
+.RS 4
+Consultez
+\fBcrypt\fR(3)
+pour plus d\'informations sur le traitement de cette cha\(^ine\&.
+.sp
+Si le champ du mot de passe contient une cha\(^ine qui ne peut pas \(^etre un r\('esultat valable de
+\fBcrypt\fR(3), par exemple si elle contient les caract\(`eres ! ou *, alors l\'utilisateur ne pourra pas utiliser son mot de passe UNIX pour se connecter (mais il se peut que l\'utilisateur puisse se connecter au syst\(`eme par d\'autres moyens)\&.
+.sp
+This field may be empty, in which case no passwords are required to authenticate as the specified login name\&. However, some applications which read the
+/etc/shadow
+file may decide not to permit any access at all if the password field is empty\&.
+.sp
+A password field which starts with a exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.RE
+.PP
+\fBdate du dernier changement de mot de passe\fR
+.RS 4
+The date of the last password change, expressed as the number of days since Jan 1, 1970\&.
+.sp
+The value 0 has a special meaning, which is that the user should change her pasword the next time she will log in the system\&.
+.sp
+An empty field means that password aging features are disabled\&.
+.RE
+.PP
+\fBage minimum du mot de passe\fR
+.RS 4
+The minimum password age is the number of days the user will have to wait before she will be allowed to change her password again\&.
+.sp
+An empty field and value 0 mean that there are no minimum password age\&.
+.RE
+.PP
+\fBage maximum du mot de passe\fR
+.RS 4
+The maximum password age is the number of days after which the user will have to change her password\&.
+.sp
+After this number of days is elapsed, the password may still be valid\&. The user should be asked to change her password the next time she will log in\&.
+.sp
+An empty field means that there are no maximum password age, no password warning period, and no password inactivity period (see below)\&.
+.sp
+If the maximum password age is lower than the minimum password age, the user cannot change her password\&.
+.RE
+.PP
+\fBpassword warning period\fR
+.RS 4
+The number of days before a password is going to expire (see the maximum password age above) during which the user should be warned\&.
+.sp
+An empty field and value 0 mean that there are no password warning period\&.
+.RE
+.PP
+\fBpassword inactivity period\fR
+.RS 4
+The number of days after a password has expired (see the maximum password age above) during which the password should still be accepted (and the user should update her password during the next login)\&.
+.sp
+After expiration of the password and this expiration period is elapsed, no login is possible using the current user\'s password\&. The user should contact her administrator\&.
+.sp
+An empty field means that there are no enforcement of an inactivity period\&.
+.RE
+.PP
+\fBdate de fin de validit\('e du compte\fR
+.RS 4
+The date of expiration of the account, expressed as the number of days since Jan 1, 1970\&.
+.sp
+Note that an account expiration differs from a password expiration\&. In case of an acount expiration, the user shall not be allowed to login\&. In case of a password expiration, the user is not allowed to login using her password\&.
+.sp
+An empty field means that the account will never expire\&.
+.sp
+The value 0 should not be used as it is interpreted as either an account with no expiration, or as an expiration on Jan 1, 1970\&.
+.RE
+.PP
+\fBchamp r\('eserv\('e\fR
+.RS 4
+Ce champ est r\('eserv\('e pour une utilisation future\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/shadow\-
+.RS 4
+Backup file for /etc/shadow\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/fr/su.1 b/man/fr/su.1
new file mode 100644 (file)
index 0000000..a2c36d0
--- /dev/null
@@ -0,0 +1,398 @@
+'\" t
+.\"     Title: su
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes utilisateur
+.\"    Source: Commandes utilisateur
+.\"  Language: French
+.\"
+.TH "SU" "1" "24/07/2009" "Commandes utilisateur" "Commandes utilisateur"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+su \- change user ID or become superuser
+.SH "SYNOPSIS"
+.HP \w'\fBsu\fR\ 'u
+\fBsu\fR [\fIoptions\fR] [\fInom_utilisateur\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBsu\fR
+command is used to become another user during a login session\&. Invoked without a
+\fBusername\fR,
+\fBsu\fR
+defaults to becoming the superuser\&. The optional argument
+\fB\-\fR
+may be used to provide an environment similar to what the user would expect had the user logged in directly\&.
+.PP
+Des param\(`etres suppl\('ementaires peuvent \(^etre fournis apr\(`es le nom de l\'utilisateur\&. Dans ce cas, ils sont donn\('es \(`a l\'interpr\('eteur de commandes de connexion de l\'utilisateur\&. En particulier, le param\(`etre \(Fo\ \&\fB\-c\fR\ \&\(Fc consid\(`ere que le param\(`etre suivant est une commande pour la plupart des interpr\('eteurs de commandes\&. La commande sera ex\('ecut\('ee par l\'interpr\('eteur indiqu\('e dans
+/etc/passwd
+pour l\'utilisateur cible\&.
+.PP
+Vous pouvez utiliser le param\(`etre
+\fB\-\-\fR
+pour s\('eparer les options de
+\fBsu\fR
+des param\(`etres fournis par l\'interpr\('eteur de commandes\&.
+.PP
+Un mot de passe sera demand\('e \(`a l\'utilisateur, si n\('ecessaire\&. Les mots de passe incorrects produisent un message d\'erreur\&. Toutes les tentatives, r\('eussies ou non, sont enregistr\('ees afin de d\('etecter tout abus du syst\(`eme\&.
+.PP
+The current environment is passed to the new shell\&. The value of
+\fB$PATH\fR
+is reset to
+/bin:/usr/bin
+for normal users, or
+/sbin:/bin:/usr/sbin:/usr/bin
+for the superuser\&. This may be changed with the
+\fBENV_PATH\fR
+and
+\fBENV_SUPATH\fR
+definitions in
+/etc/login\&.defs\&.
+.PP
+Une connexion \(`a un sous\-syst\(`eme est indiqu\('ee par la pr\('esence d\'un \(Fo\ \&*\ \&\(Fc comme premier caract\(`ere de l\'interpr\('eteur de commandes initial\&. Le r\('epertoire personnel sera utilis\('e comme racine d\'un nouveau syst\(`eme de fichiers dans lequel l\'utilisateur sera connect\('e\&.
+.SH "OPTIONS"
+.PP
+Les options applicables \(`a la commande
+\fBsu\fR
+sont\ \&:
+.PP
+\fB\-c\fR, \fB\-\-command\fR \fICOMMAND\fR
+.RS 4
+Indiquer une commande qui sera invoqu\('ee par l\'interpr\('eteur de commandes en utilisant son option
+\fB\-c\fR
+.RE
+.PP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+.RS 4
+Fournir \(`a l\'utilisateur un environnement similaire \(`a celui qu\'il aurait obtenu s\'il s\'\('etait connect\('e directement\&.
+.sp
+Lorsque
+\fB\-\fR
+est utilis\('e, il doit \(^etre indiqu\('e comme dernier param\(`etre de
+\fBsu\fR
+option\&. Les autres formes (\fB\-l\fR
+et
+\fB\-\-login\fR) ne pr\('esentent pas cette restriction\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fIINTERPR\('ETEUR\fR
+.RS 4
+Interpr\('eteur de commande devant \(^etre appel\('e\&.
+.sp
+The invoked shell is chosen from (highest priority first):
+.PP
+.RS 4
+Interpr\('eteur de commande indiqu\('e par \-\-shell\&.
+.RE
+.PP
+.RS 4
+Si
+\fB\-\-preserve\-environment\fR
+est utilis\('e, l\'interpr\('eteur de commandes indiqu\('e par la variable d\'environnement
+\fB$SHELL\fR
+sera utilis\('e\&.
+.RE
+.PP
+.RS 4
+Interpr\('eteur de commandes indiqu\('e dans
+/etc/passwd
+pour l\'utilisateur cible\&.
+.RE
+.PP
+.RS 4
+/bin/sh
+si aucun interpr\('eteur de commandes ne peut \(^etre trouv\('e par l\'une des m\('ethodes ci\-dessus\&.
+.RE
+.sp
+If the target user has a restricted shell (i\&.e\&. the shell field of this user\'s entry in
+/etc/passwd
+is not listed in
+/etc/shell), then the
+\fB\-\-shell\fR
+option or the
+\fB$SHELL\fR
+environment variable won\'t be taken into account, unless
+\fBsu\fR
+is called by root\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+.RS 4
+Preserve the current environment, except for:
+.PP
+\fB$PATH\fR
+.RS 4
+reset according to the
+/etc/login\&.defs
+options
+\fBENV_PATH\fR
+or
+\fBENV_SUPATH\fR
+(see below);
+.RE
+.PP
+\fB$IFS\fR
+.RS 4
+reset to
+\(Fo\ \&<space><tab><newline>\ \&\(Fc, if it was set\&.
+.RE
+.sp
+Si l\'utilisateur cible poss\(`ede un interpr\('eteur de commandes restreint, cette option n\'a aucun effet (\(`a moins que
+\fBsu\fR
+ne soit appel\('e par le superutilisateur)\&.
+.sp
+Note that the default behavior for the environment is the following:
+.PP
+.RS 4
+The
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$USER\fR,
+\fB$LOGNAME\fR,
+\fB$PATH\fR, and
+\fB$IFS\fR
+environment variables are reset\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is not used, the environment is copied, except for the variables above\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TERM\fR,
+\fB$COLORTERM\fR,
+\fB$DISPLAY\fR, and
+\fB$XAUTHORITY\fR
+environment variables are copied if they were set\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TZ\fR,
+\fB$HZ\fR, and
+\fB$MAIL\fR
+environment variables are set according to the
+/etc/login\&.defs
+options
+\fBENV_TZ\fR,
+\fBENV_HZ\fR,
+\fBMAIL_DIR\fR, and
+\fBMAIL_FILE\fR
+(see below)\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, other environment variables might be set by the
+\fBENVIRON_FILE\fR
+file (see below)\&.
+.RE
+.sp
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+Cette version de
+\fBsu\fR
+a de nombreuses options de compilation\&. Seules certaines d\'entre elles peuvent avoir \('et\('e activ\('ees sur votre site\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBCONSOLE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, soit un chemin complet du fichier contenant les noms de p\('eriph\('eriques (un par ligne), soit une liste de noms du p\('eriph\('erique d\('elimit\('ee par des \(Fo\ \&:\ \&\(Fc\&. Les connexions d\'un administrateur ne seront autoris\('ees que depuis ces p\('eriph\('eriques\&.
+.sp
+S\'il n\'est pas d\('efini, root pourra se connecter depuis n\'importe quel p\('eriph\('erique\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+Une liste de groupes \(`a rajouter aux groupes suppl\('ementaires de l\'utilisateur lors d\'une connexion sur une console (d\('etermin\('e par le param\(`etre CONSOLE)\&. Par d\('efaut, aucun groupe n\'est ajout\('e\&.
+
+\(`A utiliser avec pr\('ecaution\ \&: il est possible que les utilisateurs aient un acc\(`es permanent \(`a\ \&ces groupes, et cela m\(^eme s\'ils ne sont pas connect\('es sur la console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (bool\('een)
+.RS 4
+Indiquer si la connexion est permise si on ne peut pas acc\('eder au r\('epertoire personnel\&. Le r\('eglage par d\('efaut est \(Fo\ \&no\ \&\(Fc\&.
+.sp
+S\'il est r\('egl\('e sur
+\fIyes\fR, l\'utilisateur va se connecter dans le r\('epertoire racine (/) s\'il n\'est pas possible d\'acc\('eder \(`a\ \&son r\('epertoire personnel\&.
+.RE
+.PP
+\fBENV_HZ\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, il sera utilis\('e pour d\('efinir la variable d\'environnement HZ lorsqu\'un utilisateur se connecte\&. La valeur doit \(^etre pr\('ec\('ed\('ee par
+\fIHZ=\fR\&. Une valeur commune sur Linux est
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+Si ce fichier existe et est lisible, l\'environnement de connexion sera lu \(`a\ \& partir de lui\&. Chaque ligne doit \(^etre sous la forme nom=valeur\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBENV_PATH\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, il sera utilis\('e pour d\('efinir la variable d\'environnement PATH quand un utilisateur ordinaire se connecte\&. La valeur peut \(^etre pr\('ec\('ed\('ee par
+\fIPATH=\fR, ou une liste de chemins s\('epar\('es par des deux points (par exemple
+\fI/bin:/usr/bin\fR)\&. La valeur par d\('efaut est
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, il sera utilis\('e pour d\('efinir la variable d\'environnement PATH quand le super\-utilisateur se connecte\&. La valeur peut \(^etre pr\('ec\('ed\('ee par
+\fIPATH=\fR
+ou une liste de chemins s\('epar\('es par deux points (par exemple
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. La valeur par d\('efaut est
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, il sera utilis\('e pour d\('efinir la variable d\'environnement TZ quand un utilisateur se connecte\&. La valeur peut \(^etre le nom d\'un fuseau horaire pr\('ec\('ed\('e par
+\fITZ=\fR
+(par exemple
+\fITZ=CST6CDT\fR), ou le chemin complet vers le fichier contenant la sp\('ecification du fuseau horaire (par exemple
+/etc/tzname)\&.
+.sp
+Si un chemin complet est sp\('ecifi\('e mais que le fichier n\'existe pas ou ne peut pas \(^etre lu, la valeur par d\('efaut utilis\('ee est
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+La cha\(^ine de caract\(`eres utilis\('ee pour l\'invite de mot de passe\&. La valeur par d\('efaut est d\'utiliser "Password: " (\(Fo\ \&mot de passe\ \&:\ \&\(Fc), ou une traduction de cette cha\(^ine\&. Si vous d\('efinissez cette variable, l\'invite ne sera pas traduite\&.
+.sp
+Si la cha\(^ine contient
+\fI%s\fR, ces caract\(`eres seront remplac\('es par le nom de l\'utilisateur\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (bool\('een)
+.RS 4
+Activer le contr\(^ole et l\'affichage du statut de la bo\(^ite aux lettres durant la connexion\&.
+.sp
+Vous devriez le d\('esactiver si les fichiers de d\('emarrage de l\'interpr\('eteur de commandes v\('erifie d\('ej\(`a la pr\('esence de courriers (\(Fo\ \&mail \-e\ \&\(Fc ou \('equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+R\('epertoire d\'attente des courriels (\(Fo\ \&mail spool directory\ \&\(Fc)\&. Ce param\(`etre est n\('ecessaire pour manipuler les bo\(^ites \(`a lettres lorsque le compte d\'un utilisateur est modifi\('e ou supprim\('e\&. S\'il n\'est pas sp\('ecifi\('e, une valeur par d\('efaut d\('efinie \(`a la compilation est utilis\('ee\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+D\('efinit l\'emplacement des bo\(^ites aux lettres des utilisateurs relativement \(`a leur r\('epertoire personnel\&.
+.RE
+.PP
+Les param\(`etres
+\fBMAIL_DIR\fR
+et
+\fBMAIL_FILE\fR
+sont utilis\('ees par
+\fBuseradd\fR,
+\fBusermod\fR, et
+\fBuserdel\fR
+pour cr\('eer, d\('eplacer, ou supprimer les bo\(^ites aux lettres des utilisateurs\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBQUOTAS_ENAB\fR (bool\('een)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+S\'il est d\('efini, les activit\('es de su seront enregistr\('ees dans ce fichier\&.
+.RE
+.PP
+\fBSU_NAME\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (bool\('een)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\'t exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (bool\('een)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (bool\('een)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsg\fR(1),
+\fBsh\fR(1)\&.
diff --git a/man/fr/suauth.5 b/man/fr/suauth.5
new file mode 100644 (file)
index 0000000..525c32e
--- /dev/null
@@ -0,0 +1,137 @@
+'\" t
+.\"     Title: suauth
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Formats et conversions de fichiers
+.\"    Source: Formats et conversions de fichiers
+.\"  Language: French
+.\"
+.TH "SUAUTH" "5" "24/07/2009" "Formats et conversions de fich" "Formats et conversions de fich"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+suauth \- Fichier de contr\(^ole d\('etaill\('e de su
+.SH "SYNOPSIS"
+.HP \w'\fB/etc/suauth\fR\ 'u
+\fB/etc/suauth\fR
+.SH "DESCRIPTION"
+.PP
+Le fichier
+/etc/suauth
+est lu chaque fois que su est ex\('ecut\('e\&. Il permet de modifier le comportement de la commande su, en fonction de\ \&:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      1) l\'utilisateur cible de su
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+2) l\'utilisateur qui ex\('ecute la commande su (ou un groupe dont il est membre)
+.PP
+Le fichier est format\('e de la fa\(,con suivante (les lignes commen\(,cant par un \(Fo\ \&#\ \&\(Fc sont des commentaires, et sont ignor\('ees)\ \&:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      vers\-id:par\-id:ACTION
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+O\(`u vers\-id peut \(^etre le mot
+\fIALL\fR, une liste de noms d\'utilisateurs s\('epar\('es par une virgule ou
+\fIALL EXCEPT\fR
+suivi d\'une liste d\'utilisateurs s\('epar\('es par une virgule\&.
+.PP
+par\-id utilise le m\(^eme format que vers\-id, mais accepte \('egalement le mot\-cl\('e
+\fIGROUP\fR\&.
+\fIALL EXCEPT GROUP\fR
+est \('egalement accept\('e\&.
+\fIGROUP\fR
+est suivi d\'un ou plusieurs noms de groupes, s\('epar\('es par une virgule\&. Il n\'est pas suffisant d\'avoir comme groupe primaire le groupe appropri\('e\ \&: une entr\('ee dans
+\fB/etc/group\fR(5)
+est n\('ecessaire\&.
+.PP
+Les valeurs d\'ACTION valables sont\ \&:
+.PP
+\fIDENY\fR
+.RS 4
+La tentative de changement d\'utilisateur s\'est arr\(^et\('ee avant que le mot de passe ne soit demand\('e\&.
+.RE
+.PP
+\fINOPASS\fR
+.RS 4
+La tentative est automatiquement r\('eussie\&. Aucun mot de passe n\'est demand\('e\&.
+.RE
+.PP
+\fIOWNPASS\fR
+.RS 4
+Pour que la commande su soit r\('eussie, l\'utilisateur doit entrer son propre mot de passe\&. Ceci lui est demand\('e\&.
+.RE
+.PP
+Notez qu\'il y a trois champs s\('epar\('es par un \(Fo\ \&deux\-points\ \&\(Fc\&. Ne pas accoler d\'espace \(`a ce \(Fo\ \&deux\-points\ \&\(Fc\&. Notez aussi que le fichier est examin\('e s\('equentiellement ligne par ligne, et que la premi\(`ere r\(`egle applicable est utilis\('ee sans que le reste du fichier ne soit examin\('e\&. Ceci permet \(`a l\'administrateur syst\(`eme de d\('efinir un contr\(^ole aussi fin qu\'il le souhaite\&.
+.SH "EXEMPLE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      # exemple de fichier /etc/suauth
+      #
+      # Deux utilisateurs privil\('egi\('es peuvent
+      # devenir root avec leur propre mot de passe\&.
+      #
+      root:chris,birddog:OWNPASS
+      #
+      # Les autres ne peuvent pas de venir root avec
+      # su, \(`a l\'exception des membres du groupe wheel\&.
+      # Ceci correspond au comportement des BSD\&.
+      #
+      root:ALL EXCEPT GROUP wheel:DENY
+      #
+      # terry et birddog sont des comptes poss\('ed\('es
+      # par la m\(^eme personne\&.
+      # Un acc\(`es sans mot passe est am\('enag\('e
+      # entre ces deux comptes\&.
+      #
+      terry:birddog:NOPASS
+      birddog:terry:NOPASS
+      #
+    
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FICHIERS"
+.PP
+/etc/suauth
+.RS 4
+.RE
+.SH "BOGUES"
+.PP
+Il en reste sans doute beaucoup\&. L\'analyseur du fichier est particuli\(`erement impitoyable avec les erreurs de syntaxe\&. Il n\'autorise d\'espace qu\'en d\('ebut et fin de ligne, et seul le d\('elimiteur sp\('ecifique doit \(^etre utilis\('e\&.
+.SH "DIAGNOSTICS"
+.PP
+Une erreur dans l\'analyse du fichier est report\('ee via
+\fBsyslogd\fR(8)
+au niveau ERR dans la cat\('egorie AUTH\&.
+.SH "VOIR AUSSI"
+.PP
+\fBsu\fR(1)\&.
diff --git a/man/fr/useradd.8 b/man/fr/useradd.8
new file mode 100644 (file)
index 0000000..96104cf
--- /dev/null
@@ -0,0 +1,652 @@
+'\" t
+.\"     Title: useradd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "USERADD" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+useradd \- cr\('eer un nouvel utilisateur ou modifier les informations par d\('efaut appliqu\('ees aux nouveaux utilisateurs
+.SH "SYNOPSIS"
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR [\fIoptions\fR] \fILOGIN\fR
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+When invoked without the
+\fB\-D\fR
+option, the
+\fBuseradd\fR
+command creates a new user account using the values specified on the command line plus the default values from the system\&. Depending on command line options, the
+\fBuseradd\fR
+command will update system files and may also create the new user\'s home directory and copy initial files\&.
+.PP
+By default, a group will also be created for the new user (see
+\fB\-g\fR,
+\fB\-N\fR,
+\fB\-U\fR, and
+\fBUSERGROUPS_ENAB\fR)\&.
+.SH "OPTIONS"
+.PP
+Les options disponibles pour la commande
+\fBuseradd\fR
+sont\ \&:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR \fIR\('EP_BASE\fR
+.RS 4
+The default base directory for the system if
+\fB\-d\fR
+\fIHOME_DIR\fR
+is not specified\&.
+\fIBASE_DIR\fR
+is concatenated with the account name to define the home directory\&. If the
+\fB\-m\fR
+option is not used,
+\fIBASE_DIR\fR
+must exist\&.
+.sp
+If this option is not specified,
+\fBuseradd\fR
+will use the base directory specified by the
+\fBHOME\fR
+variable in
+/etc/default/useradd, or
+/home
+by default\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR \fICOMMENTAIRE\fR
+.RS 4
+Toute cha\(^ine de texte\&. C\'est g\('en\('eralement une description courte du compte, elle est actuellement utilis\('ee comme champ pour le nom complet de l\'utilisateur\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR \fIR\('EP_PERSO\fR
+.RS 4
+Le nouvel utilisateur sera cr\('e\('e en utilisant
+\fIR\('EP_PERSO\fR
+comme valeur de r\('epertoire de connexion de l\'utilisateur\&. Le comportement par d\('efaut est de concat\('ener
+\fIUTILISATEUR\fR
+au r\('epertoire
+\fIR\('EP_BASE\fR, et de l\'utiliser en tant que nom de r\('epertoire de connexion\&. Il n\'est pas n\('ecessaire que le r\('epertoire
+\fIR\('EP_PERSO\fR
+existe mais il ne sera pas cr\('e\('e s\'il n\'existe pas\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-defaults\fR
+.RS 4
+See below, the subsection "Changing the default values"\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR \fIDATE_FIN_VALIDIT\('E\fR
+.RS 4
+Date \(`a laquelle le compte utilisateur sera d\('esactiv\('e\&. La date est indiqu\('ee dans le format
+\fIAAAA\-MM\-JJ\fR\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default expiry date specified by the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd, or an empty string (no expiry) by default\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR \fIDUR\('EE_INACTIVIT\('E\fR
+.RS 4
+Nombre de jours suivant la fin de validit\('e d\'un mot de passe apr\(`es lequel le compte est d\('efinitivement d\('esactiv\('e\&. Une valeur de 0 d\('esactive le compte d\(`es que le mot de passe a d\('epass\('e sa fin de validit\('e, et une valeur de \-1 d\('esactive cette fonctionnalit\('e\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default inactivity period specified by the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd, or \-1 by default\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGROUPE\fR
+.RS 4
+Nom du groupe ou identifiant num\('erique du groupe de connexion initial de l\'utilisateur\&. Le nom du groupe doit exister\&. Un num\('ero de groupe doit se r\('ef\('erer \(`a un groupe d\('ej\(`a existant\&.
+.sp
+If not specified, the bahavior of
+\fBuseradd\fR
+will depend on the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&. If this variable is set to
+\fIyes\fR
+(or
+\fB\-U/\-\-user\-group\fR
+is specified on the command line), a group will be created for the user, with the same name as her loginname\&. If the variable is set to
+\fIno\fR
+(or
+\fB\-N/\-\-no\-user\-group\fR
+is specified on the command line), useradd will set the primary group of the new user to the value specified by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd, or 100 by default\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR \fIGROUPE1\fR[\fI,GROUPE2,\&.\&.\&.\fR[\fI,GROUPEN\fR]]]
+.RS 4
+Liste de groupes suppl\('ementaires auxquels appartient \('egalement l\'utilisateur\&. Chaque groupe est s\('epar\('e du suivant par une virgule, sans espace entre eux\&. Les groupes sont soumis aux m\(^emes restrictions que celles de l\'option
+\fB\-g\fR\&. Le comportement par d\('efaut pour l\'utilisateur est de n\'appartenir qu\'au groupe initial\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\'aide et quitter\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-skel\fR\fIR\('EP_SQUELETTE\fR
+.RS 4
+The skeleton directory, which contains files and directories to be copied in the user\'s home directory, when the home directory is created by
+\fBuseradd\fR\&.
+.sp
+Cette option n\'est valable que si l\'option
+\fB\-m\fR
+(ou
+\fB\-\-create\-home\fR) est utilis\('ee\&.
+.sp
+If this option is not set, the skeleton directory is defined by the
+\fBSKEL\fR
+variable in
+/etc/default/useradd
+or, by default,
+/etc/skel\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR \fICL\('E\fR=\fIVALEUR\fR
+.RS 4
+Surcharge les valeurs par d\('efaut du fichier
+/etc/login\&.defs
+(\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBUMASK\fR,
+\fBPASS_MAX_DAYS\fR
+et autres)\&.
+
+Par exemple\ \&:
+\fB\-K\fR
+\fIPASS_MAX_DAYS\fR=\fI\-1\fR
+peut \(^etre utilis\('e pour la cr\('eation de comptes syst\(`eme pour d\('esactiver la gestion de la dur\('ee de validit\('e des mots de passe, m\(^eme si les comptes syst\(`eme n\'ont pas de mot de passe\&. Plusieurs options
+\fB\-K\fR
+peuvent \(^etre sp\('ecifi\('ees, comme par exemple\ \&:
+\fB\-K\fR
+\fIUID_MIN\fR=\fI100\fR
+\fB\-K\fR
+\fIUID_MAX\fR=\fI499\fR
+.sp
+Note\ \&:
+\fB\-K\fR
+\fIUID_MIN\fR=\fI10\fR,\fIUID_MAX\fR=\fI499\fR
+ne fonctionne pas pour l\'instant\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-no\-log\-init\fR
+.RS 4
+Do not add the user to the lastlog and faillog databases\&.
+.sp
+By default, the user\'s entries in the lastlog and faillog databases are resetted to avoid reusing the entry from a previously deleted user\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-create\-home\fR
+.RS 4
+Create the user\'s home directory if it does not exist\&. The files and directories contained in the skeleton directory (which can be defined with the
+\fB\-k\fR
+option) will be copied to the home directory\&.
+.sp
+By default, no home directories are created\&.
+.RE
+.PP
+\fB\-M\fR
+.RS 4
+Do no create the user\'s home directory, even if the system wide setting from
+/etc/login\&.defs
+(\fBCREATE_HOME\fR) is set to
+\fIyes\fR\&.
+.RE
+.PP
+\fB\-N\fR, \fB\-\-no\-user\-group\fR
+.RS 4
+Do not create a group with the same name as the user, but add the user to the group specified by the
+\fB\-g\fR
+option or by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Permet de cr\('eer un compte d\'utilisateur avec un identifiant (\(Fo\ \&UID\ \&\(Fc) dupliqu\('e (non unique)\&.
+.sp
+Cette option n\'est valable qu\'avec l\'option
+\fB\-o\fR\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR \fIMOT_DE_PASSE\fR
+.RS 4
+Le mot de passe chiffr\('e, comme renvoy\('e par
+\fBcrypt\fR(3)\&. Le comportement par d\('efaut est de d\('esactiver le mot de passe\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Cr\('eer un compte syst\(`eme\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are choosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+/etc/login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.sp
+Note that
+\fBuseradd\fR
+will not create a home directory for such an user, regardless of the default setting in
+/etc/login\&.defs
+(\fBCREATE_HOME\fR)\&. You have to specify the
+\fB\-m\fR
+options if you want a home directory for a system account to be created\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fIINTERPR\('ETEUR\fR
+.RS 4
+Le nom de l\'interpr\('eteur de commandes initial de l\'utilisateur (\(Fo\ \&login shell\ \&\(Fc)\&. Le comportement par d\('efaut est de laisser ce champ vide\&. Le syst\(`eme s\('electionnera alors l\'interpr\('eteur par d\('efaut indiqu\('e par la variable
+\fBSHELL\fR
+dans
+/etc/default/useradd, ou une cha\(^ine vide par d\('efaut\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR \fIUID\fR
+.RS 4
+La valeur num\('erique de l\'identifiant de l\'utilisateur\&. Cette valeur doit \(^etre unique, \(`a moins que l\'option
+\fB\-o\fR
+ne soit utilis\('ee\&. La valeur ne doit pas \(^etre n\('egative\&. Le comportement par d\('efaut est d\'utiliser la plus petite valeur d\'identifiant plus grande que 999, et plus grande que celle des identifiants de tous les autres utilisateurs\&. Les valeurs comprises entre 0 et 999 sont g\('en\('eralement r\('eserv\('ees pour les comptes syst\(`emes\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-user\-group\fR
+.RS 4
+Create a group with the same name as the user, and add the user to this group\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\fIUTILISATEUR_SELINUX\fR
+.RS 4
+The SELinux user for the user\'s login\&. The default is to leave this field blank, which causes the system to select the default SELinux user\&.
+.RE
+.SS "Modifier les valeurs par d\('efaut"
+.PP
+When invoked with only the
+\fB\-D\fR
+option,
+\fBuseradd\fR
+will display the current default values\&. When invoked with
+\fB\-D\fR
+plus other options,
+\fBuseradd\fR
+will update the default values for the specified options\&. Valid default\-changing options are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR \fIR\('EP_BASE\fR
+.RS 4
+The path prefix for a new user\'s home directory\&. The user\'s name will be affixed to the end of
+\fIBASE_DIR\fR
+to form the new user\'s home directory name, if the
+\fB\-d\fR
+option is not used when creating a new account\&.
+.sp
+This option sets the
+\fBHOME\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR \fIDATE_FIN_VALIDIT\('E\fR
+.RS 4
+Date \(`a laquelle le compte utilisateur sera d\('esactiv\('e\&.
+.sp
+This option sets the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR \fIDUR\('EE_INACTIVIT\('E\fR
+.RS 4
+Nombre de jours apr\(`es la fin de validit\('e d\'un mot de passe avant que le compte ne soit d\('esactiv\('e\&.
+.sp
+This option sets the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGROUPE\fR
+.RS 4
+The group name or ID for a new user\'s initial group (when the
+\fB\-N/\-\-no\-user\-group\fR
+is used or when the
+\fBUSERGROUPS_ENAB\fR
+variable is set to
+\fIno\fR
+in
+/etc/login\&.defs\&. The named group must exist, and a numerical group ID must have an existing entry\&.
+.sp
+This option sets the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fIINTERPR\('ETEUR\fR
+.RS 4
+The name of a new user\'s login shell\&.
+.sp
+This option sets the
+\fBSHELL\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.SH "NOTES"
+.PP
+L\'administrateur syst\(`eme doit se charger de placer les fichiers par d\('efaut dans le r\('epertoire
+/etc/skel
+(ou tout autre r\('epertoire de mod\(`eles indiqu\('e dans
+/etc/default/useradd
+ou sur la ligne de commande)\&.
+.SH "AVERTISSEMENTS"
+.PP
+You may not add a user to a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+Similarly, if the username already exists in an external user database such as NIS or LDAP,
+\fBuseradd\fR
+will deny the user account creation request\&.
+.PP
+Les noms d\'utilisateur doivent commencer par une lettre minuscule ou un tiret bas (\(Fo\ \&underscore\ \&\(Fc), et seuls des lettres minuscules, des chiffres, des \(Fo\ \&underscore\ \&\(Fc, ou des tirets peuvent suivre\&. Ils peuvent se terminer par un signe dollar\&. Soit, sous la forme d\'une expression rationnelle\ \&: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Les noms d\'utilisateur sont limit\('es \(`a 16 caract\(`eres\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indiquer si un r\('epertoire personnel doit \(^etre cr\('e\('e par d\('efaut pour les nouveaux utilisateurs\&.
+.sp
+Ce r\('eglage ne s\'applique pas pour les utilisateurs syst\(`eme, et peut \(^etre annul\('e sur la ligne de commande\&.
+.RE
+.PP
+\fBGID_MAX\fR (nombre), \fBGID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques de groupes que les commandes
+\fBuseradd\fR,
+\fBgroupadd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation des groupes normaux\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+R\('epertoire d\'attente des courriels (\(Fo\ \&mail spool directory\ \&\(Fc)\&. Ce param\(`etre est n\('ecessaire pour manipuler les bo\(^ites \(`a lettres lorsque le compte d\'un utilisateur est modifi\('e ou supprim\('e\&. S\'il n\'est pas sp\('ecifi\('e, une valeur par d\('efaut d\('efinie \(`a la compilation est utilis\('ee\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+D\('efinit l\'emplacement des bo\(^ites aux lettres des utilisateurs relativement \(`a leur r\('epertoire personnel\&.
+.RE
+.PP
+Les param\(`etres
+\fBMAIL_DIR\fR
+et
+\fBMAIL_FILE\fR
+sont utilis\('ees par
+\fBuseradd\fR,
+\fBusermod\fR, et
+\fBuserdel\fR
+pour cr\('eer, d\('eplacer, ou supprimer les bo\(^ites aux lettres des utilisateurs\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (nombre)
+.RS 4
+Nombre maximum de membres par entr\('ee de groupe\&. Lorsque le maximum est atteint, une nouvelle entr\('ee de groupe (ligne) est d\('emarr\('ee dans
+/etc/group
+(avec le m\(^eme nom, m\(^eme mot de passe, et m\(^eme GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\'il n\'y a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\'assurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de fixer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\'outils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (nombre)
+.RS 4
+Nombre maximum de jours de validit\('e d\'un mot de passe\&. Apr\(`es cette dur\('ee, une modification du mot de passe est obligatoire\&. S\'il n\'est pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (nombre)
+.RS 4
+Nombre minimum de jours autoris\('e avant la modification d\'un mot de passe\&. Toute tentative de modification du mot de passe avant cette dur\('ee est rejet\('ee\&. S\'il n\'est pas pr\('ecis\('e, la valeur de \-1 est utilis\('ee (ce qui enl\(`eve toute restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (nombre)
+.RS 4
+Nombre de jours durant lesquels l\'utilisateur recevra un avertissement avant que son mot de passe n\'arrive en fin de validit\('e\&. Une valeur n\('egative signifie qu\'aucun avertissement n\'est donn\('e\&. S\'il n\'est pas pr\('ecis\('e, aucun avertissement n\'est donn\('e\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (nombre), \fBSYS_GID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques de groupes que les commandes
+\fBuseradd\fR,
+\fBgroupadd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation de groupes syst\(`eme\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (nombre), \fBSYS_UID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques d\'utilisateurs que les commandes
+\fBuseradd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation d\'utilisateurs syst\(`eme\&.
+.RE
+.PP
+\fBUID_MAX\fR (nombre), \fBUID_MIN\fR (nombre)
+.RS 4
+Plage d\'identifiants num\('eriques d\'utilisateurs que les commandes
+\fBuseradd\fR
+ou
+\fBnewusers\fR
+peuvent utiliser pour la cr\('eation d\'utilisateurs normaux\&.
+.RE
+.PP
+\fBUMASK\fR (nombre)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (bool\('een)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/default/useradd
+.RS 4
+Valeurs par d\('efaut pour la cr\('eation de comptes\&.
+.RE
+.PP
+/etc/skel/
+.RS 4
+R\('epertoire contenant les fichiers par d\('efaut\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+La commande
+\fBuseradd\fR
+retourne les valeurs suivantes en quittant\ \&:
+.PP
+\fI0\fR
+.RS 4
+succ\(`es
+.RE
+.PP
+\fI1\fR
+.RS 4
+impossible de mettre \(`a jour le fichier des mots de passe
+.RE
+.PP
+\fI2\fR
+.RS 4
+erreur de syntaxe
+.RE
+.PP
+\fI3\fR
+.RS 4
+param\(`etre non valable pour l\'option
+.RE
+.PP
+\fI4\fR
+.RS 4
+UID d\('ej\(`a utilis\('e (et pas d\'option
+\fB\-o\fR)
+.RE
+.PP
+\fI6\fR
+.RS 4
+le groupe sp\('ecifi\('e n\'existe pas
+.RE
+.PP
+\fI9\fR
+.RS 4
+nom d\'utilisateur d\('ej\(`a utilis\('e
+.RE
+.PP
+\fI10\fR
+.RS 4
+impossible de mettre \(`a jour le fichier des groupes
+.RE
+.PP
+\fI12\fR
+.RS 4
+impossible de cr\('eer le r\('epertoire personnel
+.RE
+.PP
+\fI13\fR
+.RS 4
+impossible de cr\('eer le r\('epertoire d\'attente des courriels
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/userdel.8 b/man/fr/userdel.8
new file mode 100644 (file)
index 0000000..66c53f1
--- /dev/null
@@ -0,0 +1,265 @@
+'\" t
+.\"     Title: userdel
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "USERDEL" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+userdel \- supprimer un compte utilisateur et les fichiers associ\('es
+.SH "SYNOPSIS"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [options] \fILOGIN\fR
+.SH "DESCRIPTION"
+.PP
+La commande
+\fBuserdel\fR
+modifie les fichiers d\'administration des comptes du syst\(`eme, en supprimant les entr\('ees qui se r\('ef\(`erent \(`a
+\fILOGIN\fR\&. L\'utilisateur nomm\('e doit exister\&.
+.SH "OPTIONS"
+.PP
+Les options disponibles de la commande
+\fBuserdel\fR
+sont\ \&:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\'s home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+\fINote\ \&:\fR
+Cette option est dangereuse, elle peut laisser votre syst\(`eme dans un \('etat incoh\('erent\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\'aide et quitter\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+Les fichiers pr\('esents dans le r\('epertoire personnel de l\'utilisateur seront supprim\('es en m\(^eme temps que le r\('epertoire lui\-m\(^eme, ainsi que le r\('epertoire d\'attente des courriels\&. Vous devrez rechercher et \('eliminer vous\-m\(^eme les fichiers situ\('es dans d\'autres syst\(`emes de fichiers\&.
+.sp
+Le r\('epertoire d\'attente des courriels est d\('efini par la variable
+\fBMAIL_DIR\fR
+du fichier
+login\&.defs\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBMAIL_DIR\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+R\('epertoire d\'attente des courriels (\(Fo\ \&mail spool directory\ \&\(Fc)\&. Ce param\(`etre est n\('ecessaire pour manipuler les bo\(^ites \(`a lettres lorsque le compte d\'un utilisateur est modifi\('e ou supprim\('e\&. S\'il n\'est pas sp\('ecifi\('e, une valeur par d\('efaut d\('efinie \(`a la compilation est utilis\('ee\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+D\('efinit l\'emplacement des bo\(^ites aux lettres des utilisateurs relativement \(`a leur r\('epertoire personnel\&.
+.RE
+.PP
+Les param\(`etres
+\fBMAIL_DIR\fR
+et
+\fBMAIL_FILE\fR
+sont utilis\('ees par
+\fBuseradd\fR,
+\fBusermod\fR, et
+\fBuserdel\fR
+pour cr\('eer, d\('eplacer, ou supprimer les bo\(^ites aux lettres des utilisateurs\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (nombre)
+.RS 4
+Nombre maximum de membres par entr\('ee de groupe\&. Lorsque le maximum est atteint, une nouvelle entr\('ee de groupe (ligne) est d\('emarr\('ee dans
+/etc/group
+(avec le m\(^eme nom, m\(^eme mot de passe, et m\(^eme GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\'il n\'y a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\'assurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de fixer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\'outils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+Si ce param\(`etre est d\('efini, cette commande est ex\('ecut\('ee lors de la suppression d\'un utilisateur\&. Elle pourra supprimer toutes les t\(^aches p\('eriodiques cron ou at, tous les travaux d\'impression, etc\&. de l\'utilisateur (qui sera fourni comme premier param\(`etre)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\'s cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+       echo "Usage: $0 username"
+       exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+      
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (bool\('een)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Configuration de la suite des mots de passe cach\('es \(Fo\ \&shadow password\ \&\(Fc\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VALEURS DE RETOUR"
+.PP
+La commande
+\fBuserdel\fR
+retourne les valeurs suivantes en quittant\ \&:
+.PP
+\fI0\fR
+.RS 4
+succ\(`es
+.RE
+.PP
+\fI1\fR
+.RS 4
+impossible de mettre \(`a jour le fichier des mots de passe
+.RE
+.PP
+\fI2\fR
+.RS 4
+erreur de syntaxe
+.RE
+.PP
+\fI6\fR
+.RS 4
+l\'utilisateur indiqu\('e n\'existe pas
+.RE
+.PP
+\fI8\fR
+.RS 4
+l\'utilisateur est actuellement connect\('e
+.RE
+.PP
+\fI10\fR
+.RS 4
+impossible de mettre \(`a jour le fichier des groupes
+.RE
+.PP
+\fI12\fR
+.RS 4
+impossible de supprimer le r\('epertoire personnel
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\'s password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+Vous devez v\('erifier vous\-m\(^eme qu\'aucun fichier poss\('ed\('e par l\'utilisateur ne subsiste sur tous les syst\(`emes de fichiers\&.
+.PP
+Vous ne pouvez supprimer aucun attribut NIS d\'un client NIS\&. Cela doit \(^etre effectu\('e sur le serveur NIS\&.
+.PP
+Si
+\fBUSERGROUPS_ENAB\fR
+vaut
+\fIyes\fR
+dans le fichier
+/etc/login\&.defs,
+\fBuserdel\fR
+supprimera le groupe ayant le m\(^eme nom que l\'utilisateur\&. Afin d\'\('eviter des incoh\('erences entre les fichiers passwd et group,
+\fBuserdel\fR
+v\('erifie que le groupe n\'est pas utilis\('e comme groupe primaire d\'un autre utilisateur\ \&; si c\'est le cas un avertissement sera affich\('e et le groupe ne sera pas supprim\('e\&. L\'option
+\fB\-f\fR
+permet de forcer la suppression du groupe\&.
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/fr/usermod.8 b/man/fr/usermod.8
new file mode 100644 (file)
index 0000000..911d1bd
--- /dev/null
@@ -0,0 +1,265 @@
+'\" t
+.\"     Title: usermod
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "USERMOD" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+usermod \- Modifier un compte utilisateur
+.SH "SYNOPSIS"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fIoptions\fR] \fILOGIN\fR
+.SH "DESCRIPTION"
+.PP
+La commande
+\fBusermod\fR
+modifie les fichiers d\'administration des comptes du syst\(`eme selon les modifications qui ont \('et\('e indiqu\('ees sur la ligne de commande\&.
+.SH "OPTIONS"
+.PP
+Les options disponibles pour la commande
+\fBusermod\fR
+sont\ \&:
+.PP
+\fB\-a\fR, \fB\-\-append\fR
+.RS 4
+Ajouter l\'utilisateur aux groupes suppl\('ementaires\&. N\'utilisez cette option qu\'avec l\'option
+\fB\-G\fR\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR \fICOMMENTAIRE\fR
+.RS 4
+La nouvelle valeur du champ de commentaire du fichier de mots de passe pour l\'utilisateur\&. Il est normalement modifi\('e en utilisant l\'utilitaire
+\fBchfn\fR(1)\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR \fIR\('EP_PERSO\fR
+.RS 4
+Le nouveau r\('epertoire personnel de l\'utilisateur\&.
+.sp
+Si l\'option
+\fB\-m\fR
+est fournie, le contenu du r\('epertoire personnel actuel sera d\('eplac\('e dans le nouveau r\('epertoire personnel, qui sera cr\('e\('e si n\('ecessaire\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR \fIDATE_FIN_VALIDIT\('E\fR
+.RS 4
+Date \(`a laquelle le compte utilisateur sera d\('esactiv\('e\&. La date est indiqu\('ee dans le format
+\fIAAAA\-MM\-JJ\fR\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR \fIDUR\('EE_INACTIVIT\('E\fR
+.RS 4
+Nombre de jours suivant la fin de validit\('e d\'un mot de passe apr\(`es lequel le compte est d\('efinitivement d\('esactiv\('e\&.
+.sp
+Une valeur de 0 d\('esactive le compte d\(`es que le mot de passe a d\('epass\('e sa fin de validit\('e, et une valeur de \-1 d\('esactive cette fonctionnalit\('e\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGROUPE\fR
+.RS 4
+Nom du groupe ou identifiant num\('erique du groupe de connexion initial de l\'utilisateur\&. Le groupe doit exister\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR \fIGROUPE1\fR[\fI,GROUPE2,\&.\&.\&.\fR[\fI,GROUPEN\fR]]]
+.RS 4
+Liste de groupes suppl\('ementaires auxquels appartient \('egalement l\'utilisateur\&. Chaque groupe est s\('epar\('e du suivant par une virgule, sans espace entre eux\&. Les groupes sont soumis aux m\(^emes restrictions que celles de l\'option
+\fB\-g\fR\&.
+.sp
+Si l\'utilisateur fait actuellement partie d\'un groupe qui n\'est pas list\('e, l\'utilisateur sera supprim\('e du groupe\&. Ce comportement peut \(^etre modifi\('e par l\'option
+\fB\-a\fR, qui permet d\'ajouter l\'utilisateur \(`a la liste actuelle des groupes suppl\('ementaires\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR \fINOUVEAU_LOGIN\fR
+.RS 4
+Le nom de l\'utilisateur passera de
+\fILOGIN\fR
+\(`a
+\fINOUVEAU_LOGIN\fR\&. Rien d\'autre ne sera modifi\('e\&. En particulier, le nom du r\('epertoire personnel de l\'utilisateur devra probablement \(^etre chang\('e pour refl\('eter le nouveau nom de connexion\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+Verrouiller le mot de passe d\'un utilisateur\&. Cette option ajoute un \(Fo\ \&!\ \&\(Fc devant le mot de passe chiffr\('e, ce qui d\('esactive le mot de passe\&. Vous ne pouvez pas utiliser cette option avec
+\fB\-p\fR
+ou
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+Move the content of the user\'s home directory to the new location\&.
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+En combinaison avec l\'option
+\fB\-u\fR, cette option permet de changer l\'identifiant utilisateur vers une valeur d\('ej\(`a utilis\('ee\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR \fIMOT_DE_PASSE\fR
+.RS 4
+Mot de passe chiffr\('e, comme renvoy\('e par
+\fBcrypt\fR(3)\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fIINTERPR\('ETEUR\fR
+.RS 4
+Nom du nouvel interpr\('eteur de commandes initial (\(Fo\ \&login shell\ \&\(Fc) de l\'utilisateur\&. Si ce champ est vide, le syst\(`eme s\('electionnera l\'interpr\('eteur de commandes initial par d\('efaut\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR \fIUID\fR
+.RS 4
+La valeur num\('erique de l\'identifiant de l\'utilisateur\&.
+.sp
+Cette valeur doit \(^etre unique, \(`a moins que l\'option
+\fB\-o\fR
+ne soit utilis\('ee\&. La valeur ne doit pas \(^etre n\('egative\&. Les valeurs comprises entre 0 et 999 sont g\('en\('eralement r\('eserv\('ees aux comptes syst\(`eme\&.
+.sp
+La bo\(^ite aux lettres et tous les fichiers poss\('ed\('es par l\'utilisateur et qui sont situ\('es dans son r\('epertoire personnel verront leur identifiant d\'utilisateur automatiquement modifi\('e\&.
+.sp
+Le propri\('etaire (ou groupe propri\('etaire) des fichiers en dehors du r\('epertoire personnel de l\'utilisateur doit \(^etre modifi\('e manuellement\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+D\('everrouiller le mot de passe d\'un utilisateur\&. Cela supprime le \(Fo\ \&!\ \&\(Fc situ\('e devant le mot de passe chiffr\('e\&. Vous ne pouvez pas utiliser cette option avec
+\fB\-p\fR
+ou
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR\fIUTILISATEUR_SELINUX\fR
+.RS 4
+The SELinux user for the user\'s login\&. The default is to leave this field the blank, which causes the system to select the default SELinux user\&.
+.RE
+.SH "AVERTISSEMENTS"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\'s numerical user ID, the user\'s name, or the user\'s home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux, but only check if the user is logged in according to utmp on other architectures\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+You must make any changes involving NIS on the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+Les variables de configuration suivantes de
+/etc/login\&.defs
+modifient le comportement de cet outil\ \&:
+.PP
+\fBMAIL_DIR\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+R\('epertoire d\'attente des courriels (\(Fo\ \&mail spool directory\ \&\(Fc)\&. Ce param\(`etre est n\('ecessaire pour manipuler les bo\(^ites \(`a lettres lorsque le compte d\'un utilisateur est modifi\('e ou supprim\('e\&. S\'il n\'est pas sp\('ecifi\('e, une valeur par d\('efaut d\('efinie \(`a la compilation est utilis\('ee\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (cha\(^ine ce caract\(`eres)
+.RS 4
+D\('efinit l\'emplacement des bo\(^ites aux lettres des utilisateurs relativement \(`a leur r\('epertoire personnel\&.
+.RE
+.PP
+Les param\(`etres
+\fBMAIL_DIR\fR
+et
+\fBMAIL_FILE\fR
+sont utilis\('ees par
+\fBuseradd\fR,
+\fBusermod\fR, et
+\fBuserdel\fR
+pour cr\('eer, d\('eplacer, ou supprimer les bo\(^ites aux lettres des utilisateurs\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (nombre)
+.RS 4
+Nombre maximum de membres par entr\('ee de groupe\&. Lorsque le maximum est atteint, une nouvelle entr\('ee de groupe (ligne) est d\('emarr\('ee dans
+/etc/group
+(avec le m\(^eme nom, m\(^eme mot de passe, et m\(^eme GID)\&.
+.sp
+La valeur par d\('efaut est 0, ce qui signifie qu\'il n\'y a pas de limites pour le nombre de membres dans un groupe\&.
+.sp
+Cette fonctionnalit\('e (groupe d\('ecoup\('e) permet de limiter la longueur des lignes dans le fichier de groupes\&. Ceci est utile pour s\'assurer que les lignes pour les groupes NIS ne sont pas plus grandes que 1024 caract\(`eres\&.
+.sp
+Si vous avez besoin de fixer cette limite, vous pouvez utiliser 25\&.
+.sp
+Remarque\ \&: les groupes d\('ecoup\('es ne sont peut\-\(^etre pas pris en charge par tous les outils (m\(^eme dans la suite d\'outils Shadow)\&. Vous ne devriez pas utiliser cette variable, sauf si vous en avez vraiment besoin\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/fr/vigr.8 b/man/fr/vigr.8
new file mode 100644 (file)
index 0000000..ff72d7a
--- /dev/null
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/fr/vipw.8 b/man/fr/vipw.8
new file mode 100644 (file)
index 0000000..e4dc273
--- /dev/null
@@ -0,0 +1,104 @@
+'\" t
+.\"     Title: vipw
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Commandes de gestion du syst\(`eme
+.\"    Source: Commandes de gestion du syst\(`eme
+.\"  Language: French
+.\"
+.TH "VIPW" "8" "24/07/2009" "Commandes de gestion du syst\(`em" "Commandes de gestion du syst\(`em"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOM"
+vipw, vigr \- \('editer les fichiers passwd, group, shadow ou gshadow
+.SH "SYNOPSIS"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIoptions\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "OPTIONS"
+.PP
+Les options applicables aux commandes
+\fBvipw\fR
+et
+\fBvigr\fR
+sont\ \&:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+\('Editer la base de donn\('ees de groupes\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Afficher un message d\'aide et quitter\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+\('Editer la base de donn\('ees de mots de passe\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Mode silencieux\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+\('Editer les bases de donn\('ees shadow ou gshadow\&.
+.RE
+.SH "FICHIERS"
+.PP
+/etc/group
+.RS 4
+Informations sur les groupes\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informations s\('ecuris\('ees sur les groupes\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informations sur les comptes des utilisateurs\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informations s\('ecuris\('ees sur les comptes utilisateurs\&.
+.RE
+.SH "VOIR AUSSI"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/generate_mans.deps b/man/generate_mans.deps
new file mode 100644 (file)
index 0000000..3cf8974
--- /dev/null
@@ -0,0 +1,178 @@
+chfn.1: login.defs.d/CHFN_AUTH.xml
+chfn.1: login.defs.d/CHFN_RESTRICT.xml
+chfn.1: login.defs.d/LOGIN_STRING.xml
+chgpasswd.8: login.defs.d/ENCRYPT_METHOD.xml
+chgpasswd.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+chgpasswd.8: login.defs.d/MD5_CRYPT_ENAB.xml
+chgpasswd.8: login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
+chpasswd.8: login.defs.d/ENCRYPT_METHOD.xml
+chpasswd.8: login.defs.d/MD5_CRYPT_ENAB.xml
+chpasswd.8: login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
+chsh.1: login.defs.d/CHSH_AUTH.xml
+chsh.1: login.defs.d/LOGIN_STRING.xml
+gpasswd.1: login.defs.d/ENCRYPT_METHOD.xml
+gpasswd.1: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+gpasswd.1: login.defs.d/MD5_CRYPT_ENAB.xml
+gpasswd.1: login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
+groupadd.8: login.defs.d/GID_MAX.xml
+groupadd.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+groupadd.8: login.defs.d/SYS_GID_MAX.xml
+groupadd.8: config.xml
+groupdel.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+groupmems.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+groupmod.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+grpck.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+login.1: login.defs.d/CONSOLE.xml
+login.1: login.defs.d/CONSOLE_GROUPS.xml
+login.1: login.defs.d/DEFAULT_HOME.xml
+login.1: login.defs.d/ENV_HZ.xml
+login.1: login.defs.d/ENV_PATH.xml
+login.1: login.defs.d/ENV_SUPATH.xml
+login.1: login.defs.d/ENV_TZ.xml
+login.1: login.defs.d/ENVIRON_FILE.xml
+login.1: login.defs.d/ERASECHAR.xml
+login.1: login.defs.d/FAIL_DELAY.xml
+login.1: login.defs.d/FAILLOG_ENAB.xml
+login.1: login.defs.d/FAKE_SHELL.xml
+login.1: login.defs.d/FTMP_FILE.xml
+login.1: login.defs.d/HUSHLOGIN_FILE.xml
+login.1: login.defs.d/ISSUE_FILE.xml
+login.1: login.defs.d/KILLCHAR.xml
+login.1: login.defs.d/LASTLOG_ENAB.xml
+login.1: login.defs.d/LOGIN_RETRIES.xml
+login.1: login.defs.d/LOGIN_STRING.xml
+login.1: login.defs.d/LOGIN_TIMEOUT.xml
+login.1: login.defs.d/LOG_OK_LOGINS.xml
+login.1: login.defs.d/LOG_UNKFAIL_ENAB.xml
+login.1: login.defs.d/MAIL_CHECK_ENAB.xml
+login.1: login.defs.d/MAIL_DIR.xml
+login.1: login.defs.d/MOTD_FILE.xml
+login.1: login.defs.d/NOLOGINS_FILE.xml
+login.1: login.defs.d/PORTTIME_CHECKS_ENAB.xml
+login.1: login.defs.d/QUOTAS_ENAB.xml
+login.1: login.defs.d/TTYGROUP.xml
+login.1: login.defs.d/TTYTYPE_FILE.xml
+login.1: login.defs.d/ULIMIT.xml
+login.1: login.defs.d/UMASK.xml
+login.1: login.defs.d/USERGROUPS_ENAB.xml
+login.defs.5: login.defs.d/CHFN_AUTH.xml
+login.defs.5: login.defs.d/CHFN_RESTRICT.xml
+login.defs.5: login.defs.d/CHSH_AUTH.xml
+login.defs.5: login.defs.d/CONSOLE.xml
+login.defs.5: login.defs.d/CONSOLE_GROUPS.xml
+login.defs.5: login.defs.d/CREATE_HOME.xml
+login.defs.5: login.defs.d/DEFAULT_HOME.xml
+login.defs.5: login.defs.d/ENCRYPT_METHOD.xml
+login.defs.5: login.defs.d/ENV_HZ.xml
+login.defs.5: login.defs.d/ENV_PATH.xml
+login.defs.5: login.defs.d/ENV_SUPATH.xml
+login.defs.5: login.defs.d/ENV_TZ.xml
+login.defs.5: login.defs.d/ENVIRON_FILE.xml
+login.defs.5: login.defs.d/ERASECHAR.xml
+login.defs.5: login.defs.d/FAIL_DELAY.xml
+login.defs.5: login.defs.d/FAILLOG_ENAB.xml
+login.defs.5: login.defs.d/FAKE_SHELL.xml
+login.defs.5: login.defs.d/FTMP_FILE.xml
+login.defs.5: login.defs.d/GID_MAX.xml
+login.defs.5: login.defs.d/HUSHLOGIN_FILE.xml
+login.defs.5: login.defs.d/ISSUE_FILE.xml
+login.defs.5: login.defs.d/KILLCHAR.xml
+login.defs.5: login.defs.d/LASTLOG_ENAB.xml
+login.defs.5: login.defs.d/LOG_OK_LOGINS.xml
+login.defs.5: login.defs.d/LOG_UNKFAIL_ENAB.xml
+login.defs.5: login.defs.d/LOGIN_RETRIES.xml
+login.defs.5: login.defs.d/LOGIN_STRING.xml
+login.defs.5: login.defs.d/LOGIN_TIMEOUT.xml
+login.defs.5: login.defs.d/MAIL_CHECK_ENAB.xml
+login.defs.5: login.defs.d/MAIL_DIR.xml
+login.defs.5: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+login.defs.5: login.defs.d/MD5_CRYPT_ENAB.xml
+login.defs.5: login.defs.d/MOTD_FILE.xml
+login.defs.5: login.defs.d/NOLOGINS_FILE.xml
+login.defs.5: login.defs.d/OBSCURE_CHECKS_ENAB.xml
+login.defs.5: login.defs.d/PASS_ALWAYS_WARN.xml
+login.defs.5: login.defs.d/PASS_CHANGE_TRIES.xml
+login.defs.5: login.defs.d/PASS_MAX_LEN.xml
+login.defs.5: login.defs.d/PASS_MAX_DAYS.xml
+login.defs.5: login.defs.d/PASS_MIN_DAYS.xml
+login.defs.5: login.defs.d/PASS_WARN_AGE.xml
+login.defs.5: login.defs.d/PORTTIME_CHECKS_ENAB.xml
+login.defs.5: login.defs.d/QUOTAS_ENAB.xml
+login.defs.5: login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
+login.defs.5: login.defs.d/SULOG_FILE.xml
+login.defs.5: login.defs.d/SU_NAME.xml
+login.defs.5: login.defs.d/SU_WHEEL_ONLY.xml
+login.defs.5: login.defs.d/SYS_GID_MAX.xml
+login.defs.5: login.defs.d/SYSLOG_SG_ENAB.xml
+login.defs.5: login.defs.d/SYSLOG_SU_ENAB.xml
+login.defs.5: login.defs.d/SYS_UID_MAX.xml
+login.defs.5: login.defs.d/TTYGROUP.xml
+login.defs.5: login.defs.d/TTYTYPE_FILE.xml
+login.defs.5: login.defs.d/UID_MAX.xml
+login.defs.5: login.defs.d/ULIMIT.xml
+login.defs.5: login.defs.d/UMASK.xml
+login.defs.5: login.defs.d/USERDEL_CMD.xml
+login.defs.5: login.defs.d/USERGROUPS_ENAB.xml
+newgrp.1: login.defs.d/SYSLOG_SG_ENAB.xml
+newusers.8: login.defs.d/ENCRYPT_METHOD.xml
+newusers.8: login.defs.d/GID_MAX.xml
+newusers.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+newusers.8: login.defs.d/MD5_CRYPT_ENAB.xml
+newusers.8: login.defs.d/PASS_MAX_DAYS.xml
+newusers.8: login.defs.d/PASS_MIN_DAYS.xml
+newusers.8: login.defs.d/PASS_WARN_AGE.xml
+newusers.8: login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
+newusers.8: login.defs.d/SYS_GID_MAX.xml
+newusers.8: login.defs.d/SYS_UID_MAX.xml
+newusers.8: login.defs.d/UID_MAX.xml
+newusers.8: login.defs.d/UMASK.xml
+passwd.1: login.defs.d/ENCRYPT_METHOD.xml
+passwd.1: login.defs.d/MD5_CRYPT_ENAB.xml
+passwd.1: login.defs.d/OBSCURE_CHECKS_ENAB.xml
+passwd.1: login.defs.d/PASS_ALWAYS_WARN.xml
+passwd.1: login.defs.d/PASS_CHANGE_TRIES.xml
+passwd.1: login.defs.d/PASS_MAX_LEN.xml
+passwd.1: login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
+pwck.8: login.defs.d/PASS_MAX_DAYS.xml
+pwck.8: login.defs.d/PASS_MIN_DAYS.xml
+pwck.8: login.defs.d/PASS_WARN_AGE.xml
+pwconv.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+pwconv.8: login.defs.d/PASS_MAX_DAYS.xml
+pwconv.8: login.defs.d/PASS_MIN_DAYS.xml
+pwconv.8: login.defs.d/PASS_WARN_AGE.xml
+sg.1: login.defs.d/SYSLOG_SG_ENAB.xml
+su.1: login.defs.d/CONSOLE.xml
+su.1: login.defs.d/CONSOLE_GROUPS.xml
+su.1: login.defs.d/DEFAULT_HOME.xml
+su.1: login.defs.d/ENV_HZ.xml
+su.1: login.defs.d/ENVIRON_FILE.xml
+su.1: login.defs.d/ENV_PATH.xml
+su.1: login.defs.d/ENV_SUPATH.xml
+su.1: login.defs.d/ENV_TZ.xml
+su.1: login.defs.d/LOGIN_STRING.xml
+su.1: login.defs.d/MAIL_CHECK_ENAB.xml
+su.1: login.defs.d/MAIL_DIR.xml
+su.1: login.defs.d/QUOTAS_ENAB.xml
+su.1: login.defs.d/SULOG_FILE.xml
+su.1: login.defs.d/SU_NAME.xml
+su.1: login.defs.d/SU_WHEEL_ONLY.xml
+su.1: login.defs.d/SYSLOG_SU_ENAB.xml
+su.1: login.defs.d/USERGROUPS_ENAB.xml
+useradd.8: login.defs.d/CREATE_HOME.xml
+useradd.8: login.defs.d/GID_MAX.xml
+useradd.8: login.defs.d/MAIL_DIR.xml
+useradd.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+useradd.8: login.defs.d/PASS_MAX_DAYS.xml
+useradd.8: login.defs.d/PASS_MIN_DAYS.xml
+useradd.8: login.defs.d/PASS_WARN_AGE.xml
+useradd.8: login.defs.d/SYS_GID_MAX.xml
+useradd.8: login.defs.d/SYS_UID_MAX.xml
+useradd.8: login.defs.d/UID_MAX.xml
+useradd.8: login.defs.d/UMASK.xml
+useradd.8: login.defs.d/USERGROUPS_ENAB.xml
+userdel.8: login.defs.d/MAIL_DIR.xml
+userdel.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
+userdel.8: login.defs.d/USERDEL_CMD.xml
+userdel.8: login.defs.d/USERGROUPS_ENAB.xml
+usermod.8: login.defs.d/MAIL_DIR.xml
+usermod.8: login.defs.d/MAX_MEMBERS_PER_GROUP.xml
diff --git a/man/generate_mans.mak b/man/generate_mans.mak
new file mode 100644 (file)
index 0000000..ec3f6d7
--- /dev/null
@@ -0,0 +1,30 @@
+if ENABLE_REGENERATE_MAN
+
+if USE_PAM
+PAM_COND=pam
+else
+PAM_COND=no_pam
+endif
+if SHADOWGRP
+SHADOWGRP_COND=gshadow
+else
+SHADOWGRP_COND=no_gshadow
+endif
+
+if USE_SHA_CRYPT
+SHA_CRYPT_COND=sha_crypt
+else
+SHA_CRYPT_COND=no_sha_crypt
+endif
+
+%: %.xml Makefile config.xml
+       $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(SHA_CRYPT_COND)" \
+                   -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+grpconv.8 grpunconv.8 pwunconv.8: pwconv.8
+
+getspnam.3: shadow.3
+
+vigr.8: vipw.8
+
+endif
diff --git a/man/generate_translations.mak b/man/generate_translations.mak
new file mode 100644 (file)
index 0000000..b3b671e
--- /dev/null
@@ -0,0 +1,20 @@
+if ENABLE_REGENERATE_MAN
+
+LANG=$(notdir $(CURDIR))
+
+%.xml: ../%.xml ../po/$(LANG).po
+       [ ! -f ../config.xml ] || mv ../config.xml ../config.xml.bak
+       xml2po --expand-all-entities -l $(LANG) -p ../po/$(LANG).po -o $@ ../$@
+       sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+       [ ! -f ../config.xml.bak ] || mv ../config.xml.bak ../config.xml
+       sed -i 's/config SYSTEM "config.xml">/config SYSTEM "config.xml">\%config;/' $@
+
+config.xml: ../config.xml.in
+       make -C .. config.xml
+       cp ../config.xml $@
+
+include ../generate_mans.mak
+
+CLEANFILES = .xml2po.mo $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST))
+
+endif
diff --git a/man/getspnam.3 b/man/getspnam.3
new file mode 100644 (file)
index 0000000..cd473da
--- /dev/null
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/gpasswd.1 b/man/gpasswd.1
new file mode 100644 (file)
index 0000000..d4a3578
--- /dev/null
@@ -0,0 +1,254 @@
+'\" t
+.\"     Title: gpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: English
+.\"
+.TH "GPASSWD" "1" "07/24/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+gpasswd \- administer /etc/group and /etc/gshadow
+.SH "SYNOPSIS"
+.HP \w'\fBgpasswd\fR\ 'u
+\fBgpasswd\fR [\fIoption\fR] \fIgroup\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgpasswd\fR
+command is used to administer
+/etc/group, and /etc/gshadow\&. Every group can have
+administrators,
+members and a password\&.
+.PP
+System administrators can use the
+\fB\-A\fR
+option to define group administrator(s) and the
+\fB\-M\fR
+option to define members\&. They have all rights of group administrators and members\&.
+.PP
+
+\fBgpasswd\fR
+called by
+a group administrator
+with a group name only prompts for the new password of the
+\fIgroup\fR\&.
+.PP
+If a password is set the members can still use
+\fBnewgrp\fR(1)
+without a password, and non\-members must supply the password\&.
+.SS "Notes about group passwords"
+.PP
+Group passwords are an inherent security problem since more than one person is permitted to know the password\&. However, groups are a useful tool for permitting co\-operation between different users\&.
+.SH "OPTIONS"
+.PP
+Except for the
+\fB\-A\fR
+and
+\fB\-M\fR
+options, the options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR \fIuser\fR
+.RS 4
+Add the
+\fIuser\fR
+to the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR \fIuser\fR
+.RS 4
+Remove the
+\fIuser\fR
+from the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\-password\fR
+.RS 4
+Remove the password from the named
+\fIgroup\fR\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-restrict\fR
+.RS 4
+Restrict the access to the named
+\fIgroup\fR\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-A\fR, \fB\-\-administrators\fR \fIuser\fR,\&.\&.\&.
+.RS 4
+Set the list of administrative users\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-members\fR \fIuser\fR,\&.\&.\&.
+.RS 4
+Set the list of group members\&.
+.RE
+.SH "CAVEATS"
+.PP
+This tool only operates on the
+/etc/group
+and /etc/gshadow files\&.
+Thus you cannot change any NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBnewgrp\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/gpasswd.1.xml b/man/gpasswd.1.xml
new file mode 100644 (file)
index 0000000..f81c579
--- /dev/null
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1996       , Rafal Maszkowski
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY ENCRYPT_METHOD        SYSTEM "login.defs.d/ENCRYPT_METHOD.xml">
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!ENTITY MD5_CRYPT_ENAB        SYSTEM "login.defs.d/MD5_CRYPT_ENAB.xml">
+<!ENTITY SHA_CRYPT_MIN_ROUNDS  SYSTEM "login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml">
+]>
+
+<refentry id='gpasswd.1'>
+  <!-- $Id: gpasswd.1.xml 3008 2009-05-26 19:23:40Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>gpasswd</refentrytitle>
+    <manvolnum>1</manvolnum>
+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>gpasswd</refname>
+    <refpurpose>
+      <phrase condition="no_gshadow">
+       administer <filename>/etc/group</filename>
+      </phrase>
+      <phrase condition="gshadow">
+       administer <filename>/etc/group</filename> and
+       <filename>/etc/gshadow</filename>
+      </phrase>
+    </refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>gpasswd</command>
+      <arg choice='opt'>
+       <replaceable>option</replaceable>
+      </arg>
+      <arg choice='plain'>
+       <replaceable>group</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>gpasswd</command> command is used to administer
+      <filename>/etc/group</filename><phrase condition="gshadow">,
+      and <filename>/etc/gshadow</filename></phrase>.
+      Every group can have
+      <phrase condition="gshadow">administrators,</phrase>
+      members and a password.
+    </para>
+    <para condition="gshadow">
+      System administrators can use the <option>-A</option> option to define
+      group administrator(s) and the <option>-M</option> option to define
+      members. They have all rights of group administrators and members.
+    </para>
+    <para>
+      <command>gpasswd</command> called by
+      <phrase condition="gshadow">a group administrator</phrase>
+      <phrase condition="no_gshadow">a system administrator</phrase>
+      with a group name only prompts for the new password of the
+      <replaceable>group</replaceable>.
+    </para>
+    <para>
+      If a password is set the members can still use <citerefentry>
+      <refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry> without a password, and non-members must supply the
+      password.
+    </para>
+
+    <refsect2 id='notes_about_group_passwords'>
+      <title>Notes about group passwords</title>
+      <para>
+       Group passwords are an inherent security problem since more than one
+       person is permitted to know the password. However, groups are a
+       useful tool for permitting co-operation between different users.
+      </para>
+    </refsect2>
+
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para condition="gshadow">
+      Except for the <option>-A</option> and <option>-M</option> options,
+      the options cannot be combined.
+    </para>
+    <para condition="no_gshadow">
+      The options cannot be combined.
+    </para>
+    <para>
+      The options which apply to the <command>gpasswd</command> command are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-a</option>, <option>--add</option> <replaceable>user</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Add the <replaceable>user</replaceable> to the named
+           <replaceable>group</replaceable>.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-d</option>, <option>--delete</option> <replaceable>user</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Remove the <replaceable>user</replaceable> from the named
+           <replaceable>group</replaceable>.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-r</option>, <option>--remove-password</option>
+       </term>
+       <listitem>
+         <para>
+           Remove the password from the named <replaceable>group</replaceable>.
+           Only group members will be allowed to use
+           <command>newgrp</command> to join the named
+           <replaceable>group</replaceable>.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-R</option>, <option>--restrict</option>
+       </term>
+       <listitem>
+         <para>
+           Restrict the access to the named <replaceable>group</replaceable>.
+           Only group members will be allowed to use
+           <command>newgrp</command> to join the named
+           <replaceable>group</replaceable>.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+    <variablelist remap='IP' condition="gshadow">
+      <varlistentry>
+       <term>
+         <option>-A</option>, <option>--administrators</option> <replaceable>user</replaceable>,...
+       </term>
+       <listitem>
+         <para>
+           Set the list of administrative users.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-M</option>, <option>--members</option> <replaceable>user</replaceable>,...
+       </term>
+       <listitem>
+         <para>
+           Set the list of group members.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      This tool only operates on the <filename>/etc/group</filename>
+      <phrase condition="gshadow"> and <filename>/etc/gshadow</filename>
+      files.</phrase>
+      <phrase condition="no_gshadow">file.</phrase>
+      Thus you cannot change any NIS or LDAP group. This must be performed
+      on the corresponding server.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &ENCRYPT_METHOD;
+      &MAX_MEMBERS_PER_GROUP;
+      &MD5_CRYPT_ENAB;
+      &SHA_CRYPT_MIN_ROUNDS; <!--This also document SHA_CRYPT_MAX_ROUNDS-->
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="gshadow">
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry><phrase condition="gshadow">,
+      <citerefentry>
+       <refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry></phrase>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/groupadd.8 b/man/groupadd.8
new file mode 100644 (file)
index 0000000..c41419c
--- /dev/null
@@ -0,0 +1,213 @@
+'\" t
+.\"     Title: groupadd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "GROUPADD" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groupadd \- create a new group
+.SH "SYNOPSIS"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIoptions\fR] \fIgroup\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBgroupadd\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGID\fR
+.RS 4
+The numerical value of the group\'s ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than 999 and greater than every other group\&. Values between 0 and 999 are typically reserved for system accounts\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR \fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (GID_MIN, GID_MAX and others)\&. Multiple
+\fB\-K\fR
+options can be specified\&.
+.sp
+Example:
+\fB\-K \fR\fIGID_MIN\fR=\fI100\fR
+\fB\-K \fR\fIGID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K \fR
+\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+doesn\'t work yet\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+This option permits to add a group with a non\-unique GID\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR \fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system group\&.
+.sp
+The numeric identifiers of new system groups are choosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "CAVEATS"
+.PP
+Groupnames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+You may not add a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "EXIT VALUES"
+.PP
+The
+\fBgroupadd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID not unique (when
+\fB\-o\fR
+not used)
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name not unique
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\'t update group file
+.RE
+.SH "SEE ALSO"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/groupadd.8.xml b/man/groupadd.8.xml
new file mode 100644 (file)
index 0000000..2ff9813
--- /dev/null
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1991       , Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY GID_MAX               SYSTEM "login.defs.d/GID_MAX.xml">
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!ENTITY SYS_GID_MAX           SYSTEM "login.defs.d/SYS_GID_MAX.xml">
+<!ENTITY % config SYSTEM "config.xml">
+%config;
+]>
+<refentry id='groupadd.8'>
+  <!-- $Id: groupadd.8.xml 2964 2009-05-21 12:02:12Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>groupadd</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>groupadd</refname>
+    <refpurpose>create a new group</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>groupadd</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+      </arg>
+      <arg choice='plain'>
+       <replaceable>group</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>The <command>groupadd</command> command creates a new group
+      account using the values specified on the command line plus the default
+      values from the system. The new group will be entered into the system
+      files as needed.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>groupadd</command> command
+      are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-f</option>, <option>--force</option>
+       </term>
+       <listitem>
+         <para>
+           This option causes the command to simply exit with success
+           status if the specified group already exists. When used with
+           <option>-g</option>, and the specified GID already exists,
+           another (unique) GID is chosen (i.e. <option>-g</option> is
+           turned off).
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-g</option>, <option>--gid</option> <replaceable>GID</replaceable>
+       </term>
+       <listitem>
+         <para>The numerical value of the group's ID. This value must be
+           unique, unless the <option>-o</option> option is used. The value
+           must be non-negative. The default is to use the smallest ID
+           value greater than 999 and greater than every other group.
+           Values between 0 and 999 are typically reserved for system
+           accounts.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-h</option>, <option>--help</option></term>
+       <listitem>
+         <para>Display help message and exit.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-K</option>, <option>--key</option> <replaceable>KEY</replaceable>=<replaceable>VALUE</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Overrides <filename>/etc/login.defs</filename> defaults 
+           (GID_MIN, GID_MAX and others). Multiple
+           <option>-K</option> options can be specified.
+         </para>
+         <para>
+            Example: <option>-K </option><replaceable>GID_MIN</replaceable>=<replaceable>100</replaceable>
+           <option>-K </option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>
+         </para>
+         <para>
+           Note: <option>-K </option>
+           <replaceable>GID_MIN</replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>
+           doesn't work yet.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-o</option>, <option>--non-unique</option>
+       </term>
+       <listitem>
+         <para>
+           This option permits to add a group with a non-unique GID.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-p</option>, <option>--password</option>
+         <replaceable>PASSWORD</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The encrypted password, as returned by <citerefentry>
+           <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+           </citerefentry>. The default is to disable the password.
+         </para>
+         <para>
+           <emphasis role="bold">Note:</emphasis> This option is not
+           recommended because the password (or encrypted password) will
+           be visible by users listing the processes.
+         </para>
+         <para>
+           You should make sure the password respects the system's
+           password policy.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-r</option>, <option>--system</option>
+       </term>
+       <listitem>
+         <para>
+           Create a system group.
+         </para>
+         <para>
+           The numeric identifiers of new system groups are choosen in
+           the <option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option>
+           range, defined in <filename>login.defs</filename>, instead of
+           <option>GID_MIN</option>-<option>GID_MAX</option>.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &GID_MAX; <!-- documents also GID_MIN -->
+      &MAX_MEMBERS_PER_GROUP;
+      &SYS_GID_MAX; <!-- documents also SYS_GID_MIN -->
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="gshadow">
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+   <refsect1 id='caveats'>
+     <title>CAVEATS</title>
+     <para>
+       Groupnames must start with a lower case letter or an underscore,
+       followed by lower case letters, digits, underscores, or dashes.
+       They can end with a dollar sign.
+       In regular expression terms: [a-z_][a-z0-9_-]*[$]?
+     </para>
+     <para>
+       Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long.
+     </para>
+     <para>
+       You may not add a NIS or LDAP group. This must be performed on the
+       corresponding server.
+     </para>
+     <para>
+       If the groupname already exists in an external group database such
+       as NIS or LDAP, <command>groupadd</command> will deny the group
+       creation request.
+     </para>
+   </refsect1>
+
+  <refsect1 id='exit_values'>
+    <title>EXIT VALUES</title>
+    <para>
+      The <command>groupadd</command> command exits with the following values:
+      <variablelist>
+       <varlistentry>
+         <term><replaceable>0</replaceable></term>
+         <listitem>
+           <para>success</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>2</replaceable></term>
+         <listitem>
+           <para>invalid command syntax</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>3</replaceable></term>
+         <listitem>
+           <para>invalid argument to option</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>4</replaceable></term>
+         <listitem>
+           <para>GID not unique (when <option>-o</option> not used)</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>9</replaceable></term>
+         <listitem>
+           <para>group name not unique</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>10</replaceable></term>
+         <listitem>
+           <para>can't update group file</para>
+         </listitem>
+       </varlistentry>
+      </variablelist>
+    </para>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para><citerefentry>
+       <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/groupdel.8 b/man/groupdel.8
new file mode 100644 (file)
index 0000000..8052469
--- /dev/null
@@ -0,0 +1,108 @@
+'\" t
+.\"     Title: groupdel
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "GROUPDEL" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groupdel \- delete a group
+.SH "SYNOPSIS"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR \fIgroup\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupdel\fR
+command modifies the system account files, deleting all entries that refer to
+\fIgroup\fR\&. The named group must exist\&.
+.SH "CAVEATS"
+.PP
+You may not remove the primary group of any existing user\&. You must remove the user before you remove the group\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this group\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBgroupdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\'t exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+can\'t remove user\'s primary group
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\'t update group file
+.RE
+.SH "SEE ALSO"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)
diff --git a/man/groupdel.8.xml b/man/groupdel.8.xml
new file mode 100644 (file)
index 0000000..780614e
--- /dev/null
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+]>
+<refentry id='groupdel.8'>
+  <!-- $Id: groupdel.8.xml 2947 2009-05-19 20:31:45Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>groupdel</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>groupdel</refname>
+    <refpurpose>delete a group</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>groupdel</command>
+      <arg choice='plain'>
+       <replaceable>group</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para> The <command>groupdel</command> command modifies the system
+      account files, deleting all entries that refer to <emphasis
+      remap='I'>group</emphasis>. The named group must exist.
+    </para>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      You may not remove the primary group of any existing user. You
+      must remove the user before you remove the group.
+    </para>
+    <para>
+      You should manually check all file systems to ensure that no files
+      remain owned by this group.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &MAX_MEMBERS_PER_GROUP;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="gshadow">
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='exit_values'>
+    <title>EXIT VALUES</title>
+    <para>
+      The <command>groupdel</command> command exits with the following values:
+      <variablelist>
+       <varlistentry>
+         <term><replaceable>0</replaceable></term>
+         <listitem>
+           <para>success</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>2</replaceable></term>
+         <listitem>
+           <para>invalid command syntax</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>6</replaceable></term>
+         <listitem>
+           <para>specified group doesn't exist</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>8</replaceable></term>
+         <listitem>
+           <para>can't remove user's primary group</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>10</replaceable></term>
+         <listitem>
+           <para>can't update group file</para>
+         </listitem>
+       </varlistentry>
+      </variablelist>
+    </para>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para><citerefentry>
+       <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/groupmems.8 b/man/groupmems.8
new file mode 100644 (file)
index 0000000..20b9b32
--- /dev/null
@@ -0,0 +1,158 @@
+'\" t
+.\"     Title: groupmems
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "GROUPMEMS" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groupmems \- administer members of a user\'s primary group
+.SH "SYNOPSIS"
+.HP \w'\fBgroupmems\fR\ 'u
+\fBgroupmems\fR \-a\ \fIuser_name\fR | \-d\ \fIuser_name\fR | [\-g\ \fIgroup_name\fR] | \-l | \-p 
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupmems\fR
+command allows a user to administer his/her own group membership list without the requirement of superuser privileges\&. The
+\fBgroupmems\fR
+utility is for systems that configure its users to be in their own name sake primary group (i\&.e\&., guest / guest)\&.
+.PP
+Only the superuser, as administrator, can use
+\fBgroupmems\fR
+to alter the memberships of other groups\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBgroupmems\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR \fIuser_name\fR
+.RS 4
+Add an user to the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR \fIuser_name\fR
+.RS 4
+Delete a user from the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, the user will be removed from the list of members and administrators of the group\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-group\fR \fIgroup_name\fR
+.RS 4
+The superuser can specify which group membership list to modify\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+List the group membership list\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-purge\fR
+.RS 4
+Purge all users from the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.SH "SETUP"
+.PP
+The
+\fBgroupmems\fR
+executable should be in mode
+2770
+as user
+\fIroot\fR
+and in group
+\fIgroups\fR\&. The system administrator can add users to group
+\fIgroups\fR
+to allow or disallow them using the
+\fBgroupmems\fR
+utility to manage their own group membership list\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+       $ groupadd \-r groups
+       $ chmod 2770 groupmems
+       $ chown root\&.groups groupmems
+       $ groupmems \-g groups \-a gk4
+    
+.fi
+.if n \{\
+.RE
+.\}
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+secure group account information
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/groupmems.8.xml b/man/groupmems.8.xml
new file mode 100644 (file)
index 0000000..e43a7e8
--- /dev/null
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 2005       , Tomasz Kłoczko
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+]>
+<refentry id='groupmems.8'>
+  <!-- $Id: groupmems.8.xml 2491 2009-03-07 16:30:49Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>groupmems</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>groupmems</refname>
+    <refpurpose>administer members of a user's primary group</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>groupmems</command>
+      <group choice='plain'>
+       <arg choice='plain'>-a <replaceable>user_name</replaceable></arg>
+       <arg choice='plain'>-d <replaceable>user_name</replaceable></arg>
+       <arg choice='opt'>-g <replaceable>group_name</replaceable></arg>
+       <arg choice='plain'>-l </arg><arg choice='plain'>-p </arg>
+      </group>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>groupmems</command> command allows a user to administer
+      his/her own group membership list without the requirement of
+      superuser privileges. The <command>groupmems</command> utility is for
+      systems that configure its users to be in their own name sake primary
+      group (i.e., guest / guest).
+    </para>
+
+    <para>Only the superuser, as administrator, can use
+      <command>groupmems</command> to alter the memberships of other groups.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>groupmems</command> command
+      are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term><option>-a</option>, <option>--add</option> <replaceable>user_name</replaceable></term>
+       <listitem>
+         <para>Add an user to the group membership list.</para>
+         <para condition="gshadow">
+           If the <filename>/etc/gshadow</filename> file exist, and the
+           group has no entry in the <filename>/etc/gshadow</filename>
+           file, a new entry will be created.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-d</option>, <option>--delete</option> <replaceable>user_name</replaceable></term>
+       <listitem>
+         <para>Delete a user from the group membership list.</para>
+         <para condition="gshadow">
+           If the <filename>/etc/gshadow</filename> file exist, the user
+           will be removed from the list of members and administrators of
+           the group.
+         </para>
+         <para condition="gshadow">
+           If the <filename>/etc/gshadow</filename> file exist, and the
+           group has no entry in the <filename>/etc/gshadow</filename>
+           file, a new entry will be created.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-g</option>, <option>--group</option> <replaceable>group_name</replaceable></term>
+       <listitem>
+         <para>The superuser can specify which group membership
+           list to modify.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-l</option>, <option>--list</option></term>
+       <listitem>
+         <para>List the group membership list.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-p</option>, <option>--purge</option></term>
+       <listitem>
+         <para>Purge all users from the group membership list.</para>
+         <para condition="gshadow">
+           If the <filename>/etc/gshadow</filename> file exist, and the
+           group has no entry in the <filename>/etc/gshadow</filename>
+           file, a new entry will be created.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='setup'>
+    <title>SETUP</title>
+    <para>
+      The <command>groupmems</command> executable should be in mode
+      <literal>2770</literal> as user <emphasis>root</emphasis> and in group
+      <emphasis>groups</emphasis>. The system administrator can add users to
+      group <emphasis>groups</emphasis> to allow or disallow them using the
+      <command>groupmems</command> utility to manage their own group
+      membership list.
+    </para>
+
+    <programlisting>
+       $ groupadd -r groups
+       $ chmod 2770 groupmems
+       $ chown root.groups groupmems
+       $ groupmems -g groups -a gk4
+    </programlisting>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &MAX_MEMBERS_PER_GROUP;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="gshadow">
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>secure group account information</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/groupmod.8 b/man/groupmod.8
new file mode 100644 (file)
index 0000000..1eb6d1c
--- /dev/null
@@ -0,0 +1,172 @@
+'\" t
+.\"     Title: groupmod
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "GROUPMOD" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groupmod \- modify a group definition on the system
+.SH "SYNOPSIS"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIoptions\fR] \fIGROUP\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroupmod\fR
+command modifies the definition of the specified
+\fIGROUP\fR
+by modifying the appropriate entry in the group database\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBgroupmod\fR
+command are:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. Values between 0 and 999 are typically reserved for system groups\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR \fINEW_GROUP\fR
+.RS 4
+The name of the group will be changed from
+\fIGROUP\fR
+to
+\fINEW_GROUP\fR
+name\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR \fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBgroupmod\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+specified group doesn\'t exist
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\'t exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\'t update group file
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/groupmod.8.xml b/man/groupmod.8.xml
new file mode 100644 (file)
index 0000000..80cd946
--- /dev/null
@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1991       , Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+]>
+<refentry id='groupmod.8'>
+  <!-- $Id: groupmod.8.xml 2952 2009-05-19 22:00:14Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>groupmod</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>groupmod</refname>
+    <refpurpose>modify a group definition on the system</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>groupmod</command>
+      <arg choice='opt'>
+        <replaceable>options</replaceable>
+      </arg>
+      <arg choice='plain'><replaceable>GROUP</replaceable></arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>groupmod</command> command modifies the definition of the
+      specified <replaceable>GROUP</replaceable> by modifying the appropriate
+      entry in the group database.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>groupmod</command> command
+      are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-g</option>, <option>--gid</option> <replaceable>GID</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The group ID of the given <replaceable>GROUP</replaceable> will
+           be changed to <replaceable>GID</replaceable>.
+         </para>
+         <para>
+           The value of
+           <replaceable>GID</replaceable> must be a non-negative decimal
+           integer. This value must be unique, unless the
+           <option>-o</option> option is used. Values between 0 and 999 are
+           typically reserved for system groups.
+         </para>
+         <para>
+           Any files that have the
+           old group ID and must continue to belong to
+           <replaceable>GROUP</replaceable>, must have their group ID
+           changed manually.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-h</option>, <option>--help</option></term>
+       <listitem>
+         <para>Display help message and exit.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-n</option>, <option>--new-name</option>
+         <replaceable>NEW_GROUP</replaceable>
+       </term>
+       <listitem>
+         <para> 
+           The name of the group will be changed from <replaceable>GROUP</replaceable>
+           to <replaceable>NEW_GROUP</replaceable> name.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-o</option>, <option>--non-unique</option>
+       </term>
+       <listitem>
+         <para>
+           When used with the <option>-g</option> option, allow to change the
+           group <replaceable>GID</replaceable> to a non-unique value.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-p</option>, <option>--password</option>
+         <replaceable>PASSWORD</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The encrypted password, as returned by <citerefentry>
+           <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+           </citerefentry>.
+         </para>
+         <para>
+           <emphasis role="bold">Note:</emphasis> This option is not
+           recommended because the password (or encrypted password) will
+           be visible by users listing the processes.
+         </para>
+         <para>
+           You should make sure the password respects the system's
+           password policy.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &MAX_MEMBERS_PER_GROUP;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="gshadow">
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='exit_values'>
+    <title>EXIT VALUES</title>
+    <para>
+      The <command>groupmod</command> command exits with the following values:
+      <variablelist>
+       <varlistentry>
+         <term><replaceable>0</replaceable></term>
+         <listitem>
+           <para>success</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>2</replaceable></term>
+         <listitem>
+           <para>invalid command syntax</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>3</replaceable></term>
+         <listitem>
+           <para>invalid argument to option</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>4</replaceable></term>
+         <listitem>
+           <para>specified group doesn't exist</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>6</replaceable></term>
+         <listitem>
+           <para>specified group doesn't exist</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>9</replaceable></term>
+         <listitem>
+           <para>group name already in use</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>10</replaceable></term>
+         <listitem>
+           <para>can't update group file</para>
+         </listitem>
+       </varlistentry>
+      </variablelist>
+    </para>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/groups.1 b/man/groups.1
new file mode 100644 (file)
index 0000000..dd08473
--- /dev/null
@@ -0,0 +1,56 @@
+'\" t
+.\"     Title: groups
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: English
+.\"
+.TH "GROUPS" "1" "07/24/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+groups \- display current group names
+.SH "SYNOPSIS"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIuser\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "NOTE"
+.PP
+Systems which do not support concurrent group sets will have the information from
+/etc/group
+reported\&. The user must use
+\fBnewgrp\fR
+or
+\fBsg\fR
+to change their current real and effective group ID\&.
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/groups.1.xml b/man/groups.1.xml
new file mode 100644 (file)
index 0000000..dd0f3aa
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1991 - 1994, Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='groups.1'>
+  <!-- $Id: groups.1.xml 2435 2008-10-11 11:44:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>groups</refentrytitle>
+    <manvolnum>1</manvolnum>
+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>groups</refname>
+    <refpurpose>display current group names</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>groups</command>
+      <arg choice='opt'>
+       <replaceable>user</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>groups</command> command displays the current group names
+      or ID values. If the value does not have a corresponding entry in
+      <filename>/etc/group</filename>, the value will be displayed as the
+      numerical group value. The optional <emphasis
+      remap='I'>user</emphasis> parameter will display the groups for the
+      named <emphasis remap='I'>user</emphasis>.
+    </para>
+  </refsect1>
+
+  <refsect1 id='note'>
+    <title>NOTE</title>
+    <para>
+      Systems which do not support concurrent group sets will have the
+      information from <filename>/etc/group</filename> reported. The user
+      must use <command>newgrp</command> or <command>sg</command> to change
+      their current real and effective group ID.
+    </para>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>getgid</refentrytitle><manvolnum>2</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>getgroups</refentrytitle><manvolnum>2</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>getuid</refentrytitle><manvolnum>2</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/grpck.8 b/man/grpck.8
new file mode 100644 (file)
index 0000000..faa1eed
--- /dev/null
@@ -0,0 +1,220 @@
+'\" t
+.\"     Title: grpck
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "GRPCK" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+grpck \- verify integrity of group files
+.SH "SYNOPSIS"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [\-r] [\fIgroup\fR\ [\ \fIshadow\fR\ ]]
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [\-s] [\fIgroup\fR\ [\ \fIshadow\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Checks are made to verify that each entry has:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid group name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-r\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/groupand /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBgrpck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad group entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\'t open group files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\'t lock group files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\'t update group files
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/grpck.8.xml b/man/grpck.8.xml
new file mode 100644 (file)
index 0000000..baecfcb
--- /dev/null
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1992 - 1993, Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+]>
+<refentry id='grpck.8'>
+  <!-- $Id: grpck.8.xml 3023 2009-06-20 13:02:33Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>grpck</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>grpck</refname>
+    <refpurpose>verify integrity of group files</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>grpck</command>    <arg choice='opt'>-r </arg>
+      <arg choice='opt'>
+       <arg choice='plain'><replaceable>group</replaceable></arg>
+       <arg choice='opt' condition="gshadow">
+         <arg choice='plain'><replaceable>shadow</replaceable></arg>
+       </arg>
+      </arg>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>grpck</command>    <arg choice='opt'>-s </arg>
+      <arg choice='opt'>
+       <arg choice='plain'><replaceable>group</replaceable></arg>
+       <arg choice='opt' condition="gshadow">
+         <arg choice='plain'><replaceable>shadow</replaceable></arg>
+       </arg>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>grpck</command> command verifies the integrity of the
+      groups information. It checks that all entries in
+      <filename>/etc/group</filename> <phrase condition="gshadow">and
+      <filename>/etc/gshadow</filename></phrase>
+      have the proper format and contain valid data.
+      The user is prompted to delete entries that are
+      improperly formatted or which have other uncorrectable errors.
+    </para>
+
+    <para>Checks are made to verify that each entry has:</para>
+
+    <itemizedlist mark='bullet'>
+      <listitem>
+       <para>the correct number of fields</para>
+      </listitem>
+      <listitem>
+       <para>a unique and valid group name</para>
+      </listitem>
+      <listitem>
+       <para>
+         a valid group identifier
+         <phrase condition="gshadow"> (<filename>/etc/group</filename>
+         only)</phrase>
+       </para>
+      </listitem>
+      <listitem>
+       <para>
+         a valid list of members
+         <phrase condition="gshadow"> and administrators</phrase>
+       </para>
+      </listitem>
+      <listitem condition="gshadow">
+       <para>
+         a corresponding entry in the <filename>/etc/gshadow</filename>
+         file (respectively <filename>/etc/group</filename> for the
+         <filename>gshadow</filename> checks)
+       </para>
+      </listitem>
+    </itemizedlist>
+
+    <para>
+      The checks for correct number of fields and unique group name are
+      fatal. If an entry has the wrong number of fields, the user will be
+      prompted to delete the entire line. If the user does not answer
+      affirmatively, all further checks are bypassed. An entry with a
+      duplicated group name is prompted for deletion, but the remaining
+      checks will still be made. All other errors are warnings and the user
+      is encouraged to run the <command>groupmod</command> command to
+      correct the error.
+    </para>
+
+    <para>
+      The commands which operate on the <filename>/etc/group</filename>
+      <phrase condition="no_gshadow">file</phrase><phrase
+      condition="gshadow">and <filename>/etc/gshadow</filename> files</phrase>
+      are not able to alter corrupted or duplicated entries. 
+      <command>grpck</command> should be used in those circumstances to
+      remove the offending entries.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>grpck</command> command are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term><option>-r</option></term>
+       <listitem>
+         <para>
+           Execute the <command>grpck</command> command in read-only mode.
+           This causes all questions regarding changes to be answered
+           <emphasis>no</emphasis> without user intervention.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-s</option></term>
+       <listitem>
+         <para>
+           Sort entries in <filename>/etc/group</filename>
+           <phrase condition="gshadow">and
+           <filename>/etc/gshadow</filename></phrase>
+           by GID.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+    <para>
+      By default, <command>grpck</command> operates on
+      <filename>/etc/group</filename><phrase condition="gshadow"> and
+      <filename>/etc/gshadow</filename></phrase>.
+      The user may select alternate files with the <emphasis
+      remap='I'>group</emphasis>
+      <phrase condition="no_gshadow">parameter.</phrase>
+      <phrase condition="gshadow">and <emphasis remap='I'>shadow</emphasis>
+      parameters.</phrase>
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &MAX_MEMBERS_PER_GROUP;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="gshadow">
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='exit_values'>
+    <title>EXIT VALUES</title>
+    <para>
+      The <command>grpck</command> command exits with the following values:
+      <variablelist>
+       <varlistentry>
+         <term><replaceable>0</replaceable></term>
+         <listitem>
+           <para>success</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>1</replaceable></term>
+         <listitem>
+           <para>invalid command syntax</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>2</replaceable></term>
+         <listitem>
+           <para>one or more bad group entries</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>3</replaceable></term>
+         <listitem>
+           <para>can't open group files</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>4</replaceable></term>
+         <listitem>
+           <para>can't lock group files</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>5</replaceable></term>
+         <listitem>
+           <para>can't update group files</para>
+         </listitem>
+       </varlistentry>
+      </variablelist>
+    </para>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <phrase condition="gshadow">
+       <citerefentry>
+         <refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum>,
+       </citerefentry>,
+      </phrase>
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/grpconv.8 b/man/grpconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/grpunconv.8 b/man/grpunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/gshadow.5 b/man/gshadow.5
new file mode 100644 (file)
index 0000000..aff6f61
--- /dev/null
@@ -0,0 +1,94 @@
+'\" t
+.\"     Title: gshadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: English
+.\"
+.TH "GSHADOW" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+gshadow \- shadowed group file
+.SH "DESCRIPTION"
+.PP
+
+/etc/gshadow
+contains the shadowed information for group accounts\&.
+.PP
+This file must not be readable by regular users if password security is to be maintained\&.
+.PP
+Each line of this file contains the following colon\-separated fields:
+.PP
+\fBgroup name\fR
+.RS 4
+It must be a valid group name, which exist on the system\&.
+.RE
+.PP
+\fBencrypted password\fR
+.RS 4
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, users will not be able to use a unix password to access the group (but group members do not need the password)\&.
+.sp
+The password is used when an user who is not a member of the group wants to gain the permissions of this group (see
+\fBnewgrp\fR(1))\&.
+.sp
+This field may be empty, in which case only the group members can gain the group permissions\&.
+.sp
+A password field which starts with a exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+This password supersedes any password specified in
+/etc/group\&.
+.RE
+.PP
+\fBadministrators\fR
+.RS 4
+It must be a comma\-separated list of user names\&.
+.sp
+Administrators can change the password or the members of the group\&.
+.sp
+Administrators also have the same permissions as the members (see below)\&.
+.RE
+.PP
+\fBmembers\fR
+.RS 4
+It must be a comma\-separated list of user names\&.
+.sp
+Members can access the group without being prompted for a password\&.
+.sp
+You should use the same list of users as in
+/etc/group\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBgpasswd\fR(5),
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBgrpconv\fR(8),
+\fBnewgrp\fR(1)\&.
diff --git a/man/gshadow.5.xml b/man/gshadow.5.xml
new file mode 100644 (file)
index 0000000..df6ff9a
--- /dev/null
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 2005 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='gshadow.5'>
+  <!-- $Id: gshadow.5.xml 2965 2009-05-21 13:53:56Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>gshadow</refentrytitle>
+    <manvolnum>5</manvolnum>
+    <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>gshadow</refname>
+    <refpurpose>shadowed group file</refpurpose>
+  </refnamediv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      <filename>/etc/gshadow</filename> contains the shadowed information
+      for group accounts.
+    </para>
+
+    <para>
+      This file must not be readable by regular users if password security
+      is to be maintained.
+    </para>
+
+    <para>
+      Each line of this file contains the following colon-separated
+      fields:
+    </para>
+    <variablelist>
+      <varlistentry>
+       <term><emphasis role="bold">group name</emphasis></term>
+       <listitem>
+         <para>
+           It must be a valid group name, which exist on the system.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><emphasis role="bold">encrypted password</emphasis></term>
+       <listitem>
+         <para>
+           Refer to <citerefentry><refentrytitle>crypt</refentrytitle>
+           <manvolnum>3</manvolnum></citerefentry> for details on how
+           this string is interpreted.
+         </para>
+         <para>
+           If the password field contains some string that is not a valid
+           result of <citerefentry><refentrytitle>crypt</refentrytitle>
+           <manvolnum>3</manvolnum></citerefentry>, for instance ! or *,
+           users will not be able to use a unix password to access the
+           group (but group members do not need the password).
+         </para>
+         <para>
+           The password is used when an user who is not a member of the
+           group wants to gain the permissions of this group (see
+           <citerefentry><refentrytitle>newgrp</refentrytitle>
+           <manvolnum>1</manvolnum></citerefentry>).
+         </para>
+         <para>
+           This field may be empty, in which case only the group members
+           can gain the group permissions.
+         </para>
+         <para>
+           A password field which starts with a exclamation mark means
+           that the password is locked.  The remaining characters on the
+           line represent the password field before the password was
+           locked.
+         </para>
+         <para>
+           This password supersedes any password specified in
+           <filename>/etc/group</filename>.
+         </para>
+
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><emphasis role="bold">administrators</emphasis></term>
+       <listitem>
+         <para>
+           It must be a comma-separated list of user names.
+         </para>
+         <para>
+           Administrators can change the password or the members of the
+           group.
+         </para>
+         <para>
+           Administrators also have the same permissions as the members
+           (see below).
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><emphasis role="bold">members</emphasis></term>
+       <listitem>
+         <para>
+           It must be a comma-separated list of user names.
+         </para>
+         <para>
+           Members can access the group without being prompted for a
+           password.
+         </para>
+         <para>
+           You should use the same list of users as in
+           <filename>/etc/group</filename>.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>gpasswd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>grpconv</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/hu/Makefile.am b/man/hu/Makefile.am
new file mode 100644 (file)
index 0000000..33a5775
--- /dev/null
@@ -0,0 +1,17 @@
+
+mandir = @mandir@/hu
+
+man_MANS = \
+       chsh.1 \
+       gpasswd.1 \
+       groups.1 \
+       lastlog.8 \
+       login.1 \
+       newgrp.1 \
+       passwd.1 \
+       passwd.5 \
+       sg.1 \
+       su.1
+
+EXTRA_DIST = $(man_MANS)
\ No newline at end of file
diff --git a/man/hu/Makefile.in b/man/hu/Makefile.in
new file mode 100644 (file)
index 0000000..a38f790
--- /dev/null
@@ -0,0 +1,519 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/hu
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+       "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/hu
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+       chsh.1 \
+       gpasswd.1 \
+       groups.1 \
+       lastlog.8 \
+       login.1 \
+       newgrp.1 \
+       passwd.1 \
+       passwd.5 \
+       sg.1 \
+       su.1
+
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/hu/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/hu/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man5 install-man8 install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/hu/chsh.1 b/man/hu/chsh.1
new file mode 100644 (file)
index 0000000..6058c0a
--- /dev/null
@@ -0,0 +1,65 @@
+.\" Copyright 1990, John F. Haugh II
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\" This product includes software developed by John F. Haugh, II
+.\"      and other contributors.
+.\" 4. Neither the name of John F. Haugh, II nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: chsh.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH CHSH 1
+.SH NÉV
+chsh \- bejelentkezési parancsértelmező (héj) állítása
+.SH ÁTTEKINTÉS
+.TP 5
+\fBchsh\fR
+[\fB\-s\fR \fIhéjprogram\fR] [\fIfelhasználó\fR]
+.SH LEÍRÁS
+A \fBchsh\fR parancs a felhasználó bejelentkezési parancsértelmezőjét változtatja meg.
+Normál felhasználó csak a saját parancsértelmezőjét állíthatja, a 
+rendszergazda bárkiét.
+.PP
+A héjprogrammal (shell) szemben támasztott követelmény, hogy szerepeljen
+a \fI/etc/shells\fR fájlban, kivéve ha a rendszergazdáé mert
+neki minden beállítás elfogadott.
+Korlátozott parancsértelmezőt nem lehet másikra átállítani.
+Ezért nem tanácsos a \fB/bin/rsh\fR\-nak a \fI/etc/shells\fR\-ben
+való felsorolása, mert ha a felhasználó átvált erre a héj\-ra
+nem válthat másikra.
+.PP
+A \fB\-s\fR opció nélkül a \fBchsh\fR interaktív módon
+működik. Be kell írni az új értéket, vagy üresen hagyni a sort, hogy
+az éppen aktuális beállítás maradjon, ami \fB[ ]\fR jelek között látható.
+.SH FÁJLOK
+\fI/etc/passwd\fR \- felhaszálói nyilvántartás
+.br
+\fI/etc/shells\fR \- engedélyezett parancsértelmezők listája
+.SH LÁSD MÉG
+.BR chfn (1),
+.BR passwd (5)
+.SH MAGYAR FORDÍTÁS
+Székely Krisztián <szekelyk@edasz.hu>
diff --git a/man/hu/gpasswd.1 b/man/hu/gpasswd.1
new file mode 100644 (file)
index 0000000..b3cca6a
--- /dev/null
@@ -0,0 +1,81 @@
+.\" Copyright 1996, Rafal Maszkowski, rzm@pdi.net
+.\" All rights reserved. You can redistribute this man page 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.
+.\"
+.\"    $Id: gpasswd.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH GPASSWD 1
+.SH NÉV
+gpasswd \- az /etc/group fájlt adminisztrálja
+.br
+.SH ÁTTEKINTÉS
+.B gpasswd \fIcsoport\fR
+.br
+.B gpasswd
+.B \-a
+\fIfelhasználó\fR \fIcsoport\fR
+.br
+.B gpasswd
+.B \-d
+\fIfelhasználó\fR \fIcsoport\fR
+.br
+.B gpasswd
+.B \-R
+\fIcsoport\fR
+.br
+.B gpasswd
+.B \-r
+\fIcsoport\fR
+.br
+.B gpasswd
+.RB [ \-A
+\fIfelhasználó\fR,...]
+.RB [ \-M
+\fIfelhasználó\fR,...]
+\fIcsoport\fR
+.br
+.SH LEÍRÁS
+A
+.B gpasswd
+program segítségével adminisztrálhatjuk az /etc/group fájlt
+illetve az /etc/gshadow fájlt amennyiben a SHADOWGPR definiálva
+volt a fordítás alatt. Minden csoportban lehetnek adminisztrátorok,
+tagok és egy jelszó. A rendszeradminisztrátor a \fB\-A\fR opció
+segítségével definiálhat csoportadminisztrátor(oka)t és a \fB\-M\fR
+opcióval tagokat. A rendszeradminisztátor minden joggal rendelkezik,
+amellyel a csoportadminisztrátor és a csoport tagjai.
+.PP
+A csoportadminisztrátor a \fB\-a\fR kapcsolóval hozhat létre
+felhasználókat, és a \fB\-d\fR opcióval törölheti őket. Az 
+adminisztrátorok a \fB\-r\fR opcióval törölhetik a csoport
+jelszavát. Ha nincs jelszó beállítva, akkor csak a csoport
+tagjai használhatják a 
+.BR newgrp (1)
+parancsot a csatlakozáshoz. A \fB\-R\fR opció
+meggátolja a csoport elérését a 
+.BR newgrp (1)
+parancson keresztül.
+.PP
+Ha
+.B gpasswd
+parancsot a csoportadminisztrátor adja ki a csoport nevével,
+akkor csak a jelszót kell beírnia. Ha van jelszó, akkor a tagok
+be tudnak lépni a 
+.BR newgrp (1)
+paranccsal jelszó nélkül is, csak a csoporton kívüli felhasználóknak
+kell megadniuk a jelszót.
+
+.SH FÁJLOK
+\fI/etc/group\fR \- információ a csoportról
+.br
+\fI/etc/gshadow\fR \- információ a shadow csoportról
+.SH LÁSD MÉG
+.BR newgrp (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR grpck (8)
+.SH MAGYAR FORDÍTÁS
+Tímár András <timar_a@freemail.hu>
diff --git a/man/hu/groups.1 b/man/hu/groups.1
new file mode 100644 (file)
index 0000000..abaafe0
--- /dev/null
@@ -0,0 +1,59 @@
+.\" Copyright 1991 \- 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: groups.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH GROUPS 1
+.SH NÉV
+groups \- kiírja a jelenlegi csoportazonosító neveket
+.SH ÁTTEKINTÉS
+.B groups
+.RI [ felhasználó ]
+.SH LEÍRÁS
+A
+.B groups
+parancs kiírja a jelenlegi csoportazonosító neveket vagy számértékeket. Ha
+nincs az értéknek megfelelő bejegyzés a \fI/etc/group\fR fájlban, akkor a
+csoport azonosító számát írja ki. Az opcionális \fIfelhasználó\fR paraméter
+esetén azokat a csoportokat írja ki, amelyekbe a megadott \fIfelhasználó\fR
+tartozik.
+.SH MEGJEGYZÉS
+Azok a rendszerek, amelyek nem támogatják a konkurrens csoportbeállításokat,
+a kiírt információkat a \fI/etc/group\fR fájlból gyűjtik. A felhasználónak
+muszáj a \fBnewgrp\fR vagy a \fBsg\fR parancsot használniuk, hogy
+megváltoztassák a jelenlegi valódi és effektív csoportazonosítójukat.
+.SH FÁJLOK
+\fI/etc/group\fR \- információ a csoportokról
+.SH LÁSD MÉG
+.BR newgrp (1),
+.BR getgid (2),
+.BR getgroups (2),
+.BR getuid (2)
+.SH AUTHOR
+Julianne Frances Haugh (jfh@tab.com)
+.SH MAGYAR FORDÍTÁS
+ifj. Dyekiss Emil <emil2@cds.hu>
diff --git a/man/hu/lastlog.8 b/man/hu/lastlog.8
new file mode 100644 (file)
index 0000000..5377282
--- /dev/null
@@ -0,0 +1,68 @@
+.\" Copyright 1992, Phillip Street and Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    @(#)lastlog.8   3.3     08:24:58        29 Sep 1993 (National Guard Release)
+.\"    $Id: lastlog.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH LASTLOG 8
+.SH NÉV
+lastlog \- a lastlog fájl vizsgálata
+.SH ÁTTEKINTÉS
+.B lastlog
+.RB [ -u
+.IR uid ]
+.RB [ -t
+.IR napok száma ]
+.SH LEÍRÁS
+
+A \fBlastlog\fR formázza és olvashatóan megjeleníti a
+\fB/var/log/lastlog\fR tartalmát. A listában szerepel a \fBlogin-név\fR, a
+\fBterminál (port) azonosítója\fR és a felhasználó \fBlegutolsó
+belépésének ideje\fR.  Paraméterek nélkül meghívva a
+felhasználó-azonosítók (UID) alapján sorbarendezve jelennek meg az
+értékek. A \fB-u \fIlogin-név\fR opció megadása esetén csak a megadott
+felhasználó utolsó belépésének ideje jelenik meg. A \fB-t \fInapok
+száma\fR opció megadásával csak a megadott számú napon belüli belépési
+idők jelennek meg. A \fB-r\fR opció felülírja a \fB-u\fR opciót.
+.PP
+Ha a felhasználó még soha nem lépett be, akkor a terminál és az idő
+helyett a \fB**Never logged in**\fR felirat jelenik meg.
+.SH FÁJLOK
+/var/log/lastlog \- a felhasználók legutóbbi belépéseit tartalmazza
+.SH MEGJEGYZÉS
+Ha a felhasználói azonosító számok (UID-k) között nagyobb üres tartományok
+vannak, akkor a lastlog futásakor megtörténhet, hogy hosszabb ideig
+nem jelenik meg semmi a képernyőn (pl ha a 170-es és a 800-as azonosítójú
+felhasználók között nincs több azonosító, akkor a 171 és 799 közötti
+számok kiértékelése alatt a képernyőn nem változik semmi).
+.SH SZERZŐK
+Julianne Frances Haugh (jfh@tab.com)
+.br
+Phillip Street
+.SH MAGYAR FORDÍTÁS
+Hermann Benedek (bence@intercom.hu)
+
diff --git a/man/hu/login.1 b/man/hu/login.1
new file mode 100644 (file)
index 0000000..5d58f58
--- /dev/null
@@ -0,0 +1,123 @@
+.\" Copyright 1989 \- 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: login.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH LOGIN 1
+.SH NÉV
+login \- Új kapcsolat felvétele a rendszerrel (bejelentkezés)
+.SH ÁTTEKINTÉS
+.B login
+.RI [ felhasználónév " [" környezeti változók ]]
+.SH LEÍRÁS
+A
+.B login 
+programot a rendszerbe való belépésre használjuk. Általában nem 
+közvetlenül használjuk, hanem automatikusan meghívásra kerül, amikor a
+.I login:
+promptra válaszként beírjuk a felhasználónevünket.
+A
+.B login
+a shell szempontjából különleges kezelésű lehet és előfordulhat, hogy 
+nem hívható meg alfolyamatként. Tipikus példa erre, amikor a 
+.B login
+parancsot a shell \fBexec login\fR \-ként értelmezi, tehát az új 
+bejelentkezés előtt az aktuálisból való kilépésre készteti a 
+felhasználót. 
+Ha nem login shellből próbáljuk meg a \fBlogin\fR parancsot végrehajtani, 
+hibaüzenetet kapunk.
+.PP
+Ezután a jelszavunkat kell megadnunk. A beírt karakterek nem jelennek meg 
+a képernyőn, megelőzvén a 'leskelődést'. Ha többször hibás jelszót adunk 
+meg, a \fBlogin\fR kilép, és a kapcsolat megszakad.
+.PP
+Ha a jelszavunk érvényességi ideje korlátozott, a rendszer továbblépés 
+előtt felszólíthat a jelszó megváltoztatására. Ez azt jelenti, hogy a 
+jelszavunk lejárt, nem érvényes, vagy hamarosan le fog járni. A régi 
+jelszavunkat is esetleg meg kell adni ellenőrzésképpen, majd az általunk 
+választott új jelszót. A témában lásd: \fBpasswd \fR(1)
+.PP
+Sikeres bejelentkezés után néhány rendszerüzenetet kapunk, és a postaládánk 
+állapotáról némi visszajelszést. A rendszerüzenetfájl (\fI/etc/motd\fR) 
+kiíratását letilthatjuk egy 0 byte hosszúságú \fI.hushlogin\fR file 
+létrehozásával a login könyvtárunkban. A posta állapotától függően a 
+következő üzenetek valamelyikét kapjuk: "\fBYou have new mail.\fR" (Új 
+levél van), "\fBYou have mail.\fR" (Levél van), vagy "\fBNo Mail.\fR" 
+(Nincs levél).
+.PP
+A felhasználói\- (UID) és a csoportazonosítónk (GID) beállításra kerül az 
+\fI/etc/passwd\fR alapján. A \fB$HOME\fR, \fB$SHELL\fR,
+\fB$PATH\fR, \fB$LOGNAME\fR és a \fB$MAIL\fR környezeti változók 
+beállításra kerülnek a passwd adatbázis megfelelő mezői alapján.
+Az ulimit, umask és a nice is értéket kaphat a GECOS mező tartalma 
+alapján.
+.PP
+Néhány rendszeren a \fB$TERM\fR változó is értéket kap, miként az a 
+\fI/etc/ttytype\fR\-ban meg van írva.
+.PP
+Végrehajtódhat a parancsértelmezőnk inicializációs scriptje is. Ez ügyben 
+lásd a megfelelő kézikönyv\-oldalt.
+.SH FIGYELMEZTETÉSEK
+.PP
+A \fBlogin\fR ezen verziója sok fordítási opcióval rendelkezik, bár csak 
+néhány közülük az, ami használatban lehet egyes speciális gépeken.
+
+.PP
+A fájlok elhelyezkedése a rendszerkonfigurációk különbözőségéből adódóan 
+változhat.
+.SH FÁJLOK
+\fI/var/run/utmp\fR \- az aktuális bejelentkezések listája
+.br
+\fI/var/log/wtmp\fR \- az előző (eddigi) bejelentkezések listája
+.br
+\fI/etc/passwd\fR \- felhasználói account\-okra vonatkozó információk
+.br
+\fI/etc/shadow\fR \- titkosított jelszavak és érvényességi idő\-információk
+.br
+\fI/etc/motd\fR \- rendszerüzenet file
+.br
+\fI/etc/nologin\fR \- nem\-root felhasználók belépésének tiltása
+.br
+\fI/etc/ttytype\fR \- termináltípusok listája
+.br
+.br
+\fI$HOME/.hushlogin\fR \- korlátozza a rendszerüzenetek megjelenítését
+.br
+.SH LÁSD MÉG
+.PP
+.BR getty (8),
+.BR mail (1),
+.BR passwd (1),
+.BR sh (1),
+.BR su (1),
+.\" .BR d_passwd (5),
+.BR passwd (5),
+.BR nologin (5)
+.SH SZERZŐ
+Julianne Frances Haugh (jfh@bga.com)
+.SH MAGYAR FORDÍTÁS
+Niedermayer Miklós <mico@musician.org>
diff --git a/man/hu/newgrp.1 b/man/hu/newgrp.1
new file mode 100644 (file)
index 0000000..1ae1ad5
--- /dev/null
@@ -0,0 +1,89 @@
+.\" Copyright 1991, Julianne Frances Haugh
+.\" Hungarian translation by Peter Mamuzsics <zumu@mentha.hu>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: newgrp.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH NEWGRP 1
+.SH NÉV
+newgrp \- Csoportazonosító módosítása
+.br
+sg \- Parancs végrehajtása más csoportazonoító alatt
+.SH ÁTTEKINTÉS
+.BR newgrp " [" \- ]
+[\fIgroup\fR]
+.br
+.BR sg " [" \- ]
+[\fIgroup\fR [\fB\-c\fR \fIcommand\fR]]
+.SH LEÍRÁS
+A
+.B newgrp
+parancs a jelenlegi bejelentkezéshez tartozó csoportazonosító
+módosítására használható.  Ha a parancsot az elhagyható \fB\-\fR
+kapcsolóval hívtuk meg, akkor a rendszer úgy inicializálja újra
+a felhasználói környezetet, ahogy az a bejelelentkezés során 
+megtörténik, ellenkező esetben a jelenlegi környezet \- beleértve
+az aktuális munkakönyvtárat is \- változatlan marad.
+.PP
+A
+.B newgrp
+parancs lecseréli az aktuális csoportazonosítót a megnevezett
+vagy \- ha nincs megadva \- az \fI/etc/passwd\fR fájlban megadott
+alapértelmezett csoportra.  Ha a felhasználó nem rendelkezik jelszóval,
+de a csoport igen, vagy a felhasználó nem tagja a csoportnak,
+de a csoport rendelkezik jelszóval, akkor a rendszer bekéri a csoport
+jelszavát.
+Amennyiben a csoportnak nincs jelszava, és a felhasználó nem tagja a 
+csoportnak, akkor a hozzáférés nem lehetséges.
+.PP
+Az
+.B sg
+parancs működése hasonló a \fBnewgrp\fR parancs működéséhez,
+de ez nem cseréli le a felhasználó parancsértelmezőjét, így
+amikor kilépünk az \fBsg\fR parancsból, visszakapjuk az 
+eredeti csoportazonosítót.
+Az
+.B sg
+parancsnak egy másik, aposztrófok közé zárt parancsot is meg lehet
+adni, amely a \fB/bin/sh\fR parancsértelmezővel kerül végrehajtásra.
+.SH HIBÁK
+A \fBnewgrp\fR többféle fordítási beállítással rendelkezik,
+amelyeknek egy adott felhasználási környezetben csak egy részére
+lehet szükség.
+.SH FÁJLOK
+\fI/etc/passwd\fR      \- felhasználói információk
+.br
+\fI/etc/group\fR       \- csoportinfomációk
+.SH LÁSD MÉG
+.BR id (1),
+.BR login (1),
+.BR su (1)
+.SH SZERZŐ
+Julianne Frances Haugh (jfh@bga.com)
+.br
+.SH MAGYAR FORDÍTÁS
+Mamuzsics Péter <zumu@mentha.hu>
diff --git a/man/hu/passwd.1 b/man/hu/passwd.1
new file mode 100644 (file)
index 0000000..22be534
--- /dev/null
@@ -0,0 +1,164 @@
+.\" Copyright 1989 \- 1994, John F. Haugh II
+.\" All rights reserved.
+.\"
+.\" Redistribution is allowed, provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\" This product includes software developed by John F. Haugh, II
+.\"      and other contributors.
+.\" 4. Neither the name of John F. Haugh, II nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JOHN HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JOHN HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: passwd.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH PASSWD 1 "" \" \-*\- nroff \-*\-
+.SH NÉV
+passwd \- Felhasználói jelszó megváltoztatása
+.SH ÁTTEKINTÉS
+\fBpasswd\fR [\fB\-f\fR|\fB\-s\fR] [\fInév\fR]
+.br
+\fBpasswd\fR [\fB\-g\fR] [\fB\-r\fR|\fB\-R\fR] \fIcsoport\fR
+.br
+\fBpasswd\fR [\fB\-x\fR \fImax\fR] [\fB\-n\fR \fImin\fR]
+[\fB\-w\fR \fIfigy\fR] [\fB\-i\fR \fIinakt\fR] \fInév\fR
+.br
+\fBpasswd\fR {\fB\-l\fR|\fB\-u\fR|\fB\-d\fR|\fB\-S\fR} \fInév\fR
+.SH LEÍRÁS
+A \fBpasswd\fR a felhasználók és a csoportok megváltoztatását végzi.
+A felhasználók csak a saját jelszavukat változtathatják meg, a rendszergazda
+bárkiét. A csoportok jelszavát az adott csoport adminisztrátora
+változtathatja meg. 
+A \fBpasswd\fR ezen kívül használható a felhasználói adatok, mint pl. az
+igazi név, a login shell, vagy a jelszavak "szavatossági idejének"
+megváltoztatására is.
+.SS Jelszóváltozások
+A felhasználónak először a régi jelszavát kell beírnia, ha már volt neki.
+Ezután ennek a jelszónak a kódolt változatát összehasonlítja a tárolt
+jelszóval. A megfelelő jelszó beírására a felhasználónak csak egy lehetősége
+van.
+A rendszergazda átugorhatja ezt a lépést, így az elfelejtett jelszavak is
+megváltoztathatóak.
+.PP
+Miután a felhasználó beírta a jelszavát, a \fBpasswd\fR megvizsgálja, hogyan
+rendelkezett a rendszergazda a jelszavak "szavatossági idejéről". Amennyiben
+az idő nem alkalmas a jelszó megváltoztatására, \fBpasswd\fR kilép minden
+változtatás nélkül.
+.PP
+Ezekután a program bekéri a felhasználótól az új jelszót, majd
+megvizsgálja hogy elég bonyolult\-e.
+Általános szabályként elmondható, hogy a jelszavak jók, ha 6\-8 karakterből
+állnak, és a következő jelkészletekből tartalmaz elemeket:
+.IP "" .5i
+Az ABC kis betűi
+.IP "" .5i
+Az ABC nagy betűi
+.IP "" .5i
+Számok 0 és 9 között 
+.IP "" .5i
+Írásjelek
+.PP
+Fontos odafigyelni, hogy ne tartalmazzon az adott rendszeren használt
+"erase" és "kill" kódű karaktereket.
+A \fBpasswd\fR nem fogad el nem eléggé bonyolult jelszót.
+.PP
+Ha a jelszó elfogadható, 
+a \fBpasswd\fR a biztonság kedvéért még egyszer bekéri az új jelszót, és
+csak akkor hajtja végre a változtatást, ha a két bevitt jelszó megegyezik.
+.SS Csoportok jelszavai
+A \fB\-g\fR kapcsoló használata esetén a megadott nevű csoport jelszava
+változik meg. Ezt csak a rendszergazda vagy a csoport adminisztrátora teheti
+meg.
+A jelenlegi csoportjelszavat nem kéri változtatás előtt.
+Az \fB\-r\fR kapcsolót a \fB\-g\fR kapcsolóval használva lehet a csoport jelszavát kikapcsolni, ezáltal minden tag használhatja a csoportot.
+Az \fB\-R\fR kapcsoló a \fB\-g\fR kapcsolóval használva a csoport minden felhasználó előtt lezárul.
+
+.SS A jelszavak "szavatossági ideje"
+A jelszavak elévülési idejét a rendszergazda a \fB\-x\fR, \fB\-n\fR, \fB\-w\fR, és \fB\-i\fR kapcsolókkal szabályozhatja.
+A \fB\-x\fR kapcsoló a jelszócserék közti maximális időt állítja be. 
+A jelszót legkésőbb \fImax\fR naponként meg kell változtatni.
+Az \fB\-n\fR kapcsoló a két jelszócsere közötti minimális időt szabályozza: a felhasználó addig nem változtathatja meg jelszavát, amíg legalább
+\fImin\fR nap el nem telt az előző változtatás óta.
+A \fB\-w\fR kapcsolóval azt állíthatod be, hogy hány nappal a jelszó lejárta előtt kezdje el a rendszer a felhasználót figyelmeztetni. Az első figyelmeztetés \fIfigy\fR nappal a lejárat előtt jelenik meg, és utána naponta tájékoztatja a felhasználót a még hátralévő napok számáról.
+Az \fB\-i\fR kapcsoló \fIinakt\fR nappal a jelszó lejárta után lezárja a felhasználó belépési lehetőségét.
+
+.SS Jogosultság\-kezelés
+A felhasználók lezárhatóak és újra beengedhetőek a \fB\-l\fR és a \fB\-u\fR kapcsolókkal.
+Az \fB\-l\fR kapcsoló a jelszót kicseréli egy olyan értékre, ami semmilyen lehetséges jelszó kódolt értékével nem egyezik.
+Az \fB\-u\fR kapcsoló visszaállítja a jelszót a régire, és így újra engedélyezi a belépést.
+.PP
+A jogosultságok az \fB\-S\fR kapcsolóval állíthatóak be. Ez 6 részből áll:
+Az első azt jelzi, hogy a felhaszáló le van zárva (L), nincs jelszava (NP), vagy van érvényes jelszava (P).
+A második rész az utolsó jelszóváltoztatás dátuma.
+A következő négy rész a jelszavak minimális és maximális ideje, az első figyelmeztetés a jelszó lejárta előtt és hogy mennyi ideig él a jelszó lejárta után.
+
+.SS Tippek a felhasználói jelszavakhoz
+Egy jelszavas rendszer biztonsága a kódolási algoritmus erősségétől és a lehetséges kulcsok számától függ.
+A \fB\s-2UNIX\s+2\fR rendszerek kódolási módja az NBS DES algoritmuson alapul, és nagyon biztonságos. A lehetséges kulcsok száma a választott jelszó véletlenszerűségén múlik.
+.PP
+A jelszavas rendszerek feltörése legtöbbször a gondatlanul megválasztott jelszóválasztásnak vagy a jelszavak cserélgetésének eredménye.
+Ezen okok miatt célszerű olyan jelszót választanod, ami nem szerepel a szótárban és nem szükséges leírnod. Tipikusan rossz választás még, ha valamilyen nevet, valamilyen azonosítószámodat, születésnapodat, vagy címedet használod jelszóként.
+Ezeket legtöbbször minden más lehetőség vizsgálata előtt kipróbálja a potenciális cracker.
+.PP
+Igyekezz olyan jelszót választani, amit könnyen megjegyzel és így nem vagy
+arra szorulva, hogy le kelljen írnod.
+Ezt például úgy érheted el, hogy két rövidebb szót elválasztasz egy számmal
+vagy valamilyen karakterrel, például jel@szo
+.PP
+A másik módszer, hogy egy könnyen megjegyezhető mondat vagy idézet minden
+szavának első vagy utolsó betűjét írod egymás után.
+Így például a 
+.IP "" .5i
+Morzsa kutyám hegyezd füled
+.PP
+\-ből
+.IP "" .5i
+Maqmhdfd
+.PP
+lesz.
+Feltehetőleg kevés cracker szótárában fog szerepelni ez a szó.
+Ennek ellenére a még nagyobb biztonság kedvéért érdemes valamilyen saját
+módszert kitalálnod jelszavak készítésére.
+
+.SS Megjegyzés a csoportok jelszavairól
+A csoportok jelszavai állandó biztonsági problémát jelenthetnek, mivel
+nemcsak egy ember ismerheti a jelszavat. A csoport\-kezelés azonban
+hasznos abban az esetben, ha több felhasználó együttműködését kell
+megoldani.
+
+.SH FIGYELMEZTETÉS
+Nem biztos, hogy minden kapcsoló felhasználható.
+Az, hogy hogyan vizsgálja a jelszavak bonyolultságát, rendszerről rendszerre
+változhat.
+Minden felhasználónak célszerű a lehető legbonyolultabb, de még használható
+jelszót használnia.
+Ha NIS\-t használ a felhasználók azonosítására a rendszer és a felhasználó nem
+lépett be a NIS kiszolgálóra, nem változtathatja meg jelszavát.
+.SH FÁJLOK
+\fI/etc/passwd\fR      \- felhasználói információk
+.br
+\fI/etc/shadow\fR      \- kódolt felhasználói jelszavak
+.SH LÁSD MÉG
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5)
+.SH MAGYAR FORDÍTÁS
+Érdi "Cactus" Gergő <cactus@freemail.c3.hu>
diff --git a/man/hu/passwd.5 b/man/hu/passwd.5
new file mode 100644 (file)
index 0000000..a541ce0
--- /dev/null
@@ -0,0 +1,99 @@
+.\" Copyright (c) 1993 Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de), Fri Apr  2 11:32:09 MET DST 1993
+.\"
+.\" This is free documentation; 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.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+.\" USA.
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.TH PASSWD 5 "24 July 1993" "Linux" "Linux Programozói Kézikönyv"
+.SH NÉV
+passwd \- Jelszófájl
+.SH LEÍRÁS
+A
+.B Passwd
+egy, a felhasználók listáját és a belépésükhöz szükséges jelszavakat
+tartalmazó ASCII file. Mindenkinek tudnia kell olvasni (sok segédprogram, 
+pl. a
+.lR ls(1)
+ezt használja hogy a felhasználói azonosítókhoz (UID-khez) neveket
+rendeljen), de írási jogot csak a rendszergazdának szabad kapnia.
+.PP
+A régi szép időkben nem is volt ezzel semmi baj: mindenki olvashatta a
+felhasználók kódolt jelszavait, de mivel az akkori hardware-körülmények nem
+tették lehetővé a jól megválasztott jelszavak törését, és a felasználók
+alapvetően jóindulatűak voltak, ez nem okozott problémát.
+Manapság mindenki igyekszik shadow-zott jelszavakat használni, amikor is a 
+.I /etc/passwd
+file-ban a jelszavak helyett csak egy * karakter áll, és az igazi jelszavak
+a
+.I /etc/shadow
+file-ban találhatóak, amit csak a rendszergazda olvashat.
+.PP
+Amikor új felhasználót készítesz, célszerű a jelszó helyét
+üresen hagyni, és a \fBpasswd\fP(1) programmal kitölteni. Egy * karakter a
+jelszó helyén azt jelenti, hogy a \fBlogin\fP(1) szoltáltatáson keresztül
+a felhasználó nem tud belépni.
+.PP
+Soronként egy bejegyzés található, a következő formában:
+.sp
+.RS
+usernév:jelszó:UID:GID:valódi név:home mappa:shell
+.RE
+.sp
+, ahol a mezők jelentése:
+.sp
+.RS
+.TP 1.0in
+.I usernév
+a felhasználó belépési neve a rendszerben.
+.TP
+.I jelszó
+a felhasználó kódolt jelszava. 
+.TP
+.I UID
+A felhasználó azonosítószáma.
+.TP
+.I GID
+A felhasználó csoportjának azonosítószáma.
+.TP
+.I valódi név
+egy opcionális mező megjegyzések tárolására (gyakran a felhasználó teljes neve)
+.TP
+.I home mappa
+a felhasználó $HOME mappája.
+.TP
+.I shell
+a belépéskor elindítandó program (ha nincs megadva, a
+.IR /bin/sh -t használja).
+.RE
+.SH MEGJEGYZÉS
+Ha a root fájlrendszered a
+.IR /dev/ram
+-on van, a rendszer leállítása előtt rögzítened kell a megváltozott jelszófile-t a root fájlrendszer floppylemezén. Ha csoportokat is kezelni akarsz, meg kell egyezniük a GID-jüknek és be kell jegyezni őket a  \fI/etc/group\fP-ba.
+.SH FÁJLOK
+.I /etc/passwd
+.SH LÁSD MÉG
+.BR passwd (1),
+.BR login (1),
+.BR group (5),
+.BR shadow (5)
+.SH MAGYAR FORDÍTÁS
+Horváth András <horvatha@rs1.szif.hu>
diff --git a/man/hu/sg.1 b/man/hu/sg.1
new file mode 100644 (file)
index 0000000..d07c5e4
--- /dev/null
@@ -0,0 +1 @@
+.so man1/newgrp.1
diff --git a/man/hu/su.1 b/man/hu/su.1
new file mode 100644 (file)
index 0000000..3d6e9fc
--- /dev/null
@@ -0,0 +1,185 @@
+.\" You may copy, distribute and modify under the terms of the LDP General
+.\" Public License as specified in the LICENSE file that comes with the
+.\" gnumaniak distribution
+.\"
+.\" The author kindly requests that no comments regarding the "better"
+.\" suitability or up\-to\-date notices of any info documentation alternative
+.\" is added without contacting him first.
+.\"
+.\" (C) 1999 Ragnar Hojland Espinosa <ragnar@macula.net>
+.\"
+.\"     GNU su man page
+.\"     man pages are NOT obsolete!
+.\"     <ragnar@macula.net>
+.TH su 1 "18 August 1999" "GNU Shell Utilities 2.0"
+.SH NÉV
+su \- indít egy shellt más felhasználó\- és csoportazonosítóval
+.SH ÁTTEKINTÉS
+.B su
+.BI "[\-] [\-flmp] [\-c " parancs "] [\-s " shell "] [\-\-fast] [\-\-login]"
+.B [\-\-preserve\-environment]
+.BI "[\-\-command=" parancs "] [\-\-shell=" shell "]"
+.BI [ felhasználó " [" argumentum... ]]
+.sp
+.B su [\-\-help] [\-\-version]
+.SH LEÍRÁS
+Az
+.B su
+parancs lehetővé teszi, hogy ideiglenesen más felhasználóvá válhassunk 
+úgy, hogy egy új shell\-t indít a kért 
+.I felhasználó 
+valós és effektív felhasználói azonosítójával, csoportazonosítójával és 
+másodlagos csoportjaival. Ha nem adunk meg 
+.IR felhasználó \-t,
+az alapértelmezett érték a root (super\-user). Az a shell indul el, ami a 
+.I felhasználó 
+passwd bejegyzésében szerepel, ha ott nincs 
+semmi, akkor a /bin/sh. Ha a 
+.IR felhasználó \-nak
+van jelszava, akkor az
+.B su
+meg fogja azt kérdezni, kivéve ha root\-ként (a felhasználói azonosító 0) 
+futtatjuk.
+.PP
+Alapértelmezésben az
+.B su
+nem változtatja meg az aktuális könyvtárat. Átállítja a 
+.B HOME 
+és a
+.B SHELL 
+környezeti változókat a 
+.I felhasználó
+password bejegyzéséből kinézett értékekre, és ha a 
+.I felhasználó
+nem a root (a super\-user) a 
+.BR USER és LOGNAME 
+változókat a 
+.I felhasználó
+nevére állítja. Az alapértelmezés az, hogy az elinduló shell nem lesz 
+bejelentkezési shell.
+.PP
+Ha megadunk 
+.IR argumentum \-ként
+valamit, az is átadódik az induló shellnek.
+.PP
+Az 
+.B su
+se a /bin/sh\-t, se más shell\-eket nem kezel speciálisan.
+(ilyen az argv[0] "\-su"\-ra állítása, vagy a \-c paraméter csak 
+bizonyos shelleknek való átadása, stb.)
+.PP
+Azokon a rendszereken, ahol van
+.RB syslog (3) ,
+az
+.B su
+fordítható úgy is, hogy a sikertelen, vagy opcionálisan a 
+sikeres próbálkozásokat is naplóztassa a sysloggal.
+.SH OPCIÓK
+.TP
+.BI "\-c " parancs ", \-\-command=" parancs
+Csak a 
+.I parancs
+parancsot hajtatja végre a shell\-lel a
+.B \-c
+opció segítségével, így a shell nem interaktívan 
+indul el.
+.TP
+.B "\-f, \-\-fast"
+Beállítja a
+.B \-f
+opciót az induló shellnél. Ennek talán csak a 
+.BR csh (1)
+és a
+.BR tcsh (1),
+shelleknél van értelme ahol
+.B \-f
+opció megakadályozza, hogy a startup fájlt (.cshrc) a shell beolvassa.
+A Bourne\-hoz hasonló shelleknél a
+.B \-f
+opció letiltja a fájlnév minták kiterjesztését (filename pattern 
+expansion), ami általában nem kívánatos dolog. 
+.TP
+.B "\-, \-l, \-\-login"
+A shellt bejelentkezési shellként indítja. Ez a következőket jelenti: 
+törli az összes környezeti változót, kivéve a 
+.BR TERM "\-et, " HOME \-ot, 
+és a 
+.BR SHELL \-t 
+(amiket a fent leírt módon állít át), és a
+.BR USER "\-t és " LOGNAME \-t 
+(amiket szintén a fent leírt módon állít át
+a rootnak), továbbá a 
+.BR PATH \-t, 
+amit a fordításkor meghatározott 
+alapértékre állít. Az aktuális könyvtárat a 
+.I felhasználó
+home\-könyvtárára
+állítja. A shell neve elé egy 
+.B \- \-t 
+szúr be, így eléri azt, hogy
+az beolvassa a startup fájlját illetve fájljait.
+.TP
+.B "\-m, \-p, \-\-preserve\-environment"
+Nem állítja át a 
+.BR HOME ", " USER ", " LOGNAME ", és " SHELL
+környezeti változókat. Azt a shellt indítja, ami a 
+.B SHELL 
+változóban van a passwd fájlban lévő helyett, de csak akkor, ha az
+.B su
+parancsot vagy a superuser futtatja, vagy nem egy korlátozott
+(restricted) shellt akar futtatni. Az a shell korlátozott, ami nem
+szerepel a /etc/shells fájlban, vagy 
+az 
+.B su
+belső listájában, ha ez a fájl nem létezik. Az opció hatásainak egy részét a
+.B \-\-login
+és a
+.B \-\-shell
+opciók hatástalanítják.
+.TP
+.BI "\-s, \-\-shell " shell
+A 
+.IR shell "\-t indítja a " felhasználó 
+/etc/passwd fájlban szereplő
+shellje helyett, ha parancsot vagy a superuser futtatja,
+vagy ha nem korlátozott shellt akar futtatni. (Korlátozott 
+shell\-t lásd fentebb.)
+.TP
+.B "\-\-help"
+Használati útmutatót ír a standard kimenetre, majd sikeres visszatérési értékkel kilép.
+.TP
+.B "\-\-version"
+A program verziójáról ír ki információt a standard kimenetre, majd 
+sikeres visszatérési értékkel kilép.
+.SH Miért nem támogatja a GNU su a wheel csoportot? (Richard Stallman)
+
+Néha a rendszer fölötti teljes ellenőrzést egy néhány emberből 
+álló csoport akarja kézbe venni. Például 1984\-ben pár user a MIT AI
+laborban úgy döntött, hogy átveszik az irányítást a Twenex rendszer
+operátori jelszavának megváltoztatásával, és annak titokban tartásával. 
+(A puccsot sikerült leverni, és a felhasználókat jogaikba visszahelyezni 
+egy kernel patch segítségével, de Unix alatt ezt nem tudtam volna megcsinálni.)
+(A fordító megj.: a wheel csoportot ezzel a módszerrel könnyen
+önkényesen is leszűkíthetik a csoporttagok , így tulajdonképpen nincs sok értelme.)
+.PP
+Néha az uralmon levők elárulják a root jelszót. A szokásos su 
+mechanizmus szerint, ha valaki megtudja a root jelszót, és 
+szimpatizál a többi közönséges felhasználóval, elárulhatja nekik 
+is. A wheel csoport ezt lehetetlenné tenné, és így bebetonozná az 
+uralmon levő hatalmát.
+.PP
+Én a tömegek oldalán állok, nem az uralkodókén. Ha te mindig a 
+főnökök és a rendszergazdák oldalán állsz, bármit is tesznek, akkor 
+valószínűleg furcsálni fogod ezt a hozzáállást.
+.PP
+A fordító megjegyzése: 
+Valami jó azért mégis lenne a wheel csoportban: az, hogy ha a root 
+jelszó kitudódna azzal nem tudna bármelyik felhasználó közvetlenül 
+visszaélni. A wheel csoporthoz hasonló dolgot lehet elérni a
+.B sudo
+csomaggal.
+.SH MEGJEGYZÉS
+A hibákat a bug\-sh\-utils@gnu.org címen lehet jelenteni.
+Az oldalt Ragnar Hojland Espinosa <ragnar@macula.net> frissítette.
+.SH MAGYAR FORDÍTÁS
+Havasi Ferenc <hafy@prins.externet.hu> és Tímár András <timar_a@freemail.hu>
diff --git a/man/id.1 b/man/id.1
new file mode 100644 (file)
index 0000000..811d39b
--- /dev/null
+++ b/man/id.1
@@ -0,0 +1,52 @@
+'\" t
+.\"     Title: id
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: English
+.\"
+.TH "ID" "1" "07/24/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+id \- display current user and group ID names
+.SH "SYNOPSIS"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "DESCRIPTION"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/id.1.xml b/man/id.1.xml
new file mode 100644 (file)
index 0000000..0c4e91c
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1991       , Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='id.1'>
+  <!-- $Id: id.1.xml 2435 2008-10-11 11:44:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>id</refentrytitle>
+    <manvolnum>1</manvolnum>
+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>id</refname>
+    <refpurpose>display current user and group ID names</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>id</command>    <arg choice='opt'>-a </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>id</command> command displays the current real and
+      effective user and group ID names or values. If the value does not
+      have a corresponding entry in <filename>/etc/passwd</filename> or
+      <filename>/etc/group</filename>, the value will be displayed without
+      the corresponding name. The optional <option>-a</option> flag will
+      display the group set on systems which support multiple concurrent
+      group membership.
+    </para>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>getgid</refentrytitle><manvolnum>2</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>getgroups</refentrytitle><manvolnum>2</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>getuid</refentrytitle><manvolnum>2</manvolnum>
+      </citerefentry>
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/id/Makefile.am b/man/id/Makefile.am
new file mode 100644 (file)
index 0000000..bf8ec1a
--- /dev/null
@@ -0,0 +1,9 @@
+
+mandir = @mandir@/id
+
+man_MANS = \
+       chsh.1 \
+       login.1 \
+       useradd.8
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/id/Makefile.in b/man/id/Makefile.in
new file mode 100644 (file)
index 0000000..369b57e
--- /dev/null
@@ -0,0 +1,465 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/id
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)"
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/id
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+       chsh.1 \
+       login.1 \
+       useradd.8
+
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/id/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/id/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man8 install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am uninstall uninstall-am uninstall-man uninstall-man1 \
+       uninstall-man8
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/id/chsh.1 b/man/id/chsh.1
new file mode 100644 (file)
index 0000000..e13a49d
--- /dev/null
@@ -0,0 +1,53 @@
+.\"
+.\"  chsh.1 \-\- change your login shell
+.\"  (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\"  this program is free software.  you can redistribute it and
+.\"  modify it under the terms of the gnu general public license.
+.\"  there is no warranty.
+.\"
+.\"  $Author: kloczek $
+.\"  $Revision: 1.4 $
+.\"  $Date: 2005/08/29 13:59:29 $
+.\"
+.TH CHSH 1 "October 13 1994" "chsh" "Linux Reference Manual"
+.SH NAMA
+chsh \- merubah shell login
+.SH RINGKASAN
+.B chsh
+[\ \-s\ shell\ ] [\ \-l\ ] [\ \-u\ ] [\ \-v\ ] [\ username\ ]
+.SH PENJELASAN
+.B chsh
+digunakan untuk merubah shell login Anda.
+Bila shell tidak diberikan pada baris perintah maka
+.B chsh
+menampilkan prompt untuk memasukkan shell.
+.SS SHELL\-SHELL YANG BENAR
+.B chsh
+akan menerima pathname lengkap dari file executable pada sistem.
+Walau demikian, akan menampilkan peringatan bila shell tidak terdapat
+dalam file
+.I /etc/shells .
+.SH OPTION
+.TP
+.I "\-l, \-\-list\-shells"
+Menampilkan daftar shell yang ada dalam
+.I /etc/shells
+dan keluar atau exit.
+.TP
+.I "\-s, \-\-shell"
+Menentukan shell login Anda.
+.TP
+.I "\-u, \-\-help"
+Menampilkan cara penggunaan program.
+.TP
+.I "\-v, \-\-version"
+Menampilkan informasi versi program.
+.SH "LIHAT JUGA"
+.BR login (1),
+.BR passwd (5),
+.BR shells (5)
+.SH PEMBUAT
+Salvatore Valente <svalente@mit.edu>
+.SH PENTERJEMAH
+Rizqy Syarief <rizqy@rad.net.id>
diff --git a/man/id/login.1 b/man/id/login.1
new file mode 100644 (file)
index 0000000..4d8742c
--- /dev/null
@@ -0,0 +1,311 @@
+.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
+.\" May be distributed under the GNU General Public License
+.TH LOGIN 1 "4 November 1996" "Util\-linux 1.6" "Linux Programmer's Manual"
+.SH NAME
+login \- masuk ke system
+.SH SYNOPSIS
+.BR "login [ " name " ]"
+.br
+.B "login \-p"
+.br
+.BR "login \-h " hostname
+.br
+.BR "login \-f " name
+.SH PENJELASAN
+.B login
+digunakan ketika hendak masuk ke sebuah system.  Ia juga dapat digunakan
+untuk berpindah dari satu user ke user lainnya kapan saja (shell\-shell yang
+modern mendukung kemampuan ini).
+Jika tidak diikuti oleh sebuah argumen
+.B login
+system akan menanyakan nama user/username.
+
+Jika user tersebut
+.I bukan
+root, dan jika terdapat file
+.I /etc/nologin
+isi file tersebut akan tercetak di layar, kemudian login dihentikan.  
+Biasanya ini dilakukan untuk mencegah login ketika system sedang dimatikan.
+
+Jika terdapat pembatasan akses tertentu pada user sebagaimana terdapat di
+.IR /etc/usertty ,
+hal tersebut harus dipenuhi, atau login akan ditolak dan pesan
+.B syslog
+akan dibuat.  Lihat section pada "Special Access Restrictions".
+
+Jika user adalah root, maka login harus dijalankan pada tty yang terdapat
+di
+.IR /etc/securetty .
+Kegagalan akan dicatat pada log melalui fasilitas
+.B syslog .
+
+Setelah kondisi\-kondisi tersebut dicek, anda akan dimintai password untuk
+kemudian dicek (jika ada password untuk username tersebut).  Anda dapat
+mencoba sepuluh kali sebelum
+.B login
+dimatikan, tapi setelah kegagalan yang ketiga, respon yang diberikan
+akan sangat lamban.  Kegagalan login akan dilaporkan melalui fasilitas
+.B syslog .
+Fasilitas ini juga dapat digunakan untuk melaporkan login yang berhasil.
+
+Jika file
+.I .hushlogin
+ditemukan,  maka login secara "quiet" dilaksanakan (hal ini menonaktifkan
+pengecekan mail dan tidak menampilkan waktu login terakhir dan pesan
+yang ada untuk hari itu).  Namun, jika terdapat file
+.I /var/log/lastlog
+, waktu login terakhir akan ditampilkan (dan kegiatan login yang sekarang
+akan dicatat).
+
+Kegiatan administratif secara acak, seperti mengeset UID dan GID untuk tty
+akan dilakukan.  Variabel environment TERM dibuatkan, jika ia sudah ada
+(variabel environment lain akan dibuatkan jika option
+.B \-p
+digunakan).  Kemudian variable environment HOME, PATH, SHELL, TERM, MAIL
+dan LOGNAME ditetapkan. Default PATH merujuk ke
+.I /usr/local/bin:/bin:/usr/bin:.
+untuk user biasa, dan ke
+.I /sbin:/bin:/usr/sbin:/usr/bin
+untuk root.  Terakhir, jika login yang sedang dilakukan bukan login "quiet",
+pesan hari ini akan ditampilkan dan file dengan nama yang sama dengan user
+pada
+.I /usr/spool/mail
+akan diperiksa, dan sebuah pesan ditampilkan jika besar file tersebut tidak
+nol.
+
+Kemudian, shell untuk user berjalan.  Jika shell untuk user tidak ditentukan
+pada
+.BR /etc/passwd ,
+maka akan digunakan
+.B /bin/sh
+.  Jika directory tidak ditentukan pada
+.IR /etc/passwd ,
+maka
+.I /
+digunakan (home directiry diperiksa pada file
+.I .hushlogin
+seperti dijelaskan sebelumnya).
+.SH OPTION
+.TP
+.B \-f
+Used to skip a second login authentication.  This specifically does
+Digunakan untuk melewatkan pengecekan tahap kedua ketika login.  Biasanya
+.B tidak
+berjalan untuk, dan kelihatannya tidak dapat berjalan dengan baik pada Linux.
+.TP
+.B \-h
+Digunakan oleh server lain (misalnya
+.BR telnetd (8))
+to pass the name of the remote host to
+untuk melewatkan nama remote host ketika
+.B login
+sehingga dapat ditempatkan pada utmp dan wtmp.  HAnya superuser yang dapat
+menggunakan option ini.
+.TP
+.B \-p
+digunakan oleh
+.BR getty (8)
+untuk memberi tahu bahwa
+.B login
+tidak mengubah environment
+
+.SH "PEMBATASAN AKSES TERTENTU/SPECIAL ACCESS RESTRICTIONS"
+File
+.I /etc/securetty
+mencatat nama\-nama tty dimana root boleh login.  Nama device tty yang tidak
+berawalan /dev/ harus ditentukan pada setiap barisnya.  Jika file tersebut 
+tidak ditemukan, root boleh login di tty mana saja.
+
+.PP
+File
+.I /etc/usertty
+Menentukan tambahan batasan akses tertentu untuk user tertentu.  Jika 
+file ini tidak ditemukan, tak ada tambahan batasan akses yang diterapkan.
+File ini terdiri dari beberapa bagian.  Ada tiga bagian yang mungkin
+ada : CLASSES, GROUPS dan USERS.  Bagian CLASSES mendefinisikan kelas tty
+dan pola nama host, bagian GROUPS mendefinisikan tty dan nama host yang
+diperbolehkan berdasarkan per group, dan bagian USERS mendefinisikan tty 
+dan host yang diperbolehkan berdasarkan per user.
+
+.PP
+Panjang setiap baris pada file ini tidak boleh lebih dari 255 karakter.
+Komentar diawali oleh karakter # yang berlaku hingga akhir baris.
+
+.PP
+.SS "Bagian CLASSES"
+Bagian CLASSES dimulai dengan kata CLASSES pada baris awal dalam
+huruf besar semua.  Setiap baris berikutnya hingga permulaan bagian baru
+atau akhir file terdiri dari urutan kata\-kata yang dipisahkan oleh tab
+atau spasi.  Tiap baris mendefinisikan kelas tty dan pola host.
+
+.PP
+Kata yang terdapat pada awal baris dijadikan sebuah definisi untuk 
+sekumpulan nama untuk tty dan pola host yang ditentukan pada akhir baris.
+Kumpulan nama ini dapat digunakan untuk bagian GROUPS berikutnya atau 
+bagian USERS.  Nama kelas tidak boleh didefinisikan sebagai bagian
+dari sebuah kelas untuk menghindari masalah kelas rekursif.
+
+.PP
+Contoh bagian CLASSES:
+.PP
+.nf
+.in +.5
+CLASSES
+myclass1               tty1 tty2
+myclass2               tty3 @.foo.com
+.in -.5
+.fi
+.PP
+File di atas mendefinisikan
+.I myclass1
+dan
+.I myclass2
+sebagai sebelah kanan yang saling berhubungan.
+.PP
+
+.SS "Bagian GROUPS"
+Bagian GROUPS mendefinisikan tty dan host yang diperbolehkan berdasarkan
+per group UNIX.  Jika seorang user adalah anggota sebuah group menurut
+.I /etc/passwd
+dan
+.I /etc/group
+dan jika sebuah group disebutkan pada bagian GROUPS di
+.I /etc/usertty
+maka user diberikan akses jika memang itu group\-nya.
+.PP
+Bagian GROUPS diawali oleh kata GROUPS dalam huruf besar semua pada permulaan
+baris dan tiap baris selanjutnya merupakan urutan kata\-kata yang dipisahkan
+oleh spasi atau tab.  Kata pertama pada sebuah baris adalah nama group dan
+sisanya menentukan tty dan host dimana anggota group tersebut boleh 
+mendapatkan akses.  Ketentuan ini dapat mengikutsertakan kelas yang telah
+didefinisikan pada bagian CLASSES sebelumnya.
+
+.PP
+Contoh bagian GROUPS
+.PP
+.nf
+.in +0.5
+GROUPS
+sys            tty1 @.bar.edu
+stud           myclass1 tty4
+.in -0.5
+.fi
+.PP
+Contoh ini menentukan bahwa anggota group
+.I sys
+boleh log in pada tty1 dan dari host\-host yang terdapat pada domain
+bar.edu.  User yang terdapat pada group
+.I stud
+boleh log in dari host\-host/tty\-tty yang ditentukan pada kelas myclass1
+atau dari tty4
+.PP
+
+.SS "Bagian USERS"
+Bagian USERS dimulai dengan kata USERS dalam huruf besar semua pada awal
+baris, dan tiap baris berikutnya adalah urutan kata\-kata yang dipisahkan
+oleh tab atau spasi.  Kata pertama pada sebuah baris adalah username
+dan sisanya merupakan definisi tentang tty dan host tempat user boleh
+log in.  Ketentuan ini dapat melibatkan kelas yang didefinisikan pada
+bagian CLASSES sebelumnya dan.  Jika tak ada header bagian yang tercantum
+pada awal file, bagian pertama secara defaults adalah bagian USERS.
+
+.PP
+Contoh penggunaan bagian USERS:
+.PP
+.nf
+.in +0.5
+USERS
+zacho          tty1 @130.225.16.0/255.255.255.0
+blue           tty3 myclass2
+.in -0.5
+.fi
+.PP
+KEtentuan ini mengizinkan zacho hanya boleh login pada tty1 dan dari
+host\-host yang alamat IP\-nya terletak di kisaran 130.225.16.0 \-
+130.225.16.255, dan user bernama blue boleh log in dari tty3 dan apa
+saja yang disebutkan pada kelas myclass2.
+.PP
+Mungkin terdapat sebuah baris pada bagian USERS yang dimulai dengan
+sebuah username bernama *.  Ini adalah aturan default dan ia akan
+diterapkan pada user yang tidak tercantum pada baris\-baris definisi.
+.PP
+Jika user ditemukan pada baris USERS dan GROUPS maka user tersebut boleh
+mengakses dari gabungan tty/host yang disebutkan pada ketentuan tersebut.
+
+.SS Origins
+Ketentuan mengenai tty dan pola host yang digunakan sebagai ketentuan 
+pada kelas, group dan user disebut origin.  Sebuah origin bisa memiliki
+format berikut:
+.IP o 
+Nama sebuah device tty tanpa awalan /dev/, contohnya tty1 atau ttyS0.
+.PP
+.IP o
+String @localhost, artinya user boleh melakukan telnet/rlogin
+dari local host ke host yang sama.  Ini juga membolehkan user untuk
+menjalankan perintah: xterm \-e /bin/login.
+.PP
+.IP o
+Sebuah akhiran nama domain seperti @.some.dom, artinya user boleh
+melakukan rlogin/telnet dari host mana saja yang nama domainnya berakhiran
+@.some.dom
+.PP
+.IP o
+Kisaran alamat IPv4, ditulis @x.x.x.x/y.y.y.y dimana x.x.x.x adalah
+alamat IP pada notasi desimal biasa dan y.y.y.y adalah bitmask dalam
+notasi yang sama yang menentukan bit mana pada alamat tersebut untuk
+dibandingkan dengan alamat IP dari remote host.  Contohnya @130.225.16.0/
+255.255.254.0 berarti user boleh rlogin/telnet dari host mana saja yang
+alamat IP\-nya berada pada kisaran 130.225.16.0 \- 130.225.17.255.
+.PP
+Origin di atas boleh diawali oleh penentuan waktu menurut syntax:
+.PP
+.nf
+timespec    ::= '[' <day\-or\-hour> [':' <day\-or\-hour>]* ']'
+day         ::= 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun'
+hour        ::= '0' | '1' | ... | '23'
+hourspec    ::= <hour> | <hour> '\-' <hour>
+day\-or\-hour ::= <day> | <hourspec>
+.fi
+.PP
+Contohnya, origin [mon:tue:wed:thu:fri:8\-17]tty3 berarti log in 
+diperbolehkan pada hari senin hingga jumat pukul 8:00 dan 17:59 (5:59
+pm) pada tty3.  Ini juga menunjukkan bahwa kisaran jam (seperti 10)
+menandakan waktu berkisar antara 10:00 dan 10:59.
+.PP
+Jika tidak menentukan waktu untuk tty atau nama host berarti lo gin
+dari origin tersebut diperbolehkan untuk setiap waktu.  Jika anda 
+memberikan awalan waktu, yakinkan untuk menentukan baik kumpulan hari
+dan waktu yang agak dilebihkan.  Penentuan waktu tidak boleh berisi
+spasi.
+.PP
+Jika tidak ada aturan diberikan maka user yang tidak ditemukan pada
+.I /etc/usertty
+boleh log in dari mana saja.
+.PP
+.SH FILES
+.nf
+.I /var/run/utmp
+.I /var/log/wtmp
+.I /var/log/lastlog
+.I /usr/spool/mail/*
+.I /etc/motd
+.I /etc/passwd
+.I /etc/nologin
+.I /etc/usertty
+.I .hushlogin
+.fi
+.SH "SEE ALSO"
+.BR init (8),
+.BR getty (8),
+.BR mail (1),
+.BR passwd (1),
+.BR passwd (5),
+.BR environ (7),
+.BR shutdown (8)
+.SH BUGS
+
+Linux, tidak seperti sistem operasi draconian, tidak mengecek quota.
+
+Option tidak resmi pada BSD
+.B \-r
+tidak dapat digunakan.   Ini mungkin dibutuhkan oleh program
diff --git a/man/id/useradd.8 b/man/id/useradd.8
new file mode 100644 (file)
index 0000000..9307e66
--- /dev/null
@@ -0,0 +1,214 @@
+.\" Copyright 1991 \- 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Pendistribusian dan penggunaan dalam bentuk source dan binary, dengan
+.\" atau tanpa modifikasi, diperbolehkan asal syarat\-syarat ini dipenuhi :
+.\" 1. Pendistribusian source code harus mempertahankan tulisan copyright
+.\"    di atas, persyaratan ini, dan disclaimer berikut.
+.\" 2. Pendistribusian dalam bentuk binary harus menampilkan copyright di atas,
+.\"    persyaratan ini, dan disclaimer yang tercantum pada dokumentasi dan/
+.\"    atau keterangan lainnya yang terdapat pada distribusi ini.
+.\" 3. Nama Julianne F. Haugh atau nama\-nama kontributor lainnya tidak boleh
+.\"    digunakan sebagai jaminan atau untuk mempromosikan produk yang berasal
+.\"    dari software ini tanpa izin khusus tertulis.
+.\"
+.\" SOFTWARE INI DISEDIAKAN OLEH JULIE HAUGH DAN PARA KONTRIBUTOR DALAM BENTUK
+.\" "APA ADANYA" DAN SEGALA PERNYATAAN ATAU JAMINAN, TERMASUK, TAPI TIDAK
+.\" TERBATAS PADA, JAMINAN DALAM PENJUALAN DAN PENYESUAIAN UNTUK MAKSUD
+.\" TERTENTU DILUAR TANGGUNG JAWABNYA.  JULIE HAUGH DAN PARA KONTRIBUTOR TIDAK
+.\" BERTANGGUNG JAWAB PADA KERUSAKAN SECARA LANGSUNG, TIDAK LANGSUNG, KEBETULAN,
+.\" TERTENTU, SESUAI CONTOH ATAU KERUSAKAN BERUNTUN (TERMASUK, TAPI TIDAK
+.\" TERBATAS PADA MENDAPATKAN PRODUK DENGAN CARA PERTUKARAN ATAU JASA;
+.\" KEHILANGAN DATA, ATAU PROFIT; ATAU TERHENTINYA BISNIS) YANG MENGAKIBATKAN
+.\" DAN SECARA TEORI BERTANGGUNG JAWAB, MESKIPUN DALAM PERJANJIAN, BERTANGGUNG
+.\" JAWAB PENUH, ATAU TORT (TERMASUK KECEROBOHAN ATAU SEBALIKNYA) YANG TIMBUL
+.\" KARENA KESALAHAN DALAM MENGGUNAKAN SOFTWARE INI, BAHKAN JIKA TELAH
+.\" DIPERINGATKAN SEBELUMNYA TENTANG KEMUNGKINAN AKAN KERUSAKAN TERSEBUT.
+.\"
+.\"    $Id: useradd.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH USERADD 8
+.SH NAME
+useradd \- Membuat user baru atau memperbarui informasi tentang user baru
+.SH SYNOPSIS
+.TP 8
+.B useradd
+.\" .RB [ \-A
+.\" .RI { method | \fBDEFAULT\fR "},... ]"
+.RB [ \-c
+.IR comment ]
+.RB [ \-d
+.IR home_dir ]
+.br
+.RB [ \-e
+.IR expire_date ]
+.RB [ \-f
+.IR inactive_time ]
+.br
+.RB [ \-g
+.IR initial_group ]
+.RB [ \-G
+.IR group [,...]]
+.br
+.RB [ \-m " [" \-k
+.IR skeleton_dir ] " |" " " \-M ]
+.RB [ \-s
+.IR shell ]
+.br
+.RB [ \-u
+.IR uid " ["
+.BR \-o ]]
+.RB [ \-n ]
+.RB [ \-r ]
+.I login
+.TP 8
+.B useradd
+\fB\-D\fR
+[\fB\-g\fI default_group\fR]
+[\fB\-b\fI default_home\fR]
+.br
+[\fB\-f\fI default_inactive\fR]
+[\fB\-e\fI default_expire_date\fR]
+.br
+[\fB\-s\fI default_shell\fR]
+.SH PENJELASAN
+.SS Membuat User Baru
+Jika digunakan tanpa option \fB\-D\fR, perintah \fBuseradd\fR menciptakan
+sebuah  user account baru dengan menggunakan nilai yang terdapat pada
+baris perintah dan nilai default dari system.
+User account yang baru tersebut akan dimasukkan ke system files seperlunya,
+home directory akan dibuatkan, dan initial files di\-copy\-kan, tergantung
+option yang terdapat pada baris perintah.
+Versi yang terdapat pada Red Hat Linux akan membuat sebuah group untuk
+setiap user yang didaftarkan pada system, jika \fB\-b\fR tidak diberikan.
+Option yang dapat digunakan pada perintah \fBuseradd\fR adalah
+.\" .IP "\fB\-A {\fImethod\fR|\fBDEFAULT\fR},..."
+.\" Nilai milik user dalam metode autentikasi/pengecekan.
+.\" Metode autentikasi/pengecekan adalah nama sebuah program yang bertanggung 
+.\" jawab untuk memeriksa identitas user.
+.\" String \fBDEFAULT\fR dapat digunakan untuk mengubah metode autentikasi
+.\" menjadi metode password system yang standar.
+.\" Daftar tersebut berisi nama\-nama program, yang dipisahkan oleh koma.
+.\" \fBDEFAULT\fR hanya dapat dicantumkan sekali saja.
+.\" 
+.\" 
+.\" 
+.IP "\fB\-c \fIcomment\fR"
+Komentar pada file password milik user baru.
+.IP "\fB\-d \fIhome_dir\fR"
+User baru akan diciptakan dengan \fIhome_dir\fR sebagai lokasi directory 
+login\-nya.
+Default\-nya adalah menambahkan nama \fIlogin\fR pada \fIdefault_home\fR
+dan menggunakannya sebagai nama directory login.
+.IP "\fB\-e \fIexpire_date\fR"
+Tanggal ketika user account dimatikan.
+Tanggal ditulis dalam format \fIMM/DD/YY\fR.
+.IP "\fB\-f \fIinactive_days\fR"
+Jumlah hari setelah sebuah password kadaluarsa hingga account 
+tersebut dimatikan secara permanen.
+Nilai 0 mematikan account segera setelah password kadaluarsa,
+dan nilai \-1 mematikan fungsi ini.
+Nilai default\-nya adalah \-1.
+.IP "\fB\-g \fIinitial_group\fR"
+Nama group atau angka initial login group.
+Nama group harus sudah ada.  Seorang anggota group harus merujuk
+pada group yang sudah ada.
+Nilai group default\-nya adalah 1.
+.IP "\fB\-G \fIgroup,[...]\fR"
+Daftar group tambahan yang juga merupakan group\-nya user.
+Setiap group dipisahkan oleh koma, tanpa diikuti spasi.
+Group juga mengikuti aturan yang diberikan dengan option \fB\-g\fR.
+Default\-nya hanyalah untuk user yang terdaftar pada group awal.
+.IP \fB\-m\fR
+Home directory milik user akan dibuatkan jika belum ada.
+File yang terdapat pada \fIskeleton_dir\fR atau \fI/etc/skel\fR
+akan dibuatkan pada home directory milik user.
+Option \fB\-k\fR hanya valid jika bertemu option \fB\-m\fR.
+Dafault\-nya adalah tidak membuat directory dan tidak meng\-copy
+segala file.
+.IP \fB\-M\fR
+Home directory milik user tidak akan dibuatkan, bahkan jika setting
+system pada \fI/etc/login.defs\fR ditujukan untuk membuat home 
+directory.
+.IP \fB\-n\fR
+Sebuah group yang namanya sama dengan user akan ditambahkan ke dalam
+system secara default.  Option ini akan mematikan kebiasaan tersebut
+yang terdapat pada Red Hat Linux.
+.IP \fB\-r\fR
+Flag ini digunakan untuk membuat sebuah system account.  Yaitu, user
+dengan UID yang lebih kecil dari UID_MIN yang tercantum pada 
+\fI/etc/login.defs\fR.  Harap diingat bahwa \fBuseradd\fR tidak akan
+membuat home directory untuk user semacam ini, menghiraukan setting
+default yang terdapat di \fI/etc/login.defs\fR.
+Anda harus menyebutkan option \fB\-m\fR jika ingin membuat home directory
+untuk sebuah system account yang akan dibuat.
+Ini adalah option yang ditambahkan oleh Red Hat.
+.IP "\fB\-s \fIshell\fR"
+Nama login shell milik user.
+Default\-nya adalah membiarkan field ini kosong, yang menyebabkan
+system untuk memilih login shell yang default.
+.IP "\fB\-u \fIuid\fR"
+Nilai user ID secara numerik.
+Nilai ini harus unique, kecuali jika option \fI\-o\fR digunakan.
+Nilai tersebut tidak boleh negatif.
+Default\-nya adalah menggunakan nilai ID yang lebih besar dari 999
+dan lebih besar dari semua user lain.
+Nilai di antara 0 dan 999 biasanya disiapkan untuk system aacount.
+.SS Mengubah nilai\-nilai default.
+Ketika digunakan dengan option \fB\-D\fR, \fBuseradd\fR akan
+menampilkan nilai default, atau memperbarui nilai default baru
+yang terdapat pada baris perintah.
+Option yang dapat digunakan adalah
+.IP "\fB\-b \fIdefault_home\fR"
+Awalan path untuk home directory milik user baru.
+Nama user akan ditambahkan setelah akhir \fIdefault_home\fR
+ketika membuat nama directory baru jika option \fB\-d\fI tidak
+disebutkan dalam membuat account baru.
+.IP "\fB\-e \fIdefault_expire_date\fR"
+Tanggal ketika user account dimatikan.
+.IP "\fB\-f \fIdefault_inactive\fR"
+Jumlah hari setelah password kadaluarsa sebelum account
+dimatikan.
+.IP "\fB\-g \fIdefault_group\fR"
+Nama group atau ID sebagai group awal user baru.
+Nama group yang disebut harus sudah ada dan nomor group ID
+harus mempunyai entry.
+.IP "\fB\-s \fIdefault_shell\fR"
+Nama untuk login shell milik user baru.
+Nama program yang disebutkan akan digunakan untuk semua user
+account baru mendatang.
+.PP
+Jika tidak ada option yang disebutkan, \fBuseradd\fR menampilkan
+nilai default yang ada saat ini.
+.SH NOTES
+The system administrator is responsible for placing the default
+user files in the \fI/etc/skel\fR directory.
+.br
+Versi useradd ini dimodifikasi oleh Red Hat agar cocok dengan
+ketentuan mengenai user/group.
+.SH CAVEATS
+Anda tidak dapat menambahkan user pada grou NIS.
+Ini harus dilakukan pada server NIS.
+.SH FILES
+\fB/etc/passwd\fR \- informasi tentang user account
+.br
+\fB/etc/shadow\fR \- informasi user account yang terlindung
+.br
+\fB/etc/group\fR \- informasi tentang group
+.br
+\fB/etc/default/useradd\fR \- informasi tentang nilai default
+.br
+\fB/etc/login.defs\fR \- system\-wide settings
+.br
+\fB/etc/skel\fR \- directory yang mengandung default files
+.SH LIHAT JUGA
+.BR chfn (1),
+.BR chsh (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.BR userdel (8),
+.BR usermod (8)
+.SH AUTHOR
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/it/Makefile.am b/man/it/Makefile.am
new file mode 100644 (file)
index 0000000..d32b100
--- /dev/null
@@ -0,0 +1,54 @@
+
+mandir = @mandir@/it
+
+man_MANS = \
+       chage.1 \
+       chfn.1 \
+       chpasswd.8 \
+       chsh.1 \
+       expiry.1 \
+       faillog.5 \
+       faillog.8 \
+       getspnam.3 \
+       gpasswd.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       groups.1 \
+       grpck.8 \
+       grpconv.8 \
+       grpunconv.8 \
+       lastlog.8 \
+       login.1 \
+       newgrp.1 \
+       newusers.8 \
+       passwd.1 \
+       passwd.5 \
+       pwck.8 \
+       pwconv.8 \
+       pwunconv.8 \
+       sg.1 \
+       shadow.3 \
+       shadow.5 \
+       su.1 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8 \
+       vigr.8 \
+       vipw.8
+
+man_nopam = \
+       porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+                        
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_nopam) \
+       id.1 \
+       logoutd.8
+
+include ../generate_translations.mak
+
diff --git a/man/it/Makefile.in b/man/it/Makefile.in
new file mode 100644 (file)
index 0000000..8924cbd
--- /dev/null
@@ -0,0 +1,602 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+DIST_COMMON = $(srcdir)/../generate_mans.mak \
+       $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+subdir = man/it
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+       "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/it
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = chage.1 chfn.1 chpasswd.8 chsh.1 expiry.1 faillog.5 \
+       faillog.8 getspnam.3 gpasswd.1 groupadd.8 groupdel.8 \
+       groupmod.8 groups.1 grpck.8 grpconv.8 grpunconv.8 lastlog.8 \
+       login.1 newgrp.1 newusers.8 passwd.1 passwd.5 pwck.8 pwconv.8 \
+       pwunconv.8 sg.1 shadow.3 shadow.5 su.1 useradd.8 userdel.8 \
+       usermod.8 vigr.8 vipw.8 $(am__append_1)
+man_nopam = \
+       porttime.5
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_nopam) \
+       id.1 \
+       logoutd.8
+
+@ENABLE_REGENERATE_MAN_TRUE@LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@CLEANFILES = .xml2po.mo $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST))
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/it/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/it/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man3: $(man3_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)"
+       @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.3*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           3*) ;; \
+           *) ext='3' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst"; \
+       done
+uninstall-man3:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.3*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           3*) ;; \
+           *) ext='3' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man3dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+       uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man3 install-man5 install-man8 install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man3 uninstall-man5 \
+       uninstall-man8
+
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@   [ ! -f ../config.xml ] || mv ../config.xml ../config.xml.bak
+@ENABLE_REGENERATE_MAN_TRUE@   xml2po --expand-all-entities -l $(LANG) -p ../po/$(LANG).po -o $@ ../$@
+@ENABLE_REGENERATE_MAN_TRUE@   sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+@ENABLE_REGENERATE_MAN_TRUE@   [ ! -f ../config.xml.bak ] || mv ../config.xml.bak ../config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   sed -i 's/config SYSTEM "config.xml">/config SYSTEM "config.xml">\%config;/' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@   make -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%: %.xml Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(SHA_CRYPT_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@               -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@grpconv.8 grpunconv.8 pwunconv.8: pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@getspnam.3: shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@vigr.8: vipw.8
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/it/chage.1 b/man/it/chage.1
new file mode 100644 (file)
index 0000000..c380d45
--- /dev/null
@@ -0,0 +1,158 @@
+'\" t
+.\"     Title: chage
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: Italian
+.\"
+.TH "CHAGE" "1" "24/07/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+chage \- cambia le informazioni sulla scadenza della password
+.SH "SINOSSI"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIopzioni\fR] [\fILOGIN\fR]
+.SH "DESCRIZIONE"
+.PP
+\fBchage\fR
+modifica il numero minimo di giorni tra i cambi di password e la data dell\'ultimo cambio\&. Queste informazioni sono usate dal sistema per determinare quando un utente deve cambiare la propria password\&.
+.SH "OPZIONI"
+.PP
+Il comando
+\fBchage\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR \fILAST_DAY\fR
+.RS 4
+Imposta la data dell\'ultimo cambio della password, espressa come il numero di giorni trascorsi dal 1 gennaio 1970\&. La data pu\(`o anche essere specificata nel formato AAAA\-MM\-GG o nella notazione comunemente usata nel proprio paese\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR \fIEXPIRE_DATE\fR
+.RS 4
+Set the date or number of days since January 1, 1970 on which the user\'s account will no longer be accessible\&. The date may also be expressed in the format YYYY\-MM\-DD (or the format more commonly used in your area)\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIEXPIRE_DATE\fR
+will remove an account expiration date\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR \fIINACTIVE\fR
+.RS 4
+Set the number of days of inactivity after a password has expired before the account is locked\&. The
+\fIINACTIVE\fR
+option is the number of days of inactivity\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIINACTIVE\fR
+will remove an account\'s inactivity\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Show account aging information\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR \fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change his/her password at any time\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR \fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days during which a password is valid\&. When
+\fIMAX_DAYS\fR
+plus
+\fILAST_DAY\fR
+is less than the current day, the user will be required to change his/her password before being able to use his/her account\&. This occurrence can be planned for in advance by use of the
+\fB\-W\fR
+option, which provides the user with advance warning\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\'s validity\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR \fIWARN_DAYS\fR
+.RS 4
+Imposta il numero di giorni di preavviso prima che sia obbligatorio cambiare la password\&. L\'opzione
+\fIgg_avviso\fR
+indica il numero di giorni prima della scadenza della password in cui l\'utente viene avvertito dell\'imminente scadenza\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchage\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTA"
+.PP
+\fBchage\fR
+richiede che il file delle shadow password sia disponibile\&.
+.PP
+L\'uso del comando
+\fBchage\fR
+\(`e permesso solo all\'utente root, tranne per l\'opzione
+\fB\-l\fR, che pu\(`o essere usata da un utente non privilegiato per conoscere la scadenza della propria password o dell\'account\&.
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+Il comando
+\fBchage\fR
+restituisce i seguenti valori:
+.PP
+\fI0\fR
+.RS 4
+successo
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+sintassi del comando errata
+.RE
+.PP
+\fI15\fR
+.RS 4
+can\'t find the shadow password file
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/it/chfn.1 b/man/it/chfn.1
new file mode 100644 (file)
index 0000000..3b938b7
--- /dev/null
@@ -0,0 +1,108 @@
+'\" t
+.\"     Title: chfn
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: Italian
+.\"
+.TH "CHFN" "1" "24/07/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+chfn \- change real user name and information
+.SH "SINOSSI"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\-f\ \fIfull_name\fR] [\-r\ \fIroom_no\fR] [\-w\ \fIwork_ph\fR] [\-h\ \fIhome_ph\fR] [\-o\ \fIother\fR] [\fIuser\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBchfn\fR
+command changes user fullname, office number, office extension, and home phone number information for a user\'s account\&. This information is typically printed by
+\fBfinger\fR(1)
+and similar programs\&. A normal user may only change the fields for her own account, subject to the restrictions in
+/etc/login\&.defs\&. (The default configuration is to prevent users from changing their fullname\&.) The superuser may change any field for any account\&. Additionally, only the superuser may use the
+\fB\-o\fR
+option to change the undefined portions of the GECOS field\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.PP
+Se nessuna delle opzioni \(`e selezionata,
+\fBchfn\fR
+opera in maniera interattiva, chiedendo all\'utente il valore da impostare per ogni campo\&. Inserire un nuovo valore per sostituire il contenuto attuale, oppure lasciare la linea vuota per non cambiarlo\&. Il valore attuale \(`e mostrato tra le parentesi
+\fB[ ]\fR\&. Senza alcuna opzione,
+\fBchfn\fR, chiede l\'account sul quale operare\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.SH "FILE"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/it/chpasswd.8 b/man/it/chpasswd.8
new file mode 100644 (file)
index 0000000..913b238
--- /dev/null
@@ -0,0 +1,223 @@
+'\" t
+.\"     Title: chpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "CHPASSWD" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+chpasswd \- aggiorna le password in modo non interattivo
+.SH "SINOSSI"
+.HP \w'\fBchpasswd\fR\ 'u
+\fBchpasswd\fR [\fIopzioni\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBchpasswd\fR
+command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users\&. Each line is of the format:
+.PP
+\fInome_utente\fR:\fIpassword\fR
+.SS ""
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchpasswd\fR\&. Also the password age will be updated, if present\&.
+.PP
+The default encryption algorithm can be defined for the system with the ENCRYPT_METHOD variable of
+/etc/login\&.defs, and can be overwiten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+
+\fBchpasswd\fR
+first update the password in memory, and then commit all the changes to disk if no errors occured for any users\&.
+.PP
+Questo comando \(`e appositamente pensato per grossi sistemi in cui si abbia la necessit\(`a di creare molti account nello stesso momento\&.
+.SH "OPZIONI"
+.PP
+Il comando
+\fBchpasswd\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Le password fornite sono in forma cifrata\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Usa la cifratura MD5 anzich\('e DES quando le password fornite non sono cifrate\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+Remember to set permissions or umask to prevent readability of unencrypted files by other users\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+
+\fBpasswd\fR(1),
+\fBnewusers\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/it/chsh.1 b/man/it/chsh.1
new file mode 100644 (file)
index 0000000..bb85454
--- /dev/null
@@ -0,0 +1,103 @@
+'\" t
+.\"     Title: chsh
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: Italian
+.\"
+.TH "CHSH" "1" "24/07/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+chsh \- cambia la shell di login
+.SH "SINOSSI"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIopzioni\fR] [\fILOGIN\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBchsh\fR
+command changes the user login shell\&. This determines the name of the user\'s initial login command\&. A normal user may only change the login shell for her own account, the superuser may change the login shell for any account\&.
+.SH "OPZIONI"
+.PP
+Il comando
+\fBchsh\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fISHELL\fR
+.RS 4
+Il nome della nuova shell di login dell\'utente\&. Lasciando questo campo vuoto si fa in modo che il sistema selezioni la shell di connessione predefinita\&.
+.RE
+.PP
+If the
+\fB\-s\fR
+option is not selected,
+\fBchsh\fR
+operates in an interactive fashion, prompting the user with the current login shell\&. Enter the new value to change the shell, or leave the line blank to use the current one\&. The current shell is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTA"
+.PP
+The only restriction placed on the login shell is that the command name must be listed in
+/etc/shells, unless the invoker is the superuser, and then any value may be added\&. An account with a restricted login shell may not change her login shell\&. For this reason, placing
+/bin/rsh
+in
+/etc/shells
+is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shells
+.RS 4
+#\-#\-#\-#\-# #\-#\-#\-#\-# Elenco delle shell di login valide\&. #\-#\-#\-#\-# #\-#\-#\-#\-# Elenco delle shell di login ammesse\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/it/expiry.1 b/man/it/expiry.1
new file mode 100644 (file)
index 0000000..8789b54
--- /dev/null
@@ -0,0 +1,45 @@
+'\" t
+.\"     Title: expiry
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: Italian
+.\"
+.TH "EXPIRY" "1" "24/07/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+expiry \- controlla e fa rispettare la scadenza della password
+.SH "SINOSSI"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR [\-c] [\-f]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBexpiry\fR
+command checks (\fB\-c\fR) the current password expiration and forces (\fB\-f\fR) changes when required\&. It is callable as a normal user command\&.
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/it/faillog.5 b/man/it/faillog.5
new file mode 100644 (file)
index 0000000..9e6e3a4
--- /dev/null
@@ -0,0 +1,57 @@
+'\" t
+.\"     Title: faillog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual:  File Formats and Conversions
+.\"    Source:  File Formats and Conversions
+.\"  Language: Italian
+.\"
+.TH "FAILLOG" "5" "24/07/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+faillog \- File di log degli accessi falliti
+.SH "DESCRIZIONE"
+.PP
+
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+The file contains fixed length records, indexed by numerical UID\&. Each record contains the count of login failures since the last successful login; the maximum number of failures before the account is disabled; the line on whiche the last login failure occurred; the date of the last login failure; and the duration (in seconds) during which the account will be locked after a failure\&.
+.PP
+La struttura del file \(`e la seguente:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+       short   fail_cnt;
+       short   fail_max;
+       char    fail_line[12];
+       time_t  fail_time;
+       long    fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FILE"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+
+\fBfaillog\fR(8)
diff --git a/man/it/faillog.8 b/man/it/faillog.8
new file mode 100644 (file)
index 0000000..91bb387
--- /dev/null
@@ -0,0 +1,140 @@
+'\" t
+.\"     Title: faillog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "FAILLOG" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+faillog \- mostra i conteggi e imposta i limiti degli accessi falliti
+.SH "SINOSSI"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIopzioni\fR]
+.SH "DESCRIZIONE"
+.PP
+
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "OPZIONI"
+.PP
+Il comando
+\fBfaillog\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-time\fR\fISEC\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR\fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+Reset the counters of login failures\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\fIGIORNI\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR \fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.PP
+NOTE: in display mode, only the records of users which currently exist in the system are displayed\&. In the other modes (when the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used), the records of the user, or the range of users, or all the users that may have an entry in the faillog database will be changed\&. This is useful to reset records of users that have been deleted or set a policy in advance for a range of users\&.
+.SH "AVVISI/CAVEAT"
+.PP
+\fBfaillog\fR
+mostra solo gli utenti che non hanno effettuato nessun accesso corretto dopo l\'ultimo tentativo fallito\&. Un utente che abbia completato correttamente un accesso dopo l\'ultimo tentativo fallito \(`e mostrato solo se viene richiesto esplicitamente con l\'opzione
+\fB\-u\fR
+o se viene richiesto di mostrare tutti gli utenti con l\'opzione
+\fB\-a\fR\&.
+.SH "FILE"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/it/getspnam.3 b/man/it/getspnam.3
new file mode 100644 (file)
index 0000000..cd473da
--- /dev/null
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/it/gpasswd.1 b/man/it/gpasswd.1
new file mode 100644 (file)
index 0000000..a7a7acc
--- /dev/null
@@ -0,0 +1,254 @@
+'\" t
+.\"     Title: gpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: Italian
+.\"
+.TH "GPASSWD" "1" "24/07/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+gpasswd \- administer /etc/group and /etc/gshadow
+.SH "SINOSSI"
+.HP \w'\fBgpasswd\fR\ 'u
+\fBgpasswd\fR [\fIoption\fR] \fIgroup\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBgpasswd\fR
+command is used to administer
+/etc/group, and /etc/gshadow\&. Every group can have
+administrators,
+members and a password\&.
+.PP
+System administrators can use the
+\fB\-A\fR
+option to define group administrator(s) and the
+\fB\-M\fR
+option to define members\&. They have all rights of group administrators and members\&.
+.PP
+
+\fBgpasswd\fR
+called by
+a group administrator
+with a group name only prompts for the new password of the
+\fIgroup\fR\&.
+.PP
+If a password is set the members can still use
+\fBnewgrp\fR(1)
+without a password, and non\-members must supply the password\&.
+.SS "Note sulle password di gruppo"
+.PP
+Le password di gruppo non un problema di sicurezza perch\('e pi\(`u di una persona deve conoscerle\&. Ciononostante i gruppi sono uno strumento molto utile per la cooperazione tra vari utenti\&.
+.SH "OPZIONI"
+.PP
+Except for the
+\fB\-A\fR
+and
+\fB\-M\fR
+options, the options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR \fIuser\fR
+.RS 4
+Add the
+\fIuser\fR
+to the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR \fIuser\fR
+.RS 4
+Remove the
+\fIuser\fR
+from the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\-password\fR
+.RS 4
+Remove the password from the named
+\fIgroup\fR\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-restrict\fR
+.RS 4
+Restrict the access to the named
+\fIgroup\fR\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-A\fR, \fB\-\-administrators\fR \fIuser\fR,\&.\&.\&.
+.RS 4
+Set the list of administrative users\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-members\fR \fIuser\fR,\&.\&.\&.
+.RS 4
+Set the list of group members\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+This tool only operates on the
+/etc/group
+and /etc/gshadow files\&.
+Thus you cannot change any NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+
+\fBnewgrp\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/it/groupadd.8 b/man/it/groupadd.8
new file mode 100644 (file)
index 0000000..74a2193
--- /dev/null
@@ -0,0 +1,212 @@
+'\" t
+.\"     Title: groupadd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "GROUPADD" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+groupadd \- Crea un nuovo gruppo
+.SH "SINOSSI"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIopzioni\fR] \fIgroup\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "OPZIONI"
+.PP
+Il comando
+\fBgroupadd\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGID\fR
+.RS 4
+Il valore numerico dell\'identificatore (ID) del gruppo\&. Questo valore deve essere univoco, a meno che non venga usata l\'opzione
+\fB\-o\fR\&. Il valore deve essere non\-negativo\&. La scelta predefinita \(`e quella di usare il minimo valore di ID superiore a 999 e superiore a qualunque altro gruppo\&. Valori tra 0 e 999 sono tipicamente riservati per account di sistema\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR \fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (GID_MIN, GID_MAX and others)\&. Multiple
+\fB\-K\fR
+options can be specified\&.
+.sp
+Example:
+\fB\-K \fR\fIGID_MIN\fR=\fI100\fR
+\fB\-K \fR\fIGID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K \fR
+\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+doesn\'t work yet\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+This option permits to add a group with a non\-unique GID\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR \fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system group\&.
+.sp
+The numeric identifiers of new system groups are choosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+Groupnames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+You may not add a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBgroupadd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+successo
+.RE
+.PP
+\fI2\fR
+.RS 4
+sintassi del comando errata
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID not unique (when
+\fB\-o\fR
+not used)
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name not unique
+.RE
+.PP
+\fI10\fR
+.RS 4
+non \(`e possibile aggiornare il file group
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/it/groupdel.8 b/man/it/groupdel.8
new file mode 100644 (file)
index 0000000..476a2b3
--- /dev/null
@@ -0,0 +1,108 @@
+'\" t
+.\"     Title: groupdel
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "GROUPDEL" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+groupdel \- Rimuove un gruppo
+.SH "SINOSSI"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR \fIgroup\fR
+.SH "DESCRIZIONE"
+.PP
+Il comando
+\fBgroupdel\fR
+modifica i file di account di sistema, rimuovendo tutte le voci che si riferiscono a
+\fIgruppo\fR\&. Il gruppo nominato deve esistere\&.
+.SH "AVVISI/CAVEAT"
+.PP
+Non si pu\(`o rimuovere un gruppo che sia gruppo primario di un utente\&. Occorre rimuovere l\'utente prima di rimuovere il gruppo\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this group\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBgroupdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+successo
+.RE
+.PP
+\fI2\fR
+.RS 4
+sintassi del comando errata
+.RE
+.PP
+\fI6\fR
+.RS 4
+il gruppo specificato non esiste
+.RE
+.PP
+\fI8\fR
+.RS 4
+operazione impossibile perch\('e il gruppo \(`e primario per un utente
+.RE
+.PP
+\fI10\fR
+.RS 4
+non \(`e possibile aggiornare il file group
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)
diff --git a/man/it/groupmod.8 b/man/it/groupmod.8
new file mode 100644 (file)
index 0000000..af6b6cf
--- /dev/null
@@ -0,0 +1,170 @@
+'\" t
+.\"     Title: groupmod
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "GROUPMOD" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+groupmod \- modify a group definition on the system
+.SH "SINOSSI"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIopzioni\fR] \fIGROUP\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBgroupmod\fR
+command modifies the definition of the specified
+\fIGROUP\fR
+by modifying the appropriate entry in the group database\&.
+.SH "OPZIONI"
+.PP
+Il comando
+\fBgroupmod\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. Values between 0 and 999 are typically reserved for system groups\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR \fINEW_GROUP\fR
+.RS 4
+Il nome del gruppo verr\(`a modificato da
+\fIgruppo\fR
+a
+\fInome_gruppo\fR\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR \fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBgroupmod\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+successo
+.RE
+.PP
+\fI2\fR
+.RS 4
+sintassi del comando errata
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+il gruppo specificato non esiste
+.RE
+.PP
+\fI6\fR
+.RS 4
+il gruppo specificato non esiste
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+non \(`e possibile aggiornare il file group
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/it/groups.1 b/man/it/groups.1
new file mode 100644 (file)
index 0000000..419ab30
--- /dev/null
@@ -0,0 +1,54 @@
+'\" t
+.\"     Title: groups
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: Italian
+.\"
+.TH "GROUPS" "1" "24/07/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+groups \- mostra i nomi dei gruppi correnti
+.SH "SINOSSI"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIuser\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "NOTA"
+.PP
+Sui sistemi che non supportano l\'appartenenza a pi\(`u gruppi contemporaneamente, vengono riportate le informazioni da
+/etc/group\&. L\'utente deve usare
+\fBnewgrp\fR
+o
+\fBsg\fR
+per cambiare gli ID dei gruppi reale ed efficace\&.
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/it/grpck.8 b/man/it/grpck.8
new file mode 100644 (file)
index 0000000..3847279
--- /dev/null
@@ -0,0 +1,220 @@
+'\" t
+.\"     Title: grpck
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "GRPCK" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+grpck \- verifica l\'integrit\(`a dei file di gruppo
+.SH "SINOSSI"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [\-r] [\fIgroup\fR\ [\ \fIshadow\fR\ ]]
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [\-s] [\fIgroup\fR\ [\ \fIshadow\fR\ ]]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Vengono fatti controlli per verificare che ogni voce abbia:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+il corretto numero di campi
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid group name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-r\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/groupand /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBgrpck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+successo
+.RE
+.PP
+\fI1\fR
+.RS 4
+sintassi del comando errata
+.RE
+.PP
+\fI2\fR
+.RS 4
+una o pi\(`u voci di gruppo contengono errori
+.RE
+.PP
+\fI3\fR
+.RS 4
+impossibile aprire i file dei gruppi
+.RE
+.PP
+\fI4\fR
+.RS 4
+impossibile fare il lock dei file dei gruppi
+.RE
+.PP
+\fI5\fR
+.RS 4
+impossibile aggiornare i file dei gruppi
+.RE
+.SH "VEDERE ANCHE"
+.PP
+
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/it/grpconv.8 b/man/it/grpconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/it/grpunconv.8 b/man/it/grpunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/it/id.1 b/man/it/id.1
new file mode 100644 (file)
index 0000000..776d4a2
--- /dev/null
@@ -0,0 +1,52 @@
+'\" t
+.\"     Title: id
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: Italian
+.\"
+.TH "ID" "1" "24/07/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+id \- display current user and group ID names
+.SH "SINOSSI"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/it/lastlog.8 b/man/it/lastlog.8
new file mode 100644 (file)
index 0000000..126ac69
--- /dev/null
@@ -0,0 +1,89 @@
+'\" t
+.\"     Title: lastlog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "LASTLOG" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+lastlog \- reports the most recent login of all users or of a given user
+.SH "SINOSSI"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIopzioni\fR]
+.SH "DESCRIZIONE"
+.PP
+\fBlastlog\fR
+mostra il log degli ultimi accessi, contenuto nel file
+/var/log/lastlog\&. Le informazioni mostrate sono il
+\fInome utente\fR, la
+\fIporta\fR, e la
+\fIdata dell\'ultimo accesso\fR\&. Il comportamento predefinito (nessuna opzione specificata) \(`e di mostrare i record di ultimo accesso per tutti gli utenti, nell\'ordine in cui compaiono in
+/etc/passwd\&.
+.SH "OPZIONI"
+.PP
+Il comando
+\fBlastlog\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-b\fR, \fB\-\-before\fR \fIDAYS\fR
+.RS 4
+Print only lastlog records older than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\fIGIORNI\fR
+.RS 4
+Mostra solo i record di ultimo accesso pi\(`u recenti di un numero di
+\fIGIORNI\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR \fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Print the lastlog record of the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+If the user has never logged in the message
+\fI** Never logged in**\fR
+will be displayed instead of the port and time\&.
+.PP
+Only the entries for the current users of the system will be displayed\&. Other entries may exist for users that were deleted previously\&.
+.SH "NOTA"
+.PP
+The
+lastlog
+file is a database which contains info on the last login of each user\&. You should not rotate it\&. It is a sparse file, so its size on the disk is usually much smaller than the one shown by "\fBls \-l\fR" (which can indicate a really big file if you have in
+passwd
+users with a high UID)\&. You can display its real size with "\fBls \-s\fR"\&.
+.SH "FILE"
+.PP
+/var/log/lastlog
+.RS 4
+Database times of previous user logins\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+Large gaps in UID numbers will cause the lastlog program to run longer with no output to the screen (i\&.e\&. if in lastlog database there is no entries for users with UID between 170 and 800 lastlog will appear to hang as it processes entries with UIDs 171\-799)\&.
diff --git a/man/it/login.1 b/man/it/login.1
new file mode 100644 (file)
index 0000000..93f96b5
--- /dev/null
@@ -0,0 +1,475 @@
+'\" t
+.\"     Title: login
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: Italian
+.\"
+.TH "LOGIN" "1" "24/07/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+login \- begin session on the system
+.SH "SINOSSI"
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] [\fIusername\fR] [\fIENV=VAR\fR...]
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] \-f \fIusername\fR
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] \-r\ \fIhost\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBlogin\fR
+program is used to establish a new session with the system\&. It is normally invoked automatically by responding to the
+\fIlogin:\fR
+prompt on the user\'s terminal\&.
+\fBlogin\fR
+may be special to the shell and may not be invoked as a sub\-process\&. When called from a shell,
+\fBlogin\fR
+should be executed as
+\fBexec login\fR
+which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller)\&. Attempting to execute
+\fBlogin\fR
+from any shell but the login shell will produce an error message\&.
+.PP
+All\'utente viene quindi chiesta la password, se necessario\&. Durante questa operazione l\'eco sul terminale \(`e disabilitato per non rivelare la password\&. Solo un basso numero di tentativi falliti \(`e permesso prima che
+\fBlogin\fR
+termini e che la connessione sia rallentata\&.
+.PP
+Se la scadenza delle password \(`e abilitata per il proprio account, prima di proseguire ci pu\(`o essere la richiesta di una nuova password\&. Il programma chieder\(`a prima la vecchia password e poi la nuova per poter continuare\&. Per maggiori informazioni si faccia riferimento a
+\fBpasswd\fR(1)\&.
+.PP
+Dopo aver completato correttamente l\'accesso, vengono mostrati eventuali messaggi di sistema e si viene informati della presenza di nuova posta\&. Si pu\(`o evitare di visualizzare i messaggi in
+/etc/motd
+creando un file vuoto chiamato
+\&.hushlogin
+nella propria directory di login\&. Il messaggio relativo alla presenza di posta \(`e "\fIC\'\(`e nuova posta\&.\fR", "\fIC\'\(`e la solita posta\&.\fR" o "\fINessun messaggio di posta\&.\fR" a seconda dello stato della propria casella di posta\&.
+.PP
+Your user and group ID will be set according to their values in the
+/etc/passwd
+file\&. The value for
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$PATH\fR,
+\fB$LOGNAME\fR, and
+\fB$MAIL\fR
+are set according to the appropriate fields in the password entry\&. Ulimit, umask and nice values may also be set according to entries in the GECOS field\&.
+.PP
+In alcune installazioni la variabile d\'ambiente
+\fB$TERM\fR
+pu\(`o essere impostata in base al tipo di terminale della propria connessione, come specificato in
+/etc/ttytype\&.
+.PP
+An initialization script for your command interpreter may also be executed\&. Please see the appropriate manual section for more information on this function\&.
+.PP
+A subsystem login is indicated by the presence of a "*" as the first character of the login shell\&. The given home directory will be used as the root of a new file system which the user is actually logged into\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.SH "OPZIONI"
+.PP
+\fB\-f\fR
+.RS 4
+Non effettua l\'autenticazione, l\'utente \(`e gi\(`a autenticato
+.sp
+Note: In that case,
+\fIusername\fR
+is mandatory\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+Nome dell\'host remoto per questo login\&.
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+Non modifica l\'ambiente\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Perform autologin protocol for rlogin\&.
+.RE
+.PP
+Le opzioni
+\fB\-r\fR,
+\fB\-h\fR
+e
+\fB\-f\fR
+possono essere utilizzate solo quando
+\fBlogin\fR
+viene invocato da root\&.
+.SH "AVVISI/CAVEAT"
+.PP
+This version of
+\fBlogin\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.PP
+The location of files is subject to differences in system configuration\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.PP
+As with any program,
+\fBlogin\fR\'s appearance can be faked\&. If non\-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine\&. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Delay in seconds before being allowed another attempt after a login failure\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\' shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+If defined, login failures will be logged in this file in a utmp format\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\'s name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\'s home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+If defined, this file will be displayed before each login prompt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of /var/log/lastlog login time info\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Maximum number of login retries in case of bad password\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Max time in seconds for login\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Enable logging of successful logins\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Enable display of unknown usernames when login failures are recorded\&.
+.sp
+Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in /etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\'s primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILE"
+.PP
+/var/run/utmp
+.RS 4
+Elenco delle sessioni attive
+.RE
+.PP
+/var/log/wtmp
+.RS 4
+Elenco delle precedenti sessioni\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.PP
+/etc/motd
+.RS 4
+System message of the day file\&.
+.RE
+.PP
+/etc/nologin
+.RS 4
+Inibisce l\e\'accesso al sistema per utenti diversi da root\&.
+.RE
+.PP
+/etc/ttytype
+.RS 4
+Elenco di tipi di terminale\&.
+.RE
+.PP
+$HOME/\&.hushlogin
+.RS 4
+#\-#\-#\-#\-# #\-#\-#\-#\-# Non fa mostrare i messaggi di sistema\&. #\-#\-#\-#\-# #\-#\-#\-#\-# Impedisce che vengano mostrati i messaggi di sistema\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBmail\fR(1),
+\fBpasswd\fR(1),
+\fBsh\fR(1),
+\fBsu\fR(1),
+\fBlogin.defs\fR(5),
+\fBnologin\fR(5),
+\fBpasswd\fR(5),
+\fBsecuretty\fR(5),
+\fBgetty\fR(8)\&.
diff --git a/man/it/logoutd.8 b/man/it/logoutd.8
new file mode 100644 (file)
index 0000000..0267f60
--- /dev/null
@@ -0,0 +1,49 @@
+'\" t
+.\"     Title: logoutd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "LOGOUTD" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+logoutd \- fa rispettare le limitazioni sugli accessi
+.SH "SINOSSI"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "DESCRIZIONE"
+.PP
+
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "FILE"
+.PP
+/etc/porttime
+.RS 4
+File containing port access\&.
+.RE
+.PP
+/var/run/utmp
+.RS 4
+Elenco delle sessioni attive
+.RE
diff --git a/man/it/newgrp.1 b/man/it/newgrp.1
new file mode 100644 (file)
index 0000000..d52f2e7
--- /dev/null
@@ -0,0 +1,91 @@
+'\" t
+.\"     Title: newgrp
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: Italian
+.\"
+.TH "NEWGRP" "1" "24/07/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+newgrp \- log in to a new group
+.SH "SINOSSI"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIgroup\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\'s environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/it/newusers.8 b/man/it/newusers.8
new file mode 100644 (file)
index 0000000..d91d2f3
--- /dev/null
@@ -0,0 +1,376 @@
+'\" t
+.\"     Title: newusers
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "NEWUSERS" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+newusers \- update and create new users in batch
+.SH "SINOSSI"
+.HP \w'\fBnewusers\fR\ 'u
+\fBnewusers\fR [\fIopzioni\fR\ \fInew_users\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBnewusers\fR
+command reads a file of user name and clear\-text password pairs and uses this information to update a group of existing users or to create new users\&. Each line is in the same format as the standard password file (see
+\fBpasswd\fR(5)) with the exceptions explained below:
+.PP
+pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
+.PP
+\fIpw_name\fR
+.RS 4
+This is the name of the user\&.
+.sp
+It can be the name of a new user or the name of an existing user (or an user created before by
+\fBnewusers\fR)\&. In case of an existing user, the user\'s information will be changed, otherwise a new user will be created\&.
+.RE
+.PP
+\fIpw_passwd\fR
+.RS 4
+This field will be encrypted and used as the new value of the encrypted password\&.
+.RE
+.PP
+\fIpw_uid\fR
+.RS 4
+This field is used to define the UID of the user\&.
+.sp
+If the field is empty, an new (unused) UID will be defined automatically by
+\fBnewusers\fR\&.
+.sp
+If this field contains a number, this number will be used as the UID\&.
+.sp
+If this field contains the name of an existing user (or the name of an user created before by
+\fBnewusers\fR), the UID of the specified user will be used\&.
+.sp
+If the UID of an existing user is changed, the files ownership of the user\'s file should be fixed manually\&.
+.RE
+.PP
+\fIpw_gid\fR
+.RS 4
+This field is used to define the primary group ID for the user\&.
+.sp
+If this field contains the name of an existing group (or a group created before by
+\fBnewusers\fR), the GID of this group will be used as the primary group ID for the user\&.
+.sp
+If this field is a number, this number will be used as the primary group ID of the user\&. If no groups exist with this GID, a new group will be created with this GID, and the name of the user\&.
+.sp
+If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and as the GID for the new group\&.
+.sp
+If this field contains the name of a group which does not exist (and was not created earlier wbefore by
+\fBnewusers\fR), a new group will be created with the specified name and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and Gs the ID for the new group\&.
+.RE
+.PP
+\fIpw_gecos\fR
+.RS 4
+This field is copied in the GECOS field of the user\&.
+.RE
+.PP
+\fIpw_dir\fR
+.RS 4
+This field is used to define the home directory of the user\&.
+.sp
+If this field does not specify an existing directory, the specified directory is created, with ownership set to the user being created or updated and its primary group\&.
+.sp
+If the home directory of an existing user is changed,
+\fBnewusers\fR
+does not move or copy the content of the old directory to the new location\&. This should be done manually\&.
+.RE
+.PP
+\fIpw_shell\fR
+.RS 4
+This field defines the shell of the user\&. No checks are performed on this field\&.
+.RE
+.PP
+
+\fBnewusers\fR
+first tries to create or change all the specified users, and then write these changes to the user or group databases\&. If an error occurs (except in the final writes to the databases), no changes are committed to the databases\&.
+.PP
+This command is intended to be used in a large system environment where many accounts are updated at a single time\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBnewusers\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system account\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are choosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+The input file must be protected since it contains unencrypted passwords\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(1),
+\fBuseradd\fR(8)\&.
diff --git a/man/it/passwd.1 b/man/it/passwd.1
new file mode 100644 (file)
index 0000000..64a76fd
--- /dev/null
@@ -0,0 +1,346 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: Italian
+.\"
+.TH "PASSWD" "1" "24/07/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+passwd \- cambia la password utente
+.SH "SINOSSI"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIopzioni\fR] [\fILOGIN\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBpasswd\fR
+command changes passwords for user accounts\&. A normal user may only change the password for his/her own account, while the superuser may change the password for any account\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "Modifiche delle password"
+.PP
+The user is first prompted for his/her old password, if one is present\&. This password is then encrypted and compared against the stored password\&. The user has only one chance to enter the correct password\&. The superuser is permitted to bypass this step so that forgotten passwords may be changed\&.
+.PP
+After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time\&. If not,
+\fBpasswd\fR
+refuses to change the password and exits\&.
+.PP
+The user is then prompted twice for a replacement password\&. The second entry is compared against the first and both are required to match in order for the password to be changed\&.
+.PP
+Then, the password is tested for complexity\&. As a general guideline, passwords should consist of 6 to 8 characters including one or more characters from each of the following sets:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+lettere minuscole
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numeri da 0 a 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+segni di punteggiatura
+.RE
+.PP
+Care must be taken not to include the system default erase or kill characters\&.
+\fBpasswd\fR
+will reject any password which is not suitably complex\&.
+.SS "Suggerimenti per password utente"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+Compromises in password security normally result from careless password selection or handling\&. For this reason, you should not select a password which appears in a dictionary or which must be written down\&. The password should also not be a proper name, your license number, birth date, or street address\&. Any of these may be used as guesses to violate system security\&.
+.PP
+You can find advices on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "OPZIONI"
+.PP
+Il comando
+\fBpasswd\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+This option can be used only with
+\fB\-S\fR
+and causes show status for all users\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+Delete a user\'s password (make it empty)\&. This is a quick way to disable a password for an account\&. It will set the named account passwordless\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+Immediately expire an account\'s password\&. This in effect can force a user to change his/her password at the user\'s next login\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR \fIINACTIVE\fR
+.RS 4
+This option is used to disable an account after the password has been expired for a number of days\&. After a user account has had an expired password for
+\fIINACTIVE\fR
+days, the user may no longer sign on to the account\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Indicate password change should be performed only for expired authentication tokens (passwords)\&. The user wishes to keep their non\-expired tokens as before\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Lock the password of the named account\&. This option disables a password by changing it to a value which matches no possible encrypted value (it adds a \(aa!\(aa at the beginning of the password)\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\'s expire date to Jan 2, 1970)\&.
+.sp
+Users with a locked password are not allowed to change their password\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR \fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change his/her password at any time\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Quiet mode\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR \fIREPOSITORY\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Display account status information\&. The status information consists of 7 fields\&. The first field is the user\'s login name\&. The second field indicates if the user account has a locked password (L), has no password (NP), or has a usable password (P)\&. The third field gives the date of the last password change\&. The next four fields are the minimum age, maximum age, warning period, and inactivity period for the password\&. These ages are expressed in days\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR \fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned that his/her password is about to expire\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR \fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days a password remains valid\&. After
+\fIMAX_DAYS\fR, the password is required to be changed\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+Password complexity checking may vary from site to site\&. The user is urged to select a password as complex as he or she feels comfortable with\&.
+.PP
+Users may not be able to change their password on a system if NIS is enabled and they are not logged into the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\'t change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+Il comando
+\fBpasswd\fR
+restituisce i seguenti valori:
+.SH "VEDERE ANCHE"
+.PP
+
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/it/passwd.5 b/man/it/passwd.5
new file mode 100644 (file)
index 0000000..3347483
--- /dev/null
@@ -0,0 +1,172 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: Italian
+.\"
+.TH "PASSWD" "5" "24/07/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+passwd \- the password file
+.SH "DESCRIZIONE"
+.PP
+
+/etc/passwd
+contains one line for each user account, with seven fields delimited by colons (\(Fo:\(Fc)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+nome di login
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional encrypted password
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical user ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical group ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+user name or comment field
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+user home directory
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional user command interpreter
+.RE
+.PP
+The encrypted password field may be blank, in which case no password is required to authenticate as the specified login name\&. However, some applications which read the
+/etc/passwd
+file may decide not to permit
+\fIany\fR
+access at all if the
+\fIpassword\fR
+field is blank\&. If the
+\fIpassword\fR
+field is a lower\-case
+\(Fox\(Fc, then the encrypted password is actually stored in the
+\fBshadow\fR(5)
+file instead; there
+\fImust\fR
+be a corresponding line in the
+/etc/shadow
+file, or else the user account is invalid\&. If the
+\fIpassword\fR
+field is any other string, then it will be treated as an encrypted password, as specified by
+\fBcrypt\fR(3)\&.
+.PP
+The comment field is used by various system utilities, such as
+\fBfinger\fR(1)\&.
+.PP
+The home directory field provides the name of the initial working directory\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$HOME\fR
+environmental variable\&.
+.PP
+The command interpreter field provides the name of the user\'s command language interpreter, or the name of the initial program to execute\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$SHELL\fR
+environmental variable\&. If this field is empty, it defaults to the value
+/bin/sh\&.
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+optional encrypted password file
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+Backup file for /etc/passwd\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/it/porttime.5 b/man/it/porttime.5
new file mode 100644 (file)
index 0000000..a8d9fae
--- /dev/null
@@ -0,0 +1,89 @@
+'\" t
+.\"     Title: porttime
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: Italian
+.\"
+.TH "PORTTIME" "5" "24/07/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+porttime \- file delle porte e degli orari d\'accesso
+.SH "DESCRIZIONE"
+.PP
+\fIporttime\fR
+contiene un elenco di device tty, nomi utente e orari di accesso permessi\&.
+.PP
+Ciascuna voce \(`e composta da tre campi separati da due punti\&. Il primo \(`e un elenco di device tty, separati da virgole, oppure un asterisco per indicare che la voce corrisponde a qualsiasi device\&. Il secondo campo \(`e un elenco di nomi utente, separati da virgole, oppure un asterisco per indicare che la voce corrisponde ad ogni utente\&. Il terzo campo \(`e un elenco degli orari, separati da virgole, in cui \(`e consentito l\'accesso\&.
+.PP
+Un orario di accesso consiste in zero o pi\(`u giorni della settimana abbreviati in
+\fIMo\fR
+(luned\(`i),
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR,
+\fISa\fR
+e
+\fISu\fR
+(domenica), seguiti da una coppia di orari, separate da un trattino\&. L\'abbreviazione
+\fIWk\fR
+rappresenta tutti i giorni da luned\(`i a venerd\(`i, mentre
+\fIAl\fR
+indica tutti i giorni della settimana\&. Se non si specifica alcun giorno, viene usato implicitamente
+\fIAl\fR\&.
+.SH "ESEMPI"
+.PP
+La voce seguente permette l\'accesso all\'utente
+\fBjfh\fR
+da qualsiasi porta durante i giorni lavorativi dalle 9 alle 17\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+The following entries allow access only to the users
+\fIroot\fR
+and
+\fIoper\fR
+on
+/dev/console
+at any time\&. This illustrates how the
+/etc/porttime
+file is an ordered list of access times\&. Any other user would match the second entry which does not permit access at any time\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      console:root,oper:Al0000\-2400
+      console:*:
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The following entry allows access for the user
+\fIgames\fR
+on any port during non\-working hours\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "FILE"
+.PP
+/etc/porttime
+.RS 4
+File containing port access\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/it/pwck.8 b/man/it/pwck.8
new file mode 100644 (file)
index 0000000..0eadf66
--- /dev/null
@@ -0,0 +1,297 @@
+'\" t
+.\"     Title: pwck
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "PWCK" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+pwck \- verify integrity of password files
+.SH "SINOSSI"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [\-q] [\-s] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [\-q] [\-r] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Vengono fatti controlli per verificare che ogni voce abbia:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+il corretto numero di campi
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+identificatori validi dell\'utente e del gruppo
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+un gruppo primario valido
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+una home directory valida
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+una shell di login valida
+.RE
+.PP
+
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+These checks are the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+every passwd entry has a matching shadow entry, and every shadow entry has a matching passwd entry
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+passwords are specified in the shadowed file
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries have the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries are unique in shadow
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the last password changes are not in the future
+.RE
+.PP
+Gli errori nelle verifiche sul corretto numero di campi e sull\'univocit\(`a del nome utente sono irrimediabili\&. Se una voce ha un numero errato di campi, all\'utente viene chiesto di cancellare l\'intera riga; se l\'utente non risponde affermativamente, vengono omessi tutti gli ulteriori controlli\&. Viene richiesta la cancellazione anche per le voci aventi il nome utente duplicato, ma i rimanenti controlli vengono ugualmente effettuati\&. Tutti gli altri errori non sono gravi e l\'utente \(`e invitato a eseguire il comando
+\fBusermod\fR
+per correggerli\&.
+.PP
+I comandi che operano sul file
+/etc/passwd
+non sono in grado di modificare voci corrotte o duplicate; in tali circostanze va usato
+\fBpwck\fR
+per rimuovere la voce scorretta\&.
+.SH "OPZIONI"
+.PP
+Il comando
+\fBpwck\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-q\fR
+.RS 4
+Report errors only\&. The warnings which do not require any action from the user won\'t be displayed\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Execute the
+\fBpwck\fR
+command in read\-only mode\&.
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+Sort entries in
+/etc/passwd
+and
+/etc/shadow
+by UID\&.
+.RE
+.PP
+Come impostazione predefinita,
+\fBpwck\fR
+opera sui file
+/etc/passwd
+e in
+/etc/shadow\&. L\'utente pu\(`o selezionare file alternativi con i parametri
+\fIpasswd\fR
+e
+\fIshadow\fR\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+Il comando
+\fBpwck\fR
+restituisce i seguenti valori:
+.PP
+\fI0\fR
+.RS 4
+successo
+.RE
+.PP
+\fI1\fR
+.RS 4
+sintassi del comando errata
+.RE
+.PP
+\fI2\fR
+.RS 4
+una o pi\(`u voci di password conengono errori
+.RE
+.PP
+\fI3\fR
+.RS 4
+impossibile aprire i file delle password
+.RE
+.PP
+\fI4\fR
+.RS 4
+impossibile fare il lock dei file delle password
+.RE
+.PP
+\fI5\fR
+.RS 4
+impossibile aggiornare i file delle password
+.RE
+.PP
+\fI6\fR
+.RS 4
+can\'t sort password files
+.RE
+.SH "VEDERE ANCHE"
+.PP
+
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/it/pwconv.8 b/man/it/pwconv.8
new file mode 100644 (file)
index 0000000..a64b2e3
--- /dev/null
@@ -0,0 +1,164 @@
+'\" t
+.\"     Title: pwconv
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "PWCONV" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+pwconv, pwunconv, grpconv, grpunconv \- convertono a e da password e gruppi shadow\&.
+.SH "SINOSSI"
+.HP \w'\fBpwconv\fR\ 'u
+\fBpwconv\fR
+.HP \w'\fBpwunconv\fR\ 'u
+\fBpwunconv\fR
+.HP \w'\fBgrpconv\fR\ 'u
+\fBgrpconv\fR
+.HP \w'\fBgrpunconv\fR\ 'u
+\fBgrpunconv\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBpwconv\fR
+command creates
+\fIshadow\fR
+from
+\fIpasswd\fR
+and an optionally existing
+\fIshadow\fR\&.
+.PP
+The
+\fBpwunconv\fR
+command creates
+\fIpasswd\fR
+from
+\fIpasswd\fR
+and
+\fIshadow\fR
+and then removes
+\fIshadow\fR\&.
+.PP
+The
+\fBgrpconv\fR
+command creates
+\fIgshadow\fR
+from
+\fIgroup\fR
+and an optionally existing
+\fIgshadow\fR\&.
+.PP
+The
+\fBgrpunconv\fR
+command creates
+\fIgroup\fR
+from
+\fIgroup\fR
+and
+\fIgshadow\fR
+and then removes
+\fIgshadow\fR\&.
+.PP
+Questi quattro programmi agiscono tutti sui file normali e oscurati (shadow) delle password e dei gruppi:
+/etc/passwd,
+/etc/group,
+/etc/shadow
+e
+/etc/gshadow\&.
+.PP
+Ciascun programma, prima della conversione, acquisisce i lock necessari\&.
+\fBpwconv\fR
+e
+\fBgrpconv\fR
+sono simili\&. Per prima cosa vengono rimosse le voci nel file oscurato che non esistono nel file principale\&. Quindi vengono aggiornate le voci oscurate che non hanno `x\' come password nel file principale\&. Vengono aggiunte le eventuali voci oscurate mancanti\&. Infine, le password nel file principale vengono sostituite con `x\'\&. Questi programmi possono essere usati per le conversioni iniziali cos\(`i come per aggiornare il file oscurato se il file principale viene editato a mano\&.
+.PP
+
+\fBpwconv\fR
+will use the values of
+\fIPASS_MIN_DAYS\fR,
+\fIPASS_MAX_DAYS\fR, and
+\fIPASS_WARN_AGE\fR
+from
+/etc/login\&.defs
+when adding new entries to
+/etc/shadow\&.
+.PP
+Analogamente,
+\fBpwunconv\fR
+e
+\fBgrpunconv\fR
+sono simili\&. Le password nel file principale vengono aggiornate dal file oscurato\&. Voci che esistono nel file principale ma non nel file oscurato vengono lasciate stare\&. Infine, viene rimosso il file oscurato\&.Alcune informazioni sull\'invecchiamento delle password vengono perse da
+\fBpwunconv\fR\&. Convertir\(`a solo quello che potr\(`a\&.
+.SH "PROBLEMI"
+.PP
+Errors in the password or group files (such as invalid or duplicate entries) may cause these programs to loop forever or fail in other strange ways\&. Please run
+\fBpwck\fR
+and
+\fBgrpck\fR
+to correct any such errors before converting to or from shadow passwords or groups\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variable in
+/etc/login\&.defs
+changes the behavior of
+\fBgrpconv\fR
+and
+\fBgrpunconv\fR:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of
+\fBpwconv\fR:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.SH "FILE"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBgrpck\fR(8),
+\fBlogin.defs\fR(5),
+\fBpwck\fR(8)\&.
diff --git a/man/it/pwunconv.8 b/man/it/pwunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/it/sg.1 b/man/it/sg.1
new file mode 100644 (file)
index 0000000..6eef257
--- /dev/null
@@ -0,0 +1,73 @@
+'\" t
+.\"     Title: sg
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: Italian
+.\"
+.TH "SG" "1" "24/07/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+sg \- execute command as different group ID
+.SH "SINOSSI"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [group\ [\-c]\ command]
+.SH "DESCRIZIONE"
+.PP
+Il comando
+\fBsg\fR
+funziona in maniera analoga a
+\fBnewgrp\fR, ma accetta un comando che viene eseguito con la shell B
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/it/shadow.3 b/man/it/shadow.3
new file mode 100644 (file)
index 0000000..5a89ab3
--- /dev/null
@@ -0,0 +1,238 @@
+'\" t
+.\"     Title: shadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: Library Calls
+.\"    Source: Library Calls
+.\"  Language: Italian
+.\"
+.TH "SHADOW" "3" "24/07/2009" "Library Calls" "Library Calls"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+shadow, getspnam \- gestione del file delle password cifrate
+.SH "SINTASSI"
+.PP
+
+\fI#include <shadow\&.h>\fR
+.PP
+
+\fIstruct spwd *getspent();\fR
+.PP
+
+\fIstruct spwd *getspnam(char\fR
+\fI*name\fR\fI);\fR
+.PP
+
+\fIvoid setspent();\fR
+.PP
+
+\fIvoid endspent();\fR
+.PP
+
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIFILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+
+\fIint lckpwdf();\fR
+.PP
+
+\fIint ulckpwdf();\fR
+.SH "DESCRIZIONE"
+.PP
+
+\fIshadow\fR
+manipulates the contents of the shadow password file,
+/etc/shadow\&. The structure in the
+\fI#include\fR
+file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+      char             *sp_namp; /* login dell\'utente */      char            *sp_pwdp; /* password cifrata */      long int          sp_lstchg; /* ultimo cambio della password */      long int             sp_min; /* giorni minimi tra i cambi */      long int           sp_max; /* giorni massimi tra i cambi */      long int          sp_warn; /* giorni di preavviso */      long int                sp_inact; /* giorni di inattivit\(`a */      long int           sp_expire; /* data di scadenza dell\'account */      unsigned long int  sp_flag; /* riservato per uso futuro */}
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Ciascun campo significa:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- puntatore a una stringa null\-terminated che contiene il nome utente\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- puntatore a una stringa null\-terminated che contiene la password\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- giorni a partire dal 1 gennaio 1970 in cui la password \(`e stata cambiata l\'ultima volta\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- giorni prima dei quali la password non pu\(`o essere cambiata\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- giorni dopo i quali la password deve essere cambiata\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- giorni prima della scadenza della password in cui l\'utente viene avvertito\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- giorni dopo la scadenza della password in cui l\'account viene considerato inattivo e disabilitato\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- giorni a partire dal 1 gennaio 1970 dopo i quali l\'account viene disabilitato\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- riservato per uso futuro\&.
+.RE
+.SH "DESCRIZIONE"
+.PP
+
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, and
+\fIsgetspent\fR
+each return a pointer to a
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+returns the next entry from the file, and
+\fIfgetspent\fR
+returns the next entry from the given stream, which is assumed to be a file of the proper format\&.
+\fIsgetspent\fR
+returns a pointer to a
+\fIstruct spwd\fR
+using the provided string as input\&.
+\fIgetspnam\fR
+searches from the current position in the file for an entry matching
+\fIname\fR\&.
+.PP
+\fIsetspent\fR
+e
+\fIendspent\fR
+sono usate rispettivamente per iniziare e terminare l\'accesso al file delle shadow password\&.
+.PP
+Le funzioni
+\fIlckpwdf\fR
+e
+\fIulckpwdf\fR
+si usano per garantire l\'accesso esclusivo al file
+/etc/shadow\&.
+\fIlckpwdf\fR
+prova ad acquisire il lock tramite
+\fIpw_lock\fR
+per un massimo di 15 secondi, dopodich\('e tenta di ottenere un secondo lock usando
+\fIspw_lock\fR
+per il tempo che rimane dei 15 secondi iniziali\&. Se anche uno solo dei due tentativi fallisce dopo un totale di 15 secondi,
+\fIlckpwdf\fR
+restituisce \-1, mentre restituisce 0 se riesce ad acquisire entrambi i lock\&.
+.SH "DIAGNOSTICA"
+.PP
+Le funzioni restituiscono NULL se non ci sono altre voci disponibili o se si verifica un errore durante l\'elaborazione\&. Le funzioni di tipo
+\fIint\fR
+restituiscono 0 in caso di successo e \-1 in caso di errore\&.
+.SH "AVVISI/CAVEAT"
+.PP
+These routines may only be used by the superuser as access to the shadow password file is restricted\&.
+.SH "FILE"
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/it/shadow.5 b/man/it/shadow.5
new file mode 100644 (file)
index 0000000..b7948a1
--- /dev/null
@@ -0,0 +1,141 @@
+'\" t
+.\"     Title: shadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: Italian
+.\"
+.TH "SHADOW" "5" "24/07/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+shadow \- shadowed password file
+.SH "DESCRIZIONE"
+.PP
+
+shadow
+is a file which contains the password information for the system\'s accounts and optional aging information\&.
+.PP
+This file must not be readable by regular users if password security is to be maintained\&.
+.PP
+Each line of this file contains 9 fields, separated by colons (\(Fo:\(Fc), in the following order:
+.PP
+\fBnome di login\fR
+.RS 4
+It must be a valid account name, which exist on the system\&.
+.RE
+.PP
+\fBencrypted password\fR
+.RS 4
+Fare riferimento a
+\fBcrypt\fR(3)
+per dettagli sul modo in cui questa stringa viene interpretata\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, the user will not be able to use a unix password to log in (but the user may log in the system by other means)\&.
+.sp
+This field may be empty, in which case no passwords are required to authenticate as the specified login name\&. However, some applications which read the
+/etc/shadow
+file may decide not to permit any access at all if the password field is empty\&.
+.sp
+A password field which starts with a exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.RE
+.PP
+\fBdate of last password change\fR
+.RS 4
+The date of the last password change, expressed as the number of days since Jan 1, 1970\&.
+.sp
+The value 0 has a special meaning, which is that the user should change her pasword the next time she will log in the system\&.
+.sp
+An empty field means that password aging features are disabled\&.
+.RE
+.PP
+\fBminimum password age\fR
+.RS 4
+The minimum password age is the number of days the user will have to wait before she will be allowed to change her password again\&.
+.sp
+An empty field and value 0 mean that there are no minimum password age\&.
+.RE
+.PP
+\fBmaximum password age\fR
+.RS 4
+The maximum password age is the number of days after which the user will have to change her password\&.
+.sp
+After this number of days is elapsed, the password may still be valid\&. The user should be asked to change her password the next time she will log in\&.
+.sp
+An empty field means that there are no maximum password age, no password warning period, and no password inactivity period (see below)\&.
+.sp
+If the maximum password age is lower than the minimum password age, the user cannot change her password\&.
+.RE
+.PP
+\fBpassword warning period\fR
+.RS 4
+The number of days before a password is going to expire (see the maximum password age above) during which the user should be warned\&.
+.sp
+An empty field and value 0 mean that there are no password warning period\&.
+.RE
+.PP
+\fBpassword inactivity period\fR
+.RS 4
+The number of days after a password has expired (see the maximum password age above) during which the password should still be accepted (and the user should update her password during the next login)\&.
+.sp
+After expiration of the password and this expiration period is elapsed, no login is possible using the current user\'s password\&. The user should contact her administrator\&.
+.sp
+An empty field means that there are no enforcement of an inactivity period\&.
+.RE
+.PP
+\fBaccount expiration date\fR
+.RS 4
+The date of expiration of the account, expressed as the number of days since Jan 1, 1970\&.
+.sp
+Note that an account expiration differs from a password expiration\&. In case of an acount expiration, the user shall not be allowed to login\&. In case of a password expiration, the user is not allowed to login using her password\&.
+.sp
+An empty field means that the account will never expire\&.
+.sp
+The value 0 should not be used as it is interpreted as either an account with no expiration, or as an expiration on Jan 1, 1970\&.
+.RE
+.PP
+\fBreserved field\fR
+.RS 4
+This field is reserved for future use\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.PP
+/etc/shadow\-
+.RS 4
+Backup file for /etc/shadow\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/it/su.1 b/man/it/su.1
new file mode 100644 (file)
index 0000000..5177cfb
--- /dev/null
@@ -0,0 +1,399 @@
+'\" t
+.\"     Title: su
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: Italian
+.\"
+.TH "SU" "1" "24/07/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+su \- change user ID or become superuser
+.SH "SINOSSI"
+.HP \w'\fBsu\fR\ 'u
+\fBsu\fR [\fIopzioni\fR] [\fIusername\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBsu\fR
+command is used to become another user during a login session\&. Invoked without a
+\fBusername\fR,
+\fBsu\fR
+defaults to becoming the superuser\&. The optional argument
+\fB\-\fR
+may be used to provide an environment similar to what the user would expect had the user logged in directly\&.
+.PP
+Dopo il nome utente, \(`e possibile specificare argomenti aggiuntivi da passare alla shell di login dell\'utente\&. In particolare, molti interpreti di comando adottano la convenzione per cui l\'opzione
+\fB\-c\fR
+seguita da un argomento fa s\(`i che quest\'ultimo sia considerato un comando\&.Il comando viene eseguito dalla shell specificata in
+/etc/passwd
+per l\'utente di destinazione\&.
+.PP
+You can use the
+\fB\-\-\fR
+argument to separate
+\fBsu\fR
+options from the arguments supplied to the shell\&.
+.PP
+All\'utente viene quindi chiesta la password, se necessario\&. Una password errata viene segnalata da un messaggio d\'errore\&. Viene effettuato il log di tutti i tentativi, siano essi riusciti o meno, al fine di rilevare ogni abuso del sistema\&.
+.PP
+The current environment is passed to the new shell\&. The value of
+\fB$PATH\fR
+is reset to
+/bin:/usr/bin
+for normal users, or
+/sbin:/bin:/usr/sbin:/usr/bin
+for the superuser\&. This may be changed with the
+\fBENV_PATH\fR
+and
+\fBENV_SUPATH\fR
+definitions in
+/etc/login\&.defs\&.
+.PP
+A subsystem login is indicated by the presence of a "*" as the first character of the login shell\&. The given home directory will be used as the root of a new file system which the user is actually logged into\&.
+.SH "OPZIONI"
+.PP
+Il comando
+\fBsu\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-c\fR, \fB\-\-command\fR \fICOMMAND\fR
+.RS 4
+Specify a command that will be invoked by the shell using its
+\fB\-c\fR\&.
+.RE
+.PP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+.RS 4
+Provide an environment similar to what the user would expect had the user logged in directly\&.
+.sp
+When
+\fB\-\fR
+is used, it must be specified as the last
+\fBsu\fR
+option\&. The other forms (\fB\-l\fR
+and
+\fB\-\-login\fR) do not have this restriction\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fISHELL\fR
+.RS 4
+The shell that will be invoked\&.
+.sp
+The invoked shell is chosen from (highest priority first):
+.PP
+.RS 4
+The shell specified with \-\-shell\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-preserve\-environment\fR
+is used, the shell specified by the
+\fB$SHELL\fR
+environment variable\&.
+.RE
+.PP
+.RS 4
+The shell indicated in the
+/etc/passwd
+entry for the target user\&.
+.RE
+.PP
+.RS 4
+/bin/sh
+if a shell could not be found by any above method\&.
+.RE
+.sp
+If the target user has a restricted shell (i\&.e\&. the shell field of this user\'s entry in
+/etc/passwd
+is not listed in
+/etc/shell), then the
+\fB\-\-shell\fR
+option or the
+\fB$SHELL\fR
+environment variable won\'t be taken into account, unless
+\fBsu\fR
+is called by root\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+.RS 4
+Preserve the current environment, except for:
+.PP
+\fB$PATH\fR
+.RS 4
+reset according to the
+/etc/login\&.defs
+options
+\fBENV_PATH\fR
+or
+\fBENV_SUPATH\fR
+(see below);
+.RE
+.PP
+\fB$IFS\fR
+.RS 4
+reset to
+\(Fo<space><tab><newline>\(Fc, if it was set\&.
+.RE
+.sp
+If the target user has a restricted shell, this option has no effect (unless
+\fBsu\fR
+is called by root)\&.
+.sp
+Note that the default behavior for the environment is the following:
+.PP
+.RS 4
+The
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$USER\fR,
+\fB$LOGNAME\fR,
+\fB$PATH\fR, and
+\fB$IFS\fR
+environment variables are reset\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is not used, the environment is copied, except for the variables above\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TERM\fR,
+\fB$COLORTERM\fR,
+\fB$DISPLAY\fR, and
+\fB$XAUTHORITY\fR
+environment variables are copied if they were set\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TZ\fR,
+\fB$HZ\fR, and
+\fB$MAIL\fR
+environment variables are set according to the
+/etc/login\&.defs
+options
+\fBENV_TZ\fR,
+\fBENV_HZ\fR,
+\fBMAIL_DIR\fR, and
+\fBMAIL_FILE\fR
+(see below)\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, other environment variables might be set by the
+\fBENVIRON_FILE\fR
+file (see below)\&.
+.RE
+.sp
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+Questa versione di
+\fBsu\fR
+ha molte opzioni di compilazione; solo una parte di esse potrebbe essere in uso su un determinato sistema\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+If defined, all su activity is logged to this file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\'t exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsg\fR(1),
+\fBsh\fR(1)\&.
diff --git a/man/it/useradd.8 b/man/it/useradd.8
new file mode 100644 (file)
index 0000000..a75a2c0
--- /dev/null
@@ -0,0 +1,646 @@
+'\" t
+.\"     Title: useradd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "USERADD" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+useradd \- crea un nuovo utente o aggiorna le informazioni predefinite per i nuovi utenti
+.SH "SINOSSI"
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR [\fIopzioni\fR] \fILOGIN\fR
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D [\fIopzioni\fR]
+.SH "DESCRIZIONE"
+.PP
+When invoked without the
+\fB\-D\fR
+option, the
+\fBuseradd\fR
+command creates a new user account using the values specified on the command line plus the default values from the system\&. Depending on command line options, the
+\fBuseradd\fR
+command will update system files and may also create the new user\'s home directory and copy initial files\&.
+.PP
+By default, a group will also be created for the new user (see
+\fB\-g\fR,
+\fB\-N\fR,
+\fB\-U\fR, and
+\fBUSERGROUPS_ENAB\fR)\&.
+.SH "OPZIONI"
+.PP
+Il comando
+\fBuseradd\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR \fIBASE_DIR\fR
+.RS 4
+The default base directory for the system if
+\fB\-d\fR
+\fIHOME_DIR\fR
+is not specified\&.
+\fIBASE_DIR\fR
+is concatenated with the account name to define the home directory\&. If the
+\fB\-m\fR
+option is not used,
+\fIBASE_DIR\fR
+must exist\&.
+.sp
+If this option is not specified,
+\fBuseradd\fR
+will use the base directory specified by the
+\fBHOME\fR
+variable in
+/etc/default/useradd, or
+/home
+by default\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR \fICOMMENT\fR
+.RS 4
+Any text string\&. It is generally a short description of the login, and is currently used as the field for the user\'s full name\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR \fIHOME_DIR\fR
+.RS 4
+The new user will be created using
+\fIHOME_DIR\fR
+as the value for the user\'s login directory\&. The default is to append the
+\fILOGIN\fR
+name to
+\fIBASE_DIR\fR
+and use that as the login directory name\&. The directory
+\fIHOME_DIR\fR
+does not have to exist but will not be created if it is missing\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-defaults\fR
+.RS 4
+See below, the subsection "Changing the default values"\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR \fIEXPIRE_DATE\fR
+.RS 4
+La data in cui l\'account dell\'utente verr\(`a disabilitato\&. La data \(`e specificata nel formato
+\fIMM/GG/AA\fR\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default expiry date specified by the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd, or an empty string (no expiry) by default\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR \fIINACTIVE\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&. A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default inactivity period specified by the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd, or \-1 by default\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGROUP\fR
+.RS 4
+Il nuome o numero del nuovo gruppo di connessione dell\'utente\&. Il nome del gruppo deve esistere\&. Un numero di gruppo deve riferirsi ad un gruppo gi\(`a esistente\&.
+.sp
+If not specified, the bahavior of
+\fBuseradd\fR
+will depend on the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&. If this variable is set to
+\fIyes\fR
+(or
+\fB\-U/\-\-user\-group\fR
+is specified on the command line), a group will be created for the user, with the same name as her loginname\&. If the variable is set to
+\fIno\fR
+(or
+\fB\-N/\-\-no\-user\-group\fR
+is specified on the command line), useradd will set the primary group of the new user to the value specified by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd, or 100 by default\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR \fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+Una lista di gruppi supplementari di cui l\'utente \(`e altres\(`i membro\&. Ciascun gruppo \(`e separato dal successivo da una virgola, senza spazi bianchi intermedi\&. I gruppi sono soggetti alle stesse restrizioni del gruppo dato con l\'opzione
+\fB\-g\fR\&. Il comportamento predefinito \(`e che l\'utente appartenga solo al gruppo iniziale\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-skel\fR \fISKEL_DIR\fR
+.RS 4
+The skeleton directory, which contains files and directories to be copied in the user\'s home directory, when the home directory is created by
+\fBuseradd\fR\&.
+.sp
+This option is only valid if the
+\fB\-m\fR
+(or
+\fB\-\-create\-home\fR) option is specified\&.
+.sp
+If this option is not set, the skeleton directory is defined by the
+\fBSKEL\fR
+variable in
+/etc/default/useradd
+or, by default,
+/etc/skel\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR \fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBUMASK\fR,
+\fBPASS_MAX_DAYS\fR
+and others)\&.
+
+Example:
+\fB\-K \fR\fIPASS_MAX_DAYS\fR=\fI\-1\fR
+can be used when creating system account to turn off password ageing, even though system account has no password at all\&. Multiple
+\fB\-K\fR
+options can be specified, e\&.g\&.:
+\fB\-K \fR
+\fIUID_MIN\fR=\fI100\fR
+\fB\-K \fR
+\fIUID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K \fR
+\fIUID_MIN\fR=\fI10\fR,\fIUID_MAX\fR=\fI499\fR
+doesn\'t work yet\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-no\-log\-init\fR
+.RS 4
+Do not add the user to the lastlog and faillog databases\&.
+.sp
+By default, the user\'s entries in the lastlog and faillog databases are resetted to avoid reusing the entry from a previously deleted user\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-create\-home\fR
+.RS 4
+Create the user\'s home directory if it does not exist\&. The files and directories contained in the skeleton directory (which can be defined with the
+\fB\-k\fR
+option) will be copied to the home directory\&.
+.sp
+By default, no home directories are created\&.
+.RE
+.PP
+\fB\-M\fR
+.RS 4
+Do no create the user\'s home directory, even if the system wide setting from
+/etc/login\&.defs
+(\fBCREATE_HOME\fR) is set to
+\fIyes\fR\&.
+.RE
+.PP
+\fB\-N\fR, \fB\-\-no\-user\-group\fR
+.RS 4
+Do not create a group with the same name as the user, but add the user to the group specified by the
+\fB\-g\fR
+option or by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Allow the creation of a user account with a duplicate (non\-unique) UID\&.
+.sp
+This option is only valid in combination with the
+\fB\-o\fR
+option\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR \fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system account\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are choosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+/etc/login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.sp
+Note that
+\fBuseradd\fR
+will not create a home directory for such an user, regardless of the default setting in
+/etc/login\&.defs
+(\fBCREATE_HOME\fR)\&. You have to specify the
+\fB\-m\fR
+options if you want a home directory for a system account to be created\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fISHELL\fR
+.RS 4
+The name of the user\'s login shell\&. The default is to leave this field blank, which causes the system to select the default login shell specified by the
+\fBSHELL\fR
+variable in
+/etc/default/useradd, or an empty string by default\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR \fIUID\fR
+.RS 4
+Il valore numerico dell\'identificatore (ID) del gruppo\&. Questo valore deve essere univoco, a meno che non venga usata l\'opzione
+\fB\-o\fR\&. Il valore deve essere non\-negativo\&. La scelta predefinita \(`e quella di usare il minimo valore di ID superiore a 999 e superiore a qualunque altro gruppo\&. Valori tra 0 e 999 sono tipicamente riservati per account di sistema\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-user\-group\fR
+.RS 4
+Create a group with the same name as the user, and add the user to this group\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR \fISEUSER\fR
+.RS 4
+The SELinux user for the user\'s login\&. The default is to leave this field blank, which causes the system to select the default SELinux user\&.
+.RE
+.SS "Cambiare i valori predefiniti"
+.PP
+When invoked with only the
+\fB\-D\fR
+option,
+\fBuseradd\fR
+will display the current default values\&. When invoked with
+\fB\-D\fR
+plus other options,
+\fBuseradd\fR
+will update the default values for the specified options\&. Valid default\-changing options are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR \fIBASE_DIR\fR
+.RS 4
+The path prefix for a new user\'s home directory\&. The user\'s name will be affixed to the end of
+\fIBASE_DIR\fR
+to form the new user\'s home directory name, if the
+\fB\-d\fR
+option is not used when creating a new account\&.
+.sp
+This option sets the
+\fBHOME\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR \fIEXPIRE_DATE\fR
+.RS 4
+La data in cui l\'account dell\'utente verr\(`a disabilitato\&.
+.sp
+This option sets the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR \fIINACTIVE\fR
+.RS 4
+Il numero di giorni dopo la scadenza di una password prima che l\'account venga disabilitato\&.
+.sp
+This option sets the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGROUP\fR
+.RS 4
+The group name or ID for a new user\'s initial group (when the
+\fB\-N/\-\-no\-user\-group\fR
+is used or when the
+\fBUSERGROUPS_ENAB\fR
+variable is set to
+\fIno\fR
+in
+/etc/login\&.defs\&. The named group must exist, and a numerical group ID must have an existing entry\&.
+.sp
+This option sets the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fISHELL\fR
+.RS 4
+The name of a new user\'s login shell\&.
+.sp
+This option sets the
+\fBSHELL\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.SH "NOTE"
+.PP
+The system administrator is responsible for placing the default user files in the
+/etc/skel/
+directory (or any other skeleton directory specified in
+/etc/default/useradd
+or on the command line)\&.
+.SH "AVVISI/CAVEAT"
+.PP
+You may not add a user to a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+Similarly, if the username already exists in an external user database such as NIS or LDAP,
+\fBuseradd\fR
+will deny the user account creation request\&.
+.PP
+Usernames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Usernames may only be up to 32 characters long\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indicate if a home directory should be created by default for new users\&.
+.sp
+This setting does not apply to system users, and can be overriden on the command line\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILE"
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/default/useradd
+.RS 4
+Default values for account creation\&.
+.RE
+.PP
+/etc/skel/
+.RS 4
+Directory contenente i file predefiniti\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBuseradd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+successo
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\'t update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+sintassi del comando errata
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+UID already in use (and no
+\fB\-o\fR)
+.RE
+.PP
+\fI6\fR
+.RS 4
+il gruppo specificato non esiste
+.RE
+.PP
+\fI9\fR
+.RS 4
+username already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+non \(`e possibile aggiornare il file group
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\'t create home directory
+.RE
+.PP
+\fI13\fR
+.RS 4
+can\'t create mail spool
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/it/userdel.8 b/man/it/userdel.8
new file mode 100644 (file)
index 0000000..753dd72
--- /dev/null
@@ -0,0 +1,267 @@
+'\" t
+.\"     Title: userdel
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "USERDEL" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+userdel \- Rimuove l\'account di un utente ed i file relativi
+.SH "SINOSSI"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [opzioni] \fILOGIN\fR
+.SH "DESCRIZIONE"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "OPZIONI"
+.PP
+Il comando
+\fBuserdel\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\'s home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+
+\fINote:\fR
+This option is dangerous and may leave your system in an inconsistent state\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+I file nella home directory dell\'utente verranno rimossi insieme alla home directory stessa\&. I file collocati in altri file system dovranno essere ricercati e rimossi manualmente\&.
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+If defined, this command is run when removing a user\&. It should remove any at/cron/print jobs etc\&. owned by the user to be removed (passed as the first argument)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\'s cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+       echo "Usage: $0 username"
+       exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+      
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.SH "VALORI RESTITUITI"
+.PP
+The
+\fBuserdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+successo
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\'t update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+sintassi del comando errata
+.RE
+.PP
+\fI6\fR
+.RS 4
+il gruppo specificato non esiste
+.RE
+.PP
+\fI8\fR
+.RS 4
+user currently logged in
+.RE
+.PP
+\fI10\fR
+.RS 4
+non \(`e possibile aggiornare il file group
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\'t remove home directory
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\'s password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this user\&.
+.PP
+Non \(`e possibile rimuovere nessun attributo NIS su un client NIS\&. Questo deve essere fatto sul server NIS\&.
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/it/usermod.8 b/man/it/usermod.8
new file mode 100644 (file)
index 0000000..6b7c054
--- /dev/null
@@ -0,0 +1,269 @@
+'\" t
+.\"     Title: usermod
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "USERMOD" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+usermod \- modifica l\'account di un utente
+.SH "SINOSSI"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fIopzioni\fR] \fILOGIN\fR
+.SH "DESCRIZIONE"
+.PP
+Il comando
+\fBusermod\fR
+modifica i file di account del sistema in modo da riflettere i cambiamenti che sono specificati sulla linea di comando\&.
+.SH "OPZIONI"
+.PP
+Il comando
+\fBusermod\fR
+accetta le seguenti opzioni:
+.PP
+\fB\-a\fR, \fB\-\-append\fR
+.RS 4
+Add the user to the supplementary group(s)\&. Use only with the
+\fB\-G\fR
+option\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR \fICOMMENT\fR
+.RS 4
+Il campo commento del nuovo utente nel file password\&. Normalmente viene modificato usando l\'utilit\(`a
+\fBchfn\fR(1)\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR \fIHOME_DIR\fR
+.RS 4
+The user\'s new login directory\&.
+.sp
+If the
+\fB\-m\fR
+option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR \fIEXPIRE_DATE\fR
+.RS 4
+La data in cui l\'account dell\'utente verr\(`a disabilitato\&. La data \(`e specificata nel formato
+\fIMM/GG/AA\fR\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR \fIINACTIVE\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&.
+.sp
+A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGROUP\fR
+.RS 4
+The group name or number of the user\'s new initial login group\&. The group must exist\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR \fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&.
+.sp
+If the user is currently a member of a group which is not listed, the user will be removed from the group\&. This behaviour can be changed via the
+\fB\-a\fR
+option, which appends the user to the current supplementary group list\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR \fINEW_LOGIN\fR
+.RS 4
+The name of the user will be changed from
+\fILOGIN\fR
+to
+\fINEW_LOGIN\fR\&. Nothing else is changed\&. In particular, the user\'s home directory name should probably be changed manually to reflect the new login name\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+Lock a user\'s password\&. This puts a \'!\' in front of the encrypted password, effectively disabling the password\&. You can\'t use this option with
+\fB\-p\fR
+or
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+Move the content of the user\'s home directory to the new location\&.
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-u\fR
+option, this option allows to change the user ID to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR \fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fISHELL\fR
+.RS 4
+Il nome della nuova shell di login dell\'utente\&. Lasciando questo campo vuoto si fa in modo che il sistema selezioni la shell di connessione predefinita\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR \fIUID\fR
+.RS 4
+The new numerical value of the user\'s ID\&.
+.sp
+This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. Values between 0 and 999 are typically reserved for system accounts\&.
+.sp
+The user\'s mailbox, and any files which the user owns and which are located in the user\'s home directory will have the file user ID changed automatically\&.
+.sp
+The ownership of files outside of the user\'s home directory must be fixed manually\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock a user\'s password\&. This removes the \'!\' in front of the encrypted password\&. You can\'t use this option with
+\fB\-p\fR
+or
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR \fISEUSER\fR
+.RS 4
+The SELinux user for the user\'s login\&. The default is to leave this field the blank, which causes the system to select the default SELinux user\&.
+.RE
+.SH "AVVISI/CAVEAT"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\'s numerical user ID, the user\'s name, or the user\'s home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux, but only check if the user is logged in according to utmp on other architectures\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+You must make any changes involving NIS on the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/it/vigr.8 b/man/it/vigr.8
new file mode 100644 (file)
index 0000000..ff72d7a
--- /dev/null
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/it/vipw.8 b/man/it/vipw.8
new file mode 100644 (file)
index 0000000..0163453
--- /dev/null
@@ -0,0 +1,104 @@
+'\" t
+.\"     Title: vipw
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24/07/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: Italian
+.\"
+.TH "VIPW" "8" "24/07/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NOME"
+vipw, vigr \- edit the password, group, shadow\-password or shadow\-group file
+.SH "SINOSSI"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIopzioni\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIopzioni\fR]
+.SH "DESCRIZIONE"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "OPZIONI"
+.PP
+The options which apply to the
+\fBvipw\fR
+and
+\fBvigr\fR
+commands are:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+Edit group database\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Mostra un messaggio di aiuto ed esce\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+Edit passwd database\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Quiet mode\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+Edit shadow or gshadow database\&.
+.RE
+.SH "FILE"
+.PP
+/etc/group
+.RS 4
+Informazioni sugli account di gruppo\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informazioni sicure sugli account di gruppo\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+informazioni sugli account utente\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informazioni sicure sugli account di utenti\&.
+.RE
+.SH "VEDERE ANCHE"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/ja/Makefile.am b/man/ja/Makefile.am
new file mode 100644 (file)
index 0000000..1cfd097
--- /dev/null
@@ -0,0 +1,55 @@
+
+mandir = @mandir@/ja
+
+man_MANS = \
+       chage.1 \
+       chfn.1 \
+       chpasswd.8 \
+       chsh.1 \
+       expiry.1 \
+       faillog.5 \
+       faillog.8 \
+       gpasswd.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       groups.1 \
+       grpck.8 \
+       grpconv.8 \
+       grpunconv.8 \
+       lastlog.8 \
+       login.1 \
+       login.defs.5 \
+       logoutd.8 \
+       newgrp.1 \
+       newusers.8 \
+       passwd.1 \
+       passwd.5 \
+       pwck.8 \
+       pwconv.8 \
+       pwunconv.8 \
+       sg.1 \
+       shadow.5 \
+       su.1 \
+       suauth.5 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8 \
+       vigr.8 \
+       vipw.8
+
+man_nopam = \
+       limits.5 \
+       login.access.5 \
+       porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_nopam) \
+       id.1 \
+       shadow.3 \
+       sulogin.8
diff --git a/man/ja/Makefile.in b/man/ja/Makefile.in
new file mode 100644 (file)
index 0000000..21e998b
--- /dev/null
@@ -0,0 +1,525 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+subdir = man/ja
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+       "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/ja
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = chage.1 chfn.1 chpasswd.8 chsh.1 expiry.1 faillog.5 \
+       faillog.8 gpasswd.1 groupadd.8 groupdel.8 groupmod.8 groups.1 \
+       grpck.8 grpconv.8 grpunconv.8 lastlog.8 login.1 login.defs.5 \
+       logoutd.8 newgrp.1 newusers.8 passwd.1 passwd.5 pwck.8 \
+       pwconv.8 pwunconv.8 sg.1 shadow.5 su.1 suauth.5 useradd.8 \
+       userdel.8 usermod.8 vigr.8 vipw.8 $(am__append_1)
+man_nopam = \
+       limits.5 \
+       login.access.5 \
+       porttime.5
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_nopam) \
+       id.1 \
+       shadow.3 \
+       sulogin.8
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/ja/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/ja/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man5 install-man8 install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/ja/chage.1 b/man/ja/chage.1
new file mode 100644 (file)
index 0000000..83fce46
--- /dev/null
@@ -0,0 +1,120 @@
+.\" $Id: chage.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1990 - 1994 Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH CHAGE 1
+.SH 名前
+chage \- ユーザパスワードの有効期限情報を変更する。
+.SH 書式
+.TP 6
+\fBchage\fR
+[\fB\-m\fR \fImindays\fR] [\fB\-M\fR \fImaxdays\fR]
+[\fB\-d\fR \fIlastday\fR] [\fB\-I\fR \fIinactive\fR]
+.br
+[\fB\-E\fR \fIexpiredate\fR] [\fB\-W\fR \fIwarndays\fR] \fIuser\fR
+.TP 6
+\fBchage\fR
+\fB\-l\fR \fIuser\fR
+.SH 説明
+\fBchage\fR は、
+パスワードを最後に更新してから、
+次に変更しなければならない期日までの日数を変更する。
+システムはこの情報を用いて、
+ユーザがいつパスワードを変更しなければならないかを決定する。
+\fBchage\fR コマンドを使えるのは root ユーザのみに限られている。
+ただし一般ユーザも \fB\-l\fR オプションを指定すればこのコマンドを利用でき、
+自分のパスワードまたはアカウントがいつ切れるかを知ることができる。
+.PP
+\fB\-m\fR オプションを指定した場合、
+\fImindays\fR の値はパスワード変更の間隔の最短日数になる。
+このフィールドをゼロとした時は、ユーザはいつでもパスワードを変更できる。
+.PP
+\fB\-M\fR オプションを指定すると、
+\fImaxdays\fR の値はパスワードが有効な最長日数となる。
+\fImaxdays\fR と \fIlastday\fR を足した値が現在の日付より小さい場合、
+ユーザはアカウントを使用する前にパスワードを変更しなければならない。
+\fB\-W\fR オプションを使えばこの期日がいつ来るかが分かるようにできる。
+この場合はユーザに事前に警告が与えられる。
+.PP
+\fB\-d\fR オプションを用いると、
+パスワードの最終更新日を設定できる。
+\fIlastday\fR の値は
+1970 年 1 月 1 日からパスワード最終更新日までの日数である。
+日付は YYYY\-MM\-DD という書式
+(もしくはあなたの地域でもっとよく用いられている書式)
+で指定する事もできる。
+.PP
+\fB\-E\fR オプションは、
+それ以降ユーザがアカウントにアクセスできなくなる日付を設定するのに用いられる。
+\fIexpiredate\fR は 1970 年 1 月 1 日から
+アカウントがロックされる日までの日数である。
+日付は YYYY\-MM\-DD という書式
+(もしくはあなたの地域でもっとよく用いられているもの)
+で指定することもできる。
+アカウントをロックされたユーザが再びそのシステムを使うには、
+システム管理者と連絡を取る必要がある。
+.PP
+\fB\-I\fR オプションは、
+パスワードの期限が切れてからアカウントがロックされるまでの
+放置日数を設定するために用いる。
+アカウントをロックされたユーザが再びそのシステムを使うためには、
+システム管理者に連絡しなければならない。
+\fIinactive\fR は使用不能期間の日数である。
+0 にすればこの機能を無効にできる。
+.PP
+\fB\-W\fR オプションは、
+パスワードの変更が必要となる前に警告を行う期間の日数を設定するために用いる。
+\fIwarndays\fR は、
+パスワードの期限切れに先だって、
+ユーザに期限が切れかかっていることを警告する日数である。
+.PP
+いずれのオプションも指定されないと
+\fBchage\fR は対話的に動作する。
+全てのフィールドに対して各々現在の設定値を表示し、
+新しい値の入力を促す。
+新しい値を設定する場合はそれを入力し、
+現在の値を使うなら空行のままリターンキーを押せばよい。
+現在の値は \fB[ ]\fR の間に表示される。
+.SH 注意
+\fBchage\fR プログラムを用いるには shadow パスワードファイルが必要である。
+この機能は、passwd ファイルにパスワードが保存されているときには
+利用できない。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- shadow 化されたユーザアカウント情報
+.SH 関連項目
+.BR passwd (5),
+.BR shadow (5)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/chfn.1 b/man/ja/chfn.1
new file mode 100644 (file)
index 0000000..315e743
--- /dev/null
@@ -0,0 +1,72 @@
+.\" $Id: chfn.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1990 - 1994 Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH CHFN 1
+.SH 名前
+chfn \- ユーザの氏名や情報を変更する。
+.SH 書式
+.TP 5
+\fBchfn\fR [\fB\-f\fR \fIfull_name\fR] [\fB\-r\fR \fIroom_no\fR]
+.br
+[\fB\-w\fR \fIwork_ph\fR] [\fB\-h\fR \fIhome_ph\fR] [\fB\-o\fR \fIother\fR]
+[\fIuser\fR]
+.SH 説明
+\fBchfn\fR は、ユーザのフルネーム・オフィスの部屋番号・内線番号・
+自宅の電話番号といったアカウント情報を変更する。
+この情報は \fBfinger\fR(1) のようなプログラムによって表示される。
+一般ユーザは自分自身のアカウント情報のみを変更できる。
+スーパーユーザは全てのアカウントに対して情報を変更できる。
+また \fB\-o\fR オプションを用いて
+GECOS 欄の未定義部分を変更できるのもスーパーユーザだけである。
+.PP
+各フィールドに書く内容に関する制限は、
+コントロール文字・コンマ・コロン・等号を含んでいてはならない、
+ということのみである。
+\fIother\fR 欄に対してはこの制限はないので、
+他のアプリケーションが用いるアカウンティング情報の記録に利用される。
+.PP
+いずれのオプションも指定されないと
+\fBchfn\fR は対話的に動作する。
+全ての欄に対して各々現在の設定値を表示し、新しい値の入力を促す。
+新しい値を設定する場合はそれを入力し、
+現在の値を使うなら空行のままリターンキーを押せばよい。
+現在の値は \fB[ ]\fR 記号の間に表示される。
+オプションを指定しなかった場合、
+chfn は現在のユーザアカウントに対して動作する。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.SH 関連項目
+.BR passwd (5)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/chpasswd.8 b/man/ja/chpasswd.8
new file mode 100644 (file)
index 0000000..33cbcc4
--- /dev/null
@@ -0,0 +1,70 @@
+.\"$Id: chpasswd.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated Wed Apr 26 18:06:10 JST 2000
+.\"         by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated & Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH CHPASSWD 8
+.SH 名前
+\fBchpasswd\fR \- パスワードファイルをバッチ処理で更新する
+.SH 書式
+\fBchpasswd\fR [\fB\-e\fR]
+.SH 説明
+\fBchpasswd\fR コマンドは
+標準入力からユーザ名とパスワードの組が記されているファイルを読み込み、
+その情報を用いて既存のユーザ群のパスワード情報を更新する。
+\-e オプションがない場合は、パスワードは平文とみなされる。
+\-e オプションがある場合は、パスワードは暗号化されているとみなされる。
+各行の書式は次の通り。
+.sp 1
+         \fIuser_name\fR:\fIpassword\fR
+.sp 1
+指定したユーザは既に存在していなければならない。
+与えられたパスワードは必要に応じて暗号化され、
+パスワードの有効期限がある場合はそれも更新される。
+.PP
+このコマンドは、同時に大量のアカウントを作成するような、
+大規模なシステム環境で用いるために作られた。
+.SH 警告
+.\" The \fBmkpasswd\fR command must be executed afterwards to update the
+.\" DBM password files.
+入力ファイルに暗号化されていないパスワードが記されている場合は、
+適切に保護しておかなければならない。
+.\" This command may be discarded in favor of the newusers(8) command.
+.SH 関連項目
+.\" mkpasswd(8), passwd(1), useradd(1)
+.BR passwd (1),
+.BR newusers (8),
+.BR useradd (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/chsh.1 b/man/ja/chsh.1
new file mode 100644 (file)
index 0000000..30de2ac
--- /dev/null
@@ -0,0 +1,72 @@
+.\"$Id: chsh.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1990, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH CHSH 1
+.SH 名前
+chsh \- ログインシェルを変更する
+.SH 書式
+.TP 5
+\fBchsh\fR
+[\fB\-s\fR \fIlogin_shell\fR] [\fIuser\fR]
+.SH 説明
+\fBchsh\fR はユーザのログインシェルを変更する。
+これによって、ユーザがログインして最初に実行されるコマンドが決まる。
+一般ユーザは自分のアカウントのログインシェルのみを変更できる。
+スーパーユーザは全てのアカウントのログインシェルを変更できる。
+.PP
+ログインシェルは、
+コマンド名が \fI/etc/shells\fR に記載されていればなんでも良い。
+スーパーユーザの場合はこの制限はなく、いかなる値でも指定できる。
+機能を制限されたログインシェルを用いているアカウントからは、
+ログインシェルを変更できないかもしれない。
+この理由から、
+\fB/bin/rsh\fR は \fI/etc/shells\fR には書かないほうが良い。
+誤って機能が制限されたシェルに変更してしまうと、
+ログインシェルを元のものに戻せなくなってしまうからである。
+.PP
+\fB\-s\fR オプションを指定しなかった場合は、
+\fBchsh\fR は対話的に動作する。
+ユーザの現在のログインシェルを表示し、新しい値の入力を促す。
+設定値を変更するなら新しい値を入力し、
+現在の値を使うなら空行のままリターンキーを押せばよい。
+現在のシェルは \fB[ ]\fR 記号の間に表示される。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shells\fR \- 指定できるログインシェルのリスト
+.SH 関連項目
+.BR chfn (1),
+.BR passwd (5)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/expiry.1 b/man/ja/expiry.1
new file mode 100644 (file)
index 0000000..88154e7
--- /dev/null
@@ -0,0 +1,53 @@
+.\" $Id: expiry.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1990 - 1994 Julianne Frances Haugh
+.\" All rights reserved.
+.\" Modified for expiry by Ben Collins <bcollins@debian.org>, 1999
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 2002 NAKANO Takeo all rights reserved.
+.\" Translated Sun 3 Mar 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH EXPIRY 1
+.SH 名前
+expiry \- パスワードの期限切れポリシーのチェックと執行
+.SH 書式
+.TP 6
+\fBexpiry\fR [\fB\-c\fR] [\fB\-f\fR]
+.SH 説明
+.B expiry
+は現在のパスワード期限切れ情報をチェック (\fB\-c\fR) し、
+必要な場合は変更を強制する (\fB\-f\fR)。
+このコマンドは通常のユーザコマンドとして呼び出し可能である。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- shadow 化されたユーザアカウント情報
+.SH 関連項目
+.BR passwd (5),
+.BR shadow (5)
+.SH 著者
+Ben Collins <bcollins@debian.org>
diff --git a/man/ja/faillog.5 b/man/ja/faillog.5
new file mode 100644 (file)
index 0000000..1f289ae
--- /dev/null
@@ -0,0 +1,64 @@
+.\"$Id: faillog.5 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 18 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH FAILLOG 5
+.SH 名前
+faillog \- ログイン失敗を記録するファイル
+.SH 説明
+.I faillog
+は個々のアカウントに対するログイン失敗回数とその限度を記録する。
+ファイルは固定長レコードであり、UID 番号でインデックス付けされている。
+各レコードには、最後にログインに成功して以降のログイン失敗回数、
+アカウントが使用不能となるまでに許されるログイン失敗回数、
+最後にログインに失敗したときの接続デバイス、
+最後にログインに失敗した日付、
+が記録されている。
+.PP
+このファイルの構造は以下の通り。
+.DS
+
+        struct faillog {
+                short   fail_cnt;
+                short   fail_max;
+                char    fail_line[12];
+                time_t  fail_time;
+        };
+
+.DE
+.SH ファイル
+\fI/var/log/faillog\fR \- ログイン失敗の記録
+.SH 関連項目
+.BR faillog (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/faillog.8 b/man/ja/faillog.8
new file mode 100644 (file)
index 0000000..0d3b7fd
--- /dev/null
@@ -0,0 +1,97 @@
+.\"$Id: faillog.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1989 \- 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH FAILLOG 8
+.SH 名前
+faillog \- faillog を調べ、login 失敗の制限を設定する
+.SH 書式
+\fBfaillog\fR [\fB\-u\fR \fIlogin\-name\fR] [\fB\-a\fR] [\fB\-t\fR \fIdays\fR]
+[\fB\-m\fR \fImax\fR] [\fB\-pr\fR] 
+.SH 説明
+\fBfaillog\fR はログインの失敗を記録するログファイル
+\fI/var/log/faillog\fR の内容を整形し、
+失敗の回数と制限値を記録・管理する。
+\fBfaillog\fR に与える引数の順序は重要であり、
+各引数は与えられた順に直ちに処理される。
+.PP
+\fB\-p\fR フラグを指定するとログイン失敗のエントリを UID 順に表示する。
+\fB\-u \fIlogin\-name\fR と入力すると、
+\fIlogin\-name\fR のログイン失敗記録のみを表示する。
+\fB\-t \fIdays\fR と入力すると、
+最近 \fIdays\fR 日以内のログイン失敗の記録を表示する。
+\fB\-u\fR フラグを指定すると \fB\-t\fR フラグは無視される。
+.\"nakano というのが実際の動作のような気がするのだけど...
+\fB\-a\fR フラグを用いると全ユーザに対する記録が表示される。
+このフラグを \fB\-p\fR フラグとともに用いると、
+これまでにログインに失敗した全てのユーザが表示される。
+\fB\-a\fR は \fB\-r\fR フラグと用いても意味が無い。
+.PP
+\fB\-r\fR フラグはログイン失敗回数の記録をリセットする。
+このオプションを用いるには
+\fI/var/log/faillog\fR への書き込み権限が必要である。
+\fB\-u \fIlogin\-name\fR と入力すると、
+\fIlogin\-name\fR のログイン失敗回数のみをリセットする。
+.PP
+\fB\-m\fR フラグは、
+アカウントが使用不能になるまでの最大のログイン失敗回数を設定する。
+このオプションを用いるには
+\fI/var/log/faillog\fR への書き込み権限が必要である。
+\fB\-m \fImax\fR と入力すると、
+全てのアカウントはログイン失敗回数が \fImax\fR になると使用不能になる。
+.\"nakano double meaning...
+\fB\-u \fIlogin\-name\fR を同時に用いると、
+この機能を \fIlogin\-name\fR だけに作用させることができる。
+\fImax\fR の値を 0 にするとログインの失敗回数には制限が無くなる。
+システムに対するサービス不能攻撃を防ぐため、
+\fBroot\fR の最大ログイン失敗回数は常に 0 にしておくべきである。
+.PP
+オプションはほぼどのように組み合わせても良い。
+\fB\-p\fR, \fB\-r\fR, \fB\-m\fR
+の各オプションは、
+\fB\-u\fR, \fB\-t\fR の指定による修正を受け、
+指定した順に実行される。
+.SH 警告
+\fBfaillog\fR は、
+最後に失敗して以降ログインに成功していないユーザのみを表示する。
+ログインに失敗した後に正しくログインできたユーザも表示させるには、
+\fB\-u\fR フラグを用いてそのユーザを明示的に指定するか、
+\fB\-a\fR フラグを用いて全ユーザを表示させなければならない。
+.SH ファイル
+\fI/var/log/faillog\fR \- 失敗を記録したファイル
+.SH 関連項目
+.BR login (1),
+.BR faillog (5)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/gpasswd.1 b/man/ja/gpasswd.1
new file mode 100644 (file)
index 0000000..fea9d1c
--- /dev/null
@@ -0,0 +1,70 @@
+.\"$Id: gpasswd.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1996, Rafal Maszkowski <rzm@pdi.net>
+.\" All rights reserved. You can redistribute this man page 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.
+.\"
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified 3 Mar 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH GPASSWD 1
+.SH 名前
+gpasswd \- /etc/groupファイルを管理する
+.SH 書式
+\fBgpasswd\fR \fIgroup\fR
+.br
+\fBgpasswd \-a\fR \fIuser\fR \fIgroup\fR
+.br
+\fBgpasswd \-d\fR \fIuser\fR \fIgroup\fR
+.br
+\fBgpasswd \-R\fR \fIgroup\fR
+.br
+\fBgpasswd \-r\fR \fIgroup\fR
+.br
+\fBgpasswd\fR [\fB\-A\fR \fIuser\fR,...] [\fB\-M\fR \fIuser\fR,...] \fIgroup\fR
+.SH 説明
+.B gpasswd
+は /etc/group ファイル
+(および SHADOWGRP を定義してコンパイルした時は /etc/gshadow ファイル)
+の管理に用いられる。
+各グループには、管理者・メンバー・パスワードを設定できる。
+システム管理者は、
+\fB\-A\fR オプションを使ってグループ管理者 (複数でも可) を定義したり、
+\fB\-M\fR オプションを使ってメンバーを定義したりでき、
+各グループの管理者・メンバーと同等の特権を持つ。
+.PP
+グループ管理者は、\fB\-a\fR オプションを用いてユーザを追加したり、
+\fB\-d\fR オプションを用いてユーザを削除したりできる。
+管理者は \fB\-r\fR オプションを用いてグループパスワードを削除できる。
+パスワードが設定されていない時は、
+グループのメンバーのみが
+.BR newgrp (1)
+を用いてグループの一員になれる。
+オプション \fB\-R\fR を指定すると、
+.BR newgrp (1)
+コマンドを用いたグループへのアクセスはできなくなる。
+.PP
+グループの管理者がグループ名のみを指定して
+.B gpasswd
+コマンドを実行した場合は、
+パスワードの入力を求められる。
+パスワードが設定されている場合でも、
+メンバーはパスワードなしで
+.BR newgrp (1)
+コマンドを使えるが、
+メンバーでない人はパスワードを入力しなくてはならない。
+.SH ファイル
+\fI/etc/group\fR \- グループ情報
+.br
+\fI/etc/gshadow\fR \- shadow されたグループ情報
+.SH 関連項目
+.BR newgrp (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR grpck (8)
+.SH 著者
+Rafal Maszkowski <rzm@pdi.net>
diff --git a/man/ja/groupadd.8 b/man/ja/groupadd.8
new file mode 100644 (file)
index 0000000..7d165e3
--- /dev/null
@@ -0,0 +1,68 @@
+.\"$Id: groupadd.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH GROUPADD 8
+.SH 名前
+groupadd \- 新しいグループを作成する
+.SH 書式
+\fBgroupadd\fR [\fB\-g\fR \fIgid \fR[\fB\-o\fR]] [\fB\-f\fR] \fIgroup\fR
+.SH 説明
+\fBgroupadd\fR コマンドは、
+コマンドライン上で指定された値と
+システムのデフォルト値とを用いて新しいグループを作成する。
+新しいグループが必要に応じてシステムファイルに記入される。
+\fBgroupadd\fR コマンドに指定できるオプションは次の通り。
+.IP "\fB\-g \fIgid\fR"
+新規グループの ID 番号。
+この値は、\fB\-o\fR オプションを用いる場合を除き、他と重複してはならない。
+また非負値でなければならない。
+デフォルトでは、99 および他のあらゆる既存グループの ID よりも大きい、
+最小の数値となる。
+0 から 999 までの値は、
+通常システム用のアカウントに予約されている。
+.SH ファイル
+\fI/etc/group\fR \- グループアカウント情報
+.br
+\fI/etc/gshadow\fR \- 安全なグループアカウント情報
+.SH 関連項目
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/groupdel.8 b/man/ja/groupdel.8
new file mode 100644 (file)
index 0000000..f19e551
--- /dev/null
@@ -0,0 +1,65 @@
+.\"$Id: groupdel.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 - 1993, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH GROUPDEL 8
+.SH 名前
+groupdel \- グループを削除する
+.SH 書式
+\fBgroupdel\fR \fIgroup\fR
+.SH 説明
+\fBgroupdel\fR コマンドは、システムアカウントファイルを修正し、
+グループ \fIgroup\fR に対応するすべてのエントリを削除する。
+指定されたグループは存在していなければならない。
+.PP
+全てのファイルシステムに、
+指定したグループの ID を持つファイルが残っていないことを、
+手作業で確認しなくてはならない。
+.SH 警告
+存在するユーザの主グループを削除してはならない。
+グループを削除する前にそのユーザを削除しなければならない。
+.SH ファイル
+\fI/etc/group\fR \- グループ情報
+.br
+\fI/etc/gshadow\fR \- 安全なグループ情報
+.SH 関連項目
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupmod (8),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/groupmod.8 b/man/ja/groupmod.8
new file mode 100644 (file)
index 0000000..52e2b2f
--- /dev/null
@@ -0,0 +1,70 @@
+.\"$Id: groupmod.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH GROUPMOD 8
+.SH 名前
+groupmod \- グループを修正する
+.SH 書式
+\fBgroupmod\fR [\fB\-g\fR \fIgid\fR [\fB\-o\fR]] [\fB\-n\fR \fIgroup_name\fR]
+\fIgroup\fR
+.SH 説明
+\fBgroupmod\fR コマンドは、
+コマンドラインからの指定によって、
+システムアカウントファイルを修正する。
+\fIgroupmod\fR コマンドに指定できるオプションは次の通り。
+.IP "\fB\-g \fIgid\fR"
+変更を受けるグループの ID 番号。
+この値は、\fB\-o\fR オプションを用いる場合を除き、他と重複してはならない。
+また非負値でなくてはならない。
+デフォルトは、999 および他のあらゆる既存グループの ID よりも大きい、
+最小の数値となる。
+変更前のグループ ID を持つ全てのファイルは、
+手作業で新しいグループ ID へと変更しなければならない。
+.IP "\fB\-n \fIgroup_name\fR"
+グループの名前が \fIgroup\fR から \fIgroup_name\fR に変更される。
+.SH ファイル
+\fI/etc/group\fR \- グループ情報
+.br
+\fR/etc/gshadow\I \- 安全なグループ情報
+.SH 関連項目
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/groups.1 b/man/ja/groups.1
new file mode 100644 (file)
index 0000000..e4d4aaa
--- /dev/null
@@ -0,0 +1,65 @@
+.\"$Id: groups.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 2001 Maki KURODA
+.\"     all right reserved,
+.\" Translated Tue Oct 30 11:58:18 JST 2001
+.\" by Maki KURODA <mkuroda@aisys\-jp.com>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.\"WORD:       concurrent group set    同時所属グループ集合
+.\"WORD:       real group ID           実グループ ID
+.\"WORD:       effective group ID      実効グループ ID
+.\"
+.TH GROUPS 1
+.SH 名前
+groups \- 現在のグループ名の表示
+.SH 書式
+\fBgroups\fR [\fIuser\fR]
+.SH 説明
+.B groups
+は現在のグループの名前または ID 値を表示する。
+ID 値に対応する名前が \fI/etc/group\fR に登録されていなければ、
+数値のグループ ID で表示される。
+パラメータとして \fIuser\fR を与えると、
+指定した \fIuser\fR が所属するグループ名を表示する。
+.SH 注意
+同時所属グループ集合 (concurrent group set)
+をサポートしていないシステムでは、
+\fI/etc/group\fR の情報が報告される。
+ユーザが現在の実グループ ID や実効グループ ID を変更するには、
+\fBnewgrp\fR や \fBsg\fR を使用しなければならない。
+.SH ファイル
+/etc/group \- グループ情報
+.SH 関連項目
+.BR newgrp (1),
+.BR getuid (2),
+.BR getgid (2),
+.BR getgroups (2)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/grpck.8 b/man/ja/grpck.8
new file mode 100644 (file)
index 0000000..fb20eb3
--- /dev/null
@@ -0,0 +1,116 @@
+.\"$Id: grpck.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1992 - 1993, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH GRPCK 8
+.SH 名前
+grpck \- グループファイルが正しいかどうか検査する
+.SH 書式
+\fBgrpck\fR [\fB\-r\fR] [\fIgroup\fR \fIshadow\fR]
+.SH 説明
+\fBgrpck\fR コマンドはシステムの認証情報が正しいかどうか検査する。
+\fI/etc/group\fR と \fI/etc/gshadow\fR
+各ファイルの全てのエントリに対し、
+各フィールドの書式が正しいか、
+そのデータが有効なものかどうかを検証する。
+書式が正しくないエントリや、
+修正不能な誤りを含むエントリは削除するようプロンプトを出す。
+.P
+各々のエントリに対して
+.sp
+.in +.5i
+\- フィールドの数が正しいか
+.br
+\- グループ名に重複がないか
+.br
+\- メンバーのリストと管理者のリストが正しいか
+.in -.5i
+.sp
+がチェックされる。
+.P
+フィールドの数が間違っていたり、
+グループ名が重複しているのは致命的なエラーである。
+フィールドの数が正しくない場合、
+ユーザーはそのエントリ行を削除するよう促される。
+削除に同意しなかった場合は、それ以降のチェックは行われない。
+重複したグループ名があった場合も削除を促されるが、
+この場合は削除しなくてもそれ以降のチェックは続行される。
+他の全てのエラーに対しては警告がなされる。
+\fBgroupmod\fR コマンドを実行してそのエラーを修正すると良いだろう。
+.P
+\fI/etc/group\fR ファイルを操作するコマンドは、
+壊れたエントリや重複したエントリを変更できない。
+そのような際に誤りのあるエントリを削除するには
+\fBgrpck\fR を用いるとよい。
+.SH オプション
+デフォルトでは \fBgrpck\fR は \fI/etc/group\fR ファイルと
+\fI/etc/gshadow\fR に対して動作する。
+\fIgroup\fR パラメータと \fIshadow\fR パラメータを用いて、
+別のファイルを選択することもできる。
+さらに \fB\-r\fR フラグを指定すれば、
+リードオンリーモードでコマンドを実行することもできる。
+この場合、変更を行うかどうかはユーザへ問い合わされず、
+自動的に \fBno\fR と回答される。
+.B grpck
+は
+\fI/etc/group\fR と \fI/etc/gshadow\fR
+のエントリを GID でソートすることもできる。
+ソートモードで動作させるには \fB\-s\fR フラグを与える。
+この場合チェックは行われず、単にソートするだけである。
+.SH ファイル
+\fI/etc/group\fR \  \- グループアカウント情報
+.br
+\fI/etc/gshadow\fR \- 暗号化されたパスワードとグループ管理者情報
+.br
+\fI/etc/passwd\fR \ \- ユーザー情報
+.SH 関連項目
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5),
+.BR groupmod (8)
+.SH 返り値
+\fBgrpck\fR コマンドは終了時に以下の値を返す:
+.IP 0 5
+成功
+.IP 1 5
+構文エラー
+.IP 2 5
+誤ったグループエントリが存在する
+.IP 3 5
+グループファイルをオープンできない
+.IP 4 5
+グループファイルをロックできない
+.IP 5 5
+グループファイルを更新できない
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/grpconv.8 b/man/ja/grpconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ja/grpunconv.8 b/man/ja/grpunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ja/id.1 b/man/ja/id.1
new file mode 100644 (file)
index 0000000..dfa0621
--- /dev/null
@@ -0,0 +1,57 @@
+.\"$Id: id.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 2000 ISHIKAWA Keisuke
+.\"         all rights reserved.
+.\" Translated Thu Nov  9 23:17:10 JST 2000
+.\"         by ISHIKAWA Keisuke
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH ID 1
+.SH 名前
+id \- 現在のユーザ ID 名とグループ ID 名を表示する
+.SH 書式
+\fBid\fR [\fB\-a\fR]
+.SH 説明
+\fBid\fRは、現在の実ユーザ ID、実効ユーザ ID、実グループ ID、
+実効グループ ID の名前または値を表示する。
+値に対応するエントリが \fI/etc/passwd\fR や
+\fI/etc/group\fR に存在しない場合は、
+対応する名前は表示されずに値だけが表示される。
+ユーザが同時に複数のグループのメンバーになれるシステムでは、
+\fB\-a\fR オプションを指定するとグループの集合が表示される。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザーアカウント情報
+.br
+\fI/etc/group\fR \ \- グループ情報
+.SH 関連項目
+.BR getgid (2),
+.BR getgroups (2),
+.BR getuid (2)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/lastlog.8 b/man/ja/lastlog.8
new file mode 100644 (file)
index 0000000..a694625
--- /dev/null
@@ -0,0 +1,80 @@
+.\"$Id: lastlog.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1992, Phillip Street and Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"    @(#)lastlog.8   3.3     08:24:58        29 Sep 1993 (National Guard Release)
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified Thu Oct 14 1997 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Updated Fri Jan 12 2001 by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Mon Mar  4 2002 by kentaro Shirakata <argrath@ub32.org>
+.\" Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH LASTLOG 8
+.SH 名前
+lastlog \- lastlog ファイルを調べる
+.SH 書式
+.TP 8
+\fBlastlog\fR [(\fB\-u\fR|\fB\-\-user\fR) \fIlogin\fR]
+[(\fB\-t\fR|\fB\-\-time\fR) \fIdays\fR] [(\fB\-h\fR|\fB\-\-help\fR)]
+.SH 説明
+\fBlastlog\fR は最終ログインの記録ファイル
+\fI/var/log/lastlog\fR の内容を整形して表示する。
+\fBログイン名\fR・\fBポート\fR・\fB最終ログイン時刻\fR、が表示される。
+オプションを指定しなかった場合、デフォルトでは
+lastlog エントリを UID の数値でソートして表示する。
+.TP
+\fB\-u\fR, \fB\-\-user\fR \fIlogin\-name\fR
+\fIlogin\-name\fR の記録だけを表示する。
+.TP
+\fB\-t\fR, \fB\-\-time\fR \fIdays\fR
+最近 \fIdays\fR 日以内の最終ログインを表示する。
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+オンラインヘルプを表示して終了する。
+.PP
+\fB\-u\fR フラグを用いると \fB\-t\fR は無視される。
+.\"nakano というのが実際の動作のように見えるのだが。
+.PP
+一度もログインしていないユーザに対しては、
+ポートと時刻の代わりに
+\fB"**Never logged in**"\fR
+というメッセージが表示される。
+.SH ファイル
+\fI/var/log/lastlog\fR \- lastlog 記録ファイル
+.SH 警告
+UID 番号に大きな飛びがあると、
+lastlog プログラムは長時間画面に何も出力しないまま
+実行を続ける (例えば mmdf が 800 で最後の UID が 170 の場合、
+UID が 171\-799 の間プログラムは何も出力しないので、
+ハングしたように見える)。
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
+.BR
+Phillip Street
diff --git a/man/ja/limits.5 b/man/ja/limits.5
new file mode 100644 (file)
index 0000000..1006ab0
--- /dev/null
@@ -0,0 +1,89 @@
+.\"$Id: limits.5 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.\" Japanese Version Copyright (c) 2001 Maki KURODA
+.\"     all right reserved,
+.\" Translated Mon Nov  5 18:12:16 JST 2001
+.\" by Maki KURODA <mkuroda@aisys-jp.com>
+.\" Modified Tue 18 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH LIMITS 5
+.SH 名前
+limits \- リソース制限の定義
+.SH 説明
+.I limits
+ファイル (デフォルトでは /etc/limits。
+あるいは config.h で定義した LIMITS_FILE)
+には、設定したいリソース制限を記述する。
+このファイルは root が所有し、
+root アカウントのみが読み込み可能とするべきである.
+.PP
+デフォルトでは root に対する制限は設定できない。
+実は、root と同等のアカウント (UID 0 のアカウント)
+をこの手段によって制限することはできない。
+.PP
+各行には以下の形式でユーザに対する制限を記述する。
+.sp
+.I     user LIMITS_STRING
+.PP
+\fBLIMITS_STRING\fP はリソース制限の定義を連結させた文字列である。
+各制限の定義は、1 文字の識別子と、それに続く制限数値からなる。
+.PP
+有効な識別子は以下の通り。
+.sp
+A: アドレス空間の最大値 (KB)
+.br
+C: コアファイルサイズの最大値 (KB)
+.br
+D: データサイズの最大値 (KB)
+.br
+F: ファイルサイズの最大値 (KB)
+.br
+M: メモリ上にロックできるアドレス空間の最大値 (KB)
+.br
+N: ファイルオープン数の最大値
+.br
+R: レジデントセットサイズの最大値 (KB)
+.br
+S: スタックサイズの最大値 (KB)
+.br
+T: CPU 時間の最大値 (分)
+.br
+U: プロセス数の最大値
+.br
+K: \fBumask\fR(2) により設定される、ファイル作成時の mask
+.br
+L: このユーザの同時ログイン数の最大値
+.br
+P: \fBsetpriority\fR(2) によって設定されるプロセス優先度
+.PP
+例えば、\fIL2D2048N5\fP は正しい \fBLIMITS_STRING\fP である。
+以下の 2 つの例は等価である。2 番目のように読み易く書くこともできる。
+.sp
+username L2D2048N5
+.br
+username L2 D2048 N5
+.PP
+\fIusername\fP 以降の行の残りが制限用の文字列として扱われるので、
+コメントは書くことができない。
+login プログラムは、正しくない制限文字列は拒絶する (無視する)。
+.PP
+デフォルトのエントリは、ユーザ名が "\fB*\fP" となっているものである。
+\fBLIMITS_FILE\fP に複数の\fIデフォルト\fPを登録すると、
+最後のものがデフォルト指定として使用される。
+.PP
+あるユーザへの制限を完全に無効にするには、
+シングルダッシュ "\fB\-\fP" を使用する。
+.PP
+さらに、全ての制限の設定は「ログイン単位」で設定されていることに注意すること。
+制限はグローバルではなく、永続的でもない。
+グローバルな制限はいずれ可能になるだろうが、
+今のところは「TO DO」である。;)
+.\"nakano 二番目の文これでいいのかなあ。
+.SH ファイル
+\fI/etc/limits\fR
+.SH 関連項目
+.BR login (1),
+.BR setpriority (2),
+.BR setrlimit (2)
+.SH 著者
+Cristian Gafton (gafton@sorosis.ro)
diff --git a/man/ja/login.1 b/man/ja/login.1
new file mode 100644 (file)
index 0000000..53c92a1
--- /dev/null
@@ -0,0 +1,141 @@
+.\" $Id: login.1 2456 2008-11-23 00:16:53Z nekral-guest $\r
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.TH LOGIN 1
+.SH 名前
+login \- システム上でセッションを開く
+.SH 書式
+\fBlogin\fR [\fB\-p\fR] [\fIusername\fR] [\fIENV=VAR\fR ...]
+.br
+\fBlogin\fR [\fB\-p\fR] [\fB\-h\fR \fIhost\fR] [\fB\-f\fR \fIusername\fR]
+.br
+\fBlogin\fR [\fB\-p\fR] \fB\-r\fR \fIhost\fR
+.SH 説明
+.B login
+はシステムに新たにセッションを開くために用いられる。
+通常は、ユーザの端末に表示される
+.I login:
+というプロンプトに応じる事によって自動的に起動される。
+.B login
+はシェル専用のものであり、
+サブプロセスとして起動することはできない。
+通常シェルは
+.B login
+を
+\fBexec login\fR とみなすので、ユーザは現在のシェルから抜けることになる。
+ログインシェル以外から \fBlogin\fR を起動しようとすると、
+エラーメッセージが表示される。
+.PP
+次いで、必要な場合には、ユーザはパスワードを入力するよう促される。
+パスワードを表示してしまわないよう、エコーは行われない。
+数回以上パスワード入力に失敗すると
+\fBlogin\fR は終了し、通信の接続は切断されてしまう。
+.PP
+アカウントに対してパスワードの有効期限が設定されている場合は、
+先に進む前に新しいパスワードの設定を促されることもある。
+セッションを続けるためには古いパスワードと
+新しいパスワードを入力しなくてはならない。
+詳しい情報は \fBpasswd\fR(1) を参照すること。
+.PP
+ログインに成功すると、システムメッセージやメールの有無が表示される。
+ログインディレクトリに長さ 0 のファイル \fI.hushlogin\fR を作っておけば、
+システムメッセージファイルである
+\fI/etc/motd\fR の表示を無効にできる。
+メールに関するメッセージは、メールボックスの状態によって
+"\fBYou have new mail.\fR",
+"\fBYou have mail.\fR",
+"\fBNo Mail.\fR"
+のいずれかになる。
+.PP
+ユーザ ID とグループの ID は
+\fI/etc/passwd\fR ファイル中に記載されている値に従って設定される。
+\fB$HOME\fR, \fB$SHELL\fR, \fB$PATH\fR, \fB$LOGNAME\fR, \fB$MAIL\fR
+の値は、パスワードエントリのそれぞれのフィールドに従って設定される。
+ulimit, umask, nice 値が、
+GECOS フィールドのエントリーによって設定されることもある。
+.PP
+インストール時の設定によっては、
+\fI/etc/ttytype\fR の指定に従って、
+環境変数\fB$TERM\fRが tty 接続の端末の型 (terminal type)
+に初期化されることもある。
+.PP
+コマンドインタプリタの初期化スクリプトが実行されることもある。
+この機能についての詳しい情報は適当なマニュアルセクションを参照のこと。
+.PP
+サブシステムログインでは、
+ログインシェルの最初の文字に "*" を置く。
+渡されたホームディレクトリは、
+ユーザが実際にログインする新しいファイルシステムのルートとして扱われる。
+.SH オプション
+.TP
+.B \-p
+環境を保存する。
+.TP
+.B \-f
+ユーザはすでに認証されているものとして、認証動作を行なわない。
+.TP
+.B \-h
+このログインのリモートホストの名前。
+.TP
+.B \-r
+rlogin の自動ログインプロトコルを実行する。
+.PP
+\fB\-r\fP, \fB\-h\fP, \fB\-f\fP オプションは、
+root が \fBlogin\fP を起動した場合にのみ用いる。
+.SH 警告
+この版の \fBlogin\fR には多くのコンパイル時オプションがあるが、
+サイトによってはこのうちの一部しか使われていないかもしれない。
+.PP
+システム設定の違いによって上記ファイルの置き場所は変わる。
+.SH ファイル
+\fI/var/run/utmp\fR            \- 現在のログインセッションのリスト
+.br
+\fI/var/log/wtmp\fR            \- 過去のログインセッションのリスト
+.br
+\fI/etc/passwd\fR              \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR              \- 暗号化パスワードと有効期限情報
+.br
+\fI/etc/motd\fR                        \- システムメッセージファイル
+.br
+\fI/etc/nologin\fR             \- root 以外のユーザのログインを禁止する
+.br
+\fI/etc/ttytype\fR             \- 端末の型のリスト
+.br
+\fI$HOME/.hushlogin\fR \- システムメッセージの表示を抑制する
+.SH 関連項目
+.BR mail (1),
+.BR passwd (1),
+.BR sh (1),
+.BR su (1),
+.\" .BR d_passwd (5),
+.BR login.defs (5),
+.BR nologin (5),
+.BR passwd (5),
+.BR getty (8)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/login.access.5 b/man/ja/login.access.5
new file mode 100644 (file)
index 0000000..bd1a6bc
--- /dev/null
@@ -0,0 +1,69 @@
+.\"$Id: login.access.5 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" this is comment
+.\"
+.\" This page is originally in the shadow package.
+.\" Translated Fri 14 Feb 1997
+.\"   by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 18 Sep 2002 by NAKNAO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH LOGIN.ACCESS 5
+.\" .Dt SKEY.ACCESS 5
+.\" .Os FreeBSD 1.2
+.SH 名前
+login.access \- ログインアクセスの制御表
+.SH 説明
+.I login.access
+ファイルには、ログインを許可または拒絶する、
+(ユーザ, ホスト) や (ユーザ, tty) の組み合わせを指定する。
+.PP
+誰かがログインすると、
+.I login.access
+ファイルがスキャンされ、最初にマッチする
+(ユーザ,ホスト) の組、
+あるいはネットワーク経由のログインでない場合は最初にマッチする
+(ユーザ, tty) の組を探す。
+このテーブルの許可フィールドによって、
+ログインが許可されるか拒絶されるかが決まる。
+.PP
+ログインアクセス制御表の各行は 3 つのフィールドからなり、
+文字 ":" で分割される。
+.sp 1
+.IR    permission : users : origins
+.sp 1
+最初のフィールドは "\fB+\fR" (アクセスを許可する) か
+"\fB\-\fR" (アクセスを拒否する) でなければならない。
+二番目のフィールドは、一つ以上のログイン名やグループ名、
+もしくは
+.B ALL
+(必ずマッチする)
+でなければならない。
+三番目のフィールドは、
+tty 名 (ネットワーク経由でないログインの場合)、
+ホスト名、
+ドメイン名 ("\fB.\fR"で始まる)、
+ホストアドレス、
+インターネットのネットワーク番号 ("\fB.\fR"で終わる)、
+のひとつ以上の構成要素からなるリストであるか、
+.B ALL
+(必ずマッチする) または
+.B LOCAL
+("\fB.\fR"を全く含まない文字列全てにマッチする)
+のいずれかでなくてはならない。
+NIS を運用している場合は、ホストやユーザのパターンで
+@netgroupname が使える。
+.PP
+.B EXCEPT
+オペレータを用いると、
+非常に簡略にルールを指定できる。
+.PP
+group ファイルが検索されるのは、
+ログインするユーザ名が名前にマッチしなかった場合に限られる。
+マッチするグループは、
+group ファイル中でユーザ名が明示的にリストされているものに限られる。
+このプログラムはユーザの主グループの ID 番号までは見ない。
+.SH ファイル
+\fI/etc/login.access\fR
+.SH 関連項目
+.BR login (1)
+.SH 著者
+Guido van Rooij
diff --git a/man/ja/login.defs.5 b/man/ja/login.defs.5
new file mode 100644 (file)
index 0000000..9434de1
--- /dev/null
@@ -0,0 +1,193 @@
+.\" Copyright 1991 - 1993, Julianne Frances Haugh and Chip Rosenthal
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: login.defs.5 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated Wed Apr 26 17:22:36 JST 2000
+.\"         by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Sat Jan 13 09:24:04 JST 2001
+.\"         by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Tue 18 Sep 2002 by NAKNAO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.\" WORD: shadow login suite   shadow ログイン機能
+.TH LOGIN.DEFS 5
+.SH 名前
+/etc/login.defs \- shadow パスワード機能の設定
+.SH 説明
+.I /etc/login.defs
+ファイルは shadow ログイン機能に対するサイト固有の設定を定義する。
+このファイルは必ず存在しなければならない。
+このファイルが無くてもシステム運用は可能であるが、
+おそらく望まない結果となるだろう。
+.PP
+このファイルは読み取り可能なテキストファイルで、
+ファイル中の一行につき一つの設定パラメータを設定している。
+各行では、設定パラメータの名前とその値が空白で区切られて示される。
+空行とコメント行は無視される。
+コメント行は `#' 記号で始まる。
+記号`#'はその行での空白以外の最初の文字でなければならない。
+.PP
+パラメータ値は四つの型を取ることができる。
+文字列・ブール型・数値・倍精度数値、である。
+文字列には全ての印字可能文字を使える。
+ブール型パラメータの値は ``yes'' か ``no'' のいずれかでなければならない。
+値の指定されていないブール型パラメータや、
+``yes'', ``no'' 以外が指定されたブール型パラメータの値は ``no''とされる。
+(単精度および倍精度) 数値は、
+10 進数、
+(数値の前に ``0'' を付けた) 8 進数、
+(数値の前に ``0x'' を付けた) 16 進数のいずれかで指定する。
+単精度・倍精度数値パラメータの最大値は計算機に依存する。
+.PP
+以下に示すような設定項目がある:
+.\"
+.IP "CHFN_AUTH (ブール値)"
+もし
+.I yes
+なら、
+.BR chfn ", " chsh
+両プログラムは、スーパーユーザが起動したのでない限り
+何らかの変更を行なう前にパスワードを尋ねる。
+.\"
+.IP "CHFN_RESTRICT (文字列)"
+このパラメータは
+.I passwd
+ファイルの
+.I gecos
+フィールドのうち、
+一般ユーザが
+.B chfn
+を使って変更できるフィールドを指定する。
+指定する文字列は
+.IR f ,
+.IR r ,
+.IR w ,
+.I h
+各文字の任意の組み合わせで、それぞれフルネーム、部屋番号、
+職場電話番号、自宅電話番号を意味する。
+指定されなかった場合は、スーパーユーザだけが全ての項目を変更できる。
+最も制限をきつくしたい場合は、
+chfn を SUID ではインストールしなければよい。
+.\"
+.IP "GID_MAX (数値)"
+.IP "GID_MIN (数値)"
+.B useradd
+プログラムおよび
+.B groupadd
+プログラムがグループ ID を選択する時の範囲。
+.\"
+.IP "MAIL_DIR (文字列)"
+メールスプールディレクトリ。
+あるユーザアカウントが修正・削除された際に、
+そのユーザのメールボックスに対する作業のために必要となる。
+指定されないと、コンパイル時のデフォルト値が用いられる。
+.\"
+.IP "PASS_MAX_DAYS (数値)"
+一つのパスワードを使える最長日数。
+パスワードがこの日数よりも古い場合は、変更するよう強制される。
+指定されていない場合は \-1 となる (この制限機能を無効にする)。
+.IP "PASS_MIN_DAYS (数値)"
+パスワードを変更してから次に変更できるようになるまでの最短日数。
+この日数が経たないうちにパスワードを変更しようとしても拒否される。
+指定されていない場合は \-1 となる (この制限機能を無効にする)。
+.IP "PASS_WARN_AGE (数値)"
+パスワードの有効期限が来る前に警告を発する期間の日数。
+ゼロにしておくと、期限切れの当日にのみ警告を行い、
+負の数を指定した場合は一切警告を行わない。
+指定されていない場合は警告を行わない。
+.PP
+PASS_MAX_DAYS, PASS_MIN_DAYS, PASS_WARN_AGE
+はアカウントを作るときにだけ利用される。
+これらの設定を変更しても、既存のアカウントには影響しない。
+.\"
+.IP "UID_MAX (数値)"
+.IP "UID_MIN (数値)"
+.B useradd
+プログラムがユーザ ID を選択する時の範囲。
+.\"
+.IP "UMASK (数値)"
+許可属性マスクをこの値に初期化する。
+指定されていない場合は、許可属性マスクは 077 に初期化される。
+.\"
+.IP "USERDEL_CMD (文字列)"
+定義されていると、ユーザを削除するときにこのコマンドが実行される。
+削除されるユーザ (最初の引き数に渡される) の at/cron/print
+ジョブなどを削除するコマンドにしておくとよい。
+.\"
+.SH 参照表
+以下の参照表は、
+shadow パスワード機能のどのプログラムが
+どのパラメータを使用するかを示したものである。
+.na
+.IP chfn 12
+CHFN_AUTH CHFN_RESTRICT
+.IP chsh 12
+CHFN_AUTH
+.IP groupadd 12
+GID_MAX GID_MIN
+.IP newusers 12
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+UMASK
+.IP pwconv 12
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.IP useradd 12
+GID_MAX GID_MIN
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+UID_MAX UID_MIN
+UMASK
+.IP userdel 12
+MAIL_DIR
+USERDEL_CMD
+.IP usermod 12
+MAIL_DIR
+.ad
+.SH バグ
+shadow パスワード機能によって提供されてきた機能の大部分は、
+現在は PAM によって処理されている。
+したがって、
+.BR login (1),
+.BR passwd (1),
+.BR su (1)
+などのプログラムは、もはや
+\fI/etc/login.defs\fR
+を用いない。
+対応する PAM の設定ファイルを調べるようにしてほしい。
+.SH 関連項目
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR passwd (5),
+.BR shadow (5),
+.BR pam (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
+.br
+Chip Rosenthal (chip@unicom.com)
diff --git a/man/ja/logoutd.8 b/man/ja/logoutd.8
new file mode 100644 (file)
index 0000000..d7b01be
--- /dev/null
@@ -0,0 +1,55 @@
+.\"$Id: logoutd.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Sat 21 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH LOGOUTD 8
+.SH 名前
+logoutd \- ログイン時間の制限を実施する
+.SH 書式
+\fBlogoutd\fR
+.SH 説明
+\fBlogoutd\fR は \fI/etc/porttime\fR
+に記されているログイン時間・ポートに対する制限を実施する。
+.B logoutd
+は \fI/etc/rc\fR によって起動されるようにする。
+\fI/etc/utmp\fR ファイルが定期的にスキャンされ、
+ログインしている各ユーザが
+\fI/etc/porttime\fR 中でのそのユーザの許可
+(ポートと時刻) に反していないか調べる。
+\fI/etc/porttime\fR の制限に反するログインセッションは終了させられる。
+.SH ファイル
+/etc/porttime \- ログインとポートの許可
+.br
+/etc/utmp \- 現在のログインセッション
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/newgrp.1 b/man/ja/newgrp.1
new file mode 100644 (file)
index 0000000..a414e64
--- /dev/null
@@ -0,0 +1,92 @@
+.\"$Id: newgrp.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated & Modified Sun 3 Mar 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH NEWGRP 1
+.SH 名前
+newgrp \- 新しいグループにログインする
+.br
+sg \- 別のグループ ID でコマンドを実行する
+.SH 書式
+\fBnewgrp\fR [\fB\-\fR] [\fIgroup\fR]
+.br
+\fBsg\fR [\fB\-\fR] [\fIgroup\fR [[\fB\-c\fR] \fIcommand\fR]]
+.SH 説明
+.B newgrp
+はログインセッション中に現在のグループ ID を変更するために用いられる。
+オプションとして \fB\-\fR フラグを与えた場合は、
+新たにログインしたのと同じ様に環境が再初期化される。
+そうでない場合は、現在の作業ディレクトリを含めて、
+現在の環境は変化しない。
+.PP
+.B newgrp
+は現在の実グループ ID を、指定したグループに
+(グループ名を指定しなかった場合は \fI/etc/passwd\fR
+に記載されたデフォルトのグループに) 変更する。
+ユーザにはパスワードがなくグループにはある場合、
+あるいはユーザがグループのメンバーではなく
+グループにパスワードがある場合には、
+そのユーザはパスワードの入力を求められる。
+グループのパスワードが設定されておらず、
+かつユーザがグループのメンバーでない場合は、
+アクセスは拒否される。
+.PP
+.B sg
+コマンドは
+.B newgrp
+と同様に動作するが、コマンドを受け付ける。
+このコマンドは \fB/bin/sh\fR シェルで実行される。
+コマンドが複数の単語からなる場合は、
+sg の実行元となるであろうシェルのほとんどにおいて、
+これらをクォートする必要があるだろう。
+.BR newgrp " と " sg
+のもう一つの違いは、
+特定のシェルが \fBnewgrp\fR を特別に扱う点にある。
+このようなシェルは、自分自身を
+.B newgrp
+が生成した新しい実体と置き換える。このようなことは
+.B sg
+では起きないので、
+.B sg
+コマンドから戻った際には以前のグループ ID に戻る。
+.SH ファイル
+\fI/etc/passwd\fR      \- ユーザアカウント情報
+.br
+\fI/etc/group\fR       \- グループ情報
+.SH 関連項目
+.BR id (1),
+.BR login (1),
+.BR su (1)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/newusers.8 b/man/ja/newusers.8
new file mode 100644 (file)
index 0000000..39a1e31
--- /dev/null
@@ -0,0 +1,71 @@
+.\"$Id: newusers.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1996 HANATAKA Shinya
+.\"         all rights reserved.
+.\" Translated Wed Nov 20 17:42:39 JST 1996
+.\"         by HANATAKA Shinya
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH NEWUSERS 8
+.SH 名前
+newusers \- ユーザの新規作成や情報更新をバッチ処理で行う
+.SH 書式
+\fBnewusers\fR [\fInew_users\fR]
+.SH 説明
+\fBnewusers\fR はユーザ名と平文パスワードとの組を記したファイルを読み、
+その情報をもとに既存のユーザ情報の変更や新規ユーザの作成を行う。
+このファイルの書式は、
+下記の点を除き標準的なパスワードファイル
+(\fBpasswd\fR(5) 参照) と同じである。
+.IP "\fIpw_passwd\fR" 10
+このフィールドが暗号化され、新しい暗号化パスワードとなる。
+.IP "\fIpw_age\fR"
+このフィールドは shadow ファイル向けの情報であるが、
+ユーザがすでに存在する場合は無視される。
+.IP "\fIpw_gid\fR"
+このフィールドに既存のグループを指定した場合は、
+ユーザはそのグループに加えられる。
+存在しないグループ ID を指定した場合は、
+そのグループ ID で新たなグループが作成される。
+.IP "\fIpw_dir\fR"
+このフィールドで指定したディレクトリがすでに存在するかチェックし、
+もし存在しなければ新たにディレクトリが作られる。
+このディレクトリの所有者は、
+新規作成されたユーザ、あるいは情報が変更されたユーザとなる。
+.PP
+このコマンドは、同時に大量のアカウントを作成するような、
+大規模なシステム環境で用いるために作られた。
+.SH 警告
+入力ファイルには暗号化されていないパスワードが含まれるため、
+適切に保護しておかなければならない。
+.SH 関連項目
+.BR passwd (1),
+.BR useradd (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/passwd.1 b/man/ja/passwd.1
new file mode 100644 (file)
index 0000000..c58a47b
--- /dev/null
@@ -0,0 +1,217 @@
+.\" $Id: passwd.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1989 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated 2 Mar 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH PASSWD 1
+.SH 名前
+passwd \- ユーザパスワードを変更する
+.SH 書式
+\fBpasswd\fR [\fB\-f\fR|\fB\-s\fR] [\fIname\fR]
+.br
+\fBpasswd\fR [\fB\-g\fR] [\fB\-r\fR|\fB\-R\fR] \fIgroup\fR
+.br
+\fBpasswd\fR [\fB\-x\fR \fImax\fR] [\fB\-n\fR \fImin\fR]
+[\fB\-w\fR \fIwarn\fR] [\fB\-i\fR \fIinact\fR] \fIlogin\fR
+.br
+\fBpasswd\fR {\fB\-l\fR|\fB\-u\fR|\fB\-d\fR|\fB\-S\fR|\fB\-e\fR} \fIlogin\fR
+.SH 説明
+\fBpasswd\fR はユーザアカウント・グループアカウントのパスワードを変更する。
+一般ユーザは自分のアカウントのパスワードしか変更できない。
+スーパーユーザはいかなるアカウントのパスワードも変更できる。
+グループの管理者はグループのパスワードを変更できる。
+\fBpasswd\fR によって、ユーザのフルネーム・ログインシェル・
+パスワードの期限切れの日付・
+有効期間といったアカウント情報を変更することもできる。
+.PP
+.B \-s
+オプションを指定すると
+.BR passwd " は " chsh
+を呼び出してユーザのシェルを変更する。
+.B \-f
+オプションを指定すると
+.BR passwd " は " chfn
+を呼び出してユーザの GECOS 情報を変更する。
+これらの 2 つのオプションは互換性のためだけにある。
+chsh や chfn を直接呼び出しても構わない。
+.SS パスワードの変更
+パスワードが既にある場合は、まず古いパスワードを入力するよう促される。
+入力されたパスワードは暗号化され、記録されているものと照合される。
+正しいパスワードを 1 回で入力しなくてはならない。
+スーパーユーザは、パスワードを忘れてしまった際の変更も行なえる様に、
+このステップを省略できる。
+.PP
+パスワードが入力された後、パスワード有効期限の情報を調べ、
+現在パスワードの変更が許されているか検査する。
+もし許可されていない場合は、
+\fBpasswd\fR は変更を拒否して終了する。
+.PP
+次にユーザは、置き換えるパスワードを入力するよう促される。
+入力されたパスワードは、充分複雑かどうか検査される。
+一般的な指針としては、
+パスワードは以下の集合それぞれから一つ以上の文字を使った
+6 から 8 文字のものにすべきである。
+.IP "" .5i
+小文字のアルファベット
+.IP "" .5i
+大文字のアルファベット
+.IP "" .5i
+0 から 9 までの数字
+.IP "" .5i
+句読点
+.PP
+システムのデフォルトの消去文字や
+kill 文字を含めないように注意すること。
+\fBpasswd\fR はあまりに単純なパスワードへの変更は拒否する。
+.PP
+入力したパスワードが受け入れられた場合、
+\fBpasswd\fR はもう一度入力を促し、
+二番目に入力したものを最初のものと比較する。
+パスワード変更が受け入れられるためには、
+この両者が合致しなくてはならない。
+.SS グループパスワード
+\fB\-g\fR オプションを用いた場合、
+指定したグループのパスワードが変更される。
+このオプションはスーパーユーザか指定したグループの管理者しか使えない。
+現在のグループパスワードは尋ねてこない。
+\fB\-g\fR オプションを \fB\-r\fR オプションとともに用いると、
+指定したグループのパスワードが削除される。
+こうすると全てのメンバーがこのグループにアクセスできるようになる。
+\fB\-R\fR オプションを \fB\-g\fR オプションとともに用いると、
+全てのユーザに対して指定したグループへのアクセスを禁止できる。
+.SS パスワードの有効期限情報
+スーパーユーザは、パスワードの有効期限に関する情報を変更できる。
+これには \fB\-x\fR, \fB\-n\fR, \fB\-w\fR, \fB\-i\fR などのオプションを用いる。
+\fB\-x\fR オプションはパスワードが有効な最長日数を設定するのに用いられる。
+\fImax\fR 日が過ぎるとパスワードを変更するように求められる。
+\fB\-n\fR オプションはパスワードが変更可能となるまでの
+最短日数を設定するのに用いられる。
+ユーザは \fImin\fR 日が経過した後でないとパスワードを変更できない。
+\fB\-w\fR オプションはパスワードの使用期限が来る前に
+何日間警告を与えるかを設定するために用いられる。
+期限切れの \fIwarn\fR 日前から注意が開始され、
+パスワードが期限切れになるまであと何日残っているかが示される。
+\fB\-i\fR オプションは、
+パスワードの期限が切れてから何日間経過したら、
+そのアカウントを使用不能の状態にするかを設定するのに用いる。
+\fIinact\fR 日間アカウントをパスワード期限切れ状態のままにすると、
+ユーザはそのアカウントに入れなくなる。
+.PP
+あるアカウントのパスワードを直ちに期限切れにしたい場合は、
+\fB\-e\fR オプションを用いればよい。
+するとそのユーザは次にログインする際にパスワードを変更するよう強制される。
+\fB\-d\fR オプションを使って、ユーザのパスワードを削除することもできる
+(パスワードが空になる)。このオプションは注意して使うこと。
+これを使うと、そのアカウントはログインにパスワードを全く必要としなくなり、
+システムが侵入者に対してオープンになってしまう。
+.SS アカウントの保守
+\fB\-l\fR フラグと \fB\-u\fR フラグを用いると、
+ユーザアカウントをロックしたり、そのロックを外したりできる。
+\fB\-l\fR オプションを用いると、
+パスワードフィールドの値は暗号化された如何なる値ともマッチしなくなり、
+アカウントは使用不能になる。
+\fB\-u\fR オプションを用いると、パスワードは以前の値に戻り、
+アカウントが再び使用可能となる。
+.PP
+\fB\-S\fR オプションを用いるとアカウントの状態が表示される。
+アカウントの状態の情報は 6 つの部分からなる。
+最初の部分は、アカウントにロックがかけられている (L)、
+パスワードが存在しない (NP)、
+もしくは使用可能なパスワードがある (P) といった情報を示す。
+2 番目は最後にパスワードが変更された日付を示す。
+残りの4つの部分はそれぞれパスワードの最短期限、最長期限、警告期間、
+使用不能期間である。
+.SS ユーザパスワードに対するヒント
+パスワードの安全性は暗号化アルゴリズムの強力さとキー空間の大きさに依存する。
+\fB\s-2UNIX\s+2\fR のシステム暗号化の方法は
+NBS DES アルゴリズムに基づいており、非常に安全性が高い。
+キー空間の大きさは選ばれたパスワードのランダムさに依存する。
+.PP
+パスワードの安全性が脅かされるのは、
+大抵の場合パスワードの選択や扱いが不注意なためである。
+従ってパスワードとしては、
+辞書に載っているものや書き留めなければならないものは
+避けるべきである。
+また、固有名詞・免許証番号・誕生日・自宅の住所などを
+パスワードにするのも避けるべきである。
+これらはいずれもシステムセキュリティを破る際に、
+推量情報に用いられる可能性があるからである。
+.PP
+パスワードは紙片に書き留めておく必要が無いよう、
+簡単に思い出せるものにしなくてはならない。
+これは例えば、
+短い二つの単語をくっつけて、
+その間に特殊記号や数字を挟み込むことによって作れる。
+例えば Pass%word など。
+.PP
+他の作り方としては、文学作品などから思い出しやすい句を選び出し、
+それぞれの単語から最初もしくは最後の文字を抜き出す方法がある。
+この方法の例としては、
+.IP "" .5i
+Ask not for whom the bell tolls.
+.PP
+という句から
+.IP "" .5i
+An4wtbt.
+というパスワードが作り出せる。
+.PP
+クラッカーの辞書には、
+こんな語句は載っていなさそうだ、とみなしても良いだろう。
+しかし、ここに示した方法だけに頼るのではなく、
+自分独自のパスワードの作り方を考え出すべきである。
+.SS グループのパスワードに関する注意
+グループパスワードは、一人以上の人間が知ることが許されるものであるから、
+本質的にセキュリティ上の問題を抱えている。
+しかしグループを使えば別々の人間が共同で作業する事ができるので、
+これは便利なツールではある。
+.SH 警告
+全てのオプションが使えるようには設定されていないかもしれない。
+パスワードの複雑さの検証はサイトによって異なるだろう。
+ユーザはシステムが満足するような、
+充分複雑なパスワードを選ぶよう強制される。
+NIS が動作していて、
+かつ NIS サーバ以外にログインしているユーザは、
+パスワードを変更できない。
+(訳注: この場合
+.BR yppasswd (8)
+を用いる。)
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 暗号化されたユーザパスワード
+.SH 関連項目
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/passwd.5 b/man/ja/passwd.5
new file mode 100644 (file)
index 0000000..39536a9
--- /dev/null
@@ -0,0 +1,113 @@
+.\"$Id: passwd.5 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 18 Sep 2002 by NAKNAO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH PASSWD 5
+.SH 名前
+passwd \- パスワードファイル
+.SH 説明
+.I passwd
+ファイルには各ユーザアカウントの様々な情報が記録されている。
+書かれているのは次の通り。
+.IP "" .5i
+ログイン名
+.IP "" .5i
+暗号化されたパスワード (無いこともある)
+.IP "" .5i
+ユーザ ID 番号
+.IP "" .5i
+グループ ID 番号
+.IP "" .5i
+ユーザ名またはコメントのフィールド
+.IP "" .5i
+ユーザのホームディレクトリ
+.IP "" .5i
+ユーザのコマンドインタプリタ
+.PP
+パスワードが shadow 化されている場合は、
+パスワードフィールドを埋めてはならない。
+shadow パスワードを用いている場合、暗号化されたパスワードは
+\fI/etc/shadow\fR に書かれている。
+暗号化されたパスワードは、
+アルファベット a から z、A から Z、0 から 9、\. と / の
+64 文字から作られた 13 文字からなる。
+この文字列がどのように解釈されるかの詳細は
+\fBcrypt\fR(3) を参照のこと。
+.PP
+オプションとして、パスワードの後に、
+コンマに続いてパスワードの有効期限文字列が記されていることもある。
+この文字列はパスワードと同じ文字セットからなる。
+最初の文字は、パスワードが何週間有効かを示す。
+二番目の文字は、何週間経てばユーザがパスワードを変更できるかを示す。
+最後の二文字は、
+最後にパスワードを変更したのが
+1970 年 1 月から何週間経過した時点であるかを表す。
+パスワードの有効期限が過ぎた時は、
+ユーザは新しいパスワードを設定しなければならない。
+.PP
+コメントフィールドは
+\fBfinger\fR(1) のような様々なシステムユーティリティから利用される。
+コメントフィールドには、追加情報として、
+次のような 3 つの数値が記入されていることもある。
+.IP "" .5i
+pri= \- nice の初期設定値
+.IP "" .5i
+umask= \- umask の初期設定値
+.IP "" .5i
+ulimit= \- ulimit の初期設定値
+.PP
+これらのフィールドは互いに、また他のコメントフィールドと、
+コンマを用いて分離される。
+.PP
+ホームディレクトリフィールドは、
+初期作業ディレクトリの名前を与える。
+\fBlogin\fR はこの情報を用いて環境変数 \fBHOME\fR の内容を設定する。
+.PP
+コマンドインタプリタのフィールドには、
+ユーザのコマンド言語インタプリタか、
+最初に実行するプログラムの名前を記す。
+\fBlogin\fR はこの情報を用いて環境変数 \fBSHELL\fR の内容を設定する。
+このフィールドに何も記されていない場合は、
+デフォルト値として \fB/bin/sh\fR を使用する。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.SH 関連項目
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR shadow (5),
+.BR pwconv (8),
+.BR pwunconv (8),
+.BR sulogin (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/porttime.5 b/man/ja/porttime.5
new file mode 100644 (file)
index 0000000..8ac926d
--- /dev/null
@@ -0,0 +1,93 @@
+.\" $Id: porttime.5 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 18 Sep 2002 by NAKNAO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH PORTTIME 5
+.SH 名前
+porttime \- ポートアクセス時間設定ファイル
+.SH 説明
+.I porttime
+は tty デバイス・ユーザ名・ログイン可能時間、のリストからなる。
+.PP
+それぞれのエントリは、コロンで区切られた三つのフィールドからなる。
+最初のフィールドはコンマで区切られた tty デバイスのリストで、
+アスタリスクを指定した場合はあらゆる tty デバイスにマッチする。
+二番目のフィールドはコンマで区切られたユーザ名のリストで、
+アスタリスクを指定した場合はあらゆるユーザにマッチする。
+三番目のフィールドは、
+コンマで区切られたログインを許可時間のリストである。
+.PP
+アクセス時間の各エントリは、
+\fBSu\fR, \fBMo\fR, \fBTu\fR, \fBWe\fR, \fBTh\fR, \fBFr\fR, \fBSa\fR
+で略記されたゼロ個以上の曜日と、
+ハイフンで区切られた 2 つの時刻とからなる。
+月曜日から金曜日までを指定する \fBWk\fR や、
+全ての日を指定する \fBAl\fR という略記法を用いることもできる。
+曜日の指定が無い場合は \fBAl\fR だとみなされる。
+.SH 例
+次のエントリは、ユーザ \fBjfh\fR が平日の午前9時から午後5時まで、
+全てのポートからアクセス可能であることを示す。
+.br
+.sp 1
+       *:jfh:Wk0900\-1700
+.br
+.sp 1
+次のエントリは、
+\fBroot\fR と \fBoper\fR 以外のユーザには、どの時間帯にも
+/dev/console からのアクセスを許可しない。
+この例は、\fI/etc/porttime\fR
+ファイルがアクセス可能時間のリストを
+どういう順序で扱うかも示している。
+他の全てのユーザは二番目のエントリにマッチし、
+したがって console からのアクセスは許可されない。
+.br
+.sp 1
+       console:root,oper:Al0000\-2400
+.br
+       console:*:
+.br
+.sp 1
+次のエントリは、
+ユーザ \fBgames\fR が、就業時間外なら
+あらゆるポートからアクセスできるように指定している。
+.br
+.sp 1
+       *:games:Wk1700\-0900,SaSu0000\-2400
+.br
+.sp 1
+.SH ファイル
+\fI/etc/porttime\fR \- ポートへのアクセス可能時間を記したファイル
+.SH 関連項目
+.BR login (1)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/pwck.8 b/man/ja/pwck.8
new file mode 100644 (file)
index 0000000..1394f28
--- /dev/null
@@ -0,0 +1,121 @@
+.\"$Id: pwck.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1992, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated  Sun 3 Mar 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo
+.\"
+.TH PWCK 8
+.SH 名前
+pwck \- パスワードファイルが正しいかどうか検査する
+.SH 書式
+\fBpwck\fR [\fB\-sr\fR] [\fIpasswd\fR \fIshadow\fR]
+.SH 説明
+\fBpwck\fR コマンドはシステムの認証情報が正しいかどうか検査する。
+\fI/etc/passwd\fR と \fI/etc/shadow\fR
+各ファイルのすべてのエントリに対し、
+各フィールドの書式が正しいか、
+そのデータが有効なものかどうかを検証する。
+書式が正しくないエントリや、
+修正不能な誤りを含むエントリは削除するようプロンプトを出す。
+.P
+各々のエントリに対して
+.sp
+.in +.5i
+\- フィールドの数が正しいか
+.br
+\- ユーザ名に重複がないか
+.br
+\- ユーザやグループの ID が正しいか
+.br
+\- プライマリグループが正しいか
+.br
+\- ホームディレクトリが正しいか
+.br
+\- ログインシェルが正しいか
+.in -.5i
+.sp
+がチェックされる。
+.P
+フィールドの数が間違っていたり、
+グループ名が重複しているのは致命的なエラーである。
+フィールドの数が正しくない場合、
+ユーザーはそのエントリ行を削除するよう促される。
+削除に同意しなかった場合は、それ以降のチェックは行われない。
+重複したグループ名があった場合も削除を促されるが、
+この場合は削除しなくてもそれ以降のチェックは続行される。
+他のすべてのエラーに対しては警告がなされる。
+\fBusermod\fR コマンドを実行してそのエラーを修正すると良いだろう。
+.P
+\fI/etc/passwd\fR ファイルを操作するコマンドは、
+壊れたエントリや重複したエントリを変更できない。
+そのような際に誤りのあるエントリを削除するには
+\fBpwck\fR を用いるとよい。
+.SH オプション
+デフォルトでは \fBpwck\fR は \fI/etc/passwd\fR ファイルと
+\fI/etc/shadow\fR に対して動作する。
+\fIpasswd\fR パラメータと \fIshadow\fR パラメータを用いて、
+別のファイルを選択することもできる。
+さらに \fB\-r\fR フラグを指定すれば、
+リードオンリーモードでコマンドを実行することもできる。
+この場合、変更を行うかどうかはユーザへ問い合わされず、
+自動的に \fBno\fR と回答される。
+\fBpwck\fR は \fI/etc/passwd\fR と \fI/etc/shadow\fR
+のエントリを UID でソートすることもできる。
+ソートモードで動作させるには \fB\-s\fR フラグを与える。
+この場合チェックは行われず、単にソートするだけである。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザーアカウント情報
+.br
+\fI/etc/shadow\fR \- 暗号化されたパスワード情報
+.br
+\fI/etc/group\fR \ \- グループ情報
+.SH 関連項目
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5),
+.BR usermod (8)
+.SH 返り値
+\fBpwck\fR コマンドは以下の値を返して終了する:
+.IP 0 5
+成功
+.IP 1 5
+構文エラー
+.IP 2 5
+誤ったパスワードエントリーが存在する
+.IP 3 5
+パスワードファイルをオープンできない
+.IP 4 5
+パスワードファイルをロックできない
+.IP 5 5
+パスワードファイルを更新出来ない
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/pwconv.8 b/man/ja/pwconv.8
new file mode 100644 (file)
index 0000000..a4b82fe
--- /dev/null
@@ -0,0 +1,80 @@
+.\"$Id: pwconv.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.\" Japanese Version Copyright (c) 2001 Yuichi SATO
+.\"         all rights reserved.
+.\" Translated Sat Dec  1 20:09:17 JST 2001
+.\"         by Yuichi SATO <ysato@h4.dion.ne.jp>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH PWCONV 8 "26 Sep 1997"
+.SH 名前
+pwconv, pwunconv, grpconv, grpunconv \- パスワード・グループの shadow 化と、通常ファイルへの逆変換
+.SH 書式
+.B pwconv
+.br
+.B pwunconv
+.br
+.B grpconv
+.br
+.B grpunconv
+.SH 説明
+これら 4 つのプログラムは、
+通常のパスワードファイル・グループファイルと、
+shadow 化されたパスワードファイル・グループファイルである
+\fI/etc/passwd\fR ", " \fI/etc/group\fR ", " \fI/etc/shadow\fR ", " \fI/etc/gshadow\fR
+を操作する。
+
+\fBpwconv\fR は \fIpasswd\fR から \fIshadow\fR を作成する
+(すでに存在する場合は \fIshadow\fR の情報も用いる)。
+\fBpwunconv\fR は \fIpasswd\fR と \fIshadow\fR から
+\fIpasswd\fR を作成し、\fIshadow\fR を削除する。
+\fBgrpconv\fR は \fIgroup\fR から \fIgshadow\fR を作成する
+(すでに存在する場合は \fIgshadow\fR の情報も用いる)。
+\fBgrpunconv\fR は \fIgroup\fR と \fIgshadow\fR から
+\fIgroup\fR を作成し、\fIgshadow\fR を削除する。
+
+各プログラムは変換前に、必要なロックを要求する。
+
+.B pwconv 
+と
+.B grpconv
+とは以下の点で類似している。
+まず、shadow 化ファイルにあるエントリのうち、
+通常ファイルにないものは、削除される。
+また、shadow 化ファイルにあるエントリのうち、
+通常ファイルでパスワードが `x' になっていないものは、更新される。
+最後に、通常ファイルに書かれたパスワードは `x' に置き換えられる。
+これらのプログラムは、初めて変換を行うときにも、
+また通常のファイルを手動で編集した際に、
+shadow 化ファイルを更新するときにも利用できる。
+
+\fI/etc/shadow\fR に新しいエントリを追加するとき、
+\fBpwconv\fR は \fI/etc/login.defs\fR
+の
+.BR PASS_MIN_DAYS ", " PASS_MAX_DAYS ", " PASS_WARN_AGE
+の値を使う。
+
+同じように、
+\fBpwunconv\fR と \fBgrpunconv\fR
+とは以下の点で類似している。
+通常ファイルのパスワードは、
+shadow 化ファイルのもので更新される。
+通常ファイルにあるエントリは、
+shadow 化ファイルにはそのエントリがなくても、
+そのまま置かれ続ける。
+最後に、 shadow 化ファイルは削除される。
+
+パスワードの有効期限情報の一部は、
+.B pwunconv 
+によって失われる。変換できるものは変換される。
+.SH バグ
+(不正なエントリや重複したエントリといった)
+エラーがパスワードファイルやグループファイルにあると、
+プログラムは永遠にループしたり、おかしな形で失敗するかもしれない。
+shadow パスワード・グループへの変換や
+shadow 化ファイルからの逆変換を行う前に、
+\fBpwck\fR と \fBgrpck\fR を実行してエラーを修正すること。
+.SH 関連項目
+.BR login.defs (5),
+.BR grpck (8),
+.BR pwck (8)
diff --git a/man/ja/pwunconv.8 b/man/ja/pwunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ja/sg.1 b/man/ja/sg.1
new file mode 100644 (file)
index 0000000..d07c5e4
--- /dev/null
@@ -0,0 +1 @@
+.so man1/newgrp.1
diff --git a/man/ja/shadow.3 b/man/ja/shadow.3
new file mode 100644 (file)
index 0000000..3d2c249
--- /dev/null
@@ -0,0 +1,153 @@
+.\" $Id: shadow.3 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1989 - 1993, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" updated Tue 17 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH SHADOW 3
+.SH 名前
+shadow \- 暗号化されたパスワードファイル用ルーチン
+.SH 書式
+.B #include <shadow.h>
+.PP
+.B struct spwd *getspent();
+.PP
+.B struct spwd *getspnam(char
+.IB *name );
+.PP
+.B void setspent();
+.PP
+.B void endspent();
+.PP
+.B struct spwd *fgetspent(FILE
+.IB *fp );
+.PP
+.B struct spwd *sgetspent(char
+.IB *cp );
+.PP
+.B int putspent(struct spwd
+.I *p,
+.B FILE
+.IB *fp );
+.PP
+.B int lckpwdf();
+.PP
+.B int ulckpwdf();
+.SH 説明
+.I shadow
+は shadow パスワードファイル
+\fI/etc/shadow\fR の内容を操作するルーチンである。
+\fI#include\fR ファイルに与えられている構造体は以下の通り。
+.sp
+struct spwd {
+.in +.5i
+.br
+       char    *sp_namp; /* user login name */
+.br
+       char    *sp_pwdp; /* encrypted password */
+.br
+       long    sp_lstchg; /* last password change */
+.br
+       int     sp_min; /* days until change allowed. */
+.br
+       int     sp_max; /* days before change required */
+.br
+       int     sp_warn; /* days warning for expiration */
+.br
+       int     sp_inact; /* days before account inactive */
+.br
+       int     sp_expire; /* date when account expires */
+.br
+       int     sp_flag; /* reserved for future use */
+.br
+.in \-.5i
+}
+.PP
+各フィールドの意味は:
+.sp
+sp_namp \- ヌル終端されたユーザ名文字列へのポインタ
+.br
+sp_pwdp \- ヌル終端されたパスワード文字列へのポインタ
+.br
+sp_lstchg \- 1970年1月1日からパスワード最終変更日時迄の日数
+.br
+sp_min \- パスワード変更が出来るようになるまでの日数
+.br
+sp_max \- パスワードを変更しなくても良い日数
+.br
+sp_warn \- パスワードが期限切れになる前に、
+期限切れが近づいている旨の警告をユーザに出す期間の日数
+.br
+sp_inact \- パスワードが期限切れになってから、
+アカウントが不能となり使用できなくなるまでの日数
+.br
+sp_expire \- 1970年1月1からアカウントが使用不能となる日迄の日数
+.br
+sp_flag \- 将来使うときに向けて予約
+.SH 説明
+\fBgetspent\fR, \fBgetspname\fR, \fBfgetspent\fR, \fBsgetspent\fR
+は、それぞれ \fBstruct spwd\fR へのポインタを返す。
+\fBgetspent\fR はファイルから次のエントリを、
+\fBfgetspent\fR は指定されたストリーム
+(正しい書式のファイルとみなされる)
+から次のエントリを返す。
+\fBsgetspent\fR は入力として与えられた文字列を用いて
+\fBstruct spwd\fR へのポインタを返す。
+\fBgetspnam\fR はファイル中の現在の位置から
+\fBname\fR にマッチするエントリを探す。
+.PP
+\fBsetspent\fR は
+shadow パスワードファイルへのアクセスを開始するために、
+\fBendspent\fR は終了するために用いられる。
+.PP
+\fI/etc/shadow\fR ファイルに対する排他的なアクセスを保証したい場合には、
+\fBlckpwdf\fR ルーチンと \fBulckpwdf\fR ルーチンを用いる。
+\fBlckpwdf\fR は \fBpw_lock\fR を用いて最大 15 秒間ロックを取得しようとする。
+そして最初の 15 秒の残りの間、
+\fBspw_lock\fR によって二度目のロックをしようと試み続ける。
+計 15 秒間の間にいずれかの試みが失敗した場合は、
+\fBlckpwdf\fR は \-1 を返す。
+いずれのロックも成功した場合は 0 が返される。
+.SH 返り値
+これらのルーチンは、エントリが残っていない場合や、
+処理の過程でエラーが発生した場合には NULL を返す。
+返り値が \fBint\fR であるルーチンは、
+成功したら 0 を、失敗したら \-1 を返す。
+.SH 警告
+shadowされたパスワードファイルへのアクセスは制限されているので、
+これらのルーチンはスーパーユーザだけが利用できる。
+.SH ファイル
+\fI/etc/shadow\fR \- 暗号化されたユーザパスワード
+.SH 関連項目
+.BR getpwent (3),
+.BR shadow (5)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/shadow.5 b/man/ja/shadow.5
new file mode 100644 (file)
index 0000000..67ab5c0
--- /dev/null
@@ -0,0 +1,102 @@
+.\"$Id: shadow.5 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 18 Sep 2002 by NAKNAO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH SHADOW 5
+.SH 名前
+shadow \- 暗号化されたパスワードファイル
+.SH 説明
+.I shadow
+にはユーザのアカウントに対する暗号化されたパスワード情報、
+およびオプションとしてパスワードの有効期限の情報が記されている。
+含まれている内容は
+.IP "" .5i
+ログイン名
+.IP "" .5i
+暗号化されたパスワード
+.IP "" .5i
+1970 年 1 月 1 日から、最後にパスワードが変更された日までの日数
+.IP "" .5i
+パスワードが変更可能となるまでの日数
+.IP "" .5i
+パスワードを変更しなくてはならなくなる日までの日数
+.IP "" .5i
+パスワード有効期限が来る前に、ユーザが警告を受ける日数
+.IP "" .5i
+パスワード有効期限が過ぎてからアカウントが使用不能になるまでの日数
+.IP "" .5i
+1970 年 1 月 1 日からアカウントが使用不能になる日までの日数
+.IP "" .5i
+予約フィールド
+.PP
+パスワードフィールドは必ず記入されていなくてはならない。
+暗号化されたパスワードは、
+a から z、A から Z のアルファベット、
+0 から 9 までの数字、 \. と / の 64 文字のうちの、
+13 文字以上 24 文字以下である。
+この文字列がどのように解釈されるかの詳細は \fBcrypt\fR(3) を参照せよ。
+.PP
+最後にパスワードを変更した日時は
+1970 年 1 月 1 日からの日数として記述される。
+パスワードは十分な日数が経過してからでないと変更できず、
+また最大日数が経過した後は必ず変更しなければならない。
+変更可能となるまでに要する日数が有効期限よりも大きい場合は、
+ユーザがパスワードを変更することは出来ない。
+.PP
+パスワードの有効期限が過ぎてから、
+指定日数のうちにパスワードを変更しなかった場合は、
+そのアカウントは無効になり、使えなくなる。
+また、アカウントを指定した期日に、
+(その他のパスワード有効期限情報にはよらず)
+使用不能とすることもできる。
+.PP
+この情報は、\fI/etc/passwd\fR 中の
+あらゆるパスワード情報・有効期限情報よりも優先される。
+.PP
+パスワードの安全性を保つためには、
+このファイルを一般ユーザが読めるようにしてはならない。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 暗号化されたユーザパスワード
+.SH 関連項目
+.BR chage (1),
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR passwd (5),
+.BR pwconv (8),
+.BR pwunconv (8),
+.BR sulogin (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/su.1 b/man/ja/su.1
new file mode 100644 (file)
index 0000000..67d2d63
--- /dev/null
@@ -0,0 +1,88 @@
+.\" $Id: su.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated Wed Apr 26 JST 2000 by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Fri Jan 12 JST 2001 by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Mon Mar  4 JST 2002 by Kentaro Shirakata <argrath@ub32.org>
+.\" Modified Tue 16 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH SU 1
+.SH 名前
+su \- ユーザIDを変更する。またはスーパーユーザになる
+.SH 書式
+\fBsu\fR [\fB\-\fR] [\fIusername\fR [\fIargs\fR]]
+.SH 説明
+\fBsu\fR はログインセッション中に別のユーザになるために用いる。
+ユーザ名を指定せずに起動した場合、
+デフォルトではスーパーユーザの ID に変更する。
+オプション引数 \fB\-\fR を用いると、
+直接ログインした場合と同じ環境に初期化される。
+.PP
+ユーザ名の後ろに追加の引数を与えることもでき、
+その場合引数はユーザのログインシェルに渡される。
+特に、その引数の一つとして \fB\-c\fR を渡した場合、
+それに続く引数は大部分のコマンドインタプリタにコマンドとして解釈される。
+コマンドはそのユーザに (\fI/etc/passwd\fR で)
+指定されているシェルで実行される。
+.PP
+必要な場合には、ユーザにはパスワードの入力が促される。
+間違ったパスワードが入力された場合にはエラーメッセージが出力される。
+\fIsu\fRしようとした場合は、システムの濫用を検知するために、
+それが正しい場合も不正な場合も常に記録が残される。
+.PP
+現在の環境は新しいシェルに引き継がれる。
+ただし
+\fB$PATH\fR の値は、
+通常のユーザでは \fB/bin:/usr/bin\fR に、
+スーパーユーザでは \fB/sbin:/bin:/usr/sbin:/usr/bin\fR
+に再設定される。
+これは \fI/etc/login.defs\fR の
+\fBENV_PATH\fR と \fBENV_SUPATH\fR で変更できる。
+.PP
+サブシステムログインでは、
+ログインシェルの最初の文字に "*" を置く。
+渡されたホームディレクトリは、
+ユーザが実際にログインする新しいファイルシステムのルートとして扱われる。
+.SH 警告
+この版の \fBsu\fR には多くのコンパイル時オプションがあるが、
+サイトによってはこの一部しか設定されていないこともある。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 暗号化パスワードと有効期限情報
+.SH 関連項目
+.BR login (1),
+.BR sh (1),
+.BR login.defs (5),
+.BR suauth (5)
+.SH 著者
+Julianne Frances Haugh <jockgrrl@ix.netcom.com>
diff --git a/man/ja/suauth.5 b/man/ja/suauth.5
new file mode 100644 (file)
index 0000000..747edf3
--- /dev/null
@@ -0,0 +1,116 @@
+.\"$Id: suauth.5 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri 14 Feb 1997
+.\"     by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Tue 18 Sep 2002 by NAKNAO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH SUAUTH 5 "Feb 14, 1996"
+.UC 5
+.SH 名前
+suauth \- su を詳細に制御するためのファイル
+.SH 書式
+.B /etc/suauth
+.SH 説明
+.I /etc/suauth
+ファイルは、
+su コマンドが実行されるたびに参照される。
+このファイルを用いると、
+以下の情報に基づいて su コマンドの動作を変更できる。
+.PP
+.RS
+.nf
+1) su で成り代わろうとしているユーザ
+.fi
+2) su コマンドを実行しているユーザ
+(もしくはそのユーザが属するグループのいずれか)
+.RE
+.PP
+このファイルは次の様な書式をしている。
+# で始まる行はコメントとして扱われ、無視される。
+.PP
+.RS
+to\-id:from\-id:ACTION
+.RE
+.PP
+ここで to\-id は、
+.B ALL
+という単語、
+コンマで区切られたユーザ名のリスト、
+.B ALL EXCEPT
+という単語以降に置かれた "," 区切りのユーザ名リスト、
+のいずれかである。
+.PP
+from\-id は to\-id と同じ書式であり、更に
+.B GROUP
+という単語も使用できる。
+.B ALL EXCEPT GROUP
+という使い方も同様に利用できる。
+.B GROUP
+の後には一つ以上のグループ名を "," で区切って記す。
+そのグループを主グループ id として持つだけではだめで、
+\fI/etc/group\fR のエントリにユーザ名が記されていなければならない。
+.PP
+ACTION には、以下のオプションのいずれか一つを指定できる。
+.TP 10
+.B DENY
+パスワードを聞く前に su 動作を中止する。
+.TP
+.B NOPASS
+自動的に su は成功し、パスワードは尋ねない。
+.TP
+.B OWNPASS
+su が成功するためには、
+ユーザが自分のパスワードを入力しなくてはならない。
+パスワードを入力するように要求される。
+.PP
+コロンによって区切られた別々のフィールドが三つある点に注意すること。
+コロンの前後に空白があってはならない。
+ファイルは一行毎に順番に吟味され、
+最初にマッチした規則が用いられ、
+ファイルの残りはそれ以上捜査されない。
+これによって、
+システム管理者は望む限りの微調整を行うことが可能となる。
+.SH 例
+.PP
+.nf
+# /etc/suauthファイルの例
+#
+# 二人の特権ユーザが、自分のパスワードを
+# 用いて root に su できる。
+#
+root:chris,birddog:OWNPASS
+# 
+# 他のユーザは wheel グループに属していない限り
+# root に su できない。これは BSD と同じ動作である。
+#
+root:ALL EXCEPT GROUP wheel:DENY
+#
+# おそらく terry と birddog は同じ人間が
+# 所有するアカウントである。
+# パスワード無しで互いに他方に su できる。
+#
+terry:birddog:NOPASS
+birddog:terry:NOPASS
+#
+.fi
+.SH ファイル
+\fI/etc/suauth\fR
+.SH バグ
+多くのバグが潜んでいる可能性がある。
+とりわけ、ファイルパーザは書式エラーに寛大ではなく、
+(行の始め及び終わり以外に) 無駄な空白があってはならないし、
+特定のトークンが別々のものを区切るようになっている。
+.SH 返り値
+ファイルをパースする際のエラーは
+.BR syslogd (8)
+を通して、AUTH ファシリティの ERR レベルで通知される。
+.SH 関連項目
+.BR su (1)
+.SH 著者
+.nf
+Chris Evans (lady0110@sable.ox.ac.uk)
+Lady Margaret Hall
+Oxford University
+England
diff --git a/man/ja/sulogin.8 b/man/ja/sulogin.8
new file mode 100644 (file)
index 0000000..7a113b3
--- /dev/null
@@ -0,0 +1,95 @@
+.\" $Id: sulogin.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1989 - 1992, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH SULOGIN 8
+.SH 名前
+sulogin \- シングルユーザ login
+.SH 書式
+\fBsulogin\fR [\fItty\-device\fR]
+.SH 説明
+.B sulogin
+は、シングルユーザモードの時、
+ユーザがシステムにアクセス可能となる前に、
+\fI/etc/init\fR によって起動される。
+この機能は、\fBinit\fR が適切に変更されているシステムか、
+あるいは \fI/etc/inittab\fR にシングルユーザ login
+のエントリがあるシステムでのみ利用できる。
+.PP
+次のようなプロンプトが出る。
+.IP "" .5i
+Type control\-d to proceed with normal startup,
+.br
+(or give root password for system maintenance):
+.PP
+オプションのデバイス名引数が指定された場合を除き、
+標準のファイルディスクリプタを用いて入出力を行なう。
+.PP
+ユーザが正しい root のパスワードを入力した場合は、
+ログインセッションが開始される。
+\fBEOF\fR が押された場合は、
+システムはマルチユーザモードに入る。
+.PP
+ユーザがシングルユーザシェルを抜けた、
+あるいは (シェルに入る前に) \fBEOF\fR を押した後には、
+システムはマルチユーザモードに入るために必要な初期化処理を開始する。
+.SH 警告
+このコマンドが利用できるようにするには、
+\fBinit\fR が \fB/bin/sh\fR ではなく
+\fBsulogin\fR を呼ぶようになっているか、
+または
+\fIinittab\fR
+中にシングルユーザログインに対する設定がされている必要がある。
+例えば、
+.br
+.sp 1
+co:s:respawn:/etc/sulogin /dev/console
+.br
+.sp 1
+という行を書いておけば、
+シングルユーザモードでは sulogin コマンドが実行される。
+.PP
+可能な限り完全な環境が提供される。
+しかし、
+様々なデバイスがマウントされていなかったり初期化されていなかったりするため、
+多くのユーザコマンドが使えなかったり機能しないかもしれない。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 暗号化されたパスワードと有効期限の情報
+.SH 関連項目
+.BR login (1),
+.BR sh (1),
+.BR init (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/useradd.8 b/man/ja/useradd.8
new file mode 100644 (file)
index 0000000..2679809
--- /dev/null
@@ -0,0 +1,176 @@
+.\" $Id: useradd.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1996 HANATAKA Shinya
+.\"         all rights reserved.
+.\" Translated Wed Nov 20 17:42:39 JST 1996
+.\"         by HANATAKA Shinya 
+.\" Updated Mon Mar  5 JST 2002 by Kentaro Shirakata <argrath@ub32.org>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.\"WORD:        initial group           主グループ
+.\"WORD:        supplementary group     補助グループ
+.\"
+.TH USERADD 8
+.SH 名前
+useradd \- 新規ユーザの作成・新規ユーザのデフォルト情報の更新
+.SH 書式
+.TP 8
+\fBuseradd\fR [\fB\-c\fR \fIcomment\fR] [\fB\-d\fR \fIhome_dir\fR]
+.br
+[\fB\-e\fR \fIexpire_date\fR] [\fB\-f\fR \fIinactive_time\fR]
+.br
+[\fB\-g\fR \fIinitial_group\fR] [\fB\-G\fR \fIgroup\fR[,...]]
+.br
+[\fB\-m\fR [\fB\-k\fR \fIskeleton_dir\fR]] [\fB\-o\fR] [\fB\-p\fR \fIpasswd\fR]
+.br
+[\fB\-s\fR \fIshell\fR] [\fB\-u\fR \fIuid\fR] \fIlogin\fR
+.TP 8
+\fBuseradd\fR \fB\-D\fR [\fB\-g\fR \fIdefault_group\fR] [\fB\-b\fR \fIdefault_home\fR]
+.br
+[\fB\-e\fR \fIdefault_expire_date\fR] [\fB\-f\fR \fIdefault_inactive\fR]
+.br
+[\fB\-s\fR \fIdefault_shell\fR]
+.SH 説明
+.SS 新規ユーザの作成
+\fB\-D\fR オプションなしで実行された場合、
+\fBuseradd\fR コマンドは
+コマンドラインの値とデフォルトの設定値をもとに
+新規ユーザのアカウントを作成する。
+コマンドラインオプションに応じて、
+新規ユーザのアカウントが必要なシステムファイルに追加され、
+ホームディレクトリが作成され、
+設定ファイルがコピーされる。
+\fBuseradd\fR コマンドのオプションは次の通り。
+.IP "\fB\-c\fR \fIcomment\fR"
+パスワードファイルに追加する新規ユーザのコメントフィールド。
+.IP "\fB\-d\fR \fIhome_dir\fR"
+新規ユーザのログインディレクトリを \fIhome_dir\fR にする。
+デフォルトでは \fIlogin\fR を
+\fIdefault_home\fR に付け加えたものがログインディレクトリとなる。
+.IP "\fB\-e\fR \fIexpire_date\fR"
+ユーザアカウントが使用不能になる日付。
+日付は \fIYYYY\-MM\-DD\fR という書式で指定する。
+.IP "\fB\-f\fR \fIinactive_days\fR"
+パスワードの使用期限が切れてからアカウントが永久に使用不能になるまでの日数。
+0 にすると、
+パスワードの期限が切れると同時にこのアカウントは使用不能になる。
+\-1 にするとこの機能が無効になる。デフォルト値は \-1。
+.IP "\fB\-g\fR \fIinitial_group\fR"
+ユーザの属する主グループのグループ名または ID。
+グループ名はすでに存在していなければならない。
+グループ ID は既存のグループに対応するものでなければならない。
+デフォルトのグループ ID は 1 か、
+または \fI/etc/default/useradd\fR
+で指定されているものがあればそれに従う。
+.IP "\fB\-G\fR \fIgroup,[...]\fR"
+ユーザの属する補助グループ (supplementary groups) のリスト。
+グループはコンマで区切り、間に空白を入れてはならない。
+指定できるグループには \fB\-g\fR オプションと同様の制限がある。
+デフォルトでは、ユーザは主グループのみに属する。
+.IP \fB\-m\fR
+ホームディレクトリが存在しない場合には、ホームディレクトリを作成する。
+\fB\-k\fR オプションを同時に指定すると \fIskeleton_dir\fR 以下のファイルが、
+指定しないと \fI/etc/skel\fR 以下のファイルが、
+ホームディレクトリにコピーされる。
+ホームディレクトリには、
+\fIskeleton_dir\fR または \fI/etc/skel\fR
+に含まれるすべてのディレクトリも作成される。
+\fB\-k\fR オプションは、
+\fB\-m\fR オプションとともに使われる場合のみ有効である。
+デフォルトでは、ホームディレクトリを作らず、ファイルのコピーもしない。
+.IP "\fB\-o\fR"
+重複した (固有でない) UID でユーザを作成できるようにする。
+.IP "\fB\-p\fR \fIpasswd\fR"
+\fBcrypt\fR(3) の返り値である暗号化パスワード。
+デフォルトでは、アカウントは使えない状態となる。
+.IP "\fB\-s\fR \fIshell\fR"
+ユーザのログインシェルの名前。
+デフォルトではこのフィールドは空白となり、
+システムがデフォルトのログインシェルを選ぶ。
+.IP "\fB\-u\fR \fIuid\fR"
+ユーザの ID 番号。
+この値は、\fB\-o\fR オプションを用いる場合を除き、他と重複してはならない。
+また非負値でなくてはならない。
+デフォルトでは、 999 および他のあらゆる既存ユーザの ID よりも大きい、
+最小の数値となる。
+0 から 999 までの値は、
+通常システム用のアカウントに予約されている。
+.SS デフォルト値の変更
+\fB\-D\fR オプションを指定すると、
+\fBuseradd\fR は現在のデフォルト値を表示するか、
+またはオプションで与えられた値に応じてデフォルト値を変更する。
+使用可能なオプションは次の通り。
+.IP "\fB\-b\fR \fIdefault_home\fR"
+新規ユーザのホームディレクトリのパスのプレフィックス。
+新規ユーザアカウントの作成時に \fB\-d\fI オプションが指定されないと、
+\fIdefault_home\fR の後にユーザ名を付け加えたものが
+新規ディレクトリ名として使われる。
+.IP "\fB\-e\fR \fIdefault_expire_date\fR"
+ユーザアカウントが使用不能となる日付。
+.IP "\fB\-f\fR \fIdefault_inactive\fR"
+パスワードの使用期限が切れてからアカウントが使用不能となるまでの日数。
+.IP "\fB\-g\fR \fIdefault_group\fR"
+新規ユーザの属する主グループのグループ名またはグループ ID。
+グループ名はすでに存在するものでなければならない。
+グループ ID は既存のグループに対応するものでなければならない。
+.IP "\fB\-s\fR \fIdefault_shell\fR"
+新規ユーザのログインシェル。
+指定されたプログラムは、
+今後作られるすべての新規ユーザアカウントに適用される。
+.PP
+オプションを指定しないと、
+\fBuseradd\fR は現在のデフォルト値を表示する。
+.SH 注意
+\fI/etc/skel\fR ディレクトリにデフォルトのユーザファイルを置くのは
+システム管理者の行うべき作業である。
+.SH 警告
+NIS のグループにユーザを加えてはならない。
+これは必ず NIS サーバ上で行うこと。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 安全なユーザアカウント情報
+.br
+\fI/etc/group\fR \ \- グループ情報
+.br
+\fI/etc/default/useradd\fR \- デフォルト情報
+.br
+\fI/etc/skel/\fR \ \- ファイルの雛形が置かれるディレクトリ
+.SH 関連項目
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR crypt (3),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/userdel.8 b/man/ja/userdel.8
new file mode 100644 (file)
index 0000000..7c950fe
--- /dev/null
@@ -0,0 +1,77 @@
+.\" $Id: userdel.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated Fri Jan 12 JST 2000 by Kentaro Shirakata <argrath@ub32.org>
+.\" Updated Fri Mar  1 JST 2002 by Kentaro Shirakata <argrath@ub32.org>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH USERDEL 8
+.SH 名前
+userdel \- ユーザのアカウントと関連ファイルを削除する
+.SH 書式
+.B userdel
+[\fB\-r\fR]
+.I login
+.SH 説明
+\fBuserdel\fR コマンドは、システムアカウントファイルを修正し、
+ユーザ \fIlogin\fR に対応するすべてのエントリを削除する。
+削除されるユーザは存在していなければならない。
+\fBuserdel\fR コマンドに適用できるオプションは以下の通り。
+.IP \fB\-r\fR
+ユーザのホームディレクトリ中のファイルを削除する。
+ホームディレクトリ自体とユーザのメールスプールも消去する。
+ファイルシステム中のほかの場所にあるそのユーザのファイルは、
+手作業で探し出して削除しなければならない。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 安全なユーザアカウント情報
+.br
+\fI/etc/group\fR \ \- グループ情報
+.SH 警告
+\fBuserdel\fR は、削除されるユーザが現在ログインしている場合は、
+そのアカウントの削除を許可しない。
+削除しようとしているアカウントに属する実行中のプロセスは、
+すべて kill しなければならない。
+NIS のクライアントからは、NIS の属性値は削除できない。
+削除は NIS のサーバで行わなければならない。
+.SH 関連項目
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR useradd (8),
+.BR usermod (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/usermod.8 b/man/ja/usermod.8
new file mode 100644 (file)
index 0000000..c84fb42
--- /dev/null
@@ -0,0 +1,145 @@
+.\" $Id: usermod.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" Japanese Version Copyright (c) 1997 Kazuyoshi Furutaka
+.\"         all rights reserved.
+.\" Translated Fri Feb 14 23:06:00 JST 1997
+.\"         by Kazuyoshi Furutaka <furutaka@Flux.tokai.jaeri.go.jp>
+.\" Updated Tue Jan 23 17:21:08 JST 2001
+.\"         by Kentaro Shirakata <argrath@ub32.org>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.\"WORD:        initial group           主グループ
+.\"WORD:        supplementary group     補助グループ
+.\"
+.TH USERMOD 8
+.SH 名前
+usermod \- ユーザアカウントを修正する
+.SH 書式
+\fBusermod\fR [\fB\-c\fR \fIcomment\fR] [\fB\-d\fR \fIhome_dir\fR [\fB\-m\fR]]
+.br
+[\fB\-e\fR \fIexpire_date\fR] [\fB\-f\fR \fIinactive_time\fR]
+.br
+[\fB\-g\fR \fIinitial_group\fR] [\fB\-G\fR \fIgroup\fR [,...]]
+.br
+[\fB\-l\fR \fIlogin_name\fR] [\fB\-p\fR \fIpasswd\fR]
+.br
+[\fB\-s\fR \fIshell\fR] [\fB\-u\fR \fIuid\fR [\fB\-o\fR]] [\fB\-L\fR|\fB\-U\fR]
+\fIlogin\fR
+.SH 説明
+\fBusermod\fR コマンドは、
+コマンドライン上での指定によって、
+システムアカウントファイルを修正する。
+\fBusermod\fR コマンドに指定できるオプションは次の通り。
+.IP "\fB\-c\fR \fIcomment\fR"
+パスワードファイルのコメントフィールドに与える新しい値。
+通常は
+.BR chfn (1)
+ユーティリティによって変更される。
+.IP "\fB\-d\fR \fIhome_dir\fR"
+新しいログインディレクトリ。
+\fB\-m\fR オプションを用いると、
+現在のホームディレクトリの中身が新しいホームディレクトリに移動される
+(後者が存在しない場合は新たに作成される)。
+.IP "\fB\-e\fR \fIexpire_date\fR"
+そのユーザアカウントが使用不能になる日付。
+日付は \fIYYYY\-MM\-DD\fR という書式で指定する。
+.IP "\fB\-f\fR \fIinactive_days\fR"
+パスワードの使用期限が切れてからアカウントが永久に使用不能になるまでの日数。
+0 にすると、
+パスワードの期限が切れると同時にこのアカウントは使用不能になる。
+\-1 にするとこの機能が無効になる。デフォルト値は \-1。
+.IP "\fB\-g\fR \fIinitial_group\fR"
+
+新たにそのユーザのログイン時初期グループとするグループ名または ID。
+グループ名は既に存在していなければならない。
+グループ番号は既存のグループを参照していなければならない。
+デフォルトのグループ番号は 1。
+.IP "\fB\-G\fR \fIgroup,[...]\fR"
+ユーザが属する補助グループ (supplementary groups) のリスト。
+グループはコンマで区切り、間に空白文字を入れてはならない。
+指定できるグループには \fB\-g\fR オプションと同様の制限がある。
+現在そのユーザが、
+新しいリストにないグループのメンバーになっている場合は、
+そのグループから削除される。
+.IP "\fB\-l\fR \fIlogin_name\fR"
+ユーザのログイン名を \fIlogin\fR から \fIlogin_name\fR に変更する。
+他は何も変更しないので、
+おそらく新しいログイン名に合わせて
+ホームディレクトリの名前を変更する必要があるだろう。
+.IP "\fB\-p\fR \fIpasswd\fR"                                                
+\fBcrypt\fR(3) の返り値である暗号化パスワード。
+.IP "\fB\-s\fR \fIshell\fR"
+ユーザの新しいログインシェルの名前。
+このフィールドを空白にした場合は、
+システムがデフォルトのログインシェルを選択する。
+.IP "\fB\-u\fR \fIuid\fR"
+ユーザの ID 番号。
+この値は、\fB\-o\fR オプションを用いる場合を除き、他と重複してはならない。
+また非負値でなくてはならない。
+0 から 999 までの値は、通常システムアカウント用に予約されている。
+ホームディレクトリ以下の、
+そのユーザ所有のすべてのファイルのユーザ ID は、
+自動的に新しい値に変更される。
+ホームディレクトリ以下にないファイルは手作業で変更しなければならない。
+.IP "\fB\-L\fR"
+ユーザのパスワードをロックする。
+これは暗号化されたパスワードの前に '!' を追加し、
+実質的にパスワードを無効にする。
+このオプションを \fI\-p\fR や \fI\-U\fR と同時に用いることはできない。
+.IP "\fB\-U\fR"
+ユーザのパスワードをアンロックする。
+これは暗号化されたパスワードの先頭の '!' を取り除く。
+このオプションを \fI\-p\fR や \fI\-L\fR と同時に用いることはできない。
+.SH 警告
+\fBusermod\fR
+は現在ログインしているユーザの名前を変更できない。
+このコマンドを使用してユーザの ID 番号を変更する際には、
+指定したユーザのプロセスが一つも実行されていないことを
+事前に確認しなければならない。
+crontab ファイルの所有者は手作業で変更しなければならない。
+at ジョブの所有者は手作業で変更しなければならない。
+NIS に関する作業は NIS サーバ上で行なわなければならない。
+.SH ファイル
+\fI/etc/passwd\fR \- ユーザアカウント情報
+.br
+\fI/etc/shadow\fR \- 安全なユーザアカウント情報
+.br
+\fI/etc/group\fR \ \- グループ情報
+.SH 関連項目
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR crypt (3),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR useradd (8),
+.BR userdel (8)
+.SH 著者
+Julianne Frances Haugh (jockgrrl@ix.netcom.com)
diff --git a/man/ja/vigr.8 b/man/ja/vigr.8
new file mode 100644 (file)
index 0000000..ff72d7a
--- /dev/null
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/ja/vipw.8 b/man/ja/vipw.8
new file mode 100644 (file)
index 0000000..092435c
--- /dev/null
@@ -0,0 +1,38 @@
+.\" $Id: vipw.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.\" Japanese Version Copyright (c) 2001 Maki KURODA
+.\"     all right reserved,
+.\" Translated Tue Oct 30 11:55:56 JST 2001
+.\"     by Maki KURODA <mkuroda@aisys-jp.com>
+.\" Modified Sun 22 Sep 2002 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
+.\"
+.TH VIPW 8 "26 Sep 1997"
+.SH 名前
+vipw, vigr \- password, group とそれぞれの shadow ファイルを編集する
+.SH 書式
+\fBvipw\fR [\fB\-s\fR]
+.br
+\fBvigr\fR [\fB\-s\fR]
+.SH 説明
+.BR vipw " と " vigr
+は、それぞれ
+\fI/etc/passwd\fR " と " \fI/etc/group\fR
+を編集する。
+.B \-s
+フラグが指定されると、これらのファイルの shadow 化版である
+\fI/etc/shadow\fR と \fI/etc/gshadow\fR
+をそれぞれ編集する。
+これらのプログラムはファイルが壊れないよう適切なロックを設定する。
+
+これらのプログラムは、利用するエディタとしてまず
+環境変数
+.BR VISUAL ,
+環境変数
+.BR EDITOR ,
+を順に試し、最後にデフォルトのエディタである
+.BR vi 
+を用いようとする。
+.SH 関連項目
+.BR group (5),
+.BR passwd (5),
+.BR shadow (5)
diff --git a/man/ko/Makefile.am b/man/ko/Makefile.am
new file mode 100644 (file)
index 0000000..9c36b18
--- /dev/null
@@ -0,0 +1,16 @@
+
+mandir = @mandir@/ko
+
+man_MANS = \
+       chfn.1 \
+       chsh.1 \
+       groups.1 \
+       login.1 \
+       passwd.5 \
+       su.1 \
+       vigr.8 \
+       vipw.8
+# newgrp.1 must be updated
+#      newgrp.1
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/ko/Makefile.in b/man/ko/Makefile.in
new file mode 100644 (file)
index 0000000..5f05464
--- /dev/null
@@ -0,0 +1,519 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/ko
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+       "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/ko
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+       chfn.1 \
+       chsh.1 \
+       groups.1 \
+       login.1 \
+       passwd.5 \
+       su.1 \
+       vigr.8 \
+       vipw.8
+
+# newgrp.1 must be updated
+#      newgrp.1
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/ko/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/ko/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man5 install-man8 install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/ko/chfn.1 b/man/ko/chfn.1
new file mode 100644 (file)
index 0000000..554e030
--- /dev/null
@@ -0,0 +1,54 @@
+.\" $Id: chfn.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\" this program is free software.  you can redistribute it and
+.\" modify it under the terms of the gnu general public license.
+.\" there is no warranty.
+.TH CHFN 1 "October 13 1994" "chfn" "Linux Reference Manual"
+.SH NAME
+chfn \- 사용자 finger 정보를 바꾼다.
+.SH SYNOPSIS
+\fBchfn\fR [\fB\-f\fR \fIfull\-name\fR] [\fB\-o\fR \fIoffice\fR] [\fB\-p\fR \fIoffice\-phone\fR]
+[\ \-h\ home\-phone\ ] [\ \-u\ ] [\ \-v\ ] [\ username\ ]
+.SH DESCRIPTION
+.B chfn
+명령은 사용자의 finger 정보를 바꾼다. 이것은 
+.I /etc/passwd
+파일의 정보를 바꾼다. 
+.B finger
+명령이 사용될 때 바로 이 파일을 참조하기 때문이다.
+.B finger
+명령은 
+.B chfn
+명령에서 바뀐 실재이름, 직장, 직장전화, 집전화번호를 보여준다.
+.SS COMMAND LINE
+아무 옵션 없이 이 명령을 사용하면, 직접 사용자에게 각각의 바꿀 정보를 
+물어보지만, 이 정보들을 명령행에서 직접 입력할 수도 있다.
+.SS INTERACTIVE MODE
+아무 옵션 없이 이 명령을 사용하면, 직접 사용자에게 각각의 바꿀 정보를 
+물어본다. 이때 정당한 값을 지정해 주고, 원래의 값을 바꾸지 않으려면, 
+그냥 Enter 글쇠를 누르면 된다.
+.SH OPTIONS
+.TP
+.I "\-f, \-\-full\-name"
+사용자 실재 이름
+.TP
+.I "\-o, \-\-office"
+사용자 직장
+.TP
+.I "\-p, \-\-office\-phone"
+사용자 직장 전화번호
+.TP
+.I "\-h, \-\-home\-phone"
+사용자 집 전화 번호
+.TP
+.I "\-u, \-\-help"
+도움말을 보여주고 마친다.
+.TP
+.I "\-v, \-\-version"
+버전 정보를 보여주고 마친다.
+.SH "SEE ALSO"
+.BR finger (1),
+.BR passwd (5)
+.SH AUTHOR
+Salvatore Valente <svalente@mit.edu>
diff --git a/man/ko/chsh.1 b/man/ko/chsh.1
new file mode 100644 (file)
index 0000000..f0fd70c
--- /dev/null
@@ -0,0 +1,43 @@
+.\" $Id: chsh.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\" this program is free software.  you can redistribute it and
+.\" modify it under the terms of the gnu general public license.
+.\" there is no warranty.
+.TH CHSH 1 "October 13 1994" "chsh" "Linux Reference Manual"
+.SH NAME
+chsh \- 사용자 로그인 쉘을 바꾼다.
+.SH SYNOPSIS
+.B chsh
+[\ \-s\ shell\ ] [\ \-l\ ] [\ \-u\ ] [\ \-v\ ] [\ username\ ]
+.SH DESCRIPTION
+.B chsh
+명령은 사용자가 사용하고 있는 로그인 쉘을 바꾸는데, 사용된다. 
+(이말은 exit 명령을 사용했을 때 로그아웃되는 쉘을 말한다.)
+명령행에서 쉘을 지정하지 않으면, 사용자에게 물어본다.
+.SS VALID SHELLS
+.B chsh
+명령에서는 절대 경로를 지정하는 어떠한 실행파일도 지정이 가능하다. 
+하지만, 
+.I /etc/shells
+파일에서 지정되어 있지 않는 풀그림을 사용할 경우에는 경고 메시지를 보여준다.
+.SH OPTIONS
+.TP
+.I "\-s, \-\-shell"
+지정하는 쉘을 앞으로 사용할 로그인 쉘로 바꾼다.
+.TP
+.I "\-l, \-\-list\-shells"
+.I /etc/shells
+파일 안에 지정된 쉘을 나열하고 마친다.
+.TP
+.I "\-u, \-\-help"
+도움말을 보여주고 마친다.
+.TP
+.I "\-v, \-\-version"
+버전 정보를 보여주고 마친다.
+.SH "SEE ALSO"
+.BR login (1),
+.BR passwd (5),
+.BR shells (5)
+.SH AUTHOR
+Salvatore Valente <svalente@mit.edu>
diff --git a/man/ko/groups.1 b/man/ko/groups.1
new file mode 100644 (file)
index 0000000..cad0bd1
--- /dev/null
@@ -0,0 +1,32 @@
+.\"$Id: groups.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.TH GROUPS 1L "GNU 쉘 유틸리티" "FSF" \" \-*\- nroff \-*\-
+.SH 이름
+groups \- 사용자가 속한 그룹들을 출력한다
+.SH 개요
+.B groups
+[사용자명...]
+.br
+.B groups
+{\-\-help,\-\-version}
+.SH 설명
+이 맨페이지는 GNU 버전의
+.BR groups 
+를 다룬다.
+.B groups
+는 주어진 각 
+.IR username
+또는 프로세스
+가 속한 추가 그룹의 이름을 출력해준다.
+만약 사용자명이 주어졌다면 각 사용자명이 소속된 그룹 목록 앞에 표시된다.
+.PP
+그룹 목록은 `id \-Gn'의 결과와 같다.
+.SS 옵션
+GNU
+.B groups
+가 단 한 개의 인수를 가지고 실행되면 다음 옵션들을 인식한다:
+.TP
+.I "\-\-help"
+표준출력으로 사용법을 출력하고 정상적으로 종료한다.
+.TP
+.I "\-\-version"
+표준출력으로 버전정보를 출력하고 정상적으로 종료한다.
diff --git a/man/ko/login.1 b/man/ko/login.1
new file mode 100644 (file)
index 0000000..4533beb
--- /dev/null
@@ -0,0 +1,300 @@
+.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
+.\" May be distributed under the GNU General Public License
+.TH LOGIN 1 "1 February 1993" "Linux 0.99" "Linux Programmer's Manual"
+.SH 이름
+login \- 시스템 접속
+.SH 사용법
+.BR "login [ " 이름 " ]"
+.br
+.B "login \-p"
+.br
+.BR "login \-h " 호스트이름
+.br
+.BR "login \-f " 이름
+.SH 설명
+.B login
+풀그림은 한 시스템에 접속처리를 하는 풀그림이다. 
+또한 현재 접속 중에서도 한 사용자에서 다른 사용자로 바꾸고자 할 때도 
+사용될 수 있다. (한편, 대부분의 요즘 만들어진 쉘은 그 쉘 내부적으로
+이러한 기능을 제공하고 있기도 하다.)
+
+아무 옵션 없이 사용하면, 
+사용자 계정을 물어보는 프롬프트가 나타난다.
+
+이때 입력되는 계정이 root가 아니고, 
+.I /etc/nologin
+파일이 있으면 그 파일안에 내용이 보여지고 
+이 풀그림은 종료된다. 이것은 시스템 검사나 기타 사정상 일반 사용자 
+접속을 하지 못하도록 할때 사용된다.
+
+.IR /etc/usertty 
+파일에서 특정 사용자의 로그인 허용과 거부가 지정되어 있을 때, 
+만일 그 사용자가 접속하고자 할 때는 그에 따른 접속처리를 한다.
+이때, 접속거부되면 로그인은 끝나고 
+.B syslog
+명령이 작동되어 그 상황을 기록한다. 
+자세한 이야기는 아래 "특별 접근 거부" 부분에서 다룬다.
+
+
+.IR /etc/securetty 
+파일에서는 root로 접속할 수 있는 터미날들이 나열되어 있다. 
+이때 접속 실패가 일어나면 
+.B syslog
+명령이 작동되어 그 상황을 기록한다.
+
+사용자 계정의 확인 절차가 끝나면, 비밀번호를 물어보는 프롬프트가 
+나타난다. (그 사용자의 계정에서 비밀번호가 필요하면 나타난다.)
+이때, 10번동안 비밀번호를 틀리게 입력하면 login은 종료된다. 
+그런데, 처음 세번은 바로 다시 물어보지만, 다음부터는 매우 느리게 
+반복된다. (로그인 과정이)
+물론 이 과정들도 
+.B syslog
+명령에 의해 그 상황이 기록된다. 
+
+.I .hushlogin
+파일 $HOME 경로안에 있으면, 새로 도착한 편지가 있을 때 보여주는 
+메시지와 마지막 로그인한 시간을 알리는 메시지를 보여주지 않는다.
+이 파일이 없고, 
+.I /var/log/lastlog
+파일이 있으면, 그 파일에서 마지막 로그인 시간을 읽어 보여주고, 
+그 파일에, 현재 로그인을 기록한다.
+
+로그인 계정, 비밀번호 확인철자가 끝나면, 
+다음은 터미날의 UID, GID 설정같은 관리작업들을 무작위로
+수행한다. TERM 환경변수가 사용되고 있으면, 이 환경변수를 지정하고, 
+(
+.B \-p
+옵션이 사용되면 다른 환경변수가 지정된다)
+HOME, PATH, SHELL, TERM, MAIL, LOGNAME 환경변수들을 지정한다.
+일반 사용자라면 경로를 초기값으로 아래와 같이 지정하고, 
+.br
+.I /usr/local/bin:/bin:/usr/bin:.
+root라면 초기값으로 아래와 같이 지정한다.
+.br
+.I /sbin:/bin:/usr/sbin:/usr/bin
+.br
+마지막으로 "조용한" 로그인이 아니라면, 그날의 메시지를 출력하고, 
+.I /usr/spool/mail
+경로안에 그 사용자 이름으로 된 파일의 크기가 0이 아닌지 확인해서 
+0이 아니면, 편지가 있다고 알려준다.
+
+다음 사용자 쉘을 지정하는데, 
+.BR /etc/passwd 
+파일에서 그 사용자의 쉘이 지정되어 있지 않으면, 
+.B /bin/sh
+쉘을 사용한다. 
+또한,
+.IR /etc/passwd 
+파일에서 홈 경로가 지정되어 있지 않으며,
+.I /
+경로로 로그인된다.(홈 경로는 위에서 설명한 
+.I .hushlogin
+파일이 있는지 확인할 때 검사된다.)
+.SH 옵션
+.TP
+.B \-p
+.B login
+실행할 때 이전 환경들을 그대로 사용하도록 
+.BR getty (8)
+명령에 의해 사용된다.
+.TP
+.B \-f
+두번째 로그인일 경우에는 그 인증(계정확인절차)을 통과한다.
+root 계정일 경우에는 작동되지 않으며, 리눅스에서는 바르게 
+작동되지 않을 수도 있다.
+.TP
+.B \-h
+리모트 호스트 로그인시(가령, telnetd(8) 사용) 계정 입력을 통과한다.
+물론 utmp, wtmp 기록은 있다. 이 옵션은 단지 root만이 사용할 수 있다.
+
+.SH "특별 접근 거부"
+.I /etc/securetty
+파일에는 root가 접속 할 수 터미날이 나열되어 있다. 
+이 터미날 이름은 /dev/ 글자를 생략한 터미날 이름만이다.
+이 파일이 없다면 root는 모든 터미날에서 접속이 가능하다.
+.PP
+.I /etc/usertty
+파일에는 특정 사용자의 접속에 대한 특별한 설정 내용이 있다. 
+이 파일이 없다면, 어떠한 특정 사용자의 접속 거부같은 없다. 
+이 파일의 세부분으로 구성되어 있는데, 각각 그 부분들의 이름은 
+CLASSES, GROUPS, USERS 이다. CLASSES 부분에서는 터미날의 클래스와 
+호스트이름 패턴이 정의되고,  GROUPS 부분에서는 그룹 단위의 허락되는
+터미날과 호스트가 정의되고, USERS 부분에서는 사용자 단위의 허락되는
+터미날과 호스트가 정의된다.
+.PP
+이 파일의 각 줄은 255 문자를 넘을 수 없으며,
+# 문자로 시작하는 그 줄 전체는 주석으로 처리된다.
+.PP
+.SS "CLASSES 섹션"
+CLASSES 섹션은 대문자로 첫칸부터 CLASSES라고 씀으로 정의된다. 
+이 부분은 다음 섹션이 정의되기 전까지 모든 부분이 포함된다.
+각 단어의 구분은 공백문자나 탭문자로 한다.
+각 줄에는 터미날과 호스트 패턴의 클래스가 정의된다.
+.PP
+각 줄의 처음은 관리자가 정의하는 클래스 이름이 오고, 
+그 다음에는 그 클래스에서 사용하는 터미날과 호스트 패턴이 온다. 
+이 클래스 이름은 다음에 오는 GROUPS, USERS 섹션에서 사용될 수 있다. 
+.PP
+CLASSES 섹션 예제:
+.PP
+.nf
+.in +.5
+CLASSES
+myclass1               tty1 tty2
+myclass2               tty3 @.foo.com
+.in -.5
+.fi
+.PP
+윗 예제는 
+.I myclass1
+과
+.I myclass2
+클래스를 오른쪽 부분과 같이 정의한 것이다.
+.PP
+.SS "GROUPS 섹션"
+GROUPS 섹션에서는 유닉스 그룹 단위의 허락되는 터미날과 호스트가 정의된다.
+접속하는 사용자의 그룹이(이것은 
+.I /etc/passwd
+파일과 
+.I /etc/group
+파일에서 확인됨)이 
+.I /etc/usertty
+파일의 GROUPS 섹션 부분에서 정의된 그룹이라면, 그에 해당되는 
+터미날과 호스트에만 접속이 가능해 진다.
+.PP
+GROUPS 섹션은 첫칸에 대문자로 GROUPS 이라고 씀으로 정의가 시작되고, 
+다음섹션의 정의가 나타나기 전까지 이 섹션으로 가정한다. 
+각 단어의 구분은 공백문자나 탭문자로 하며, 
+각 줄의 처음에는 그룹이 오고 다음에는 그 그룹에서 접근할 수 있는
+터미날과 호스트가 온다. 또한 허락되는 터미날과 호스트 부분에서 
+앞 CLASSES 섹션에서 정의한 클래스 이름이 사용될 수도 있다. 
+.PP
+GROUPS 섹션의 예제:
+.PP
+.nf
+.in +0.5
+GROUPS
+sys            tty1 @.bar.edu
+stud           myclass1 tty4
+.in -0.5
+.fi
+.PP
+윗 예제는 
+.I sys
+그룹의 사용자는 bar.edu 도메인을 가진 호스트에서, tty1로만 
+접속이 가능하다. 
+.I stud 
+그룹의 사용자는 myclass1 클래스 또는 tty4로만 접속이 가능하다.
+.PP
+
+.SS "USERS 섹션"
+USERS 섹션은 첫칸에 USERS 라고 대문자로 씀으로 정의된다. 
+각 단어의 구분은 공백문자와 탭문자로 하며, 
+첫칸에는 사용자 계정, 다음에는 그 계정 사용자가 접속 할 수 있는 
+터미날과 그 사용자가 접속 시도하는 호스트가 정의된다. 
+물론 터미날과 호스트 정의부분에서 앞 CLASSES 섹션에서 정의한 클래스가 
+사용될 수도 있다. 
+.PP
+USERS 섹션 예제:
+.PP
+.nf
+.in +0.5
+USERS
+zacho          tty1 @130.225.16.0/255.255.255.0
+blue           tty3 myclass2
+.in -0.5
+.fi
+.PP
+윗 예제는 zacho 계정 사용자는 IP 주소가 130.225.16.0 부터 130.225.16.255
+범위 안의 호스트에서 이 컴의 tty1로 접속 하고자 할 때만 접속을 할 수 있다. 
+blue 계정 사용자는 myclass2에서 정의된 환경과 tty3으로만 접속할 수 있다.
+.PP
+USERS 섹션안에서 사용자 계정 부분에 * 문자가 올 수도 있다. 
+이것은 초기값 지정이며, 모든 사용자에게 적용된다.
+.PP
+접속하고자 하는 사용자의 계정과 그룹이 USERS, GROUPS 섹션 두 부분에서 모두
+적용되면 각 섹션에서 정의된 모든 터미날/호스트가 적용된다.
+
+.SS Origins
+터미날과 호스트 정의 부분에는 클래스, origin이라고 부르는 
+일군의 문자열이 사용된다. 이 origin 문자열은 다음과 같은 형식을 취한다.
+.IP o 
+터미날의 이름에는 /dev/ 부분이 빠진다. 즉, tty1, ttyS0 형식으로 사용된다.
+.PP
+.IP o
+@localhost 문자열은 로칼 호스트에서 telnet/rlogin으로 접속하는 사용자를 
+의미한다. 즉 `xterm \-e /bin/login' 명령같은 것이 실행된다는 것을 의미한다.
+.PP
+.IP o
+@.some.dom 문자열은 리모트 호스트 접속시 그 사용자가 rlogin/telnet으로
+도메인이 .some.dom로 끝나는 호스트에서만 접속할 수 있다는 것을 의미한다.
+.PP
+.IP o
+IP 주소의 영역은 @x.x.x.x/y.y.y.y 이런 식으로 정의하는데, 
+이것은 x.x.x.x 에서 y.y.y.y 범위의 IP 주소를 가진 호스트에서만 
+접속이 가능하다. 예를 들어, @130.225.16.0/255.255.254.0
+으로 정의하면, IP의 범위가 130.225.16.0 \- 130.225.17.255인 
+호스트에서만 접속이 가능하다.
+.PP
+기타 origin 에서 사용되는 문자열로 시간을 정할수 있는데, 
+그 형식은 다음과 같다.
+.PP
+.nf
+timespec    ::= '[' <day\-or\-hour> [':' <day\-or\-hour>]* ']'
+day         ::= 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun'
+hour        ::= '0' | '1' | ... | '23'
+hourspec    ::= <hour> | <hour> '\-' <hour>
+day\-or\-hour ::= <day> | <hourspec>
+.fi
+.PP
+예를 들어, [mon:tue:wed:thu:fri:8\-17]tty3 문자열은 
+월요일부터 금요일까지, 오전 8시 00분부터 오후 5시 59분까지만
+tty3으로 접속할 수 있음을 의미한다. 시간 지정에서는 단지, 
+a\-b 식으로 정의되면 a시 00분 부터 b시 59분까지를 의미하며,
+단지 단일 숫자만 있으면(가령 10) 그 시간만(10시 00분부터 10시 59분까지)을
+의미한다.
+.PP
+시간부분의 설정이 지정되지 않으면 어떠한 시간에도 접속이 가능하다.
+각 요일별로 그 시간을 따로 정하고 싶으면 각 요일 정의다음에 시간을 
+각각 따로 정의 할 수도 있다.
+시간지정에서는 공백문자를 사용할 수 없다.
+.PP
+만약 
+.I /etc/usertty
+파일에서 각 정의들이 바르지 못하게 정의된다면, 
+모든 사용자의 특별 접속 거부 같은 것은 없다. 
+.PP
+.SH "관련 파일"
+.nf
+\fI/var/run/utmp\fR
+\fI/var/log/wtmp\fR
+\fI/var/log/lastlog\fR
+\fI/etc/motd\fR
+\fI/etc/passwd\fR
+\fI/etc/nologin\fR
+\fI/etc/usertty\fR
+\fI$HOME/.hushlogin\fR
+.fi
+.SH "관련 항목"
+.BR init (8),
+.BR getty (8),
+.BR mail (1),
+.BR passwd (1),
+.BR passwd (5),
+.BR environ (7),
+.BR shutdown (8)
+.SH 벌레
+리눅스에서는 다른 옛날 운영체제와 달리 한 사용자의 중복 로그인을 
+제한하지 않는다.
+
+설명되지 않은 BSD의 
+.B \-r
+옵션은 지원되지 않는다. 
+이 옵션은 
+어떠한 
+.BR rlogind (8)
+풀그림에서 필요할 지도 모른다.
+.SH 만든이
+Derived from BSD login 5.40 (5/9/89) by Michael Glad (glad@daimi.dk) for HP\-UX
+.br
+Ported to Linux 0.12: Peter Orbaek (poe@daimi.aau.dk)
diff --git a/man/ko/passwd.5 b/man/ko/passwd.5
new file mode 100644 (file)
index 0000000..ceb001b
--- /dev/null
@@ -0,0 +1,119 @@
+.\"$Id: passwd.5 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" This is free documentation; 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.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
+.\" USA.
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.\" Modified Mon Jan  5 20:24:40 MET 1998 by Michael Haardt
+.\"  (michael@cantor.informatik.rwth-aachen.de)
+.\"
+.\" 한국어 번역 : ASPLINUX<man@asp-linux.co.kr>    2000년 7월 29일
+.\"
+.TH PASSWD 5 "January 5, 1998" "" "File formats"
+.SH 이름
+passwd \- 패스워드 파일 
+.SH 설명
+.B Passwd
+는 텍스트 파일로서, 시스템 계정의 목록을 포함하고 있고, 사용자 ID, 그룹 
+ID, 홈 디렉토리, 쉘 등의 각 계정에 대한 매우 유용한 정보를 제공한다. 
+종종, 각 계정에 대한 암호화된 패스워드를 포함한다. 
+Passwd는 일반적인 읽기 권한을 가져야 하지만, 수퍼 유저에게만 쓰기 접근이
+가능하다. 
+.PP
+예전에는 일반적인 읽기 권한으로인한 문제들이 없었다. 모든 사람들이
+암호화된 패스워드를 읽을 수 있었지만, 패스워드를 크랙하기에는 하드웨어가
+너무나 느렸고, 더우기, 기본적인 가정은 그들은 아주 친숙한 사용자
+공동체의 패스워드들이었다. 
+
+오늘날 많은 사람들이 쉐도우 패스워드의 일부 버전을 실행한다.
+ .I /etc/passwd는 암호화된  패스워드 대신 *로 된
+패스워드를 지니고, 암호화된 패스워드들은 수퍼유저만이 읽을 수 있는
+.I /etc/shadow에 저장된다. 
+.PP
+쉐도우 패스우드가 사용되는지에 상관없이, 많은 시스템 관리자들은 사용자가
+자기 자신을 패스워드를 사용하여 인증할 수 없도록 패스워드 필드내에 
+별표를 사용한다. 
+
+.PP
+만일 새로운 로그인을 만들면, 우선 패스워드 필드에 별표를 놓고, 이를
+설정하기 위해 .BR passwd (1)을 사용한다. 
+PP
+각 행마다 하나의 항목이 있고, 각 행은 다음의 형식을 지닌다. 
+.sp
+.RS
+계정:패스워드:UID:GID:GECOS:디렉토리:쉘
+.RE
+.sp
+각 필드에 대한 설명은 다음과 같다. 
+.sp
+.RS
+.TP 1.0in
+.I 계정
+시스템에서의 사용자 이름. 대문자를 사용해서는 안된다. 
+.TP
+.I 패스워드
+암호화된 사용자의 패스워드 혹은 별표
+.TP
+.I UID
+숫자로 표현되는 사용자 id
+.TP
+.I GID
+이 사용자에 대한 주 그룹 ID, 숫자로 표현됨
+.TP
+.I GECOS
+이 필드는 선택적이고, 오직 정보적인 목적으로만 사용된다. 보통, 이는
+사용자의 전체 이름을 포함한다. GECOS는 일반 전자 통합 운영체제로서, 
+GE의 거대 시스템이 Honeywell에 판매된 GCOS,로 다시 명명되었다. Dennis
+Ritchie는 말하기를, 때때로 우리는 프린터 출력 혹은 일괄 처리 작업들을
+GCOS 머신으로 전송하였다. 패스워드 파일에서 GCOS 필드는 $IDENTcard에 대한 
+정보를 숨겨두는 장소이다.
+.TP
+.I directory 
+사용자의 $HOME 디렉토리
+.TP
+.I shell(쉘)
+로그인시 실행하는 프로그램(만일 비었다면, .BR /bin/sh을 사용한다.)
+만일 존재하지 않는 실행파일로 설정되었다면, 사용자는 .BR login (1)을 통해
+로그인 할 수 없을 것이다.
+
+.RE
+.SH 주의
+여러분이 사용자 그룹을 만들고 싶다면, GID는 이와 동일하여야 하며, 
+\fI/etc/group\fP내에 항목들이 있거나, 그룹이 존재하지 않아야 한다. 
+.PP
+암호화된 패스워드가 별표로 설정된 경우, 사용자는 .BR login (1)로 로그일 할 수 없지만, 
+.BR rlogin (1)을 사용하여 로그인할 수 있을 수도 있다. 존재하는 프로세스들을 실행하고,
+.BR rsh (1)
+혹은
+.BR cron (1)
+혹은
+.BR at (1)
+을 초기화시키거나, 메일 필터를 시작한다. 
+단순히 쉘 필드를 변경시켜서 계정을 잠그는 것은 똑같은 결과를 가져오고, 
+.BR su (1)의 사용을 허용한다..
+.SH 파일
+.I /etc/passwd
+.SH 관련 항목
+.BR passwd (1),
+.BR login (1),
+.BR su (1),
+.BR group (5),
+.BR shadow (5)
diff --git a/man/ko/su.1 b/man/ko/su.1
new file mode 100644 (file)
index 0000000..e509c70
--- /dev/null
@@ -0,0 +1,92 @@
+.TH SU 1 "GNU 쉘 유틸리티" "FSF" \" \-*\- nroff \-*\-
+.SH 이름
+su \- 사용자와 그룹 ID 를 교체하여 쉘을 실행한다
+.SH 개요
+.B su
+[\-flmp] [\-c 명령] [\-s 쉘] [\-\-login] [\-\-fast]
+[\-\-preserve\-environment] [\-\-command=명령] [\-\-shell=쉘] [\-]
+[\-\-help] [\-\-version] [사용자 [인수...]]
+.SH 설명
+이 맨페이지는 GNU 버전의
+.BR su 
+를 설명한다.
+.B su
+는 한 사용자가 잠시 다른 사용자가 될 수 있도록 해준다.
+실제 사용자 ID, 그룹 ID, USER의 보충적인 그룹으로 쉘을 실행한다.
+USER가 주어지지 않으면 기본적으로 수퍼유저인 root 로 설정된다.
+실행되는 쉘은 USER의 패스워드 목록에서 찾아오거나 없으면 /bin/sh 를 수행한다.
+만약 USER에 패스워드가 있다면
+.B su
+는 실제 사용자 ID 0 (수퍼유저)가 아닌 한 패스워드를 물어온다.
+.PP
+기본적으로,
+.B su
+는 현재 디렉토리를 변경하지 않는다. USER 의 패스워드 항목으로부터 `HOME',
+`SHELL' 등의 변수를 설정하고 만약 수퍼유저가 아니라면 `USER'와 `LOGNAME'을
+USER로 설정한다. 기본적으로 이 쉘은 로그인 쉘이 아니다.
+.PP
+만약 한 개 이상의 인수가 주어지면 쉘에 대한 인수로 전달된다.
+.PP
+.B su
+는 /bin/sh나 다른 쉘을 특별히 다루지는 않는다.
+(argv[0]를 "\-su"로 하고 \-c 를 특정 쉘로 지정하지 않는 한... )
+.PP
+syslog를 가지고 있는 시스템에서는,
+.B su
+가 실패하는 경우 보고를 하도록, 그리고 성공의 경우에는 선택적으로 보고하도록
+컴파일하면
+.B su
+가 syslog를 사용한다.
+.SS 옵션
+.TP
+.I "\-c COMMAND, \-\-command=COMMAND"
+대화형 쉘을 시작하지 않고 
+.I \-c
+옵션을 쉘에 주어서 한 개의 명령만을 수행하도록 한다.
+.TP
+.I "\-f, \-\-fast"
+쉘에
+.I \-f
+옵션을 전달한다.
+.B csh
+와
+.BR tcsh 
+에만 해당되는 것으로서,
+.I \-f
+옵션은 시작 화일(.cshrc)를 읽지 않도록 한다. 본쉘의 경우,
+.I \-f
+옵션은 화일 패턴 확장을 불능으로 설정하는 것으로서 일반적으로 그렇게 하지
+않는다.
+.TP
+.I "\-\-help"
+표준출력으로 사용법을 출력하고 정상적으로 종료한다.
+.TP
+.I "\-, \-l, \-\-login"
+쉘을 로그인 쉘로 만든다. 그 의미는 다음과 같다. `TERM', `HOME', `SHELL'
+(위에서 설명) 그리고 `USER', `LOGNAME'(위에서 설명하였듯 수퍼유저라 할 지라도
+설정된다)을 제외하고 나머지 환경 변수를 제거한다. 그리고 `PATH'를 컴파일 기본
+설정값으로 설정한다. USER의 홈 디렉토리로 이동한다. 쉘 이름에 "\-" 를 추가하여
+로그인 스크립트 화일들을 읽을 수 있게 할 수 있다.
+.TP
+.I "\-m, \-p, \-\-preserve\-environment"
+`HOME', `USER', `LOGNAME', `SHELL' 등의 환경변수값을 변경하지 않는다.
+만약 
+.B su
+를 실행하는 사용자가 수퍼유저이거나 사용자의 쉘이 제한된 쉘일 때는
+\fI/etc/passwd\fR에 기재된 USER의 쉘이 아니라 `SHELL' 환경변수에 설정된 쉘을
+실행한다.
+제한된 쉘이란 /etc/shells에 등록되어 있지 않거나 /etc/shells 화일이 존재하지
+않을 때 내장 컴파일된 목록에 들어있지 않는 경우를 말한다.
+이 옵션의 일부는 다음
+.I \-\-login
+과
+.IR \-\-shell 
+옵션에 의해 무시될 수 있다.
+.TP
+.I "\-s, \-\-shell shell"
+.B su
+를 실행하는 사용자가 수퍼유저가 아니거나 사용자의 쉘이 제한된 쉘일 때는
+\fI/etc/passwd\fR에 등록된 USER의 쉘을 수행하지 않고 지정한 쉘을 수행한다.
+.TP
+.I "\-\-version"
+표준출력으로 버전정보를 출력하고 정상적으로 종료한다.
diff --git a/man/ko/vigr.8 b/man/ko/vigr.8
new file mode 100644 (file)
index 0000000..ff72d7a
--- /dev/null
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/ko/vipw.8 b/man/ko/vipw.8
new file mode 100644 (file)
index 0000000..85b2dd9
--- /dev/null
@@ -0,0 +1,64 @@
+.\" Copyright (c) 1983, 1991 The Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\"    must display the following acknowledgement:
+.\"    This product includes software developed by the University of
+.\"    California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     from: @(#)vipw.8       6.7 (Berkeley) 3/16/91
+.\"    $Id: vipw.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.Dd March 16, 1991
+.Dt VIPW 8
+.Os BSD 4
+.Sh NAME
+.Nm vipw
+.Nd 패스워드 파일 편집
+.Sh 사용법
+.Nm vipw
+.Sh 설명
+.Nm Vipw
+명령은 /etc/passwd 파일을 잠그고(lock) 편집하고, 
+편집이 끝나면, /etc/passwd 파일을 잠금해제(unlock)한다.
+이미 /etc/passwd 파일이 잠겨 있으면, 다음에 사용하라고 
+메시지를 보여준다.
+\fBvipw\fR에서 사용하는 기본 편집기는 \fBvi(1)\fR이다.
+.Sh 환경변수
+\fBvipw\fR는 다음 환경 변수를 사용한다.
+.Bl -tag -width EDITOR
+.It Ev EDITOR
+사용할 편집기 지정. 초기값은 vi
+.El
+.Sh 관련 항목
+.Xr passwd 1 ,
+.Xr vi 1 ,
+.Xr passwd 5
+.Sh 발자취
+.Nm
+명령은 
+.Bx 4.0 
+에서 처음 나타났다.
diff --git a/man/lastlog.8 b/man/lastlog.8
new file mode 100644 (file)
index 0000000..e8c33e5
--- /dev/null
@@ -0,0 +1,92 @@
+'\" t
+.\"     Title: lastlog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "LASTLOG" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+lastlog \- reports the most recent login of all users or of a given user
+.SH "SYNOPSIS"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+
+\fBlastlog\fR
+formats and prints the contents of the last login log
+/var/log/lastlog
+file\&. The
+\fIlogin\-name\fR,
+\fIport\fR, and
+\fIlast login time\fR
+will be printed\&. The default (no flags) causes lastlog entries to be printed, sorted by their order in
+/etc/passwd\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBlastlog\fR
+command are:
+.PP
+\fB\-b\fR, \fB\-\-before\fR \fIDAYS\fR
+.RS 4
+Print only lastlog records older than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR \fIDAYS\fR
+.RS 4
+Print the lastlog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR \fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Print the lastlog record of the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+If the user has never logged in the message
+\fI** Never logged in**\fR
+will be displayed instead of the port and time\&.
+.PP
+Only the entries for the current users of the system will be displayed\&. Other entries may exist for users that were deleted previously\&.
+.SH "NOTE"
+.PP
+The
+lastlog
+file is a database which contains info on the last login of each user\&. You should not rotate it\&. It is a sparse file, so its size on the disk is usually much smaller than the one shown by "\fBls \-l\fR" (which can indicate a really big file if you have in
+passwd
+users with a high UID)\&. You can display its real size with "\fBls \-s\fR"\&.
+.SH "FILES"
+.PP
+/var/log/lastlog
+.RS 4
+Database times of previous user logins\&.
+.RE
+.SH "CAVEATS"
+.PP
+Large gaps in UID numbers will cause the lastlog program to run longer with no output to the screen (i\&.e\&. if in lastlog database there is no entries for users with UID between 170 and 800 lastlog will appear to hang as it processes entries with UIDs 171\-799)\&.
diff --git a/man/lastlog.8.xml b/man/lastlog.8.xml
new file mode 100644 (file)
index 0000000..9a83e98
--- /dev/null
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1992       , Julianne Frances Haugh
+   Copyright (c) 1992       , Phillip Street
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='lastlog.8'>
+  <!-- $Id: lastlog.8.xml 2513 2009-03-14 11:11:04Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>lastlog</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>lastlog</refname>
+    <refpurpose>reports the most recent login of all users or of a given user</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>lastlog</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      <command>lastlog</command> formats and prints the contents of the last
+      login log <filename>/var/log/lastlog</filename> file. The
+      <emphasis>login-name</emphasis>, <emphasis>port</emphasis>, and
+      <emphasis>last login time</emphasis> will be printed.  The default (no
+      flags) causes lastlog entries to be printed, sorted by their order in
+      <filename>/etc/passwd</filename>.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>lastlog</command> command are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-b</option>, <option>--before</option> <replaceable>DAYS</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Print only lastlog records older than <emphasis remap='I'>DAYS</emphasis>.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-h</option>, <option>--help</option>
+       </term>
+       <listitem>
+         <para>Display help message and exit.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-t</option>, <option>--time</option>
+         <replaceable>DAYS</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Print the lastlog records more recent than
+           <emphasis remap='I'>DAYS</emphasis>.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-u</option>, <option>--user</option>
+         <replaceable>LOGIN</replaceable>|<replaceable>RANGE</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Print the lastlog record of the specified user(s).
+         </para>
+         <para>
+           The users can be specified by a login name, a numerical user ID,
+           or a <replaceable>RANGE</replaceable> of users. This
+           <replaceable>RANGE</replaceable> of users can be specified with a
+           min and max values (<replaceable>UID_MIN-UID_MAX</replaceable>), a
+           max value (<replaceable>-UID_MAX</replaceable>), or a min value
+           (<replaceable>UID_MIN-</replaceable>).
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>
+      If the user has never logged in the message <emphasis>** Never logged
+      in**</emphasis> will be displayed instead of the port and time.
+    </para>
+
+    <para>
+      Only the entries for the current users of the system will be
+      displayed.  Other entries may exist for users that were deleted
+      previously.
+    </para>
+  </refsect1>
+
+  <refsect1 id='note'>
+    <title>NOTE</title>
+    <para>
+      The <filename>lastlog</filename> file is a database which contains info
+      on the last login of each user. You should not rotate it. It is a sparse
+      file, so its size on the disk is usually much smaller than the one shown
+      by "<command>ls -l</command>" (which can indicate a really big file if
+      you have in <filename>passwd</filename> users with a high UID). You can
+      display its real size with "<command>ls -s</command>".
+    </para>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/var/log/lastlog</filename></term>
+       <listitem>
+         <para>Database times of previous user logins.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      Large gaps in UID numbers will cause the lastlog program to run
+      longer with no output to the screen (i.e. if in lastlog database there
+      is no entries for users with UID between 170 and 800 lastlog will appear
+      to hang as it processes entries with UIDs 171-799).
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/limits.5 b/man/limits.5
new file mode 100644 (file)
index 0000000..ac9c524
--- /dev/null
@@ -0,0 +1,252 @@
+'\" t
+.\"     Title: limits
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: English
+.\"
+.TH "LIMITS" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+limits \- resource limits definition
+.SH "DESCRIPTION"
+.PP
+The
+\fIlimits\fR
+file (/etc/limits
+by default or LIMITS_FILE defined
+config\&.h) describes the resource limits you wish to impose\&. It should be owned by root and readable by root account only\&.
+.PP
+By default no quota is imposed on \'root\'\&. In fact, there is no way to impose limits via this procedure to root\-equiv accounts (accounts with UID 0)\&.
+.PP
+Each line describes a limit for a user in the form:
+.PP
+
+\fIuser LIMITS_STRING\fR
+.PP
+The
+\fILIMITS_STRING\fR
+is a string of a concatenated list of resource limits\&. Each limit consists of a letter identifier followed by a numerical limit\&.
+.PP
+The valid identifiers are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+A: max address space (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+C: max core file size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+D: max data size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+F: maximum filesize (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+M: max locked\-in\-memory address space (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+N: max number of open files
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+R: max resident set size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+S: max stack size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+T: max CPU time (MIN)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+U: max number of processes
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+K: file creation mask, set by
+\fBumask\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+L: max number of logins for this user
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+P: process priority, set by
+\fBsetpriority\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+I: max nice value (0\&.\&.39 which translates to 20\&.\&.\-19)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+O: max real time priority
+.RE
+.PP
+For example,
+\fIL2D2048N5\fR
+is a valid
+\fILIMITS_STRING\fR\&. For reading convenience, the following entries are equivalent:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      username L2D2048N5
+      username L2 D2048 N5
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Be aware that after
+\fIusername\fR
+the rest of the line is considered a limit string, thus comments are not allowed\&. A invalid limits string will be rejected (not considered) by the
+\fBlogin\fR
+program\&.
+.PP
+The default entry is denoted by username "\fI*\fR"\&. If you have multiple
+\fIdefault\fR
+entries in your
+\fILIMITS_FILE\fR, then the last one will be used as the default entry\&.
+.PP
+To completely disable limits for a user, a single dash "\fI\-\fR" will do\&.
+.PP
+Also, please note that all limit settings are set PER LOGIN\&. They are not global, nor are they permanent\&. Perhaps global limits will come, but for now this will have to do ;)
+.SH "FILES"
+.PP
+/etc/limits
+.RS 4
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBlogin\fR(1),
+\fBsetpriority\fR(2),
+\fBsetrlimit\fR(2)\&.
diff --git a/man/limits.5.xml b/man/limits.5.xml
new file mode 100644 (file)
index 0000000..8af1d0e
--- /dev/null
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 2001 - 2007, Tomasz Kłoczko
+   Copyright (c) 2005 - 2006, Yuri Kozlov
+   Copyright (c) 2005 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='limits.5'>
+  <!-- $Id: limits.5.xml 2481 2009-01-19 09:51:53Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>limits</refentrytitle>
+    <manvolnum>5</manvolnum>
+    <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>limits</refname>
+    <refpurpose>resource limits definition</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <emphasis remap='I'>limits</emphasis> file 
+      (<filename>/etc/limits</filename> by default
+      or LIMITS_FILE defined <filename>config.h</filename>) describes 
+      the resource limits you wish to impose. It should be owned by 
+      root and readable by root account only.
+    </para>
+
+    <para>
+      By default no quota is imposed on 'root'. In fact, there is no way to
+      impose limits via this procedure to root-equiv accounts (accounts with
+      UID 0).
+    </para>
+
+    <para>Each line describes a limit for a user in the form:</para>
+
+    <para>
+      <emphasis remap='I'>user LIMITS_STRING</emphasis>
+    </para>
+
+    <para>
+      The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated
+      list of resource limits. Each limit consists of a letter identifier
+      followed by a numerical limit.
+    </para>
+
+    <para>The valid identifiers are:</para>
+
+    <itemizedlist>
+      <listitem><para>A: max address space (KB)</para></listitem>
+      <listitem><para>C: max core file size (KB)</para></listitem>
+      <listitem><para>D: max data size (KB)</para></listitem>
+      <listitem><para>F: maximum filesize (KB)</para></listitem>
+      <listitem><para>M: max locked-in-memory address space (KB)</para></listitem>
+      <listitem><para>N: max number of open files</para></listitem>
+      <listitem><para>R: max resident set size (KB)</para></listitem>
+      <listitem><para>S: max stack size (KB)</para></listitem>
+      <listitem><para>T: max CPU time (MIN)</para></listitem>
+      <listitem><para>U: max number of processes</para></listitem>
+      <listitem><para>K: file creation mask, set by
+       <citerefentry>
+         <refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum>
+       </citerefentry>.</para>
+      </listitem>
+      <listitem><para>L: max number of logins for this user</para></listitem>
+      <listitem><para>P: process priority, set by
+       <citerefentry>
+         <refentrytitle>setpriority</refentrytitle><manvolnum>2</manvolnum>
+       </citerefentry>.</para>
+      </listitem>
+      <listitem><para>I: max nice value (0..39 which translates to
+      20..-19)</para></listitem>
+      <listitem><para>O: max real time priority</para></listitem>
+    </itemizedlist>
+
+    <para>
+      For example, <emphasis remap='I'>L2D2048N5</emphasis> is a valid
+      <emphasis>LIMITS_STRING</emphasis>. For reading convenience, the
+      following entries are equivalent:
+    </para>
+
+    <programlisting>
+      username L2D2048N5
+      username L2 D2048 N5
+    </programlisting>
+
+    <para>
+      Be aware that after <emphasis remap='I'>username</emphasis> the rest
+      of the line is considered a limit string, thus comments are not
+      allowed. A invalid limits string will be rejected (not considered) by
+      the <command>login</command> program.
+    </para>
+
+    <para>
+      The default entry is denoted by username "<emphasis>*</emphasis>". If
+      you have multiple <emphasis remap='I'>default</emphasis> entries in
+      your <emphasis>LIMITS_FILE</emphasis>, then the last one will be used
+      as the default entry.
+    </para>
+
+    <para>
+      To completely disable limits for a user, a single dash
+      "<emphasis>-</emphasis>" will do.
+    </para>
+
+    <para>
+      Also, please note that all limit settings are set PER LOGIN. They are
+      not global, nor are they permanent. Perhaps global limits will come,
+      but for now this will have to do ;)
+    </para>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/limits</filename></term>
+       <listitem><para></para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>setpriority</refentrytitle><manvolnum>2</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>setrlimit</refentrytitle><manvolnum>2</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/login.1 b/man/login.1
new file mode 100644 (file)
index 0000000..2654658
--- /dev/null
@@ -0,0 +1,476 @@
+'\" t
+.\"     Title: login
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: English
+.\"
+.TH "LOGIN" "1" "07/24/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+login \- begin session on the system
+.SH "SYNOPSIS"
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] [\fIusername\fR] [\fIENV=VAR\fR...]
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIhost\fR] \-f \fIusername\fR
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] \-r\ \fIhost\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBlogin\fR
+program is used to establish a new session with the system\&. It is normally invoked automatically by responding to the
+\fIlogin:\fR
+prompt on the user\'s terminal\&.
+\fBlogin\fR
+may be special to the shell and may not be invoked as a sub\-process\&. When called from a shell,
+\fBlogin\fR
+should be executed as
+\fBexec login\fR
+which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller)\&. Attempting to execute
+\fBlogin\fR
+from any shell but the login shell will produce an error message\&.
+.PP
+The user is then prompted for a password, where appropriate\&. Echoing is disabled to prevent revealing the password\&. Only a small number of password failures are permitted before
+\fBlogin\fR
+exits and the communications link is severed\&.
+.PP
+If password aging has been enabled for your account, you may be prompted for a new password before proceeding\&. You will be forced to provide your old password and the new password before continuing\&. Please refer to
+\fBpasswd\fR(1)
+for more information\&.
+.PP
+After a successful login, you will be informed of any system messages and the presence of mail\&. You may turn off the printing of the system message file,
+/etc/motd, by creating a zero\-length file
+\&.hushlogin
+in your login directory\&. The mail message will be one of "\fIYou have new mail\&.\fR", "\fIYou have mail\&.\fR", or "\fINo Mail\&.\fR" according to the condition of your mailbox\&.
+.PP
+Your user and group ID will be set according to their values in the
+/etc/passwd
+file\&. The value for
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$PATH\fR,
+\fB$LOGNAME\fR, and
+\fB$MAIL\fR
+are set according to the appropriate fields in the password entry\&. Ulimit, umask and nice values may also be set according to entries in the GECOS field\&.
+.PP
+On some installations, the environmental variable
+\fB$TERM\fR
+will be initialized to the terminal type on your tty line, as specified in
+/etc/ttytype\&.
+.PP
+An initialization script for your command interpreter may also be executed\&. Please see the appropriate manual section for more information on this function\&.
+.PP
+A subsystem login is indicated by the presence of a "*" as the first character of the login shell\&. The given home directory will be used as the root of a new file system which the user is actually logged into\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.SH "OPTIONS"
+.PP
+\fB\-f\fR
+.RS 4
+Do not perform authentication, user is preauthenticated\&.
+.sp
+Note: In that case,
+\fIusername\fR
+is mandatory\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+Name of the remote host for this login\&.
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+Preserve environment\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Perform autologin protocol for rlogin\&.
+.RE
+.PP
+The
+\fB\-r\fR,
+\fB\-h\fR
+and
+\fB\-f\fR
+options are only used when
+\fBlogin\fR
+is invoked by root\&.
+.SH "CAVEATS"
+.PP
+This version of
+\fBlogin\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.PP
+The location of files is subject to differences in system configuration\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.PP
+As with any program,
+\fBlogin\fR\'s appearance can be faked\&. If non\-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine\&. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Delay in seconds before being allowed another attempt after a login failure\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\' shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+If defined, login failures will be logged in this file in a utmp format\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\'s name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\'s home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+If defined, this file will be displayed before each login prompt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of /var/log/lastlog login time info\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Maximum number of login retries in case of bad password\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Max time in seconds for login\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Enable logging of successful logins\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Enable display of unknown usernames when login failures are recorded\&.
+.sp
+Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in /etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\'s primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILES"
+.PP
+/var/run/utmp
+.RS 4
+List of current login sessions\&.
+.RE
+.PP
+/var/log/wtmp
+.RS 4
+List of previous login sessions\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/motd
+.RS 4
+System message of the day file\&.
+.RE
+.PP
+/etc/nologin
+.RS 4
+Prevent non\-root users from logging in\&.
+.RE
+.PP
+/etc/ttytype
+.RS 4
+List of terminal types\&.
+.RE
+.PP
+$HOME/\&.hushlogin
+.RS 4
+Suppress printing of system messages\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBmail\fR(1),
+\fBpasswd\fR(1),
+\fBsh\fR(1),
+\fBsu\fR(1),
+\fBlogin.defs\fR(5),
+\fBnologin\fR(5),
+\fBpasswd\fR(5),
+\fBsecuretty\fR(5),
+\fBgetty\fR(8)\&.
diff --git a/man/login.1.xml b/man/login.1.xml
new file mode 100644 (file)
index 0000000..2bc2342
--- /dev/null
@@ -0,0 +1,407 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1989 - 1994, Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY CONSOLE               SYSTEM "login.defs.d/CONSOLE.xml">
+<!ENTITY CONSOLE_GROUPS        SYSTEM "login.defs.d/CONSOLE_GROUPS.xml">
+<!ENTITY DEFAULT_HOME          SYSTEM "login.defs.d/DEFAULT_HOME.xml">
+<!ENTITY ENV_HZ                SYSTEM "login.defs.d/ENV_HZ.xml">
+<!ENTITY ENV_PATH              SYSTEM "login.defs.d/ENV_PATH.xml">
+<!ENTITY ENV_SUPATH            SYSTEM "login.defs.d/ENV_SUPATH.xml">
+<!ENTITY ENV_TZ                SYSTEM "login.defs.d/ENV_TZ.xml">
+<!ENTITY ENVIRON_FILE          SYSTEM "login.defs.d/ENVIRON_FILE.xml">
+<!ENTITY ERASECHAR             SYSTEM "login.defs.d/ERASECHAR.xml">
+<!ENTITY FAIL_DELAY            SYSTEM "login.defs.d/FAIL_DELAY.xml">
+<!ENTITY FAILLOG_ENAB          SYSTEM "login.defs.d/FAILLOG_ENAB.xml">
+<!ENTITY FAKE_SHELL            SYSTEM "login.defs.d/FAKE_SHELL.xml">
+<!ENTITY FTMP_FILE             SYSTEM "login.defs.d/FTMP_FILE.xml">
+<!ENTITY HUSHLOGIN_FILE        SYSTEM "login.defs.d/HUSHLOGIN_FILE.xml">
+<!ENTITY ISSUE_FILE            SYSTEM "login.defs.d/ISSUE_FILE.xml">
+<!ENTITY KILLCHAR              SYSTEM "login.defs.d/KILLCHAR.xml">
+<!ENTITY LASTLOG_ENAB          SYSTEM "login.defs.d/LASTLOG_ENAB.xml">
+<!ENTITY LOGIN_RETRIES         SYSTEM "login.defs.d/LOGIN_RETRIES.xml">
+<!ENTITY LOGIN_STRING          SYSTEM "login.defs.d/LOGIN_STRING.xml">
+<!ENTITY LOGIN_TIMEOUT         SYSTEM "login.defs.d/LOGIN_TIMEOUT.xml">
+<!ENTITY LOG_OK_LOGINS         SYSTEM "login.defs.d/LOG_OK_LOGINS.xml">
+<!ENTITY LOG_UNKFAIL_ENAB      SYSTEM "login.defs.d/LOG_UNKFAIL_ENAB.xml">
+<!ENTITY MAIL_CHECK_ENAB       SYSTEM "login.defs.d/MAIL_CHECK_ENAB.xml">
+<!ENTITY MAIL_DIR              SYSTEM "login.defs.d/MAIL_DIR.xml">
+<!ENTITY MOTD_FILE             SYSTEM "login.defs.d/MOTD_FILE.xml">
+<!ENTITY NOLOGINS_FILE         SYSTEM "login.defs.d/NOLOGINS_FILE.xml">
+<!ENTITY PORTTIME_CHECKS_ENAB  SYSTEM "login.defs.d/PORTTIME_CHECKS_ENAB.xml">
+<!ENTITY QUOTAS_ENAB           SYSTEM "login.defs.d/QUOTAS_ENAB.xml">
+<!ENTITY TTYGROUP              SYSTEM "login.defs.d/TTYGROUP.xml">
+<!ENTITY TTYTYPE_FILE          SYSTEM "login.defs.d/TTYTYPE_FILE.xml">
+<!ENTITY ULIMIT                SYSTEM "login.defs.d/ULIMIT.xml">
+<!ENTITY UMASK                 SYSTEM "login.defs.d/UMASK.xml">
+<!ENTITY USERGROUPS_ENAB       SYSTEM "login.defs.d/USERGROUPS_ENAB.xml">
+]>
+<refentry id='login.1'>
+  <!--  $Id: login.1.xml 3010 2009-06-04 17:25:18Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>login</refentrytitle>
+    <manvolnum>1</manvolnum>
+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>login</refname>
+    <refpurpose>begin session on the system</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>login</command>
+      <arg choice='opt'>-p</arg>
+      <arg choice='opt'>-h <replaceable>host</replaceable></arg>
+      <arg choice='opt'>
+      <replaceable>username</replaceable></arg>
+      <arg choice='opt' rep='repeat'> <replaceable>ENV=VAR</replaceable></arg>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>login</command>
+      <arg choice='opt'>-p</arg>
+      <arg choice='opt'>-h <replaceable>host</replaceable></arg>
+      <arg choice='plain'>-f</arg>
+      <arg choice='plain'><replaceable>username</replaceable></arg>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>login</command>
+      <arg choice='opt'>-p</arg>
+      <arg choice='plain'>-r <replaceable>host</replaceable></arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>login</command> program is used to establish a new session
+      with the system. It is normally invoked automatically by responding to
+      the <emphasis remap='I'>login:</emphasis> prompt on the user's
+      terminal. <command>login</command> may be special to the shell and may
+      not be invoked as a sub-process. When called from a shell,
+      <command>login</command> should be executed as
+      <emphasis remap='B'>exec login</emphasis> which will cause the user
+      to exit from the current shell (and thus will prevent the new logged
+      in user to return to the session of the caller). Attempting to
+      execute <command>login</command> from any shell but the login shell
+      will produce an error message.
+    </para>
+
+    <para>
+      The user is then prompted for a password, where appropriate. Echoing
+      is disabled to prevent revealing the password. Only a small number of
+      password failures are permitted before <command>login</command> exits
+      and the communications link is severed.
+    </para>
+
+    <para>
+      If password aging has been enabled for your account, you may be
+      prompted for a new password before proceeding. You will be forced to
+      provide your old password and the new password before continuing. 
+      Please refer to <citerefentry>
+      <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry> for more information.
+    </para>
+
+    <para>
+      After a successful login, you will be informed of any system messages
+      and the presence of mail. You may turn off the printing of the system
+      message file, <filename>/etc/motd</filename>, by creating a
+      zero-length file <filename>.hushlogin</filename> in your login directory. 
+      The mail message will be one of "<emphasis>You have new
+      mail.</emphasis>", "<emphasis>You have mail.</emphasis>", or
+      "<emphasis>No Mail.</emphasis>" according to the condition of your
+      mailbox.
+    </para>
+
+    <para>
+      Your user and group ID will be set according to their values in the
+      <filename>/etc/passwd</filename> file. The value for
+      <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$PATH</envar>,
+      <envar>$LOGNAME</envar>, and <envar>$MAIL</envar> are set according
+      to the appropriate fields in the password entry. Ulimit, umask and nice
+      values may also be set according to entries in the GECOS field.
+    </para>
+
+    <para>
+      On some installations, the environmental variable
+      <envar>$TERM</envar> will be initialized to the terminal type on
+      your tty line, as specified in <filename>/etc/ttytype</filename>.
+    </para>
+
+    <para>
+      An initialization script for your command interpreter may also be
+      executed. Please see the appropriate manual section for more
+      information on this function.
+    </para>
+
+    <para>
+      A subsystem login is indicated by the presence of a "*" as the first
+      character of the login shell. The given home directory will be used as
+      the root of a new file system which the user is actually logged into.
+    </para>
+
+    <para>
+      The <command>login</command> program is NOT responsible for removing
+      users from the utmp file. It is the responsibility of
+      <citerefentry><refentrytitle>getty</refentrytitle>
+      <manvolnum>8</manvolnum></citerefentry> and
+      <citerefentry><refentrytitle>init</refentrytitle>
+      <manvolnum>8</manvolnum></citerefentry> to clean up apparent ownership
+      of a terminal session. If you use <command>login</command> from the
+      shell prompt without <command>exec</command>, the user you use will
+      continue to appear to be logged in even after you log out of the
+      "subsession".
+    </para>
+
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-f</option>
+       </term>
+       <listitem>
+         <para>
+           Do not perform authentication, user is preauthenticated.
+         </para>
+         <para>
+           Note: In that case, <replaceable>username</replaceable> is
+           mandatory.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-h</option>
+       </term>
+       <listitem>
+         <para>Name of the remote host for this login.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-p</option>
+       </term>
+       <listitem>
+         <para>Preserve environment.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-r</option>
+       </term>
+       <listitem>
+         <para>Perform autologin protocol for rlogin.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>
+      The <option>-r</option>, <option>-h</option> and <option>-f</option>
+      options are only used when <command>login</command> is invoked by
+      root.
+    </para>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      This version of <command>login</command> has many compilation options,
+      only some of which may be in use at any particular site.
+    </para>
+
+    <para>The location of files is subject to differences in system
+      configuration.
+    </para>
+
+    <para>
+      The <command>login</command> program is NOT responsible for removing
+      users from the utmp file. It is the responsibility of <citerefentry>
+      <refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry> and <citerefentry>
+      <refentrytitle>init</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry> to clean up apparent ownership of a terminal session. 
+      If you use <command>login</command> from the shell prompt without
+      <command>exec</command>, the user you use will continue to appear to
+      be logged in even after you log out of the "subsession".
+    </para>
+
+    <para>
+      As with any program, <command>login</command>'s appearance can be faked. 
+      If non-trusted users have physical access to a machine, an
+      attacker could use this to obtain the password of the next person
+      coming to sit in front of the machine. Under Linux, the SAK mechanism can be
+      used by users to initiate a trusted path and prevent this kind of
+      attack.
+    </para>
+
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &CONSOLE;
+      &CONSOLE_GROUPS;
+      &DEFAULT_HOME;
+      <phrase condition="no_pam">&ENV_HZ;</phrase>
+      <phrase>&ENV_PATH;</phrase>
+      <phrase>&ENV_SUPATH;</phrase>
+      &ENV_TZ;
+      &ENVIRON_FILE;
+      &ERASECHAR;
+      &FAIL_DELAY;
+      &FAILLOG_ENAB;
+      &FAKE_SHELL;
+      &FTMP_FILE;
+      &HUSHLOGIN_FILE;
+      &ISSUE_FILE;
+      &KILLCHAR;
+      &LASTLOG_ENAB;
+      &LOGIN_RETRIES;
+      &LOGIN_STRING;
+      &LOGIN_TIMEOUT;
+      &LOG_OK_LOGINS;
+      &LOG_UNKFAIL_ENAB;
+      &MAIL_CHECK_ENAB;
+      <phrase condition="no_pam">&MAIL_DIR;</phrase>
+      &MOTD_FILE;
+      &NOLOGINS_FILE;
+      &PORTTIME_CHECKS_ENAB;
+      &QUOTAS_ENAB;
+      &TTYGROUP; <!-- documents also TTYPERM -->
+      &TTYTYPE_FILE;
+      &ULIMIT;
+      <phrase condition="no_pam">&UMASK;</phrase>
+      &USERGROUPS_ENAB;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/var/run/utmp</filename></term>
+       <listitem>
+         <para>List of current login sessions.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/var/log/wtmp</filename></term>
+       <listitem>
+         <para>List of previous login sessions.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/motd</filename></term>
+       <listitem>
+         <para>System message of the day file.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/nologin</filename></term>
+       <listitem>
+         <para>Prevent non-root users from logging in.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/ttytype</filename></term>
+       <listitem>
+         <para>List of terminal types.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>$HOME/.hushlogin</filename></term>
+       <listitem>
+         <para>Suppress printing of system messages.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>nologin</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>securetty</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/login.access.5 b/man/login.access.5
new file mode 100644 (file)
index 0000000..d6037a1
--- /dev/null
@@ -0,0 +1,60 @@
+'\" t
+.\"     Title: login.access
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: English
+.\"
+.TH "LOGIN\&.ACCESS" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+login.access \- login access control table
+.SH "DESCRIPTION"
+.PP
+The
+\fIlogin\&.access\fR
+file specifies (user, host) combinations and/or (user, tty) combinations for which a login will be either accepted or refused\&.
+.PP
+When someone logs in, the
+\fIlogin\&.access\fR
+is scanned for the first entry that matches the (user, host) combination, or, in case of non\-networked logins, the first entry that matches the (user, tty) combination\&. The permissions field of that table entry determines whether the login will be accepted or refused\&.
+.PP
+Each line of the login access control table has three fields separated by a ":" character:
+.PP
+
+\fIpermission\fR:\fIusers\fR:\fIorigins\fR
+.PP
+The first field should be a "\fI+\fR" (access granted) or "\fI\-\fR" (access denied) character\&. The second field should be a list of one or more login names, group names, or
+\fIALL\fR
+(always matches)\&. The third field should be a list of one or more tty names (for non\-networked logins), host names, domain names (begin with "\&."), host addresses, internet network numbers (end with "\&."),
+\fIALL\fR
+(always matches) or
+\fILOCAL\fR
+(matches any string that does not contain a "\&." character)\&. If you run NIS you can use @netgroupname in host or user patterns\&.
+.PP
+The
+\fIEXCEPT\fR
+operator makes it possible to write very compact rules\&.
+.PP
+The group file is searched only when a name does not match that of the logged\-in user\&. Only groups are matched in which users are explicitly listed: the program does not look at a user\'s primary group id value\&.
+.SH "FILES"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBlogin\fR(1)\&.
diff --git a/man/login.access.5.xml b/man/login.access.5.xml
new file mode 100644 (file)
index 0000000..45a6b58
--- /dev/null
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1996 - 2000, Marek Michałkiewicz
+   Copyright (c) 2001 - 2006, Tomasz Kłoczko
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='login.access.5'>
+  <!-- $Id: login.access.5.xml 2435 2008-10-11 11:44:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>login.access</refentrytitle>
+    <manvolnum>5</manvolnum>
+    <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>login.access</refname>
+    <refpurpose>login access control table</refpurpose>
+  </refnamediv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <emphasis remap='I'>login.access</emphasis> file specifies (user,
+      host) combinations and/or (user, tty) combinations for which a login
+      will be either accepted or refused.
+    </para>
+
+    <para>
+      When someone logs in, the <emphasis remap='I'>login.access</emphasis>
+      is scanned for the first entry that matches the (user, host)
+      combination, or, in case of non-networked logins, the first entry that
+      matches the (user, tty) combination. The permissions field of that
+      table entry determines whether the login will be accepted or refused.
+    </para>
+
+    <para>
+      Each line of the login access control table has three fields separated
+      by a ":" character:
+    </para>
+
+    <para>
+      <emphasis remap='I'>permission</emphasis>:<emphasis remap='I'>users</emphasis>:<emphasis remap='I'>origins</emphasis>
+    </para>
+
+    <para>
+      The first field should be a "<emphasis>+</emphasis>" (access granted)
+      or "<emphasis>-</emphasis>" (access denied) character. The second
+      field should be a list of one or more login names, group names, or
+      <emphasis>ALL</emphasis> (always matches). The third field should be a
+      list of one or more tty names (for non-networked logins), host names,
+      domain names (begin with "<literal>.</literal>"), host addresses,
+      internet network numbers (end with "<literal>.</literal>"),
+      <emphasis>ALL</emphasis> (always matches) or
+      <emphasis>LOCAL</emphasis> (matches any string that does not contain a
+      "<literal>.</literal>" character). If you run NIS you can use
+      @netgroupname in host or user patterns.
+    </para>
+
+    <para>
+      The <emphasis>EXCEPT</emphasis> operator makes it possible to write
+      very compact rules.
+    </para>
+
+    <para>
+      The group file is searched only when a name does not match that of the
+      logged-in user. Only groups are matched in which users are explicitly
+      listed: the program does not look at a user's primary group id value.
+    </para>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/login.defs.5 b/man/login.defs.5
new file mode 100644 (file)
index 0000000..8d2b852
--- /dev/null
@@ -0,0 +1,796 @@
+'\" t
+.\"     Title: login.defs
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: English
+.\"
+.TH "LOGIN\&.DEFS" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+login.defs \- shadow password suite configuration
+.SH "DESCRIPTION"
+.PP
+The
+/etc/login\&.defs
+file defines the site\-specific configuration for the shadow password suite\&. This file is required\&. Absence of this file will not prevent system operation, but will probably result in undesirable operation\&.
+.PP
+This file is a readable text file, each line of the file describing one configuration parameter\&. The lines consist of a configuration name and value, separated by whitespace\&. Blank lines and comment lines are ignored\&. Comments are introduced with a "#" pound sign and the pound sign must be the first non\-white character of the line\&.
+.PP
+Parameter values may be of four types: strings, booleans, numbers, and long numbers\&. A string is comprised of any printable characters\&. A boolean should be either the value
+\fIyes\fR
+or
+\fIno\fR\&. An undefined boolean parameter or one with a value other than these will be given a
+\fIno\fR
+value\&. Numbers (both regular and long) may be either decimal values, octal values (precede the value with
+\fI0\fR) or hexadecimal values (precede the value with
+\fI0x\fR)\&. The maximum value of the regular and long numeric parameters is machine\-dependent\&.
+.PP
+The following configuration items are provided:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indicate if a home directory should be created by default for new users\&.
+.sp
+This setting does not apply to system users, and can be overriden on the command line\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Delay in seconds before being allowed another attempt after a login failure\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\' shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+If defined, login failures will be logged in this file in a utmp format\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\'s name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\'s home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+If defined, this file will be displayed before each login prompt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of /var/log/lastlog login time info\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Enable logging of successful logins\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Enable display of unknown usernames when login failures are recorded\&.
+.sp
+Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Maximum number of login retries in case of bad password\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Max time in seconds for login\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+
+\fBPASS_MAX_DAYS\fR,
+\fBPASS_MIN_DAYS\fR
+and
+\fBPASS_WARN_AGE\fR
+are only used at the time of account creation\&. Any changes to these settings won\'t affect existing accounts\&.
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\'t change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in /etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+If defined, all su activity is logged to this file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\'t exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\'s primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+If defined, this command is run when removing a user\&. It should remove any at/cron/print jobs etc\&. owned by the user to be removed (passed as the first argument)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\'s cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+       echo "Usage: $0 username"
+       exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+      
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "CROSS REFERENCES"
+.PP
+The following cross references show which programs in the shadow password suite use which parameters\&.
+.PP
+chfn
+.RS 4
+
+CHFN_AUTH
+CHFN_RESTRICT
+LOGIN_STRING
+.RE
+.PP
+chgpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chpasswd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chsh
+.RS 4
+CHSH_AUTH LOGIN_STRING
+.RE
+.PP
+gpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+groupadd
+.RS 4
+GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN
+.RE
+.PP
+groupdel
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmems
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmod
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpck
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpunconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+login
+.RS 4
+
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE
+ERASECHAR FAIL_DELAY
+FAILLOG_ENAB
+FAKE_SHELL
+FTMP_FILE
+HUSHLOGIN_FILE
+ISSUE_FILE
+KILLCHAR
+LASTLOG_ENAB
+LOGIN_RETRIES
+LOGIN_STRING
+LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
+MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB
+TTYGROUP TTYPERM TTYTYPE_FILE
+ULIMIT UMASK
+USERGROUPS_ENAB
+.RE
+.PP
+newgrp / sg
+.RS 4
+SYSLOG_SG_ENAB
+.RE
+.PP
+newusers
+.RS 4
+ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+passwd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+pwck
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+pwconv
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+su
+.RS 4
+
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENVIRON_FILE
+ENV_PATH ENV_SUPATH
+ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB
+SULOG_FILE SU_NAME
+SU_WHEEL_ONLY
+SYSLOG_SU_ENAB
+USERGROUPS_ENAB
+.RE
+.PP
+sulogin
+.RS 4
+ENV_HZ
+ENV_TZ
+.RE
+.PP
+useradd
+.RS 4
+CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+userdel
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB
+.RE
+.PP
+usermod
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBpam\fR(8)\&.
diff --git a/man/login.defs.5.xml b/man/login.defs.5.xml
new file mode 100644 (file)
index 0000000..2cec912
--- /dev/null
@@ -0,0 +1,493 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN" 
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY CHFN_AUTH             SYSTEM "login.defs.d/CHFN_AUTH.xml">
+<!ENTITY CHFN_RESTRICT         SYSTEM "login.defs.d/CHFN_RESTRICT.xml">
+<!ENTITY CHSH_AUTH             SYSTEM "login.defs.d/CHSH_AUTH.xml">
+<!ENTITY CONSOLE               SYSTEM "login.defs.d/CONSOLE.xml">
+<!ENTITY CONSOLE_GROUPS        SYSTEM "login.defs.d/CONSOLE_GROUPS.xml">
+<!ENTITY CREATE_HOME           SYSTEM "login.defs.d/CREATE_HOME.xml">
+<!ENTITY DEFAULT_HOME          SYSTEM "login.defs.d/DEFAULT_HOME.xml">
+<!ENTITY ENCRYPT_METHOD        SYSTEM "login.defs.d/ENCRYPT_METHOD.xml">
+<!ENTITY ENV_HZ                SYSTEM "login.defs.d/ENV_HZ.xml">
+<!ENTITY ENV_PATH              SYSTEM "login.defs.d/ENV_PATH.xml">
+<!ENTITY ENV_SUPATH            SYSTEM "login.defs.d/ENV_SUPATH.xml">
+<!ENTITY ENV_TZ                SYSTEM "login.defs.d/ENV_TZ.xml">
+<!ENTITY ENVIRON_FILE          SYSTEM "login.defs.d/ENVIRON_FILE.xml">
+<!ENTITY ERASECHAR             SYSTEM "login.defs.d/ERASECHAR.xml">
+<!ENTITY FAIL_DELAY            SYSTEM "login.defs.d/FAIL_DELAY.xml">
+<!ENTITY FAILLOG_ENAB          SYSTEM "login.defs.d/FAILLOG_ENAB.xml">
+<!ENTITY FAKE_SHELL            SYSTEM "login.defs.d/FAKE_SHELL.xml">
+<!ENTITY FTMP_FILE             SYSTEM "login.defs.d/FTMP_FILE.xml">
+<!ENTITY GID_MAX               SYSTEM "login.defs.d/GID_MAX.xml">
+<!ENTITY HUSHLOGIN_FILE        SYSTEM "login.defs.d/HUSHLOGIN_FILE.xml">
+<!ENTITY ISSUE_FILE            SYSTEM "login.defs.d/ISSUE_FILE.xml">
+<!ENTITY KILLCHAR              SYSTEM "login.defs.d/KILLCHAR.xml">
+<!ENTITY LASTLOG_ENAB          SYSTEM "login.defs.d/LASTLOG_ENAB.xml">
+<!ENTITY LOG_OK_LOGINS         SYSTEM "login.defs.d/LOG_OK_LOGINS.xml">
+<!ENTITY LOG_UNKFAIL_ENAB      SYSTEM "login.defs.d/LOG_UNKFAIL_ENAB.xml">
+<!ENTITY LOGIN_RETRIES         SYSTEM "login.defs.d/LOGIN_RETRIES.xml">
+<!ENTITY LOGIN_STRING          SYSTEM "login.defs.d/LOGIN_STRING.xml">
+<!ENTITY LOGIN_TIMEOUT         SYSTEM "login.defs.d/LOGIN_TIMEOUT.xml">
+<!ENTITY MAIL_CHECK_ENAB       SYSTEM "login.defs.d/MAIL_CHECK_ENAB.xml">
+<!ENTITY MAIL_DIR              SYSTEM "login.defs.d/MAIL_DIR.xml">
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!ENTITY MD5_CRYPT_ENAB        SYSTEM "login.defs.d/MD5_CRYPT_ENAB.xml">
+<!ENTITY MOTD_FILE             SYSTEM "login.defs.d/MOTD_FILE.xml">
+<!ENTITY NOLOGINS_FILE         SYSTEM "login.defs.d/NOLOGINS_FILE.xml">
+<!ENTITY OBSCURE_CHECKS_ENAB   SYSTEM "login.defs.d/OBSCURE_CHECKS_ENAB.xml">
+<!ENTITY PASS_ALWAYS_WARN      SYSTEM "login.defs.d/PASS_ALWAYS_WARN.xml">
+<!ENTITY PASS_CHANGE_TRIES     SYSTEM "login.defs.d/PASS_CHANGE_TRIES.xml">
+<!ENTITY PASS_MAX_LEN          SYSTEM "login.defs.d/PASS_MAX_LEN.xml">
+<!ENTITY PASS_MAX_DAYS         SYSTEM "login.defs.d/PASS_MAX_DAYS.xml">
+<!ENTITY PASS_MIN_DAYS         SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
+<!ENTITY PASS_WARN_AGE         SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
+<!ENTITY PORTTIME_CHECKS_ENAB  SYSTEM "login.defs.d/PORTTIME_CHECKS_ENAB.xml">
+<!ENTITY QUOTAS_ENAB           SYSTEM "login.defs.d/QUOTAS_ENAB.xml">
+<!ENTITY SHA_CRYPT_MIN_ROUNDS  SYSTEM "login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml">
+<!ENTITY SULOG_FILE            SYSTEM "login.defs.d/SULOG_FILE.xml">
+<!ENTITY SU_NAME               SYSTEM "login.defs.d/SU_NAME.xml">
+<!ENTITY SU_WHEEL_ONLY         SYSTEM "login.defs.d/SU_WHEEL_ONLY.xml">
+<!ENTITY SYS_GID_MAX           SYSTEM "login.defs.d/SYS_GID_MAX.xml">
+<!ENTITY SYSLOG_SG_ENAB        SYSTEM "login.defs.d/SYSLOG_SG_ENAB.xml">
+<!ENTITY SYSLOG_SU_ENAB        SYSTEM "login.defs.d/SYSLOG_SU_ENAB.xml">
+<!ENTITY SYS_UID_MAX           SYSTEM "login.defs.d/SYS_UID_MAX.xml">
+<!ENTITY TTYGROUP              SYSTEM "login.defs.d/TTYGROUP.xml">
+<!ENTITY TTYTYPE_FILE          SYSTEM "login.defs.d/TTYTYPE_FILE.xml">
+<!ENTITY UID_MAX               SYSTEM "login.defs.d/UID_MAX.xml">
+<!ENTITY ULIMIT                SYSTEM "login.defs.d/ULIMIT.xml">
+<!ENTITY UMASK                 SYSTEM "login.defs.d/UMASK.xml">
+<!ENTITY USERDEL_CMD           SYSTEM "login.defs.d/USERDEL_CMD.xml">
+<!ENTITY USERGROUPS_ENAB       SYSTEM "login.defs.d/USERGROUPS_ENAB.xml">
+]>
+
+<refentry id='login.defs.5'>
+  <!--  $Id: login.defs.5.xml 2869 2009-05-09 13:15:10Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>login.defs</refentrytitle>
+    <manvolnum>5</manvolnum>
+    <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>login.defs</refname>
+    <refpurpose>shadow password suite configuration</refpurpose>
+  </refnamediv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <filename>/etc/login.defs</filename> file defines the
+      site-specific configuration for the shadow password suite. This file
+      is required. Absence of this file will not prevent system operation,
+      but will probably result in undesirable operation.
+    </para>
+
+    <para>
+      This file is a readable text file, each line of the file describing
+      one configuration parameter. The lines consist of a configuration name
+      and value, separated by whitespace. Blank lines and comment lines are
+      ignored. Comments are introduced with a "#" pound sign and the pound
+      sign must be the first non-white character of the line.
+    </para>
+
+    <para>
+      Parameter values may be of four types: strings, booleans, numbers, and
+      long numbers. A string is comprised of any printable characters. A
+      boolean should be either the value <replaceable>yes</replaceable> or
+      <replaceable>no</replaceable>. An undefined boolean
+      parameter or one with a value other than these will be given a
+      <replaceable>no</replaceable>
+      value. Numbers (both regular and long) may be either decimal values,
+      octal values (precede the value with <replaceable>0</replaceable>) or
+      hexadecimal values
+      (precede the value with <replaceable>0x</replaceable>).
+      The maximum value of the regular and
+      long numeric parameters is machine-dependent.
+    </para>
+
+    <para>The following configuration items are provided:</para>
+
+    <variablelist remap='IP'>
+      &CHFN_AUTH;
+      &CHFN_RESTRICT;
+      &CHSH_AUTH;
+      &CONSOLE;
+      &CONSOLE_GROUPS;
+      &CREATE_HOME;
+      &DEFAULT_HOME;
+      &ENCRYPT_METHOD;
+      &ENV_HZ;
+      &ENV_PATH;
+      &ENV_SUPATH;
+      &ENV_TZ;
+      &ENVIRON_FILE;
+      &ERASECHAR;
+      &FAIL_DELAY;
+      &FAILLOG_ENAB;
+      &FAKE_SHELL;
+      &FTMP_FILE;
+      &GID_MAX; <!-- documents also GID_MIN -->
+      &HUSHLOGIN_FILE;
+      &ISSUE_FILE;
+      &KILLCHAR;
+      &LASTLOG_ENAB;
+      &LOG_OK_LOGINS;
+      &LOG_UNKFAIL_ENAB;
+      &LOGIN_RETRIES;
+      &LOGIN_STRING;
+      &LOGIN_TIMEOUT;
+      &MAIL_CHECK_ENAB;
+      &MAIL_DIR;
+      &MAX_MEMBERS_PER_GROUP;
+      &MD5_CRYPT_ENAB;
+      &MOTD_FILE;
+      &NOLOGINS_FILE;
+      &OBSCURE_CHECKS_ENAB;
+      &PASS_ALWAYS_WARN;
+      &PASS_CHANGE_TRIES;
+      &PASS_MAX_DAYS;
+      &PASS_MIN_DAYS;
+      &PASS_WARN_AGE;
+      <para> 
+        <option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and
+        <option>PASS_WARN_AGE</option> are only used at the
+        time of account creation. Any changes to these settings won't affect
+        existing accounts.
+      </para>
+      &PASS_MAX_LEN; <!-- documents also PASS_MIN_LEN -->
+      &PORTTIME_CHECKS_ENAB;
+      &QUOTAS_ENAB;
+      &SHA_CRYPT_MIN_ROUNDS; <!-- documents also SHA_CRYPT_MAX_ROUNDS -->
+      &SULOG_FILE;
+      &SU_NAME;
+      &SU_WHEEL_ONLY;
+      &SYS_GID_MAX; <!-- documents also SYS_GID_MIN -->
+      &SYS_UID_MAX; <!-- documents also SYS_UID_MIN -->
+      &SYSLOG_SG_ENAB;
+      &SYSLOG_SU_ENAB;
+      &TTYGROUP;
+      &TTYTYPE_FILE;
+      &UID_MAX; <!-- documents also UID_MIN -->
+      &ULIMIT;
+      &UMASK;
+      &USERDEL_CMD;
+      &USERGROUPS_ENAB;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='cross_references'>
+    <title>CROSS REFERENCES</title>
+    <para>
+      The following cross references show which programs in the shadow
+      password suite use which parameters.
+    </para>
+    <!-- .na -->
+    <variablelist remap='IP'>
+      <!-- chage: no variables -->
+      <varlistentry>
+       <term>chfn</term>
+       <listitem>
+         <para>
+           <phrase condition="no_pam">CHFN_AUTH</phrase>
+           CHFN_RESTRICT
+           <phrase condition="no_pam">LOGIN_STRING</phrase>
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>chgpasswd</term>
+       <listitem>
+         <para>
+           ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+           <phrase condition="sha_crypt">SHA_CRYPT_MAX_ROUNDS
+           SHA_CRYPT_MIN_ROUNDS</phrase>
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="no_pam">
+       <term>chpasswd</term>
+       <listitem>
+         <para>
+           ENCRYPT_METHOD MD5_CRYPT_ENAB
+           <phrase condition="sha_crypt">SHA_CRYPT_MAX_ROUNDS
+           SHA_CRYPT_MIN_ROUNDS</phrase>
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="no_pam">
+       <term>chsh</term>
+       <listitem>
+         <para>
+           CHSH_AUTH LOGIN_STRING
+         </para>
+       </listitem>
+      </varlistentry>
+      <!-- expiry: no variables (CONSOLE_GROUPS linked, but not used) -->
+      <!-- faillog: no variables -->
+      <varlistentry>
+       <term>gpasswd</term>
+       <listitem>
+         <para>
+           ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+           <phrase condition="sha_crypt">SHA_CRYPT_MAX_ROUNDS
+           SHA_CRYPT_MIN_ROUNDS</phrase>
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>groupadd</term>
+       <listitem>
+         <para>
+           GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP
+           SYS_GID_MAX SYS_GID_MIN
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>groupdel</term>
+       <listitem>
+         <para>MAX_MEMBERS_PER_GROUP</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>groupmems</term>
+       <listitem>
+         <para>MAX_MEMBERS_PER_GROUP</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>groupmod</term>
+       <listitem>
+         <para>MAX_MEMBERS_PER_GROUP</para>
+       </listitem>
+      </varlistentry>
+      <!-- groups: no variables -->
+      <varlistentry>
+       <term>grpck</term>
+       <listitem>
+         <para>MAX_MEMBERS_PER_GROUP</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>grpconv</term>
+       <listitem>
+         <para>MAX_MEMBERS_PER_GROUP</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>grpunconv</term>
+       <listitem>
+         <para>MAX_MEMBERS_PER_GROUP</para>
+       </listitem>
+      </varlistentry>
+      <!-- id: no variables -->
+      <!-- lastlog: no variables -->
+      <varlistentry>
+       <term>login</term>
+       <listitem>
+         <para>
+           <phrase condition="no_pam">CONSOLE</phrase>
+           CONSOLE_GROUPS DEFAULT_HOME
+           <phrase condition="no_pam">ENV_HZ ENV_PATH ENV_SUPATH
+           ENV_TZ ENVIRON_FILE</phrase>
+           ERASECHAR FAIL_DELAY
+           <phrase condition="no_pam">FAILLOG_ENAB</phrase>
+           FAKE_SHELL
+           <phrase condition="no_pam">FTMP_FILE</phrase>
+           HUSHLOGIN_FILE
+           <phrase condition="no_pam">ISSUE_FILE</phrase>
+           KILLCHAR
+           <phrase condition="no_pam">LASTLOG_ENAB</phrase>
+           LOGIN_RETRIES
+           <phrase condition="no_pam">LOGIN_STRING</phrase>
+           LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
+           <phrase condition="no_pam">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE
+           MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB
+           QUOTAS_ENAB</phrase>
+           TTYGROUP TTYPERM TTYTYPE_FILE
+           <phrase condition="no_pam">ULIMIT UMASK</phrase>
+           USERGROUPS_ENAB
+         </para>
+       </listitem>
+      </varlistentry>
+      <!-- logoutd: no variables -->
+      <varlistentry>
+       <term>newgrp / sg</term>
+       <listitem>
+         <para>
+           SYSLOG_SG_ENAB
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>newusers</term>
+       <listitem>
+         <para>
+           ENCRYPT_METHOD
+           GID_MAX GID_MIN
+           MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+           PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+           <phrase condition="sha_crypt">SHA_CRYPT_MAX_ROUNDS
+           SHA_CRYPT_MIN_ROUNDS</phrase>
+           SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN
+           UMASK
+         </para>
+       </listitem>
+      </varlistentry>
+      <!-- nologin: no variables -->
+      <varlistentry condition="no_pam">
+       <term>passwd</term>
+       <listitem>
+         <para>
+           ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB
+           PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+           <phrase condition="sha_crypt">SHA_CRYPT_MAX_ROUNDS
+           SHA_CRYPT_MIN_ROUNDS</phrase>
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>pwck</term>
+       <listitem>
+         <para>
+           PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>pwconv</term>
+       <listitem>
+         <para>PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE</para>
+       </listitem>
+      </varlistentry>
+      <!-- pwunconv: no variables -->
+      <varlistentry>
+       <term>su</term>
+       <listitem>
+         <para>
+           <phrase condition="no_pam">CONSOLE</phrase>
+           CONSOLE_GROUPS DEFAULT_HOME
+           <phrase condition="no_pam">ENV_HZ ENVIRON_FILE</phrase>
+           ENV_PATH ENV_SUPATH
+           <phrase condition="no_pam">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB
+           MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase>
+           SULOG_FILE SU_NAME
+           <phrase condition="no_pam">SU_WHEEL_ONLY</phrase>
+           SYSLOG_SU_ENAB
+           <phrase condition="no_pam">USERGROUPS_ENAB</phrase>
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>sulogin</term>
+       <listitem>
+         <para>
+           ENV_HZ
+           <phrase condition="no_pam">ENV_TZ</phrase>
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>useradd</term>
+       <listitem>
+         <para>
+           CREATE_HOME
+           GID_MAX GID_MIN
+           MAIL_DIR MAX_MEMBERS_PER_GROUP
+           PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+           SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN
+           UMASK
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>userdel</term>
+       <listitem>
+         <para>
+           MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD
+           USERGROUPS_ENAB
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>usermod</term>
+       <listitem>
+         <para>
+           MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
+         </para>
+       </listitem>
+      </varlistentry>
+      <!-- vipw / vigr: no variables (MAX_MEMBERS_PER_GROUP linked but not used) -->
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='bugs' condition="pam">
+    <title>BUGS</title>
+    <para>
+      Much of the functionality that used to be provided by the shadow
+      password suite is now handled by PAM. Thus,
+      <filename>/etc/login.defs</filename> is no longer used by <citerefentry>
+      <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>, or less used by <citerefentry>
+      <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>, and <citerefentry>
+      <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>. Please refer to the corresponding PAM configuration
+      files instead.
+    </para>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/login.defs.d/CHFN_AUTH.xml b/man/login.defs.d/CHFN_AUTH.xml
new file mode 100644 (file)
index 0000000..941e5f9
--- /dev/null
@@ -0,0 +1,40 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>CHFN_AUTH</option> (boolean)</term>
+  <listitem>
+    <para>
+      If <replaceable>yes</replaceable>, the <command>chfn</command>
+      program will require authentication before making any changes,
+      unless run by the superuser.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/CHFN_RESTRICT.xml b/man/login.defs.d/CHFN_RESTRICT.xml
new file mode 100644 (file)
index 0000000..ecc21b7
--- /dev/null
@@ -0,0 +1,51 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>CHFN_RESTRICT</option> (string)</term>
+  <listitem>
+    <para>
+      This parameter specifies which values in the <emphasis
+      remap='I'>gecos</emphasis> field of the
+      <filename>/etc/passwd</filename> file may be changed by regular
+      users using the <command>chfn</command> program. It can be any
+      combination of letters <replaceable>f</replaceable>,
+      <replaceable>r</replaceable>, <replaceable>w</replaceable>,
+      <replaceable>h</replaceable>, for Full name, Room number, Work
+      phone, and Home phone, respectively. For backward compatibility,
+      <replaceable>yes</replaceable> is equivalent to
+      <replaceable>rwh</replaceable> and <replaceable>no</replaceable> is
+      equivalent to <replaceable>frwh</replaceable>. If not specified,
+      only the superuser can make any changes. The most restrictive
+      setting is better achieved by not installing <command>chfn</command>
+      SUID.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/CHSH_AUTH.xml b/man/login.defs.d/CHSH_AUTH.xml
new file mode 100644 (file)
index 0000000..0d7139f
--- /dev/null
@@ -0,0 +1,40 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>CHSH_AUTH</option> (boolean)</term>
+  <listitem>
+    <para>
+      If <replaceable>yes</replaceable>, the <command>chsh</command>
+      program will require authentication before making any changes,
+      unless run by the superuser.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/CONSOLE.xml b/man/login.defs.d/CONSOLE.xml
new file mode 100644 (file)
index 0000000..a5f6932
--- /dev/null
@@ -0,0 +1,46 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>CONSOLE</option> (string)</term>
+  <listitem>
+    <para>
+      If defined, either full pathname of a file containing device names
+      (one per line) or a ":" delimited list of device names.  Root logins will be
+      allowed only upon these devices.
+    </para>
+    <para>
+      If not defined, root will be allowed on any device.
+    </para>
+    <para>
+      The device should be specified without the /dev/ prefix.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/CONSOLE_GROUPS.xml b/man/login.defs.d/CONSOLE_GROUPS.xml
new file mode 100644 (file)
index 0000000..f464153
--- /dev/null
@@ -0,0 +1,44 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>CONSOLE_GROUPS</option> (string)</term>
+  <listitem>
+    <para>
+      List of groups to add to the user's supplementary groups set when
+      logging in on the console (as determined by the CONSOLE setting).
+      Default is none.
+    <para>
+    </para>
+      Use with caution - it is possible for users to gain permanent access
+      to these groups, even when not logged in on the console.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/CREATE_HOME.xml b/man/login.defs.d/CREATE_HOME.xml
new file mode 100644 (file)
index 0000000..e68f24a
--- /dev/null
@@ -0,0 +1,41 @@
+<!--
+   Copyright (c) 2009       , Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>CREATE_HOME</option> (boolean)</term>
+  <listitem>
+    <para>
+      Indicate if a home directory should be created by default for new
+      users.
+    </para>
+    <para>
+      This setting does not apply to system users, and can be overriden on
+      the command line.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/DEFAULT_HOME.xml b/man/login.defs.d/DEFAULT_HOME.xml
new file mode 100644 (file)
index 0000000..5162a92
--- /dev/null
@@ -0,0 +1,44 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>DEFAULT_HOME</option> (boolean)</term>
+  <listitem>
+    <para>
+      Indicate if login is allowed if we can't cd to the home directory.
+      Default in no.
+    </para>
+    <para>
+      If set to <replaceable>yes</replaceable>, the user will login in
+      the root (<filename>/</filename>) directory if it is not possible to
+      cd to her home directory.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ENCRYPT_METHOD.xml b/man/login.defs.d/ENCRYPT_METHOD.xml
new file mode 100644 (file)
index 0000000..c0687be
--- /dev/null
@@ -0,0 +1,64 @@
+<!--
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>ENCRYPT_METHOD</option> (string)</term>
+  <listitem>
+    <para>
+      This defines the system default encryption algorithm for encrypting
+      passwords (if no algorithm are specified on the command line).
+    </para>
+    <para>
+      It can take one of these values:
+      <itemizedlist>
+        <listitem>
+          <para><replaceable>DES</replaceable> (default)</para>
+        </listitem>
+        <listitem>
+          <para><replaceable>MD5</replaceable></para>
+        </listitem>
+        <listitem>
+          <para><replaceable>SHA256</replaceable></para>
+        </listitem>
+        <listitem>
+          <para><replaceable>SHA512</replaceable></para>
+        </listitem>
+      </itemizedlist>
+    </para>
+    <para>
+      Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option>
+      variable.
+    </para>
+    <para condition="pam">
+      Note: This only affect the generation of group passwords.
+      The generation of user passwords is done by PAM and subject to the
+      PAM configuration. It is recommended to set this variable
+      consistently with the PAM configuration.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ENVIRON_FILE.xml b/man/login.defs.d/ENVIRON_FILE.xml
new file mode 100644 (file)
index 0000000..ee85d8c
--- /dev/null
@@ -0,0 +1,42 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>ENVIRON_FILE</option> (string)</term>
+  <listitem>
+    <para>
+      If this file exists and is readable, login environment will be
+      read from it.  Every line should be in the form name=value.
+    </para>
+    <para>
+      Lines starting with a # are treated as comment lines and ignored.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ENV_HZ.xml b/man/login.defs.d/ENV_HZ.xml
new file mode 100644 (file)
index 0000000..9bbc255
--- /dev/null
@@ -0,0 +1,47 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <!-- XXX: When compiled with PAM support, only sulogin uses ENV_HZ -->
+  <term><option>ENV_HZ</option> (string)</term>
+  <listitem>
+    <para>
+      If set, it will be used to define the HZ environment variable when
+      a user login. The value must be preceded by
+      <replaceable>HZ=</replaceable>. A common value on Linux is
+      <replaceable>HZ=100</replaceable>.
+    </para>
+    <para condition="pam">
+      The <envar>HZ</envar> environment variable is only set when the user
+      (the superuser) logs in with <command>sulogin</command>.
+    </para>
+    <!-- TODO: it can in fact be used to set any other variable-->
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ENV_PATH.xml b/man/login.defs.d/ENV_PATH.xml
new file mode 100644 (file)
index 0000000..d65c051
--- /dev/null
@@ -0,0 +1,43 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>ENV_PATH</option> (string)</term>
+  <listitem>
+    <para>
+      If set, it will be used to define the PATH environment variable when
+      a regular user login. The value can be preceded by
+      <replaceable>PATH=</replaceable>, or a colon separated list of paths
+      (for example <replaceable>/bin:/usr/bin</replaceable>). The default
+      value is <replaceable>PATH=/bin:/usr/bin</replaceable>.
+    </para>
+    <!-- TODO: it can in fact be used to set any other variable-->
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ENV_SUPATH.xml b/man/login.defs.d/ENV_SUPATH.xml
new file mode 100644 (file)
index 0000000..9a48fc5
--- /dev/null
@@ -0,0 +1,43 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>ENV_SUPATH</option> (string)</term>
+  <listitem>
+    <para>
+      If set, it will be used to define the PATH environment variable when
+      the superuser login. The value can be preceded by
+      <replaceable>PATH=</replaceable>, or a colon separated list of paths
+      (for example <replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>).
+      The default value is <replaceable>PATH=/bin:/usr/bin</replaceable>.
+    </para>
+    <!-- TODO: it can in fact be used to set any other variable-->
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ENV_TZ.xml b/man/login.defs.d/ENV_TZ.xml
new file mode 100644 (file)
index 0000000..90c8bca
--- /dev/null
@@ -0,0 +1,48 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>ENV_TZ</option> (string)</term>
+  <listitem>
+    <para>
+      If set, it will be used to define the TZ environment variable when
+      a user login. The value can be the name of a timezone preceded by
+      <replaceable>TZ=</replaceable> (for example
+      <replaceable>TZ=CST6CDT</replaceable>), or the full path to the file
+      containing the timezone specification (for example
+      <filename>/etc/tzname</filename>).
+    </para>
+    <!-- TODO: it can in fact be used to set any other variable-->
+    <para>
+      If a full path is specified but the file does not exist or cannot be
+      read, the default is to use <replaceable>TZ=CST6CDT</replaceable>.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ERASECHAR.xml b/man/login.defs.d/ERASECHAR.xml
new file mode 100644 (file)
index 0000000..fad4d72
--- /dev/null
@@ -0,0 +1,43 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>ERASECHAR</option> (number)</term>
+  <listitem>
+    <para>
+      Terminal ERASE character (<replaceable>010</replaceable> =
+      backspace, <replaceable>0177</replaceable> = DEL).
+    </para>
+    <para>
+      The value can be prefixed "0" for an octal value, or "0x" for an
+      hexadecimal value.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/FAILLOG_ENAB.xml b/man/login.defs.d/FAILLOG_ENAB.xml
new file mode 100644 (file)
index 0000000..5a52557
--- /dev/null
@@ -0,0 +1,39 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>FAILLOG_ENAB</option> (boolean)</term>
+  <listitem>
+    <para>
+      Enable logging and display of <filename>/var/log/faillog</filename>
+      login failure info.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/FAIL_DELAY.xml b/man/login.defs.d/FAIL_DELAY.xml
new file mode 100644 (file)
index 0000000..060ca0a
--- /dev/null
@@ -0,0 +1,39 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>FAIL_DELAY</option> (number)</term>
+  <listitem>
+    <para>
+      Delay in seconds before being allowed another attempt after a login
+      failure.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/FAKE_SHELL.xml b/man/login.defs.d/FAKE_SHELL.xml
new file mode 100644 (file)
index 0000000..967acaa
--- /dev/null
@@ -0,0 +1,39 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>FAKE_SHELL</option> (string)</term>
+  <listitem>
+    <para>
+      If set, <command>login</command> will execute this shell instead of
+      the users' shell specified in <filename>/etc/passwd</filename>.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/FTMP_FILE.xml b/man/login.defs.d/FTMP_FILE.xml
new file mode 100644 (file)
index 0000000..255569a
--- /dev/null
@@ -0,0 +1,38 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>FTMP_FILE</option> (string)</term>
+  <listitem>
+    <para>
+      If defined, login failures will be logged in this file in a utmp format.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/GID_MAX.xml b/man/login.defs.d/GID_MAX.xml
new file mode 100644 (file)
index 0000000..fdf18e9
--- /dev/null
@@ -0,0 +1,41 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>GID_MAX</option> (number)</term>
+  <term><option>GID_MIN</option> (number)</term>
+  <listitem>
+    <para>
+      Range of group IDs used for the creation of regular groups by
+      <command>useradd</command>, <command>groupadd</command>, or
+      <command>newusers</command>.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/HUSHLOGIN_FILE.xml b/man/login.defs.d/HUSHLOGIN_FILE.xml
new file mode 100644 (file)
index 0000000..edb0262
--- /dev/null
@@ -0,0 +1,42 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>HUSHLOGIN_FILE</option> (string)</term>
+  <listitem>
+    <para>
+      If defined, this file can inhibit all the usual chatter during the
+      login sequence.  If a full pathname is specified, then hushed mode
+      will be enabled if the user's name or shell are found in the file.
+      If not a full pathname, then hushed mode will be enabled if the file
+      exists in the user's home directory.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ISSUE_FILE.xml b/man/login.defs.d/ISSUE_FILE.xml
new file mode 100644 (file)
index 0000000..12c22a7
--- /dev/null
@@ -0,0 +1,38 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>ISSUE_FILE</option> (string)</term>
+  <listitem>
+    <para>
+      If defined, this file will be displayed before each login prompt.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/KILLCHAR.xml b/man/login.defs.d/KILLCHAR.xml
new file mode 100644 (file)
index 0000000..fea9f87
--- /dev/null
@@ -0,0 +1,42 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>KILLCHAR</option> (number)</term>
+  <listitem>
+    <para>
+      Terminal KILL character (<replaceable>025</replaceable> = CTRL/U).
+    </para>
+    <para>
+      The value can be prefixed "0" for an octal value, or "0x" for an
+      hexadecimal value.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/LASTLOG_ENAB.xml b/man/login.defs.d/LASTLOG_ENAB.xml
new file mode 100644 (file)
index 0000000..c264a89
--- /dev/null
@@ -0,0 +1,38 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>LASTLOG_ENAB</option> (boolean)</term>
+  <listitem>
+    <para>
+      Enable logging and display of /var/log/lastlog login time info.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/LOGIN_RETRIES.xml b/man/login.defs.d/LOGIN_RETRIES.xml
new file mode 100644 (file)
index 0000000..e5c7e99
--- /dev/null
@@ -0,0 +1,44 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>LOGIN_RETRIES</option> (number)</term>
+  <listitem>
+    <para>
+      Maximum number of login retries in case of bad password.
+    </para>
+    <para condition="pam">
+      This will most likely be overriden by PAM, since the default
+      pam_unix module has it's own built in of 3 retries. However, this is
+      a safe fallback in case you are using an authentication module that
+      does not enforce PAM_MAXTRIES.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/LOGIN_STRING.xml b/man/login.defs.d/LOGIN_STRING.xml
new file mode 100644 (file)
index 0000000..5a78c7c
--- /dev/null
@@ -0,0 +1,44 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>LOGIN_STRING</option> (string)</term>
+  <listitem>
+    <para>
+      The string used for prompting a password. The default is to use
+      "Password: ", or a translation of that string. If you set this
+      variable, the prompt will no be translated.
+    </para>
+    <para>
+      If the string contains <replaceable>%s</replaceable>, this will be
+      replaced by the user's name.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/LOGIN_TIMEOUT.xml b/man/login.defs.d/LOGIN_TIMEOUT.xml
new file mode 100644 (file)
index 0000000..05b7cff
--- /dev/null
@@ -0,0 +1,38 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>LOGIN_TIMEOUT</option> (number)</term>
+  <listitem>
+    <para>
+      Max time in seconds for login.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/LOG_OK_LOGINS.xml b/man/login.defs.d/LOG_OK_LOGINS.xml
new file mode 100644 (file)
index 0000000..ec11580
--- /dev/null
@@ -0,0 +1,38 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>LOG_OK_LOGINS</option> (boolean)</term>
+  <listitem>
+    <para>
+      Enable logging of successful logins.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/LOG_UNKFAIL_ENAB.xml b/man/login.defs.d/LOG_UNKFAIL_ENAB.xml
new file mode 100644 (file)
index 0000000..2bc0ca2
--- /dev/null
@@ -0,0 +1,43 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>LOG_UNKFAIL_ENAB</option> (boolean)</term>
+  <listitem>
+    <para>
+      Enable display of unknown usernames when login failures are
+      recorded.
+    </para>
+    <para>
+      Note: logging unknown usernames may be a security issue if an user
+      enter her password instead of her login name.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/MAIL_CHECK_ENAB.xml b/man/login.defs.d/MAIL_CHECK_ENAB.xml
new file mode 100644 (file)
index 0000000..62dece0
--- /dev/null
@@ -0,0 +1,42 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>MAIL_CHECK_ENAB</option> (boolean)</term>
+  <listitem>
+    <para>
+      Enable checking and display of mailbox status upon login.
+    </para>
+    <para>
+      You should disable it if the shell startup files already check for
+      mail ("mailx -e" or equivalent).
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/MAIL_DIR.xml b/man/login.defs.d/MAIL_DIR.xml
new file mode 100644 (file)
index 0000000..60b82d6
--- /dev/null
@@ -0,0 +1,60 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>MAIL_DIR</option> (string)</term>
+  <listitem>
+    <para>
+      The mail spool directory. This is needed to manipulate the mailbox
+      when its corresponding user account is modified or deleted. If not
+      specified, a compile-time default is used.
+    </para>
+  </listitem>
+</varlistentry><varlistentry>
+  <term><option>MAIL_FILE</option> (string)</term>
+  <listitem>
+    <para>
+      Defines the location of the users mail spool files relatively to
+      their home directory.
+    </para>
+  </listitem>
+</varlistentry>
+<!-- FIXME: MAIL_FILE not used in useradd -->
+<para>
+  The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables
+  are used by <command>useradd</command>, <command>usermod</command>, and
+  <command>userdel</command> to create, move, or delete the user's mail
+  spool.
+</para>
+<para condition="no_pam">
+  If <option>MAIL_CHECK_ENAB</option> is set to
+  <replaceable>yes</replaceable>, they are also used to define the
+  <envar>MAIL</envar> environment variable.
+</para>
diff --git a/man/login.defs.d/MAX_MEMBERS_PER_GROUP.xml b/man/login.defs.d/MAX_MEMBERS_PER_GROUP.xml
new file mode 100644 (file)
index 0000000..45975d9
--- /dev/null
@@ -0,0 +1,57 @@
+<!--
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>MAX_MEMBERS_PER_GROUP</option> (number)</term>
+  <listitem>
+    <para>
+      Maximum members per group entry. When the maximum is reached, a new
+      group entry (line) is started in <filename>/etc/group</filename>
+      (with the same name, same password, and same GID).
+    </para>
+    <para>
+      The default value is 0, meaning that there are no limits in the
+      number of members in a group.
+    </para>
+    <!-- Note: on HP, split groups have the same ID, but different
+               names. -->
+    <para>
+      This feature (split group) permits to limit the length of lines in
+      the group file. This is useful to make sure that lines for NIS
+      groups are not larger than 1024 characters.
+    </para>
+    <para>
+      If you need to enforce such limit, you can use 25.
+    </para>
+    <para>
+      Note: split groups may not be supported by all tools (even in the
+      Shadow toolsuite). You should not use this variable unless you really
+      need it.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/MD5_CRYPT_ENAB.xml b/man/login.defs.d/MD5_CRYPT_ENAB.xml
new file mode 100644 (file)
index 0000000..d27588c
--- /dev/null
@@ -0,0 +1,60 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>MD5_CRYPT_ENAB</option> (boolean)</term>
+  <listitem>
+    <para>
+      Indicate if passwords must be encrypted using the MD5-based
+      algorithm. If set to <replaceable>yes</replaceable>, new passwords
+      will be encrypted using the MD5-based algorithm compatible with the
+      one used by recent releases of FreeBSD. It supports passwords of
+      unlimited length and longer salt strings. Set to
+      <replaceable>no</replaceable> if you need to copy encrypted
+      passwords to other systems which don't understand the new algorithm.
+      Default is <replaceable>no</replaceable>.
+    </para>
+    <para>
+      This variable is superceded by the <option>ENCRYPT_METHOD</option>
+      variable or by any command line option used to configure the
+      encryption algorithm.
+    </para>
+    <para>
+      This variable is deprecated. You should use
+      <option>ENCRYPT_METHOD</option>.
+    </para>
+    <para condition="pam">
+      Note: This only affect the generation of group passwords.
+      The generation of user passwords is done by PAM and subject to the
+      PAM configuration. It is recommended to set this variable
+      consistently with the PAM configuration.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/MOTD_FILE.xml b/man/login.defs.d/MOTD_FILE.xml
new file mode 100644 (file)
index 0000000..b472e71
--- /dev/null
@@ -0,0 +1,39 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>MOTD_FILE</option> (string)</term>
+  <listitem>
+    <para>
+      If defined, ":" delimited list of "message of the day" files to be
+      displayed upon login.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/NOLOGINS_FILE.xml b/man/login.defs.d/NOLOGINS_FILE.xml
new file mode 100644 (file)
index 0000000..fde79f5
--- /dev/null
@@ -0,0 +1,40 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>NOLOGINS_FILE</option> (string)</term>
+  <listitem>
+    <para>
+      If defined, name of file whose presence will inhibit non-root
+      logins.  The contents of this file should be a message indicating
+      why logins are inhibited.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/OBSCURE_CHECKS_ENAB.xml b/man/login.defs.d/OBSCURE_CHECKS_ENAB.xml
new file mode 100644 (file)
index 0000000..5eb1d65
--- /dev/null
@@ -0,0 +1,38 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>OBSCURE_CHECKS_ENAB</option> (boolean)</term>
+  <listitem>
+    <para>
+      Enable additional checks upon password changes.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PASS_ALWAYS_WARN.xml b/man/login.defs.d/PASS_ALWAYS_WARN.xml
new file mode 100644 (file)
index 0000000..8687488
--- /dev/null
@@ -0,0 +1,38 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>PASS_ALWAYS_WARN</option> (boolean)</term>
+  <listitem>
+    <para>
+      Warn about weak passwords (but still allow them) if you are root.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PASS_CHANGE_TRIES.xml b/man/login.defs.d/PASS_CHANGE_TRIES.xml
new file mode 100644 (file)
index 0000000..f6f6d1d
--- /dev/null
@@ -0,0 +1,39 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>PASS_CHANGE_TRIES</option> (number)</term>
+  <listitem>
+    <para>
+      Maximum number of attempts to change password if rejected (too
+      easy).
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PASS_MAX_DAYS.xml b/man/login.defs.d/PASS_MAX_DAYS.xml
new file mode 100644 (file)
index 0000000..7df51a2
--- /dev/null
@@ -0,0 +1,40 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>PASS_MAX_DAYS</option> (number)</term>
+  <listitem>
+    <para>
+      The maximum number of days a password may be used. If the password
+      is older than this, a password change will be forced.  If not
+      specified, -1 will be assumed (which disables the restriction).
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PASS_MAX_LEN.xml b/man/login.defs.d/PASS_MAX_LEN.xml
new file mode 100644 (file)
index 0000000..2b9e024
--- /dev/null
@@ -0,0 +1,43 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>PASS_MAX_LEN</option> (number)</term>
+  <term><option>PASS_MIN_LEN</option> (number)</term>
+  <listitem>
+    <para>
+      Number of significant characters in the password for crypt().
+      <option>PASS_MAX_LEN</option> is 8 by default. Don't change unless
+      your crypt() is better. This is ignored if
+      <option>MD5_CRYPT_ENAB</option> set to
+      <replaceable>yes</replaceable>.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PASS_MIN_DAYS.xml b/man/login.defs.d/PASS_MIN_DAYS.xml
new file mode 100644 (file)
index 0000000..14f68eb
--- /dev/null
@@ -0,0 +1,40 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>PASS_MIN_DAYS</option> (number)</term>
+  <listitem>
+    <para>
+      The minimum number of days allowed between password changes.  Any
+      password changes attempted sooner than this will be rejected. If not
+      specified, -1 will be assumed (which disables the restriction).
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PASS_WARN_AGE.xml b/man/login.defs.d/PASS_WARN_AGE.xml
new file mode 100644 (file)
index 0000000..fc03f1d
--- /dev/null
@@ -0,0 +1,41 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>PASS_WARN_AGE</option> (number)</term>
+  <listitem>
+    <para>
+      The number of days warning given before a password expires. A zero
+      means warning is given only upon the day of expiration, a negative
+      value means no warning is given. If not specified, no warning will
+      be provided.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/PORTTIME_CHECKS_ENAB.xml b/man/login.defs.d/PORTTIME_CHECKS_ENAB.xml
new file mode 100644 (file)
index 0000000..994ab2b
--- /dev/null
@@ -0,0 +1,38 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>PORTTIME_CHECKS_ENAB</option> (boolean)</term>
+  <listitem>
+    <para>
+      Enable checking of time restrictions specified in /etc/porttime.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/QUOTAS_ENAB.xml b/man/login.defs.d/QUOTAS_ENAB.xml
new file mode 100644 (file)
index 0000000..5cccd8a
--- /dev/null
@@ -0,0 +1,39 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>QUOTAS_ENAB</option> (boolean)</term>
+  <listitem>
+    <para>
+      Enable setting of ulimit, umask, and niceness from passwd gecos
+      field.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml b/man/login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml
new file mode 100644 (file)
index 0000000..f0a6928
--- /dev/null
@@ -0,0 +1,69 @@
+<!--
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="sha_crypt">
+  <term><option>SHA_CRYPT_MIN_ROUNDS</option> (number)</term>
+  <term><option>SHA_CRYPT_MAX_ROUNDS</option> (number)</term>
+  <listitem>
+    <para>
+      When <option>ENCRYPT_METHOD</option> is set to
+      <replaceable>SHA256</replaceable> or
+      <replaceable>SHA512</replaceable>, this defines the number of SHA
+      rounds used by the encryption algorithm by default (when the number
+      of rounds is not specified on the command line).
+    </para>
+    <para>
+      With a lot of rounds, it is more difficult to brute forcing the
+      password. But note also that more CPU resources will be needed to
+      authenticate users.
+    </para>
+    <para>
+      If not specified, the libc will choose the default number of rounds
+      (5000).
+    </para>
+    <para>
+      The values must be inside the 1000-999999999 range.
+    </para>
+    <para>
+      If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or
+      <option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value
+      will be used.
+    </para>
+    <para>
+      If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt;
+      <option>SHA_CRYPT_MAX_ROUNDS</option>, the highest value will be
+      used.
+    </para>
+    <para condition="pam">
+      Note: This only affect the generation of group passwords.
+      The generation of user passwords is done by PAM and subject to the
+      PAM configuration. It is recommended to set this variable
+      consistently with the PAM configuration.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SULOG_FILE.xml b/man/login.defs.d/SULOG_FILE.xml
new file mode 100644 (file)
index 0000000..d5d07c8
--- /dev/null
@@ -0,0 +1,38 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>SULOG_FILE</option> (string)</term>
+  <listitem>
+    <para>
+      If defined, all su activity is logged to this file.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SU_NAME.xml b/man/login.defs.d/SU_NAME.xml
new file mode 100644 (file)
index 0000000..0a9dfdb
--- /dev/null
@@ -0,0 +1,41 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>SU_NAME</option> (string)</term>
+  <listitem>
+    <para>
+      If defined, the command name to display when running "su -".  For
+      example, if this is defined as "su" then a "ps" will display the
+      command is "-su".  If not defined, then "ps" would display the name
+      of the shell actually being run, e.g. something like "-sh".
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SU_WHEEL_ONLY.xml b/man/login.defs.d/SU_WHEEL_ONLY.xml
new file mode 100644 (file)
index 0000000..7b8e0bc
--- /dev/null
@@ -0,0 +1,44 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!-- TODO: TBC -->
+<varlistentry condition="no_pam">
+  <term><option>SU_WHEEL_ONLY</option> (boolean)</term>
+  <listitem>
+    <para>
+      If <replaceable>yes</replaceable>, the user must be listed as a
+      member of the first gid 0 group in <filename>/etc/group</filename>
+      (called <replaceable>root</replaceable> on most Linux systems) to be
+      able to <command>su</command> to uid 0 accounts.  If the group
+      doesn't exist or is empty, no one will be able to
+      <command>su</command> to uid 0.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SYSLOG_SG_ENAB.xml b/man/login.defs.d/SYSLOG_SG_ENAB.xml
new file mode 100644 (file)
index 0000000..0705537
--- /dev/null
@@ -0,0 +1,38 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>SYSLOG_SG_ENAB</option> (boolean)</term>
+  <listitem>
+    <para>
+      Enable "syslog" logging of <command>sg</command> activity.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SYSLOG_SU_ENAB.xml b/man/login.defs.d/SYSLOG_SU_ENAB.xml
new file mode 100644 (file)
index 0000000..af94a23
--- /dev/null
@@ -0,0 +1,39 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>SYSLOG_SU_ENAB</option> (boolean)</term>
+  <listitem>
+    <para>
+      Enable "syslog" logging of <command>su</command> activity - in
+      addition to sulog file logging.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SYS_GID_MAX.xml b/man/login.defs.d/SYS_GID_MAX.xml
new file mode 100644 (file)
index 0000000..547139a
--- /dev/null
@@ -0,0 +1,39 @@
+<!--
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>SYS_GID_MAX</option> (number)</term>
+  <term><option>SYS_GID_MIN</option> (number)</term>
+  <listitem>
+    <para>
+      Range of group IDs used for the creation of system groups by
+      <command>useradd</command>, <command>groupadd</command>, or
+      <command>newusers</command>.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/SYS_UID_MAX.xml b/man/login.defs.d/SYS_UID_MAX.xml
new file mode 100644 (file)
index 0000000..2d82563
--- /dev/null
@@ -0,0 +1,38 @@
+<!--
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>SYS_UID_MAX</option> (number)</term>
+  <term><option>SYS_UID_MIN</option> (number)</term>
+  <listitem>
+    <para>
+      Range of user IDs used for the creation of system users by
+      <command>useradd</command> or <command>newusers</command>.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/TTYGROUP.xml b/man/login.defs.d/TTYGROUP.xml
new file mode 100644 (file)
index 0000000..474f31b
--- /dev/null
@@ -0,0 +1,56 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>TTYGROUP</option> (string)</term>
+  <term><option>TTYPERM</option> (string)</term>
+  <listitem>
+    <para>
+      The terminal permissions: the login tty will be owned by the
+      <option>TTYGROUP</option> group, and the permissions will be set to
+      <option>TTYPERM</option>.
+    </para>
+    <para>
+      By default, the ownership of the terminal is set to the user's
+      primary group and the permissions are set to
+      <replaceable>0600</replaceable>.
+    </para>
+    <para>
+      <option>TTYGROUP</option> can be either the name of a group or a
+      numeric group identifier.
+    </para>
+    <para>
+      If you have a <command>write</command> program which is "setgid" to
+      a special group which owns the terminals, define TTYGROUP to the
+      group number and TTYPERM to 0620.  Otherwise leave TTYGROUP
+      commented out and assign TTYPERM to either 622 or 600.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/TTYTYPE_FILE.xml b/man/login.defs.d/TTYTYPE_FILE.xml
new file mode 100644 (file)
index 0000000..f3e8509
--- /dev/null
@@ -0,0 +1,39 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>TTYTYPE_FILE</option> (string)</term>
+  <listitem>
+    <para>
+      If defined, file which maps tty line to TERM environment parameter.
+      Each line of the file is in a format something like "vt100  tty01".
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/UID_MAX.xml b/man/login.defs.d/UID_MAX.xml
new file mode 100644 (file)
index 0000000..c3054ea
--- /dev/null
@@ -0,0 +1,40 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>UID_MAX</option> (number)</term>
+  <term><option>UID_MIN</option> (number)</term>
+  <listitem>
+    <para>
+      Range of user IDs used for the creation of regular users by
+      <command>useradd</command> or <command>newusers</command>.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/ULIMIT.xml b/man/login.defs.d/ULIMIT.xml
new file mode 100644 (file)
index 0000000..3cf4267
--- /dev/null
@@ -0,0 +1,38 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry condition="no_pam">
+  <term><option>ULIMIT</option> (number)</term>
+  <listitem>
+    <para>
+      Default <command>ulimit</command> value.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/UMASK.xml b/man/login.defs.d/UMASK.xml
new file mode 100644 (file)
index 0000000..7cd3ea4
--- /dev/null
@@ -0,0 +1,51 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>UMASK</option> (number)</term>
+  <listitem>
+    <para>
+      The file mode creation mask is initialized to this value. If not
+      specified, the mask will be initialized to 022.
+    </para>
+    <para>
+      <command>useradd</command> and <command>newusers</command> use this
+      mask to set the mode of the home directory they create
+    </para>
+    <para condition="no_pam">
+      It is also used by <command>login</command> to define users' initial
+      umask.  Note that this mask can be overriden by the user's GECOS
+      line (if <option>QUOTAS_ENAB</option> is set) or by the
+      specification of a limit with the <emphasis>K</emphasis> identifier
+      in <citerefentry><refentrytitle>limits</refentrytitle>
+      <manvolnum>5</manvolnum></citerefentry>.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/USERDEL_CMD.xml b/man/login.defs.d/USERDEL_CMD.xml
new file mode 100644 (file)
index 0000000..40800b2
--- /dev/null
@@ -0,0 +1,72 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 1996 - 2000, Marek Michałkiewicz
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>USERDEL_CMD</option> (string)</term>
+  <listitem>
+    <para>
+      If defined, this command is run when removing a user. It should
+      remove any at/cron/print jobs etc. owned by the user to be removed
+      (passed as the first argument).
+    </para>
+    <para>
+      The return code of the script is not taken into account.
+    </para>
+    <para>
+      Here is an example script, which removes the user's
+      cron, at and print jobs:
+      <programlisting>
+#! /bin/sh
+
+# Check for the required argument.
+if [ $# != 1 ]; then
+       echo "Usage: $0 username"
+       exit 1
+fi
+
+# Remove cron jobs.
+crontab -r -u $1
+
+# Remove at jobs.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR -name "[^.]*" -type f -user $1 -delete \;
+
+# Remove print jobs.
+lprm $1
+
+# All done.
+exit 0
+      </programlisting>
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/login.defs.d/USERGROUPS_ENAB.xml b/man/login.defs.d/USERGROUPS_ENAB.xml
new file mode 100644 (file)
index 0000000..daa8892
--- /dev/null
@@ -0,0 +1,46 @@
+<!--
+   Copyright (c) 1991 - 1993, Julianne Frances Haugh
+   Copyright (c) 1991 - 1993, Chip Rosenthal
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<varlistentry>
+  <term><option>USERGROUPS_ENAB</option> (boolean)</term>
+  <listitem>
+    <para condition="no_pam">
+      Enable setting of the umask group bits to be the same as owner bits
+      (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
+      the same as gid, and username is the same as the primary group name.
+    </para>
+    <para>
+      If set to <replaceable>yes</replaceable>, <command>userdel</command>
+      will remove the user's group if it contains no more members, and
+      <command>useradd</command> will create by default a group with the
+      name of the user.
+    </para>
+  </listitem>
+</varlistentry>
diff --git a/man/logoutd.8 b/man/logoutd.8
new file mode 100644 (file)
index 0000000..7b9a773
--- /dev/null
@@ -0,0 +1,49 @@
+'\" t
+.\"     Title: logoutd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "LOGOUTD" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+logoutd \- Enforce login time restrictions
+.SH "SYNOPSIS"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "DESCRIPTION"
+.PP
+
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "FILES"
+.PP
+/etc/porttime
+.RS 4
+File containing port access\&.
+.RE
+.PP
+/var/run/utmp
+.RS 4
+List of current login sessions\&.
+.RE
diff --git a/man/logoutd.8.xml b/man/logoutd.8.xml
new file mode 100644 (file)
index 0000000..6a2f51d
--- /dev/null
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1991       , Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='logoutd.8'>
+  <!-- $Id: logoutd.8.xml 2435 2008-10-11 11:44:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>logoutd</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>logoutd</refname>
+    <refpurpose>Enforce login time restrictions</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>logoutd</command>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      <command>logoutd</command> enforces the login time and port
+      restrictions specified in <filename>/etc/porttime</filename>. 
+      <command>logoutd</command> should be started from
+      <filename>/etc/rc</filename>. The <filename>/var/run/utmp</filename>
+      file is scanned periodically and each user name is checked to see if
+      the named user is permitted on the named port at the current time. 
+      Any login session which is violating the restrictions in
+      <filename>/etc/porttime</filename> is terminated.
+    </para>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/porttime</filename></term>
+       <listitem>
+         <para>File containing port access.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/var/run/utmp</filename></term>
+       <listitem>
+         <para>List of current login sessions.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+</refentry>
diff --git a/man/newgrp.1 b/man/newgrp.1
new file mode 100644 (file)
index 0000000..5fb4bd3
--- /dev/null
@@ -0,0 +1,91 @@
+'\" t
+.\"     Title: newgrp
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: English
+.\"
+.TH "NEWGRP" "1" "07/24/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+newgrp \- log in to a new group
+.SH "SYNOPSIS"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIgroup\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\'s environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/newgrp.1.xml b/man/newgrp.1.xml
new file mode 100644 (file)
index 0000000..83715f0
--- /dev/null
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+   Copyright (c) 1991       , Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY SYSLOG_SG_ENAB        SYSTEM "login.defs.d/SYSLOG_SG_ENAB.xml">
+]>
+<refentry id='newgrp.1'>
+  <!-- $Id: newgrp.1.xml 3005 2009-05-25 19:41:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>newgrp</refentrytitle>
+    <manvolnum>1</manvolnum>
+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>newgrp</refname>
+    <refpurpose>log in to a new group</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>newgrp</command>    <arg choice='opt'>- </arg>
+      <arg choice='opt'><replaceable>group</replaceable></arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+  <title>DESCRIPTION</title>
+    <para>
+      The <command>newgrp</command> command is used to change the current
+      group ID during a login session. If the optional <option>-</option>
+      flag is given, the user's environment will be reinitialized as though
+      the user had logged in, otherwise the current environment, including
+      current working directory, remains unchanged.
+    </para>
+
+    <para>
+      <command>newgrp</command> changes the current real group ID to the
+      named group, or to the default group listed in
+      <filename>/etc/passwd</filename> if no group name is given. 
+      <command>newgrp</command> also tries to add the group to the user
+      groupset. If not root, the user will be prompted for a password if she
+      does not have a password (in <filename>/etc/shadow</filename> if this
+      user has an entry in the shadowed password file, or in
+      <filename>/etc/passwd</filename> otherwise) and the group does, or if
+      the user is not listed as a member and the group has a password. The
+      user will be denied access if the group password is empty and the user
+      is not listed as a member.
+    </para>
+
+    <para condition="gshadow">
+      If there is an entry for this group in
+      <filename>/etc/gshadow</filename>, then the list of members and the
+      password of this group will be taken from this file, otherwise, the
+      entry in <filename>/etc/group</filename> is considered.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &SYSLOG_SG_ENAB;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry condition="gshadow">
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>id</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>gpasswd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry><phrase condition="gshadow">,
+       <citerefentry condition="gshadow">
+         <refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum>
+       </citerefentry>
+      </phrase>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/newusers.8 b/man/newusers.8
new file mode 100644 (file)
index 0000000..2e05206
--- /dev/null
@@ -0,0 +1,377 @@
+'\" t
+.\"     Title: newusers
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "NEWUSERS" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+newusers \- update and create new users in batch
+.SH "SYNOPSIS"
+.HP \w'\fBnewusers\fR\ 'u
+\fBnewusers\fR [\fIoptions\fR\ \fInew_users\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBnewusers\fR
+command reads a file of user name and clear\-text password pairs and uses this information to update a group of existing users or to create new users\&. Each line is in the same format as the standard password file (see
+\fBpasswd\fR(5)) with the exceptions explained below:
+.PP
+pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
+.PP
+\fIpw_name\fR
+.RS 4
+This is the name of the user\&.
+.sp
+It can be the name of a new user or the name of an existing user (or an user created before by
+\fBnewusers\fR)\&. In case of an existing user, the user\'s information will be changed, otherwise a new user will be created\&.
+.RE
+.PP
+\fIpw_passwd\fR
+.RS 4
+This field will be encrypted and used as the new value of the encrypted password\&.
+.RE
+.PP
+\fIpw_uid\fR
+.RS 4
+This field is used to define the UID of the user\&.
+.sp
+If the field is empty, an new (unused) UID will be defined automatically by
+\fBnewusers\fR\&.
+.sp
+If this field contains a number, this number will be used as the UID\&.
+.sp
+If this field contains the name of an existing user (or the name of an user created before by
+\fBnewusers\fR), the UID of the specified user will be used\&.
+.sp
+If the UID of an existing user is changed, the files ownership of the user\'s file should be fixed manually\&.
+.RE
+.PP
+\fIpw_gid\fR
+.RS 4
+This field is used to define the primary group ID for the user\&.
+.sp
+If this field contains the name of an existing group (or a group created before by
+\fBnewusers\fR), the GID of this group will be used as the primary group ID for the user\&.
+.sp
+If this field is a number, this number will be used as the primary group ID of the user\&. If no groups exist with this GID, a new group will be created with this GID, and the name of the user\&.
+.sp
+If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and as the GID for the new group\&.
+.sp
+If this field contains the name of a group which does not exist (and was not created earlier wbefore by
+\fBnewusers\fR), a new group will be created with the specified name and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and Gs the ID for the new group\&.
+.RE
+.PP
+\fIpw_gecos\fR
+.RS 4
+This field is copied in the GECOS field of the user\&.
+.RE
+.PP
+\fIpw_dir\fR
+.RS 4
+This field is used to define the home directory of the user\&.
+.sp
+If this field does not specify an existing directory, the specified directory is created, with ownership set to the user being created or updated and its primary group\&.
+.sp
+If the home directory of an existing user is changed,
+\fBnewusers\fR
+does not move or copy the content of the old directory to the new location\&. This should be done manually\&.
+.RE
+.PP
+\fIpw_shell\fR
+.RS 4
+This field defines the shell of the user\&. No checks are performed on this field\&.
+.RE
+.PP
+
+\fBnewusers\fR
+first tries to create or change all the specified users, and then write these changes to the user or group databases\&. If an error occurs (except in the final writes to the databases), no changes are committed to the databases\&.
+.PP
+This command is intended to be used in a large system environment where many accounts are updated at a single time\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBnewusers\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system account\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are choosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "CAVEATS"
+.PP
+The input file must be protected since it contains unencrypted passwords\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(1),
+\fBuseradd\fR(8)\&.
diff --git a/man/newusers.8.xml b/man/newusers.8.xml
new file mode 100644 (file)
index 0000000..3ba109b
--- /dev/null
@@ -0,0 +1,412 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1991 - 1994, Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY ENCRYPT_METHOD        SYSTEM "login.defs.d/ENCRYPT_METHOD.xml">
+<!ENTITY GID_MAX               SYSTEM "login.defs.d/GID_MAX.xml">
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!ENTITY MD5_CRYPT_ENAB        SYSTEM "login.defs.d/MD5_CRYPT_ENAB.xml">
+<!ENTITY PASS_MAX_DAYS         SYSTEM "login.defs.d/PASS_MAX_DAYS.xml">
+<!ENTITY PASS_MIN_DAYS         SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
+<!ENTITY PASS_WARN_AGE         SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
+<!ENTITY SHA_CRYPT_MIN_ROUNDS  SYSTEM "login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml">
+<!ENTITY SYS_GID_MAX           SYSTEM "login.defs.d/SYS_GID_MAX.xml">
+<!ENTITY SYS_UID_MAX           SYSTEM "login.defs.d/SYS_UID_MAX.xml">
+<!ENTITY UID_MAX               SYSTEM "login.defs.d/UID_MAX.xml">
+<!ENTITY UMASK                 SYSTEM "login.defs.d/UMASK.xml">
+]>
+
+<refentry id='newusers.8'>
+  <!-- $Id: newusers.8.xml 2954 2009-05-19 22:17:55Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>newusers</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>newusers</refname>
+    <refpurpose>update and create new users in batch</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>newusers</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+       <replaceable>new_users</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>newusers</command> command reads a file of user name and
+      clear-text password pairs and uses this information to update a group
+      of existing users or to create new users. Each line is in the same format
+      as the standard password file (see
+      <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>) with the exceptions explained below:
+    </para>
+    <para>pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell</para>
+
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <emphasis remap='I'>pw_name</emphasis>
+       </term>
+       <listitem>
+         <para>
+           This is the name of the user.
+         </para>
+         <para>
+           It can be the name of a new user or the name of an existing
+           user (or an user created before by
+           <command>newusers</command>).  In case of an existing user,
+           the user's information will be changed, otherwise a new user
+           will be created.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <emphasis remap='I'>pw_passwd</emphasis>
+       </term>
+       <listitem>
+         <para>
+           This field will be encrypted and used as the new value of the
+           encrypted password.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <emphasis remap='I'>pw_uid</emphasis>
+       </term>
+       <listitem>
+         <para>
+           This field is used to define the UID of the user.
+         </para>
+         <para>
+           If the field is empty, an new (unused) UID will be defined
+           automatically by <command>newusers</command>.
+         </para>
+         <para>
+           If this field contains a number, this number will be used as
+           the UID.
+         </para>
+         <para>
+           If this field contains the name of an existing user (or the
+           name of an user created before by
+           <command>newusers</command>), the UID of the specified user
+           will be used.
+         </para>
+         <para>
+           If the UID of an existing user is changed, the files ownership
+           of the user's file should be fixed manually.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <emphasis remap='I'>pw_gid</emphasis>
+       </term>
+       <listitem>
+         <para>
+           This field is used to define the primary group ID for the user.
+         </para>
+         <para>
+           If this field contains the name of an existing group (or a
+           group created before by <command>newusers</command>), the GID
+           of this group will be used as the primary group ID for the
+           user.
+         </para>
+         <para>
+           If this field is a number, this number will be used as the
+           primary group ID of the user.  If no groups exist with this
+           GID, a new group will be created with this GID, and the name
+           of the user.
+         </para>
+         <para>
+           If this field is empty, a new group will be created with the
+           name of the user and a GID will be automatically defined by
+           <command>newusers</command> to be used as the primary group ID
+           for the user and as the GID for the new group.
+         </para>
+         <para>
+           If this field contains the name of a group which does not
+           exist (and was not created earlier wbefore by
+           <command>newusers</command>), a new group will be created with
+           the specified name and a GID will be automatically defined by
+           <command>newusers</command> to be used as the primary group ID
+           for the user and Gs the ID for the new group.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <emphasis remap='I'>pw_gecos</emphasis>
+       </term>
+       <listitem>
+         <para>
+           This field is copied in the GECOS field of the user.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <emphasis remap='I'>pw_dir</emphasis>
+       </term>
+       <listitem>
+         <para>
+           This field is used to define the home directory of the user.
+         </para>
+         <para>
+           If this field does not specify an existing directory, the
+           specified directory is created, with ownership set to the
+           user being created or updated and its primary group.
+         </para>
+         <para>
+           If the home directory of an existing user is changed,
+           <command>newusers</command> does not move or copy the content
+           of the old directory to the new location. This should be done
+           manually.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <emphasis remap='I'>pw_shell</emphasis>
+       </term>
+       <listitem>
+         <para>
+           This field defines the shell of the user.
+           No checks are performed on this field.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>
+      <command>newusers</command> first tries to create or change all the
+      specified users, and then write these changes to the user or group
+      databases. If an error occurs (except in the final writes to the
+      databases), no changes are committed to the databases.
+    </para>
+    <para condition="pam">
+      During this first pass, users are created with a locked password
+      (and passwords are not changed for the users which are not created).
+      A second pass is used to update the passwords using PAM.  Failures
+      to update a password are reported, but will not stop the other
+      password updates.
+    </para>
+
+    <para>
+      This command is intended to be used in a large system environment
+      where many accounts are updated at a single time.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>newusers</command> command are:
+    </para>
+    <variablelist remap='IP' condition="no_pam">
+      <varlistentry>
+       <term><option>-c</option>, <option>--crypt-method</option></term>
+       <listitem>
+         <para>Use the specified method to encrypt the passwords.</para>
+         <para>
+           The available methods are DES, MD5, NONE, and SHA256 or SHA512
+           if your libc support these methods.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term><option>-h</option>, <option>--help</option></term>
+       <listitem>
+         <para>Display help message and exit.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-r</option>, <option>--system</option>
+       </term>
+       <listitem>
+         <para>
+           Create a system account.
+         </para>
+         <para>
+           System users will be created with no aging information in
+           <filename>/etc/shadow</filename>, and their numeric
+           identifiers are choosen in the
+           <option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option>
+           range, defined in <filename>login.defs</filename>, instead of
+           <option>UID_MIN</option>-<option>UID_MAX</option> (and their
+           <option>GID</option> counterparts for the creation of groups).
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+    <variablelist remap='IP' condition="no_pam">
+      <varlistentry condition="sha_crypt">
+       <term><option>-s</option>, <option>--sha-rounds</option></term>
+       <listitem>
+         <para>
+           Use the specified number of rounds to encrypt the passwords.
+         </para>
+         <para>
+           The value 0 means that the system will choose the default
+           number of rounds for the crypt method (5000).
+         </para>
+         <para>
+           A minimal value of 1000 and a maximal value of 999,999,999
+           will be enforced.
+         </para>
+         <para>
+           You can only use this option with the SHA256 or SHA512
+           crypt method.
+         </para>
+         <para>
+           By default, the number of rounds is defined by the
+           SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+           <filename>/etc/login.defs</filename>.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      The input file must be protected since it contains unencrypted
+      passwords.
+    </para>
+    <para condition="no_pam">
+      You should make sure the passwords and the encryption method respect
+      the system's password policy.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist condition="no_pam">
+      &ENCRYPT_METHOD;
+    </variablelist>
+    <variablelist>
+      &GID_MAX; <!-- documents also GID_MIN -->
+      &MAX_MEMBERS_PER_GROUP;
+    </variablelist>
+    <variablelist condition="no_pam">
+      &MD5_CRYPT_ENAB;
+    </variablelist>
+    <variablelist>
+      &PASS_MAX_DAYS;
+      &PASS_MIN_DAYS;
+      &PASS_WARN_AGE;
+    </variablelist>
+    <variablelist condition="no_pam">
+      &SHA_CRYPT_MIN_ROUNDS; <!-- documents also SHA_CRYPT_MAX_ROUNDS-->
+    </variablelist>
+    <variablelist>
+      &SYS_GID_MAX; <!-- documents also SYS_GID_MIN -->
+      &SYS_UID_MAX; <!-- documents also SYS_UID_MIN -->
+      &UID_MAX; <!-- documents also UID_MIN -->
+      &UMASK;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="gshadow">
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="pam">
+       <term><filename>/etc/pam.d/newusers</filename></term>
+       <listitem>
+         <para>PAM configuration for <command>newusers</command>.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/nologin.8 b/man/nologin.8
new file mode 100644 (file)
index 0000000..53ccd4d
--- /dev/null
@@ -0,0 +1,43 @@
+'\" t
+.\"     Title: nologin
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "NOLOGIN" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+nologin \- politely refuse a login
+.SH "SYNOPSIS"
+.HP \w'\fBnologin\fR\ 'u
+\fBnologin\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBnologin\fR
+command displays a message that an account is not available and exits non\-zero\&. It is intended as a replacement shell field for accounts that have been disabled\&.
+.PP
+To disable all logins, investigate
+\fBnologin\fR(5)\&.
+.SH "SEE ALSO"
+.PP
+
+\fBlogin\fR(1),
+\fBnologin\fR(5)\&.
+.SH "HISTORY"
+.PP
+The
+\fBnologin\fR
+command appearred in BSD 4\&.4\&.
diff --git a/man/nologin.8.xml b/man/nologin.8.xml
new file mode 100644 (file)
index 0000000..95f106e
--- /dev/null
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1993       , The Regents of the University of California
+   Copyright (c) 2006 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='nologin.8'>
+  <!-- $Id: nologin.8.xml 2486 2009-01-27 18:17:54Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>nologin</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>nologin</refname>
+    <refpurpose>politely refuse a login</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>nologin</command>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>nologin</command> command displays a message that an account
+      is not available and exits non-zero. It is intended as a replacement shell
+      field for accounts that have been disabled.
+    </para>
+    <para>
+      To disable all logins, investigate
+      <citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>nologin</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+
+  <refsect1 id='history'>
+    <title>HISTORY</title>
+    <para>
+      The <command>nologin</command> command appearred in BSD 4.4.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/passwd.1 b/man/passwd.1
new file mode 100644 (file)
index 0000000..72a0ea6
--- /dev/null
@@ -0,0 +1,384 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: English
+.\"
+.TH "PASSWD" "1" "07/24/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+passwd \- change user password
+.SH "SYNOPSIS"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIoptions\fR] [\fILOGIN\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBpasswd\fR
+command changes passwords for user accounts\&. A normal user may only change the password for his/her own account, while the superuser may change the password for any account\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "Password Changes"
+.PP
+The user is first prompted for his/her old password, if one is present\&. This password is then encrypted and compared against the stored password\&. The user has only one chance to enter the correct password\&. The superuser is permitted to bypass this step so that forgotten passwords may be changed\&.
+.PP
+After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time\&. If not,
+\fBpasswd\fR
+refuses to change the password and exits\&.
+.PP
+The user is then prompted twice for a replacement password\&. The second entry is compared against the first and both are required to match in order for the password to be changed\&.
+.PP
+Then, the password is tested for complexity\&. As a general guideline, passwords should consist of 6 to 8 characters including one or more characters from each of the following sets:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+lower case alphabetics
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+digits 0 thru 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+punctuation marks
+.RE
+.PP
+Care must be taken not to include the system default erase or kill characters\&.
+\fBpasswd\fR
+will reject any password which is not suitably complex\&.
+.SS "Hints for user passwords"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+Compromises in password security normally result from careless password selection or handling\&. For this reason, you should not select a password which appears in a dictionary or which must be written down\&. The password should also not be a proper name, your license number, birth date, or street address\&. Any of these may be used as guesses to violate system security\&.
+.PP
+You can find advices on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+This option can be used only with
+\fB\-S\fR
+and causes show status for all users\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+Delete a user\'s password (make it empty)\&. This is a quick way to disable a password for an account\&. It will set the named account passwordless\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+Immediately expire an account\'s password\&. This in effect can force a user to change his/her password at the user\'s next login\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR \fIINACTIVE\fR
+.RS 4
+This option is used to disable an account after the password has been expired for a number of days\&. After a user account has had an expired password for
+\fIINACTIVE\fR
+days, the user may no longer sign on to the account\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Indicate password change should be performed only for expired authentication tokens (passwords)\&. The user wishes to keep their non\-expired tokens as before\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Lock the password of the named account\&. This option disables a password by changing it to a value which matches no possible encrypted value (it adds a \(aa!\(aa at the beginning of the password)\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\'s expire date to Jan 2, 1970)\&.
+.sp
+Users with a locked password are not allowed to change their password\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR \fIMIN_DAYS\fR
+.RS 4
+Set the minimum number of days between password changes to
+\fIMIN_DAYS\fR\&. A value of zero for this field indicates that the user may change his/her password at any time\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Quiet mode\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR \fIREPOSITORY\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Display account status information\&. The status information consists of 7 fields\&. The first field is the user\'s login name\&. The second field indicates if the user account has a locked password (L), has no password (NP), or has a usable password (P)\&. The third field gives the date of the last password change\&. The next four fields are the minimum age, maximum age, warning period, and inactivity period for the password\&. These ages are expressed in days\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR \fIWARN_DAYS\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned that his/her password is about to expire\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR \fIMAX_DAYS\fR
+.RS 4
+Set the maximum number of days a password remains valid\&. After
+\fIMAX_DAYS\fR, the password is required to be changed\&.
+.RE
+.SH "CAVEATS"
+.PP
+Password complexity checking may vary from site to site\&. The user is urged to select a password as complex as he or she feels comfortable with\&.
+.PP
+Users may not be able to change their password on a system if NIS is enabled and they are not logged into the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\'t change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBpasswd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+permission denied
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid combination of options
+.RE
+.PP
+\fI3\fR
+.RS 4
+unexpected failure, nothing done
+.RE
+.PP
+\fI4\fR
+.RS 4
+unexpected failure,
+passwd
+file missing
+.RE
+.PP
+\fI5\fR
+.RS 4
+passwd
+file busy, try again
+.RE
+.PP
+\fI6\fR
+.RS 4
+invalid argument to option
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/passwd.1.xml b/man/passwd.1.xml
new file mode 100644 (file)
index 0000000..554dc1d
--- /dev/null
@@ -0,0 +1,473 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1989 - 1994, Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY ENCRYPT_METHOD        SYSTEM "login.defs.d/ENCRYPT_METHOD.xml">
+<!ENTITY MD5_CRYPT_ENAB        SYSTEM "login.defs.d/MD5_CRYPT_ENAB.xml">
+<!ENTITY OBSCURE_CHECKS_ENAB   SYSTEM "login.defs.d/OBSCURE_CHECKS_ENAB.xml">
+<!ENTITY PASS_ALWAYS_WARN      SYSTEM "login.defs.d/PASS_ALWAYS_WARN.xml">
+<!ENTITY PASS_CHANGE_TRIES     SYSTEM "login.defs.d/PASS_CHANGE_TRIES.xml">
+<!ENTITY PASS_MAX_LEN          SYSTEM "login.defs.d/PASS_MAX_LEN.xml">
+<!ENTITY SHA_CRYPT_MIN_ROUNDS  SYSTEM "login.defs.d/SHA_CRYPT_MIN_ROUNDS.xml">
+]>
+<refentry id='passwd.1'>
+  <!--  $Id: passwd.1.xml 3014 2009-06-05 21:14:12Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>passwd</refentrytitle>
+    <manvolnum>1</manvolnum>
+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>passwd</refname>
+    <refpurpose>change user password</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>passwd</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+      </arg>
+      <arg choice='opt'>
+        <replaceable>LOGIN</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>passwd</command> command changes passwords for user accounts.
+      A normal user may only change the password for his/her own account, while
+      the superuser may change the password for any account.
+      <command>passwd</command> also changes the account or associated
+      password validity period.
+    </para>
+
+    <refsect2 id='password_changes'>
+      <title>Password Changes</title>
+      <para>
+       The user is first prompted for his/her old password, if one is
+       present. This password is then encrypted and compared against the
+       stored password. The user has only one chance to enter the correct
+       password. The superuser is permitted to bypass this step so that
+       forgotten passwords may be changed.
+      </para>
+
+      <para>
+       After the password has been entered, password aging information is
+       checked to see if the user is permitted to change the password at
+       this time. If not, <command>passwd</command> refuses to change the
+       password and exits.
+      </para>
+
+      <para>
+       The user is then prompted twice for a replacement password. The
+       second entry is compared against the first and both are required to
+       match in order for the password to be changed.
+      </para>
+
+      <para>
+       Then, the password is tested for complexity. As a general guideline,
+       passwords should consist of 6 to 8 characters including one or more
+       characters from each of the following sets:
+      </para>
+
+      <itemizedlist mark='bullet'>
+       <listitem>
+         <para>lower case alphabetics</para>
+       </listitem>
+       <listitem>
+         <para>digits 0 thru 9</para>
+       </listitem>
+       <listitem>
+         <para>punctuation marks</para>
+       </listitem>
+      </itemizedlist>
+
+      <para>
+       Care must be taken not to include the system default erase or kill
+       characters. <command>passwd</command> will reject any password which
+       is not suitably complex.
+      </para>
+
+    </refsect2>
+
+    <refsect2 id='hints_for_user_passwords'>
+      <title>Hints for user passwords</title>
+      <para>
+       The security of a password depends upon the strength of the
+       encryption algorithm and the size of the key space. The legacy
+       <emphasis>UNIX</emphasis> System encryption method is based on the
+       NBS DES algorithm. More recent methods are now recommended (see
+       <option>ENCRYPT_METHOD</option>). The size of the key space
+       depends upon the randomness of the password which is selected.
+      </para>
+
+      <para>
+       Compromises in password security normally result from careless
+       password selection or handling. For this reason, you should not
+       select a password which appears in a dictionary or which must be
+       written down. The password should also not be a proper name, your
+       license number, birth date, or street address. Any of these may be
+       used as guesses to violate system security.
+      </para>
+
+      <para>
+       You can find advices on how to choose a strong password on
+       http://en.wikipedia.org/wiki/Password_strength
+      </para>
+    </refsect2>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>passwd</command> command are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-a</option>, <option>--all</option>
+       </term>
+       <listitem>
+         <para>
+           This option can be used only with <option>-S</option> and causes show
+           status for all users.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-d</option>, <option>--delete</option>
+       </term>
+       <listitem>
+         <para>
+           Delete a user's password (make it empty). This is a quick way
+           to disable a password for an account. It will set the named
+           account passwordless.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-e</option>, <option>--expire</option>
+       </term>
+       <listitem>
+         <para>
+           Immediately expire an account's password. This in effect can
+           force a user to change his/her password at the user's next login.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-h</option>, <option>--help</option></term>
+       <listitem>
+         <para>Display help message and exit.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-i</option>, <option>--inactive</option> <replaceable>INACTIVE</replaceable>
+       </term>
+       <listitem>
+         <para>
+           This option is used to disable an account after the password has
+           been expired for a number of days. After a user account has had
+           an expired password for <replaceable>INACTIVE</replaceable>
+           days, the user may no longer sign on to the account.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-k</option>, <option>--keep-tokens</option>
+       </term>
+       <listitem>
+         <para>
+           Indicate password change should be performed only for expired
+           authentication tokens (passwords). The user wishes to keep their
+           non-expired tokens as before.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-l</option>, <option>--lock</option>
+       </term>
+       <listitem>
+         <para>
+           Lock the password of the named account. This option disables a
+           password by changing it to a value which matches no possible
+           encrypted value (it adds a ´!´ at the beginning of the
+           password).
+         </para>
+         <para>
+           Note that this does not disable the account. The user may
+           still be able to login using another authentication token
+           (e.g. an SSH key). To disable the account, administrators
+           should use <command>usermod --expiredate 1</command> (this set
+           the account's expire date to Jan 2, 1970).
+         </para>
+         <para>
+           Users with a locked password are not allowed to change their
+           password.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-n</option>, <option>--mindays</option> <replaceable>MIN_DAYS</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Set the minimum number of days between password changes to
+           <replaceable>MIN_DAYS</replaceable>. A value of zero for this field
+           indicates that the user may change his/her password at any time.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-q</option>, <option>--quiet</option>
+       </term>
+       <listitem>
+         <para>
+           Quiet mode.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-r</option>, <option>--repository</option> <replaceable>REPOSITORY</replaceable>
+       </term>
+       <listitem>
+         <para>
+           change password in <replaceable>REPOSITORY</replaceable> repository
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-S</option>, <option>--status</option>
+       </term>
+       <listitem>
+         <para>
+           Display account status information. The status information
+           consists of 7 fields. The first field is the user's login name. 
+           The second field indicates if the user account has a locked
+           password (L),
+           has no password (NP), or has a usable password (P). The third
+           field gives the date of the last password change. The next four
+           fields are the minimum age, maximum age, warning period, and
+           inactivity period for the password. These ages are expressed in
+           days.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-u</option>, <option>--unlock</option>
+       </term>
+       <listitem>
+         <para>
+           Unlock the password of the named account. This option
+           re-enables a password by changing the password back to its
+           previous value (to the value before using the
+           <option>-l</option> option).
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-w</option>, <option>--warndays</option> <replaceable>WARN_DAYS</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Set the number of days of warning before a password change is
+           required. The <replaceable>WARN_DAYS</replaceable> option is
+           the number of days prior to the password expiring that a user
+           will be warned that his/her password is about to expire.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-x</option>, <option>--maxdays</option> <replaceable>MAX_DAYS</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Set the maximum number of days a password remains valid. After
+           <replaceable>MAX_DAYS</replaceable>, the password is required
+           to be changed.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      Password complexity checking may
+      vary from site to site. The user is urged to select a password as
+      complex as he or she feels comfortable with.
+    </para>
+    <para>
+      Users may not be able to 
+      change their password on a system if NIS is enabled and they are not 
+      logged into the NIS server.
+    </para>
+    <para condition="pam">
+      <command>passwd</command> uses PAM to authenticate users and to
+      change their passwords.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration' condition="no_pam">
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &ENCRYPT_METHOD;
+      &MD5_CRYPT_ENAB;
+      &OBSCURE_CHECKS_ENAB;
+      &PASS_ALWAYS_WARN;
+      &PASS_CHANGE_TRIES;
+      &PASS_MAX_LEN; <!-- documents also PASS_MIN_LEN -->
+      &SHA_CRYPT_MIN_ROUNDS;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="no_pam">
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="pam">
+       <term><filename>/etc/pam.d/passwd</filename></term>
+       <listitem>
+         <para>PAM configuration for <command>passwd</command>.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='exit_values'>
+    <title>EXIT VALUES</title>
+    <para>
+      The <command>passwd</command> command exits with the following values:
+      <variablelist>
+       <varlistentry>
+         <term><replaceable>0</replaceable></term>
+         <listitem>
+           <para>success</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>1</replaceable></term>
+         <listitem>
+           <para>permission denied</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>2</replaceable></term>
+         <listitem>
+           <para>invalid combination of options</para>
+           </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>3</replaceable></term>
+         <listitem>
+           <para>unexpected failure, nothing done</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>4</replaceable></term>
+         <listitem>
+           <para>unexpected failure, <filename>passwd</filename> file missing</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>5</replaceable></term>
+         <listitem>
+           <para><filename>passwd</filename> file busy, try again</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>6</replaceable></term>
+         <listitem>
+           <para>invalid argument to option</para>
+         </listitem>
+       </varlistentry>
+      </variablelist>
+    </para>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <phrase condition="no_pam">
+       <citerefentry>
+         <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+       </citerefentry>,
+      </phrase>
+      <citerefentry>
+       <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/passwd.5 b/man/passwd.5
new file mode 100644 (file)
index 0000000..5299547
--- /dev/null
@@ -0,0 +1,172 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: English
+.\"
+.TH "PASSWD" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+passwd \- the password file
+.SH "DESCRIPTION"
+.PP
+
+/etc/passwd
+contains one line for each user account, with seven fields delimited by colons (\(lq:\(rq)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+login name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional encrypted password
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical user ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical group ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+user name or comment field
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+user home directory
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional user command interpreter
+.RE
+.PP
+The encrypted password field may be blank, in which case no password is required to authenticate as the specified login name\&. However, some applications which read the
+/etc/passwd
+file may decide not to permit
+\fIany\fR
+access at all if the
+\fIpassword\fR
+field is blank\&. If the
+\fIpassword\fR
+field is a lower\-case
+\(lqx\(rq, then the encrypted password is actually stored in the
+\fBshadow\fR(5)
+file instead; there
+\fImust\fR
+be a corresponding line in the
+/etc/shadow
+file, or else the user account is invalid\&. If the
+\fIpassword\fR
+field is any other string, then it will be treated as an encrypted password, as specified by
+\fBcrypt\fR(3)\&.
+.PP
+The comment field is used by various system utilities, such as
+\fBfinger\fR(1)\&.
+.PP
+The home directory field provides the name of the initial working directory\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$HOME\fR
+environmental variable\&.
+.PP
+The command interpreter field provides the name of the user\'s command language interpreter, or the name of the initial program to execute\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$SHELL\fR
+environmental variable\&. If this field is empty, it defaults to the value
+/bin/sh\&.
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+optional encrypted password file
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+Backup file for /etc/passwd\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/passwd.5.xml b/man/passwd.5.xml
new file mode 100644 (file)
index 0000000..7ec2571
--- /dev/null
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1989 - 1990, Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='passwd.5'>
+  <!-- $Id: passwd.5.xml 3017 2009-06-06 11:21:15Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>passwd</refentrytitle>
+    <manvolnum>5</manvolnum>
+    <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>passwd</refname>
+    <refpurpose>the password file</refpurpose>
+  </refnamediv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      <filename>/etc/passwd</filename> contains one line for each
+      user account, with seven fields delimited by colons
+      (<quote>:</quote>).
+      These fields are:
+    </para>
+    <itemizedlist mark='bullet'>
+      <listitem>
+       <para>login name</para>
+      </listitem>
+      <listitem>
+       <para>optional encrypted password</para>
+      </listitem>
+      <listitem>
+       <para>numerical user ID</para>
+      </listitem>
+      <listitem>
+       <para>numerical group ID</para>
+      </listitem>
+      <listitem>
+       <para>user name or comment field</para>
+      </listitem>
+      <listitem>
+       <para>user home directory</para>
+      </listitem>
+      <listitem>
+       <para>optional user command interpreter</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>
+      The encrypted password field may be blank, in which case no password
+      is required to authenticate as the specified login name. However,
+      some applications which read the <filename>/etc/passwd</filename> file
+      may decide not to permit <emphasis>any</emphasis> access at all if the
+      <emphasis>password</emphasis> field is blank. If the
+      <emphasis>password</emphasis> field is a lower-case <quote>x</quote>,
+      then the encrypted password is actually stored in the
+      <citerefentry><refentrytitle>shadow</refentrytitle>
+      <manvolnum>5</manvolnum></citerefentry> file instead; there
+      <emphasis>must</emphasis> be a corresponding line in the
+      <filename>/etc/shadow</filename> file, or else the user account is invalid. 
+      If the <emphasis>password</emphasis> field is any other string, then
+      it will be treated as an encrypted password, as specified by
+      <citerefentry><refentrytitle>crypt</refentrytitle>
+      <manvolnum>3</manvolnum></citerefentry>.
+
+    </para>
+
+    <para>
+      The comment field is used by various system utilities, such as
+      <citerefentry><refentrytitle>finger</refentrytitle>
+      <manvolnum>1</manvolnum></citerefentry>.
+    </para>
+
+    <para>
+      The home directory field provides the name of the initial working
+      directory. The <command>login</command> program uses this information
+      to set the value of the <envar>$HOME</envar> environmental variable.
+    </para>
+
+    <para>
+      The command interpreter field provides the name of the user's command
+      language interpreter, or the name of the initial program to execute. 
+      The <command>login</command> program uses this information to set the
+      value of the <envar>$SHELL</envar> environmental variable. If this
+      field is empty, it defaults to the value <filename>/bin/sh</filename>.
+    </para>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>optional encrypted password file</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/passwd-</filename></term>
+       <listitem>
+         <para>Backup file for /etc/passwd.</para>
+         <para>
+           Note that this file is used by the tools of the shadow
+           toolsuite, but not by all user and password management tools.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>getent</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>getpwnam</refentrytitle><manvolnum>3</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>pwunconv</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>sulogin</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/pl/Makefile.am b/man/pl/Makefile.am
new file mode 100644 (file)
index 0000000..f71dbae
--- /dev/null
@@ -0,0 +1,59 @@
+
+mandir = @mandir@/pl
+
+man_MANS = \
+       chage.1 \
+       chfn.1 \
+       chgpasswd.8 \
+       chpasswd.8 \
+       chsh.1 \
+       expiry.1 \
+       faillog.5 \
+       faillog.8 \
+       gpasswd.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmems.8 \
+       groupmod.8 \
+       groups.1 \
+       grpck.8 \
+       grpconv.8 \
+       grpunconv.8 \
+       lastlog.8 \
+       login.defs.5 \
+       logoutd.8 \
+       newgrp.1 \
+       newusers.8 \
+       passwd.1 \
+       passwd.5 \
+       pwck.8 \
+       pwconv.8 \
+       pwunconv.8 \
+       sg.1 \
+       shadow.5 \
+       suauth.5 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8 \
+       vigr.8 \
+       vipw.8
+
+man_nopam = \
+       limits.5 \
+       login.access.5 \
+       porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_nopam) \
+       getspnam.3 \
+       id.1 \
+       shadow.3 \
+       sulogin.8
+
+include ../generate_translations.mak
+
diff --git a/man/pl/Makefile.in b/man/pl/Makefile.in
new file mode 100644 (file)
index 0000000..e7e954d
--- /dev/null
@@ -0,0 +1,558 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+DIST_COMMON = $(srcdir)/../generate_mans.mak \
+       $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+subdir = man/pl
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+       "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/pl
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = chage.1 chfn.1 chgpasswd.8 chpasswd.8 chsh.1 expiry.1 \
+       faillog.5 faillog.8 gpasswd.1 groupadd.8 groupdel.8 \
+       groupmems.8 groupmod.8 groups.1 grpck.8 grpconv.8 grpunconv.8 \
+       lastlog.8 login.defs.5 logoutd.8 newgrp.1 newusers.8 passwd.1 \
+       passwd.5 pwck.8 pwconv.8 pwunconv.8 sg.1 shadow.5 suauth.5 \
+       useradd.8 userdel.8 usermod.8 vigr.8 vipw.8 $(am__append_1)
+man_nopam = \
+       limits.5 \
+       login.access.5 \
+       porttime.5
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_nopam) \
+       getspnam.3 \
+       id.1 \
+       shadow.3 \
+       sulogin.8
+
+@ENABLE_REGENERATE_MAN_TRUE@LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@CLEANFILES = .xml2po.mo $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST))
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/pl/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/pl/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man5 install-man8 install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
+
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@   [ ! -f ../config.xml ] || mv ../config.xml ../config.xml.bak
+@ENABLE_REGENERATE_MAN_TRUE@   xml2po --expand-all-entities -l $(LANG) -p ../po/$(LANG).po -o $@ ../$@
+@ENABLE_REGENERATE_MAN_TRUE@   sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+@ENABLE_REGENERATE_MAN_TRUE@   [ ! -f ../config.xml.bak ] || mv ../config.xml.bak ../config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   sed -i 's/config SYSTEM "config.xml">/config SYSTEM "config.xml">\%config;/' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@   make -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%: %.xml Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(SHA_CRYPT_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@               -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@grpconv.8 grpunconv.8 pwunconv.8: pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@getspnam.3: shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@vigr.8: vipw.8
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/pl/chage.1 b/man/pl/chage.1
new file mode 100644 (file)
index 0000000..53383bc
--- /dev/null
@@ -0,0 +1,158 @@
+'\" t
+.\"     Title: chage
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia użytkownik\('ow
+.\"    Source: Polecenia użytkownik\('ow
+.\"  Language: Polish
+.\"
+.TH "CHAGE" "1" "07/24/2009" "Polecenia użytkownik\('ow" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+chage \- zmiana informacji o terminie ważności has\(/la użytkownika
+.SH "SK\(/LADNIA"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIopcje\fR] [\fILOGIN\fR]
+.SH "OPIS"
+.PP
+Polecenie
+\fBchage\fR
+zmienia liczbę dni pomiędzy zmianami has\(/la i datę ostatniej zmiany has\(/la\&. Informację tę system wykorzystuje do ustalenia, kiedy użytkownik musi zmienić has\(/lo\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBchage\fR
+posiada następujące opcje:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR\fIOSTATNI\fR
+.RS 4
+Ustawia ilość dni od 1 stycznia 1970 kiedy ha\(/lo by\(/lo ostani raz zmieniane\&. Data ważności może być takze prezekazana w formacie RRRR\-MM\-DD (lub formacie używanym lokalnie)\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR\fIDATA_WAŻN\fR
+.RS 4
+Ustawia datę, począwszy od kt\('orej konto użytkownika nie będzie już dostępne\&.
+\fIDATA_WAŻN\fR
+jest liczbą dni od 1 stycznia 1970, od kt\('orej konto jest blokowane\&. Data może być też wyrażona w formacie RRRR\-MM\-DD (lub innej, powszechniej używanej w danym regionie)\&. Użytkownik, kt\('orego konto jest zablokowane musi skontaktować się z administratorem systemu zanim będzie m\('og\(/l z niego ponownie skorzystać\&.
+.sp
+Przekazanie
+\fI\-1\fR
+jako
+\fIDATA_WAŻN\fR
+usuwa ograniczenie ważności konta użytkownika\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR\fINIEAKTYWNE\fR
+.RS 4
+Opcja ta s\(/luży do ustawiania czasu nieaktywności konta po wygaśnięciu ważności has\(/la, po kt\('orym to czasie konto jest blokowane\&. Parametr
+\fINIEAKTYWNE\fR
+jest liczbą dni nieaktywności\&. Użytkownik, kt\('orego konto jest zablokowane musi skontaktować się z administratorem systemu zanim będzie m\('og\(/l z niego ponownie skorzystać\&.
+.sp
+Przekazanie
+\fI\-1\fR
+jako
+\fINIEAKTYWNE\fR
+usuwa ograniczenie nieaktywniści konta użytkownika\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Wyświetlenie informacji o terminach ważności konta i has\(/la\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR\fIMIN_DNI\fR
+.RS 4
+Utawia minimalną liczbę dni pomiędzy zmianami has\(/la na
+\fIMIN_DAYS\fR\&. Wartość zerowa oznacza, że użytkownik może je zmieniać w dowolnym czasie\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR\fIMAX_DNI\fR
+.RS 4
+Ustawia maksymalną liczbę dni, przez jakie has\(/lo jest ważne\&. Gdy
+\fIMAX_DNI\fR
+plus
+\fIOSTATNI\fR
+jest mniejsze niż bieżący dzień, użytkownik musi zmienić swoje has\(/la, zanim będzie m\('og\(/l skorzystać z konta\&. Zdarzenie to może być zaplanowane z wyprzedzeniem przez wykorzystanie opcji
+\fB\-W\fR, ostrzegającej zawczasu użytkownika o zbliżającym się terminie zmiany\&.
+.sp
+Przekazanie
+\fI\-1\fR
+jako
+\fIMAX_DAYS\fR
+usuwa sprawdzanie wazności has\(/la\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR\fIDNI_OSTRZ\fR
+.RS 4
+Ustawia na
+\fIDNI_OSTRZ\fR
+liczbę dni przed up\(/lywem ważności has\(/la\&. Od tego dnia użytkownik będzie ostrzegany o nadchodzącym terminie zmiany has\(/la\&.
+.RE
+.PP
+Jeśli nie podano żadnej opcji, to
+\fBchage\fR
+dzia\(/la w trybie interaktywnym, proponując użytkownikowi wartości bieżące dla każdego z p\('ol\&. Wprowadzenie nowej wartości powoduje zmianę wartości pola, a podanie wartości pustej pozostawia wartość bieżącą\&. Bieżąca wartość pola wyświetlana jest w nawiasach
+\fI[ ]\fR\&.
+.SH "UWAGI"
+.PP
+Program
+\fBchage\fR
+wymaga do dzia\(/lania chronionego pliku hase\(/l użytkownik\('ow (shadow)\&.
+.PP
+Polecenia chage może użyć tylko użytkownik root, za wyjątkiem opcji
+\fB\-l\fR\&. Może się nią pos\(/lużyć się użytkownik nieuprzywilejowany do stwierdzenia, kiedy wygasa jego w\(/lasne has\(/lo lub konto\&.
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+Polecenie
+\fBchage\fR
+kończy dzia\(/lanie z następującymi wartościami kod\('ow zakończenia:
+.PP
+\fI0\fR
+.RS 4
+poprawne zakończenie dzia\(/lania programu
+.RE
+.PP
+\fI1\fR
+.RS 4
+brak dostępu
+.RE
+.PP
+\fI2\fR
+.RS 4
+niepoprawna sk\(/ladnia polecenia
+.RE
+.PP
+\fI15\fR
+.RS 4
+nie można znaleźć pliku shadow
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/pl/chfn.1 b/man/pl/chfn.1
new file mode 100644 (file)
index 0000000..6736ebb
--- /dev/null
@@ -0,0 +1,110 @@
+'\" t
+.\"     Title: chfn
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia użytkownik\('ow
+.\"    Source: Polecenia użytkownik\('ow
+.\"  Language: Polish
+.\"
+.TH "CHFN" "1" "07/24/2009" "Polecenia użytkownik\('ow" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+chfn \- change real user name and information
+.SH "SK\(/LADNIA"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\-f\ \fIfull_name\fR] [\-r\ \fIroom_no\fR] [\-w\ \fIwork_ph\fR] [\-h\ \fIhome_ph\fR] [\-o\ \fIother\fR] [\fIuser\fR]
+.SH "OPIS"
+.PP
+The
+\fBchfn\fR
+command changes user fullname, office number, office extension, and home phone number information for a user\'s account\&. This information is typically printed by
+\fBfinger\fR(1)
+and similar programs\&. A normal user may only change the fields for her own account, subject to the restrictions in
+/etc/login\&.defs\&. (The default configuration is to prevent users from changing their fullname\&.) The superuser may change any field for any account\&. Additionally, only the superuser may use the
+\fB\-o\fR
+option to change the undefined portions of the GECOS field\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.PP
+If none of the options are selected,
+\fBchfn\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fB[ ]\fR
+marks\&. Without options,
+\fBchfn\fR
+prompts for the current user account\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/pl/chgpasswd.8 b/man/pl/chgpasswd.8
new file mode 100644 (file)
index 0000000..5152868
--- /dev/null
@@ -0,0 +1,232 @@
+'\" t
+.\"     Title: chgpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "CHGPASSWD" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+chgpasswd \- wsadowa aktualizacja hase\(/l grup
+.SH "SK\(/LADNIA"
+.HP \w'\fBchgpasswd\fR\ 'u
+\fBchgpasswd\fR [\fIopcje\fR]
+.SH "OPIS"
+.PP
+Polecenie
+\fBchgpasswd\fR
+czyta pary danych (grupa i has\(/lo) ze standardowego wejścia\&. Odczytane informacje wykorzystywane są do aktualizacji danych o grupach istniejących użytkownik\('ow\&. Każdy wiersz przekazywanych danych ma postać:
+.PP
+\fInazwa_grupy\fR:\fIhas\(/lo\fR
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchgpasswd\fR\&.
+.PP
+The default encryption algorithm can be defined for the system with the ENCRYPT_METHOD variable of
+/etc/login\&.defs, and can be overwiten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+Polecenie to przeznaczone jest do użytku w dużych systemach, gdzie aktualizuje się wiele kont naraz\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBchgpasswd\fR
+posiada następujące opcje:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Dostarczone na standardowe wejście has\(/la są traktowane jako już zakodowane\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Jeżeli dpostarczane has\(/la są w postaci jawnej użyj kodowania MD5 zamiast domyślnego DES\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+Pamiętaj żeby zabezpieczyć przed odczytem plik przekazywany na standardowe wejście polecenia\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBgpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBlogin.defs\fR(5)\&.
diff --git a/man/pl/chpasswd.8 b/man/pl/chpasswd.8
new file mode 100644 (file)
index 0000000..74910b0
--- /dev/null
@@ -0,0 +1,223 @@
+'\" t
+.\"     Title: chpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "CHPASSWD" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+chpasswd \- wsadowa aktualizacja hase\(/l użytkownik\('ow
+.SH "SK\(/LADNIA"
+.HP \w'\fBchpasswd\fR\ 'u
+\fBchpasswd\fR [\fIopcje\fR]
+.SH "OPIS"
+.PP
+Polecenie
+\fBchpasswd\fR
+czyta pary danych (użytkownik i has\(/lo) ze standardowego wejścia\&. Odczytane informacje wykorzystywane są do aktualizacji danych o grupie istniejących użytkownik\('ow\&. Każdy wiersz przekazywanych danych ma postać:
+.PP
+\fInazwa_użytkownika\fR:\fIhas\(/lo\fR
+.SS ""
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchpasswd\fR\&. Also the password age will be updated, if present\&.
+.PP
+The default encryption algorithm can be defined for the system with the ENCRYPT_METHOD variable of
+/etc/login\&.defs, and can be overwiten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+
+\fBchpasswd\fR
+first update the password in memory, and then commit all the changes to disk if no errors occured for any users\&.
+.PP
+Polecenie to przeznaczone jest do użytku w dużych systemach, gdzie aktualizuje się wiele kont naraz\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBchpasswd\fR
+posiada następujące opcje:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Dostarczone na standardowe wejście has\(/la są traktowane jako już zakodowane\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Jeżeli dpostarczane has\(/la są w postaci jawnej użyj kodowania MD5 zamiast domyślnego DES\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+Pamiętaj żeby zabezpieczyć przed odczytem plik przekazywany na standardowe wejście polecenia\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBpasswd\fR(1),
+\fBnewusers\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/pl/chsh.1 b/man/pl/chsh.1
new file mode 100644 (file)
index 0000000..42de5a9
--- /dev/null
@@ -0,0 +1,100 @@
+'\" t
+.\"     Title: chsh
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia użytkownik\('ow
+.\"    Source: Polecenia użytkownik\('ow
+.\"  Language: Polish
+.\"
+.TH "CHSH" "1" "07/24/2009" "Polecenia użytkownik\('ow" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+chsh \- zmiana pow\(/loki zg\(/loszeniowej
+.SH "SK\(/LADNIA"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIopcje\fR] [\fILOGIN\fR]
+.SH "OPIS"
+.PP
+Polecenie
+\fBchsh\fR
+zmienia pow\(/lokę zg\(/loszeniową użytkownika, kt\('ora określa nazwę początkowego polecenia zg\(/loszeniowego użytkownika\&. Zwyk\(/ly użytkownik może zmienić wy\(/lącznie pow\(/lokę zg\(/loszeniową w\(/lasnego konta, superużytkownik może zmienić pow\(/lokę zg\(/loszeniową dla dowolnego konta\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBchsh\fR
+posiada następujące opcje:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fISHELL\fR
+.RS 4
+Nazwa nowej pow\(/loki (shell) użytkownika\&. Ustawienie tego pola na puste powoduje, że system wybierze domyślną pow\(/lokę logowania\&.
+.RE
+.PP
+Jeżeli nie podano opcji
+\fB\-s\fR, to polecenie
+\fBchsh\fR
+dzia\(/la w trybie interaktywnym, proponując użytkownikowi bieżącą pow\(/lokę logowania\&. Wprowadzenie nowej wartości powoduje zmianę pow\(/loki, a podanie wartości pustej pozostawia bieżącą pow\(/lokę\&. Bieżąca pow\(/loka wyświetlana jest w nawiasach
+\fI[ ]\fR
+.SH "UWAGI"
+.PP
+Jedynym ograniczeniem na\(/lożonym na pow\(/lokę zg\(/loszeniową jest to, że jej nazwa musi być wymieniona w
+/etc/shells, chyba że polecenie chsh zosta\(/lo uruchomione przez superużytkownika w\('owczas może być podana dowolna nazwa\&. Użytkownicy kont z ograniczoną pow\(/loką logowania nie mogą jej zmieniać\&. Odradza się z tego powodu umieszczanie
+/bin/rsh
+w pliku
+/etc/shells, gdyż przypadkowa zmiana na pow\(/lokę ograniczoną uniemożliwi użytkownikowi jakąkolwiek zmianę pow\(/loki logowania, nawet z powrotem na dotychczasową\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shells
+.RS 4
+Lista dozwolonych pow\(/lok zg\(/loszeniowych\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/pl/expiry.1 b/man/pl/expiry.1
new file mode 100644 (file)
index 0000000..32c7da5
--- /dev/null
@@ -0,0 +1,45 @@
+'\" t
+.\"     Title: expiry
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia użytkownik\('ow
+.\"    Source: Polecenia użytkownik\('ow
+.\"  Language: Polish
+.\"
+.TH "EXPIRY" "1" "07/24/2009" "Polecenia użytkownik\('ow" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+expiry \- sprawdzenie ważności i wymuszenie zmiany has\(/la
+.SH "SK\(/LADNIA"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR [\-c] [\-f]
+.SH "OPIS"
+.PP
+Polecenie
+\fBexpiry\fR
+sprawdza (\fB\-c\fR), kiedy wygaśnie aktualne has\(/lo oraz wymusza (\fB\-f\fR) lub wymusza jego zmianę\&.Może ono być wywo\(/lywane jako zwyk\(/le polecenie przez użytkownika\&.
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/pl/faillog.5 b/man/pl/faillog.5
new file mode 100644 (file)
index 0000000..6570ff8
--- /dev/null
@@ -0,0 +1,57 @@
+'\" t
+.\"     Title: faillog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual:  File Formats and Conversions
+.\"    Source:  File Formats and Conversions
+.\"  Language: Polish
+.\"
+.TH "FAILLOG" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+faillog \- login failure logging file
+.SH "OPIS"
+.PP
+
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+The file contains fixed length records, indexed by numerical UID\&. Each record contains the count of login failures since the last successful login; the maximum number of failures before the account is disabled; the line on whiche the last login failure occurred; the date of the last login failure; and the duration (in seconds) during which the account will be locked after a failure\&.
+.PP
+Struktura tego pliku to:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+       short   fail_cnt;
+       short   fail_max;
+       char    fail_line[12];
+       time_t  fail_time;
+       long    fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "PLIKI"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBfaillog\fR(8)
diff --git a/man/pl/faillog.8 b/man/pl/faillog.8
new file mode 100644 (file)
index 0000000..a70d6f6
--- /dev/null
@@ -0,0 +1,142 @@
+'\" t
+.\"     Title: faillog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "FAILLOG" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+faillog \- display faillog records or set login failure limits
+.SH "SK\(/LADNIA"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIopcje\fR]
+.SH "OPIS"
+.PP
+
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBfaillog\fR
+posiada następujące opcje:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-time\fR\fISEK\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR \fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+Reset the counters of login failures\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\fIDNI\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR \fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.PP
+NOTE: in display mode, only the records of users which currently exist in the system are displayed\&. In the other modes (when the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used), the records of the user, or the range of users, or all the users that may have an entry in the faillog database will be changed\&. This is useful to reset records of users that have been deleted or set a policy in advance for a range of users\&.
+.SH "OSTRZEŻENIA"
+.PP
+
+\fBfaillog\fR
+only prints out users with no successful login since the last failure\&. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the
+\fB\-u\fR
+flag, or print out all users with the
+\fB\-a\fR
+flag\&.
+.SH "PLIKI"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/pl/getspnam.3 b/man/pl/getspnam.3
new file mode 100644 (file)
index 0000000..cd473da
--- /dev/null
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/pl/gpasswd.1 b/man/pl/gpasswd.1
new file mode 100644 (file)
index 0000000..bceb6f8
--- /dev/null
@@ -0,0 +1,254 @@
+'\" t
+.\"     Title: gpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia użytkownik\('ow
+.\"    Source: Polecenia użytkownik\('ow
+.\"  Language: Polish
+.\"
+.TH "GPASSWD" "1" "07/24/2009" "Polecenia użytkownik\('ow" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+gpasswd \- administer /etc/group and /etc/gshadow
+.SH "SK\(/LADNIA"
+.HP \w'\fBgpasswd\fR\ 'u
+\fBgpasswd\fR [\fIoption\fR] \fIgroup\fR
+.SH "OPIS"
+.PP
+The
+\fBgpasswd\fR
+command is used to administer
+/etc/group, and /etc/gshadow\&. Every group can have
+administrators,
+members and a password\&.
+.PP
+System administrators can use the
+\fB\-A\fR
+option to define group administrator(s) and the
+\fB\-M\fR
+option to define members\&. They have all rights of group administrators and members\&.
+.PP
+
+\fBgpasswd\fR
+called by
+a group administrator
+with a group name only prompts for the new password of the
+\fIgroup\fR\&.
+.PP
+If a password is set the members can still use
+\fBnewgrp\fR(1)
+without a password, and non\-members must supply the password\&.
+.SS "Notes about group passwords"
+.PP
+Group passwords are an inherent security problem since more than one person is permitted to know the password\&. However, groups are a useful tool for permitting co\-operation between different users\&.
+.SH "OPCJE"
+.PP
+Except for the
+\fB\-A\fR
+and
+\fB\-M\fR
+options, the options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR \fIuser\fR
+.RS 4
+Add the
+\fIuser\fR
+to the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR \fIuser\fR
+.RS 4
+Remove the
+\fIuser\fR
+from the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\-password\fR
+.RS 4
+Remove the password from the named
+\fIgroup\fR\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-restrict\fR
+.RS 4
+Restrict the access to the named
+\fIgroup\fR\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-A\fR, \fB\-\-administrators\fR \fIuser\fR,\&.\&.\&.
+.RS 4
+Set the list of administrative users\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-members\fR \fIuser\fR,\&.\&.\&.
+.RS 4
+Set the list of group members\&.
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+This tool only operates on the
+/etc/group
+and /etc/gshadow files\&.
+Thus you cannot change any NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBnewgrp\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/pl/groupadd.8 b/man/pl/groupadd.8
new file mode 100644 (file)
index 0000000..e7045b6
--- /dev/null
@@ -0,0 +1,213 @@
+'\" t
+.\"     Title: groupadd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "GROUPADD" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+groupadd \- tw\('o\(/lrz nową grupę
+.SH "SK\(/LADNIA"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIopcje\fR] \fIgroup\fR
+.SH "OPIS"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBgroupadd\fR
+posiada następujące opcje:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIGID\fR
+.RS 4
+The numerical value of the group\'s ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than 999 and greater than every other group\&. Values between 0 and 999 are typically reserved for system accounts\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\fIKLUCZ\fR=\fIWARTOŚĆ\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (GID_MIN, GID_MAX and others)\&. Multiple
+\fB\-K\fR
+options can be specified\&.
+.sp
+Example:
+\fB\-K \fR\fIGID_MIN\fR=\fI100\fR
+\fB\-K \fR\fIGID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K \fR
+\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+doesn\'t work yet\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+This option permits to add a group with a non\-unique GID\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\fIHAS\(/LO\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system group\&.
+.sp
+The numeric identifiers of new system groups are choosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+Groupnames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+You may not add a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "KOD ZAKOŃCZENIA"
+.PP
+Polecenie
+\fBgroupadd\fR
+kończy dzia\(/lanie z następującymi wartościami kod\('ow zakończenia:
+.PP
+\fI0\fR
+.RS 4
+poprawne zakończenie dzia\(/lania programu
+.RE
+.PP
+\fI2\fR
+.RS 4
+niepoprawna sk\(/ladnia polecenia
+.RE
+.PP
+\fI3\fR
+.RS 4
+nieprawid\(/lowy argument opcji
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID not unique (when
+\fB\-o\fR
+not used)
+.RE
+.PP
+\fI9\fR
+.RS 4
+group name not unique
+.RE
+.PP
+\fI10\fR
+.RS 4
+nie można zaktualizować pliku z grupami
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/pl/groupdel.8 b/man/pl/groupdel.8
new file mode 100644 (file)
index 0000000..d5e5d41
--- /dev/null
@@ -0,0 +1,108 @@
+'\" t
+.\"     Title: groupdel
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "GROUPDEL" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+groupdel \- delete a group
+.SH "SK\(/LADNIA"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR \fIgroup\fR
+.SH "OPIS"
+.PP
+The
+\fBgroupdel\fR
+command modifies the system account files, deleting all entries that refer to
+\fIgroup\fR\&. The named group must exist\&.
+.SH "OSTRZEŻENIA"
+.PP
+You may not remove the primary group of any existing user\&. You must remove the user before you remove the group\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this group\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+Polecenie
+\fBgroupdel\fR
+kończy dzia\(/lanie z następującymi wartościami kod\('ow zakończenia:
+.PP
+\fI0\fR
+.RS 4
+poprawne zakończenie dzia\(/lania programu
+.RE
+.PP
+\fI2\fR
+.RS 4
+niepoprawna sk\(/ladnia polecenia
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\'t exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+can\'t remove user\'s primary group
+.RE
+.PP
+\fI10\fR
+.RS 4
+nie można zaktualizować pliku z grupami
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)
diff --git a/man/pl/groupmems.8 b/man/pl/groupmems.8
new file mode 100644 (file)
index 0000000..5c1becb
--- /dev/null
@@ -0,0 +1,157 @@
+'\" t
+.\"     Title: groupmems
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "GROUPMEMS" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+groupmems \- administer members of a user\'s primary group
+.SH "SK\(/LADNIA"
+.HP \w'\fBgroupmems\fR\ 'u
+\fBgroupmems\fR \-a\ \fIuser_name\fR | \-d\ \fIuser_name\fR | [\-g\ \fIgroup_name\fR] | \-l | \-p 
+.SH "OPIS"
+.PP
+The
+\fBgroupmems\fR
+command allows a user to administer his/her own group membership list without the requirement of superuser privileges\&. The
+\fBgroupmems\fR
+utility is for systems that configure its users to be in their own name sake primary group (i\&.e\&., guest / guest)\&.
+.PP
+Only the superuser, as administrator, can use
+\fBgroupmems\fR
+to alter the memberships of other groups\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBgroupmems\fR
+posiada następujące opcje:
+.PP
+\fB\-a\fR, \fB\-\-add\fR \fIuser_name\fR
+.RS 4
+Add an user to the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR \fIuser_name\fR
+.RS 4
+Delete a user from the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, the user will be removed from the list of members and administrators of the group\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-group\fR \fIgroup_name\fR
+.RS 4
+The superuser can specify which group membership list to modify\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+List the group membership list\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-purge\fR
+.RS 4
+Purge all users from the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.SH "SETUP"
+.PP
+The
+\fBgroupmems\fR
+executable should be in mode
+2770
+as user
+\fIroot\fR
+and in group
+\fIgroups\fR\&. The system administrator can add users to group
+\fIgroups\fR
+to allow or disallow them using the
+\fBgroupmems\fR
+utility to manage their own group membership list\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+       $ groupadd \-r groups
+       $ chmod 2770 groupmems
+       $ chown root\&.groups groupmems
+       $ groupmems \-g groups \-a gk4
+    
+.fi
+.if n \{\
+.RE
+.\}
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+secure group account information
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/pl/groupmod.8 b/man/pl/groupmod.8
new file mode 100644 (file)
index 0000000..dc14b01
--- /dev/null
@@ -0,0 +1,170 @@
+'\" t
+.\"     Title: groupmod
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "GROUPMOD" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+groupmod \- modyfikuj definicję grupy systemowej
+.SH "SK\(/LADNIA"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIopcje\fR] \fIGRUPA\fR
+.SH "OPIS"
+.PP
+Polcenie
+\fBgroupmod\fR
+modifikuje definicję grupy
+\fIGRUPA\fR
+poprzez modifikację stosownego wpisu w bazie grup\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBgroupmod\fR
+posiada następujące opcje:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. Values between 0 and 999 are typically reserved for system groups\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-a\fR, \fB\-\-append\fR\fINOWA_GRUPA\fR
+.RS 4
+Nazwa grupy zostanie zmieniona z
+\fIGRUPA\fR
+na nazwę
+\fINOWA_GRUPA\fR\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\fIHAS\(/LO\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+Polecenie
+\fBgroupmod\fR
+kończy dzia\(/lanie z następującymi wartościami kod\('ow zakończenia:
+.PP
+\fI0\fR
+.RS 4
+poprawne zakończenie dzia\(/lania programu
+.RE
+.PP
+\fI2\fR
+.RS 4
+niepoprawna sk\(/ladnia polecenia
+.RE
+.PP
+\fI3\fR
+.RS 4
+nieprawid\(/lowy argument opcji
+.RE
+.PP
+\fI4\fR
+.RS 4
+specified group doesn\'t exist
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\'t exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+nazwa grupy już jest w użyciu
+.RE
+.PP
+\fI10\fR
+.RS 4
+nie można zaktualizować pliku z grupami
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/pl/groups.1 b/man/pl/groups.1
new file mode 100644 (file)
index 0000000..1ec3e33
--- /dev/null
@@ -0,0 +1,55 @@
+'\" t
+.\"     Title: groups
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia użytkownik\('ow
+.\"    Source: Polecenia użytkownik\('ow
+.\"  Language: Polish
+.\"
+.TH "GROUPS" "1" "07/24/2009" "Polecenia użytkownik\('ow" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+groups \- display current group names
+.SH "SK\(/LADNIA"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIuser\fR]
+.SH "OPIS"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "UWAGI"
+.PP
+Systems which do not support concurrent group sets will have the information from
+/etc/group
+reported\&. The user must use
+\fBnewgrp\fR
+or
+\fBsg\fR
+to change their current real and effective group ID\&.
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/pl/grpck.8 b/man/pl/grpck.8
new file mode 100644 (file)
index 0000000..debe068
--- /dev/null
@@ -0,0 +1,220 @@
+'\" t
+.\"     Title: grpck
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "GRPCK" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+grpck \- verify integrity of group files
+.SH "SK\(/LADNIA"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [\-r] [\fIgroup\fR\ [\ \fIshadow\fR\ ]]
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [\-s] [\fIgroup\fR\ [\ \fIshadow\fR\ ]]
+.SH "OPIS"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Checks are made to verify that each entry has:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid group name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-r\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/groupand /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+Polecenie
+\fBgrpckl\fR
+kończy dzia\(/lanie z następującymi wartościami kod\('ow zakończenia:
+.PP
+\fI0\fR
+.RS 4
+poprawne zakończenie dzia\(/lania programu
+.RE
+.PP
+\fI1\fR
+.RS 4
+niepoprawna sk\(/ladnia polecenia
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad group entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\'t open group files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\'t lock group files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\'t update group files
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/pl/grpconv.8 b/man/pl/grpconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/pl/grpunconv.8 b/man/pl/grpunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/pl/id.1 b/man/pl/id.1
new file mode 100644 (file)
index 0000000..4bbca0b
--- /dev/null
@@ -0,0 +1,52 @@
+'\" t
+.\"     Title: id
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia użytkownik\('ow
+.\"    Source: Polecenia użytkownik\('ow
+.\"  Language: Polish
+.\"
+.TH "ID" "1" "07/24/2009" "Polecenia użytkownik\('ow" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+id \- display current user and group ID names
+.SH "SK\(/LADNIA"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "OPIS"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/pl/lastlog.8 b/man/pl/lastlog.8
new file mode 100644 (file)
index 0000000..b50ab3a
--- /dev/null
@@ -0,0 +1,92 @@
+'\" t
+.\"     Title: lastlog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "LASTLOG" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+lastlog \- wyświetla informacje o ostanim logowaniu dla wybranego lub wszystkich użytkowanik\('ow
+.SH "SK\(/LADNIA"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIopcje\fR]
+.SH "OPIS"
+.PP
+Polecenie
+\fBlastlog\fR
+formatuje i wyświetla zawartość bazy ostatnich logowań zapisanych w pliku
+/var/log/lastlog\&. Wyświetlone zostaną
+\fInazwa użytkownika\fR,
+\fIport\fR
+i
+\fIczas\fR
+ostatniego logowania\&. Domyślnie (bez flag) pozycje wyświetlane są w kolejności w jakiej są w pliku
+/etc/passwd\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBlastlog\fR
+posiada następujące opcje:
+.PP
+\fB\-b\fR, \fB\-\-before\fR\fIDNI\fR
+.RS 4
+Wyświetlenie rekord\('ow lastlog starszych niż zadana
+\fIDNI\fR\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\fIDNI\fR
+.RS 4
+Wyświetlenie rekord\('ow lastlog nie starszych niż zadana ilość
+\fIDNI\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR \fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Print the lastlog record of the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+Jeżeli użytkownik nigdy się nie logowa\(/l to zamiast portu i czasu logowania wyświetlany jest komunikat
+\fI**Nigdy nie zalogowany**\fR
+(użytkownik nigdy się nie logowa\(/l)\&.
+.PP
+Only the entries for the current users of the system will be displayed\&. Other entries may exist for users that were deleted previously\&.
+.SH "UWAGI"
+.PP
+Baza danych
+lastlog
+jest plikiem zawierajacym informacje o ostanim logowaniu każdego użytkowanika\&. Pliku tego nie powinnoa się okresowo kasować i zaką\(/ldać od nowa (rotacja)\&. Plik ten jest plikiem z dziurami tak więc jego rozmiar jest zwykle znacznie mniejszy pokazywany przez polecenie "\fBls \-l\fR" (pokazujące że jest on dużych rozmiar\('ow jeżeli masz w
+passwd
+użytkowanik\('ow z wysokimi wartościami UID)\&. Mozesz wyświetlić rzeczywisty rozmiar tego pliku używając polecenia "\fBls \-s\fR"\&.
+.SH "PLIKI"
+.PP
+/var/log/lastlog
+.RS 4
+Baza danych ostatnich logowań użytkownik\('ow\&.
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+Duże luki w numeracji UID powodują, że program będzie pracowa\(/l d\(/lużej, nie wyświetlając wynik\('ow (np\&. jeśli w bazie lastlog nie ma wpis\('ow dla o UID pomiedzy 170, a 800, to program będzie sprawia\(/l wrażenie zawieszonego w trakcie przetwarzania wpis\('ow dla użytkowanik\('o\(/l o UID 171\-799)\&.
diff --git a/man/pl/limits.5 b/man/pl/limits.5
new file mode 100644 (file)
index 0000000..5233b46
--- /dev/null
@@ -0,0 +1,251 @@
+'\" t
+.\"     Title: limits
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: Polish
+.\"
+.TH "LIMITS" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+limits \- resource limits definition
+.SH "OPIS"
+.PP
+The
+\fIlimits\fR
+file (/etc/limits
+by default or LIMITS_FILE defined
+config\&.h) describes the resource limits you wish to impose\&. It should be owned by root and readable by root account only\&.
+.PP
+By default no quota is imposed on \'root\'\&. In fact, there is no way to impose limits via this procedure to root\-equiv accounts (accounts with UID 0)\&.
+.PP
+Each line describes a limit for a user in the form:
+.PP
+
+\fIuser LIMITS_STRING\fR
+.PP
+The
+\fILIMITS_STRING\fR
+is a string of a concatenated list of resource limits\&. Each limit consists of a letter identifier followed by a numerical limit\&.
+.PP
+The valid identifiers are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+A: max address space (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+C: max core file size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+D: max data size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+F: maximum filesize (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+M: max locked\-in\-memory address space (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+N: max number of open files
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+R: max resident set size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+S: max stack size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+T: max CPU time (MIN)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+U: max number of processes
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+K: file creation mask, set by
+\fBumask\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+L: max number of logins for this user
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+P: process priority, set by
+\fBsetpriority\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+I: max nice value (0\&.\&.39 which translates to 20\&.\&.\-19)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+O: max real time priority
+.RE
+.PP
+For example,
+\fIL2D2048N5\fR
+is a valid
+\fILIMITS_STRING\fR\&. For reading convenience, the following entries are equivalent:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      username L2D2048N5
+      username L2 D2048 N5
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Be aware that after
+\fIusername\fR
+the rest of the line is considered a limit string, thus comments are not allowed\&. A invalid limits string will be rejected (not considered) by the
+\fBlogin\fR
+program\&.
+.PP
+The default entry is denoted by username "\fI*\fR"\&. If you have multiple
+\fIdefault\fR
+entries in your
+\fILIMITS_FILE\fR, then the last one will be used as the default entry\&.
+.PP
+To completely disable limits for a user, a single dash "\fI\-\fR" will do\&.
+.PP
+Also, please note that all limit settings are set PER LOGIN\&. They are not global, nor are they permanent\&. Perhaps global limits will come, but for now this will have to do ;)
+.SH "PLIKI"
+.PP
+/etc/limits
+.RS 4
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBlogin\fR(1),
+\fBsetpriority\fR(2),
+\fBsetrlimit\fR(2)\&.
diff --git a/man/pl/login.access.5 b/man/pl/login.access.5
new file mode 100644 (file)
index 0000000..912f43d
--- /dev/null
@@ -0,0 +1,59 @@
+'\" t
+.\"     Title: login.access
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: Polish
+.\"
+.TH "LOGIN\&.ACCESS" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+login.access \- login access control table
+.SH "OPIS"
+.PP
+The
+\fIlogin\&.access\fR
+file specifies (user, host) combinations and/or (user, tty) combinations for which a login will be either accepted or refused\&.
+.PP
+When someone logs in, the
+\fIlogin\&.access\fR
+is scanned for the first entry that matches the (user, host) combination, or, in case of non\-networked logins, the first entry that matches the (user, tty) combination\&. The permissions field of that table entry determines whether the login will be accepted or refused\&.
+.PP
+Each line of the login access control table has three fields separated by a ":" character:
+.PP
+
+\fIpermission\fR:\fIusers\fR:\fIorigins\fR
+.PP
+The first field should be a "\fI+\fR" (access granted) or "\fI\-\fR" (access denied) character\&. The second field should be a list of one or more login names, group names, or
+\fIALL\fR
+(always matches)\&. The third field should be a list of one or more tty names (for non\-networked logins), host names, domain names (begin with "\&."), host addresses, internet network numbers (end with "\&."),
+\fIALL\fR
+(always matches) or
+\fILOCAL\fR
+(matches any string that does not contain a "\&." character)\&. If you run NIS you can use @netgroupname in host or user patterns\&.
+.PP
+The
+\fIEXCEPT\fR
+operator makes it possible to write very compact rules\&.
+.PP
+The group file is searched only when a name does not match that of the logged\-in user\&. Only groups are matched in which users are explicitly listed: the program does not look at a user\'s primary group id value\&.
+.SH "PLIKI"
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/pl/login.defs.5 b/man/pl/login.defs.5
new file mode 100644 (file)
index 0000000..8702264
--- /dev/null
@@ -0,0 +1,795 @@
+'\" t
+.\"     Title: login.defs
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: Polish
+.\"
+.TH "LOGIN\&.DEFS" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+login.defs \- shadow password suite configuration
+.SH "OPIS"
+.PP
+The
+/etc/login\&.defs
+file defines the site\-specific configuration for the shadow password suite\&. This file is required\&. Absence of this file will not prevent system operation, but will probably result in undesirable operation\&.
+.PP
+This file is a readable text file, each line of the file describing one configuration parameter\&. The lines consist of a configuration name and value, separated by whitespace\&. Blank lines and comment lines are ignored\&. Comments are introduced with a "#" pound sign and the pound sign must be the first non\-white character of the line\&.
+.PP
+Parameter values may be of four types: strings, booleans, numbers, and long numbers\&. A string is comprised of any printable characters\&. A boolean should be either the value
+\fIyes\fR
+or
+\fIno\fR\&. An undefined boolean parameter or one with a value other than these will be given a
+\fIno\fR
+value\&. Numbers (both regular and long) may be either decimal values, octal values (precede the value with
+\fI0\fR) or hexadecimal values (precede the value with
+\fI0x\fR)\&. The maximum value of the regular and long numeric parameters is machine\-dependent\&.
+.PP
+The following configuration items are provided:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indicate if a home directory should be created by default for new users\&.
+.sp
+This setting does not apply to system users, and can be overriden on the command line\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Delay in seconds before being allowed another attempt after a login failure\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\' shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+If defined, login failures will be logged in this file in a utmp format\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\'s name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\'s home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+If defined, this file will be displayed before each login prompt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of /var/log/lastlog login time info\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Enable logging of successful logins\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Enable display of unknown usernames when login failures are recorded\&.
+.sp
+Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Maximum number of login retries in case of bad password\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Max time in seconds for login\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+
+\fBPASS_MAX_DAYS\fR,
+\fBPASS_MIN_DAYS\fR
+and
+\fBPASS_WARN_AGE\fR
+are only used at the time of account creation\&. Any changes to these settings won\'t affect existing accounts\&.
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\'t change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in /etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+If defined, all su activity is logged to this file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\'t exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\'s primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+If defined, this command is run when removing a user\&. It should remove any at/cron/print jobs etc\&. owned by the user to be removed (passed as the first argument)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\'s cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+       echo "Usage: $0 username"
+       exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+      
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "CROSS REFERENCES"
+.PP
+The following cross references show which programs in the shadow password suite use which parameters\&.
+.PP
+chfn
+.RS 4
+
+CHFN_AUTH
+CHFN_RESTRICT
+LOGIN_STRING
+.RE
+.PP
+chgpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chpasswd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chsh
+.RS 4
+CHSH_AUTH LOGIN_STRING
+.RE
+.PP
+gpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+groupadd
+.RS 4
+GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN
+.RE
+.PP
+groupdel
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmems
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmod
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpck
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpunconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+login
+.RS 4
+
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE
+ERASECHAR FAIL_DELAY
+FAILLOG_ENAB
+FAKE_SHELL
+FTMP_FILE
+HUSHLOGIN_FILE
+ISSUE_FILE
+KILLCHAR
+LASTLOG_ENAB
+LOGIN_RETRIES
+LOGIN_STRING
+LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
+MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB
+TTYGROUP TTYPERM TTYTYPE_FILE
+ULIMIT UMASK
+USERGROUPS_ENAB
+.RE
+.PP
+newgrp / sg
+.RS 4
+SYSLOG_SG_ENAB
+.RE
+.PP
+newusers
+.RS 4
+ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+passwd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+pwck
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+pwconv
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+su
+.RS 4
+
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENVIRON_FILE
+ENV_PATH ENV_SUPATH
+ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB
+SULOG_FILE SU_NAME
+SU_WHEEL_ONLY
+SYSLOG_SU_ENAB
+USERGROUPS_ENAB
+.RE
+.PP
+sulogin
+.RS 4
+ENV_HZ
+ENV_TZ
+.RE
+.PP
+useradd
+.RS 4
+CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+userdel
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB
+.RE
+.PP
+usermod
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBpam\fR(8)\&.
diff --git a/man/pl/logoutd.8 b/man/pl/logoutd.8
new file mode 100644 (file)
index 0000000..17aa8e8
--- /dev/null
@@ -0,0 +1,49 @@
+'\" t
+.\"     Title: logoutd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "LOGOUTD" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+logoutd \- Enforce login time restrictions
+.SH "SK\(/LADNIA"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "OPIS"
+.PP
+
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "PLIKI"
+.PP
+/etc/porttime
+.RS 4
+File containing port access\&.
+.RE
+.PP
+/var/run/utmp
+.RS 4
+List of current login sessions\&.
+.RE
diff --git a/man/pl/newgrp.1 b/man/pl/newgrp.1
new file mode 100644 (file)
index 0000000..3e4ba37
--- /dev/null
@@ -0,0 +1,91 @@
+'\" t
+.\"     Title: newgrp
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia użytkownik\('ow
+.\"    Source: Polecenia użytkownik\('ow
+.\"  Language: Polish
+.\"
+.TH "NEWGRP" "1" "07/24/2009" "Polecenia użytkownik\('ow" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+newgrp \- log in to a new group
+.SH "SK\(/LADNIA"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIgroup\fR]
+.SH "OPIS"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\'s environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/pl/newusers.8 b/man/pl/newusers.8
new file mode 100644 (file)
index 0000000..c5d77e1
--- /dev/null
@@ -0,0 +1,376 @@
+'\" t
+.\"     Title: newusers
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "NEWUSERS" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+newusers \- wsadowa aktualizacja i tworzenie nowych użytkownik\('ow
+.SH "SK\(/LADNIA"
+.HP \w'\fBnewusers\fR\ 'u
+\fBnewusers\fR [\fIopcje\fR\ \fInew_users\fR]
+.SH "OPIS"
+.PP
+The
+\fBnewusers\fR
+command reads a file of user name and clear\-text password pairs and uses this information to update a group of existing users or to create new users\&. Each line is in the same format as the standard password file (see
+\fBpasswd\fR(5)) with the exceptions explained below:
+.PP
+pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
+.PP
+\fIpw_name\fR
+.RS 4
+This is the name of the user\&.
+.sp
+It can be the name of a new user or the name of an existing user (or an user created before by
+\fBnewusers\fR)\&. In case of an existing user, the user\'s information will be changed, otherwise a new user will be created\&.
+.RE
+.PP
+\fIpw_passwd\fR
+.RS 4
+To pole zostanie zakodowane i użyte jako nowa wartość zakodowanego has\(/la\&.
+.RE
+.PP
+\fIpw_uid\fR
+.RS 4
+This field is used to define the UID of the user\&.
+.sp
+If the field is empty, an new (unused) UID will be defined automatically by
+\fBnewusers\fR\&.
+.sp
+If this field contains a number, this number will be used as the UID\&.
+.sp
+If this field contains the name of an existing user (or the name of an user created before by
+\fBnewusers\fR), the UID of the specified user will be used\&.
+.sp
+If the UID of an existing user is changed, the files ownership of the user\'s file should be fixed manually\&.
+.RE
+.PP
+\fIpw_gid\fR
+.RS 4
+This field is used to define the primary group ID for the user\&.
+.sp
+If this field contains the name of an existing group (or a group created before by
+\fBnewusers\fR), the GID of this group will be used as the primary group ID for the user\&.
+.sp
+If this field is a number, this number will be used as the primary group ID of the user\&. If no groups exist with this GID, a new group will be created with this GID, and the name of the user\&.
+.sp
+If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and as the GID for the new group\&.
+.sp
+If this field contains the name of a group which does not exist (and was not created earlier wbefore by
+\fBnewusers\fR), a new group will be created with the specified name and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and Gs the ID for the new group\&.
+.RE
+.PP
+\fIpw_gecos\fR
+.RS 4
+This field is copied in the GECOS field of the user\&.
+.RE
+.PP
+\fIpw_dir\fR
+.RS 4
+This field is used to define the home directory of the user\&.
+.sp
+If this field does not specify an existing directory, the specified directory is created, with ownership set to the user being created or updated and its primary group\&.
+.sp
+If the home directory of an existing user is changed,
+\fBnewusers\fR
+does not move or copy the content of the old directory to the new location\&. This should be done manually\&.
+.RE
+.PP
+\fIpw_shell\fR
+.RS 4
+This field defines the shell of the user\&. No checks are performed on this field\&.
+.RE
+.PP
+
+\fBnewusers\fR
+first tries to create or change all the specified users, and then write these changes to the user or group databases\&. If an error occurs (except in the final writes to the databases), no changes are committed to the databases\&.
+.PP
+This command is intended to be used in a large system environment where many accounts are updated at a single time\&.
+.SH "OPCJE"
+.PP
+The options which apply to the
+\fBnewusers\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system account\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are choosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+The input file must be protected since it contains unencrypted passwords\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(1),
+\fBuseradd\fR(8)\&.
diff --git a/man/pl/passwd.1 b/man/pl/passwd.1
new file mode 100644 (file)
index 0000000..7beb709
--- /dev/null
@@ -0,0 +1,384 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia użytkownik\('ow
+.\"    Source: Polecenia użytkownik\('ow
+.\"  Language: Polish
+.\"
+.TH "PASSWD" "1" "07/24/2009" "Polecenia użytkownik\('ow" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+passwd \- zmiana has\(/la użytkownika
+.SH "SK\(/LADNIA"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIopcje\fR] [\fILOGIN\fR]
+.SH "OPIS"
+.PP
+The
+\fBpasswd\fR
+command changes passwords for user accounts\&. A normal user may only change the password for his/her own account, while the superuser may change the password for any account\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "Password Changes"
+.PP
+The user is first prompted for his/her old password, if one is present\&. This password is then encrypted and compared against the stored password\&. The user has only one chance to enter the correct password\&. The superuser is permitted to bypass this step so that forgotten passwords may be changed\&.
+.PP
+After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time\&. If not,
+\fBpasswd\fR
+refuses to change the password and exits\&.
+.PP
+The user is then prompted twice for a replacement password\&. The second entry is compared against the first and both are required to match in order for the password to be changed\&.
+.PP
+Then, the password is tested for complexity\&. As a general guideline, passwords should consist of 6 to 8 characters including one or more characters from each of the following sets:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+lower case alphabetics
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+digits 0 thru 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+punctuation marks
+.RE
+.PP
+Care must be taken not to include the system default erase or kill characters\&.
+\fBpasswd\fR
+will reject any password which is not suitably complex\&.
+.SS "Hints for user passwords"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+Compromises in password security normally result from careless password selection or handling\&. For this reason, you should not select a password which appears in a dictionary or which must be written down\&. The password should also not be a proper name, your license number, birth date, or street address\&. Any of these may be used as guesses to violate system security\&.
+.PP
+You can find advices on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "OPCJE"
+.PP
+Polecenie
+\fBpasswd\fR
+posiada następujące opcje:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+This option can be used only with
+\fB\-S\fR
+and causes show status for all users\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+Delete a user\'s password (make it empty)\&. This is a quick way to disable a password for an account\&. It will set the named account passwordless\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+Immediately expire an account\'s password\&. This in effect can force a user to change his/her password at the user\'s next login\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR\fINIEAKTYWNE\fR
+.RS 4
+This option is used to disable an account after the password has been expired for a number of days\&. After a user account has had an expired password for
+\fIINACTIVE\fR
+days, the user may no longer sign on to the account\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Indicate password change should be performed only for expired authentication tokens (passwords)\&. The user wishes to keep their non\-expired tokens as before\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Lock the password of the named account\&. This option disables a password by changing it to a value which matches no possible encrypted value (it adds a \(aa!\(aa at the beginning of the password)\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\'s expire date to Jan 2, 1970)\&.
+.sp
+Users with a locked password are not allowed to change their password\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR \fIMIN_DAYS\fR
+.RS 4
+Utawia minimalną liczbę dni pomiędzy zmianami has\(/la na
+\fIMIN_DAYS\fR\&. Wartość zerowa oznacza, że użytkownik może je zmieniać w dowolnym czasie\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Cichy tryb pracy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR\fIREPOZYTORIUM\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Display account status information\&. The status information consists of 7 fields\&. The first field is the user\'s login name\&. The second field indicates if the user account has a locked password (L), has no password (NP), or has a usable password (P)\&. The third field gives the date of the last password change\&. The next four fields are the minimum age, maximum age, warning period, and inactivity period for the password\&. These ages are expressed in days\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR\fIDNI_OSTRZ\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned that his/her password is about to expire\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR\fIMAX_DNI\fR
+.RS 4
+Set the maximum number of days a password remains valid\&. After
+\fIMAX_DAYS\fR, the password is required to be changed\&.
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+Password complexity checking may vary from site to site\&. The user is urged to select a password as complex as he or she feels comfortable with\&.
+.PP
+Users may not be able to change their password on a system if NIS is enabled and they are not logged into the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\'t change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+Polecenie
+\fBpasswd\fR
+kończy dzia\(/lanie z następującymi wartościami kod\('ow zakończenia:
+.PP
+\fI0\fR
+.RS 4
+poprawne zakończenie dzia\(/lania programu
+.RE
+.PP
+\fI1\fR
+.RS 4
+brak dostępu
+.RE
+.PP
+\fI2\fR
+.RS 4
+nieprawid\(/lowa kombinacja opcji
+.RE
+.PP
+\fI3\fR
+.RS 4
+unexpected failure, nothing done
+.RE
+.PP
+\fI4\fR
+.RS 4
+unexpected failure,
+passwd
+file missing
+.RE
+.PP
+\fI5\fR
+.RS 4
+passwd
+file busy, try again
+.RE
+.PP
+\fI6\fR
+.RS 4
+nieprawid\(/lowy argument opcji
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/pl/passwd.5 b/man/pl/passwd.5
new file mode 100644 (file)
index 0000000..5d7ad91
--- /dev/null
@@ -0,0 +1,172 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: Polish
+.\"
+.TH "PASSWD" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+passwd \- the password file
+.SH "OPIS"
+.PP
+
+/etc/passwd
+contains one line for each user account, with seven fields delimited by colons (\(Bq:\(rq)\&. These fields are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+login name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional encrypted password
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical user ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numerical group ID
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+user name or comment field
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+user home directory
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional user command interpreter
+.RE
+.PP
+The encrypted password field may be blank, in which case no password is required to authenticate as the specified login name\&. However, some applications which read the
+/etc/passwd
+file may decide not to permit
+\fIany\fR
+access at all if the
+\fIpassword\fR
+field is blank\&. If the
+\fIpassword\fR
+field is a lower\-case
+\(Bqx\(rq, then the encrypted password is actually stored in the
+\fBshadow\fR(5)
+file instead; there
+\fImust\fR
+be a corresponding line in the
+/etc/shadow
+file, or else the user account is invalid\&. If the
+\fIpassword\fR
+field is any other string, then it will be treated as an encrypted password, as specified by
+\fBcrypt\fR(3)\&.
+.PP
+The comment field is used by various system utilities, such as
+\fBfinger\fR(1)\&.
+.PP
+The home directory field provides the name of the initial working directory\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$HOME\fR
+environmental variable\&.
+.PP
+The command interpreter field provides the name of the user\'s command language interpreter, or the name of the initial program to execute\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$SHELL\fR
+environmental variable\&. If this field is empty, it defaults to the value
+/bin/sh\&.
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+optional encrypted password file
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+Backup file for /etc/passwd\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/pl/porttime.5 b/man/pl/porttime.5
new file mode 100644 (file)
index 0000000..9d446d2
--- /dev/null
@@ -0,0 +1,88 @@
+'\" t
+.\"     Title: porttime
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: Polish
+.\"
+.TH "PORTTIME" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+porttime \- port access time file
+.SH "OPIS"
+.PP
+
+\fIporttime\fR
+contains a list of tty devices, user names, and permitted login times\&.
+.PP
+Each entry consists of three colon separated fields\&. The first field is a comma separated list of tty devices, or an asterisk to indicate that all tty devices are matched by this entry\&. The second field is a comma separated list of user names, or an asterisk to indicated that all user names are matched by this entry\&. The third field is a comma separated list of permitted access times\&.
+.PP
+Each access time entry consists of zero or more days of the week, abbreviated
+\fISu\fR,
+\fIMo\fR,
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR, and
+\fISa\fR, followed by a pair of times separated by a hyphen\&. The abbreviation
+\fIWk\fR
+may be used to represent Monday thru Friday, and
+\fIAl\fR
+may be used to indicate every day\&. If no days are given,
+\fIAl\fR
+is assumed\&.
+.SH "PRZYK\(/LADY"
+.PP
+The following entry allows access to user
+\fBjfh\fR
+on every port during weekdays from 9am to 5pm\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+The following entries allow access only to the users
+\fIroot\fR
+and
+\fIoper\fR
+on
+/dev/console
+at any time\&. This illustrates how the
+/etc/porttime
+file is an ordered list of access times\&. Any other user would match the second entry which does not permit access at any time\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      console:root,oper:Al0000\-2400
+      console:*:
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The following entry allows access for the user
+\fIgames\fR
+on any port during non\-working hours\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "PLIKI"
+.PP
+/etc/porttime
+.RS 4
+File containing port access\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/pl/pwck.8 b/man/pl/pwck.8
new file mode 100644 (file)
index 0000000..63c2127
--- /dev/null
@@ -0,0 +1,298 @@
+'\" t
+.\"     Title: pwck
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "PWCK" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+pwck \- verify integrity of password files
+.SH "SK\(/LADNIA"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [\-q] [\-s] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [\-q] [\-r] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "OPIS"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Checks are made to verify that each entry has:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid user and group identifier
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid primary group
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid home directory
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid login shell
+.RE
+.PP
+
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+These checks are the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+every passwd entry has a matching shadow entry, and every shadow entry has a matching passwd entry
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+passwords are specified in the shadowed file
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries have the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries are unique in shadow
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the last password changes are not in the future
+.RE
+.PP
+The checks for correct number of fields and unique user name are fatal\&. If the entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated user name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warning and the user is encouraged to run the
+\fBusermod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/passwd
+file are not able to alter corrupted or duplicated entries\&.
+\fBpwck\fR
+should be used in those circumstances to remove the offending entry\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBpwck\fR
+posiada następujące opcje:
+.PP
+\fB\-q\fR
+.RS 4
+Report errors only\&. The warnings which do not require any action from the user won\'t be displayed\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Execute the
+\fBpwck\fR
+command in read\-only mode\&.
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+Sort entries in
+/etc/passwd
+and
+/etc/shadow
+by UID\&.
+.RE
+.PP
+By default,
+\fBpwck\fR
+operates on the files
+/etc/passwd
+and
+/etc/shadow\&. The user may select alternate files with the
+\fIpasswd\fR
+and
+\fIshadow\fR
+parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+Polecenie
+\fBpwck\fR
+kończy dzia\(/lanie z następującymi wartościami kod\('ow zakończenia:
+.PP
+\fI0\fR
+.RS 4
+poprawne zakończenie dzia\(/lania programu
+.RE
+.PP
+\fI1\fR
+.RS 4
+niepoprawna sk\(/ladnia polecenia
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad password entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\'t open password files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\'t lock password files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\'t update password files
+.RE
+.PP
+\fI6\fR
+.RS 4
+can\'t sort password files
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/pl/pwconv.8 b/man/pl/pwconv.8
new file mode 100644 (file)
index 0000000..6f813ae
--- /dev/null
@@ -0,0 +1,163 @@
+'\" t
+.\"     Title: pwconv
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "PWCONV" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+pwconv, pwunconv, grpconv, grpunconv \- convert to and from shadow passwords and groups
+.SH "SK\(/LADNIA"
+.HP \w'\fBpwconv\fR\ 'u
+\fBpwconv\fR
+.HP \w'\fBpwunconv\fR\ 'u
+\fBpwunconv\fR
+.HP \w'\fBgrpconv\fR\ 'u
+\fBgrpconv\fR
+.HP \w'\fBgrpunconv\fR\ 'u
+\fBgrpunconv\fR
+.SH "OPIS"
+.PP
+The
+\fBpwconv\fR
+command creates
+\fIshadow\fR
+from
+\fIpasswd\fR
+and an optionally existing
+\fIshadow\fR\&.
+.PP
+The
+\fBpwunconv\fR
+command creates
+\fIpasswd\fR
+from
+\fIpasswd\fR
+and
+\fIshadow\fR
+and then removes
+\fIshadow\fR\&.
+.PP
+The
+\fBgrpconv\fR
+command creates
+\fIgshadow\fR
+from
+\fIgroup\fR
+and an optionally existing
+\fIgshadow\fR\&.
+.PP
+The
+\fBgrpunconv\fR
+command creates
+\fIgroup\fR
+from
+\fIgroup\fR
+and
+\fIgshadow\fR
+and then removes
+\fIgshadow\fR\&.
+.PP
+These four programs all operate on the normal and shadow password and group files:
+/etc/passwd,
+/etc/group,
+/etc/shadow, and
+/etc/gshadow\&.
+.PP
+Each program acquires the necessary locks before conversion\&.
+\fBpwconv\fR
+and
+\fBgrpconv\fR
+are similar\&. First, entries in the shadowed file which don\'t exist in the main file are removed\&. Then, shadowed entries which don\'t have `x\' as the password in the main file are updated\&. Any missing shadowed entries are added\&. Finally, passwords in the main file are replaced with `x\'\&. These programs can be used for initial conversion as well to update the shadowed file if the main file is edited by hand\&.
+.PP
+
+\fBpwconv\fR
+will use the values of
+\fIPASS_MIN_DAYS\fR,
+\fIPASS_MAX_DAYS\fR, and
+\fIPASS_WARN_AGE\fR
+from
+/etc/login\&.defs
+when adding new entries to
+/etc/shadow\&.
+.PP
+Likewise
+\fBpwunconv\fR
+and
+\fBgrpunconv\fR
+are similar\&. Passwords in the main file are updated from the shadowed file\&. Entries which exist in the main file but not in the shadowed file are left alone\&. Finally, the shadowed file is removed\&. Some password aging information is lost by
+\fBpwunconv\fR\&. It will convert what it can\&.
+.SH "B\(/LĘDY"
+.PP
+Errors in the password or group files (such as invalid or duplicate entries) may cause these programs to loop forever or fail in other strange ways\&. Please run
+\fBpwck\fR
+and
+\fBgrpck\fR
+to correct any such errors before converting to or from shadow passwords or groups\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variable in
+/etc/login\&.defs
+changes the behavior of
+\fBgrpconv\fR
+and
+\fBgrpunconv\fR:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of
+\fBpwconv\fR:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBgrpck\fR(8),
+\fBlogin.defs\fR(5),
+\fBpwck\fR(8)\&.
diff --git a/man/pl/pwunconv.8 b/man/pl/pwunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/pl/sg.1 b/man/pl/sg.1
new file mode 100644 (file)
index 0000000..4e0d0dd
--- /dev/null
@@ -0,0 +1,89 @@
+'\" t
+.\"     Title: sg
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia użytkownik\('ow
+.\"    Source: Polecenia użytkownik\('ow
+.\"  Language: Polish
+.\"
+.TH "SG" "1" "07/24/2009" "Polecenia użytkownik\('ow" "Polecenia użytkownik\('ow"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+sg \- execute command as different group ID
+.SH "SK\(/LADNIA"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [group\ [\-c]\ command]
+.SH "OPIS"
+.PP
+The
+\fBsg\fR
+command works similar to
+\fBnewgrp\fR
+but accepts a command\&. The command will be executed with the
+/bin/sh
+shell\&. With most shells you may run
+\fBsg\fR
+from, you need to enclose multi\-word commands in quotes\&. Another difference between
+\fBnewgrp\fR
+and
+\fBsg\fR
+is that some shells treat
+\fBnewgrp\fR
+specially, replacing themselves with a new instance of a shell that
+\fBnewgrp\fR
+creates\&. This doesn\'t happen with
+\fBsg\fR, so upon exit from a
+\fBsg\fR
+command you are returned to your previous group ID\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/pl/shadow.3 b/man/pl/shadow.3
new file mode 100644 (file)
index 0000000..e766d1d
--- /dev/null
@@ -0,0 +1,249 @@
+'\" t
+.\"     Title: shadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Library Calls
+.\"    Source: Library Calls
+.\"  Language: Polish
+.\"
+.TH "SHADOW" "3" "07/24/2009" "Library Calls" "Library Calls"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+shadow, getspnam \- encrypted password file routines
+.SH "SK\(/LADNIA"
+.PP
+
+\fI#include <shadow\&.h>\fR
+.PP
+
+\fIstruct spwd *getspent();\fR
+.PP
+
+\fIstruct spwd *getspnam(char\fR
+\fI*name\fR\fI);\fR
+.PP
+
+\fIvoid setspent()\fR
+.PP
+
+\fIvoid endspent();\fR
+.PP
+
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIFILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+
+\fIint lckpwdf();\fR
+.PP
+
+\fIint ulckpwdf();\fR
+.SH "OPIS"
+.PP
+
+\fIshadow\fR
+manipulates the contents of the shadow password file,
+/etc/shadow\&. The structure in the
+\fI#include\fR
+file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+      char             *sp_namp; /* user login name */
+      char             *sp_pwdp; /* encrypted password */
+      long int         sp_lstchg; /* last password change */
+      long int         sp_min; /* days until change allowed\&. */
+      long int         sp_max; /* days before change required */
+      long int         sp_warn; /* days warning for expiration */
+      long int         sp_inact; /* days before account inactive */
+      long int         sp_expire; /* date when account expires */
+      unsigned long int        sp_flag; /* reserved for future use */
+}
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The meanings of each field are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- pointer to null\-terminated user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- pointer to null\-terminated password
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- days since Jan 1, 1970 password was last changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- days before which password may not be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- days after which password must be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- days before password is to expire that user is warned of pending password expiration
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- days after password expires that account is considered inactive and disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- days since Jan 1, 1970 when account will be disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- reserved for future use
+.RE
+.SH "OPIS"
+.PP
+
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, and
+\fIsgetspent\fR
+each return a pointer to a
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+returns the next entry from the file, and
+\fIfgetspent\fR
+returns the next entry from the given stream, which is assumed to be a file of the proper format\&.
+\fIsgetspent\fR
+returns a pointer to a
+\fIstruct spwd\fR
+using the provided string as input\&.
+\fIgetspnam\fR
+searches from the current position in the file for an entry matching
+\fIname\fR\&.
+.PP
+
+\fIsetspent\fR
+and
+\fIendspent\fR
+may be used to begin and end, respectively, access to the shadow password file\&.
+.PP
+The
+\fIlckpwdf\fR
+and
+\fIulckpwdf\fR
+routines should be used to insure exclusive access to the
+/etc/shadow
+file\&.
+\fIlckpwdf\fR
+attempts to acquire a lock using
+\fIpw_lock\fR
+for up to 15 seconds\&. It continues by attempting to acquire a second lock using
+\fIspw_lock\fR
+for the remainder of the initial 15 seconds\&. Should either attempt fail after a total of 15 seconds,
+\fIlckpwdf\fR
+returns \-1\&. When both locks are acquired 0 is returned\&.
+.SH "DIAGNOSTYKA"
+.PP
+Routines return NULL if no more entries are available or if an error occurs during processing\&. Routines which have
+\fIint\fR
+as the return value return 0 for success and \-1 for failure\&.
+.SH "OSTRZEŻENIA"
+.PP
+These routines may only be used by the superuser as access to the shadow password file is restricted\&.
+.SH "PLIKI"
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/pl/shadow.5 b/man/pl/shadow.5
new file mode 100644 (file)
index 0000000..ef5b02c
--- /dev/null
@@ -0,0 +1,141 @@
+'\" t
+.\"     Title: shadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: Polish
+.\"
+.TH "SHADOW" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+shadow \- shadowed password file
+.SH "OPIS"
+.PP
+
+shadow
+is a file which contains the password information for the system\'s accounts and optional aging information\&.
+.PP
+This file must not be readable by regular users if password security is to be maintained\&.
+.PP
+Each line of this file contains 9 fields, separated by colons (\(Bq:\(rq), in the following order:
+.PP
+\fBlogin name\fR
+.RS 4
+It must be a valid account name, which exist on the system\&.
+.RE
+.PP
+\fBencrypted password\fR
+.RS 4
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, the user will not be able to use a unix password to log in (but the user may log in the system by other means)\&.
+.sp
+This field may be empty, in which case no passwords are required to authenticate as the specified login name\&. However, some applications which read the
+/etc/shadow
+file may decide not to permit any access at all if the password field is empty\&.
+.sp
+A password field which starts with a exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.RE
+.PP
+\fBdate of last password change\fR
+.RS 4
+The date of the last password change, expressed as the number of days since Jan 1, 1970\&.
+.sp
+The value 0 has a special meaning, which is that the user should change her pasword the next time she will log in the system\&.
+.sp
+An empty field means that password aging features are disabled\&.
+.RE
+.PP
+\fBminimum password age\fR
+.RS 4
+The minimum password age is the number of days the user will have to wait before she will be allowed to change her password again\&.
+.sp
+An empty field and value 0 mean that there are no minimum password age\&.
+.RE
+.PP
+\fBmaximum password age\fR
+.RS 4
+The maximum password age is the number of days after which the user will have to change her password\&.
+.sp
+After this number of days is elapsed, the password may still be valid\&. The user should be asked to change her password the next time she will log in\&.
+.sp
+An empty field means that there are no maximum password age, no password warning period, and no password inactivity period (see below)\&.
+.sp
+If the maximum password age is lower than the minimum password age, the user cannot change her password\&.
+.RE
+.PP
+\fBpassword warning period\fR
+.RS 4
+The number of days before a password is going to expire (see the maximum password age above) during which the user should be warned\&.
+.sp
+An empty field and value 0 mean that there are no password warning period\&.
+.RE
+.PP
+\fBpassword inactivity period\fR
+.RS 4
+The number of days after a password has expired (see the maximum password age above) during which the password should still be accepted (and the user should update her password during the next login)\&.
+.sp
+After expiration of the password and this expiration period is elapsed, no login is possible using the current user\'s password\&. The user should contact her administrator\&.
+.sp
+An empty field means that there are no enforcement of an inactivity period\&.
+.RE
+.PP
+\fBaccount expiration date\fR
+.RS 4
+The date of expiration of the account, expressed as the number of days since Jan 1, 1970\&.
+.sp
+Note that an account expiration differs from a password expiration\&. In case of an acount expiration, the user shall not be allowed to login\&. In case of a password expiration, the user is not allowed to login using her password\&.
+.sp
+An empty field means that the account will never expire\&.
+.sp
+The value 0 should not be used as it is interpreted as either an account with no expiration, or as an expiration on Jan 1, 1970\&.
+.RE
+.PP
+\fBreserved field\fR
+.RS 4
+This field is reserved for future use\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.PP
+/etc/shadow\-
+.RS 4
+Backup file for /etc/shadow\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/pl/suauth.5 b/man/pl/suauth.5
new file mode 100644 (file)
index 0000000..0fe19e0
--- /dev/null
@@ -0,0 +1,137 @@
+'\" t
+.\"     Title: suauth
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: Polish
+.\"
+.TH "SUAUTH" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+suauth \- detailed su control file
+.SH "SK\(/LADNIA"
+.HP \w'\fB/etc/suauth\fR\ 'u
+\fB/etc/suauth\fR
+.SH "OPIS"
+.PP
+The file
+/etc/suauth
+is referenced whenever the su command is called\&. It can change the behaviour of the su command, based upon:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      1) the user su is targetting
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+2) the user executing the su command (or any groups he might be a member of)
+.PP
+The file is formatted like this, with lines starting with a # being treated as comment lines and ignored;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      to\-id:from\-id:ACTION
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Where to\-id is either the word
+\fIALL\fR, a list of usernames delimited by "," or the words
+\fIALL EXCEPT\fR
+followed by a list of usernames delimited by ","
+.PP
+from\-id is formatted the same as to\-id except the extra word
+\fIGROUP\fR
+is recognised\&.
+\fIALL EXCEPT GROUP\fR
+is perfectly valid too\&. Following
+\fIGROUP\fR
+appears one or more group names, delimited by ","\&. It is not sufficient to have primary group id of the relevant group, an entry in
+\fB/etc/group\fR(5)
+is neccessary\&.
+.PP
+Action can be one only of the following currently supported options\&.
+.PP
+\fIDENY\fR
+.RS 4
+The attempt to su is stopped before a password is even asked for\&.
+.RE
+.PP
+\fINOPASS\fR
+.RS 4
+The attempt to su is automatically successful; no password is asked for\&.
+.RE
+.PP
+\fIOWNPASS\fR
+.RS 4
+For the su command to be successful, the user must enter his or her own password\&. They are told this\&.
+.RE
+.PP
+Note there are three separate fields delimited by a colon\&. No whitespace must surround this colon\&. Also note that the file is examined sequentially line by line, and the first applicable rule is used without examining the file further\&. This makes it possible for a system administrator to exercise as fine control as he or she wishes\&.
+.SH "EXAMPLE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      # sample /etc/suauth file
+      #
+      # A couple of privileged usernames may
+      # su to root with their own password\&.
+      #
+      root:chris,birddog:OWNPASS
+      #
+      # Anyone else may not su to root unless in
+      # group wheel\&. This is how BSD does things\&.
+      #
+      root:ALL EXCEPT GROUP wheel:DENY
+      #
+      # Perhaps terry and birddog are accounts
+      # owned by the same person\&.
+      # Access can be arranged between them
+      # with no password\&.
+      #
+      terry:birddog:NOPASS
+      birddog:terry:NOPASS
+      #
+    
+.fi
+.if n \{\
+.RE
+.\}
+.SH "PLIKI"
+.PP
+/etc/suauth
+.RS 4
+.RE
+.SH "B\(/LĘDY"
+.PP
+There could be plenty lurking\&. The file parser is particularly unforgiving about syntax errors, expecting no spurious whitespace (apart from beginning and end of lines), and a specific token delimiting different things\&.
+.SH "DIAGNOSTYKA"
+.PP
+An error parsing the file is reported using
+\fBsyslogd\fR(8)
+as level ERR on facility AUTH\&.
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBsu\fR(1)\&.
diff --git a/man/pl/sulogin.8 b/man/pl/sulogin.8
new file mode 100644 (file)
index 0000000..c59fcbc
--- /dev/null
@@ -0,0 +1,107 @@
+'\" t
+.\"     Title: sulogin
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "SULOGIN" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+sulogin \- Single\-user login
+.SH "SK\(/LADNIA"
+.PP
+\fBsulogin\fR
+[\fItty\-device\fR]
+.SH "OPIS"
+.PP
+The
+\fBsulogin\fR
+command is invoked by
+\fBinit\fR
+prior to allowing the user access to the system when in single user mode\&. This feature may only be available on certain systems where
+\fBinit\fR
+has been modified accordingly, or where the
+/etc/inittab
+has an entry for a single user login\&.
+.PP
+The user is prompted
+.PP
+Type control\-d to proceed with normal startup, (or give root password for system maintenance):
+.PP
+Input and output will be performed with the standard file descriptors unless the optional device name argument is provided\&.
+.PP
+If the user enters the correct root password, a login session is initiated\&. When
+\fIEOF\fR
+is pressed instead, the system enters multi\-user mode\&.
+.PP
+After the user exits the single\-user shell, or presses
+\fIEOF\fR, the system begins the initialization process required to enter multi\-user mode\&.
+.SH "OSTRZEŻENIA"
+.PP
+This command can only be used if
+\fBinit\fR
+has been modified to call
+\fBsulogin\fR
+instead of
+/bin/sh, or if the user has set the
+\fIinittab\fR
+to support a single user login\&. For example, the line:
+.PP
+co:s:respawn:/etc/sulogin /dev/console
+.PP
+should execute the sulogin command in single user mode\&.
+.PP
+As complete an environment as possible is created\&. However, various devices may be unmounted or uninitialized and many of the user commands may be unavailable or nonfunctional as a result\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+
+\fBlogin\fR(1),
+\fBsh\fR(1),
+\fBinit\fR(8)\&.
diff --git a/man/pl/useradd.8 b/man/pl/useradd.8
new file mode 100644 (file)
index 0000000..b3ce9ae
--- /dev/null
@@ -0,0 +1,648 @@
+'\" t
+.\"     Title: useradd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "USERADD" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+useradd \- create a new user or update default new user information
+.SH "SK\(/LADNIA"
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR [\fIopcje\fR] \fILOGIN\fR
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D [\fIopcje\fR]
+.SH "OPIS"
+.PP
+When invoked without the
+\fB\-D\fR
+option, the
+\fBuseradd\fR
+command creates a new user account using the values specified on the command line plus the default values from the system\&. Depending on command line options, the
+\fBuseradd\fR
+command will update system files and may also create the new user\'s home directory and copy initial files\&.
+.PP
+By default, a group will also be created for the new user (see
+\fB\-g\fR,
+\fB\-N\fR,
+\fB\-U\fR, and
+\fBUSERGROUPS_ENAB\fR)\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBuseradd\fR
+posiada następujące opcje:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\fIKAT_BAZOWY\fR
+.RS 4
+The default base directory for the system if
+\fB\-d\fR
+\fIHOME_DIR\fR
+is not specified\&.
+\fIBASE_DIR\fR
+is concatenated with the account name to define the home directory\&. If the
+\fB\-m\fR
+option is not used,
+\fIBASE_DIR\fR
+must exist\&.
+.sp
+If this option is not specified,
+\fBuseradd\fR
+will use the base directory specified by the
+\fBHOME\fR
+variable in
+/etc/default/useradd, or
+/home
+by default\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\fIKOMENTARZ\fR
+.RS 4
+Any text string\&. It is generally a short description of the login, and is currently used as the field for the user\'s full name\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\fIKAT_DOMOWY\fR
+.RS 4
+The new user will be created using
+\fIHOME_DIR\fR
+as the value for the user\'s login directory\&. The default is to append the
+\fILOGIN\fR
+name to
+\fIBASE_DIR\fR
+and use that as the login directory name\&. The directory
+\fIHOME_DIR\fR
+does not have to exist but will not be created if it is missing\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-defaults\fR
+.RS 4
+See below, the subsection "Changing the default values"\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\fIDATA_WAŻN\fR
+.RS 4
+Data, od kt\('orej konto danego użytkownika zostanie wy\(/lączone\&. Data podawana jest w formacie
+\fIMM/DD/RR\fR\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default expiry date specified by the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd, or an empty string (no expiry) by default\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\fINIEAKTYWNE\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&. A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default inactivity period specified by the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd, or \-1 by default\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIGRUPA\fR
+.RS 4
+The group name or number of the user\'s initial login group\&. The group name must exist\&. A group number must refer to an already existing group\&.
+.sp
+If not specified, the bahavior of
+\fBuseradd\fR
+will depend on the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&. If this variable is set to
+\fIyes\fR
+(or
+\fB\-U/\-\-user\-group\fR
+is specified on the command line), a group will be created for the user, with the same name as her loginname\&. If the variable is set to
+\fIno\fR
+(or
+\fB\-N/\-\-no\-user\-group\fR
+is specified on the command line), useradd will set the primary group of the new user to the value specified by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd, or 100 by default\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\fIGRUPA1\fR[\fI,GRUPA2,\&.\&.\&.\fR[\fI,GRUPAN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&. The default is for the user to belong only to the initial group\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-skel\fR \fISKEL_DIR\fR
+.RS 4
+The skeleton directory, which contains files and directories to be copied in the user\'s home directory, when the home directory is created by
+\fBuseradd\fR\&.
+.sp
+This option is only valid if the
+\fB\-m\fR
+(or
+\fB\-\-create\-home\fR) option is specified\&.
+.sp
+If this option is not set, the skeleton directory is defined by the
+\fBSKEL\fR
+variable in
+/etc/default/useradd
+or, by default,
+/etc/skel\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\fIKLUCZ\fR=\fIWARTOŚĆ\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBUMASK\fR,
+\fBPASS_MAX_DAYS\fR
+and others)\&.
+
+Example:
+\fB\-K \fR\fIPASS_MAX_DAYS\fR=\fI\-1\fR
+can be used when creating system account to turn off password ageing, even though system account has no password at all\&. Multiple
+\fB\-K\fR
+options can be specified, e\&.g\&.:
+\fB\-K \fR
+\fIUID_MIN\fR=\fI100\fR
+\fB\-K \fR
+\fIUID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K \fR
+\fIUID_MIN\fR=\fI10\fR,\fIUID_MAX\fR=\fI499\fR
+doesn\'t work yet\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-no\-log\-init\fR
+.RS 4
+Do not add the user to the lastlog and faillog databases\&.
+.sp
+By default, the user\'s entries in the lastlog and faillog databases are resetted to avoid reusing the entry from a previously deleted user\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-create\-home\fR
+.RS 4
+Create the user\'s home directory if it does not exist\&. The files and directories contained in the skeleton directory (which can be defined with the
+\fB\-k\fR
+option) will be copied to the home directory\&.
+.sp
+By default, no home directories are created\&.
+.RE
+.PP
+\fB\-M\fR
+.RS 4
+Do no create the user\'s home directory, even if the system wide setting from
+/etc/login\&.defs
+(\fBCREATE_HOME\fR) is set to
+\fIyes\fR\&.
+.RE
+.PP
+\fB\-N\fR, \fB\-\-no\-user\-group\fR
+.RS 4
+Do not create a group with the same name as the user, but add the user to the group specified by the
+\fB\-g\fR
+option or by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Allow the creation of a user account with a duplicate (non\-unique) UID\&.
+.sp
+This option is only valid in combination with the
+\fB\-o\fR
+option\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\fIHAS\(/LO\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system account\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are choosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+/etc/login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.sp
+Note that
+\fBuseradd\fR
+will not create a home directory for such an user, regardless of the default setting in
+/etc/login\&.defs
+(\fBCREATE_HOME\fR)\&. You have to specify the
+\fB\-m\fR
+options if you want a home directory for a system account to be created\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fISHELL\fR
+.RS 4
+The name of the user\'s login shell\&. The default is to leave this field blank, which causes the system to select the default login shell specified by the
+\fBSHELL\fR
+variable in
+/etc/default/useradd, or an empty string by default\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\fIUID\fR
+.RS 4
+The numerical value of the user\'s ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than 999 and greater than every other user\&. Values between 0 and 999 are typically reserved for system accounts\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-user\-group\fR
+.RS 4
+Create a group with the same name as the user, and add the user to this group\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR \fISEUSER\fR
+.RS 4
+The SELinux user for the user\'s login\&. The default is to leave this field blank, which causes the system to select the default SELinux user\&.
+.RE
+.SS "Changing the default values"
+.PP
+When invoked with only the
+\fB\-D\fR
+option,
+\fBuseradd\fR
+will display the current default values\&. When invoked with
+\fB\-D\fR
+plus other options,
+\fBuseradd\fR
+will update the default values for the specified options\&. Valid default\-changing options are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\fIKAT_BAZOWY\fR
+.RS 4
+The path prefix for a new user\'s home directory\&. The user\'s name will be affixed to the end of
+\fIBASE_DIR\fR
+to form the new user\'s home directory name, if the
+\fB\-d\fR
+option is not used when creating a new account\&.
+.sp
+This option sets the
+\fBHOME\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\fIDATA_WAŻN\fR
+.RS 4
+The date on which the user account is disabled\&.
+.sp
+This option sets the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\fINIEAKTYWNE\fR
+.RS 4
+The number of days after a password has expired before the account will be disabled\&.
+.sp
+This option sets the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIGRUPA\fR
+.RS 4
+The group name or ID for a new user\'s initial group (when the
+\fB\-N/\-\-no\-user\-group\fR
+is used or when the
+\fBUSERGROUPS_ENAB\fR
+variable is set to
+\fIno\fR
+in
+/etc/login\&.defs\&. The named group must exist, and a numerical group ID must have an existing entry\&.
+.sp
+This option sets the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fISHELL\fR
+.RS 4
+The name of a new user\'s login shell\&.
+.sp
+This option sets the
+\fBSHELL\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.SH "UWAGI"
+.PP
+The system administrator is responsible for placing the default user files in the
+/etc/skel/
+directory (or any other skeleton directory specified in
+/etc/default/useradd
+or on the command line)\&.
+.SH "OSTRZEŻENIA"
+.PP
+You may not add a user to a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+Similarly, if the username already exists in an external user database such as NIS or LDAP,
+\fBuseradd\fR
+will deny the user account creation request\&.
+.PP
+Usernames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Usernames may only be up to 32 characters long\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indicate if a home directory should be created by default for new users\&.
+.sp
+This setting does not apply to system users, and can be overriden on the command line\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/default/useradd
+.RS 4
+Default values for account creation\&.
+.RE
+.PP
+/etc/skel/
+.RS 4
+Directory containing default files\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+Polecenie
+\fBuseradd\fR
+kończy dzia\(/lanie z następującymi wartościami kod\('ow zakończenia:
+.PP
+\fI0\fR
+.RS 4
+poprawne zakończenie dzia\(/lania programu
+.RE
+.PP
+\fI1\fR
+.RS 4
+nie można zaktualizować pliku z has\(/lami
+.RE
+.PP
+\fI2\fR
+.RS 4
+niepoprawna sk\(/ladnia polecenia
+.RE
+.PP
+\fI3\fR
+.RS 4
+nieprawid\(/lowy argument opcji
+.RE
+.PP
+\fI4\fR
+.RS 4
+UID juz jest używany (i nie uzyto opcji
+\fB\-o\fR)
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\'t exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+username already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+nie można zaktualizować pliku z grupami
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\'t create home directory
+.RE
+.PP
+\fI13\fR
+.RS 4
+can\'t create mail spool
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/pl/userdel.8 b/man/pl/userdel.8
new file mode 100644 (file)
index 0000000..bd40392
--- /dev/null
@@ -0,0 +1,267 @@
+'\" t
+.\"     Title: userdel
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "USERDEL" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+userdel \- plik chroniony informacji o użytkownikach
+.SH "SK\(/LADNIA"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [opcje] \fILOGIN\fR
+.SH "OPIS"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBuserdel\fR
+posiada następujące opcje:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\'s home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+
+\fINote:\fR
+This option is dangerous and may leave your system in an inconsistent state\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+Files in the user\'s home directory will be removed along with the home directory itself and the user\'s mail spool\&. Files located in other file systems will have to be searched for and deleted manually\&.
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+If defined, this command is run when removing a user\&. It should remove any at/cron/print jobs etc\&. owned by the user to be removed (passed as the first argument)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\'s cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+       echo "Usage: $0 username"
+       exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+      
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Konfiguracja pakietu shadow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.SH "KOD ZAKOŃCZENIA"
+.PP
+Polecenie
+\fBuserdel\fR
+kończy dzia\(/lanie z następującymi wartościami kod\('ow zakończenia:
+.PP
+\fI0\fR
+.RS 4
+poprawne zakończenie dzia\(/lania programu
+.RE
+.PP
+\fI1\fR
+.RS 4
+nie można zaktualizować pliku z has\(/lami
+.RE
+.PP
+\fI2\fR
+.RS 4
+niepoprawna sk\(/ladnia polecenia
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified user doesn\'t exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+user currently logged in
+.RE
+.PP
+\fI10\fR
+.RS 4
+nie można zaktualizować pliku z grupami
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\'t remove home directory
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\'s password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this user\&.
+.PP
+You may not remove any NIS attributes on a NIS client\&. This must be performed on the NIS server\&.
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/pl/usermod.8 b/man/pl/usermod.8
new file mode 100644 (file)
index 0000000..48b9542
--- /dev/null
@@ -0,0 +1,269 @@
+'\" t
+.\"     Title: usermod
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "USERMOD" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+usermod \- zmiana danych konta użytkownika
+.SH "SK\(/LADNIA"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fIopcje\fR] \fILOGIN\fR
+.SH "OPIS"
+.PP
+Polecenie
+\fBusermod\fR
+zmienia systemowe pliki kont, odzwierciedlając zmiany podane w wierszu poleceń\&.
+.SH "OPCJE"
+.PP
+Polecenie
+\fBusermod\fR
+posiada następujące opcje:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Add the user to the supplementary group(s)\&. Use only with the
+\fB\-G\fR
+option\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\fIKOMENTARZ\fR
+.RS 4
+Nowa wartość pola komentarza dla danego użytkownika w pliku hase\(/l\&. Zwykle jest zmieniana przy pomocy polecenia
+\fBchfn\fR(1)\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\fIKAT_DOMOWY\fR
+.RS 4
+The user\'s new login directory\&.
+.sp
+If the
+\fB\-m\fR
+option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\fIDATA_WAŻN\fR
+.RS 4
+Data, od kt\('orej konto danego użytkownika zostanie wy\(/lączone\&. Data podawana jest w formacie
+\fIMM/DD/RR\fR\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\fINIEAKTYWNE\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&.
+.sp
+A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIGRUPA\fR
+.RS 4
+The group name or number of the user\'s new initial login group\&. The group must exist\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\fIGRUPA1\fR[\fI,GRUPA2,\&.\&.\&.\fR[\fI,GRUPAN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&.
+.sp
+If the user is currently a member of a group which is not listed, the user will be removed from the group\&. This behaviour can be changed via the
+\fB\-a\fR
+option, which appends the user to the current supplementary group list\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR\fINOWY_LOGIN\fR
+.RS 4
+The name of the user will be changed from
+\fILOGIN\fR
+to
+\fINEW_LOGIN\fR\&. Nothing else is changed\&. In particular, the user\'s home directory name should probably be changed manually to reflect the new login name\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+Zablokuj has\(/lo użytkownika\&. Opcja ta powoduje wstawienie \(cq!\(cq na początku zakodowanego has\(/la\&. Opcji tej nie można używać z opcjami
+\fB\-p\fR
+or
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+Move the content of the user\'s home directory to the new location\&.
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-u\fR
+option, this option allows to change the user ID to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\fIHAS\(/LO\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fISHELL\fR
+.RS 4
+Nazwa nowej pow\(/loki (shell) użytkownika\&. Ustawienie tego pola na puste powoduje, że system wybierze domyślną pow\(/lokę logowania\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\fIUID\fR
+.RS 4
+The new numerical value of the user\'s ID\&.
+.sp
+This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. Values between 0 and 999 are typically reserved for system accounts\&.
+.sp
+The user\'s mailbox, and any files which the user owns and which are located in the user\'s home directory will have the file user ID changed automatically\&.
+.sp
+The ownership of files outside of the user\'s home directory must be fixed manually\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+Odblokowuje has\(/lo użytkownika\&. Opcja ta powoduje usuniecie \(cq!\(cq z początku zakodowanego has\(/la\&. Opcji tej nie można używać z opcjami
+\fB\-p\fR
+lub
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR \fISEUSER\fR
+.RS 4
+The SELinux user for the user\'s login\&. The default is to leave this field the blank, which causes the system to select the default SELinux user\&.
+.RE
+.SH "OSTRZEŻENIA"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\'s numerical user ID, the user\'s name, or the user\'s home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux, but only check if the user is logged in according to utmp on other architectures\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+You must make any changes involving NIS on the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/pl/vigr.8 b/man/pl/vigr.8
new file mode 100644 (file)
index 0000000..ff72d7a
--- /dev/null
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/pl/vipw.8 b/man/pl/vipw.8
new file mode 100644 (file)
index 0000000..4f50c39
--- /dev/null
@@ -0,0 +1,108 @@
+'\" t
+.\"     Title: vipw
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Polecenia Zarządzania Systemem
+.\"    Source: Polecenia Zarządzania Systemem
+.\"  Language: Polish
+.\"
+.TH "VIPW" "8" "07/24/2009" "Polecenia Zarządzania Systemem" "Polecenia Zarządzania Systemem"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAZWA"
+vipw, vigr \- edytuj plik hase\(/l, grup lub ich wersji chronionych
+.SH "SK\(/LADNIA"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIopcje\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIopcje\fR]
+.SH "OPIS"
+.PP
+Polecenia
+\fBvipw\fR
+i
+\fBvigr\fR
+umożliwiają modyfikację plik\('ow odpowiednio
+/etc/passwd
+i
+/etc/group\&. Przy zastosowaniu flagi
+\fB\-s\fR
+modyfikują także dodatkowe wersje chronione tych plik\('ow \- odpowiednio
+/etc/shadow
+i
+/etc/gshadow\&. Dla ochrony przed uszkodzeniem w trakcie modyfikacji tych plik\('ow programy te ustawiają odpowiednie blokady\&. Szukając edytora programy te używają w pierwszej kolejności zmiennej środowiska
+\fB$VISUAL\fR, a następnie
+\fB$EDITOR\fR, a na końcu a na końcu domyślnego edytora
+\fBvi\fR(1)\&.
+.SH "OPCJE"
+.PP
+Polecenia
+\fBvipw\fR
+i
+\fBvigr\fR
+posiadają następujące opcje:Polecenia
+\fBvipw\fR
+i
+\fBvigr\fR
+posiadają następujące opcje:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+Edycja bazy grup\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Wyświetlenie komunikatu pomocy i zakończenie dzia\(/lania\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+Edycja bazy passwd\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Cichy tryb pracy\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+Edycja bazy shadow lub gshadow\&.
+.RE
+.SH "PLIKI"
+.PP
+/etc/group
+.RS 4
+Informacje o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Informacje chronione o grupach użytkownik\('ow\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Informacja o kontach użytkownik\('ow\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Informacje chronione o użytkownikach\&.
+.RE
+.SH "ZOBACZ TAKŻE"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/po/LINGUAS b/man/po/LINGUAS
new file mode 100644 (file)
index 0000000..6dbaa87
--- /dev/null
@@ -0,0 +1,6 @@
+de
+fr
+it
+pl
+ru
+sv
diff --git a/man/po/Makefile.in.in b/man/po/Makefile.in.in
new file mode 100644 (file)
index 0000000..93b4b75
--- /dev/null
@@ -0,0 +1,247 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2006 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.16
+# Modified to handle translations with xml2po by Nicolas François - 2007
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge --previous
+MSGMERGE_UPDATE = @MSGMERGE@ --update --previous
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(POFILES)
+
+POTFILES = \
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .sed .sin .nop .po-create .po-update
+
+remove-potcdate.sin: ../../po/remove-potcdate.sin
+       cp ../../po/remove-potcdate.sin .
+
+.sin.sed:
+       sed -e '/^#/d' $< > t-$@
+       mv t-$@ $@
+
+
+all: all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+       @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+         echo "touch stamp-po" && \
+         echo timestamp > stamp-poT && \
+         mv stamp-poT stamp-po; \
+       }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+# TODO: set MSGID_BUGS_ADDRESS, COPYRIGHT_HOLDER
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+       @set -e; tmpdir=`pwd`; \
+       echo "cd $(top_srcdir)/man"; \
+       cd $(top_srcdir)/man; \
+       echo "[ ! -f config.xml ] || mv config.xml config.xml.bak"; \
+       [ ! -f config.xml ] || mv config.xml config.xml.bak; \
+       echo "xml2po --expand-all-entities -o $$tmpdir/$(DOMAIN).po $(notdir $(POTFILES))"; \
+       xml2po --expand-all-entities -o $$tmpdir/$(DOMAIN).po $(notdir $(POTFILES)); \
+       echo "[ ! -f config.xml.bak ] || mv config.xml.bak config.xml"; \
+       [ ! -f config.xml.bak ] || mv config.xml.bak config.xml; \
+       cd $$tmpdir
+       test ! -f $(DOMAIN).po || { \
+         if test -f $(srcdir)/$(DOMAIN).pot; then \
+           sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+           sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+           if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+             rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+           else \
+             rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+             mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+           fi; \
+         else \
+           mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+         fi; \
+       }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+       $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+       @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+       if test -f "$(srcdir)/$${lang}.po"; then \
+         test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+         echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+         cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
+       else \
+         $(MAKE) $${lang}.po-create; \
+       fi
+
+
+install: install-exec install-data
+install-exec:
+install-data:
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data:
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data:
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+       rm -f remove-potcdate.sed
+       rm -f stamp-poT
+       rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile Makefile.in POTFILES
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+       rm -f stamp-po
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+       $(MAKE) update-po
+       @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+       dists="$(DISTFILES)"; \
+       if test -f $(srcdir)/$(DOMAIN).pot; then \
+         dists="$$dists $(DOMAIN).pot stamp-po"; \
+       fi; \
+       if test -f $(srcdir)/ChangeLog; then \
+         dists="$$dists ChangeLog"; \
+       fi; \
+       for i in 0 1 2 3 4 5 6 7 8 9; do \
+         if test -f $(srcdir)/ChangeLog.$$i; then \
+           dists="$$dists ChangeLog.$$i"; \
+         fi; \
+       done; \
+       if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+       for file in $$dists; do \
+         if test -f $$file; then \
+           cp -p $$file $(distdir) || exit 1; \
+         else \
+           cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+         fi; \
+       done
+
+update-po: Makefile
+       $(MAKE) $(DOMAIN).pot-update
+       test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+
+# General rule for creating PO files.
+
+.nop.po-create:
+       @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+       echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+       exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+       @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+       tmpdir=`pwd`; \
+       echo "$$lang:"; \
+       test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+       echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+       cd $(srcdir); \
+       if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+         if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+           rm -f $$tmpdir/$$lang.new.po; \
+         else \
+           if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+             :; \
+           else \
+             echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+             exit 1; \
+           fi; \
+         fi; \
+       else \
+         echo "msgmerge for $$lang.po failed!" 1>&2; \
+         rm -f $$tmpdir/$$lang.new.po; \
+       fi
+
+$(DUMMYPOFILES):
+
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+       cd $(top_builddir) \
+         && $(SHELL) ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/po/Makevars b/man/po/Makevars
new file mode 100644 (file)
index 0000000..c78c646
--- /dev/null
@@ -0,0 +1,27 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)-man-pages
+
+# These two variables depend on the location of this directory.
+subdir = man/po
+top_builddir = ../..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --no-location
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+MSGID_BUGS_ADDRESS = pkg-shadow-devel@lists.alioth.debian.org
diff --git a/man/po/POTFILES.in b/man/po/POTFILES.in
new file mode 100644 (file)
index 0000000..01a3e9c
--- /dev/null
@@ -0,0 +1,41 @@
+# List of xml which contain translatable strings.
+
+man/chage.1.xml
+man/chfn.1.xml
+man/chgpasswd.8.xml
+man/chpasswd.8.xml
+man/chsh.1.xml
+man/expiry.1.xml
+man/faillog.5.xml
+man/faillog.8.xml
+man/gpasswd.1.xml
+man/groupadd.8.xml
+man/groupdel.8.xml
+man/groupmems.8.xml
+man/groupmod.8.xml
+man/groups.1.xml
+man/grpck.8.xml
+man/gshadow.5.xml
+man/lastlog.8.xml
+man/limits.5.xml
+man/login.1.xml
+man/login.access.5.xml
+man/login.defs.5.xml
+man/logoutd.8.xml
+man/newgrp.1.xml
+man/newusers.8.xml
+man/nologin.8.xml
+man/passwd.1.xml
+man/passwd.5.xml
+man/porttime.5.xml
+man/pwck.8.xml
+man/pwconv.8.xml
+man/shadow.3.xml
+man/shadow.5.xml
+man/sg.1.xml
+man/su.1.xml
+man/suauth.5.xml
+man/useradd.8.xml
+man/userdel.8.xml
+man/usermod.8.xml
+man/vipw.8.xml
diff --git a/man/po/de.po b/man/po/de.po
new file mode 100644 (file)
index 0000000..417d504
--- /dev/null
@@ -0,0 +1,9695 @@
+# German translation of shadow-man-pages\r
+# Copyright (C) 2006 Free Software Foundation, Inc.\r
+# Simon Brandmair <sbrandmair@gmx.net>, 2005, 2006, 2007.\r
+# \r
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow-man-pages\n"
+"POT-Creation-Date: 2009-07-24 03:03+0200\n"
+"PO-Revision-Date: 2007-06-11 10:16+0200\n"
+"Last-Translator: Simon Brandmair <sbrandmair@gmx.net>\n"
+"Language-Team: debian-l10n-german <http://lists.debian.org/debian-l10n-"
+"german/>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: vipw.8.xml:38(refentrytitle) vipw.8.xml:43(refname) vipw.8.xml:52(command)
+msgid "vipw"
+msgstr "vipw"
+
+#: vipw.8.xml:39(manvolnum) usermod.8.xml:40(manvolnum)
+#: userdel.8.xml:42(manvolnum) userdel.8.xml:199(replaceable)
+#: useradd.8.xml:50(manvolnum) pwconv.8.xml:43(manvolnum)
+#: pwck.8.xml:41(manvolnum) nologin.8.xml:35(manvolnum)
+#: newusers.8.xml:51(manvolnum) logoutd.8.xml:35(manvolnum)
+#: lastlog.8.xml:36(manvolnum) grpck.8.xml:39(manvolnum)
+#: groupmod.8.xml:39(manvolnum) groupmems.8.xml:39(manvolnum)
+#: groupdel.8.xml:39(manvolnum) groupdel.8.xml:130(replaceable)
+#: groupadd.8.xml:43(manvolnum) faillog.8.xml:35(manvolnum)
+#: faillog.5.xml:86(manvolnum) chpasswd.8.xml:42(manvolnum)
+#: chgpasswd.8.xml:43(manvolnum)
+msgid "8"
+msgstr "8"
+
+#: vipw.8.xml:40(refmiscinfo) usermod.8.xml:41(refmiscinfo)
+#: userdel.8.xml:43(refmiscinfo) useradd.8.xml:51(refmiscinfo)
+#: pwconv.8.xml:44(refmiscinfo) pwck.8.xml:42(refmiscinfo)
+#: nologin.8.xml:36(refmiscinfo) newusers.8.xml:52(refmiscinfo)
+#: logoutd.8.xml:36(refmiscinfo) lastlog.8.xml:37(refmiscinfo)
+#: grpck.8.xml:40(refmiscinfo) groupmod.8.xml:40(refmiscinfo)
+#: groupmems.8.xml:40(refmiscinfo) groupdel.8.xml:40(refmiscinfo)
+#: groupadd.8.xml:44(refmiscinfo) faillog.8.xml:36(refmiscinfo)
+#: chpasswd.8.xml:43(refmiscinfo) chgpasswd.8.xml:44(refmiscinfo)
+msgid "System Management Commands"
+msgstr "Befehle zur Systemverwaltung"
+
+#: vipw.8.xml:44(refname) vipw.8.xml:58(command)
+msgid "vigr"
+msgstr "vigr"
+
+#: vipw.8.xml:45(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr ""
+"bearbeitet die Passwort-, Gruppen-, Shadow-Passwort- oder Shadow-Gruppen-"
+"Datei"
+
+#: vipw.8.xml:54(replaceable) vipw.8.xml:60(replaceable)
+#: usermod.8.xml:52(replaceable) userdel.8.xml:52(arg)
+#: useradd.8.xml:61(replaceable) useradd.8.xml:73(replaceable)
+#: su.1.xml:66(replaceable) passwd.1.xml:57(replaceable)
+#: newusers.8.xml:63(replaceable) lastlog.8.xml:48(replaceable)
+#: groupmod.8.xml:51(replaceable) groupadd.8.xml:55(replaceable)
+#: faillog.8.xml:47(replaceable) chsh.1.xml:53(replaceable)
+#: chpasswd.8.xml:54(replaceable) chgpasswd.8.xml:55(replaceable)
+#: chage.1.xml:46(replaceable)
+msgid "options"
+msgstr "Optionen"
+
+#: vipw.8.xml:66(title) usermod.8.xml:59(title) userdel.8.xml:60(title)
+#: useradd.8.xml:79(title) suauth.5.xml:50(title) su.1.xml:77(title)
+#: sg.1.xml:59(title) shadow.5.xml:44(title) shadow.3.xml:93(title)
+#: shadow.3.xml:149(title) pwconv.8.xml:70(title) pwck.8.xml:83(title)
+#: porttime.5.xml:44(title) passwd.5.xml:44(title) passwd.1.xml:66(title)
+#: nologin.8.xml:50(title) newusers.8.xml:70(title) newgrp.1.xml:55(title)
+#: logoutd.8.xml:50(title) login.defs.5.xml:107(title)
+#: login.access.5.xml:45(title) login.1.xml:103(title) limits.5.xml:46(title)
+#: lastlog.8.xml:54(title) gshadow.5.xml:43(title) grpck.8.xml:69(title)
+#: groups.1.xml:53(title) groupmod.8.xml:58(title) groupmems.8.xml:60(title)
+#: groupdel.8.xml:57(title) groupadd.8.xml:64(title) gpasswd.1.xml:72(title)
+#: faillog.8.xml:53(title) faillog.5.xml:44(title) expiry.1.xml:59(title)
+#: chsh.1.xml:62(title) chpasswd.8.xml:60(title) chgpasswd.8.xml:61(title)
+#: chfn.1.xml:63(title) chage.1.xml:55(title)
+msgid "DESCRIPTION"
+msgstr "BESCHREIBUNG"
+
+#: vipw.8.xml:67(para)
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Die Befehle <command>vipw</command> und <command>vigr</command> bearbeiten "
+"die Dateien <filename>/etc/passwd</filename> beziehungsweise <filename>/etc/"
+"group</filename>. Mit der Option <option>-s</option> bearbeiten sie die "
+"Shadow-Versionen beider Dateien, <filename>/etc/shadow</filename> und "
+"<filename>/etc/gshadow</filename>. Die Programme werden die notwendige "
+"Sperre einrichten, um eine Beschädigung der Dateien zu verhindern. Wenn ein "
+"Editor benötigt wird, werden zuerst die Umgebungsvariable <envar>$VISUAL</"
+"envar> ausgewertet, danach die Umgebungsvariable <envar>$EDITOR</envar>. "
+"Zuletzt wird der Standardeditor <citerefentry><refentrytitle>vi</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> verwendet."
+
+#: vipw.8.xml:84(title) usermod.8.xml:67(title) userdel.8.xml:69(title)
+#: useradd.8.xml:97(title) su.1.xml:123(title) pwck.8.xml:164(title)
+#: passwd.1.xml:152(title) newusers.8.xml:239(title) login.1.xml:188(title)
+#: lastlog.8.xml:66(title) grpck.8.xml:133(title) groupmod.8.xml:67(title)
+#: groupmems.8.xml:75(title) groupadd.8.xml:73(title) gpasswd.1.xml:112(title)
+#: faillog.8.xml:64(title) chsh.1.xml:73(title) chpasswd.8.xml:109(title)
+#: chgpasswd.8.xml:88(title) chage.1.xml:65(title)
+msgid "OPTIONS"
+msgstr "OPTIONEN"
+
+#: vipw.8.xml:85(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr ""
+"Die Optionen, die von den Befehlen <command>vipw</command> und "
+"<command>vigr</command> unterstützt werden, sind:"
+
+#: vipw.8.xml:91(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: vipw.8.xml:93(para)
+msgid "Edit group database."
+msgstr "Bearbeitet die Gruppen-Datenbank."
+
+#: vipw.8.xml:97(term) userdel.8.xml:99(term) useradd.8.xml:247(term)
+#: passwd.1.xml:192(term) newusers.8.xml:257(term) lastlog.8.xml:82(term)
+#: groupmod.8.xml:98(term) groupadd.8.xml:108(term) faillog.8.xml:80(term)
+#: chsh.1.xml:79(term) chpasswd.8.xml:137(term) chgpasswd.8.xml:114(term)
+#: chage.1.xml:103(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+#: vipw.8.xml:99(para) userdel.8.xml:101(para) useradd.8.xml:249(para)
+#: passwd.1.xml:194(para) newusers.8.xml:259(para) lastlog.8.xml:86(para)
+#: groupmod.8.xml:100(para) groupadd.8.xml:110(para) faillog.8.xml:82(para)
+#: chsh.1.xml:81(para) chpasswd.8.xml:139(para) chgpasswd.8.xml:116(para)
+#: chage.1.xml:105(para)
+msgid "Display help message and exit."
+msgstr "Zeigt die Hilfe an und beendet das Programm."
+
+#: vipw.8.xml:103(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#: vipw.8.xml:105(para)
+msgid "Edit passwd database."
+msgstr "Bearbeitet die Passwd-Datenbank."
+
+#: vipw.8.xml:109(term) passwd.1.xml:259(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:111(para) passwd.1.xml:263(para)
+msgid "Quiet mode."
+msgstr "Stiller Modus."
+
+#: vipw.8.xml:115(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: vipw.8.xml:117(para)
+msgid "Edit shadow or gshadow database."
+msgstr "Bearbeitet die Shadow- oder Gshadow-Datenbank."
+
+#: vipw.8.xml:124(title) usermod.8.xml:372(title) userdel.8.xml:140(title)
+#: useradd.8.xml:644(title) suauth.5.xml:168(title) su.1.xml:338(title)
+#: sg.1.xml:88(title) shadow.5.xml:230(title) shadow.3.xml:201(title)
+#: pwconv.8.xml:168(title) pwck.8.xml:227(title) porttime.5.xml:105(title)
+#: passwd.5.xml:116(title) passwd.1.xml:374(title) newusers.8.xml:357(title)
+#: newgrp.1.xml:99(title) logoutd.8.xml:64(title) login.access.5.xml:96(title)
+#: login.1.xml:316(title) limits.5.xml:140(title) lastlog.8.xml:147(title)
+#: gshadow.5.xml:141(title) grpck.8.xml:185(title) groups.1.xml:75(title)
+#: groupmod.8.xml:164(title) groupmems.8.xml:168(title)
+#: groupdel.8.xml:89(title) groupadd.8.xml:200(title) gpasswd.1.xml:233(title)
+#: faillog.8.xml:202(title) faillog.5.xml:71(title) expiry.1.xml:68(title)
+#: chsh.1.xml:133(title) chpasswd.8.xml:208(title) chgpasswd.8.xml:184(title)
+#: chfn.1.xml:113(title) chage.1.xml:206(title)
+msgid "FILES"
+msgstr "DATEIEN"
+
+#: vipw.8.xml:127(filename) usermod.8.xml:375(filename)
+#: userdel.8.xml:143(filename) useradd.8.xml:659(filename)
+#: sg.1.xml:103(filename) pwck.8.xml:230(filename)
+#: newusers.8.xml:372(filename) newgrp.1.xml:114(filename)
+#: gshadow.5.xml:144(filename) grpck.8.xml:188(filename)
+#: groups.1.xml:78(filename) groupmod.8.xml:167(filename)
+#: groupmems.8.xml:171(filename) groupdel.8.xml:92(filename)
+#: groupadd.8.xml:203(filename) gpasswd.1.xml:50(filename)
+#: gpasswd.1.xml:53(filename) gpasswd.1.xml:236(filename)
+#: chgpasswd.8.xml:187(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+#: vipw.8.xml:129(para) usermod.8.xml:377(para) userdel.8.xml:145(para)
+#: useradd.8.xml:661(para) sg.1.xml:105(para) pwck.8.xml:232(para)
+#: newusers.8.xml:374(para) newgrp.1.xml:116(para) gshadow.5.xml:146(para)
+#: grpck.8.xml:190(para) groups.1.xml:80(para) groupmod.8.xml:169(para)
+#: groupmems.8.xml:173(para) groupdel.8.xml:94(para) groupadd.8.xml:205(para)
+#: gpasswd.1.xml:238(para) chgpasswd.8.xml:189(para)
+msgid "Group account information."
+msgstr "Informationen zu den Gruppenkonten."
+
+#: vipw.8.xml:133(filename) usermod.8.xml:381(filename)
+#: useradd.8.xml:665(filename) sg.1.xml:109(filename)
+#: newusers.8.xml:378(filename) newgrp.1.xml:120(filename)
+#: gshadow.5.xml:150(filename) grpck.8.xml:194(filename)
+#: groupmod.8.xml:173(filename) groupmems.8.xml:177(filename)
+#: groupdel.8.xml:98(filename) groupadd.8.xml:209(filename)
+#: gpasswd.1.xml:54(filename) gpasswd.1.xml:242(filename)
+#: chgpasswd.8.xml:193(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+# type: Plain text\r
+#: vipw.8.xml:135(para) usermod.8.xml:383(para) useradd.8.xml:667(para)
+#: sg.1.xml:111(para) newusers.8.xml:380(para) newgrp.1.xml:122(para)
+#: gshadow.5.xml:152(para) grpck.8.xml:196(para) groupmod.8.xml:175(para)
+#: groupdel.8.xml:100(para) groupadd.8.xml:211(para) gpasswd.1.xml:244(para)
+#: chgpasswd.8.xml:195(para)
+msgid "Secure group account information."
+msgstr "Verschlüsselte Informationen zu den Gruppenkonten."
+
+#: vipw.8.xml:139(filename) usermod.8.xml:387(filename)
+#: userdel.8.xml:155(filename) useradd.8.xml:647(filename)
+#: su.1.xml:341(filename) sg.1.xml:91(filename) shadow.5.xml:233(filename)
+#: pwck.8.xml:236(filename) passwd.5.xml:119(filename)
+#: passwd.1.xml:377(filename) newusers.8.xml:360(filename)
+#: newgrp.1.xml:102(filename) login.1.xml:331(filename)
+#: grpck.8.xml:200(filename) expiry.1.xml:71(filename)
+#: chsh.1.xml:136(filename) chpasswd.8.xml:211(filename)
+#: chfn.1.xml:122(filename) chage.1.xml:210(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+#: vipw.8.xml:141(para) usermod.8.xml:389(para) userdel.8.xml:157(para)
+#: useradd.8.xml:649(para) su.1.xml:343(para) sg.1.xml:93(para)
+#: shadow.5.xml:235(para) pwck.8.xml:238(para) passwd.5.xml:121(para)
+#: passwd.1.xml:379(para) newusers.8.xml:362(para) newgrp.1.xml:104(para)
+#: login.1.xml:333(para) grpck.8.xml:202(para) expiry.1.xml:73(para)
+#: chsh.1.xml:138(para) chpasswd.8.xml:213(para) chfn.1.xml:124(para)
+#: chage.1.xml:213(para)
+msgid "User account information."
+msgstr "Informationen zu den Benutzerkonten."
+
+#: vipw.8.xml:145(filename) usermod.8.xml:393(filename)
+#: userdel.8.xml:161(filename) useradd.8.xml:653(filename)
+#: su.1.xml:347(filename) sg.1.xml:97(filename) shadow.5.xml:239(filename)
+#: shadow.3.xml:204(filename) pwck.8.xml:242(filename)
+#: passwd.5.xml:125(filename) passwd.1.xml:383(filename)
+#: newusers.8.xml:366(filename) newgrp.1.xml:108(filename)
+#: login.1.xml:337(filename) expiry.1.xml:77(filename)
+#: chpasswd.8.xml:217(filename) chage.1.xml:218(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+# type: Plain text\r
+#: vipw.8.xml:147(para) usermod.8.xml:395(para) userdel.8.xml:163(para)
+#: useradd.8.xml:655(para) su.1.xml:349(para) sg.1.xml:99(para)
+#: shadow.5.xml:241(para) shadow.3.xml:206(para) pwck.8.xml:244(para)
+#: passwd.1.xml:385(para) newusers.8.xml:368(para) newgrp.1.xml:110(para)
+#: login.1.xml:339(para) expiry.1.xml:79(para) chpasswd.8.xml:219(para)
+#: chage.1.xml:221(para)
+msgid "Secure user account information."
+msgstr "Verschlüsselte Informationen zu den Benutzerkonten."
+
+#: vipw.8.xml:154(title) usermod.8.xml:402(title) userdel.8.xml:248(title)
+#: useradd.8.xml:761(title) suauth.5.xml:197(title) su.1.xml:362(title)
+#: sg.1.xml:118(title) shadow.5.xml:258(title) shadow.3.xml:213(title)
+#: pwconv.8.xml:180(title) pwck.8.xml:302(title) porttime.5.xml:117(title)
+#: passwd.5.xml:144(title) passwd.1.xml:455(title) nologin.8.xml:64(title)
+#: newusers.8.xml:399(title) newgrp.1.xml:129(title)
+#: login.defs.5.xml:471(title) login.access.5.xml:108(title)
+#: login.1.xml:376(title) limits.5.xml:150(title) gshadow.5.xml:159(title)
+#: grpck.8.xml:254(title) groups.1.xml:87(title) groupmod.8.xml:233(title)
+#: groupmems.8.xml:186(title) groupdel.8.xml:146(title)
+#: groupadd.8.xml:291(title) gpasswd.1.xml:251(title) faillog.8.xml:214(title)
+#: faillog.5.xml:83(title) expiry.1.xml:86(title) chsh.1.xml:157(title)
+#: chpasswd.8.xml:238(title) chgpasswd.8.xml:208(title) chfn.1.xml:131(title)
+#: chage.1.xml:261(title)
+msgid "SEE ALSO"
+msgstr "SIEHE AUCH"
+
+#: vipw.8.xml:155(para)
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: usermod.8.xml:39(refentrytitle) usermod.8.xml:44(refname)
+#: usermod.8.xml:50(command) login.defs.5.xml:443(term)
+msgid "usermod"
+msgstr "usermod"
+
+#: usermod.8.xml:45(refpurpose)
+msgid "modify a user account"
+msgstr "verändert ein Benutzerkonto"
+
+#: usermod.8.xml:54(replaceable) userdel.8.xml:54(replaceable)
+#: useradd.8.xml:63(replaceable) passwd.1.xml:60(replaceable)
+#: chsh.1.xml:56(replaceable) chage.1.xml:49(replaceable)
+msgid "LOGIN"
+msgstr "LOGIN"
+
+#: usermod.8.xml:60(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"Der Befehl <command>usermod</command> verändert die Kontodateien des "
+"Systems, so dass sie die Änderungen enthalten, die in der Befehlszeile "
+"eingegeben wurden."
+
+#: usermod.8.xml:68(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>usermod</command> unterstützt werden, "
+"sind:"
+
+#: usermod.8.xml:74(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--append</option>"
+
+#: usermod.8.xml:78(para)
+#, fuzzy
+#| msgid ""
+#| "Add the user to the supplemental group(s). Use only with <option>-G</"
+#| "option> option."
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr ""
+"Fügt den Benutzer weiteren Gruppen hinzu. Kann nur zusammen mit der Option "
+"<option>-G</option> verwendet werden."
+
+#: usermod.8.xml:85(term) useradd.8.xml:125(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option><replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option><replaceable>KOMMENTAR</"
+"replaceable>"
+
+#: usermod.8.xml:90(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"Der neue Wert des Kommentarfelds in der Passwortdatei des Benutzers. Er wird "
+"normalerweise mit dem Werkzeug <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> verändert."
+
+#: usermod.8.xml:99(term) useradd.8.xml:138(term)
+msgid ""
+"<option>-d</option>, <option>--home</option><replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option><replaceable>HOME_VERZ</"
+"replaceable>"
+
+#: usermod.8.xml:104(para)
+#, fuzzy
+#| msgid "user home directory"
+msgid "The user's new login directory."
+msgstr "Home-Verzeichnis des Benutzers"
+
+#: usermod.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "The user's new login directory. If the <option>-m</option> option is "
+#| "given the contents of the current home directory will be moved to the new "
+#| "home directory, which is created if it does not already exist."
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+"Das neue Login-Verzeichnis des Benutzers. Wenn die Option <option>-m</"
+"option> verwendet wurde, wird der Inhalt des aktuellen Home-Verzeichnisses "
+"in das neue Home-Verzeichnis verschoben. Falls es nicht existiert, wird es "
+"angelegt."
+
+#: usermod.8.xml:116(term) useradd.8.xml:165(term) useradd.8.xml:518(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</"
+"replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</"
+"option><replaceable>VERFALLS_DATUM</replaceable>"
+
+#: usermod.8.xml:121(para) useradd.8.xml:170(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+"Das Datum, an welchem das Benutzerkonto deaktiviert wird. Das Datum muss im "
+"Format <emphasis remap=\"I\">JJJJ-MM-TT</emphasis> angegeben werden."
+
+#: usermod.8.xml:128(term) useradd.8.xml:183(term) useradd.8.xml:531(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option><replaceable>INAKTIV</"
+"replaceable>"
+
+#: usermod.8.xml:133(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password has expired before the account will "
+#| "be disabled."
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+"Die Anzahl von Tagen, für die ein Passwort abgelaufen ist, bis das Konto "
+"deaktiviert wird."
+
+#: usermod.8.xml:137(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password expires until the account is "
+#| "permanently disabled. A value of 0 disables the account as soon as the "
+#| "password has expired, and a value of -1 disables the feature. The default "
+#| "value is -1."
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+"Die Anzahl von Tagen, für die ein Passwort abgelaufen ist, bis das Konto "
+"dauerhaft deaktiviert wird. Ein Wert von 0 deaktiviert das Konto, sobald das "
+"Passwort abläuft. Ein Wert von -1 schaltet diese Funktion ab. Der "
+"Standardwert ist -1."
+
+#: usermod.8.xml:145(term) useradd.8.xml:203(term) useradd.8.xml:547(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option><replaceable>GROUP</replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>GRUPPE</replaceable>"
+
+#: usermod.8.xml:150(para)
+#, fuzzy
+#| msgid ""
+#| "The group name or number of the user's new initial login group. The group "
+#| "name must exist. A group number must refer to an already existing group. "
+#| "The default group number is 1."
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+"Der Name oder die Zahl der anfänglichen Login-Gruppe eines neuen Benutzers. "
+"Der Gruppenname muss existieren. Die Gruppenzahl muss auf eine bereits "
+"bestehende Gruppe verweisen. Die Standardgruppennummer ist 1."
+
+#: usermod.8.xml:157(term) useradd.8.xml:231(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option><replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+"<option>-G</option>, <option>--groups</option><replaceable>GRUPPE1</"
+"replaceable>[<emphasis remap=\"I\">,GRUPPE2,...</emphasis>[<emphasis remap="
+"\"I\">,GROUPN</emphasis>]]]"
+
+#: usermod.8.xml:162(para)
+#, fuzzy
+#| msgid ""
+#| "A list of supplementary groups which the user is also a member of. Each "
+#| "group is separated from the next by a comma, with no intervening "
+#| "whitespace. The groups are subject to the same restrictions as the group "
+#| "given with the <option>-g</option> option. The default is for the user to "
+#| "belong only to the initial group."
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+"Eine Liste der zusätzlichen Gruppen, denen der Benutzer ebenfalls angehört. "
+"Die Gruppen sind durch Kommata ohne Leerzeichen von einander zu trennen. Die "
+"Gruppen unterliegen denselben Beschränkungen wie die Gruppe, die mit der "
+"Option <option>-g</option> bestimmt wurde. Standardmäßig ist der Benutzer "
+"nur Mitglied der Ausgangsgruppe."
+
+#: usermod.8.xml:169(para)
+#, fuzzy
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+"Eine Liste von Gruppen, denen der Benutzer zusätzlich angehört. Die Gruppen "
+"sind durch Kommata ohne Leerzeichen von einander zu trennen. Die Gruppen "
+"unterliegen denselben Beschränkungen wie die Gruppe, die mit der Option "
+"<option>-g</option> bestimmt wurde. Wenn der Benutzer ein Mitglied einer "
+"Gruppe ist, die nicht aufgeführt wurde, wird der Benutzer aus dieser Gruppe "
+"entfernt. Dieses Verhalten kann mit der Option <option>-a</option> "
+"abgeschaltet werden. Damit wird der Benutzer nur den angegebenen Gruppen "
+"hinzugefügt, ohne aus den übrigen gelöscht zu werden."
+
+#: usermod.8.xml:178(term)
+msgid ""
+"<option>-l</option>, <option>--login</option><replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--login</option><replaceable>NEUER_LOGIN</"
+"replaceable>"
+
+#: usermod.8.xml:183(para)
+#, fuzzy
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory name should probably be changed "
+"manually to reflect the new login name."
+msgstr ""
+"Der Benutzername wird von <emphasis remap=\"I\">LOGIN</emphasis> zu "
+"<emphasis remap=\"I\">NEUER_LOGIN</emphasis> verändert. Andere Veränderungen "
+"werden nicht vorgenommen. Daher sollte wahrscheinlich der Name des Home-"
+"Verzeichnisses des Benutzers geändert werden, um dem neuen Login-Namen "
+"Rechnung zu tragen."
+
+#: usermod.8.xml:193(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: usermod.8.xml:197(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+"Sperrt das Passwort eines Benutzers. Dadurch wird ein '!' vor das "
+"verschlüsselte Passwort gesetzt, wodurch im Ergebnis das Passwort "
+"abgeschaltet wird. Sie können diese Option nicht mit <option>-p</option> "
+"oder <option>-U</option> verwenden."
+
+#: usermod.8.xml:203(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+
+#: usermod.8.xml:212(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:216(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+
+#: usermod.8.xml:220(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:227(term) useradd.8.xml:366(term) groupmod.8.xml:116(term)
+#: groupadd.8.xml:135(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+# SB: What is that suppossed to mean? I can assign the UID 1000 twice?\r
+#: usermod.8.xml:231(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+"Wenn es mit der Option <option>-u</option> verwendet wird, kann mit dieser "
+"Option der Wert der Benutzer-ID auf einen nicht eindeutigen Wert gesetzt "
+"werden."
+
+#: usermod.8.xml:238(term) useradd.8.xml:378(term) groupmod.8.xml:127(term)
+#: groupadd.8.xml:145(term)
+msgid ""
+"<option>-p</option>, <option>--password</option><replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+"<option>-p</option>, <option>--password</option><replaceable>PASSWORT</"
+"replaceable>"
+
+#: usermod.8.xml:243(para) groupmod.8.xml:132(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+"Das verschlüsselte Passwort, wie es von <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> zurückgegeben wird."
+
+#: usermod.8.xml:248(para) useradd.8.xml:388(para) groupmod.8.xml:137(para)
+#: groupadd.8.xml:155(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+
+#: usermod.8.xml:253(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+
+#: usermod.8.xml:259(para) useradd.8.xml:393(para) groupmod.8.xml:142(para)
+#: groupadd.8.xml:160(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+
+#: usermod.8.xml:266(term) useradd.8.xml:427(term) useradd.8.xml:568(term)
+#: su.1.xml:157(term) chsh.1.xml:85(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+
+#: usermod.8.xml:271(para) chsh.1.xml:89(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+"Der Name der neuen Login-Shell des Benutzers. Falls dieses Feld leer "
+"gelassen wird, verwendet das System die Standard-Login-Shell."
+
+#: usermod.8.xml:278(term) useradd.8.xml:442(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#: usermod.8.xml:283(para)
+msgid "The new numerical value of the user's ID."
+msgstr ""
+
+#: usermod.8.xml:286(para)
+#, fuzzy
+#| msgid ""
+#| "The numerical value of the user's ID. This value must be unique, unless "
+#| "the <option>-o</option> option is used. The value must be non-negative. "
+#| "The default is to use the smallest ID value greater than 999 and greater "
+#| "than every other user. Values between 0 and 999 are typically reserved "
+#| "for system accounts."
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative. Values between 0 and 999 are typically "
+"reserved for system accounts."
+msgstr ""
+"Der zahlenmäßige Wert der Benutzer-ID. Dieser Wert muss eindeutig sein, "
+"sofern nicht die Option <option>-o</option> verwendet wird. Der Wert darf "
+"nicht negativ sein. Standardmäßig wird der kleinste Wert größer als 999 und "
+"größer als jeder andere Wert eines Benutzers verwendet. Typischerweise sind "
+"Werte zwischen 0 und 999 für Systemkonten reserviert."
+
+#: usermod.8.xml:292(para)
+#, fuzzy
+#| msgid ""
+#| "The numerical value of the user's ID. This value must be unique, unless "
+#| "the <option>-o</option> option is used. The value must be non-negative. "
+#| "Values between 0 and 999 are typically reserved for system accounts. Any "
+#| "files which the user owns and which are located in the directory tree "
+#| "rooted at the user's home directory will have the file user ID changed "
+#| "automatically. Files outside of the user's home directory must be altered "
+#| "manually."
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+"Der zahlenmäßige Wert der Benutzer-ID. Dieser Wert muss eindeutig sein, "
+"sofern nicht die Option <option>-o</option> verwendet wird. Der Wert darf "
+"nicht negativ sein. Typischerweise sind Werte zwischen 0 und 999 für "
+"Systemkonten reserviert. Bei alle Dateien, die dem Benutzer gehören und die "
+"sich unterhalb dessen Home-Verzeichnisses befinden, wird automatisch die "
+"Benutzer-ID geändert. Dateien, die sich außerhalb des Home-Verzeichnisses "
+"befinden, müssen von Hand geändert werden."
+
+#: usermod.8.xml:297(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+
+#: usermod.8.xml:304(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+#: usermod.8.xml:308(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+"Gibt eine Benutzerkonto frei. Dies entfernt das '!' vor dem Passwort. Sie "
+"können diese Option nicht mit <option>-p</option> oder <option>-U</option> "
+"verwenden."
+
+#: usermod.8.xml:313(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+
+#: usermod.8.xml:324(term) useradd.8.xml:474(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-s</option>, <option>--shell</option><replaceable>SHELL</"
+#| "replaceable>"
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option><replaceable>SEUSER</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+
+#: usermod.8.xml:329(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's new login shell. Setting this field to blank "
+#| "causes the system to select the default login shell."
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"the blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Der Name der neuen Login-Shell des Benutzers. Falls dieses Feld leer "
+"gelassen wird, verwendet das System die Standard-Login-Shell."
+
+#: usermod.8.xml:340(title) userdel.8.xml:221(title) useradd.8.xml:597(title)
+#: su.1.xml:302(title) shadow.3.xml:193(title) passwd.1.xml:338(title)
+#: newusers.8.xml:312(title) login.1.xml:238(title) lastlog.8.xml:159(title)
+#: groupdel.8.xml:65(title) groupadd.8.xml:224(title) gpasswd.1.xml:206(title)
+#: faillog.8.xml:191(title) chpasswd.8.xml:182(title)
+#: chgpasswd.8.xml:157(title)
+msgid "CAVEATS"
+msgstr "WARNUNGEN"
+
+#: usermod.8.xml:341(para)
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux, but only check if the user "
+"is logged in according to utmp on other architectures."
+msgstr ""
+
+#: usermod.8.xml:349(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+
+#: usermod.8.xml:353(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+
+#: usermod.8.xml:359(title) userdel.8.xml:125(title) useradd.8.xml:621(title)
+#: su.1.xml:310(title) sg.1.xml:76(title) pwconv.8.xml:146(title)
+#: pwck.8.xml:213(title) passwd.1.xml:356(title) newusers.8.xml:324(title)
+#: newgrp.1.xml:87(title) login.1.xml:272(title) grpck.8.xml:173(title)
+#: groupmod.8.xml:152(title) groupmems.8.xml:156(title)
+#: groupdel.8.xml:77(title) groupadd.8.xml:186(title) gpasswd.1.xml:218(title)
+#: chsh.1.xml:120(title) chpasswd.8.xml:194(title) chgpasswd.8.xml:169(title)
+#: chfn.1.xml:99(title)
+msgid "CONFIGURATION"
+msgstr ""
+
+#: usermod.8.xml:360(para) userdel.8.xml:126(para) useradd.8.xml:622(para)
+#: su.1.xml:311(para) sg.1.xml:77(para) pwck.8.xml:214(para)
+#: passwd.1.xml:357(para) newusers.8.xml:325(para) newgrp.1.xml:88(para)
+#: login.1.xml:273(para) grpck.8.xml:174(para) groupmod.8.xml:153(para)
+#: groupmems.8.xml:157(para) groupdel.8.xml:78(para) groupadd.8.xml:187(para)
+#: gpasswd.1.xml:219(para) chsh.1.xml:121(para) chpasswd.8.xml:195(para)
+#: chgpasswd.8.xml:170(para) chfn.1.xml:100(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "MAIL_DIR (Zeichenkette)"
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+"Das Verzeichnis des Mail-Spools. Diese Angabe wird benötigt, um die Mailbox "
+"zu bearbeiten, nachdem das entsprechende Benutzerkonto verändert oder "
+"gelöscht wurde. Falls nicht angegeben, wird ein Standard verwendet, der beim "
+"Kompilieren festgelegt wurde."
+
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+#, fuzzy
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "MAIL_DIR (Zeichenkette)"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+#, fuzzy
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+"Falls <option>--preserve-environment</option> verwendet wird, die Shell, die "
+"durch die Umgebungsvariable <envar>$SHELL</envar> festgelegt wird."
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+
+#. Note: on HP, split groups have the same ID, but different
+#.                names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr ""
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+
+#: usermod.8.xml:403(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: userdel.8.xml:41(refentrytitle) userdel.8.xml:46(refname)
+#: userdel.8.xml:51(command) login.defs.5.xml:434(term)
+msgid "userdel"
+msgstr "userdel"
+
+#: userdel.8.xml:47(refpurpose)
+msgid "delete a user account and related files"
+msgstr "löscht ein Benutzerkonto und die dazugehörigen Dateien"
+
+# SB: Replace "login_name"?\r
+#: userdel.8.xml:61(para)
+#, fuzzy
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"Der Befehl <command>userdel</command> bearbeitet die Kontodateien des "
+"Systems und löscht darin alle Einträge, die auf den <emphasis remap=\"I"
+"\">login_name</emphasis> verweisen. Der bezeichnete Benutzer muss existieren."
+
+#: userdel.8.xml:70(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>userdel</command> unterstützt werden, "
+"sind:"
+
+#: userdel.8.xml:75(term) groupadd.8.xml:80(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option"
+
+# SB: Übersetzung von 'mail spool'?\r
+#: userdel.8.xml:79(para)
+#, fuzzy
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+"Diese Option erzwingt, dass der Benutzer entfernt wird, selbst wenn er noch "
+"angemeldet ist. Sie führt auch dazu, dass <command>userdel</command> das "
+"Home-Verzeichnis und die Maildatei des Benutzers entfernt, sogar wenn ein "
+"anderer Benutzer dasselbe Home-Verzeichnis hat oder die Maildatei nicht dem "
+"angegebenen Benutzer gehört. Falls in <filename>/etc/login.defs</filename> "
+"<emphasis>USERGROUPS_ENAB</emphasis> auf <emphasis remap=\"I\">yes</"
+"emphasis> gesetzt ist und eine Gruppe mit dem gleichen Namen wie der "
+"gelöschte Benutzer vorhanden ist, wird auch diese Gruppe entfernt, selbst "
+"wenn sie die Hauptgruppe anderer Benutzer ist."
+
+#: userdel.8.xml:92(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+"<emphasis>Hinweis:</emphasis> Diese Option ist gefährlich und kann dazu "
+"führen, dass Ihr System nicht mehr ordnungsgemäß funktioniert."
+
+#: userdel.8.xml:105(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+# # SB: Übersetzung von 'mail spool'?\r
+#: userdel.8.xml:109(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+"Die Dateien im Home-Verzeichnis des Benutzers werden zusammen mit dem Home-"
+"Verzeichnis selbst und der Maildatei entfernt. Dateien, die sich nicht "
+"unterhalb des Home-Verzeichnisses befinden, müssen per Hand aufgespürt und "
+"gelöscht werden."
+
+#: userdel.8.xml:115(para)
+#, fuzzy
+#| msgid ""
+#| "The mail spool is defined by the <emphasis>MAIL_DIR</emphasis> variable "
+#| "in the <filename>login.defs</filename> file."
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+"Die Maildatei wird durch die Variable <emphasis>MAIL_DIR</emphasis> in der "
+"Datei <filename>login.defs</filename> definiert."
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr "USERDEL_CMD (Zeichenkette)"
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+"Falls angegeben, wird dieser Befehl ausgeführt, wenn ein Benutzer entfernt "
+"wird. Damit können At-, Cron- und Druckaufträge des entfernten Benutzers "
+"(wird als erstes Argument angegeben) gelöscht werden."
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr ""
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+"      "
+msgstr ""
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+
+#: userdel.8.xml:149(filename) useradd.8.xml:683(filename)
+#: su.1.xml:353(filename) pwconv.8.xml:171(filename)
+#: passwd.1.xml:389(filename) newusers.8.xml:384(filename)
+#: login.access.5.xml:99(filename) login.1.xml:367(filename)
+#: groupadd.8.xml:215(filename) chsh.1.xml:148(filename)
+#: chpasswd.8.xml:223(filename) chgpasswd.8.xml:199(filename)
+#: chfn.1.xml:116(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+# SB: Translation for "shadow password suite"?\r
+#: userdel.8.xml:151(para) useradd.8.xml:685(para) su.1.xml:355(para)
+#: pwconv.8.xml:173(para) passwd.1.xml:391(para) newusers.8.xml:386(para)
+#: login.access.5.xml:101(para) login.1.xml:369(para) groupadd.8.xml:217(para)
+#: chsh.1.xml:150(para) chpasswd.8.xml:225(para) chgpasswd.8.xml:201(para)
+#: chfn.1.xml:118(para)
+msgid "Shadow password suite configuration."
+msgstr "Konfiguration des Shadow-Passwort-Systems"
+
+#: userdel.8.xml:170(title) useradd.8.xml:692(title) pwck.8.xml:251(title)
+#: passwd.1.xml:404(title) grpck.8.xml:209(title) groupmod.8.xml:182(title)
+#: groupdel.8.xml:107(title) groupadd.8.xml:246(title) chage.1.xml:228(title)
+msgid "EXIT VALUES"
+msgstr "RÜCKGABEWERTE"
+
+#: userdel.8.xml:175(replaceable) useradd.8.xml:697(replaceable)
+#: pwck.8.xml:256(replaceable) passwd.1.xml:409(replaceable)
+#: grpck.8.xml:214(replaceable) groupmod.8.xml:187(replaceable)
+#: groupdel.8.xml:112(replaceable) groupadd.8.xml:251(replaceable)
+#: chage.1.xml:233(replaceable)
+msgid "0"
+msgstr "0"
+
+#: userdel.8.xml:177(para) useradd.8.xml:699(para) pwck.8.xml:258(para)
+#: passwd.1.xml:411(para) grpck.8.xml:216(para) groupmod.8.xml:189(para)
+#: groupdel.8.xml:114(para) groupadd.8.xml:253(para) chage.1.xml:235(para)
+msgid "success"
+msgstr "Erfolg"
+
+#: userdel.8.xml:181(replaceable) useradd.8.xml:703(replaceable)
+#: su.1.xml:55(manvolnum) sg.1.xml:39(manvolnum) pwck.8.xml:262(replaceable)
+#: passwd.1.xml:45(manvolnum) passwd.1.xml:415(replaceable)
+#: newgrp.1.xml:39(manvolnum) login.1.xml:71(manvolnum)
+#: grpck.8.xml:220(replaceable) groups.1.xml:35(manvolnum)
+#: gpasswd.1.xml:43(manvolnum) expiry.1.xml:42(manvolnum)
+#: chsh.1.xml:41(manvolnum) chfn.1.xml:42(manvolnum) chage.1.xml:35(manvolnum)
+#: chage.1.xml:239(replaceable)
+msgid "1"
+msgstr "1"
+
+#: userdel.8.xml:183(para) useradd.8.xml:705(para)
+msgid "can't update password file"
+msgstr "kann die Passwortdatei nicht aktualisieren"
+
+#: userdel.8.xml:187(replaceable) useradd.8.xml:709(replaceable)
+#: pwck.8.xml:268(replaceable) passwd.1.xml:421(replaceable)
+#: grpck.8.xml:226(replaceable) groupmod.8.xml:193(replaceable)
+#: groupdel.8.xml:118(replaceable) groupadd.8.xml:257(replaceable)
+#: chage.1.xml:245(replaceable)
+msgid "2"
+msgstr "2"
+
+#: userdel.8.xml:189(para) useradd.8.xml:711(para) pwck.8.xml:264(para)
+#: grpck.8.xml:222(para) groupmod.8.xml:195(para) groupdel.8.xml:120(para)
+#: groupadd.8.xml:259(para) chage.1.xml:247(para)
+msgid "invalid command syntax"
+msgstr "unzulässige Syntax für diesen Befehl"
+
+#: userdel.8.xml:193(replaceable) useradd.8.xml:727(replaceable)
+#: pwck.8.xml:292(replaceable) passwd.1.xml:445(replaceable)
+#: groupmod.8.xml:211(replaceable) groupdel.8.xml:124(replaceable)
+msgid "6"
+msgstr "6"
+
+#: userdel.8.xml:195(para)
+msgid "specified user doesn't exist"
+msgstr "angegebener Benutzer ist nicht vorhanden"
+
+#: userdel.8.xml:201(para)
+msgid "user currently logged in"
+msgstr "Benutzer ist im Moment angemeldet"
+
+#: userdel.8.xml:205(replaceable) useradd.8.xml:739(replaceable)
+#: groupmod.8.xml:223(replaceable) groupdel.8.xml:136(replaceable)
+#: groupadd.8.xml:281(replaceable)
+msgid "10"
+msgstr "10"
+
+#: userdel.8.xml:207(para) useradd.8.xml:741(para) groupmod.8.xml:225(para)
+#: groupdel.8.xml:138(para) groupadd.8.xml:283(para)
+msgid "can't update group file"
+msgstr "kann Gruppendatei nicht aktualisieren"
+
+#: userdel.8.xml:211(replaceable) useradd.8.xml:745(replaceable)
+msgid "12"
+msgstr "12"
+
+#: userdel.8.xml:213(para)
+msgid "can't remove home directory"
+msgstr "kann das Home-Verzeichnis nicht löschen"
+
+#: userdel.8.xml:171(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>userdel</command> gibt beim Beenden folgende Werte "
+"zurück: <placeholder-1/>"
+
+#: userdel.8.xml:222(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+
+#: userdel.8.xml:229(para)
+#, fuzzy
+#| msgid ""
+#| "You must manually check all file systems to insure that no files remain "
+#| "with the named group as the file group ID."
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+"Sie sollten von Hand alle Systemdateien überprüfen, um sicherzustellen, dass "
+"keine Dateien, die der gelöschten Gruppe angehören, vorhanden sind."
+
+#: userdel.8.xml:233(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+"Sie sollten keine NIS-Attribute auf einem NIS-Client löschen. Dies muss auf "
+"dem NIS-Server durchgeführt werden."
+
+#: userdel.8.xml:236(para)
+#, fuzzy
+#| msgid ""
+#| "If <emphasis>USERGROUPS_ENAB</emphasis> is defined to <emphasis remap=\"I"
+#| "\">yes</emphasis> in <filename>/etc/login.defs</filename>, "
+#| "<command>userdel</command> will delete the group with the same name as "
+#| "the user. To avoid inconsistencies in the passwd and group databases, "
+#| "<command>userdel</command> will check that this group is not used as a "
+#| "primary group for another user, and will just warn without deleting the "
+#| "user otherwise. The <option>-f</option> option can force the deletion of "
+#| "this group."
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+"Falls in <filename>/etc/login.defs</filename> <emphasis>USERGROUPS_ENAB</"
+"emphasis> auf <emphasis remap=\"I\">yes</emphasis> gesetzt ist, wird "
+"<command>userdel</command> die Gruppe mit dem gleichen Namen wie der "
+"Benutzer entfernen. Um Unstimmigkeiten in der Passwort- und Gruppendatenbank "
+"zu vermeiden, überprüft <command>userdel</command>, ob diese Gruppe eine "
+"Hauptgruppe für andere Benutzer ist. Gegebenenfalls wird eine Warnung "
+"angezeigt und der betreffende Benutzer nicht entfernt. Mit der Option "
+"<option>-f</option> kann das Löschen dieser Gruppe erzwungen werden."
+
+#: userdel.8.xml:249(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: useradd.8.xml:49(refentrytitle) useradd.8.xml:54(refname)
+#: useradd.8.xml:59(command) useradd.8.xml:66(command)
+#: useradd.8.xml:70(command) login.defs.5.xml:421(term)
+msgid "useradd"
+msgstr "useradd"
+
+#: useradd.8.xml:55(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+"erstellt einen neuen Benutzer oder aktualisiert die Standardwerte für neue "
+"Benutzer"
+
+#: useradd.8.xml:67(arg) useradd.8.xml:71(arg)
+msgid "-D"
+msgstr "-D"
+
+#: useradd.8.xml:80(para)
+#, fuzzy
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+"Wenn der Befehl <command>useradd</command> ohne die Option <option>-D</"
+"option> aufgerufen wird, wird ein neues Benutzerkonto mit den Werten "
+"erstellt, die auf der Befehlszeile angegeben wurden, und den Standardwerten "
+"des Systems. Je nach den Optionen auf der Befehlszeile aktualisiert der "
+"Befehl useradd Systemdateien, erstellt ein Home-Verzeichnis für den neuen "
+"Benutzer und kopiert Dateien."
+
+#: useradd.8.xml:89(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+
+#: useradd.8.xml:98(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>useradd</command> unterstützt werden, "
+"sind:"
+
+#: useradd.8.xml:102(term) useradd.8.xml:499(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option><replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--base-dir</option><replaceable>WURZEL_VERZ</"
+"replaceable>"
+
+#: useradd.8.xml:107(para)
+#, fuzzy
+msgid ""
+"The default base directory for the system if <option>-d</"
+"option><replaceable>HOME_DIR</replaceable> is not specified. "
+"<replaceable>BASE_DIR</replaceable> is concatenated with the account name to "
+"define the home directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+"Das standardmäßige Wurzelverzeichnis des Systems, wenn nicht eines mit "
+"<option>-d</option> festgelegt wurde. Der Name des Home-Verzeichnisses "
+"besteht aus der Verbindung von <replaceable>WURZEL_VERZ</replaceable> und "
+"dem Kontonamen. Wenn die Option <option>-m</option> nicht verwendet wird, "
+"muss <replaceable>WURZEL_VERZ</replaceable> existieren."
+
+#: useradd.8.xml:115(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+
+#: useradd.8.xml:130(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+"Eine beliebige Zeichenkette. Dies ist für gewöhnlich eine kurze Beschreibung "
+"des Logins und wird im Moment im Feld für den vollen Namen des Benutzers "
+"gespeichert."
+
+#: useradd.8.xml:143(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+"Beim Anlegen des neuen Benutzers wird <replaceable>HOME_VERZ</replaceable> "
+"als das Login-Verzeichnis des Benutzers verwendet. Um den Namen des Login-"
+"Verzeichnisses zu erhalten, wird standardmäßig der <replaceable>LOGIN</"
+"replaceable>-Name an <replaceable>WURZEL_VERZ</replaceable> angehängt. Das "
+"Verzeichnis <replaceable>HOME_VERZ</replaceable> muss nicht vorhanden sein, "
+"sondern wird gegebenenfalls angelegt."
+
+#: useradd.8.xml:155(term)
+#, fuzzy
+#| msgid "<option>-d</option>, <option>--delete</option>"
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: useradd.8.xml:159(para)
+#, fuzzy
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr "Die Standardwerte verändern"
+
+#: useradd.8.xml:174(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+
+#: useradd.8.xml:188(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password expires until the account is "
+#| "permanently disabled. A value of 0 disables the account as soon as the "
+#| "password has expired, and a value of -1 disables the feature. The default "
+#| "value is -1."
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+"Die Anzahl von Tagen, für die ein Passwort abgelaufen ist, bis das Konto "
+"dauerhaft deaktiviert wird. Ein Wert von 0 deaktiviert das Konto, sobald das "
+"Passwort abläuft. Ein Wert von -1 schaltet diese Funktion ab. Der "
+"Standardwert ist -1."
+
+#: useradd.8.xml:194(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's login shell. The default is to leave this field "
+#| "blank, which causes the system to select the default login shell."
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+"Der Name der Login-Shell des Benutzers. Standardmäßig wird dieses Feld leer "
+"gelassen, das System verwendet dann die Standard-Login-Shell."
+
+#: useradd.8.xml:208(para)
+#, fuzzy
+#| msgid ""
+#| "The group name or number of the user's new initial login group. The group "
+#| "name must exist. A group number must refer to an already existing group. "
+#| "The default group number is 1."
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+"Der Name oder die Zahl der anfänglichen Login-Gruppe eines neuen Benutzers. "
+"Der Gruppenname muss existieren. Die Gruppenzahl muss auf eine bereits "
+"bestehende Gruppe verweisen. Die Standardgruppennummer ist 1."
+
+#: useradd.8.xml:213(para)
+msgid ""
+"If not specified, the bahavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+
+#: useradd.8.xml:236(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+"Eine Liste der zusätzlichen Gruppen, denen der Benutzer ebenfalls angehört. "
+"Die Gruppen sind durch Kommata ohne Leerzeichen von einander zu trennen. Die "
+"Gruppen unterliegen denselben Beschränkungen wie die Gruppe, die mit der "
+"Option <option>-g</option> bestimmt wurde. Standardmäßig ist der Benutzer "
+"nur Mitglied der Ausgangsgruppe."
+
+#: useradd.8.xml:253(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-s</option>, <option>--shell</option><replaceable>SHELL</"
+#| "replaceable>"
+msgid ""
+"<option>-k</option>, <option>--skel</option><replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+
+#: useradd.8.xml:258(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+
+#: useradd.8.xml:263(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:267(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+
+#: useradd.8.xml:276(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-K</option>, <option>--key</option><replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option><replaceable>SCHLÜSSEL</"
+"replaceable>=<replaceable>WERT</replaceable>"
+
+#: useradd.8.xml:281(para)
+#, fuzzy
+#| msgid ""
+#| "Overrides /etc/login.defs defaults (UID_MIN, UID_MAX, UMASK, "
+#| "PASS_MAX_DAYS and others). <placeholder-1/> Example: <option>-K </"
+#| "option><replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</"
+#| "replaceable> can be used when creating system account to turn off "
+#| "password ageing, even though system account has no password at all. "
+#| "Multiple <option>-K</option> options can be specified, e.g.: <option>-K </"
+#| "option><replaceable>UID_MIN</replaceable>=<replaceable>100</"
+#| "replaceable><option> -K </option><replaceable>UID_MAX</"
+#| "replaceable>=<replaceable>499</replaceable>"
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K </option><replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-"
+"1</replaceable> can be used when creating system account to turn off "
+"password ageing, even though system account has no password at all. Multiple "
+"<option>-K</option> options can be specified, e.g.: <option>-K </"
+"option><replaceable>UID_MIN</replaceable>=<replaceable>100</"
+"replaceable><option>-K </option><replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Überschreibt die Standardwerte aus /etc/login.defs (UID_MIN, UID_MAX, UMASK, "
+"PASS_MAX_DAYS und andere). <placeholder-1/> Beispiel: <option>-K </"
+"option><replaceable>PASS_MAX_TAGE</replaceable>=<replaceable>-1</"
+"replaceable> kann eingesetzt werden, wenn ein Systemkonto erstellt wird, um "
+"den Verfall des Passworts abzuschalten, selbst wenn das Systemkonto "
+"überhaupt kein Passwort besitzt. Die Option <option>-K</option> kann "
+"mehrmals verwendet werden, z.B.: <option>-K </option><replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable><option> -K </"
+"option><replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: useradd.8.xml:297(para)
+msgid ""
+"Note: <option>-K </option><replaceable>UID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Hinweis: <option>-K </option><replaceable>UID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable> funktioniert noch nicht."
+
+#: useradd.8.xml:305(term)
+#, fuzzy
+#| msgid "<option>-l</option>, <option>--list</option>"
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: useradd.8.xml:307(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr ""
+
+#: useradd.8.xml:310(para)
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"resetted to avoid reusing the entry from a previously deleted user."
+msgstr ""
+
+#: useradd.8.xml:318(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:322(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+
+#: useradd.8.xml:328(para)
+msgid "By default, no home directories are created."
+msgstr ""
+
+#: useradd.8.xml:335(option)
+#, fuzzy
+#| msgid "-"
+msgid "-M"
+msgstr "-"
+
+#: useradd.8.xml:338(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+
+#: useradd.8.xml:347(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:357(para) useradd.8.xml:465(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: useradd.8.xml:370(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr ""
+"Erlaubt das Erstellen eines Benutzerkontos mit einer schon vergebenen (nicht "
+"eindeutigen) UID."
+
+#: useradd.8.xml:371(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-o</option> option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:383(para) groupadd.8.xml:150(para)
+#, fuzzy
+#| msgid ""
+#| "The encrypted password, as returned by "
+#| "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#| "manvolnum></citerefentry>. The default is to disable the account."
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"Das verschlüsselte Passwort, wie des von <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> zurückgegeben wird. "
+"Standardmäßig ist das Konto abgeschaltet."
+
+#: useradd.8.xml:400(term) newusers.8.xml:263(term) groupadd.8.xml:167(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: useradd.8.xml:404(para) newusers.8.xml:267(para)
+msgid "Create a system account."
+msgstr ""
+
+#: useradd.8.xml:407(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are choosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: useradd.8.xml:416(para)
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such an user, regardless of the default setting in <filename>/etc/login."
+"defs</filename> (<option>CREATE_HOME</option>). You have to specify the "
+"<option>-m</option> options if you want a home directory for a system "
+"account to be created."
+msgstr ""
+
+#: useradd.8.xml:432(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's login shell. The default is to leave this field "
+#| "blank, which causes the system to select the default login shell."
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+"Der Name der Login-Shell des Benutzers. Standardmäßig wird dieses Feld leer "
+"gelassen, das System verwendet dann die Standard-Login-Shell."
+
+#: useradd.8.xml:447(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than 999 and greater than "
+"every other user. Values between 0 and 999 are typically reserved for system "
+"accounts."
+msgstr ""
+"Der zahlenmäßige Wert der Benutzer-ID. Dieser Wert muss eindeutig sein, "
+"sofern nicht die Option <option>-o</option> verwendet wird. Der Wert darf "
+"nicht negativ sein. Standardmäßig wird der kleinste Wert größer als 999 und "
+"größer als jeder andere Wert eines Benutzers verwendet. Typischerweise sind "
+"Werte zwischen 0 und 999 für Systemkonten reserviert."
+
+#: useradd.8.xml:457(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:461(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+
+#: useradd.8.xml:479(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's new login shell. Setting this field to blank "
+#| "causes the system to select the default login shell."
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Der Name der neuen Login-Shell des Benutzers. Falls dieses Feld leer "
+"gelassen wird, verwendet das System die Standard-Login-Shell."
+
+#: useradd.8.xml:489(title)
+msgid "Changing the default values"
+msgstr "Die Standardwerte verändern"
+
+#: useradd.8.xml:490(para)
+#, fuzzy
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+"Wenn <command>useradd</command> mit der Option <option>-D</option> "
+"aufgerufen wird, werden die Standardwerte angezeigt oder die Standardwerte "
+"über die Kommandozeile angepasst. Die gültigen Optionen sind:"
+
+# SB: English version must be BASE_DIR\r
+#: useradd.8.xml:504(para)
+#, fuzzy
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+"Das Wurzelverzeichnis des Home-Verzeichnisses eines neuen Benutzers. Der "
+"Benutzername wird an <replaceable>WURZEL_VERZ</replaceable> angehängt, um "
+"den Namen des Home-Verzeichnisses zu erhalten, falls nicht die Option "
+"<option>-d</option> verwendet wird."
+
+#: useradd.8.xml:511(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:523(para)
+msgid "The date on which the user account is disabled."
+msgstr "Das Datum, an dem des Benutzerkonto abgeschaltet wird."
+
+#: useradd.8.xml:524(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:536(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+"Die Anzahl von Tagen, für die ein Passwort abgelaufen ist, bis das Konto "
+"deaktiviert wird."
+
+#: useradd.8.xml:540(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:552(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>. The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+
+#: useradd.8.xml:561(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:573(para)
+msgid "The name of a new user's login shell."
+msgstr ""
+
+#: useradd.8.xml:576(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:588(title)
+msgid "NOTES"
+msgstr "ANMERKUNGEN"
+
+#: useradd.8.xml:589(para)
+#, fuzzy
+#| msgid ""
+#| "The system administrator is responsible for placing the default user "
+#| "files in the <filename>/etc/skel/</filename> directory."
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+"Der Systemadministrator ist dafür verantwortlich, im Verzeichnis <filename>/"
+"etc/skel/</filename> die standardmäßigen Benutzerdateien anzulegen."
+
+#: useradd.8.xml:598(para)
+#, fuzzy
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Sie dürfen einen Benutzer nicht einer NIS-Gruppe hinzufügen. Dies muss auf "
+"dem NIS-Server durchgeführt werden."
+
+#: useradd.8.xml:603(para)
+#, fuzzy
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+"Ebenso wird <command>useradd</command> ablehnen, ein neues Benutzerkonto zu "
+"erstellen, wenn der Benutzername schon in einer externen Benutzerdatenbank "
+"wie z.B. NIS vorhanden ist."
+
+#: useradd.8.xml:609(para)
+#, fuzzy
+#| msgid ""
+#| "Usernames must begin with a lower case letter or an underscore, and only "
+#| "lower case letters, underscores, dashes, and dollar signs may follow. In "
+#| "regular expression terms: [a-z_][a-z0-9_-]*[$]"
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Benutzernamen müssen mit einem Kleinbuchstaben oder einem Unterstrich "
+"beginnen. Sie dürfen nur Kleinbuchstaben, Unterstriche, Gedankenstriche oder "
+"Dollarzeichen enthalten. Als regulärer Ausdruck: [a-z_][a-z0-9_-]*[$]"
+
+#: useradd.8.xml:615(para)
+#, fuzzy
+#| msgid "Groupnames may only be up to 16 characters long."
+msgid "Usernames may only be up to 32 characters long."
+msgstr "Gruppennamen dürfen nur bis zu 16 Zeichen lang sein."
+
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr ""
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overriden on the "
+"command line."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+#, fuzzy
+msgid "<option>GID_MAX</option> (number)"
+msgstr "GID_MAX (Zahl)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+#, fuzzy
+msgid "<option>GID_MIN</option> (number)"
+msgstr "GID_MIN (Zahl)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+#, fuzzy
+#| msgid ""
+#| "Range of group IDs to choose from for the <command>useradd</command> and "
+#| "<command>groupadd</command> programs."
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"Ein Bereich von Gruppen-IDs, aus denen die Programme <command>useradd</"
+"command> und <command>groupadd</command> auswählen dürfen."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr "PASS_MAX_DAYS (Zahl)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+"Die maximale Anzahl von Tagen, für die ein Passwort verwendet werden darf. "
+"Wenn das Passwort älter ist, wird ein Wechsel des Passworts erzwungen. Falls "
+"nicht angegeben, wird -1 angenommen (was zur Folge hat, dass diese "
+"Beschränkung abgeschalten ist)."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "PASS_MIN_DAYS (Zahl)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+"Dies Mindestanzahl von Tagen, bevor ein Wechsel des Passworts zugelassen "
+"wird. Ein vorheriger Versuch, das Passwort zu ändern, wird abgelehnt. Falls "
+"nicht angegeben, wird -1 angenommen (was zur Folge hat, dass diese "
+"Beschränkung abgeschalten ist)."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr "PASS_WARN_AGE (Zahl)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+"Die Anzahl von Tagen, an denen der Benutzer gewarnt wird, bevor das Passwort "
+"verfällt. Eine Null bedeutet, dass eine Warnung nur am Tag des Verfalls "
+"ausgegeben wird. Ein negativer Wert bedeutet, dass keine Warnung erfolgt. "
+"Falls nicht angegeben, wird keine Warnung ausgegeben."
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "GID_MAX (Zahl)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "GID_MIN (Zahl)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+#, fuzzy
+#| msgid ""
+#| "Range of group IDs to choose from for the <command>useradd</command> and "
+#| "<command>groupadd</command> programs."
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"Ein Bereich von Gruppen-IDs, aus denen die Programme <command>useradd</"
+"command> und <command>groupadd</command> auswählen dürfen."
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "UID_MAX (Zahl)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "UID_MIN (Zahl)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#, fuzzy
+#| msgid ""
+#| "Range of group IDs to choose from for the <command>useradd</command> and "
+#| "<command>groupadd</command> programs."
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+"Ein Bereich von Gruppen-IDs, aus denen die Programme <command>useradd</"
+"command> und <command>groupadd</command> auswählen dürfen."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>UID_MAX</option> (number)"
+msgstr "UID_MAX (Zahl)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>UID_MIN</option> (number)"
+msgstr "UID_MIN (Zahl)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#, fuzzy
+#| msgid ""
+#| "Range of group IDs to choose from for the <command>useradd</command> and "
+#| "<command>groupadd</command> programs."
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+"Ein Bereich von Gruppen-IDs, aus denen die Programme <command>useradd</"
+"command> und <command>groupadd</command> auswählen dürfen."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+#, fuzzy
+msgid "<option>UMASK</option> (number)"
+msgstr "UMASK (Zahl)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+#, fuzzy
+#| msgid ""
+#| "The permission mask is initialized to this value. If not specified, the "
+#| "permission mask will be initialized to 022."
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+"Die Maske der Berechtigungen wird anfänglich auf diesen Wert gesetzt. Falls "
+"nicht angegeben, wird die Maske der Berechtigungen anfänglich auf 022 "
+"gesetzt."
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create"
+msgstr ""
+
+#: useradd.8.xml:42(para) newusers.8.xml:42(para) login.defs.5.xml:42(para)
+#: login.1.xml:42(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overriden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: useradd.8.xml:671(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+# type: Plain text\r
+#: useradd.8.xml:673(para)
+msgid "Default values for account creation."
+msgstr "Standardwerte für die Erstellung eines Kontos."
+
+#: useradd.8.xml:677(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+#: useradd.8.xml:679(para)
+msgid "Directory containing default files."
+msgstr "Verzeichnis, das die Standarddateien enthält."
+
+#: useradd.8.xml:715(replaceable) shadow.3.xml:35(manvolnum)
+#: pwck.8.xml:274(replaceable) passwd.1.xml:427(replaceable)
+#: grpck.8.xml:232(replaceable) groupmod.8.xml:199(replaceable)
+#: groupadd.8.xml:263(replaceable)
+msgid "3"
+msgstr "3"
+
+#: useradd.8.xml:717(para) passwd.1.xml:447(para) groupmod.8.xml:201(para)
+#: groupadd.8.xml:265(para)
+msgid "invalid argument to option"
+msgstr "ungültiges Argument für Option"
+
+#: useradd.8.xml:721(replaceable) pwck.8.xml:280(replaceable)
+#: passwd.1.xml:433(replaceable) grpck.8.xml:238(replaceable)
+#: groupmod.8.xml:205(replaceable) groupadd.8.xml:269(replaceable)
+msgid "4"
+msgstr "4"
+
+#: useradd.8.xml:723(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "UID ist schon vergeben (und kein <option>-o</option>)"
+
+#: useradd.8.xml:729(para) groupmod.8.xml:207(para) groupmod.8.xml:213(para)
+#: groupdel.8.xml:126(para)
+msgid "specified group doesn't exist"
+msgstr "angegebene Gruppe ist nicht vorhanden"
+
+#: useradd.8.xml:733(replaceable) groupmod.8.xml:217(replaceable)
+#: groupadd.8.xml:275(replaceable)
+msgid "9"
+msgstr "9"
+
+#: useradd.8.xml:735(para)
+msgid "username already in use"
+msgstr "Benutzername ist schon vergeben"
+
+#: useradd.8.xml:747(para)
+msgid "can't create home directory"
+msgstr "Home-Verzeichnis kann nicht erstellt werden"
+
+#: useradd.8.xml:751(replaceable)
+msgid "13"
+msgstr "13"
+
+# SB: translation of 'mail spool'?\r
+#: useradd.8.xml:753(para)
+msgid "can't create mail spool"
+msgstr "Mail-Datei kann nicht erstellen werden"
+
+#: useradd.8.xml:693(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>useradd</command> gibt beim Beenden folgende Werte "
+"zurück: <placeholder-1/>"
+
+#: useradd.8.xml:762(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: suauth.5.xml:34(refentrytitle) suauth.5.xml:39(refname)
+msgid "suauth"
+msgstr "suauth"
+
+#: suauth.5.xml:35(manvolnum) shadow.5.xml:35(manvolnum)
+#: pwck.8.xml:286(replaceable) porttime.5.xml:35(manvolnum)
+#: passwd.5.xml:35(manvolnum) passwd.1.xml:439(replaceable)
+#: login.defs.5.xml:98(manvolnum) login.access.5.xml:36(manvolnum)
+#: limits.5.xml:36(manvolnum) gshadow.5.xml:34(manvolnum)
+#: grpck.8.xml:244(replaceable) faillog.5.xml:35(manvolnum)
+msgid "5"
+msgstr "5"
+
+#: suauth.5.xml:36(refmiscinfo) shadow.5.xml:36(refmiscinfo)
+#: porttime.5.xml:36(refmiscinfo) passwd.5.xml:36(refmiscinfo)
+#: login.defs.5.xml:99(refmiscinfo) login.access.5.xml:37(refmiscinfo)
+#: limits.5.xml:37(refmiscinfo) gshadow.5.xml:35(refmiscinfo)
+#: faillog.5.xml:36(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr "Dateiformate und -konvertierung"
+
+#: suauth.5.xml:40(refpurpose)
+msgid "detailed su control file"
+msgstr "ausführliche Kontrolldatei für su"
+
+#: suauth.5.xml:45(command) suauth.5.xml:171(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+#: suauth.5.xml:51(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+"Wenn der Befehl su aufgerufen wird, wird die Datei <filename>/etc/suauth</"
+"filename> ausgewertet. Dadurch kann der Verhalten des Befehls su verändert "
+"werden. Dies hängt von Folgendem ab:"
+
+#. .RS
+#: suauth.5.xml:58(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      1) the user su is targetting\n"
+"    "
+msgstr ""
+"\n"
+"      1) auf welchen Benutzer su gerichtet ist\n"
+"    "
+
+#. .fi
+#: suauth.5.xml:62(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+"2) dem Benutzer, der su ausführt (oder einer Gruppe, deren Mitglied er ist)"
+
+# SB: Shouldn't it be ":" at the end?\r
+#: suauth.5.xml:67(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+"Die Datei ist folgendermaßen aufgebaut, wobei Zeilen, die mit einem # "
+"beginnen, als Kommentare behandelt und daher ignoriert werden:"
+
+#: suauth.5.xml:72(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      to-id:from-id:ACTION\n"
+"    "
+msgstr ""
+"\n"
+"      to-id:from-id:ACTION\n"
+"    "
+
+# SB: A "." missing at the end of orginial?\r
+#: suauth.5.xml:76(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\""
+msgstr ""
+"Hierbei kann to-id <emphasis>ALL</emphasis>, eine Aufzählung von "
+"Benutzernamen, die durch ein \",\" getrennt werden, oder <emphasis>ALL "
+"EXCEPT</emphasis>, die von einer Aufzählung von Benutzernamen gefolgt "
+"werden, die durch ein \",\" getrennt werden, sein."
+
+# SB: What is the meaning of the last sentence?\r
+#: suauth.5.xml:82(para)
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is neccessary."
+msgstr ""
+"from-id hat das gleiche Format wie to-id mit der Ausnahme, dass zusätzlich "
+"<emphasis>GROUP</emphasis> zulässig ist. Auch <emphasis>ALL EXCEPT GROUP</"
+"emphasis> ist zulässig. Nach <emphasis>GROUP</emphasis> werden ein oder "
+"mehrere Gruppennamen aufgeführt, die durch \",\" getrennt sind. Die Haupt-ID "
+"einer Gruppe reicht nicht aus, sondern ein Eintrag in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> ist notwendig."
+
+#: suauth.5.xml:93(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr "Als Aktion können nur die folgenden Optionen angegeben werden."
+
+#: suauth.5.xml:99(emphasis)
+msgid "DENY"
+msgstr "DENY"
+
+#: suauth.5.xml:102(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr ""
+"Der Versuch, su auszuführen, wird abgebrochen, ehe nach einem Passwort "
+"gefragt wird."
+
+#: suauth.5.xml:109(emphasis)
+msgid "NOPASS"
+msgstr "NOPASS"
+
+#: suauth.5.xml:112(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+"Der Versuch, su auszuführen, hat automatisch Erfolg. Ein Passwort wird nicht "
+"abgefragt."
+
+#: suauth.5.xml:120(emphasis)
+msgid "OWNPASS"
+msgstr "OWNPASS"
+
+#: suauth.5.xml:123(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+"Damit su Erfolg hat, muss der Benutzer sein eigenes Passwort eingeben. "
+"Darauf wird er hingewiesen."
+
+#: suauth.5.xml:131(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+"Beachten Sie, dass es sich um drei selbständige Felder handelt, die durch "
+"einen Doppelpunkt getrennt sind. Neben den Doppelpunkten darf sich kein "
+"Leerzeichen befinden. Beachten Sie zudem, dass die Datei von oben nach unten "
+"Zeile für Zeile durchgegangen wird. Die erste Regel, die zutreffend ist, "
+"wird angewendet, ohne dass die Datei weiter ausgewertet wird. Damit kann ein "
+"Systemadministrator eine strenge Kontrolle ausüben."
+
+#: suauth.5.xml:141(title)
+msgid "EXAMPLE"
+msgstr "BEISPIEL"
+
+#: suauth.5.xml:142(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      # sample /etc/suauth file\n"
+"      #\n"
+"      # A couple of privileged usernames may\n"
+"      # su to root with their own password.\n"
+"      #\n"
+"      root:chris,birddog:OWNPASS\n"
+"      #\n"
+"      # Anyone else may not su to root unless in\n"
+"      # group wheel. This is how BSD does things.\n"
+"      #\n"
+"      root:ALL EXCEPT GROUP wheel:DENY\n"
+"      #\n"
+"      # Perhaps terry and birddog are accounts\n"
+"      # owned by the same person.\n"
+"      # Access can be arranged between them\n"
+"      # with no password.\n"
+"      #\n"
+"      terry:birddog:NOPASS\n"
+"      birddog:terry:NOPASS\n"
+"      #\n"
+"    "
+msgstr ""
+"\n"
+"      # /etc/suauth Beispielsdatei\n"
+"      #\n"
+"      # Einige besondere Benutzer dürfen su\n"
+"      # auf Root mit ihrem eigenen Passwort ausführen.\n"
+"      #\n"
+"      root:chris,birddog:OWNPASS\n"
+"      #\n"
+"      # Alle anderen Benutzer dürfen nicht su auf Root\n"
+"      # ausführen, falls sie nicht in der Gruppe wheel\n"
+"      # sind. Dies wird bei BSD so gehandhabt.\n"
+"      #\n"
+"      root:ALL EXCEPT GROUP wheel:DENY\n"
+"      #\n"
+"      # Die Konten terry und birddog gehören derselben\n"
+"      # Person. Sie können ohne Passwort aufeinander\n"
+"      # zugreifen.\n"
+"      #\n"
+"      terry:birddog:NOPASS\n"
+"      birddog:terry:NOPASS\n"
+"      #\n"
+"    "
+
+#: suauth.5.xml:178(title) pwconv.8.xml:135(title) login.defs.5.xml:455(title)
+msgid "BUGS"
+msgstr "BUGS"
+
+#: suauth.5.xml:179(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+"Es gibt zahlreiche Fehlerquellen. Die Auswertung der Datei ist sehr "
+"empfindlich bei Syntaxfehlern, zusätzlichen Leerzeichen (außer am Anfang und "
+"Schluss einer Zeile) und dem besonderen Zeichen, das die verschiedenen "
+"Felder von einander trennt."
+
+#: suauth.5.xml:188(title) shadow.3.xml:183(title)
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSE"
+
+#: suauth.5.xml:189(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+"Fehler beim Auswerten der Datei werden an "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> mit der Stufe ERR an das Gerät AUTH gemeldet."
+
+#: suauth.5.xml:198(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: su.1.xml:54(refentrytitle) su.1.xml:59(refname) su.1.xml:64(command)
+#: login.defs.5.xml:395(term)
+msgid "su"
+msgstr "su"
+
+#: su.1.xml:56(refmiscinfo) sg.1.xml:40(refmiscinfo)
+#: passwd.1.xml:46(refmiscinfo) newgrp.1.xml:40(refmiscinfo)
+#: login.1.xml:72(refmiscinfo) groups.1.xml:36(refmiscinfo)
+#: gpasswd.1.xml:44(refmiscinfo) expiry.1.xml:43(refmiscinfo)
+#: chsh.1.xml:42(refmiscinfo) chfn.1.xml:43(refmiscinfo)
+#: chage.1.xml:36(refmiscinfo)
+msgid "User Commands"
+msgstr "Dienstprogramme für Benutzer"
+
+#: su.1.xml:60(refpurpose)
+msgid "change user ID or become superuser"
+msgstr "ändert die Benutzer-ID oder wechselt zu Root"
+
+#: su.1.xml:70(replaceable) login.1.xml:85(replaceable)
+#: login.1.xml:93(replaceable)
+msgid "username"
+msgstr "Benutzername"
+
+#: su.1.xml:78(para)
+msgid ""
+"The <command>su</command> command is used to become another user during a "
+"login session. Invoked without a <option>username</option>, <command>su</"
+"command> defaults to becoming the superuser. The optional argument <option>-"
+"</option> may be used to provide an environment similar to what the user "
+"would expect had the user logged in directly."
+msgstr ""
+"Der Befehl <command>su</command> dient dazu, während einer Sitzung ein "
+"anderer Benutzer zu werden. Wenn <command>su</command> ohne "
+"<option>username</option> aufgerufen wird, wechselt es standardmäßig zu "
+"Root. Zusätzlich kann das Argument <option>-</option> angegeben werden. "
+"Damit wird eine Umgebung zur Verfügung gestellt, die der entspricht, die der "
+"Benutzer nach einer direkten Anmeldung erwartet."
+
+# SB: Bessere Übersetzung als 'Zielbenutzer'?\r
+#: su.1.xml:87(para)
+msgid ""
+"Additional arguments may be provided after the username, in which case they "
+"are supplied to the user's login shell. In particular, an argument of "
+"<option>-c</option> will cause the next argument to be treated as a command "
+"by most command interpreters. The command will be executed by the shell "
+"specified in <filename>/etc/passwd</filename> for the target user."
+msgstr ""
+"Zusätzliche Argumente können nach dem Benutzername angegeben werden. In "
+"diesem Fall werden sie an die Login-Shell des Benutzers weitergereicht. "
+"Insbesondere führt das Argument <option>-c</option> dazu, dass das nächste "
+"Argument von den meisten Interpretatoren als Befehl behandelt wird. Dieser "
+"Befehl wird von der Shell ausgeführt, die in <filename>/etc/passwd</"
+"filename> für den Zielbenutzer angegeben ist."
+
+#: su.1.xml:96(para)
+msgid ""
+"You can use the <option>--</option> argument to separate <command>su</"
+"command> options from the arguments supplied to the shell."
+msgstr ""
+"Sie können das Argument <option>--</option> verwenden, um Optionen für "
+"<command>su</command> von Argumenten für die Shell zu trennen."
+
+#: su.1.xml:101(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+"Der Benutzer wird gegebenenfalls nach einem Passwort gefragt. Unrichtige "
+"Passworteingaben werden eine Fehlermeldung erzeugen. Sowohl erfolgreiche als "
+"auch misslungene Versuche werden protokolliert, um Missbrauch des Systems zu "
+"entdecken."
+
+#: su.1.xml:106(para)
+#, fuzzy
+#| msgid ""
+#| "The current environment is passed to the new shell. The value of <envar>"
+#| "$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+#| "users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+#| "superuser. This may be changed with the <emphasis>ENV_PATH</emphasis> and "
+#| "<emphasis>ENV_SUPATH</emphasis> definitions in <filename>/etc/login.defs</"
+#| "filename>."
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"Die aktuelle Umgebung wird an die neue Shell übergeben. Der Wert von <envar>"
+"$PATH</envar> wird für normale Benutzer auf <filename>/bin:/usr/bin</"
+"filename> gesetzt, für Root auf <filename>/sbin:/bin:/usr/sbin:/usr/bin</"
+"filename>. Dieses Verhalten kann durch die Definitionen von "
+"<emphasis>ENV_PATH</emphasis> und <emphasis>ENV_SUPATH</emphasis> in "
+"<filename>/etc/login.defs</filename> geändert werden."
+
+# SB: Not quite sure what subsystem logins are.\r
+#: su.1.xml:115(para) login.1.xml:166(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+"Eine Subsystem-Anmeldung wird durch einen \"*\" als erstes Zeichen der Login-"
+"Shell gekennzeichnet. Das angegebene Home-Verzeichnis wird als Wurzel für "
+"das Dateisystem verwendet, auf welchem der Benutzer tatsächlich angemeldet "
+"ist."
+
+#: su.1.xml:124(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>su</command> unterstützt werden, sind:"
+
+#: su.1.xml:128(term)
+msgid ""
+"<option>-c</option>, <option>--command</option><replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--command</option><replaceable>BEFEHL</"
+"replaceable>"
+
+#: su.1.xml:133(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr ""
+"Gibt einen Befehl an, der von der Shell mittels ihrer Option <option>-c</"
+"option> ausgeführt wird."
+
+#: su.1.xml:140(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: su.1.xml:144(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+"Eine Umgebung wird zur Verfügung gestellt, die der entspricht, die der "
+"Benutzer nach einer direkten Anmeldung erwartet."
+
+#: su.1.xml:148(para)
+msgid ""
+"When <option>-</option> is used, it must be specified as the last "
+"<command>su</command> option. The other forms (<option>-l</option> and "
+"<option>--login</option>) do not have this restriction."
+msgstr ""
+"Wenn <option>-</option> verwendet wird, muss es als die letzte Option von "
+"<command>su</command> angegeben werden. Die übrigen Formen ((<option>-l</"
+"option> und <option>--login</option>) unterliegen nicht dieser Beschränkung."
+
+#: su.1.xml:162(para)
+msgid "The shell that will be invoked."
+msgstr "Die Shell, die gestartet wird."
+
+#: su.1.xml:170(para)
+msgid "The shell specified with --shell."
+msgstr "Die Shell, die mit --shell angegeben wurde."
+
+#: su.1.xml:173(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+"Falls <option>--preserve-environment</option> verwendet wird, die Shell, die "
+"durch die Umgebungsvariable <envar>$SHELL</envar> festgelegt wird."
+
+# SB: Bessere Übersetzung als 'Zielbenutzer'?\r
+#: su.1.xml:180(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+"Die Shell, die in <filename>/etc/passwd</filename> für den Zielbenutzer "
+"angegeben ist."
+
+#: su.1.xml:186(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+"<filename>/bin/sh</filename>, falls durch die obigen Methoden keine Shell "
+"gefunden werden kann."
+
+#: su.1.xml:163(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+"Die aufgerufene Shell wird bestimmt durch (höchste Priorität zuerst): "
+"<placeholder-1/>"
+
+# SB: Bessere Übersetzung als 'Zielbenutzer'?\r
+#: su.1.xml:191(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shell</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+"Falls der Zielbenutzer eine beschränkte Shell hat (d.h. das Feld für die "
+"Shell im Eintrag des Benutzers in <filename>/etc/passwd</filename> ist nicht "
+"in <filename>/etc/shell</filename>) aufgeführt), wird die Option <option>--"
+"shell</option> und die Umgebungsvariable <envar>$SHELL</envar> nicht "
+"beachtet, sofern <command>su</command> nicht von Root aufgerufen wird."
+
+#: su.1.xml:202(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:211(envar)
+msgid "$PATH"
+msgstr ""
+
+#: su.1.xml:213(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+
+#: su.1.xml:222(envar)
+msgid "$IFS"
+msgstr ""
+
+#: su.1.xml:224(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+
+#: su.1.xml:207(para)
+#, fuzzy
+#| msgid "Preserve the current environment."
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr "Erhält die aktuelle Umgebung."
+
+#: su.1.xml:233(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+"Falls der Zielbenutzer eine beschränkte Shell besitzt, hat diese Option "
+"keinen Effekt (sofern <command>su</command> nicht von Root aufgerufen wird)."
+
+#: su.1.xml:242(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+
+#: su.1.xml:251(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+
+#: su.1.xml:258(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+
+#: su.1.xml:268(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+
+#: su.1.xml:281(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+
+#: su.1.xml:289(para)
+msgid "Other environment might be set by PAM modules."
+msgstr ""
+
+#: su.1.xml:237(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:303(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Diese Version von <command>su</command> hat viele Kompilierungsoptionen. "
+"Deren Nützlichkeit hängt von den Anforderungen der jeweiligen Umgebung ab."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE</option> (string)"
+msgstr "CHFN_RESTRICT (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "CHFN_RESTRICT (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"in no."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "MAIL_DIR (Zeichenkette)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "MAIL_DIR (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+
+# SB: Shouldn't it be ":" at the end?\r
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "The file is formatted like this, with lines starting with a # being "
+#| "treated as comment lines and ignored;"
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+"Die Datei ist folgendermaßen aufgebaut, wobei Zeilen, die mit einem # "
+"beginnen, als Kommentare behandelt und daher ignoriert werden:"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "CHFN_RESTRICT (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value can be preceded by <replaceable>PATH=</"
+"replaceable>, or a colon separated list of paths (for example <replaceable>/"
+"bin:/usr/bin</replaceable>). The default value is <replaceable>PATH=/bin:/"
+"usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "CHFN_RESTRICT (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value can be preceded by <replaceable>PATH=</"
+"replaceable>, or a colon separated list of paths (for example <replaceable>/"
+"sbin:/bin:/usr/sbin:/usr/bin</replaceable>). The default value is "
+"<replaceable>PATH=/bin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "CHFN_RESTRICT (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "CHFN_RESTRICT (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will no be translated."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable setting of ulimit, umask, and niceness from passwd gecos field."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SU_NAME</option> (string)"
+msgstr "MAIL_DIR (Zeichenkette)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+
+#: su.1.xml:363(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>sh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>"
+
+#: sg.1.xml:38(refentrytitle) sg.1.xml:43(refname) sg.1.xml:49(command)
+msgid "sg"
+msgstr "sg"
+
+#: sg.1.xml:44(refpurpose)
+msgid "execute command as different group ID"
+msgstr "führt einen Befehl unter einer anderen Gruppen-ID aus"
+
+#: sg.1.xml:50(arg) newgrp.1.xml:49(arg)
+msgid "-"
+msgstr "-"
+
+#: sg.1.xml:52(arg) expiry.1.xml:53(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:51(arg)
+msgid "group <placeholder-1/> command"
+msgstr "Gruppe <placeholder-1/> Befehl"
+
+#: sg.1.xml:60(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+"Der Befehl <command>sg</command> funktioniert so ähnlich wie der Befehl "
+"<command>newgrp</command>, übernimmt aber auch einen Befehl. Dieser Befehl "
+"wird in der Shell <filename>/bin/sh</filename> ausgeführt. Bei den meisten "
+"Shells, in denen Sie <command>sg</command> ausführen, müssen Sie die "
+"Befehle, die aus mehrere Wörtern bestehen, in Anführungszeichen einfassen. "
+"Ein weiterer Unterschied zwischen <command>newgrp</command> und <command>sg</"
+"command> ist, dass einige Shells <command>newgrp</command> besonders "
+"behandeln: sie ersetzen sich mit einer neuen Instanz der Shell, die von "
+"<command>newgrp</command> erzeugt wurde. Dies geschieht nicht mit "
+"<command>sg</command>, daher werden Sie nach Beenden des Befehls "
+"<command>sg</command> zu Ihrer vorherigen Gruppen-ID zurückkehren."
+
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+
+#: sg.1.xml:119(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: shadow.5.xml:34(refentrytitle) shadow.5.xml:39(refname)
+#: shadow.3.xml:34(refentrytitle) shadow.3.xml:39(refname)
+#: pwck.8.xml:60(replaceable) pwck.8.xml:75(replaceable)
+#: grpck.8.xml:53(replaceable) grpck.8.xml:62(replaceable)
+msgid "shadow"
+msgstr "shadow"
+
+#: shadow.5.xml:40(refpurpose)
+#, fuzzy
+#| msgid "the password file"
+msgid "shadowed password file"
+msgstr "die Passwortdatei"
+
+#: shadow.5.xml:45(para)
+#, fuzzy
+#| msgid ""
+#| "<emphasis remap=\"I\">shadow</emphasis> contains the encrypted password "
+#| "information for user's accounts and optional the password aging "
+#| "information. Included is:"
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+"<emphasis remap=\"I\">shadow</emphasis> enthält die verschlüsselten "
+"Passwortinformationen für die Benutzerkonten und optional Informationen zum "
+"Verfall der Passwörter. Enthalten ist:"
+
+#: shadow.5.xml:51(para) gshadow.5.xml:49(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+"Um die Sicherheit der Passwörter zu gewährleisten, darf diese Datei nicht "
+"für normale Benutzer lesbar sein."
+
+#: shadow.5.xml:56(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+
+#: shadow.5.xml:63(emphasis) passwd.5.xml:53(para)
+msgid "login name"
+msgstr "Login-Name"
+
+#: shadow.5.xml:65(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+
+#: shadow.5.xml:71(emphasis) gshadow.5.xml:68(emphasis)
+msgid "encrypted password"
+msgstr "verschlüsseltes Passwort"
+
+#: shadow.5.xml:73(para) gshadow.5.xml:70(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+"Sie sollten in <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> nachsehen, wenn Sie "
+"mehr über die Bedeutung dieser Zeichenkette wissen wollen."
+
+#: shadow.5.xml:78(para)
+#, fuzzy
+#| msgid ""
+#| "If the password field contains some string that is not valid result of "
+#| "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#| "manvolnum></citerefentry>, for instance ! or *, the user will not be able "
+#| "to use a unix password to log in, subject to "
+#| "<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+#| "citerefentry>."
+msgid ""
+"If the password field contains some string that is not a valid result of "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, for instance ! or *, the user will not be able to use a unix "
+"password to log in (but the user may log in the system by other means)."
+msgstr ""
+"Wenn das Passwortfeld eine Zeichenkette enthält, die kein zulässiges "
+"Ergebnis von <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> ist, z.B. ! oder *, kann sich der Benutzer nicht "
+"mit einem Unix-Passwort anmelden, vorbehaltlich anderer Regelungen durch "
+"<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+"citerefentry>."
+
+#: shadow.5.xml:85(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+
+#: shadow.5.xml:92(para) gshadow.5.xml:92(para)
+msgid ""
+"A password field which starts with a exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+
+#: shadow.5.xml:102(emphasis)
+#, fuzzy
+#| msgid "days before password may be changed"
+msgid "date of last password change"
+msgstr "Anzahl der Tage, bevor das Passwort geändert werden darf"
+
+#: shadow.5.xml:105(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:109(para)
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"pasword the next time she will log in the system."
+msgstr ""
+
+#: shadow.5.xml:114(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+
+#: shadow.5.xml:121(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "minimum password age"
+msgstr "Verändern des Passworts"
+
+#: shadow.5.xml:123(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+
+#: shadow.5.xml:128(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+
+#: shadow.5.xml:135(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "maximum password age"
+msgstr "Verändern des Passworts"
+
+#: shadow.5.xml:137(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+
+#: shadow.5.xml:141(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+
+#: shadow.5.xml:146(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+
+#: shadow.5.xml:151(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+
+#: shadow.5.xml:159(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "password warning period"
+msgstr "Verändern des Passworts"
+
+#: shadow.5.xml:162(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password has expired before the account will "
+#| "be disabled."
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+"Die Anzahl von Tagen, für die ein Passwort abgelaufen ist, bis das Konto "
+"deaktiviert wird."
+
+#: shadow.5.xml:167(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+
+#: shadow.5.xml:175(emphasis)
+msgid "password inactivity period"
+msgstr ""
+
+#: shadow.5.xml:178(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+
+#: shadow.5.xml:184(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+
+#: shadow.5.xml:189(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr ""
+
+#: shadow.5.xml:197(emphasis)
+#, fuzzy
+#| msgid "User account information."
+msgid "account expiration date"
+msgstr "Informationen zu den Benutzerkonten."
+
+#: shadow.5.xml:200(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:204(para)
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an acount expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+
+#: shadow.5.xml:210(para)
+msgid "An empty field means that the account will never expire."
+msgstr ""
+
+#: shadow.5.xml:213(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:221(emphasis)
+#, fuzzy
+#| msgid "a reserved field"
+msgid "reserved field"
+msgstr "ein reserviertes Feld"
+
+#: shadow.5.xml:223(para)
+#, fuzzy
+#| msgid "sp_flag - reserved for future use"
+msgid "This field is reserved for future use."
+msgstr "sp_flag - für zukünftigen Gebrauch reserviert"
+
+#: shadow.5.xml:245(filename)
+#, fuzzy
+#| msgid "/etc/shadow"
+msgid "/etc/shadow-"
+msgstr "/etc/shadow"
+
+#: shadow.5.xml:247(para)
+msgid "Backup file for /etc/shadow."
+msgstr ""
+
+#: shadow.5.xml:248(para) passwd.5.xml:134(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+
+#: shadow.5.xml:259(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: shadow.3.xml:36(refmiscinfo)
+msgid "Library Calls"
+msgstr "Biliotheksaufrufe"
+
+#: shadow.3.xml:40(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+# SB: Übersetzung iO?\r
+#: shadow.3.xml:41(refpurpose)
+msgid "encrypted password file routines"
+msgstr "Routinen für die Datei, die die verschlüsselten Passwörter enthält"
+
+#: shadow.3.xml:45(title)
+msgid "SYNTAX"
+msgstr "SYNTAX"
+
+#: shadow.3.xml:47(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+#: shadow.3.xml:51(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+#: shadow.3.xml:55(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "truct spwd *getspnam(char"
+
+#: shadow.3.xml:56(emphasis)
+msgid "*name"
+msgstr "*name"
+
+#: shadow.3.xml:56(emphasis) shadow.3.xml:69(emphasis)
+#: shadow.3.xml:74(emphasis) shadow.3.xml:80(emphasis)
+msgid ");"
+msgstr ");"
+
+#: shadow.3.xml:60(emphasis)
+msgid "void setspent();"
+msgstr "void setspent();"
+
+#: shadow.3.xml:64(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+#: shadow.3.xml:68(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+#: shadow.3.xml:69(emphasis) shadow.3.xml:80(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+#: shadow.3.xml:73(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+#: shadow.3.xml:74(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+#: shadow.3.xml:78(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+#: shadow.3.xml:79(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+#: shadow.3.xml:79(emphasis)
+msgid "FILE"
+msgstr "DATEIEN"
+
+#: shadow.3.xml:84(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+#: shadow.3.xml:88(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+#: shadow.3.xml:94(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+"<emphasis remap=\"I\">shadow</emphasis> verändert den Inhalt der Shadow-"
+"Passwort-Datei <filename>/etc/shadow</filename>. Der Aufbau der Datei "
+"<emphasis remap=\"I\">#include</emphasis> ist:"
+
+#: shadow.3.xml:99(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+"      char\t\t*sp_namp; /* user login name */\n"
+"      char\t\t*sp_pwdp; /* encrypted password */\n"
+"      long int\t\tsp_lstchg; /* last password change */\n"
+"      long int\t\tsp_min; /* days until change allowed. */\n"
+"      long int\t\tsp_max; /* days before change required */\n"
+"      long int\t\tsp_warn; /* days warning for expiration */\n"
+"      long int\t\tsp_inact; /* days before account inactive */\n"
+"      long int\t\tsp_expire; /* date when account expires */\n"
+"      unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+"    "
+msgstr ""
+"struct spwd {\n"
+"      char\\t\\t*sp_namp; /* Login-Name des Benutzers */\n"
+"      char\\t\\t*sp_pwdp; /* verschlüsseltes Passwort */\n"
+"      long int\\t\\tsp_lstchg; /* letzte Änderung des Passworts */\n"
+"      long int\\t\\tsp_min; /* Tage, ehe Änderung erlaubt ist */\n"
+"      long int\\t\\tsp_max; /* Tage, bis Änderung erfolgen muss */\n"
+"      long int\\t\\tsp_warn; /* Tage für Warnung vor Verfall */\n"
+"      long int\\t\\tsp_inact; /* Tage, ehe Konto inaktiv wird */\n"
+"      long int\\t\\tsp_expire; /* Datum, an dem Konto abgeschaltet wird */\n"
+"      unsigned long int\\tsp_flag; /* reserviert für zukünftigen Gebrauch*/\n"
+"}\n"
+"    "
+
+#: shadow.3.xml:111(para)
+msgid "The meanings of each field are:"
+msgstr "Die Bedeutung dieser Felder ist:"
+
+# SB: Übersetzung von 'null-terminated'?\r
+#: shadow.3.xml:114(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr "sp_namp - Verweis auf Benutzername, der mit einer Null endet"
+
+#: shadow.3.xml:117(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr "sp_pwdp - Verweis auf Passwort, das mit einer Null endet"
+
+#: shadow.3.xml:120(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+"sp_lstchg - Anzahl der Tage gerechnet ab dem 1. Januar 1970, seitdem das "
+"Passwort das letzte Mal geändert wurde"
+
+#: shadow.3.xml:123(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr "sp_min - Anzahl der Tage, ehe das Passwort nicht geändert werden darf"
+
+#: shadow.3.xml:126(para)
+msgid "sp_max - days after which password must be changed"
+msgstr "sp_max - Anzahl der Tage, nach denen das Passwort geändert werden muss"
+
+#: shadow.3.xml:129(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+"sp_warn - Anzahl der Tage ehe das Passwort verfällt, an denen der Benutzer "
+"vor dem Verfall gewarnt wird"
+
+#: shadow.3.xml:134(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+"sp_inact - Anzahl der Tage nach dem Verfall des Passworts, nach denen das "
+"Konto als inaktive angesehen und abgeschaltet wird"
+
+#: shadow.3.xml:139(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+"sp_expire - Anzahl Tage gerechnet ab dem 1. Januar 1970, für die das Konto "
+"abgeschaltet ist"
+
+#: shadow.3.xml:142(para)
+msgid "sp_flag - reserved for future use"
+msgstr "sp_flag - für zukünftigen Gebrauch reserviert"
+
+#: shadow.3.xml:150(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis> und <emphasis>sgetspent</emphasis> geben "
+"einen Verweis auf <emphasis>struct spwd</emphasis> zurück. "
+"<emphasis>getspent</emphasis> gibt den nächsten Eintrag der Datei zurück. "
+"<emphasis>fgetspent</emphasis> gibt den nächsten Eintrag im angegebenen "
+"Stream zurück, für den angenommen wird, dass es sich dabei um eine Datei im "
+"zulässigen Format handelt. <emphasis>sgetspent</emphasis> gibt einen Verweis "
+"auf <emphasis>struct spwd</emphasis> zurück, wobei die angegebene "
+"Zeichenkette als Eingabe verwendet wird. <emphasis>getspnam</emphasis> sucht "
+"ab der aktuellen Position in der Datei nach einem Eintrag, der mit "
+"<emphasis>name</emphasis> übereinstimmt."
+
+#: shadow.3.xml:163(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+"<emphasis>setspent</emphasis> und <emphasis>endspent</emphasis> können "
+"verwendet werden, um den Zugriff auf die Shadow-Passwort-Datei zu beginnen "
+"oder zu beenden."
+
+#: shadow.3.xml:169(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+"Die Routinen <emphasis>lckpwdf</emphasis> und <emphasis>ulckpwdf</emphasis> "
+"sollten eingesetzt werden, da so sichergestellt werden kann, dass exlusiv "
+"auf die Datei <filename>/etc/shadow</filename> zugegriffen wird. "
+"<emphasis>lckpwdf</emphasis> versucht, eine Sperre durch <emphasis>pw_lock</"
+"emphasis> für bis zu 15 Sekunden zu erhalten. Dann versucht es, eine zweite "
+"Sperre durch <emphasis>spw_lock</emphasis> für den Rest der 15 Sekunden zu "
+"erhalten. Sollte einer der beiden Versuche nach insgesamt 15 Sekunden "
+"scheitern, gibt <emphasis>lckpwdf</emphasis> -1 zurück. Wurden beide Sperren "
+"erhalten, wird 0 zurückgegeben."
+
+#: shadow.3.xml:184(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+"Wenn kein weiterer Eintrag vorhanden ist oder während der Verarbeitung ein "
+"Fehler auftritt, geben die Routinen NULL zurück. Routinen, die "
+"<emphasis>int</emphasis> als Rückgabewert haben, geben im Erfolgsfall 0 und "
+"beim Scheitern -1 zurück."
+
+#: shadow.3.xml:194(para)
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+"Diese Routinen können nur von Root verwendet werden, da der Zugriff auf die "
+"Shadow-Passwort-Datei beschränkt ist."
+
+#: shadow.3.xml:214(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: pwconv.8.xml:42(refentrytitle) pwconv.8.xml:47(refname)
+#: pwconv.8.xml:56(command) login.defs.5.xml:388(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+#: pwconv.8.xml:48(refname) pwconv.8.xml:59(command)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+#: pwconv.8.xml:49(refname) pwconv.8.xml:62(command)
+#: login.defs.5.xml:302(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+#: pwconv.8.xml:50(refname) pwconv.8.xml:65(command)
+#: login.defs.5.xml:308(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+#: pwconv.8.xml:51(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr "konvertiert zu oder von Shadow-Passwörtern und -gruppen"
+
+# SB: Translation ok?\r
+#: pwconv.8.xml:71(para)
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+"Der Befehl <command>pwconv</command> erstellt eine <emphasis remap=\"I"
+"\">shadow</emphasis>-Datei aus einer <emphasis remap=\"I\">passwd</emphasis>-"
+"Datei und gegebenenfalls aus einer bereits vorhandenen <emphasis remap=\"I"
+"\">shadow</emphasis>-Datei."
+
+# SB: Translation ok?\r
+#: pwconv.8.xml:77(para)
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+"Der Befehl <command>pwunconv</command> erstellt eine <emphasis remap=\"I"
+"\">passwd</emphasis>-Datei aus einer <emphasis remap=\"I\">passwd</"
+"emphasis>- und <emphasis remap=\"I\">shadow</emphasis>-Datei und entfernt "
+"anschließend die<emphasis remap=\"I\">shadow</emphasis>-Datei."
+
+#: pwconv.8.xml:84(para)
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+"Der Befehl <command>grconv</command> erstellt eine <emphasis remap=\"I"
+"\">gshadow</emphasis>-Datei aus einer <emphasis remap=\"I\">group</emphasis>-"
+"Datei und gegebenenfalls aus einer bereits vorhandenen <emphasis remap=\"I"
+"\">gshadow</emphasis>-Datei."
+
+#: pwconv.8.xml:90(para)
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+"Der Befehl <command>grpunconv</command> erstellt eine <emphasis remap=\"I"
+"\">group</emphasis>-Datei aus einer <emphasis remap=\"I\">group</emphasis>- "
+"und <emphasis remap=\"I\">gshadow</emphasis>-Datei und entfernt anschließend "
+"die <emphasis remap=\"I\">gshadow</emphasis>-Datei."
+
+#: pwconv.8.xml:97(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+"Diese vier Programme funktionieren mit der normalen und der Shadow-"
+"Passwortdatei und den Gruppendateien: <filename>/etc/passwd</filename>, "
+"<filename>/etc/group</filename>, <filename>/etc/shadow</filename> und "
+"<filename>/etc/gshadow</filename>."
+
+#: pwconv.8.xml:104(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+"Jedes dieser Programme erzeugt vor der Konvertierung die notwendigen "
+"Sperren. <command>pwconv</command> und <command>grpconv</command> sind "
+"vergleichbar. Zuerst werden die Einträge aus der Shadow-Datei entfernt, die "
+"nicht in der Hauptdatei enthalten sind. Anschließend werden die Einträge in "
+"der Shadow-Datei aktualisiert, die kein `x' als Passwort haben. Zuletzt "
+"werden die Passwörter in der Hauptdatei durch `x' ersetzt. Diese Programme "
+"können für eine erstmalige Konvertierung genutzt werden als auch, um die "
+"Shadow-Datei zu aktualisieren, falls die Hauptdatei von Hand bearbeitet "
+"wurde."
+
+#: pwconv.8.xml:115(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+"<command>pwconv</command> verwendet die Werte <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis> "
+"und <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> aus <filename>/etc/login."
+"defs</filename>, wenn neue Einträge <filename>/etc/shadow</filename> "
+"hinzugefügt werden."
+
+#: pwconv.8.xml:124(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+"Ebenfalls sind die Befehle <command>pwunconv</command> und "
+"<command>grpunconv</command> ähnlich. Passwörter in der Hauptdatei werden "
+"durch die Shadow-Datei aktualisiert. Einträge, welche in der Hauptdatei, "
+"aber nicht in der Shadow-Datei vorhanden sind, bleiben unberührt. Zuletzt "
+"wird die Shadow-Datei gelöscht. Eine Informationen für den Verfall von "
+"Passwörtern geht durch <command>pwunconv</command> verloren. Es wird aber so "
+"viel wie möglich umgewandelt."
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+"Fehler in der Passwort- oder Gruppendatei (wie z.B. ungültige oder doppelte "
+"Einträge) können zu Endlosschleifen oder anderen seltsamen Fehlern führen. "
+"Sie sollten daher <command>pwck</command> und <command>grpck</command> "
+"ausführen, um solche Fehler zu entfernen, bevor Sie von oder zu Shadow-"
+"Passwörtern oder -gruppen umwandeln."
+
+#: pwconv.8.xml:147(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+
+#: pwconv.8.xml:155(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+
+#: pwconv.8.xml:181(para)
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>."
+
+#: pwck.8.xml:40(refentrytitle) pwck.8.xml:45(refname) pwck.8.xml:51(command)
+#: pwck.8.xml:66(command) login.defs.5.xml:380(term)
+msgid "pwck"
+msgstr "pwck"
+
+#: pwck.8.xml:46(refpurpose)
+msgid "verify integrity of password files"
+msgstr "überprüft die Stimmigkeit der Passwortdateien"
+
+#: pwck.8.xml:52(arg) pwck.8.xml:67(arg) pwck.8.xml:171(option)
+msgid "-q"
+msgstr "-q"
+
+#: pwck.8.xml:53(arg) pwck.8.xml:192(option) grpck.8.xml:58(arg)
+#: grpck.8.xml:149(option)
+msgid "-s"
+msgstr "-s"
+
+#: pwck.8.xml:56(replaceable) pwck.8.xml:71(replaceable)
+#: passwd.5.xml:34(refentrytitle) passwd.5.xml:39(refname)
+#: passwd.1.xml:44(refentrytitle) passwd.1.xml:49(refname)
+#: passwd.1.xml:55(command) login.defs.5.xml:369(term)
+msgid "passwd"
+msgstr "passwd"
+
+#: pwck.8.xml:68(arg) pwck.8.xml:182(option) login.1.xml:222(option)
+#: grpck.8.xml:49(arg) grpck.8.xml:139(option)
+msgid "-r"
+msgstr "-r"
+
+#: pwck.8.xml:84(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>pwck</command> command verifies the integrity of the system "
+#| "authentication information. All entries in the <filename>/etc/passwd</"
+#| "filename> and <filename>/etc/shadow</filename> are checked to see that "
+#| "the entry has the proper format and valid data in each field. The user is "
+#| "prompted to delete entries that are improperly formatted or which have "
+#| "other uncorrectable errors."
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename> have the proper "
+"format and contain valid data. The user is prompted to delete entries that "
+"are improperly formatted or which have other uncorrectable errors."
+msgstr ""
+"Der Befehl <command>pwck</command> überprüft die Stimmigkeit der "
+"Informationen des Systems zur Authentifizierung. Alle Einträge in <filename>/"
+"etc/passwd</filename> und <filename>/etc/shadow</filename> werden darauf "
+"überprüft, ob der Eintrag das richtige Format hat und gültige Daten enthält. "
+"Der Benutzer wird aufgefordert, Einträge zu löschen, die falsch formatiert "
+"sind oder andere unbehebbare Fehler enthalten."
+
+#: pwck.8.xml:93(para) grpck.8.xml:80(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr "Es wird überprüft, ob jeder Eintrag folgende Eigenschaften aufweist:"
+
+#: pwck.8.xml:96(para) grpck.8.xml:84(para)
+msgid "the correct number of fields"
+msgstr "die richtige Anzahl von Feldern"
+
+#: pwck.8.xml:99(para)
+#, fuzzy
+#| msgid "a unique user name"
+msgid "a unique and valid user name"
+msgstr "einen eindeutigen Benutzernamen"
+
+#: pwck.8.xml:102(para)
+msgid "a valid user and group identifier"
+msgstr "eine gültige Benutzer- und Gruppenkennung"
+
+#: pwck.8.xml:105(para)
+msgid "a valid primary group"
+msgstr "eine gültige Hauptgruppe"
+
+#: pwck.8.xml:108(para)
+msgid "a valid home directory"
+msgstr "ein gültiges Home-Verzeichnis"
+
+#: pwck.8.xml:111(para)
+msgid "a valid login shell"
+msgstr "eine gültige Login-Shell"
+
+#: pwck.8.xml:115(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+
+#: pwck.8.xml:120(para)
+msgid "These checks are the following:"
+msgstr ""
+
+#: pwck.8.xml:125(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+
+#: pwck.8.xml:131(para)
+msgid "passwords are specified in the shadowed file"
+msgstr ""
+
+#: pwck.8.xml:134(para)
+#, fuzzy
+#| msgid "the correct number of fields"
+msgid "shadow entries have the correct number of fields"
+msgstr "die richtige Anzahl von Feldern"
+
+#: pwck.8.xml:137(para)
+msgid "shadow entries are unique in shadow"
+msgstr ""
+
+#: pwck.8.xml:140(para)
+#, fuzzy
+#| msgid "days before password may be changed"
+msgid "the last password changes are not in the future"
+msgstr "Anzahl der Tage, bevor das Passwort geändert werden darf"
+
+#: pwck.8.xml:144(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+"Fehler bei der Überprüfung der richtigen Anzahl der Felder und des "
+"eindeutigen Benutzernames sind schwerwiegend. Wenn ein Eintrag die falsche "
+"Anzahl von Feldern ausweist, wird der Benutzer aufgefordert, die gesamte "
+"Zeile zu löschen. Wenn dies der Benutzer ablehnt, werden alle weiteren Tests "
+"ausgelassen. Bei einem Eintrag mit einem mehrfach verwendeten Benutzernamen "
+"wird der Benutzer aufgefordert, diesen Eintrag zu löschen. Sollte er dies "
+"ablehnen, werden dennoch die übrigen Test ausgeführt. Bei allen anderen "
+"Fehlern wird eine Warnung abgegeben und der Benutzer aufgefordert, den "
+"Fehler mittels des Befehls <command>usermod</command> zu beheben."
+
+#: pwck.8.xml:155(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+"Die Befehle, die die Datei <filename>/etc/passwd</filename> bearbeiten, "
+"können falsche oder doppelte Einträge nicht verändern. In solchen Fällen "
+"sollte <command>pwck</command> verwendet werden, um den betreffenden Eintrag "
+"zu entfernen."
+
+#: pwck.8.xml:165(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>pwck</command> unterstützt werden, "
+"sind:"
+
+#: pwck.8.xml:174(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+"Meldet nur Fehler. Warnung, die keine Handlung des Benutzers erfordern, "
+"werden nicht angezeigt."
+
+#: pwck.8.xml:185(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr "Führt den Befehl <command>pwck</command> im Modus Nur-Lesen aus."
+
+#: pwck.8.xml:195(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+"Ordnet die Einträge in <filename>/etc/passwd</filename> und <filename>/etc/"
+"shadow</filename> nach der UID."
+
+#: pwck.8.xml:203(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename>. The user may select "
+"alternate files with the <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> parameters."
+msgstr ""
+"Standardmäßig arbeitet <command>pwck</command> mit den Dateien <filename>/"
+"etc/passwd</filename> und <filename>/etc/shadow</filename>. Der Benutzer "
+"kann andere Dateien mit den Parametern <emphasis remap=\"I\">passwd</"
+"emphasis> und <emphasis remap=\"I\">shadow</emphasis> auswählen."
+
+#: pwck.8.xml:270(para)
+msgid "one or more bad password entries"
+msgstr "ein oder mehrere fehlerhafte Passworteinträge"
+
+#: pwck.8.xml:276(para)
+msgid "can't open password files"
+msgstr "kann die Passwortdatei nicht öffnen"
+
+#: pwck.8.xml:282(para)
+msgid "can't lock password files"
+msgstr "kann die Passwortdatei nicht sperren"
+
+#: pwck.8.xml:288(para)
+msgid "can't update password files"
+msgstr "kann die Passwortdatei nicht aktualisieren"
+
+#: pwck.8.xml:294(para)
+#, fuzzy
+#| msgid "can't open password files"
+msgid "can't sort password files"
+msgstr "kann die Passwortdatei nicht öffnen"
+
+#: pwck.8.xml:252(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>pwck</command> gibt beim Beenden folgende Werte zurück: "
+"<placeholder-1/>"
+
+#: pwck.8.xml:303(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: porttime.5.xml:34(refentrytitle) porttime.5.xml:39(refname)
+msgid "porttime"
+msgstr "porttime"
+
+# SB: Übersetzung?\r
+#: porttime.5.xml:40(refpurpose)
+msgid "port access time file"
+msgstr "Datei für zeitlich begrenzten Zugang zu Ports"
+
+#: porttime.5.xml:45(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+"<emphasis remap=\"I\">porttime</emphasis> enthält eine Liste von tty-"
+"Geräten, Benutzernamen und zulässigen Login-Zeiten."
+
+#: porttime.5.xml:50(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+"Jeder Eintrag besteht aus drei Feldern, die durch Doppelpunkte getrennt "
+"sind. Das erste Feld enthält eine Liste von tty-Geräten, die durch Kommata "
+"getrennt sind, oder einen Stern, was bedeutet, dass dieser Eintrag auf alle "
+"tty-Geräte zutrifft. Das zweite Feld enthält eine Liste von Benutzernamen, "
+"die durch Kommata getrennt sind, oder einen Stern, was bedeutet, dass dieser "
+"Eintrag auf alle Benutzernamen zutrifft. Das dritte Feld ist eine Liste von "
+"Login-Zeiten, die durch Kommata getrennt sind."
+
+#: porttime.5.xml:59(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+"Jeder Zeiteintrag kann aus einem oder mehreren Wochentagen bestehen, die mit "
+"<emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</emphasis>, "
+"<emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</emphasis> "
+"und <emphasis>Sa</emphasis> abgekürzt werden. Danach folgt die Angabe von "
+"zwei Uhrzeiten, die durch einen Bindestrich getrennt sind. Mit der Abkürzung "
+"<emphasis>Wk</emphasis> wird Montag bis Freitag bezeichnet. Mit "
+"<emphasis>Al</emphasis> wird jeder Tag gewählt. Falls keine Tage angegeben "
+"werden, wird <emphasis>Al</emphasis> angenommen."
+
+#: porttime.5.xml:73(title)
+msgid "EXAMPLES"
+msgstr "BEISPIELE"
+
+#: porttime.5.xml:74(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+"Der folgende Eintrag erlaubt dem Benutzer <emphasis remap=\"B\">jfh</"
+"emphasis> Zugriff auf jeden Port während Werktagen von 9 bis 17 Uhr."
+
+#: porttime.5.xml:80(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+#: porttime.5.xml:82(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+"Die folgenden Einträge erlauben nur den Benutzern <emphasis>root</emphasis> "
+"und <emphasis>oper</emphasis> jederzeit Zugriff auf <filename>/dev/console</"
+"filename>. Hier ist auch ersichtlich, dass <filename>/etc/porttime</"
+"filename> eine geordnete Liste der Zugriffszeiten ist. Jeder andere Benutzer "
+"fällt unter den zweiten Eintrag, welcher Zugriff zu keiner Zeit erlaubt."
+
+#: porttime.5.xml:91(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"      console:root,oper:Al0000-2400\n"
+"      console:*:\n"
+"    "
+msgstr ""
+"\n"
+"      console:root,oper:Al0000-2400\n"
+"      console:*:\n"
+"    "
+
+#: porttime.5.xml:96(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+"Der folgende Eintrag erlaubt dem Benutzer <emphasis>games</emphasis> Zugriff "
+"auf jeden Port außerhalb von Arbeitszeiten."
+
+#: porttime.5.xml:101(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+#: porttime.5.xml:108(filename) logoutd.8.xml:67(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+#: porttime.5.xml:110(para) logoutd.8.xml:69(para)
+msgid "File containing port access."
+msgstr "Datei, die den Port-Zugriff enthält."
+
+#: porttime.5.xml:118(para) login.access.5.xml:109(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: passwd.5.xml:40(refpurpose)
+msgid "the password file"
+msgstr "die Passwortdatei"
+
+#: passwd.5.xml:45(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+"<filename>/etc/passwd</filename> enthält einen Eintrag pro Benutzerkonto, "
+"wobei jeder Eintrag sieben Felder besitzt, die durch Doppelpunkt (<quote>:</"
+"quote>) getrennt sind. Diese Felder sind:"
+
+#: passwd.5.xml:56(para)
+msgid "optional encrypted password"
+msgstr "optional verschlüsseltes Passwort"
+
+#: passwd.5.xml:59(para)
+msgid "numerical user ID"
+msgstr "numerische Benutzer-ID"
+
+#: passwd.5.xml:62(para)
+msgid "numerical group ID"
+msgstr "numerische Gruppen-ID"
+
+#: passwd.5.xml:65(para)
+msgid "user name or comment field"
+msgstr "Benutzername oder Kommentarfeld"
+
+#: passwd.5.xml:68(para)
+msgid "user home directory"
+msgstr "Home-Verzeichnis des Benutzers"
+
+# SB: Übersetzung von "command interpreter"?\r
+#: passwd.5.xml:71(para)
+msgid "optional user command interpreter"
+msgstr "optional Befehlsinterpreter des Benutzers"
+
+#: passwd.5.xml:75(para)
+msgid ""
+"The encrypted password field may be blank, in which case no password is "
+"required to authenticate as the specified login name. However, some "
+"applications which read the <filename>/etc/passwd</filename> file may decide "
+"not to permit <emphasis>any</emphasis> access at all if the "
+"<emphasis>password</emphasis> field is blank. If the <emphasis>password</"
+"emphasis> field is a lower-case <quote>x</quote>, then the encrypted "
+"password is actually stored in the <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> file instead; there "
+"<emphasis>must</emphasis> be a corresponding line in the <filename>/etc/"
+"shadow</filename> file, or else the user account is invalid. If the "
+"<emphasis>password</emphasis> field is any other string, then it will be "
+"treated as an encrypted password, as specified by "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Das Feld für das verschlüsselte Passwort kann leer sein. In diesem Fall wird "
+"kein Passwort benötigt, um sich beim System anzumelden. Allerdings werden "
+"einige Anwendung, die <filename>/etc/passwd</filename> auswerten, "
+"<emphasis>keinen</emphasis> Zugriff erlauben, wenn das <emphasis>Passwort</"
+"emphasis>-Feld leer ist. Wenn das <emphasis>Passwort</emphasis>-Feld ein "
+"kleines <quote>x</quote> enthält, ist das Passwort in der Datei "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry> gespeichert. Es <emphasis>muss</emphasis> sich dann ein "
+"passender Eintrag in <filename>/etc/shadow</filename> befinden, oder das "
+"Benutzerkonto ist ungültig. Wenn das <emphasis>Passwort</emphasis>-Feld eine "
+"andere Zeichenkette enthält, wird diese als ein verschlüsseltes Passwort "
+"behandelt. Genaueres dazu befindet sich unter "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+
+#: passwd.5.xml:94(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Das Kommentarfeld wird von verschiedenen Systemprogrammen wie z.B. "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> ausgewertet."
+
+#: passwd.5.xml:100(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+"Das Feld für das Home-Verzeichnis gibt den Namen für das anfängliche "
+"Arbeitsverzeichnis an. Das Programm <command>login</command> benutzt diese "
+"Information, um den Wert der Umgebungsvariable <envar>$HOME</envar> zu "
+"setzen."
+
+# SB: Übersetzung von "command language interpreter"?\r
+#: passwd.5.xml:106(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+"Das Feld für den Befehlsinterpreter enthält den Namen des Befehlssprachen-"
+"Interpreters des Benutzers oder den Namen des Programms, das zuerst "
+"ausgeführt werden soll. Das Programm <command>login</command> benutzt diese "
+"Information, um den Wert der Umgebungsvariable <envar>$SHELL</envar> zu "
+"setzen. Falls dieses Feld leer ist, wird ihm standardmäßig der Wert "
+"<filename>/bin/sh</filename> zugewiesen."
+
+#: passwd.5.xml:127(para)
+msgid "optional encrypted password file"
+msgstr "optionale Datei für verschlüsseltes Passwort"
+
+#: passwd.5.xml:131(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/passwd-"
+msgstr "/etc/passwd"
+
+#: passwd.5.xml:133(para)
+msgid "Backup file for /etc/passwd."
+msgstr ""
+
+#: passwd.5.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# SB: Couldn't update translation for passwd.1 yet, since shadow cvs is down.\r
+#: passwd.1.xml:50(refpurpose)
+msgid "change user password"
+msgstr "ändert das Passwort eines Benutzers"
+
+#: passwd.1.xml:67(para)
+#, fuzzy
+msgid ""
+"The <command>passwd</command> command changes passwords for user accounts. A "
+"normal user may only change the password for his/her own account, while the "
+"superuser may change the password for any account. <command>passwd</command> "
+"also changes the account or associated password validity period."
+msgstr ""
+"<command>passwd</command> ändert die Passwörter von Benutzerkonten. Ein "
+"normaler Benutzer kann nur das Passwort seines Kontos verändern, der "
+"Superuser dagegen kann die Passwörter aller Konten ändern. Mit "
+"<command>passwd</command> können auch die Informationen über das Konto wie "
+"der vollständige Name des Benutzers, seine Login-Shell und Verfallsdatum und "
+"-intervall des Passworts verändert werden."
+
+#: passwd.1.xml:76(title)
+msgid "Password Changes"
+msgstr "Verändern des Passworts"
+
+#: passwd.1.xml:77(para)
+#, fuzzy
+msgid ""
+"The user is first prompted for his/her old password, if one is present. This "
+"password is then encrypted and compared against the stored password. The "
+"user has only one chance to enter the correct password. The superuser is "
+"permitted to bypass this step so that forgotten passwords may be changed."
+msgstr ""
+"Der Benutzer wird zuerst nach seinem alten Passwort gefragt, falls eines "
+"vorhanden ist. Dieses Passwort wird dann verschlüsselt und mit dem "
+"abgespeicherten Passwort verglichen. Der Benutzer hat nur eine Gelegenheit, "
+"das richtige Passwort einzugeben. Der Superuser kann diesen Schritt "
+"überspringen, so dass vergessene Passwörter geändert werden können."
+
+#: passwd.1.xml:85(para)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+"Nachdem das Passwort eingegeben wurde, werden Informationen über die "
+"Gültigkeitsdauer des Passworts abgefragt, um festzustellen, ob der Benutzer "
+"das Passwort zu dieser Zeit verändern darf. Wenn nicht, lehnt "
+"<command>passwd</command> die Änderung des Passworts ab und beendet sich."
+
+#: passwd.1.xml:92(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+"Der Benutzer wird dann aufgefordert, zweimal ein neues Passwort einzugeben. "
+"Beide Eingaben werden miteinander verglichen. Sie müssen übereinstimmen, "
+"damit das Passwort geändert wird."
+
+#: passwd.1.xml:98(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+"Anschließend wird das Passwort auf seine Komplexität überprüft. Eine "
+"allgemeine Richtlinie ist, dass Passwörter aus sechs bis acht Zeichen "
+"bestehen sollten und ein oder mehrere Zeichen aus folgenden Mengen enthalten "
+"sollten:"
+
+#: passwd.1.xml:106(para)
+msgid "lower case alphabetics"
+msgstr "Kleinbuchstaben"
+
+#: passwd.1.xml:109(para)
+msgid "digits 0 thru 9"
+msgstr "Ziffern 0 bis 9"
+
+#: passwd.1.xml:112(para)
+msgid "punctuation marks"
+msgstr "Satzzeichen"
+
+#: passwd.1.xml:116(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+"Seien Sie vorsichtig, dass Sie nicht die standardmäßigen Lösch- und Kill-"
+"Zeichen des Systems eingeben. <command>passwd</command> weist Passwörter "
+"zurück, die nicht hinreichend komplex sind."
+
+#: passwd.1.xml:125(title)
+msgid "Hints for user passwords"
+msgstr "Hinweise zu Benutzerpasswörtern"
+
+#: passwd.1.xml:126(para)
+#, fuzzy
+#| msgid ""
+#| "The security of a password depends upon the strength of the encryption "
+#| "algorithm and the size of the key space. The <emphasis>UNIX</emphasis> "
+#| "System encryption method is based on the NBS DES algorithm and is very "
+#| "secure. The size of the key space depends upon the randomness of the "
+#| "password which is selected."
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+"Die Sicherheit eines Passworts hängt von der Stärke des "
+"Verschlüsselungsalgorithmus und von der Größe des Schlüsselraums ab. Die "
+"Verschlüsselung auf <emphasis>UNIX</emphasis>-Systemen basiert auf dem NBS-"
+"DES-Algorithmus und ist sehr sicher. Die Größe des Schlüsselraums hängt von "
+"der Zufälligkeit des gewählten Passworts ab."
+
+#: passwd.1.xml:135(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+"Gefahren für die Sicherheit von Passwörtern kommen gewöhnlich von sorgloser "
+"Wahl oder Handhabung des Passworts. Daher sollten Sie kein Passwort wählen, "
+"das in einem Wörterbuch auftaucht oder das aufgeschrieben werden muss. Das "
+"Passwort sollte somit kein echter Name, Ihr Autokennzeichen, Geburtstag oder "
+"Ihre Adresse sein. All das kann dazu verwendet werden, das Passwort zu "
+"erraten, und stellt daher eine Gefahr für die Sicherheit Ihres Systems dar."
+
+#: passwd.1.xml:144(para)
+msgid ""
+"You can find advices on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+
+#: passwd.1.xml:153(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>passwd</command> unterstützt werden, "
+"sind:"
+
+#: passwd.1.xml:158(term) faillog.8.xml:71(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: passwd.1.xml:162(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+"Diese Option kann nur in Verbindung mit <option>-S</option> verwendet werden "
+"und führt dazu, dass der Status aller Benutzer angezeigt wird."
+
+#: passwd.1.xml:169(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: passwd.1.xml:173(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+"Löscht das Passwort eines Benutzers (macht es leer). Dies ist ein schneller "
+"Weg, um das Passwort eines Kontos zu deaktivieren. Dem Konto ist dann kein "
+"Passwort zugeordnet."
+
+#: passwd.1.xml:181(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+#: passwd.1.xml:185(para)
+msgid ""
+"Immediately expire an account's password. This in effect can force a user to "
+"change his/her password at the user's next login."
+msgstr ""
+"Lässt das Passwort eines Kontos sofort verfallen. Im Ergebnis kann damit "
+"erreicht werden, dass ein Benutzer beim nächsten Login das Passwort ändern "
+"muss."
+
+#: passwd.1.xml:198(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option><replaceable>INAKTIV</"
+"replaceable>"
+
+#: passwd.1.xml:202(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+"Mit dieser Option wird ein Konto deaktiviert, nachdem das Passwort für eine "
+"bestimmte Anzahl von Tagen abgelaufen ist. Wenn ein Benutzerkonto ein "
+"abgelaufenes Passwort für länger als <replaceable>INAKTIV</replaceable> Tage "
+"hatte, kann sich der Benutzer nicht mehr auf diesem Konto anmelden."
+
+#: passwd.1.xml:211(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+# FIXME: Übersetzung, die näher am Original ist (tokens). sb\r
+#: passwd.1.xml:215(para)
+#, fuzzy
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+"Zeigt an, dass eine Änderung des Passworts nur für abgelaufene Passwörter "
+"durchgeführt werden soll. Der Benutzer möchte seine gültigen Passwörter "
+"behalten."
+
+#: passwd.1.xml:223(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+#: passwd.1.xml:227(para)
+#, fuzzy
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+"Sperrt das bezeichnete Konto. Die Option schaltet ein Konto ab, indem es ein "
+"Passwort zuweist, das mit keinem möglichen verschlüsselten Wert "
+"übereinstimmen kann."
+
+#: passwd.1.xml:233(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+
+#: passwd.1.xml:240(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr ""
+
+#: passwd.1.xml:247(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-n</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_TAGE</"
+"replaceable>"
+
+#: passwd.1.xml:251(para) chage.1.xml:142(para)
+msgid ""
+"Set the minimum number of days between password changes to "
+"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
+"indicates that the user may change his/her password at any time."
+msgstr ""
+"Setzt die Anzahl von Tagen, die mindestens zwischen zwei Änderungen eines "
+"Passworts vergehen müssen, auf <replaceable>MIN_TAGE</replaceable>. Ein Wert "
+"von Null in diesem Feld bedeutet, dass der Benutzer sein Passwort jederzeit "
+"ändern darf."
+
+#: passwd.1.xml:269(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option><replaceable>REPOSITORY</"
+"replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--repository</"
+"option><replaceable>PASSWORTDEPOT</replaceable>"
+
+#: passwd.1.xml:273(para)
+#, fuzzy
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr "Ändert das Passwort im Depot <replaceable>PASSWORTDEPOT</replaceable>."
+
+#: passwd.1.xml:279(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+#: passwd.1.xml:283(para)
+#, fuzzy
+#| msgid ""
+#| "Display account status information. The status information consists of 7 "
+#| "fields. The first field is the user's login name. The second field "
+#| "indicates if the user account is locked (L), has no password (NP), or has "
+#| "a usable password (P). The third field gives the date of the last "
+#| "password change. The next four fields are the minimum age, maximum age, "
+#| "warning period, and inactivity period for the password. These ages are "
+#| "expressed in days."
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+"Zeigt Informationen über den Kontostatus an. Die Statusinformation besteht "
+"aus sieben Feldern. Das erste Feld ist der Login-Name des Benutzers. Das "
+"zweite Feld zeigt an, ob das Benutzerkonto gesperrt ist (L), kein Passwort "
+"hat (NP) oder ein verwendbares Passwort hat (P). Das dritte Feld zeigt das "
+"Datum der letzten Änderung des Passworts an. Die nächsten vier Felder sind "
+"das Mindestalter, das Höchstalter, die Dauer der Warnung und die Dauer der "
+"Untätigkeit für das Passwort. Die Zeiträume werden in Tagen ausgedrückt."
+
+#: passwd.1.xml:297(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+#: passwd.1.xml:301(para)
+#, fuzzy
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+"Entsperrt das bezeichnete Konto. Diese Option reaktiviert ein Konto wieder, "
+"indem das Passwort auf seinen alten Wert, den es hatte, bevor die Option "
+"<option>-l</option> verwendet wurde, zurückgesetzt wird."
+
+#: passwd.1.xml:310(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option><replaceable>WARN_TAGE</"
+"replaceable>"
+
+#: passwd.1.xml:314(para)
+msgid ""
+"Set the number of days of warning before a password change is required. The "
+"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
+"the password expiring that a user will be warned that his/her password is "
+"about to expire."
+msgstr ""
+"Legt die Anzahl der Tage fest, an denen der Benutzer eine Warnung erhält, "
+"bevor sein Passwort ungültig wird. Die Option <replaceable>WARN_TAGE</"
+"replaceable> bezeichnet die Anzahl der Tage, für die ein Benutzer vor "
+"Verfall seines Passworts gewarnt wird."
+
+#: passwd.1.xml:323(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-x</option>, <option>--maxdays</option><replaceable>MAX_TAGE</"
+"replaceable>"
+
+#: passwd.1.xml:327(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+"Bestimmt die maximale Anzahl von Tagen, die das Passwort gültig bleibt. Nach "
+"<replaceable>MAX_TAGE</replaceable> Tagen muss das Passwort geändert werden."
+
+#: passwd.1.xml:339(para)
+#, fuzzy
+#| msgid ""
+#| "Not all options may be supported. Password complexity checking may vary "
+#| "from site to site. The user is urged to select a password as complex as "
+#| "he or she feels comfortable with. Users may not be able to change their "
+#| "password on a system if NIS is enabled and they are not logged into the "
+#| "NIS server."
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+"Es kann sein, dass einige Optionen nicht unterstützt werden. Die Komplexität "
+"der Passwortprüfung kann sich auf verschiedenen Systemen unterscheiden. Der "
+"Benutzer wird angehalten, ein möglichst komplexes Passwort zu wählen, soweit "
+"es ihm angenehm ist. Benutzer können unter Umständen ihr Passwort nicht "
+"ändern, wenn auf dem System NIS aktiviert ist, sie aber nicht am NIS-Server "
+"angemeldet sind."
+
+#: passwd.1.xml:344(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+
+#: passwd.1.xml:349(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr ""
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid "<replaceable>DES</replaceable> (default)"
+msgstr ""
+
+#: passwd.1.xml:43(replaceable) newusers.8.xml:43(replaceable)
+#: login.defs.5.xml:43(replaceable) gpasswd.1.xml:43(replaceable)
+#: chpasswd.8.xml:43(replaceable) chgpasswd.8.xml:43(replaceable)
+msgid "MD5"
+msgstr ""
+
+#: passwd.1.xml:46(replaceable) newusers.8.xml:46(replaceable)
+#: login.defs.5.xml:46(replaceable) gpasswd.1.xml:46(replaceable)
+#: chpasswd.8.xml:46(replaceable) chgpasswd.8.xml:46(replaceable)
+msgid "SHA256"
+msgstr ""
+
+#: passwd.1.xml:49(replaceable) newusers.8.xml:49(replaceable)
+#: login.defs.5.xml:49(replaceable) gpasswd.1.xml:49(replaceable)
+#: chpasswd.8.xml:49(replaceable) chgpasswd.8.xml:49(replaceable)
+msgid "SHA512"
+msgstr ""
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid "It can take one of these values: <placeholder-1/>"
+msgstr ""
+
+#: passwd.1.xml:53(para) newusers.8.xml:53(para) login.defs.5.xml:53(para)
+#: gpasswd.1.xml:53(para) chpasswd.8.xml:53(para) chgpasswd.8.xml:53(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+
+#: passwd.1.xml:57(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:57(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:57(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:57(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:57(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:57(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superceded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "PASS_WARN_AGE (Zahl)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "PASS_MAX_DAYS (Zahl)"
+
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "PASS_MIN_DAYS (Zahl)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your crypt"
+"() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999999999 range."
+msgstr ""
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+
+#: passwd.1.xml:395(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/passwd"
+
+#: passwd.1.xml:397(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr ""
+
+#: passwd.1.xml:417(para) chage.1.xml:241(para)
+msgid "permission denied"
+msgstr "Berechtigung verweigert"
+
+#: passwd.1.xml:423(para)
+msgid "invalid combination of options"
+msgstr "ungültige Kombination von Optionen"
+
+#: passwd.1.xml:429(para)
+msgid "unexpected failure, nothing done"
+msgstr "unerwarteter Fehler, nichts wurde verändert"
+
+#: passwd.1.xml:435(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr "unerwarteter Fehler, die Datei <filename>passwd</filename> fehlt"
+
+#: passwd.1.xml:441(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr ""
+"Datei <filename>passwd</filename> wird benutzt, bitte nochmal versuchen"
+
+#: passwd.1.xml:405(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>passwd</command> gibt beim Beenden folgende Werte "
+"zurück: <placeholder-1/>"
+
+#: passwd.1.xml:456(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+"\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: nologin.8.xml:34(refentrytitle) nologin.8.xml:39(refname)
+#: nologin.8.xml:45(command)
+msgid "nologin"
+msgstr "nologin"
+
+#: nologin.8.xml:40(refpurpose)
+msgid "politely refuse a login"
+msgstr "lehnt höflich eine Anmeldung ab"
+
+#: nologin.8.xml:51(para)
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+"Der Befehl <command>nologin</command> zeigt die Meldung an, dass ein Konto "
+"nicht verfügbar ist, und gibt eine Wert von ungleich Null zurück. Dies ist "
+"als Einsatz für das Shell-Feld bei abgeschalteten Konten vorgesehen."
+
+#: nologin.8.xml:56(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"Wie Sie alle Konten abschalten, erfahren Sie unter "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+#: nologin.8.xml:65(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# SB: English manual should be "HISTORY"\r
+#: nologin.8.xml:76(title)
+#, fuzzy
+#| msgid "HYSTORY"
+msgid "HISTORY"
+msgstr "GESCHICHTE"
+
+#: nologin.8.xml:77(para)
+#, fuzzy
+#| msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgid "The <command>nologin</command> command appearred in BSD 4.4."
+msgstr "Der Befehl <command>nologin</command> tauchte erstmal in BSD 4.4 auf."
+
+#: newusers.8.xml:50(refentrytitle) newusers.8.xml:55(refname)
+#: newusers.8.xml:61(command) login.defs.5.xml:353(term)
+msgid "newusers"
+msgstr "newusers"
+
+#: newusers.8.xml:56(refpurpose)
+msgid "update and create new users in batch"
+msgstr "erstellt oder aktualisiert mehrere neue Benutzer am Stück"
+
+#: newusers.8.xml:64(replaceable)
+msgid "new_users"
+msgstr "neue_benutzer"
+
+#: newusers.8.xml:71(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>newusers</command> command reads a file of user name and "
+#| "clear-text password pairs and uses this information to update a group of "
+#| "existing users or to create new users. Each line is in the same format as "
+#| "the standard password file (see <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the following "
+#| "exceptions:"
+msgid ""
+"The <command>newusers</command> command reads a file of user name and clear-"
+"text password pairs and uses this information to update a group of existing "
+"users or to create new users. Each line is in the same format as the "
+"standard password file (see <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the exceptions "
+"explained below:"
+msgstr ""
+"Der Befehl <command>newusers</command> verwendet eine Datei mit "
+"Benutzernamen und entsprechenden Klartext-Passwörtern und aktualisiert damit "
+"eine Gruppe bestehender Benutzer oder erstellt damit neue Benutzer. Jede "
+"Zeile hat dasselbe Format wie die übliche Passwortdatei (vergleiche "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>) mit den folgenden Ausnahmen:"
+
+#: newusers.8.xml:79(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr ""
+
+#: newusers.8.xml:84(emphasis)
+#, fuzzy
+#| msgid "group_name"
+msgid "pw_name"
+msgstr "Gruppen_Name"
+
+#: newusers.8.xml:87(para)
+msgid "This is the name of the user."
+msgstr ""
+
+#: newusers.8.xml:90(para)
+msgid ""
+"It can be the name of a new user or the name of an existing user (or an user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+
+#: newusers.8.xml:101(emphasis)
+msgid "pw_passwd"
+msgstr "pw_passwd"
+
+#: newusers.8.xml:104(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+"Dieses Feld wird verschlüsselt und als neuer Wert für das verschlüsselte "
+"Passwort verwendet."
+
+#: newusers.8.xml:112(emphasis)
+#, fuzzy
+#| msgid "pw_gid"
+msgid "pw_uid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:115(para)
+msgid "This field is used to define the UID of the user."
+msgstr ""
+
+#: newusers.8.xml:118(para)
+msgid ""
+"If the field is empty, an new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:122(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr ""
+
+#: newusers.8.xml:126(para)
+msgid ""
+"If this field contains the name of an existing user (or the name of an user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+
+#: newusers.8.xml:132(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+
+#: newusers.8.xml:140(emphasis)
+msgid "pw_gid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:143(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:146(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:152(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+
+#: newusers.8.xml:158(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+
+#: newusers.8.xml:164(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created earlier wbefore by <command>newusers</command>), a new group will be "
+"created with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and Gs the ID for the new group."
+msgstr ""
+
+#: newusers.8.xml:176(emphasis)
+msgid "pw_gecos"
+msgstr ""
+
+#: newusers.8.xml:179(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr ""
+
+#: newusers.8.xml:186(emphasis)
+msgid "pw_dir"
+msgstr "pw_dir"
+
+#: newusers.8.xml:189(para)
+msgid "This field is used to define the home directory of the user."
+msgstr ""
+
+#: newusers.8.xml:192(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+
+#: newusers.8.xml:197(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+
+#: newusers.8.xml:207(emphasis)
+msgid "pw_shell"
+msgstr ""
+
+#: newusers.8.xml:210(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+
+#: newusers.8.xml:218(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+
+#: newusers.8.xml:224(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+
+#: newusers.8.xml:232(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+"Dieser Befehl ist für den Einsatz in großen Umgebungen vorgesehen, wo viele "
+"Konten gleichzeitig aktualisiert werden müssen."
+
+#: newusers.8.xml:240(para)
+#, fuzzy
+#| msgid ""
+#| "The options which apply to the <command>usermod</command> command are:"
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>usermod</command> unterstützt werden, "
+"sind:"
+
+#: newusers.8.xml:245(term) chpasswd.8.xml:116(term) chgpasswd.8.xml:95(term)
+#, fuzzy
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: newusers.8.xml:247(para) chpasswd.8.xml:118(para) chgpasswd.8.xml:97(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:248(para) chpasswd.8.xml:122(para) chgpasswd.8.xml:101(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+
+#: newusers.8.xml:270(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are choosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: newusers.8.xml:284(term) chpasswd.8.xml:154(term) chgpasswd.8.xml:129(term)
+#, fuzzy
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:156(para) chgpasswd.8.xml:131(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:289(para) chpasswd.8.xml:159(para) chgpasswd.8.xml:134(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+
+#: newusers.8.xml:293(para) chpasswd.8.xml:163(para) chgpasswd.8.xml:138(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+
+#: newusers.8.xml:297(para) chpasswd.8.xml:167(para) chgpasswd.8.xml:142(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+
+#: newusers.8.xml:301(para) chpasswd.8.xml:171(para) chgpasswd.8.xml:146(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: newusers.8.xml:313(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+"Die Eingabedatei muss geschützt werden, da sie unverschlüsselte Passwörter "
+"enthält."
+
+#: newusers.8.xml:317(para) chpasswd.8.xml:187(para) chgpasswd.8.xml:162(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+
+#: newusers.8.xml:390(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/passwd"
+
+#: newusers.8.xml:392(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:400(para)
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: newgrp.1.xml:38(refentrytitle) newgrp.1.xml:43(refname)
+#: newgrp.1.xml:49(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+#: newgrp.1.xml:44(refpurpose)
+msgid "log in to a new group"
+msgstr "als neue Gruppe anmelden"
+
+#: newgrp.1.xml:50(replaceable) grpck.8.xml:51(replaceable)
+#: grpck.8.xml:60(replaceable) groupdel.8.xml:51(replaceable)
+#: groupadd.8.xml:58(replaceable) gpasswd.1.xml:66(replaceable)
+msgid "group"
+msgstr "Gruppe"
+
+#: newgrp.1.xml:56(para)
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+"Mit dem Befehl <command>newgrp</command> kann während einer Login-Sitzung "
+"die aktuelle Gruppen-ID geändert werden. Wenn zusätzlich der Schalter "
+"<option>-</option> angegeben wird, wird die Benutzerumgebung neu gestartet, "
+"so als ob sich der Benutzer angemeldet hätte. Anderenfalls bleibt die "
+"aktuelle Umgebung einschließlich des aktuellen Arbeitsverzeichnisses "
+"unverändert."
+
+# SB: Übersetzung von "groupset"?\r
+#: newgrp.1.xml:64(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+"<command>newgrp</command> wechselt von der aktuellen echten Gruppen-ID zu "
+"der angegeben Gruppe oder, falls kein Gruppenname angegeben wird, so der "
+"Standardgruppe, wie sie in <filename>/etc/passwd</filename> festgelegt ist. "
+"Zudem versucht <command>newgrp</command>, die Gruppe der Gruppensammlung des "
+"Benutzers hinzuzufügen. Wenn der Benutzer kein Passwort (in <filename>/etc/"
+"shadow</filename>, falls er einen Eintrag in der Shadow-Passwort-Datei hat, "
+"anderenfalls in <filename>/etc/passwd</filename>), die Gruppe aber eines "
+"hat, oder wenn der Benutzer nicht Mitglied der Gruppe ist und die Gruppe ein "
+"Passwort besitzt, und der Benutzer nicht Root ist, wird er nach einem "
+"Passwort gefragt. Der Zugriff wird verweigert, wenn das Gruppenpasswort leer "
+"ist und der Benutzer nicht Gruppenmitglied ist."
+
+#: newgrp.1.xml:78(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+"Wenn sich in <filename>/etc/gshadow</filename> ein Eintrag für diese Gruppe "
+"befindet, wird die Mitgliederliste und das Passwort dieser Gruppe dieser "
+"Datei entnommen. Anderenfalls ist der Eintrag in <filename>/etc/group</"
+"filename> relevant."
+
+#: newgrp.1.xml:130(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: logoutd.8.xml:34(refentrytitle) logoutd.8.xml:39(refname)
+#: logoutd.8.xml:45(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+# SB: Sollte das nicht mit einem kleinen "e" geschrieben werden?\r
+#: logoutd.8.xml:40(refpurpose)
+msgid "Enforce login time restrictions"
+msgstr "Richtet Beschränkung von Login-Zeiten ein"
+
+# SB: /etc/rc is not in Debian. Probably doesn't matter, since logoutd is not in Debian either.\r
+#: logoutd.8.xml:51(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+"<command>logoutd</command> setzt die Login-Zeiten und Portbeschränkungen aus "
+"<filename>/etc/porttime</filename> um. <command>logoutd</command> sollte aus "
+"<filename>/etc/rc</filename> gestartet werden. Die Datei <filename>/var/run/"
+"utmp</filename> wird regelmäßig abgerufen, wobei jeder Benutzername darauf "
+"überprüft wird, ob er für den jeweiligen Port zur jeweiligen Zeit zugelassen "
+"ist. Alle Login-Sessions, die gegen die Beschränkungen in <filename>/etc/"
+"porttime</filename> verstoßen, werden beendet."
+
+#: logoutd.8.xml:73(filename) login.1.xml:319(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+#: logoutd.8.xml:75(para) login.1.xml:321(para)
+msgid "List of current login sessions."
+msgstr "Liste der aktuellen Login-Sitzungen."
+
+#: login.defs.5.xml:97(refentrytitle) login.defs.5.xml:102(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+# SB: Übersetzung von "suite configuration"?\r
+#: login.defs.5.xml:103(refpurpose)
+msgid "shadow password suite configuration"
+msgstr "Suite-Konfiguration für Shadow-Passwörter"
+
+# SB: dito\r
+#: login.defs.5.xml:108(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+"Die Datei <filename>/etc/login.defs</filename> legt die systemspezifische "
+"Konfiguration für die Shadow-Passwort-Suite fest. Diese Datei ist notwendig. "
+"Wenn sie fehlt, wird das System dennoch laufen, es werden aber unerwünschte "
+"Ergebnisse auftauchen."
+
+#: login.defs.5.xml:115(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+"Diese Datei ist eine lesbare Textdatei. Jede Zeile der Datei beschreibt "
+"einen Konfigurationsparameter. Eine Zeile besteht aus einem "
+"Konfigurationsnamen und einem Wert, die durch ein Leerzeichen getrennt sind. "
+"Leer- und Kommentarzeilen werden nicht beachtet. Kommentare werden mit dem "
+"Rautezeichen \"#\" eingeleitet. Die Raute muss das erste nicht leere Zeichen "
+"der Zeile sein."
+
+#: login.defs.5.xml:123(para)
+#, fuzzy
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+"Die Parameterwerte können aus vier Typen bestehen: Zeichenketten, Boolesh, "
+"Zahlen und lange Zahlen. Eine Zeichenkette kann aus jedem druckbaren Zeichen "
+"bestehen. Ein Boolesh sollte aus \"yes\" oder \"no\" bestehen. Einem anderen "
+"oder unbestimmten Parameter für Boolesh wird der Wert \"no\" zugewiesen. "
+"Zahlen (normale und lange) können aus Dezimalzahlen, Oktalzahlen (beginnen "
+"mit \"0\") oder Hexadezimalzahlen (beginnen mit \"0x\") bestehen. Die "
+"maximale Größe der normalen und langen Zahlenparameter hängt von der "
+"Maschine ab."
+
+#: login.defs.5.xml:138(para)
+msgid "The following configuration items are provided:"
+msgstr "Die folgenden Konfigurationsmöglichkeiten werden angeboten:"
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+#, fuzzy
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"Falls <emphasis remap=\"I\">yes</emphasis>, benötigen die Programme "
+"<command>chfn</command> und <command>chsh</command> Authentifizierung, bevor "
+"sie Veränderungen vornehmen, sofern sie nicht von Root ausgeführt werden."
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "CHFN_RESTRICT (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+#, fuzzy
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+"Der Parameter bestimmt, welcher Wert in dem <emphasis remap=\"I\">gecos</"
+"emphasis>-Feld von <filename>/etc/passwd</filename> von gewöhnlichen "
+"Benutzern mittels des Programms <command>chfn</command> geändert werden "
+"darf. Er kann aus jeder Kombination der Buchstaben <emphasis remap=\"I\">f</"
+"emphasis> ,<emphasis remap=\"I\">r</emphasis>, <emphasis remap=\"I\">w</"
+"emphasis> und <emphasis remap=\"I\">h</emphasis> bestehen. Diese Buchstaben "
+"stehen für den vollen Namen, die Zimmernummer, die geschäftliche "
+"Telefonnummer und die private Telefonnummer. Zum Zweck der "
+"Abwärtskompatibilität entspricht \"yes\" \"rwh\" und \"no\" \"frwh\". Falls "
+"nichts festgelegt wird, kann nur Root Änderungen vornehmen. Die größte "
+"Einschränkung erreicht man, wenn <filename>chfn</filename> nicht mit SUID-"
+"Rechten ausgestattet wird."
+
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+#, fuzzy
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"Falls <emphasis remap=\"I\">yes</emphasis>, benötigen die Programme "
+"<command>chfn</command> und <command>chsh</command> Authentifizierung, bevor "
+"sie Veränderungen vornehmen, sofern sie nicht von Root ausgeführt werden."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "UMASK (Zahl)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+"Der Gruppenname wird vom Namen <replaceable>GRUPPE</replaceable> auf "
+"<replaceable>NEUE_GRUPPE</replaceable> geändert."
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "PASS_MIN_DAYS (Zahl)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "MAIL_DIR (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "MAIL_DIR (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "MAIL_DIR (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "GID_MAX (Zahl)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "GID_MIN (Zahl)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr ""
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overriden by PAM, since the default pam_unix module "
+"has it's own built in of 3 retries. However, this is a safe fallback in case "
+"you are using an authentication module that does not enforce PAM_MAXTRIES."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "GID_MAX (Zahl)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "MAIL_DIR (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+
+#: login.defs.5.xml:181(para)
+#, fuzzy
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+"PASS_MAX_DAYS, PASS_MIN_DAYS und PASS_WARN_AGE werden nur bei der Erstellung "
+"des Kontos verwendet. Änderungen dieser Wert berühren bestehende Konten "
+"nicht."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (Boolesh)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking of time restrictions specified in /etc/porttime."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "MAIL_DIR (Zeichenkette)"
+
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>TTYPERM</option> (string)"
+msgstr "USERDEL_CMD (Zeichenkette)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "MAIL_DIR (Zeichenkette)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ULIMIT</option> (number)"
+msgstr "UID_MIN (Zahl)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr ""
+
+#: login.defs.5.xml:209(title)
+#, fuzzy
+msgid "CROSS REFERENCES"
+msgstr "QUERVERWEIS"
+
+#: login.defs.5.xml:210(para)
+#, fuzzy
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+"Der folgende Querverweis zeigt, welche Programm aus der Shadow-Passwort-"
+"Suite welche Parameter verwenden."
+
+#: login.defs.5.xml:218(term) chfn.1.xml:41(refentrytitle)
+#: chfn.1.xml:46(refname) chfn.1.xml:52(command)
+msgid "chfn"
+msgstr "chfn"
+
+#: login.defs.5.xml:220(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:228(term) chgpasswd.8.xml:42(refentrytitle)
+#: chgpasswd.8.xml:47(refname) chgpasswd.8.xml:53(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:230(para) login.defs.5.xml:260(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:238(term) chpasswd.8.xml:41(refentrytitle)
+#: chpasswd.8.xml:46(refname) chpasswd.8.xml:52(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:240(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:248(term) chsh.1.xml:40(refentrytitle)
+#: chsh.1.xml:45(refname) chsh.1.xml:51(command)
+msgid "chsh"
+msgstr "chsh"
+
+#: login.defs.5.xml:250(para)
+#, fuzzy
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr "CHFN_AUTH CHFN_RESTRICT"
+
+#: login.defs.5.xml:258(term) gpasswd.1.xml:42(refentrytitle)
+#: gpasswd.1.xml:47(refname) gpasswd.1.xml:61(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+#: login.defs.5.xml:268(term) groupadd.8.xml:42(refentrytitle)
+#: groupadd.8.xml:47(refname) groupadd.8.xml:53(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+#: login.defs.5.xml:270(para)
+#, fuzzy
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:277(term) groupdel.8.xml:38(refentrytitle)
+#: groupdel.8.xml:43(refname) groupdel.8.xml:49(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:279(para) login.defs.5.xml:285(para)
+#: login.defs.5.xml:291(para) login.defs.5.xml:298(para)
+#: login.defs.5.xml:304(para) login.defs.5.xml:310(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:283(term) groupmems.8.xml:38(refentrytitle)
+#: groupmems.8.xml:43(refname) groupmems.8.xml:49(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+#: login.defs.5.xml:289(term) groupmod.8.xml:38(refentrytitle)
+#: groupmod.8.xml:43(refname) groupmod.8.xml:49(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+#: login.defs.5.xml:296(term) grpck.8.xml:38(refentrytitle)
+#: grpck.8.xml:43(refname) grpck.8.xml:49(command) grpck.8.xml:58(command)
+msgid "grpck"
+msgstr "grpck"
+
+# SB: Translation of login.1 based on Josef Spillner's (josef@ggzgamingzone.org) from 2003. Mention somewhere else as well?\r
+#: login.defs.5.xml:316(term) login.1.xml:70(refentrytitle)
+#: login.1.xml:75(refname) login.1.xml:81(command) login.1.xml:89(command)
+#: login.1.xml:96(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:318(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS "
+"LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR "
+"MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> "
+"TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</"
+"phrase> USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:345(term)
+#, fuzzy
+#| msgid "newgrp"
+msgid "newgrp / sg"
+msgstr "newgrp"
+
+#: login.defs.5.xml:347(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:355(para)
+#, fuzzy
+msgid ""
+"ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+"SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:371(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:382(para) login.defs.5.xml:390(para)
+msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+
+#: login.defs.5.xml:397(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+
+# SB: Translation of login.1 based on Josef Spillner's (josef@ggzgamingzone.org) from 2003. Mention somewhere else as well?\r
+#: login.defs.5.xml:412(term)
+#, fuzzy
+msgid "sulogin"
+msgstr "login"
+
+#: login.defs.5.xml:414(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:423(para)
+#, fuzzy
+msgid ""
+"CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+"PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN "
+"UID_MAX UID_MIN UMASK"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:436(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:445(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:456(para)
+#, fuzzy
+#| msgid ""
+#| "Much of the functionality that used to be provided by the shadow password "
+#| "suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> "
+#| "is no longer used by programs such as: "
+#| "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>. Please refer to the corresponding PAM configuration files "
+#| "instead."
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+"Ein Großteil der Funktionen, die früher einmal durch die Shadow-Passwort-"
+"Suite angeboten wurde, wird heute durch PAM zur Verfügung gestellt. Daher "
+"wird <filename>/etc/login.defs</filename> nicht länger von Programmen wie "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> oder "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> verwendet. Sie sollten daher in den entsprechenden "
+"Konfigurationsdateien für PAM nachsehen."
+
+#: login.defs.5.xml:472(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: login.access.5.xml:35(refentrytitle) login.access.5.xml:40(refname)
+msgid "login.access"
+msgstr "login.access"
+
+#: login.access.5.xml:41(refpurpose)
+msgid "login access control table"
+msgstr "Tabelle für die Zugangskontrolle zur Anmeldung"
+
+#: login.access.5.xml:46(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+"Die Datei <emphasis remap=\"I\">login.access</emphasis> legt Kombinationen "
+"von (Benutzer, Host) und (Benutzer, tty) fest, für die eine Anmeldung "
+"erlaubt oder abgelehnt wird."
+
+#: login.access.5.xml:52(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+"Wenn sich jemand anmeldet, wird <emphasis remap=\"I\">login.access</"
+"emphasis> nach dem ersten Eintrag durchsucht, auf den die Kombination von "
+"(Benutzer, Host) oder, bei lokalen Anmeldungen, von (Benutzer, Host) "
+"zutrifft. Das Feld für die Erlaubnis bestimmt, ob die Anmeldung zugelassen "
+"oder abgelehnt wird."
+
+#: login.access.5.xml:60(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+"Jede Zeile der Tabelle für die Zugangskontrolle enthält drei Felder, die "
+"jeweils durch einen Doppelpunkt getrennt sind:"
+
+#: login.access.5.xml:65(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">Erlaubnis</emphasis>:<emphasis remap=\"I\">Benutzer</"
+"emphasis>:<emphasis remap=\"I\">Herkunft</emphasis>"
+
+#: login.access.5.xml:69(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+"Das erste Feld sollte das Zeichen \"<emphasis>+</emphasis>\" (Zugriff "
+"erlaubt) oder \"<emphasis>-</emphasis>\" (Zugriff verweigert) sein. Das "
+"zweite Feld sollte eine Liste von einem oder mehreren Login-Namen, "
+"Gruppennamen oder <emphasis>ALL<emphasis> (trifft immer zu) sein. Das dritte "
+"Feld sollte eine Liste von einem oder mehreren tty-Namen (für lokale "
+"Anmeldungen), Host-Namen, Domain-Namen (beginnen mit einem \"<literal>.</"
+"literal>\"), Host-Adressen, Internet-Netzwerk-Nummern (enden mit einem "
+"\"<literal>.</literal>\"), <emphasis>ALL</emphasis> (trifft immer zu) oder "
+"<emphasis>LOCAL</emphasis> (trifft auf alle Zeichenketten zu, die keinen "
+"\"<literal>.</literal>\" enthalten). Falls Sie NIS einsetzen, können Sie in "
+"den Host- und Benutzerangaben auch @netgroupname verwenden."
+
+#: login.access.5.xml:83(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+"Der Operator <emphasis>EXCEPT</emphasis> ermöglicht es, sehr kurze Regeln zu "
+"schreiben."
+
+#: login.access.5.xml:88(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+"Die Gruppendatei wird nur durchsucht, wenn ein Name nicht mit dem des "
+"angemeldeten Benutzers übereinstimmt. Eine Übereinstimmung mit Gruppen wird "
+"nur festgestellt, wenn darin der Benutzer ausdrücklich aufgeführt ist. Das "
+"Programm beachtet also nicht den Wert der Hauptgruppe des Benutzers."
+
+#: login.1.xml:76(refpurpose)
+msgid "begin session on the system"
+msgstr "startet eine Sitzung auf dem System"
+
+#: login.1.xml:82(arg) login.1.xml:90(arg) login.1.xml:97(arg)
+#: login.1.xml:214(option) groupmems.8.xml:54(arg)
+msgid "-p"
+msgstr "-p"
+
+#: login.1.xml:83(replaceable) login.1.xml:91(replaceable)
+#: login.1.xml:98(replaceable)
+msgid "host"
+msgstr "Host"
+
+#: login.1.xml:83(arg) login.1.xml:91(arg) chfn.1.xml:56(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+#: login.1.xml:86(replaceable)
+msgid "ENV=VAR"
+msgstr "ENV=VAR"
+
+#: login.1.xml:92(arg) login.1.xml:192(option) expiry.1.xml:54(arg)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:98(arg) chfn.1.xml:54(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: login.1.xml:104(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>login</command> program is used to establish a new session "
+#| "with the system. It is normally invoked automatically by responding to "
+#| "the <emphasis remap=\"I\">login:</emphasis> prompt on the user's "
+#| "terminal. <command>login</command> may be special to the shell and may "
+#| "not be invoked as a sub-process. Typically, <command>login</command> is "
+#| "treated by the shell as <emphasis remap=\"B\">exec login</emphasis> which "
+#| "causes the user to exit from the current shell. Attempting to execute "
+#| "<command>login</command> from any shell but the login shell will produce "
+#| "an error message."
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+"Das Programm <command>login</command> wird verwendet, um eine neue Sitzung "
+"auf dem System zu starten. Es wird normalerweise automatisch als Antwort auf "
+"den <emphasis remap=\"I\">login:</emphasis>-Prompt auf dem Terminal des "
+"Benutzers ausgeführt. <command>login</command> kann von der Shell besonders "
+"behandelt werden und kann nicht als Subprozess gestartet werden. "
+"Typischerweise wird <command>login</command> von der Shell als <emphasis "
+"remap=\"B\">exec login</emphasis> behandelt, so dass der Benutzer die "
+"aktuelle Shell verlassen muss. Der Versuch, von einer Shell außer der Login-"
+"Shell <command>login</command> auszuführen, wird eine Fehlermeldung erzeugen."
+
+#: login.1.xml:118(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+"Falls  erforderlich, wird der Benutzer anschließend nach einem Passwort "
+"gefragt. Dieses wird während der Eingabe nicht angezeigt. Es sind nur eine "
+"kleine Anzahl von Anmeldeversuchen zulässig, ehe <command>login</command> "
+"abbricht und die Kommunikation getrennt wird."
+
+#: login.1.xml:125(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+"Falls der Passwortverfall für Ihr Konto aktiviert wurde, kann es sein, dass "
+"Sie vor der weiteren Nutzung nach einem neuen Passwort gefragt werden. Sie "
+"müssen Ihr altes und neues Passwort angegeben, bevor fortgefahren werden "
+"kann. In der Dokumentation zu <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> finden sich weitere "
+"Informationen."
+
+#: login.1.xml:134(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+"Nach einer erfolgreichen Anmeldung werden Ihnen Systemmeldungen präsentiert, "
+"sowie das Vorhandensein von Mails angezeigt. Die Anzeige der systemweiten "
+"Nachrichtendatei <filename>/etc/motd</filename> kann abgeschaltet werden, "
+"indem im Login-Verzeichnis eine leere Datei <filename>.hushlogin</filename> "
+"angelegt wird. Je nach Zustand der Mailbox des Benutzers ist die "
+"Mailnachricht entweder \"<emphasis>Sie haben neue Mails.</emphasis>\", "
+"\"<emphasis>Sie haben Mails.</emphasis>\" oder \"<emphasis>Keine Mails.</"
+"emphasis>\"."
+
+#: login.1.xml:145(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+"Die Benutzer- und Gruppen-IDs werden gemäß den Werten in <filename>/etc/"
+"passwd</filename> gesetzt. Die Werte für <envar>$HOME</envar>, <envar>"
+"$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar> und <envar>"
+"$MAIL</envar> werden  ebenfalls entsprechend den Feldern im Passworteintrag "
+"gesetzt. Werte für ulimit, umask und nice können ebenfalls gemäß den Werten "
+"im GECOS-Feld gesetzt werden."
+
+#: login.1.xml:154(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+"Bei einigen Installationen wird anfänglich die Umgebungsvariable <envar>"
+"$TERM</envar> entsprechend dem Terminaltyp Ihrer tty-Zeile, wie sie in "
+"<filename>/etc/ttytype</filename> angegeben ist, gesetzt."
+
+#: login.1.xml:160(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+"Ein  Initialisierungsskript für Ihren Befehls-Interpreter kann auch "
+"ausgeführt werden. Sehen Sie bitte in den entsprechenden Handbuchseiten für "
+"weitere Informationen darüber nach."
+
+#: login.1.xml:172(para) login.1.xml:248(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+"Es liegt NICHT in der Verantwortung von <command>login</command>, Benutzer "
+"aus der utmp-Datei zu entfernen. Sowohl <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> als auch "
+"<citerefentry><refentrytitle>init</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> sind dafür zuständig, die offenkundige Eigentümerschaft einer "
+"Terminalsitzung aufzuräumen. Falls Sie <command>login</command> von der "
+"Shell ohne <command>exec</command> verwenden, wird der Benutzer, den Sie "
+"verwenden, weiterhin als angemeldet erscheinen, obwohl Sie die Subsitzung "
+"abgemeldet haben."
+
+#: login.1.xml:195(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr "Keine Authentifizierung durchführen, Benutzer ist bereits angemeldet."
+
+#: login.1.xml:198(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+
+#: login.1.xml:206(option)
+msgid "-h"
+msgstr "-h"
+
+#: login.1.xml:209(para)
+msgid "Name of the remote host for this login."
+msgstr "Name des entfernten Rechners für die Anmeldung."
+
+#: login.1.xml:217(para)
+msgid "Preserve environment."
+msgstr "Behalte die Umgebungseinstellungen bei."
+
+#: login.1.xml:225(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr "Führe das Autologin-Protokoll für rlogin aus."
+
+#: login.1.xml:230(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+" Die Optionen <option>-r</option>, <option>-h</option> und <option>-f</"
+"option> können nur verwendet werden, wenn <command>login</command> von Root "
+"ausgeführt wird."
+
+#: login.1.xml:239(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Diese Version von <command>login</command> hat viele Optionen für die "
+"Kompilierung, davon sind eventuell nur einige auf bestimmten Systemen in "
+"Gebrauch."
+
+#: login.1.xml:244(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr ""
+"Der Ort der Konfigurationsdateien kann entsprechend der Systemkonfiguration "
+"abweichen."
+
+# SB: In English version it should be "mechanism".\r
+#: login.1.xml:260(para)
+#, fuzzy
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+"Wie bei jedem anderen Programm kann auch das Erscheinungsbild von "
+"<command>login</command> vorgespielt werden. Falls Benutzer, denen nicht "
+"vertraut werden kann, physischen Zugriff auf den Rechner haben, kann dies "
+"von einem Angreifer verwendet werden, um das Passwort der nächsten Person zu "
+"erhalten, die vor dem Rechner sitzt. In Linux kann der SAK-Mechanismus von "
+"den Benutzern verwendet werden, um einen vertrauenswürdigen Pfad zu "
+"erstellen und somit diesem Angriff zu entgehen."
+
+#: login.1.xml:325(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+#: login.1.xml:327(para)
+msgid "List of previous login sessions."
+msgstr "Liste der vorangegangenen Login-Sitzungen"
+
+#: login.1.xml:343(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+#: login.1.xml:345(para)
+msgid "System message of the day file."
+msgstr "Datei mit der Systemmeldung des Tages."
+
+#: login.1.xml:349(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+#: login.1.xml:351(para)
+msgid "Prevent non-root users from logging in."
+msgstr "Verhindert, dass sich Benutzer außer Root anmelden."
+
+#: login.1.xml:355(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+#: login.1.xml:357(para)
+msgid "List of terminal types."
+msgstr "Liste der Terminaltypen."
+
+#: login.1.xml:361(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+#: login.1.xml:363(para)
+msgid "Suppress printing of system messages."
+msgstr "Unterdrückt die Ausgabe von Systemnachrichten."
+
+#: login.1.xml:377(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: limits.5.xml:35(refentrytitle) limits.5.xml:40(refname)
+msgid "limits"
+msgstr "limits"
+
+#: limits.5.xml:41(refpurpose)
+msgid "resource limits definition"
+msgstr "Festlegung von Resourcenbeschränkungen"
+
+#: limits.5.xml:47(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+"Die <emphasis remap=\"I\">limits</emphasis>-Datei (standardmäßig <filename>/"
+"etc/limits</filename> oder welche durch LIMITS_FILE von <filename>config.h</"
+"filename> festgelegt wurde) bezeichnet die Ressourcen-Beschränkungen, die "
+"Sie auferlegen wollen."
+
+#: limits.5.xml:55(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+"Standardmäßig bestehen für Root keine Einschränkungen. Tatsächlich gibt es "
+"keine Möglichkeit, mit diesem Verfahren Root-Konten (Konten mit der UID 0) "
+"Beschränkungen aufzuerlegen."
+
+#: limits.5.xml:61(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr ""
+"Jede Zeile beschreibt eine Beschränkung für einen Benutzer in der Form:"
+
+#: limits.5.xml:64(emphasis)
+msgid "user LIMITS_STRING"
+msgstr "Benutzer LIMITS_STRING"
+
+#: limits.5.xml:67(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+"Die <emphasis>LIMITS_STRING</emphasis> ist eine Kette von Ressourcen-"
+"Beschränkungen. Jede Beschränkung besteht aus einer Buchstabenkennung, der "
+"eine zahlenmäßige Beschränkung folgt."
+
+#: limits.5.xml:73(para)
+msgid "The valid identifiers are:"
+msgstr "Gültige Kennungen sind:"
+
+#: limits.5.xml:76(para)
+msgid "A: max address space (KB)"
+msgstr "A: maximaler Adressraum (KB)"
+
+# SB: Uebersetzung von "core file"?\r
+#: limits.5.xml:77(para)
+msgid "C: max core file size (KB)"
+msgstr "C: maximale Größe der Speicherabbild-Datei"
+
+#: limits.5.xml:78(para)
+msgid "D: max data size (KB)"
+msgstr "D: maximale Datengröße "
+
+#: limits.5.xml:79(para)
+msgid "F: maximum filesize (KB)"
+msgstr "F: maximale Dateigröße (KB)"
+
+#: limits.5.xml:80(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr "M: maximaler gesperrter Adressbereich im Speicher (KB)"
+
+#: limits.5.xml:81(para)
+msgid "N: max number of open files"
+msgstr "N: maximale Anzahl offener Dateien"
+
+# SB: Ich habe keine Ahnung, was das bedeuten soll!\r
+#: limits.5.xml:82(para)
+msgid "R: max resident set size (KB)"
+msgstr "R: maximale residente Satzgröße"
+
+#: limits.5.xml:83(para)
+msgid "S: max stack size (KB)"
+msgstr "S: maximale Größe des Stapelverarbeitungsspeichers (KB)"
+
+#: limits.5.xml:84(para)
+msgid "T: max CPU time (MIN)"
+msgstr "T: maximale CPU-Zeit (Min)"
+
+#: limits.5.xml:85(para)
+msgid "U: max number of processes"
+msgstr "U: maximale Anzahl von Prozessen"
+
+#: limits.5.xml:86(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"K: Maske für die Dateierstellung, wird von "
+"<citerefentry><refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum></"
+"citerefentry> gesetzt."
+
+#: limits.5.xml:91(para)
+msgid "L: max number of logins for this user"
+msgstr "L: maximale Anzahl von Logins für diesen Benutzer"
+
+#: limits.5.xml:92(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"P: Prozesspriorität, wird von <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry> gesetzt."
+
+#: limits.5.xml:97(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+
+#: limits.5.xml:99(para)
+msgid "O: max real time priority"
+msgstr ""
+
+# SB: "LIMITS_STRING" übersetzen?\r
+#: limits.5.xml:102(para)
+#, fuzzy
+#| msgid ""
+#| "For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+#| "<emphasis>LIMITS_STRING </emphasis>. For reading convenience, the "
+#| "following entries are equivalent:"
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+"Zum Beispiel ist <emphasis remap=\"I\">L2D2048N5</emphasis> eine gültige "
+"<emphasis>LIMITS_STRING </emphasis>. Um das Lesen zu erleichtern, werden "
+"folgende Einträge gleich behandelt:"
+
+#: limits.5.xml:108(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"      username L2D2048N5\n"
+"      username L2 D2048 N5\n"
+"    "
+msgstr ""
+"\n"
+"      Benutzername L2D2048N5\n"
+"      Benutzername L2 D2048 N5\n"
+"    "
+
+#: limits.5.xml:113(para)
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. A "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+"Beachten Sie, dass nach <emphasis remap=\"I\">Benutzername</emphasis> die "
+"übrige Zeile als Zeichenkette für Beschränkungen angesehen wird. Kommentare "
+"sind daher nicht zulässig. Eine ungültige Zeichenkette wird von "
+"<command>login</command> ignoriert."
+
+#: limits.5.xml:120(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+"Standardwerte werden mit dem Benutzernamen \"<emphasis>*</emphasis>\" "
+"festgelegt. Falls Sie mehrfach <emphasis remap=\"I\">Standard</emphasis>-"
+"Werte in Ihrer <emphasis>LIMITS_FILE</emphasis> bestimmen, wird nur der "
+"letzte beachtet."
+
+#: limits.5.xml:127(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+"Mit einem Gedankenstrich \"<emphasis>-</emphasis>\" können Sie alle "
+"Beschränkungen für einen Benutzer zu entfernen."
+
+# SB: Well, there is PAM with /etc/security/limits.conf\r
+#: limits.5.xml:132(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+"Berücksichtigen Sie auch, dass alle Beschränkungen nur JE ANMELDUNG gelten. "
+"Sie sind nicht global und auch nicht dauerhaft. Vielleicht wird es einmal "
+"globale Beschränkungen geben, für jetzt muss dies aber reichen ;)"
+
+#: limits.5.xml:143(filename)
+msgid "/etc/limits"
+msgstr "/etc/limits"
+
+#: limits.5.xml:151(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: lastlog.8.xml:35(refentrytitle) lastlog.8.xml:40(refname)
+#: lastlog.8.xml:46(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: lastlog.8.xml:41(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr "berichtet die letzte Anmeldung für alle oder einen bestimmten Benutzer"
+
+#: lastlog.8.xml:55(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+"<command>lastlog</command> formatiert und gibt den Inhalt der Datei mit den "
+"letzten Anmeldungen, <filename>/var/log/lastlog</filename>, aus. Der "
+"<emphasis>Login-Name</emphasis>, der <emphasis>Port</emphasis> und der "
+"<emphasis>Zeitpunkt der letzten Anmeldung</emphasis> werden angezeigt. "
+"Standardmäßig (keine Optionen) werden die Lastlog-Einträge in ihrer "
+"Reihenfolge, in der sie sich in <filename>/etc/passwd</filename> befinden, "
+"ausgegeben."
+
+#: lastlog.8.xml:67(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>lastlog</command> unterstützt werden, "
+"sind:"
+
+#: lastlog.8.xml:72(term)
+msgid ""
+"<option>-b</option>, <option>--before</option><replaceable>DAYS</replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--before</option><replaceable>TAGE</replaceable>"
+
+#: lastlog.8.xml:76(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+"Gibt nur Lastlog-Einträge aus, die älter als <emphasis remap=\"I\">TAGE</"
+"emphasis> sind."
+
+#: lastlog.8.xml:90(term) faillog.8.xml:140(term)
+msgid ""
+"<option>-t</option>, <option>--time</option><replaceable>DAYS</replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>TAGE</replaceable>"
+
+#: lastlog.8.xml:95(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+"Gibt nur Lastlog-Einträge aus, die neuer als <emphasis remap=\"I\">TAGE</"
+"emphasis> sind."
+
+#: lastlog.8.xml:102(term) faillog.8.xml:151(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option><replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-u</option>, <option>--user</option><replaceable>LOGIN</replaceable>|"
+"<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option><replaceable>SCHLÜSSEL</"
+"replaceable>=<replaceable>WERT</replaceable>"
+
+#: lastlog.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "Print the lastlog record for user with specified <emphasis remap=\"I"
+#| "\">LOGIN</emphasis> only."
+msgid "Print the lastlog record of the specified user(s)."
+msgstr ""
+"Gibt nur die Lastlog-Einträge für den Benutzer aus, der mit <emphasis remap="
+"\"I\">NAME</emphasis> festgelegt wurde."
+
+#: lastlog.8.xml:110(para) faillog.8.xml:161(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+
+#: lastlog.8.xml:122(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+"Wenn sich ein Benutzer noch nie angemeldet hat, wird die Meldung "
+"<emphasis>** Never logged in**</emphasis> anstatt von Port und Zeit "
+"angezeigt."
+
+#: lastlog.8.xml:127(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+
+#: lastlog.8.xml:135(title) groups.1.xml:65(title) chsh.1.xml:106(title)
+#: chage.1.xml:193(title)
+msgid "NOTE"
+msgstr "ANMERKUNGEN"
+
+# SB: Übersetzung von "rotate", "sparse file"? Plus, I don't get the high UID stuff.\r
+#: lastlog.8.xml:136(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+"Bei der Datei <filename>lastlog</filename> handelt es sich um eine "
+"Datenbank, die Informationen zur letzten Anmeldung der Benutzer enthält. Sie "
+"sollten sie nicht austauschen. Der Dateiinhalt ist karg, so dass die "
+"tatsächliche Größe auf dem Speichermedium gewöhnlich viel kleiner ist als "
+"von \"<command>ls -l</command>\" angezeigt wird (was auf eine sehr große "
+"Datei hindeuten kann, wenn sich Benutzer mit einer großen UID in "
+"<filename>passwd</filename> befinden). Die wirkliche Dateigröße lässt sich "
+"mit \"<command>ls -s</command>\" anzeigen."
+
+#: lastlog.8.xml:150(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+#: lastlog.8.xml:152(para)
+msgid "Database times of previous user logins."
+msgstr "Datenbank mit Zeiten der letzten Anmeldung der Benutzer."
+
+#: lastlog.8.xml:160(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+"Große Lücken in den UID-Zahlen haben zur Folge, dass das Lastlog-Programm "
+"längere Zeit ohne Bildschirmausgabe läuft. Wenn sich z.B. in der Datenbank "
+"von Lastlog kein Eintrag für Benutzer mit der UID zwischen 170 und 800 "
+"befinden, wird es scheinen, dass lastlog stehen geblieben ist, während es "
+"die Einträge mit der UID 171-799 verarbeitet."
+
+#: gshadow.5.xml:33(refentrytitle) gshadow.5.xml:38(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+#: gshadow.5.xml:39(refpurpose)
+msgid "shadowed group file"
+msgstr "Datei für Shadow-Gruppen"
+
+#: gshadow.5.xml:44(para)
+#, fuzzy
+#| msgid ""
+#| "<filename>/etc/gshadow</filename> contains the shadowed information for "
+#| "group accounts. It contains lines with the following colon-separated "
+#| "fields:"
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+"In <filename>/etc/gshadow</filename> befinden sich die Informationen für das "
+"Shadow-Gruppen-System. Die darin enthaltenen Zeilen haben folgende Felder, "
+"die durch Doppelpunkt getrennt sind:"
+
+#: gshadow.5.xml:54(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+
+#: gshadow.5.xml:60(emphasis)
+msgid "group name"
+msgstr "Gruppenname"
+
+#: gshadow.5.xml:62(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr ""
+
+#: gshadow.5.xml:75(para)
+#, fuzzy
+#| msgid ""
+#| "If the password field contains some string that is not valid result of "
+#| "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#| "manvolnum></citerefentry>, for instance ! or *, the user will not be able "
+#| "to use a unix password to log in, subject to "
+#| "<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+#| "citerefentry>."
+msgid ""
+"If the password field contains some string that is not a valid result of "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, for instance ! or *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+"Wenn das Passwortfeld eine Zeichenkette enthält, die kein zulässiges "
+"Ergebnis von <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> ist, z.B. ! oder *, kann sich der Benutzer nicht "
+"mit einem Unix-Passwort anmelden, vorbehaltlich anderer Regelungen durch "
+"<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+"citerefentry>."
+
+#: gshadow.5.xml:82(para)
+#, fuzzy
+#| msgid ""
+#| "The comment field is used by various system utilities, such as "
+#| "<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"The password is used when an user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"Das Kommentarfeld wird von verschiedenen Systemprogrammen wie z.B. "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> ausgewertet."
+
+#: gshadow.5.xml:88(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+
+#: gshadow.5.xml:98(para)
+#, fuzzy
+#| msgid ""
+#| "This information supersedes any password present in <filename>/etc/group</"
+#| "filename>."
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+"Diese Angaben gehen den Passwörtern in <filename>/etc/group</filename> vor."
+
+#: gshadow.5.xml:106(emphasis)
+msgid "administrators"
+msgstr ""
+
+#: gshadow.5.xml:108(para) gshadow.5.xml:124(para)
+#, fuzzy
+#| msgid "comma-separated list of group members"
+msgid "It must be a comma-separated list of user names."
+msgstr "Liste der Mitglieder der Gruppe, durch Kommas getrennt"
+
+#: gshadow.5.xml:111(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr ""
+
+#: gshadow.5.xml:115(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+
+#: gshadow.5.xml:122(emphasis)
+msgid "members"
+msgstr ""
+
+#: gshadow.5.xml:127(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+
+#: gshadow.5.xml:131(para)
+#, fuzzy
+#| msgid ""
+#| "This information supersedes any password present in <filename>/etc/group</"
+#| "filename>."
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+"Diese Angaben gehen den Passwörtern in <filename>/etc/group</filename> vor."
+
+#: gshadow.5.xml:160(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: grpck.8.xml:44(refpurpose)
+msgid "verify integrity of group files"
+msgstr "überprüft die Stimmigkeit der Gruppendateien"
+
+#: grpck.8.xml:70(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>grpck</command> command verifies the integrity of the system "
+#| "authentication information. All entries in the <filename>/etc/group</"
+#| "filename> and <filename>/etc/gshadow</filename> are checked to see that "
+#| "the entry has the proper format and valid data in each field. The user is "
+#| "prompted to delete entries that are improperly formatted or which have "
+#| "other uncorrectable errors."
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+"Der Befehl <command>grpwck</command> überprüft die Stimmigkeit der "
+"Informationen des Systems zur Authentifizierung. Alle Einträge in <filename>/"
+"etc/group</filename> und <filename>/etc/gshadow</filename> werden darauf "
+"überprüft, ob der Eintrag das richtige Format hat und gültige Daten enthält. "
+"Der Benutzer wird aufgefordert, Einträge zu löschen, die falsch formatiert "
+"sind oder andere unbehebbare Fehler enthalten."
+
+#: grpck.8.xml:87(para)
+#, fuzzy
+#| msgid "a unique group name"
+msgid "a unique and valid group name"
+msgstr "einen eindeutigen Gruppennamen"
+
+#: grpck.8.xml:90(para)
+#, fuzzy
+#| msgid ""
+#| "Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/"
+#| "shadow</filename> by UID."
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+"Ordnet die Einträge in <filename>/etc/passwd</filename> und <filename>/etc/"
+"shadow</filename> nach der UID."
+
+#: grpck.8.xml:97(para)
+#, fuzzy
+#| msgid "a valid list of members and administrators"
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr "eine gültige Liste der Mitglieder und Administratoren"
+
+#: grpck.8.xml:103(para)
+#, fuzzy
+#| msgid ""
+#| "These four programs all operate on the normal and shadow password and "
+#| "group files: <filename>/etc/passwd</filename>, <filename>/etc/group</"
+#| "filename>, <filename>/etc/shadow</filename>, and <filename>/etc/gshadow</"
+#| "filename>."
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+"Diese vier Programme funktionieren mit der normalen und der Shadow-"
+"Passwortdatei und den Gruppendateien: <filename>/etc/passwd</filename>, "
+"<filename>/etc/group</filename>, <filename>/etc/shadow</filename> und "
+"<filename>/etc/gshadow</filename>."
+
+#: grpck.8.xml:111(para)
+#, fuzzy
+#| msgid ""
+#| "The checks for correct number of fields and unique group name are fatal. "
+#| "If the entry has the wrong number of fields, the user will be prompted to "
+#| "delete the entire line. If the user does not answer affirmatively, all "
+#| "further checks are bypassed. An entry with a duplicated group name is "
+#| "prompted for deletion, but the remaining checks will still be made. All "
+#| "other errors are warnings and the user is encouraged to run the "
+#| "<command>groupmod</command> command to correct the error."
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+"Fehler bei der Überprüfung der richtigen Anzahl der Felder und des "
+"eindeutigen Benutzernames sind schwerwiegend. Wenn ein Eintrag die falsche "
+"Anzahl von Feldern aufweist, wird der Benutzer aufgefordert, die gesamte "
+"Zeile zu löschen. Wenn dies der Benutzer ablehnt, werden alle weiteren Tests "
+"ausgelassen. Bei einem Eintrag mit einem mehrfach verwendeten Benutzernamen "
+"wird der Benutzer aufgefordert, diesen Eintrag zu löschen. Sollte er dies "
+"ablehnen, werden dennoch die übrigen Test ausgeführt. Bei allen anderen "
+"Fehlern wird eine Warnung abgegeben und der Benutzer aufgefordert, den "
+"Fehler mittels des Befehls <command>groupmod</command> zu beheben."
+
+#: grpck.8.xml:122(para)
+#, fuzzy
+#| msgid ""
+#| "The commands which operate on the <filename>/etc/group</filename> file "
+#| "are not able to alter corrupted or duplicated entries. <command>grpck</"
+#| "command> should be used in those circumstances to remove the offending "
+#| "entry."
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+"Die Befehle, die die Datei <filename>/etc/group</filename> bearbeiten, "
+"können falsche oder doppelte Einträge nicht verändern. In solchen Fällen "
+"sollte <command>grpwck</command> verwendet werden, um den betreffenden "
+"Eintrag zu entfernen."
+
+#: grpck.8.xml:134(para)
+#, fuzzy
+#| msgid "The options which apply to the <command>pwck</command> command are:"
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>pwck</command> unterstützt werden, "
+"sind:"
+
+#: grpck.8.xml:141(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+
+#: grpck.8.xml:151(para)
+#, fuzzy
+#| msgid ""
+#| "Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/"
+#| "shadow</filename> by UID."
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+"Ordnet die Einträge in <filename>/etc/passwd</filename> und <filename>/etc/"
+"shadow</filename> nach der UID."
+
+#: grpck.8.xml:160(para)
+#, fuzzy
+#| msgid ""
+#| "By default, <command>pwck</command> operates on the files <filename>/etc/"
+#| "passwd</filename> and <filename>/etc/shadow</filename>. The user may "
+#| "select alternate files with the <emphasis remap=\"I\">passwd</emphasis> "
+#| "and <emphasis remap=\"I\">shadow</emphasis> parameters."
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\"> and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+"Standardmäßig arbeitet <command>pwck</command> mit den Dateien <filename>/"
+"etc/passwd</filename> und <filename>/etc/shadow</filename>. Der Benutzer "
+"kann andere Dateien mit den Parametern <emphasis remap=\"I\">passwd</"
+"emphasis> und <emphasis remap=\"I\">shadow</emphasis> auswählen."
+
+#: grpck.8.xml:228(para)
+msgid "one or more bad group entries"
+msgstr "ein oder mehrere fehlerhafte Gruppeneinträge"
+
+#: grpck.8.xml:234(para)
+msgid "can't open group files"
+msgstr "kann die Gruppendatei nicht öffnen"
+
+#: grpck.8.xml:240(para)
+msgid "can't lock group files"
+msgstr "kann die Gruppendatei nicht sperren"
+
+#: grpck.8.xml:246(para)
+msgid "can't update group files"
+msgstr "kann die Gruppendatei nicht aktualisieren"
+
+#: grpck.8.xml:210(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>grpck</command> gibt beim Beenden folgende Werte zurück: "
+"<placeholder-1/>"
+
+#: grpck.8.xml:255(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gshadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: groups.1.xml:34(refentrytitle) groups.1.xml:39(refname)
+#: groups.1.xml:45(command)
+msgid "groups"
+msgstr "groups"
+
+#: groups.1.xml:40(refpurpose)
+msgid "display current group names"
+msgstr "zeigt die aktuell verwendeten Gruppennamen an"
+
+#: groups.1.xml:47(replaceable) chfn.1.xml:58(replaceable)
+msgid "user"
+msgstr "Benutzer"
+
+#: groups.1.xml:54(para)
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+"Der Befehl <command>groups</command> zeigt die momentan verwendeten "
+"Gruppennamen oder IDs an. Wenn einem Wert kein Eintrag in <filename>/etc/"
+"group</filename> entspricht, wird die Gruppennummer ausgegeben. Mit der "
+"Option <emphasis remap=\"I\">user</emphasis> werden nur die Gruppen des "
+"bezeichneten <emphasis remap=\"I\">Benutzers</emphasis> angezeigt."
+
+# SB: Übersetzung von "concurrent group set", "real and effective group ID"? Plus, is should be "his current".\r
+#: groups.1.xml:66(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change their current "
+"real and effective group ID."
+msgstr ""
+"Auf Systemen, die keine simultanen Gruppen unterstützen, werden die "
+"Informationen aus <filename>/etc/group</filename> ausgegeben. Wenn der "
+"Benutzer seine Gruppen-ID ändern will, muss er <command>newgrp</command> "
+"oder <command>sg</command> verwenden."
+
+#: groups.1.xml:88(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+#: groupmod.8.xml:44(refpurpose)
+msgid "modify a group definition on the system"
+msgstr "verändert die Eigenschaften einer Gruppe auf dem System"
+
+#: groupmod.8.xml:53(replaceable)
+msgid "GROUP"
+msgstr "GRUPPE"
+
+#: groupmod.8.xml:59(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+"Der Befehl <command>groupmod</command> ändert die Eigenschaften der "
+"angegebenen <replaceable>GRUPPE</replaceable>, indem die passenden Einträge "
+"in der Gruppendatenbank geändert werden."
+
+#: groupmod.8.xml:68(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>groupmod</command> unterstützt werden, "
+"sind:"
+
+#: groupmod.8.xml:74(term) groupadd.8.xml:94(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+
+#: groupmod.8.xml:78(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the group will be changed from <replaceable>GROUP</"
+#| "replaceable> to <replaceable>NEW_GROUP</replaceable> name."
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+"Der Gruppenname wird vom Namen <replaceable>GRUPPE</replaceable> auf "
+"<replaceable>NEUE_GRUPPE</replaceable> geändert."
+
+#: groupmod.8.xml:82(para)
+#, fuzzy
+#| msgid ""
+#| "The numerical value of the user's ID. This value must be unique, unless "
+#| "the <option>-o</option> option is used. The value must be non-negative. "
+#| "The default is to use the smallest ID value greater than 999 and greater "
+#| "than every other user. Values between 0 and 999 are typically reserved "
+#| "for system accounts."
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used. Values between 0 and 999 are typically reserved for system groups."
+msgstr ""
+"Der zahlenmäßige Wert der Benutzer-ID. Dieser Wert muss eindeutig sein, "
+"sofern nicht die Option <option>-o</option> verwendet wird. Der Wert darf "
+"nicht negativ sein. Standardmäßig wird der kleinste Wert größer als 999 und "
+"größer als jeder andere Wert eines Benutzers verwendet. Typischerweise sind "
+"Werte zwischen 0 und 999 für Systemkonten reserviert."
+
+#: groupmod.8.xml:89(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+
+#: groupmod.8.xml:104(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option><replaceable>NEW_GROUP</"
+"replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--new-name</option><replaceable>NEUE_GRUPPE</"
+"replaceable>"
+
+#: groupmod.8.xml:109(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+"Der Gruppenname wird vom Namen <replaceable>GRUPPE</replaceable> auf "
+"<replaceable>NEUE_GRUPPE</replaceable> geändert."
+
+#: groupmod.8.xml:120(para)
+#, fuzzy
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+"Wenn es mit der Option <option>-g</option> verwendet wird, kann mit dieser "
+"Option der Wert der Gruppen-<replaceable>GID</replaceable> auf einen nicht "
+"eindeutigen Wert gesetzt werden."
+
+#: groupmod.8.xml:219(para)
+msgid "group name already in use"
+msgstr "Gruppenname wird schon verwendet"
+
+#: groupmod.8.xml:183(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>groupmod</command> gibt beim Beenden folgende Werte "
+"zurück: <placeholder-1/>"
+
+#: groupmod.8.xml:234(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: groupmems.8.xml:44(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr "verwaltet die Mitglieder der Hauptgruppe eines Benutzers"
+
+#: groupmems.8.xml:51(replaceable) groupmems.8.xml:52(replaceable)
+msgid "user_name"
+msgstr "Benutzer_Name"
+
+#: groupmems.8.xml:51(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:52(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+#: groupmems.8.xml:53(replaceable)
+msgid "group_name"
+msgstr "Gruppen_Name"
+
+#: groupmems.8.xml:53(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+#: groupmems.8.xml:54(arg)
+msgid "-l"
+msgstr "-l"
+
+# SB: A few things: 1. Does groupmems allow to administer the user's membership or the membership of the user's primary group? 2. I don't understand "sake"? A typo? But of what? 3. I think we shouldn't have the notorious guest account here as an example.\r
+#: groupmems.8.xml:61(para)
+msgid ""
+"The <command>groupmems</command> command allows a user to administer his/her "
+"own group membership list without the requirement of superuser privileges. "
+"The <command>groupmems</command> utility is for systems that configure its "
+"users to be in their own name sake primary group (i.e., guest / guest)."
+msgstr ""
+"Mit dem Befehl <command>groupmems</command> kann ein Benutzer seine "
+"Mitgliedschaft in Gruppen verwalten, ohne Root-Rechte zu benötigen. Das "
+"Werkzeug <command>groupmems</command> ist für Systeme gedacht, auf denen die "
+"Hauptgruppe eines Benutzers den gleichen Namen hat wie der Benutzer (z.B. "
+"fritz/fritz)."
+
+# SB: Sounds more like my second thought.\r
+#: groupmems.8.xml:69(para)
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+"Nur Root als Administrator kann mit <command>groupmems</command> die "
+"Mitgliederliste anderer Gruppen bearbeiten."
+
+#: groupmems.8.xml:76(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>groupmems</command> unterstützt "
+"werden, sind:"
+
+#: groupmems.8.xml:82(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option><replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#: groupmems.8.xml:84(para)
+#, fuzzy
+#| msgid "Add a new user to the group membership list."
+msgid "Add an user to the group membership list."
+msgstr "Fügt einen neuen Benutzer der Mitgliederliste der Gruppe hinzu."
+
+#: groupmems.8.xml:85(para) groupmems.8.xml:101(para)
+#: groupmems.8.xml:126(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+
+#: groupmems.8.xml:93(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option><replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>TAGE</replaceable>"
+
+#: groupmems.8.xml:95(para)
+msgid "Delete a user from the group membership list."
+msgstr "Löscht einen Benutzer aus der Mitgliederliste der Gruppe."
+
+#: groupmems.8.xml:96(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+
+#: groupmems.8.xml:109(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+msgid ""
+"<option>-g</option>, <option>--group</option><replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+
+#: groupmems.8.xml:111(para)
+msgid "The superuser can specify which group membership list to modify."
+msgstr ""
+"Root kann eine Gruppen bestimmen, deren Mitgliederliste er bearbeiten will."
+
+#: groupmems.8.xml:117(term) chage.1.xml:128(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: groupmems.8.xml:119(para)
+msgid "List the group membership list."
+msgstr "Gibt die Mitgliederliste aus."
+
+#: groupmems.8.xml:123(term)
+#, fuzzy
+#| msgid "<option>-e</option>, <option>--expire</option>"
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+#: groupmems.8.xml:125(para)
+msgid "Purge all users from the group membership list."
+msgstr "Löscht alle Benutzer aus der Mitgliederliste der Gruppe."
+
+#: groupmems.8.xml:137(title)
+msgid "SETUP"
+msgstr "INSTALLATION"
+
+# SB: "own group membership list" - same as above\r
+#: groupmems.8.xml:138(para)
+msgid ""
+"The <command>groupmems</command> executable should be in mode <literal>2770</"
+"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
+"emphasis>. The system administrator can add users to group <emphasis>groups</"
+"emphasis> to allow or disallow them using the <command>groupmems</command> "
+"utility to manage their own group membership list."
+msgstr ""
+"Die ausführbare Datei <command>groupmems</command> sollte die Rechte "
+"<literal>2770</literal> haben und dem Benutzer <emphasis>root</emphasis> und "
+"der Gruppe <emphasis>groups</emphasis> gehören. Der Systemadministrator kann "
+"Benutzer der Gruppe <emphasis>groups</emphasis> hinzufügen, um ihnen zu "
+"ermöglichen, mit <command>groupmems</command> die Mitgliederliste ihrer "
+"eigenen Gruppe zu verwalten."
+
+#: groupmems.8.xml:147(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2770 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+"    "
+msgstr ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2770 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+"    "
+
+# type: Plain text\r
+#: groupmems.8.xml:179(para)
+msgid "secure group account information"
+msgstr "Verschlüsselte Informationen zu den Gruppenkonten"
+
+#: groupmems.8.xml:187(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupdel.8.xml:44(refpurpose)
+msgid "delete a group"
+msgstr "löscht eine Gruppe"
+
+#: groupdel.8.xml:58(para)
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <emphasis remap=\"I\">group</emphasis>. "
+"The named group must exist."
+msgstr ""
+"Der Befehl <command>groupdel</command> bearbeitet die Kontodateien des "
+"Systems und löscht darin alle Einträge, die auf die <emphasis remap=\"I"
+"\">Gruppe</emphasis> verweisen. Die bezeichnete Gruppe muss existieren."
+
+#: groupdel.8.xml:66(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+"Sie können nicht die Hauptgruppe eines Benutzers entfernen. Dazu müssten Sie "
+"zunächst den betreffenden Benutzer löschen."
+
+#: groupdel.8.xml:70(para)
+#, fuzzy
+#| msgid ""
+#| "You must manually check all file systems to insure that no files remain "
+#| "with the named group as the file group ID."
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+"Sie sollten von Hand alle Systemdateien überprüfen, um sicherzustellen, dass "
+"keine Dateien, die der gelöschten Gruppe angehören, vorhanden sind."
+
+#: groupdel.8.xml:132(para)
+msgid "can't remove user's primary group"
+msgstr "kann die Hauptgruppe eines Benutzers nicht entfernen"
+
+#: groupdel.8.xml:108(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>groupdel</command> gibt beim Beenden folgende Werte "
+"zurück: <placeholder-1/>"
+
+#: groupdel.8.xml:147(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: groupadd.8.xml:48(refpurpose)
+msgid "create a new group"
+msgstr "erstellt eine neue Gruppe"
+
+#: groupadd.8.xml:65(para)
+#, fuzzy
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+"Der Befehl <command>groupadd</command> erstellt ein neues Gruppenkonto. "
+"Dabei verwendet er die Werte, die auf der Befehlszeile angegeben wurden, "
+"oder die Standardwerte des Systems. Soweit es notwendig ist, wird die neue "
+"Gruppe den Systemdateien hinzugefügt."
+
+#: groupadd.8.xml:74(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>groupadd</command> unterstützt werden, "
+"sind:"
+
+#: groupadd.8.xml:84(para)
+#, fuzzy
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+"Die Option führt dazu, dass <command>groupadd</command> nur dann erfolgreich "
+"beendet wird, wenn die angegebene Gruppe existiert. Falls diese Option "
+"zusammen mit der Option <option>-g</option> verwendet wird und die "
+"angegebene GID schon vergeben ist, wird eine anderen (eindeutige) GID "
+"gewählt (d.h. <option>-g</option> wird nicht beachtet)."
+
+#: groupadd.8.xml:98(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than 999 and greater than "
+"every other group. Values between 0 and 999 are typically reserved for "
+"system accounts."
+msgstr ""
+"Der zahlenmäßige Wert der Gruppen-ID. Dieser Wert muss eindeutig sein, "
+"sofern nicht die Option <option>-o</option> verwendet wird. Der Wert darf "
+"nicht negativ sein. Standardmäßig wird der kleinste Wert größer als 999 und "
+"größer als jeder andere Wert einer Gruppe verwendet. Typischerweise sind "
+"Werte zwischen 0 und 999 für Systemkonten reserviert."
+
+#: groupadd.8.xml:118(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+"Überschreibt die Standardwerte von <filename>/etc/login.defs</filename> "
+"(GID_MIN, GID_MAX und weitere). Diese Option kann mehrfach verwendet werden."
+
+#: groupadd.8.xml:123(para)
+#, fuzzy
+#| msgid ""
+#| "Example: <option>-K </option><replaceable>GID_MIN</"
+#| "replaceable>=<replaceable>100</replaceable><option> -K </"
+#| "option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgid ""
+"Example: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable><option>-K </"
+"option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Beispiel: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable><option> -K </"
+"option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: groupadd.8.xml:127(para)
+msgid ""
+"Note: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Hinweis: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> funktioniert noch nicht."
+
+#: groupadd.8.xml:139(para)
+#, fuzzy
+msgid "This option permits to add a group with a non-unique GID."
+msgstr "Erlaubt es, eine Gruppe mit einer nicht eindeutigen GID zu erstellen."
+
+#: groupadd.8.xml:171(para)
+#, fuzzy
+#| msgid "create a new group"
+msgid "Create a system group."
+msgstr "erstellt eine neue Gruppe"
+
+#: groupadd.8.xml:174(para)
+msgid ""
+"The numeric identifiers of new system groups are choosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+
+#: groupadd.8.xml:225(para)
+#, fuzzy
+#| msgid ""
+#| "Groupnames must begin with a lower case letter or an underscore, and only "
+#| "lower case letters, underscores, dashes, and dollar signs may follow. In "
+#| "regular expression terms: [a-z_][a-z0-9_-]*[$]"
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Gruppennamen müssen mit einem Kleinbuchstaben oder einem Unterstrich "
+"beginnen. Sie dürfen nur Kleinbuchstaben, Unterstriche, Gedankenstriche oder "
+"Dollarzeichen enthalten. Als regulärer Ausdruck: [a-z_][a-z0-9_-]*[$]"
+
+#: groupadd.8.xml:231(para)
+#, fuzzy
+#| msgid "Groupnames may only be up to 16 characters long."
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr "Gruppennamen dürfen nur bis zu 16 Zeichen lang sein."
+
+#: groupadd.8.xml:234(para)
+#, fuzzy
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Sie dürfen einen Benutzer nicht einer NIS-Gruppe hinzufügen. Dies muss auf "
+"dem NIS-Server durchgeführt werden."
+
+#: groupadd.8.xml:238(para)
+#, fuzzy
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+"Falls der Gruppenname bereits in einer externen Datenbank (wie etwa NIS) "
+"vergeben ist, wird <command>groupadd</command> die Gruppe nicht erstellen."
+
+#: groupadd.8.xml:271(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr "GID nicht eindeutig (wenn <option>-o</option> nicht angegeben wird)"
+
+#: groupadd.8.xml:277(para)
+msgid "group name not unique"
+msgstr "Gruppenname nicht eindeutig"
+
+#: groupadd.8.xml:247(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>groupadd</command> gibt beim Beenden folgende Werte "
+"zurück: <placeholder-1/>"
+
+#: groupadd.8.xml:292(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:49(phrase)
+#, fuzzy
+#| msgid "administer the <placeholder-1/> file"
+msgid "administer <placeholder-1/>"
+msgstr "verwaltet die Datei <placeholder-1/>"
+
+#: gpasswd.1.xml:52(phrase)
+#, fuzzy
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#: gpasswd.1.xml:63(replaceable)
+#, fuzzy
+msgid "option"
+msgstr "Optionen"
+
+#: gpasswd.1.xml:73(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+
+#: gpasswd.1.xml:81(para)
+#, fuzzy
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+"Mit <command>gpasswd</command> kann die Datei <filename>/etc/group</"
+"filename> (und die Datei <filename>/etc/gshadow</filename>, falls bei der "
+"Kompilierung SHADOWGRP angegeben wurde) verwaltet werden. Jede Gruppe kann "
+"Administratoren, Mitglieder und ein Passwort haben. Der Systemadministrator "
+"kann mit der Option <option>-A</option> die Administratoren der Gruppe "
+"festlegen. Mit der Option <option>-M</option> legt er die Mitglieder fest. "
+"Er besitzt alle Rechte, die Administratoren und Mitglieder haben können."
+
+#: gpasswd.1.xml:86(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:93(para)
+#, fuzzy
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+"Wenn <command>gpasswd</command> vom Gruppenadministrator aufgerufen wird und "
+"der einzige Parameter der Gruppenname ist, wird nur nach einem neuem "
+"Passwort gefragt. Wenn ein Passwort vergeben wurde, können Mitglieder der "
+"Gruppe dennoch ohne Passwort <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> ausführen. Alle "
+"anderen Benutzer benötigen dazu das Passwort."
+
+#: gpasswd.1.xml:101(title)
+msgid "Notes about group passwords"
+msgstr "Hinweise zu Gruppenpasswörtern"
+
+#: gpasswd.1.xml:102(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+"Gruppenpasswörter beinhalten ein immanentes Sicherheitsrisiko, da mehrere "
+"Personen das Passwort kennen. Dennoch sind sie eine sinnvolle Einrichtung, "
+"um die Zusammenarbeit zwischen Benutzern zu erleichtern."
+
+#: gpasswd.1.xml:113(para)
+#, fuzzy
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr ""
+" Die Optionen <option>-r</option>, <option>-h</option> und <option>-f</"
+"option> können nur verwendet werden, wenn <command>login</command> von Root "
+"ausgeführt wird."
+
+#: gpasswd.1.xml:117(para)
+msgid "The options cannot be combined."
+msgstr ""
+
+#: gpasswd.1.xml:120(para)
+#, fuzzy
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>passwd</command> unterstützt werden, "
+"sind:"
+
+#: gpasswd.1.xml:125(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option><replaceable>user</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#: gpasswd.1.xml:129(para)
+#, fuzzy
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Der Gruppenname wird vom Namen <replaceable>GRUPPE</replaceable> auf "
+"<replaceable>NEUE_GRUPPE</replaceable> geändert."
+
+#: gpasswd.1.xml:138(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option><replaceable>user</replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>TAGE</replaceable>"
+
+#: gpasswd.1.xml:142(para)
+#, fuzzy
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+"Der Gruppenname wird vom Namen <replaceable>GRUPPE</replaceable> auf "
+"<replaceable>NEUE_GRUPPE</replaceable> geändert."
+
+#: gpasswd.1.xml:151(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--remove</option>"
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: gpasswd.1.xml:155(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. Only "
+"group members will be allowed to use <command>newgrp</command> to join the "
+"named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:166(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: gpasswd.1.xml:170(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. Only "
+"group members will be allowed to use <command>newgrp</command> to join the "
+"named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:181(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-A</option>, <option>--administrators</option><replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_TAGE</"
+"replaceable>"
+
+#: gpasswd.1.xml:185(para)
+#, fuzzy
+msgid "Set the list of administrative users."
+msgstr "Liste der Administratoren der Gruppe, durch Kommas getrennt"
+
+#: gpasswd.1.xml:193(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-b</option>, <option>--before</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-M</option>, <option>--members</option><replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-b</option>, <option>--before</option><replaceable>TAGE</replaceable>"
+
+#: gpasswd.1.xml:197(para)
+#, fuzzy
+msgid "Set the list of group members."
+msgstr "Liste der Mitglieder der Gruppe, durch Kommas getrennt"
+
+#: gpasswd.1.xml:207(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+
+#: gpasswd.1.xml:252(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: faillog.8.xml:34(refentrytitle) faillog.8.xml:39(refname)
+#: faillog.8.xml:45(command) faillog.5.xml:34(refentrytitle)
+#: faillog.5.xml:39(refname) faillog.5.xml:86(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+#: faillog.8.xml:40(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr ""
+"zeigt Aufzeichnungen der fehlgeschlagenen Anmeldungen an oder richtet "
+"Beschränkungen für fehlgeschlagene Anmeldungen ein"
+
+#: faillog.8.xml:54(para)
+#, fuzzy
+#| msgid ""
+#| "<command>faillog</command> formats the contents of the failure log from "
+#| "<filename>/var/log/faillog</filename> database. It also can be used for "
+#| "maintains failure counters and limits. Run <command>faillog</command> "
+#| "without arguments display only list of user faillog records who have ever "
+#| "had a login failure."
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+"<command>faillog</command> formatiert den Inhalt der Datenbank der "
+"fehlgeschlagenen Anmeldungen, die sich in <filename>/var/log/faillog</"
+"filename> befindet. Es kann auch eingesetzt werden, um die Zählung und "
+"Beschränkung der Fehlschläge zu verwalten. Wenn <command>faillog</command> "
+"ohne Optionen ausgeführt wird, wird nur die Liste der fehlgeschlagenen "
+"Anmeldungen aller Benutzer angezeigt, deren Anmeldung jemals gescheitert ist."
+
+#: faillog.8.xml:65(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>faillog</command> unterstützt werden, "
+"sind:"
+
+#: faillog.8.xml:73(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+
+#: faillog.8.xml:86(term)
+msgid ""
+"<option>-l</option>, <option>--lock-time</option><replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-time</option><replaceable>SEK</"
+"replaceable>"
+
+#: faillog.8.xml:91(para)
+#, fuzzy
+#| msgid ""
+#| "Lock account to <replaceable>SEC</replaceable> seconds after failed login."
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+"Sperrt nach einer fehlgeschlagenen Anmeldung das Konto für <replaceable>SEK</"
+"replaceable> Sekunden."
+
+#: faillog.8.xml:95(para) faillog.8.xml:121(para) faillog.8.xml:133(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+
+#: faillog.8.xml:102(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option><replaceable>MAX</replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option><replaceable>MAX</replaceable>"
+
+#: faillog.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "Reset the counters of login failures or one record if used with the "
+#| "<option>-u</option><replaceable>LOGIN</replaceable> option. Write access "
+#| "to <filename>/var/log/faillog</filename> is required for this option."
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+"Setzt den Zähler der fehlgeschlagene Anmeldungen aller Konten zurück. Mit "
+"der Option <option>-u</option><replaceable>KONTONAME</replaceable> wird nur "
+"der Zähler des betreffenden Kontos zurückgesetzt. Für diese Option ist "
+"Schreibzugriff auf <filename>/var/log/faillog</filename> notwendig."
+
+#: faillog.8.xml:111(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+
+#: faillog.8.xml:116(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+
+#: faillog.8.xml:128(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:130(para)
+msgid "Reset the counters of login failures."
+msgstr ""
+
+# SB: Something is wrong here. IMO, "-u" overrides "-t".\r
+#: faillog.8.xml:144(para)
+#, fuzzy
+#| msgid ""
+#| "Display faillog records more recent than <replaceable>DAYS</replaceable>. "
+#| "The <option>-t</option> flag overrides the use of <option>-u</option>."
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+"Zeigt die Einträge der fehlgeschlagenen Anmeldungen an, die aktueller als "
+"<replaceable>TAGE</replaceable> sind. Die Option <option>-t</option> geht "
+"der Option <option>-u</option> vor."
+
+#: faillog.8.xml:156(para)
+#, fuzzy
+#| msgid ""
+#| "Display faillog record or maintains failure counters and limits (if used "
+#| "with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+#| "options) only for user with <replaceable>LOGIN</replaceable>."
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+"Zeigt Aufzeichnungen der fehlgeschlagenen Anmeldungen des Benutzers mit dem "
+"angegebenen <replaceable>KONTONAMEN</replaceable> an oder, wenn sie mit "
+"<option>-l</option>, <option>-m</option> oder <option>-r</option> verwendet "
+"wird, verwaltet Zähler und Beschränkungen für fehlgeschlagene Anmeldungen "
+"dieses Benutzers."
+
+#: faillog.8.xml:174(para)
+#, fuzzy
+#| msgid ""
+#| "The <option>-r</option>, <option>-h</option> and <option>-f</option> "
+#| "options are only used when <command>login</command> is invoked by root."
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+" Die Optionen <option>-r</option>, <option>-h</option> und <option>-f</"
+"option> können nur verwendet werden, wenn <command>login</command> von Root "
+"ausgeführt wird."
+
+#: faillog.8.xml:179(para)
+msgid ""
+"NOTE: in display mode, only the records of users which currently exist in "
+"the system are displayed. In the other modes (when the <option>-l</option>, "
+"<option>-m</option>, or <option>-r</option> options are used), the records "
+"of the user, or the range of users, or all the users that may have an entry "
+"in the faillog database will be changed. This is useful to reset records of "
+"users that have been deleted or set a policy in advance for a range of users."
+msgstr ""
+
+#: faillog.8.xml:192(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+"<command>faillog</command> zeigt nur die Benutzer an, die sich seit der "
+"letzten fehlgeschlagenen Anmeldung nicht erfolgreich angemeldet haben. Um "
+"die übrigen Benutzer anzuzeigen, muss ein Benutzer explizit mit der Option "
+"<option>-u</option> angegeben werden oder alle Benutzer mit <option>-a</"
+"option> angezeigt werden."
+
+#: faillog.8.xml:205(filename) faillog.5.xml:74(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+#: faillog.8.xml:207(para) faillog.5.xml:76(para)
+msgid "Failure logging file."
+msgstr "Datei mit fehlgeschlagenen Anmeldungen."
+
+#: faillog.8.xml:215(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: faillog.5.xml:40(refpurpose)
+msgid "login failure logging file"
+msgstr "Datei mit fehlgeschlagenen Anmeldungen"
+
+#: faillog.5.xml:45(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+
+#: faillog.5.xml:49(para)
+#, fuzzy
+#| msgid ""
+#| "<filename>/var/log/faillog</filename> maintains a count of login failures "
+#| "and the limits for each account. The file is fixed length record, indexed "
+#| "by numerical UID. Each record contains the count of login failures since "
+#| "the last successful login; the maximum number of failures before the "
+#| "account is disabled; the line the last login failure occurred on; the "
+#| "date the last login failure occurred; and the time in seconds how long "
+#| "the account will be locked after a failure."
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"whiche the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+"In <filename>/var/log/faillog</filename> wird ein Zähler mit "
+"fehlgeschlagenen Anmeldungen und Beschränkungen für jedes Konto verwaltet. "
+"Diese Datei hat eine festgelegte Länge und einen Index mit der zahlenmäßigen "
+"UID. Jeder Eintrag besteht aus der Anzahl der fehlgeschlagenen Anmeldungen "
+"seit der letzten erfolgreichen Anmeldung, der maximalen Anzahl von "
+"Fehlschlägen, ehe das Konto abgeschaltet wird, das Gerät, auf dem die letzte "
+"fehlgeschlagene Anmeldung erfolgte, das Datum der letzten fehlgeschlagenen "
+"Anmeldung und die Dauer in Sekunden, für die das Konto nach einem Fehlschlag "
+"gesperrt ist."
+
+#: faillog.5.xml:59(para)
+msgid "The structure of the file is:"
+msgstr "Die Datei ist so aufgebaut:"
+
+#: faillog.5.xml:60(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort   fail_cnt;\n"
+"\tshort   fail_max;\n"
+"\tchar    fail_line[12];\n"
+"\ttime_t  fail_time;\n"
+"\tlong    fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort   fail_cnt;\n"
+"\tshort   fail_max;\n"
+"\tchar    fail_line[12];\n"
+"\ttime_t  fail_time;\n"
+"\tlong    fail_locktime;\n"
+"};"
+
+#: expiry.1.xml:41(refentrytitle) expiry.1.xml:46(refname)
+#: expiry.1.xml:52(command)
+msgid "expiry"
+msgstr "expiry"
+
+#: expiry.1.xml:47(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr "überprüft die Regeln für den Verfall des Passworts und setzt diese um"
+
+#: expiry.1.xml:60(para)
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+"Mit der Option <option>-c</option> überprüft der Befehl <command>expiry</"
+"command> den aktuellen Status des Verfalls des Passworts. Mit der Option "
+"<option>-f</option> werden die notwendigen Veränderungen umgesetzt. Er kann "
+"von normalen Benutzern aufgerufen werden."
+
+#: expiry.1.xml:87(para) chage.1.xml:262(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# SB: Translation of chsh.1 based on Josef Spillner's (josef@ggzgamingzone.org) from 2003. Mention somewhere else as well?\r
+#: chsh.1.xml:46(refpurpose)
+msgid "change login shell"
+msgstr "ändert die Login-Shell"
+
+#: chsh.1.xml:63(para)
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account, the superuser may change "
+"the login shell for any account."
+msgstr ""
+"chsh ändert die  Login-Shell eines Benutzers. Es legt den Befehl fest, der "
+"bei der Anmeldung ausgeführt wird. Ein normaler Benutzer kann nur die Login-"
+"Shell seines eigenen  Kontos ändern, während Root dies für alle Konten darf."
+
+#: chsh.1.xml:74(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>chsh</command> unterstützt werden, "
+"sind:"
+
+#: chsh.1.xml:96(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Wenn die Option <option>-s</option> nicht ausgewählt ist, wird "
+"<command>chsh</command> im interaktiven Modus betrieben. Dabei wird der "
+"Benutzer mit der aktuellen Login-Shell zur Eingabe einer neuen aufgefordert. "
+"Durch Eingabe eines Wertes wird die Shell geändert, während sie bei einer "
+"leeren Zeile beibehalten wird. Die aktuelle Shell wird zwischen einem Paar "
+"von <emphasis>[ ]</emphasis> angezeigt."
+
+#: chsh.1.xml:107(para)
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+"Die einzige Beschränkung für die Login-Shell ist, dass der Name des Befehls "
+"in der Datei <filename>/etc/shells</filename> enthalten sein muss. Root darf "
+"allerdings jeden beliebigen Befehl ausführen. Bei Konten, denen eine "
+"beschränkte Login-Shell zugewiesen ist, ist es nicht möglich, die Login-"
+"Shell zu ändern. Daher ist es nicht ratsam, <filename>/bin/rsh</filename> in "
+"<filename>/etc/shells</filename> einzutragen, da ein Benutzer nicht zu "
+"seiner ursprünglichen Login-Shell zurückwechseln kann, falls er "
+"versehentlich eine beschränkte Shell als Login-Shell auswählt."
+
+#: chsh.1.xml:142(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+#: chsh.1.xml:144(para)
+msgid "List of valid login shells."
+msgstr "Liste der möglichen Login-Shells."
+
+#: chsh.1.xml:158(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chpasswd.8.xml:47(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "aktualisiert Passwörter im Batch-Modus"
+
+#: chpasswd.8.xml:61(para)
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+"Der Befehl <command>chpasswd</command> liest eine Liste von Benutzername-"
+"Passwort-Paaren von der Standardeingabe. Damit werden Benutzerdaten "
+"aktualisiert. Jede Zeile muss folgendes Format haben:"
+
+#: chpasswd.8.xml:66(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">Benutzername</emphasis>:<emphasis remap=\"I"
+"\">Passwort</emphasis>"
+
+#: chpasswd.8.xml:71(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"Das Passwort muss standardmäßig im Klartext angegeben werden. Die "
+"Standardalgorithmus zur Verschlüsselung ist DES. Soweit vorhanden, wird auch "
+"das Alter des Passworts aktualisiert."
+
+#: chpasswd.8.xml:76(para) chgpasswd.8.xml:75(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"ENCRYPT_METHOD variable of <filename>/etc/login.defs</filename>, and can be "
+"overwiten with the <option>-e</option>, <option>-m</option>, or <option>-c</"
+"option> options."
+msgstr ""
+
+#: chpasswd.8.xml:82(para)
+msgid ""
+"<command>chpasswd</command> first update the password in memory, and then "
+"commit all the changes to disk if no errors occured for any users."
+msgstr ""
+
+#: chpasswd.8.xml:89(para)
+#, fuzzy
+#| msgid "Supplied passwords are in encrypted form."
+msgid "The supplied passwords must be in clear-text."
+msgstr "Passwörter werden verschlüsselt angegeben."
+
+#: chpasswd.8.xml:92(para)
+msgid ""
+"PAM is used to update the password in the system database according to the "
+"PAM chpasswd configuration."
+msgstr ""
+
+#: chpasswd.8.xml:96(para)
+msgid ""
+"When <command>chpasswd</command> fails to update a password, it continues "
+"updating the passwords of the next users, and will return an error code on "
+"exit."
+msgstr ""
+
+#: chpasswd.8.xml:102(para) chgpasswd.8.xml:81(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+"Dieser Befehl ist für den Einsatz in großen Umgebungen vorgesehen, wo viele "
+"Konten gleichzeitig erstellt werden müssen."
+
+#: chpasswd.8.xml:110(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>chpasswd</command> unterstützt werden, "
+"sind:"
+
+#: chpasswd.8.xml:119(para) chgpasswd.8.xml:98(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr ""
+
+#: chpasswd.8.xml:129(term) chgpasswd.8.xml:108(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: chpasswd.8.xml:131(para) chgpasswd.8.xml:110(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr "Passwörter werden verschlüsselt angegeben."
+
+#: chpasswd.8.xml:145(term) chgpasswd.8.xml:120(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+#: chpasswd.8.xml:147(para) chgpasswd.8.xml:122(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+"Verwendet zur Verschlüsselung MD5 anstelle von DES, wenn die Passwörter "
+"unverschlüsselt angegeben werden."
+
+#: chpasswd.8.xml:183(para) chgpasswd.8.xml:158(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+"Achten Sie darauf, dass die Rechte und Umask korrekt vergeben sind, um zu "
+"verhindern, dass andere Benutzer unverschlüsselte Dateien lesen können."
+
+#: chpasswd.8.xml:229(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/passwd"
+
+#: chpasswd.8.xml:231(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr ""
+
+#: chpasswd.8.xml:239(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: chgpasswd.8.xml:48(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr "aktualisiert Gruppenpasswörter im Batch-Modus"
+
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"Der Befehl <command>chgpasswd</command> liest eine Liste von Gruppenname-"
+"Passwort-Paaren von der Standardeingabe. Damit werden Gruppendaten "
+"aktualisiert. Jede Zeile muss folgendes Format haben:"
+
+#: chgpasswd.8.xml:67(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">Gruppenname</emphasis>:<emphasis remap=\"I\">Passwort</"
+"emphasis>"
+
+#: chgpasswd.8.xml:71(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"Das Passwort muss standardmäßig im Klartext angegeben werden. Die "
+"Standardalgorithmus zur Verschlüsselung ist DES."
+
+#: chgpasswd.8.xml:89(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>chgpasswd</command> unterstützt "
+"werden, sind:"
+
+#: chgpasswd.8.xml:209(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# SB: Translation of chfn.1 based on Josef Spillner's (josef@ggzgamingzone.org) from 2003. Mention somewhere else as well?\r
+# Übersetzung von "real user name"?\r
+#: chfn.1.xml:47(refpurpose)
+msgid "change real user name and information"
+msgstr "ändert den Benutzernamen und sonstige Informationen"
+
+#: chfn.1.xml:53(replaceable)
+msgid "full_name"
+msgstr "Voller_Name"
+
+#: chfn.1.xml:53(arg)
+msgid "-f <placeholder-1/>"
+msgstr "-f <placeholder-1/>"
+
+#: chfn.1.xml:54(replaceable)
+msgid "room_no"
+msgstr "Zimmer_Nr"
+
+#: chfn.1.xml:55(replaceable)
+msgid "work_ph"
+msgstr "Tel_Arbeit"
+
+#: chfn.1.xml:55(arg)
+msgid "-w <placeholder-1/>"
+msgstr "-w <placeholder-1/>"
+
+#: chfn.1.xml:56(replaceable)
+msgid "home_ph"
+msgstr "Tel_Privat"
+
+#: chfn.1.xml:57(replaceable)
+msgid "other"
+msgstr "sonstiges"
+
+#: chfn.1.xml:57(arg)
+msgid "-o <placeholder-1/>"
+msgstr "-o <placeholder-1/>"
+
+#: chfn.1.xml:64(para)
+msgid ""
+"The <command>chfn</command> command changes user fullname, office number, "
+"office extension, and home phone number information for a user's account. "
+"This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+"Der Befehl <command>chfn</command> ändert den vollen Namen, die Büronummer "
+"und Büroerweiterung sowie private Telefonnummer für ein Benutzerkonto. Diese "
+"Informationen werden typischerweise von <citerefentry><refentrytitle>finger</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> und anderen Programmen "
+"verwendet. Ein normaler Benutzer darf nur die Felder für seines eigenen "
+"Kontos ändern und muss dabei zudem die Einschränkungen in <filename>/etc/"
+"login.defs</filename> beachten. So ist es Benutzern standardmäßig nicht "
+"möglich, ihren vollen Namen zu ändern. Root kann die Felder aller Konten "
+"verändern. Außerdem darf nur Root mittels der Option <option>-o</option> die "
+"undefinierten Teile des GECOS-Feldes ändern."
+
+#: chfn.1.xml:78(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+
+#: chfn.1.xml:87(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+"Wenn keine Option ausgewählt wird, arbeitet <command>chfn</command> "
+"interaktiv. Dabei wird der Benutzer nach den aktuellen Werten für alle "
+"Felder befragt. Bei Eingabe eines neuen Wertes wird dieser verwendet, bei "
+"Eingabe einer Leerzeile stattdessen der Originalwert beibehalten. Der "
+"aktuelle Wert wird zwischen einem Paar von <emphasis remap=\"B\">[ ]</"
+"emphasis> angezeigt. Ohne Optionen fragt <command>chfn</command> nach einem "
+"Benutzerkonto."
+
+#: chfn.1.xml:132(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chage.1.xml:34(refentrytitle) chage.1.xml:39(refname)
+#: chage.1.xml:44(command)
+msgid "chage"
+msgstr "chage"
+
+#: chage.1.xml:40(refpurpose)
+msgid "change user password expiry information"
+msgstr "ändert die Information zum Passwortverfall"
+
+#: chage.1.xml:56(para)
+msgid ""
+"The <command>chage</command> command changes the number of days between "
+"password changes and the date of the last password change. This information "
+"is used by the system to determine when a user must change his/her password."
+msgstr ""
+"Der Befehl <command>chage</command> verändert die Anzahl der Tage zwischen "
+"dem letzten Wechsel des Passworts und dem nächsten Wechsel. Mit dieser "
+"Information bestimmt das System, wann ein Benutzer sein Passwort verändern "
+"muss."
+
+#: chage.1.xml:66(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr ""
+"Die Optionen, die vom Befehl <command>chage</command> unterstützt werden, "
+"sind:"
+
+#: chage.1.xml:71(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option><replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--lastday</option><replaceable>LETZTER_TAG</"
+"replaceable>"
+
+# SB: So I could also do DD.MM.YYYY or MM.DD.YYYY? How does system know which format I chose?\r
+#: chage.1.xml:75(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+"Legt die Anzahl der Tage, gerechnet ab dem 1. Januar 1970, fest, seit denen "
+"das Passwort das letzte Mal gewechselt wurde. Das Datum kann auch im Format "
+"JJJJ-MM-TT (oder in dem Format, dass in Ihrer Region weiter verbreitet ist) "
+"angegeben werden."
+
+#: chage.1.xml:83(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</"
+"replaceable>"
+msgstr ""
+"<option>-E</option>, <option>--expiredate</"
+"option><replaceable>VERFALLSDATUM</replaceable>"
+
+#: chage.1.xml:87(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+"Setzt das Datum oder die Anzahl der Tage seit dem 1. Januar 1970, ab dem auf "
+"das Benutzerkonto nicht mehr zugegriffen werden kann. Das Datum kann auch im "
+"Format JJJJ-MM-TT (oder in dem Format, dass in Ihrer Region weiter "
+"verbreitet ist) angegeben werden. Ein Benutzer, dessen Konto gesperrt ist, "
+"muss sich mit dem Systemadministrator in Verbindung setzen, ehe er sich "
+"wieder am System anmelden kann."
+
+#: chage.1.xml:95(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+"Wenn <emphasis remap=\"I\">-1</emphasis> als <replaceable>VERFALLSDATUM</"
+"replaceable> angegeben wird, wird das Verfallsdatum für das Konto entfernt."
+
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-I</option>, <option>--inactive</option><replaceable>INAKTIV</"
+"replaceable>"
+
+#: chage.1.xml:113(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+"Legt die Anzahl der Tage der Inaktivität fest, nach denen ein Passwort "
+"abgelaufen ist, bevor das Konto gesperrt wird. Die Option "
+"<replaceable>INAKTIV</replaceable> bezeichnet die Anzahl der Tage, für die "
+"das Konto inaktiv ist. Ein Benutzer, dessen Konto gesperrt ist, muss sich "
+"mit dem Systemadministrator in Verbindung setzen, ehe er sich wieder am "
+"System anmelden kann."
+
+#: chage.1.xml:120(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+"Wenn <emphasis remap=\"I\">-1</emphasis> als <replaceable>INAKTIV</"
+"replaceable> angegeben wird, wird die Inaktivität für das Konto entfernt."
+
+#: chage.1.xml:132(para)
+msgid "Show account aging information."
+msgstr "Zeigt Informationen zum Kontoalterung."
+
+#: chage.1.xml:138(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_TAGE</"
+"replaceable>"
+
+#: chage.1.xml:150(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-M</option>, <option>--maxdays</option><replaceable>MAX_TAGE</"
+"replaceable>"
+
+#: chage.1.xml:154(para)
+msgid ""
+"Set the maximum number of days during which a password is valid. When "
+"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
+"is less than the current day, the user will be required to change his/her "
+"password before being able to use his/her account. This occurrence can be "
+"planned for in advance by use of the <option>-W</option> option, which "
+"provides the user with advance warning."
+msgstr ""
+"Bestimmt die maximale Anzahl von Tagen, die das Passwort gültig bleibt. Wenn "
+"<replaceable>MAX_TAGE</replaceable> plus <replaceable>LETZTER_TAG</"
+"replaceable> älter als das aktuelle Datum ist, muss der Benutzer sein "
+"Passwort ändern, ehe er sein Konto benutzen kann. Mit der Option <option>-W</"
+"option> werden die Benutzer vor dem drohenden Verfall ihres Passworts "
+"gewarnt."
+
+#: chage.1.xml:163(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+"Wenn <emphasis remap=\"I\">-1</emphasis> als <replaceable>MAX_TAGE</"
+"replaceable> angegeben wird, wird der Passwortverfall entfernt."
+
+#: chage.1.xml:171(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--warndays</option><replaceable>WARN_TAGE</"
+"replaceable>"
+
+#: chage.1.xml:175(para)
+msgid ""
+"Set the number of days of warning before a password change is required. The "
+"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
+"the password expiring that a user will be warned his/her password is about "
+"to expire."
+msgstr ""
+"Legt die Anzahl der Tage fest, an denen der Benutzer eine Warnung erhält, "
+"bevor sein Passwort geändert werden muss. Die Option <replaceable>WARN_TAGE</"
+"replaceable> bezeichnet die Anzahl der Tage, für die ein Benutzer vor "
+"Verfall seines Passworts gewarnt wird."
+
+#: chage.1.xml:184(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Wenn keine Option ausgewählt wird, arbeitet <command>chage</command> "
+"interaktiv. Dabei wird der Benutzer nach den aktuellen Werten für alle "
+"Felder befragt. Bei Eingabe eines neuen Wertes wird dieser verwendet, bei "
+"Eingabe einer Leerzeile stattdessen der Originalwert beibehalten. Der "
+"aktuelle Wert wird zwischen einem Paar von <emphasis remap=\"B\">[ ]</"
+"emphasis> angezeigt."
+
+#: chage.1.xml:194(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"Für das Programm <command>chage</command> ist es notwendig, dass eine Shadow-"
+"Passwort-Datei vorhanden ist."
+
+#: chage.1.xml:198(para)
+msgid ""
+"The <command>chage</command> command is restricted to the root user, except "
+"for the <option>-l</option> option, which may be used by an unprivileged "
+"user to determine when his/her password or account is due to expire."
+msgstr ""
+"Der Befehl <command>chage</command> kann nur von Root ausgeführt werden. "
+"Alle anderen Benutzer können nur die Option <option>-l</option> verwenden, "
+"um die Verfallsdaten für ihr Konto einzusehen."
+
+#: chage.1.xml:251(replaceable)
+msgid "15"
+msgstr "15"
+
+#: chage.1.xml:253(para)
+msgid "can't find the shadow password file"
+msgstr "kann keine Shadow-Passwort-Datei finden"
+
+#: chage.1.xml:229(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Der Befehl <command>chage</command> gibt beim Beenden folgende Werte zurück: "
+"<placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr "Simon Brandmair (sbrandmair@gmx.net), 2005, 2007."
+
+#, fuzzy
+#~ msgid "and <placeholder-1/> files"
+#~ msgstr "-a <placeholder-1/>"
+
+#, fuzzy
+#~| msgid ""
+#~| "<command>usermod</command> will not allow you to change the name of a "
+#~| "user who is logged in. You must make certain that the named user is not "
+#~| "executing any processes when this command is being executed if the "
+#~| "user's numerical user ID is being changed. You must change the owner of "
+#~| "any <command>crontab</command> files manually. You must change the owner "
+#~| "of any <command>at</command> jobs manually. You must make any changes "
+#~| "involving NIS on the NIS server."
+#~ msgid ""
+#~ "<command>usermod</command> will not allow you to change the name of an "
+#~ "user who is logged in. You must make certain that the named user is not "
+#~ "executing any processes when this command is being executed if the user's "
+#~ "numerical user ID is being changed. You must change the owner of any "
+#~ "<command>crontab</command> files manually. You must change the owner of "
+#~ "any <command>at</command> jobs manually. You must make any changes "
+#~ "involving NIS on the NIS server."
+#~ msgstr ""
+#~ "<command>usermod</command> verhindert, dass Sie den Namen eines Benutzers "
+#~ "ändern, der gerade angemeldet ist. Sie müssen daher sicherstellen, dass "
+#~ "der betroffene Benutzer keine Prozesse ausführt, wenn dieser Befehl "
+#~ "ausgeführt wird, sofern die zahlenmäßige Benutzer-ID verändert werden "
+#~ "soll. Sie müssen den Eigentümer aller Dateien von <command>crontab</"
+#~ "command> per Hand verändern. Sie müssen den Eigentümer aller Dateien von "
+#~ "<command>at</command> per Hand verändern. Sie müssen auch Änderungen im "
+#~ "Zusammenhang mit NIS auf dem NIS-Server vornehmen."
+
+#~ msgid ""
+#~ "<command>userdel</command> will not allow you to remove an account if the "
+#~ "user is currently logged in. You must kill any running processes which "
+#~ "belong to an account that you are deleting."
+#~ msgstr ""
+#~ "<command>userdel</command> lässt nicht zu, dass Sie ein Konto entfernen, "
+#~ "wenn der Benutzer im Moment angemeldet ist. Sie müssen alle Prozesse "
+#~ "beenden, die dem Konto gehören, das Sie entfernen möchten."
+
+#~ msgid ""
+#~ "The encrypted password, as returned by "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. The default is to disable the account."
+#~ msgstr ""
+#~ "Das verschlüsselte Passwort, wie des von "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry> zurückgegeben wird. Standardmäßig ist das Konto "
+#~ "abgeschaltet."
+
+#~ msgid "encrypted password file"
+#~ msgstr "verschlüsselte Passwortdatei"
+
+#~ msgid "comma-separated list of group administrators"
+#~ msgstr "Liste der Administratoren der Gruppe, durch Kommas getrennt"
+
+#~ msgid ""
+#~ "The group name and password fields must be filled. The encrypted password "
+#~ "consists of characters from the 64-character alphabet a thru z, A thru Z, "
+#~ "0 thru 9, \\. and /. Refer to <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry> for details on how "
+#~ "this string is interpreted. If the password field contains some string "
+#~ "that is not valid result of <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, for instance ! or "
+#~ "*, the user will not be able to use a unix password to log in, subject to "
+#~ "<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+#~ "citerefentry>."
+#~ msgstr ""
+#~ "Die Felder für den Gruppennamen und die Passwörter dürfen nicht leer "
+#~ "sein. Die Zeichen des verschlüsselten Passworts können dem 64-Zeichen-"
+#~ "Alphabet (a bis z, A bis Z, 0 bis 9, . und /) entnommen werden. "
+#~ "Vergleichen Sie <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, wie diese "
+#~ "Zeichenkette interpretiert wird. Wenn das Passwortfeld eine Zeichenkette "
+#~ "enthält, die kein gültiges Ergebnis von "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry> ist, z.B. ! oder *, kann sich der Benutzer mit "
+#~ "seinem Unix-Passwort nicht anmelden. Allerdings kann "
+#~ "<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+#~ "citerefentry> eine abweichende Regelung treffen."
+
+#, fuzzy
+#~ msgid ""
+#~ "The group ID of the given <replaceable>GROUP</replaceable> will be "
+#~ "changed to <replaceable>GID</replaceable>. The value of <replaceable>GID</"
+#~ "replaceable> must be a non-negative decimal integer. This value must be "
+#~ "unique, unless the <option>-o</option> option is used. Values between 0 "
+#~ "and 999 are typically reserved for system groups. Any files that have the "
+#~ "old group ID and must continue to belong to <replaceable>GROUP</"
+#~ "replaceable>, must have their group ID changed manually."
+#~ msgstr ""
+#~ "Legt eine neue Gruppe-ID für die <replaceable>GRUPPE</replaceable> fest. "
+#~ "Bei der <replaceable>GID</replaceable> muss es sich um einen nicht "
+#~ "negativen Integerwert handeln. Dieser Wert muss eindeutig sein, sofern "
+#~ "nicht die Option <option>-o</option> verwendet wird. Typischerweise sind "
+#~ "Werte zwischen 0 und 999 für Systemgruppen reserviert. Alle Dateien, die "
+#~ "der alten Gruppen-ID angehören, müssen von Hand der neuen Gruppen-ID "
+#~ "zugewiesen werden."
+
+#~ msgid ""
+#~ "The group name or number of the user's new initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1."
+#~ msgstr ""
+#~ "Der Name oder die Zahl der anfänglichen Login-Gruppe eines neuen "
+#~ "Benutzers. Der Gruppenname muss existieren. Die Gruppenzahl muss auf eine "
+#~ "bereits bestehende Gruppe verweisen. Die Standardgruppennummer ist 1."
+
+#~ msgid ""
+#~ "The group name or number of the user's initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1 or whatever is specified in <filename>/etc/"
+#~ "default/useradd</filename>."
+#~ msgstr ""
+#~ "Der Gruppenname oder die Zahl der Login-Gruppe des Benutzers. Der "
+#~ "Gruppenname muss existieren. Eine Gruppenzahl muss auf eine existierende "
+#~ "Gruppe verweisen. Die Standardgruppenzahl ist 1 oder ergibt sich aus "
+#~ "<filename>/etc/default/useradd</filename>."
+
+#~ msgid ""
+#~ "The group name or ID for a new user's initial group. The named group must "
+#~ "exist, and a numerical group ID must have an existing entry."
+#~ msgstr ""
+#~ "Der Name oder die Zahl der Login-Gruppe eines neuen Benutzers. Der "
+#~ "Gruppenname muss existieren. Die Gruppenzahl muss auf eine bereits "
+#~ "bestehende Gruppe verweisen."
+
+#~ msgid "days since Jan 1, 1970 that password was last changed"
+#~ msgstr ""
+#~ "Anzahl der Tage gerechnet ab dem 1. Januar 1970, seitdem das Passwort das "
+#~ "letzte Mal geändert wurde"
+
+#~ msgid "days after which password must be changed"
+#~ msgstr "Anzahl der Tage, nach denen das Passwort geändert werden muss"
+
+#~ msgid "days before password is to expire that user is warned"
+#~ msgstr ""
+#~ "Anzahl der Tage ehe das Passwort verfällt, an denen der Benutzer gewarnt "
+#~ "wird"
+
+#~ msgid "days after password expires that account is disabled"
+#~ msgstr ""
+#~ "Anzahl der Tage nach dem Verfall des Passwort bis das Konto abgeschaltet "
+#~ "wird"
+
+#~ msgid "days since Jan 1, 1970 that account is disabled"
+#~ msgstr ""
+#~ "Anzahl Tage gerechnet ab dem 1. Januar 1970, für die das Konto "
+#~ "abgeschaltet ist"
+
+#, fuzzy
+#~ msgid ""
+#~ "The password field must be filled. The encrypted password consists of 13 "
+#~ "to 24 characters from the 64 character alphabet a thru z, A thru Z, 0 "
+#~ "thru 9, \\. and /. Optionally it can start with a \"$\" character. This "
+#~ "means the encrypted password was generated using another (not DES) "
+#~ "algorithm. For example if it starts with \"$1$\" it means the MD5-based "
+#~ "algorithm was used."
+#~ msgstr ""
+#~ "Das Passwortfeld darf nicht leer sein. Ein verschlüsseltes Passwort "
+#~ "besteht aus 13 bis 24 Zeichen, die aus dem Alphabet mit 64 Zeichen "
+#~ "stammen (a bis z, A bis Z, 0 bis 9, \\. und /). Außerdem kann es mit dem "
+#~ "Zeichen \"$\" beginnen. Das bedeutet, dass das Passwort mit einem anderen "
+#~ "Algorithmus (nicht DES) erzeugt wurde. So bedeutet z.B. \"$1$\", dass "
+#~ "eine Algorithmus verwendet wurde, der auf MD5 basiert."
+
+#~ msgid ""
+#~ "The date of the last password change is given as the number of days since "
+#~ "Jan 1, 1970. The password may not be changed again until the proper "
+#~ "number of days have passed, and must be changed after the maximum number "
+#~ "of days. If the minimum number of days required is greater than the "
+#~ "maximum number of day allowed, this password may not be changed by the "
+#~ "user."
+#~ msgstr ""
+#~ "Das Datum, an dem das Passwort das letzte Mal geändert wurde, wird als "
+#~ "Anzahl der Tage seit dem 1. Januar 1970 angegeben. Es ist möglich, dass "
+#~ "das Passwort vor einer bestimmten Anzahl von Tagen nicht geändert werden "
+#~ "darf oder dass es nach einer bestimmten Anzahl geändert werden muss. Fall "
+#~ "die Mindestanzahl der Tage größer ist als die Höchstanzahl, so kann der "
+#~ "Benutzer sein Passwort nicht ändern."
+
+#~ msgid ""
+#~ "An account is considered to be inactive and is disabled if the password "
+#~ "is not changed within the specified number of days after the password "
+#~ "expires. An account will also be disabled on the specified day regardless "
+#~ "of other password expiration information."
+#~ msgstr ""
+#~ "Ein Konto wird als inaktive angesehen und abgeschaltet, wenn das Passwort "
+#~ "nicht innerhalb der angegebenen Anzahl von Tagen geändert wird, nachdem "
+#~ "das Passwort abgelaufen ist. Unabhängig von anderen Informationen über "
+#~ "den Verfall des Passworts, wird ein Konto auch am angegeben Tag "
+#~ "abgeschaltet."
+
+#~ msgid ""
+#~ "This information supersedes any password or password age information "
+#~ "present in <filename>/etc/passwd</filename>."
+#~ msgstr ""
+#~ "Diese Angaben ersetzen alle Angaben zu Passwörtern und deren Verfall in "
+#~ "<filename>/etc/passwd</filename>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "This field must contain the name (or number) of a group. The user will be "
+#~ "added as a member to this group. When a non-existent group name or number "
+#~ "is specified, a new group will be created. In the case of a non-existent "
+#~ "group number, both the name and the number of the new group will be this "
+#~ "number."
+#~ msgstr ""
+#~ "Dieses Feld muss den Namen (oder die Nummer) einer Gruppe enthalten. Der "
+#~ "Benutzer wird dieser Gruppe hinzugefügt. Wenn ein nicht existierender "
+#~ "Gruppenname oder -nummer angegeben wird, wird eine neue Gruppe erstellt. "
+#~ "Falls eine nicht existierende Gruppennummer angegeben wird, wird diese "
+#~ "Nummer auch der Name der neuen Gruppe sein. "
+
+#~ msgid ""
+#~ "This field will be checked for existence as a directory, and a new "
+#~ "directory with this name will be created if it does not already exist. "
+#~ "The ownership of the directory will be set to be that of the user being "
+#~ "created or updated."
+#~ msgstr ""
+#~ "Dieses Feld wird darauf überprüft, ob es als Verzeichnis existiert. Wenn "
+#~ "es es nicht gibt, wird ein neues Verzeichnis unter diesem Namen erstellt. "
+#~ "Der Eigentümer des Verzeichnisses wird der Benutzer sein, der erstellt "
+#~ "oder aktualisiert wird."
+
+#, fuzzy
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "-a"
+#~ msgstr "-a"
+
+#~ msgid "-d"
+#~ msgstr "-d"
+
+#~ msgid "-g"
+#~ msgstr "-g"
+
+#~ msgid "GID"
+#~ msgstr "GID"
+
+#~ msgid "-o"
+#~ msgstr "-o"
+
+#~ msgid "KEY"
+#~ msgstr "SCHLÜSSEL"
+
+#~ msgid "VALUE"
+#~ msgstr "WERT"
+
+#~ msgid "-K <placeholder-1/>=<placeholder-2/>"
+#~ msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#, fuzzy
+#~ msgid "-R"
+#~ msgstr "-"
+
+#, fuzzy
+#~ msgid "<option>-A</option><replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#, fuzzy
+#~ msgid "<option>-M</option><replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#~ msgid "Display faillog records for all users."
+#~ msgstr "Zeigt die fehlgeschlagene Anmeldung aller Benutzer an."
+
+#~ msgid ""
+#~ "Set maximum number of login failures after the account is disabled to "
+#~ "<replaceable>MAX</replaceable>. Selecting <replaceable>MAX</replaceable> "
+#~ "value of 0 has the effect of not placing a limit on the number of failed "
+#~ "logins. The maximum failure count should always be 0 for <emphasis>root</"
+#~ "emphasis> to prevent a denial of services attack against the system."
+#~ msgstr ""
+#~ "Setzt die maximale Anzahl von Login-Versuchen auf <replaceable>MAX</"
+#~ "replaceable>, ehe das Konto abgeschaltet wird. Ein Wert von Null führt "
+#~ "dazu, dass keine Beschränkung dieser Art besteht. Für <emphasis>Root</"
+#~ "emphasis> sollte der Wert Null betragen, um einen Denial-of-Service-"
+#~ "Angriff zu verhindern."
+
+#~ msgid ""
+#~ "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--user</option><replaceable>NAME</"
+#~ "replaceable>"
+
+#~ msgid ""
+#~ "The user's home directory will be created if it does not exist. The files "
+#~ "contained in <replaceable>SKEL_DIR</replaceable> will be copied to the "
+#~ "home directory if the <option>-k</option> option is used, otherwise the "
+#~ "files contained in <filename>/etc/skel</filename> will be used instead. "
+#~ "Any directories contained in <replaceable>SKEL_DIR</replaceable> or "
+#~ "<filename>/etc/skel</filename> will be created in the user's home "
+#~ "directory as well. The <option>-k</option> option is only valid in "
+#~ "conjunction with the <option>-m</option> option. The default is to not "
+#~ "create the directory and to not copy any files."
+#~ msgstr ""
+#~ "Das Home-Verzeichnis des Benutzer wird erstellt, falls es nicht "
+#~ "existiert. Falls die Option <option>-k</option> verwendet wird, werden "
+#~ "die Dateien aus <replaceable>SKEL_VERZ</replaceable> in das Home-"
+#~ "Verzeichnis kopiert. Ohne diese Option werden die Dateien aus <filename>/"
+#~ "etc/skel</filename> kopiert. Alle Verzeichnisse, die in "
+#~ "<replaceable>SKEL_VERZ</replaceable> oder <filename>/etc/skel</filename> "
+#~ "vorhanden sind, werden auch im Home-Verzeichnis des Benutzers erstellt. "
+#~ "Das Option <option>-k</option> kann nur in Verbindung mit der Option "
+#~ "<option>-m</option> verwendet werden. Standardmäßig wird das Verzeichnis "
+#~ "nicht erstellt und auch keine Dateien kopiert."
+
+#~ msgid ""
+#~ "Your password must be easily remembered so that you will not be forced to "
+#~ "write it on a piece of paper. This can be accomplished by appending two "
+#~ "small words together and separating each with a special character or "
+#~ "digit. For example, Pass%word."
+#~ msgstr ""
+#~ "Sie müssen sich Ihr Passwort leicht merken können, damit Sie nicht "
+#~ "gezwungen sind, es auf ein Stück Papier aufzuschreiben. Das können Sie "
+#~ "dadurch erreichen, indem zwei kurze Wörter zusammengefügt werden und mit "
+#~ "einem besonderen Zeichen oder einer Zahl getrennt werden. Zum Beispiel "
+#~ "Pass%wort."
+
+#~ msgid ""
+#~ "Other methods of construction involve selecting an easily remembered "
+#~ "phrase from literature and selecting the first or last letter from each "
+#~ "word. An example of this is:"
+#~ msgstr ""
+#~ "Eine andere Herangehensweise ist es, einen leicht zu merkenden Satz aus "
+#~ "der Literatur zu wählen und den ersten oder letzten Buchstaben von jedem "
+#~ "Wort zu nehmen. Ein Beispiel dafür:"
+
+#~ msgid "Ask not for whom the bell tolls"
+#~ msgstr "Ich bin der Geist, der stets verneint"
+
+#~ msgid "which produces"
+#~ msgstr "Das ergibt"
+
+#~ msgid "An4wtbt"
+#~ msgstr "IbdGdsv"
+
+#~ msgid ""
+#~ "You may be reasonably sure few crackers will have included this in their "
+#~ "dictionaries. You should, however, select your own methods for "
+#~ "constructing passwords and not rely exclusively on the methods given here."
+#~ msgstr ""
+#~ "Sie können einigermaßen sicher sein, dass dieses Wort nur wenige Cracker "
+#~ "in ihren Wörterlisten haben. Sie sollten allerdings Ihre eigenen Methoden "
+#~ "entwickeln, wie Sie Passwörter wählen, und sich nicht ausschließlich auf "
+#~ "die hier vorgestellten stützen."
+
+#~ msgid ""
+#~ "The only restriction placed on the contents of the fields is that no "
+#~ "control characters may be present, nor any of comma, colon, or equal "
+#~ "sign. The <emphasis remap=\"I\">other</emphasis> field does not have this "
+#~ "restriction, and is used to store accounting information used by other "
+#~ "applications."
+#~ msgstr ""
+#~ "Als Inhalt für diese Felder sind nur Kontrollzeichen, Kommata, "
+#~ "Doppelpunkte und Gleichheitszeichen ausgeschlossen. Das Feld <emphasis "
+#~ "remap=\"I\">sonstiges</emphasis> unterliegt dieser Beschränkung nicht, "
+#~ "und wird verwendet, um Kontoinformationen abzuspeichern, die von anderen "
+#~ "Anwendungen ausgelesen werden."
+
+#~ msgid ""
+#~ "Range of user IDs to choose from for the <command>useradd</command> "
+#~ "program."
+#~ msgstr ""
+#~ "Der Bereich der Benutzer-IDs, der dem Programm <command>useradd</command> "
+#~ "zur Verfügung steht."
+
+# SB: Something is wrong here. IMO, "-u" overrides "-t".\r
+#~ msgid ""
+#~ "The <option>-t</option> flag overrides the use of <option>-u</option>."
+#~ msgstr ""
+#~ "Die Option <option>-t</option> geht der Option <option>-u</option> vor."
+
+#~ msgid ""
+#~ "By default, <command>grpck</command> operates on the files <filename>/etc/"
+#~ "group</filename> and <filename>/etc/gshadow</filename>. The user may "
+#~ "select alternate files with the <emphasis remap=\"I\">group</emphasis> "
+#~ "and <emphasis remap=\"I\">shadow</emphasis> parameters. Additionally, the "
+#~ "user may execute the command in read-only mode by specifying the <option>-"
+#~ "r</option> flag. This causes all questions regarding changes to be "
+#~ "answered <emphasis>no</emphasis> without user intervention. "
+#~ "<command>grpck</command> can also sort entries in <filename>/etc/group</"
+#~ "filename> and <filename>/etc/gshadow</filename> by GID. To run it in sort "
+#~ "mode pass it <option>-s</option> flag. No checks are performed then, it "
+#~ "just sorts."
+#~ msgstr ""
+#~ "Standardmäßig arbeitet <command>grpwck</command> mit den Dateien "
+#~ "<filename>/etc/group</filename> und <filename>/etc/gshadow</filename>. "
+#~ "Der Benutzer kann andere Dateien mit den Parametern <emphasis remap=\"I"
+#~ "\">group</emphasis> und <emphasis remap=\"I\">shadow</emphasis> "
+#~ "auswählen. Außerdem kann er diesen Befehl mit der Option <option>-r</"
+#~ "option> im Modus Nur-Lesen ausführen. Mit <command>grpck</command> können "
+#~ "zudem die Einträge in <filename>/etc/group</filename> und <filename>/etc/"
+#~ "gshadow</filename> nach ihrer GID geordnet werden. Dies wird mit der "
+#~ "Option <option>-s</option> erreicht. Dabei wird die Datei nur geordnet, "
+#~ "Tests werden nicht durchgeführt."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "MAIL_DIR USERDEL_CMD"
+#~ msgstr "MAIL_DIR USERDEL_CMD"
+
+#~ msgid "MAIL_DIR"
+#~ msgstr "MAIL_DIR"
+
+#~ msgid "CHFN_AUTH"
+#~ msgstr "CHFN_AUTH"
+
+#~ msgid "GID_MAX GID_MIN"
+#~ msgstr "GID_MAX GID_MIN"
+
+#~ msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+#~ msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "The name of the new user's login shell. The named program will be used "
+#~ "for all future new user accounts."
+#~ msgstr ""
+#~ "Der Name der Login-Shell des neuen Benutzers. Das bezeichnete Programm "
+#~ "wird für alle zukünftigen Benutzerkonten verwendet."
+
+#~ msgid ""
+#~ "If no options are specified, <command>useradd</command> displays the "
+#~ "current default values."
+#~ msgstr ""
+#~ "Falls keine Optionen verwendet werden, zeigt <command>useradd</command> "
+#~ "die aktuellen Standardwerte an."
+
+#~ msgid "-R <placeholder-1/>"
+#~ msgstr "-R <placeholder-1/>"
+
+#~ msgid "user,"
+#~ msgstr "Benutzer,"
+
+#~ msgid "-A <placeholder-1/>"
+#~ msgstr "-A <placeholder-1/>"
+
+#~ msgid "-M <placeholder-1/>"
+#~ msgstr "-M <placeholder-1/>"
+
+#~ msgid ""
+#~ "Group administrator can add and delete users using <option>-a</option> "
+#~ "and <option>-d</option> options respectively. Administrators can use "
+#~ "<option>-r</option> option to remove group password. When no password is "
+#~ "set only group members can use <command>newgrp</command> to join the "
+#~ "group. Option <option>-R</option> disables access via a password to the "
+#~ "group through <command>newgrp</command> command (however members will "
+#~ "still be able to switch to this group)."
+#~ msgstr ""
+#~ "Der Gruppenadministrator kann Benutzer mit der Option <option>-a</option> "
+#~ "zur Gruppe hinzufügen und mit <option>-d</option> entfernen. Mit der "
+#~ "Option <option>-r</option> kann er das Gruppenpasswort entfernen. Wenn "
+#~ "kein Gruppenpasswort vergeben ist, können nur Mitglieder mittels "
+#~ "<command>newgrp</command> zu der Gruppe wechseln. Die Option <option>-R</"
+#~ "option> schaltet den Zugang zur Gruppe mit einem Passwort mittels "
+#~ "<command>newgrp</command> ab. Mitglieder der Gruppe können allerdings "
+#~ "noch immer zu dieser Gruppe wechseln."
diff --git a/man/po/fr.po b/man/po/fr.po
new file mode 100644 (file)
index 0000000..f672e4a
--- /dev/null
@@ -0,0 +1,9432 @@
+# translation of shadow-man.po to French
+# French translation of the shadow's man pages
+# Traduction des pages de manuel livrées avec shadow
+#
+# Nicolas FRANÇOIS <nicolas.francois@centaliens.net>, 2004-2009
+# Jean-Luc Coulon <jean-luc.coulon@wanadoo.fr>, 2008
+# ABBAS.B <abelkcem@hotmail.com>, 2009
+#     Certaines pages étaient déjà traduites:
+#       chage: Olivier Marin, 2001
+#       chpasswd: Amand Tihon <amand@alrj.org>
+#       chsh, groups, passwd(1), passwd(5): Christophe Blaess, 1997
+#       faillog(5): Pascal Terjan <CMoi@tuxfamily.org>
+#       gpasswd: Maxime Mastin, 2001
+#       shadow(5): Thierry Vignaud <tvignaud@mandrakesoft.com>, 1999
+#       useradd: Frédéric Delanoy, 2000
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow-man-pages 4.0.18\n"
+"POT-Creation-Date: 2009-07-24 03:03+0200\n"
+"PO-Revision-Date: 2009-06-14 14:46+0200\n"
+"Last-Translator: Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>\n"
+"Language-Team: Debian French Team <debian-l10n-french@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9.1\n"
+"X-Poedit-Language: French\n"
+"X-Poedit-Country: FRANCE\n"
+
+#: vipw.8.xml:38(refentrytitle) vipw.8.xml:43(refname) vipw.8.xml:52(command)
+msgid "vipw"
+msgstr "vipw"
+
+#: vipw.8.xml:39(manvolnum) usermod.8.xml:40(manvolnum)
+#: userdel.8.xml:42(manvolnum) userdel.8.xml:199(replaceable)
+#: useradd.8.xml:50(manvolnum) pwconv.8.xml:43(manvolnum)
+#: pwck.8.xml:41(manvolnum) nologin.8.xml:35(manvolnum)
+#: newusers.8.xml:51(manvolnum) logoutd.8.xml:35(manvolnum)
+#: lastlog.8.xml:36(manvolnum) grpck.8.xml:39(manvolnum)
+#: groupmod.8.xml:39(manvolnum) groupmems.8.xml:39(manvolnum)
+#: groupdel.8.xml:39(manvolnum) groupdel.8.xml:130(replaceable)
+#: groupadd.8.xml:43(manvolnum) faillog.8.xml:35(manvolnum)
+#: faillog.5.xml:86(manvolnum) chpasswd.8.xml:42(manvolnum)
+#: chgpasswd.8.xml:43(manvolnum)
+msgid "8"
+msgstr "8"
+
+#: vipw.8.xml:40(refmiscinfo) usermod.8.xml:41(refmiscinfo)
+#: userdel.8.xml:43(refmiscinfo) useradd.8.xml:51(refmiscinfo)
+#: pwconv.8.xml:44(refmiscinfo) pwck.8.xml:42(refmiscinfo)
+#: nologin.8.xml:36(refmiscinfo) newusers.8.xml:52(refmiscinfo)
+#: logoutd.8.xml:36(refmiscinfo) lastlog.8.xml:37(refmiscinfo)
+#: grpck.8.xml:40(refmiscinfo) groupmod.8.xml:40(refmiscinfo)
+#: groupmems.8.xml:40(refmiscinfo) groupdel.8.xml:40(refmiscinfo)
+#: groupadd.8.xml:44(refmiscinfo) faillog.8.xml:36(refmiscinfo)
+#: chpasswd.8.xml:43(refmiscinfo) chgpasswd.8.xml:44(refmiscinfo)
+msgid "System Management Commands"
+msgstr "Commandes de gestion du système"
+
+#: vipw.8.xml:44(refname) vipw.8.xml:58(command)
+msgid "vigr"
+msgstr "vigr"
+
+#: vipw.8.xml:45(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr "éditer les fichiers passwd, group, shadow ou gshadow"
+
+#: vipw.8.xml:54(replaceable) vipw.8.xml:60(replaceable)
+#: usermod.8.xml:52(replaceable) userdel.8.xml:52(arg)
+#: useradd.8.xml:61(replaceable) useradd.8.xml:73(replaceable)
+#: su.1.xml:66(replaceable) passwd.1.xml:57(replaceable)
+#: newusers.8.xml:63(replaceable) lastlog.8.xml:48(replaceable)
+#: groupmod.8.xml:51(replaceable) groupadd.8.xml:55(replaceable)
+#: faillog.8.xml:47(replaceable) chsh.1.xml:53(replaceable)
+#: chpasswd.8.xml:54(replaceable) chgpasswd.8.xml:55(replaceable)
+#: chage.1.xml:46(replaceable)
+msgid "options"
+msgstr "options"
+
+#: vipw.8.xml:66(title) usermod.8.xml:59(title) userdel.8.xml:60(title)
+#: useradd.8.xml:79(title) suauth.5.xml:50(title) su.1.xml:77(title)
+#: sg.1.xml:59(title) shadow.5.xml:44(title) shadow.3.xml:93(title)
+#: shadow.3.xml:149(title) pwconv.8.xml:70(title) pwck.8.xml:83(title)
+#: porttime.5.xml:44(title) passwd.5.xml:44(title) passwd.1.xml:66(title)
+#: nologin.8.xml:50(title) newusers.8.xml:70(title) newgrp.1.xml:55(title)
+#: logoutd.8.xml:50(title) login.defs.5.xml:107(title)
+#: login.access.5.xml:45(title) login.1.xml:103(title) limits.5.xml:46(title)
+#: lastlog.8.xml:54(title) gshadow.5.xml:43(title) grpck.8.xml:69(title)
+#: groups.1.xml:53(title) groupmod.8.xml:58(title) groupmems.8.xml:60(title)
+#: groupdel.8.xml:57(title) groupadd.8.xml:64(title) gpasswd.1.xml:72(title)
+#: faillog.8.xml:53(title) faillog.5.xml:44(title) expiry.1.xml:59(title)
+#: chsh.1.xml:62(title) chpasswd.8.xml:60(title) chgpasswd.8.xml:61(title)
+#: chfn.1.xml:63(title) chage.1.xml:55(title)
+msgid "DESCRIPTION"
+msgstr "DESCRIPTION"
+
+#: vipw.8.xml:67(para)
+#, fuzzy
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<command>Vipw</command> et <command>vigr</command> permettent d'éditer les "
+"fichiers <filename>/etc/passwd</filename> et <filename>/etc/group</"
+"filename>, respectivement. Avec l'option <option>-s</option>, ils permettent "
+"d'éditer les versions cachées de ces fichiers : <filename>/etc/shadow</"
+"filename> et <filename>/etc/gshadow</filename>, respectivement. Ces "
+"programmes placent les verrous nécessaires afin d'éviter toute corruption "
+"des fichiers. L'éditeur utilisé est choisi d'abord en fonction de la "
+"variable d'environnement <envar>$VISUAL</envar>, puis de la variable "
+"d'environnement <envar>$EDITOR</envar>, et enfin l'éditeur par défaut, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: vipw.8.xml:84(title) usermod.8.xml:67(title) userdel.8.xml:69(title)
+#: useradd.8.xml:97(title) su.1.xml:123(title) pwck.8.xml:164(title)
+#: passwd.1.xml:152(title) newusers.8.xml:239(title) login.1.xml:188(title)
+#: lastlog.8.xml:66(title) grpck.8.xml:133(title) groupmod.8.xml:67(title)
+#: groupmems.8.xml:75(title) groupadd.8.xml:73(title) gpasswd.1.xml:112(title)
+#: faillog.8.xml:64(title) chsh.1.xml:73(title) chpasswd.8.xml:109(title)
+#: chgpasswd.8.xml:88(title) chage.1.xml:65(title)
+msgid "OPTIONS"
+msgstr "OPTIONS"
+
+#: vipw.8.xml:85(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr ""
+"Les options applicables aux commandes <command>vipw</command> et "
+"<command>vigr</command> sont :"
+
+#: vipw.8.xml:91(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: vipw.8.xml:93(para)
+msgid "Edit group database."
+msgstr "Éditer la base de données de groupes."
+
+#: vipw.8.xml:97(term) userdel.8.xml:99(term) useradd.8.xml:247(term)
+#: passwd.1.xml:192(term) newusers.8.xml:257(term) lastlog.8.xml:82(term)
+#: groupmod.8.xml:98(term) groupadd.8.xml:108(term) faillog.8.xml:80(term)
+#: chsh.1.xml:79(term) chpasswd.8.xml:137(term) chgpasswd.8.xml:114(term)
+#: chage.1.xml:103(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+#: vipw.8.xml:99(para) userdel.8.xml:101(para) useradd.8.xml:249(para)
+#: passwd.1.xml:194(para) newusers.8.xml:259(para) lastlog.8.xml:86(para)
+#: groupmod.8.xml:100(para) groupadd.8.xml:110(para) faillog.8.xml:82(para)
+#: chsh.1.xml:81(para) chpasswd.8.xml:139(para) chgpasswd.8.xml:116(para)
+#: chage.1.xml:105(para)
+msgid "Display help message and exit."
+msgstr "Afficher un message d'aide et quitter."
+
+#: vipw.8.xml:103(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#: vipw.8.xml:105(para)
+msgid "Edit passwd database."
+msgstr "Éditer la base de données de mots de passe."
+
+#: vipw.8.xml:109(term) passwd.1.xml:259(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:111(para) passwd.1.xml:263(para)
+msgid "Quiet mode."
+msgstr "Mode silencieux."
+
+#: vipw.8.xml:115(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: vipw.8.xml:117(para)
+msgid "Edit shadow or gshadow database."
+msgstr "Éditer les bases de données shadow ou gshadow."
+
+#: vipw.8.xml:124(title) usermod.8.xml:372(title) userdel.8.xml:140(title)
+#: useradd.8.xml:644(title) suauth.5.xml:168(title) su.1.xml:338(title)
+#: sg.1.xml:88(title) shadow.5.xml:230(title) shadow.3.xml:201(title)
+#: pwconv.8.xml:168(title) pwck.8.xml:227(title) porttime.5.xml:105(title)
+#: passwd.5.xml:116(title) passwd.1.xml:374(title) newusers.8.xml:357(title)
+#: newgrp.1.xml:99(title) logoutd.8.xml:64(title) login.access.5.xml:96(title)
+#: login.1.xml:316(title) limits.5.xml:140(title) lastlog.8.xml:147(title)
+#: gshadow.5.xml:141(title) grpck.8.xml:185(title) groups.1.xml:75(title)
+#: groupmod.8.xml:164(title) groupmems.8.xml:168(title)
+#: groupdel.8.xml:89(title) groupadd.8.xml:200(title) gpasswd.1.xml:233(title)
+#: faillog.8.xml:202(title) faillog.5.xml:71(title) expiry.1.xml:68(title)
+#: chsh.1.xml:133(title) chpasswd.8.xml:208(title) chgpasswd.8.xml:184(title)
+#: chfn.1.xml:113(title) chage.1.xml:206(title)
+msgid "FILES"
+msgstr "FICHIERS"
+
+#: vipw.8.xml:127(filename) usermod.8.xml:375(filename)
+#: userdel.8.xml:143(filename) useradd.8.xml:659(filename)
+#: sg.1.xml:103(filename) pwck.8.xml:230(filename)
+#: newusers.8.xml:372(filename) newgrp.1.xml:114(filename)
+#: gshadow.5.xml:144(filename) grpck.8.xml:188(filename)
+#: groups.1.xml:78(filename) groupmod.8.xml:167(filename)
+#: groupmems.8.xml:171(filename) groupdel.8.xml:92(filename)
+#: groupadd.8.xml:203(filename) gpasswd.1.xml:50(filename)
+#: gpasswd.1.xml:53(filename) gpasswd.1.xml:236(filename)
+#: chgpasswd.8.xml:187(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+#: vipw.8.xml:129(para) usermod.8.xml:377(para) userdel.8.xml:145(para)
+#: useradd.8.xml:661(para) sg.1.xml:105(para) pwck.8.xml:232(para)
+#: newusers.8.xml:374(para) newgrp.1.xml:116(para) gshadow.5.xml:146(para)
+#: grpck.8.xml:190(para) groups.1.xml:80(para) groupmod.8.xml:169(para)
+#: groupmems.8.xml:173(para) groupdel.8.xml:94(para) groupadd.8.xml:205(para)
+#: gpasswd.1.xml:238(para) chgpasswd.8.xml:189(para)
+msgid "Group account information."
+msgstr "Informations sur les groupes."
+
+#: vipw.8.xml:133(filename) usermod.8.xml:381(filename)
+#: useradd.8.xml:665(filename) sg.1.xml:109(filename)
+#: newusers.8.xml:378(filename) newgrp.1.xml:120(filename)
+#: gshadow.5.xml:150(filename) grpck.8.xml:194(filename)
+#: groupmod.8.xml:173(filename) groupmems.8.xml:177(filename)
+#: groupdel.8.xml:98(filename) groupadd.8.xml:209(filename)
+#: gpasswd.1.xml:54(filename) gpasswd.1.xml:242(filename)
+#: chgpasswd.8.xml:193(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+#: vipw.8.xml:135(para) usermod.8.xml:383(para) useradd.8.xml:667(para)
+#: sg.1.xml:111(para) newusers.8.xml:380(para) newgrp.1.xml:122(para)
+#: gshadow.5.xml:152(para) grpck.8.xml:196(para) groupmod.8.xml:175(para)
+#: groupdel.8.xml:100(para) groupadd.8.xml:211(para) gpasswd.1.xml:244(para)
+#: chgpasswd.8.xml:195(para)
+msgid "Secure group account information."
+msgstr "Informations sécurisées sur les groupes."
+
+#: vipw.8.xml:139(filename) usermod.8.xml:387(filename)
+#: userdel.8.xml:155(filename) useradd.8.xml:647(filename)
+#: su.1.xml:341(filename) sg.1.xml:91(filename) shadow.5.xml:233(filename)
+#: pwck.8.xml:236(filename) passwd.5.xml:119(filename)
+#: passwd.1.xml:377(filename) newusers.8.xml:360(filename)
+#: newgrp.1.xml:102(filename) login.1.xml:331(filename)
+#: grpck.8.xml:200(filename) expiry.1.xml:71(filename)
+#: chsh.1.xml:136(filename) chpasswd.8.xml:211(filename)
+#: chfn.1.xml:122(filename) chage.1.xml:210(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+#: vipw.8.xml:141(para) usermod.8.xml:389(para) userdel.8.xml:157(para)
+#: useradd.8.xml:649(para) su.1.xml:343(para) sg.1.xml:93(para)
+#: shadow.5.xml:235(para) pwck.8.xml:238(para) passwd.5.xml:121(para)
+#: passwd.1.xml:379(para) newusers.8.xml:362(para) newgrp.1.xml:104(para)
+#: login.1.xml:333(para) grpck.8.xml:202(para) expiry.1.xml:73(para)
+#: chsh.1.xml:138(para) chpasswd.8.xml:213(para) chfn.1.xml:124(para)
+#: chage.1.xml:213(para)
+msgid "User account information."
+msgstr "Informations sur les comptes des utilisateurs."
+
+#: vipw.8.xml:145(filename) usermod.8.xml:393(filename)
+#: userdel.8.xml:161(filename) useradd.8.xml:653(filename)
+#: su.1.xml:347(filename) sg.1.xml:97(filename) shadow.5.xml:239(filename)
+#: shadow.3.xml:204(filename) pwck.8.xml:242(filename)
+#: passwd.5.xml:125(filename) passwd.1.xml:383(filename)
+#: newusers.8.xml:366(filename) newgrp.1.xml:108(filename)
+#: login.1.xml:337(filename) expiry.1.xml:77(filename)
+#: chpasswd.8.xml:217(filename) chage.1.xml:218(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+#: vipw.8.xml:147(para) usermod.8.xml:395(para) userdel.8.xml:163(para)
+#: useradd.8.xml:655(para) su.1.xml:349(para) sg.1.xml:99(para)
+#: shadow.5.xml:241(para) shadow.3.xml:206(para) pwck.8.xml:244(para)
+#: passwd.1.xml:385(para) newusers.8.xml:368(para) newgrp.1.xml:110(para)
+#: login.1.xml:339(para) expiry.1.xml:79(para) chpasswd.8.xml:219(para)
+#: chage.1.xml:221(para)
+msgid "Secure user account information."
+msgstr "Informations sécurisées sur les comptes utilisateurs."
+
+#: vipw.8.xml:154(title) usermod.8.xml:402(title) userdel.8.xml:248(title)
+#: useradd.8.xml:761(title) suauth.5.xml:197(title) su.1.xml:362(title)
+#: sg.1.xml:118(title) shadow.5.xml:258(title) shadow.3.xml:213(title)
+#: pwconv.8.xml:180(title) pwck.8.xml:302(title) porttime.5.xml:117(title)
+#: passwd.5.xml:144(title) passwd.1.xml:455(title) nologin.8.xml:64(title)
+#: newusers.8.xml:399(title) newgrp.1.xml:129(title)
+#: login.defs.5.xml:471(title) login.access.5.xml:108(title)
+#: login.1.xml:376(title) limits.5.xml:150(title) gshadow.5.xml:159(title)
+#: grpck.8.xml:254(title) groups.1.xml:87(title) groupmod.8.xml:233(title)
+#: groupmems.8.xml:186(title) groupdel.8.xml:146(title)
+#: groupadd.8.xml:291(title) gpasswd.1.xml:251(title) faillog.8.xml:214(title)
+#: faillog.5.xml:83(title) expiry.1.xml:86(title) chsh.1.xml:157(title)
+#: chpasswd.8.xml:238(title) chgpasswd.8.xml:208(title) chfn.1.xml:131(title)
+#: chage.1.xml:261(title)
+msgid "SEE ALSO"
+msgstr "VOIR AUSSI"
+
+#: vipw.8.xml:155(para)
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: usermod.8.xml:39(refentrytitle) usermod.8.xml:44(refname)
+#: usermod.8.xml:50(command) login.defs.5.xml:443(term)
+msgid "usermod"
+msgstr "usermod"
+
+#: usermod.8.xml:45(refpurpose)
+msgid "modify a user account"
+msgstr "Modifier un compte utilisateur"
+
+#: usermod.8.xml:54(replaceable) userdel.8.xml:54(replaceable)
+#: useradd.8.xml:63(replaceable) passwd.1.xml:60(replaceable)
+#: chsh.1.xml:56(replaceable) chage.1.xml:49(replaceable)
+msgid "LOGIN"
+msgstr "LOGIN"
+
+#: usermod.8.xml:60(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"La commande <command>usermod</command> modifie les fichiers d'administration "
+"des comptes du système selon les modifications qui ont été indiquées sur la "
+"ligne de commande."
+
+#: usermod.8.xml:68(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>usermod</command> sont :"
+
+#: usermod.8.xml:74(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--append</option>"
+
+#: usermod.8.xml:78(para)
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr ""
+"Ajouter l'utilisateur aux groupes supplémentaires. N'utilisez cette option "
+"qu'avec l'option <option>-G</option>."
+
+#: usermod.8.xml:85(term) useradd.8.xml:125(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option><replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option> <replaceable>COMMENTAIRE</"
+"replaceable>"
+
+#: usermod.8.xml:90(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"La nouvelle valeur du champ de commentaire du fichier de mots de passe pour "
+"l'utilisateur. Il est normalement modifié en utilisant l'utilitaire "
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: usermod.8.xml:99(term) useradd.8.xml:138(term)
+msgid ""
+"<option>-d</option>, <option>--home</option><replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option> <replaceable>RÉP_PERSO</"
+"replaceable>"
+
+#: usermod.8.xml:104(para)
+msgid "The user's new login directory."
+msgstr "Le nouveau répertoire personnel de l'utilisateur."
+
+#: usermod.8.xml:107(para)
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+"Si l'option <option>-m</option> est fournie, le contenu du répertoire "
+"personnel actuel sera déplacé dans le nouveau répertoire personnel, qui sera "
+"créé si nécessaire."
+
+#: usermod.8.xml:116(term) useradd.8.xml:165(term) useradd.8.xml:518(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</"
+"replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option> "
+"<replaceable>DATE_FIN_VALIDITÉ</replaceable>"
+
+#: usermod.8.xml:121(para) useradd.8.xml:170(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+"Date à laquelle le compte utilisateur sera désactivé. La date est indiquée "
+"dans le format <emphasis remap=\"I\">AAAA-MM-JJ</emphasis>."
+
+#: usermod.8.xml:128(term) useradd.8.xml:183(term) useradd.8.xml:531(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option> "
+"<replaceable>DURÉE_INACTIVITÉ</replaceable>"
+
+#: usermod.8.xml:133(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+"Nombre de jours suivant la fin de validité d'un mot de passe après lequel le "
+"compte est définitivement désactivé."
+
+#: usermod.8.xml:137(para)
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+"Une valeur de 0 désactive le compte dès que le mot de passe a dépassé sa fin "
+"de validité, et une valeur de -1 désactive cette fonctionnalité."
+
+#: usermod.8.xml:145(term) useradd.8.xml:203(term) useradd.8.xml:547(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option><replaceable>GROUP</replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option> <replaceable>GROUPE</replaceable>"
+
+#: usermod.8.xml:150(para)
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+"Nom du groupe ou identifiant numérique du groupe de connexion initial de "
+"l'utilisateur. Le groupe doit exister."
+
+#: usermod.8.xml:157(term) useradd.8.xml:231(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option><replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+"<option>-G</option>, <option>--groups</option> <replaceable>GROUPE1</"
+"replaceable>[<emphasis remap=\"I\">,GROUPE2,...</emphasis>[<emphasis remap="
+"\"I\">,GROUPEN</emphasis>]]]"
+
+#: usermod.8.xml:162(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+"Liste de groupes supplémentaires auxquels appartient également "
+"l'utilisateur. Chaque groupe est séparé du suivant par une virgule, sans "
+"espace entre eux. Les groupes sont soumis aux mêmes restrictions que celles "
+"de l'option <option>-g</option>."
+
+#: usermod.8.xml:169(para)
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+"Si l'utilisateur fait actuellement partie d'un groupe qui n'est pas listé, "
+"l'utilisateur sera supprimé du groupe. Ce comportement peut être modifié par "
+"l'option <option>-a</option>, qui permet d'ajouter l'utilisateur à la liste "
+"actuelle des groupes supplémentaires."
+
+#: usermod.8.xml:178(term)
+msgid ""
+"<option>-l</option>, <option>--login</option><replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--login</option> <replaceable>NOUVEAU_LOGIN</"
+"replaceable>"
+
+#: usermod.8.xml:183(para)
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory name should probably be changed "
+"manually to reflect the new login name."
+msgstr ""
+"Le nom de l'utilisateur passera de <replaceable>LOGIN</replaceable> à "
+"<replaceable>NOUVEAU_LOGIN</replaceable>. Rien d'autre ne sera modifié. En "
+"particulier, le nom du répertoire personnel de l'utilisateur devra "
+"probablement être changé pour refléter le nouveau nom de connexion."
+
+#: usermod.8.xml:193(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: usermod.8.xml:197(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+"Verrouiller le mot de passe d'un utilisateur. Cette option ajoute un « ! » "
+"devant le mot de passe chiffré, ce qui désactive le mot de passe. Vous ne "
+"pouvez pas utiliser cette option avec <option>-p</option> ou <option>-U</"
+"option>."
+
+#: usermod.8.xml:203(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+
+#: usermod.8.xml:212(term)
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--move-home</option>"
+
+#: usermod.8.xml:216(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+
+#: usermod.8.xml:220(para)
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr ""
+
+#: usermod.8.xml:227(term) useradd.8.xml:366(term) groupmod.8.xml:116(term)
+#: groupadd.8.xml:135(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+#: usermod.8.xml:231(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+"En combinaison avec l'option <option>-u</option>, cette option permet de "
+"changer l'identifiant utilisateur vers une valeur déjà utilisée."
+
+#: usermod.8.xml:238(term) useradd.8.xml:378(term) groupmod.8.xml:127(term)
+#: groupadd.8.xml:145(term)
+msgid ""
+"<option>-p</option>, <option>--password</option><replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+"<option>-p</option>, <option>--password</option> <replaceable>MOT_DE_PASSE</"
+"replaceable>"
+
+#: usermod.8.xml:243(para) groupmod.8.xml:132(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+"Mot de passe chiffré, comme renvoyé par <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+
+#: usermod.8.xml:248(para) useradd.8.xml:388(para) groupmod.8.xml:137(para)
+#: groupadd.8.xml:155(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+
+#: usermod.8.xml:253(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+
+#: usermod.8.xml:259(para) useradd.8.xml:393(para) groupmod.8.xml:142(para)
+#: groupadd.8.xml:160(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+
+#: usermod.8.xml:266(term) useradd.8.xml:427(term) useradd.8.xml:568(term)
+#: su.1.xml:157(term) chsh.1.xml:85(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option> <replaceable>INTERPRÉTEUR</"
+"replaceable>"
+
+#: usermod.8.xml:271(para) chsh.1.xml:89(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+"Nom du nouvel interpréteur de commandes initial (« login shell ») de "
+"l'utilisateur. Si ce champ est vide, le système sélectionnera l'interpréteur "
+"de commandes initial par défaut."
+
+#: usermod.8.xml:278(term) useradd.8.xml:442(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option> <replaceable>UID</replaceable>"
+
+#: usermod.8.xml:283(para)
+msgid "The new numerical value of the user's ID."
+msgstr "La valeur numérique de l'identifiant de l'utilisateur."
+
+#: usermod.8.xml:286(para)
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative. Values between 0 and 999 are typically "
+"reserved for system accounts."
+msgstr ""
+"Cette valeur doit être unique, à moins que l'option <option>-o</option> ne "
+"soit utilisée. La valeur ne doit pas être négative. Les valeurs comprises "
+"entre 0 et 999 sont généralement réservées aux comptes système."
+
+#: usermod.8.xml:292(para)
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+"La boîte aux lettres et tous les fichiers possédés par l'utilisateur et qui "
+"sont situés dans son répertoire personnel verront leur identifiant "
+"d'utilisateur automatiquement modifié."
+
+#: usermod.8.xml:297(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+"Le propriétaire (ou groupe propriétaire) des fichiers en dehors du "
+"répertoire personnel de l'utilisateur doit être modifié manuellement."
+
+#: usermod.8.xml:304(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+#: usermod.8.xml:308(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+"Déverrouiller le mot de passe d'un utilisateur. Cela supprime le « ! » situé "
+"devant le mot de passe chiffré. Vous ne pouvez pas utiliser cette option "
+"avec <option>-p</option> ou <option>-L</option>."
+
+#: usermod.8.xml:313(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+
+#: usermod.8.xml:324(term) useradd.8.xml:474(term)
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option><replaceable>SEUSER</"
+"replaceable>"
+msgstr ""
+"<option>-Z</option>, <option>--selinux-user</"
+"option><replaceable>UTILISATEUR_SELINUX</replaceable>"
+
+#: usermod.8.xml:329(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's new login shell. Setting this field to blank "
+#| "causes the system to select the default login shell."
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"the blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Nom du nouvel interpréteur de commandes initial (« login shell ») de "
+"l'utilisateur. Si ce champ est vide, le système sélectionnera l'interpréteur "
+"de commandes initial par défaut."
+
+#: usermod.8.xml:340(title) userdel.8.xml:221(title) useradd.8.xml:597(title)
+#: su.1.xml:302(title) shadow.3.xml:193(title) passwd.1.xml:338(title)
+#: newusers.8.xml:312(title) login.1.xml:238(title) lastlog.8.xml:159(title)
+#: groupdel.8.xml:65(title) groupadd.8.xml:224(title) gpasswd.1.xml:206(title)
+#: faillog.8.xml:191(title) chpasswd.8.xml:182(title)
+#: chgpasswd.8.xml:157(title)
+msgid "CAVEATS"
+msgstr "AVERTISSEMENTS"
+
+#: usermod.8.xml:341(para)
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux, but only check if the user "
+"is logged in according to utmp on other architectures."
+msgstr ""
+
+#: usermod.8.xml:349(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+
+#: usermod.8.xml:353(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+
+#: usermod.8.xml:359(title) userdel.8.xml:125(title) useradd.8.xml:621(title)
+#: su.1.xml:310(title) sg.1.xml:76(title) pwconv.8.xml:146(title)
+#: pwck.8.xml:213(title) passwd.1.xml:356(title) newusers.8.xml:324(title)
+#: newgrp.1.xml:87(title) login.1.xml:272(title) grpck.8.xml:173(title)
+#: groupmod.8.xml:152(title) groupmems.8.xml:156(title)
+#: groupdel.8.xml:77(title) groupadd.8.xml:186(title) gpasswd.1.xml:218(title)
+#: chsh.1.xml:120(title) chpasswd.8.xml:194(title) chgpasswd.8.xml:169(title)
+#: chfn.1.xml:99(title)
+msgid "CONFIGURATION"
+msgstr "CONFIGURATION"
+
+#: usermod.8.xml:360(para) userdel.8.xml:126(para) useradd.8.xml:622(para)
+#: su.1.xml:311(para) sg.1.xml:77(para) pwck.8.xml:214(para)
+#: passwd.1.xml:357(para) newusers.8.xml:325(para) newgrp.1.xml:88(para)
+#: login.1.xml:273(para) grpck.8.xml:174(para) groupmod.8.xml:153(para)
+#: groupmems.8.xml:157(para) groupdel.8.xml:78(para) groupadd.8.xml:187(para)
+#: gpasswd.1.xml:219(para) chsh.1.xml:121(para) chpasswd.8.xml:195(para)
+#: chgpasswd.8.xml:170(para) chfn.1.xml:100(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+"Les variables de configuration suivantes de <filename>/etc/login.defs</"
+"filename> modifient le comportement de cet outil :"
+
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "<option>MAIL_DIR</option> (chaîne ce caractères)"
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+"Répertoire d'attente des courriels (« mail spool directory »). Ce paramètre "
+"est nécessaire pour manipuler les boîtes à lettres lorsque le compte d'un "
+"utilisateur est modifié ou supprimé. S'il n'est pas spécifié, une valeur par "
+"défaut définie à la compilation est utilisée."
+
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "<option>MAIL_FILE</option> (chaîne ce caractères)"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+"Définit l'emplacement des boîtes aux lettres des utilisateurs relativement à "
+"leur répertoire personnel."
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+"Les paramètres <option>MAIL_DIR</option> et <option>MAIL_FILE</option> sont "
+"utilisées par <command>useradd</command>, <command>usermod</command>, et "
+"<command>userdel</command> pour créer, déplacer, ou supprimer les boîtes aux "
+"lettres des utilisateurs."
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+#, fuzzy
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+"Si <option>--preserve-environment</option> est utilisé, l'interpréteur de "
+"commandes indiqué par la variable d'environnement <envar>$SHELL</envar> sera "
+"utilisé."
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr "<option>MAX_MEMBERS_PER_GROUP</option> (nombre)"
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+"Nombre maximum de membres par entrée de groupe. Lorsque le maximum est "
+"atteint, une nouvelle entrée de groupe (ligne) est démarrée dans <filename>/"
+"etc/group</filename> (avec le même nom, même mot de passe, et même GID)."
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+"La valeur par défaut est 0, ce qui signifie qu'il n'y a pas de limites pour "
+"le nombre de membres dans un groupe."
+
+#. Note: on HP, split groups have the same ID, but different
+#.                names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+"Cette fonctionnalité (groupe découpé) permet de limiter la longueur des "
+"lignes dans le fichier de groupes. Ceci est utile pour s'assurer que les "
+"lignes pour les groupes NIS ne sont pas plus grandes que 1024 caractères."
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr "Si vous avez besoin de fixer cette limite, vous pouvez utiliser 25."
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+"Remarque : les groupes découpés ne sont peut-être pas pris en charge par "
+"tous les outils (même dans la suite d'outils Shadow). Vous ne devriez pas "
+"utiliser cette variable, sauf si vous en avez vraiment besoin."
+
+#: usermod.8.xml:403(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: userdel.8.xml:41(refentrytitle) userdel.8.xml:46(refname)
+#: userdel.8.xml:51(command) login.defs.5.xml:434(term)
+msgid "userdel"
+msgstr "userdel"
+
+#: userdel.8.xml:47(refpurpose)
+msgid "delete a user account and related files"
+msgstr "supprimer un compte utilisateur et les fichiers associés"
+
+#: userdel.8.xml:61(para)
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"La commande <command>userdel</command> modifie les fichiers d'administration "
+"des comptes du système, en supprimant les entrées qui se réfèrent à "
+"<emphasis remap=\"I\">LOGIN</emphasis>. L'utilisateur nommé doit exister."
+
+#: userdel.8.xml:70(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr ""
+"Les options disponibles de la commande <command>userdel</command> sont :"
+
+#: userdel.8.xml:75(term) groupadd.8.xml:80(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option>"
+
+#: userdel.8.xml:79(para)
+#, fuzzy
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+"Cette option force la suppression de l'utilisateur, même s'il est encore "
+"connecté. Elle force également <command>userdel</command> à supprimer son "
+"répertoire personnel ou sa file d'attente des courriels, même si un autre "
+"utilisateur utilise le même répertoire personnel ou si l'utilisateur "
+"spécifié n'est pas le propriétaire de la file d'attente des courriels. Si "
+"<emphasis>USERGROUPS_ENAB</emphasis> vaut <emphasis remap=\"I\">yes</"
+"emphasis> dans le fichier <filename>/etc/login.defs</filename> et si un "
+"groupe existe avec le même nom que l'utilisateur supprimé, alors ce groupe "
+"sera supprimé, même s'il s'agit du groupe primaire d'un autre utilisateur."
+
+#: userdel.8.xml:92(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+"<emphasis>Note :</emphasis> Cette option est dangereuse, elle peut laisser "
+"votre système dans un état incohérent."
+
+#: userdel.8.xml:105(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: userdel.8.xml:109(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+"Les fichiers présents dans le répertoire personnel de l'utilisateur seront "
+"supprimés en même temps que le répertoire lui-même, ainsi que le répertoire "
+"d'attente des courriels. Vous devrez rechercher et éliminer vous-même les "
+"fichiers situés dans d'autres systèmes de fichiers."
+
+#: userdel.8.xml:115(para)
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+"Le répertoire d'attente des courriels est défini par la variable "
+"<option>MAIL_DIR</option> du fichier <filename>login.defs</filename>."
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr "<option>USERDEL_CMD</option> (chaîne ce caractères)"
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+"Si ce paramètre est défini, cette commande est exécutée lors de la "
+"suppression d'un utilisateur. Elle pourra supprimer toutes les tâches "
+"périodiques cron ou at, tous les travaux d'impression, etc. de l'utilisateur "
+"(qui sera fourni comme premier paramètre)."
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr ""
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+"      "
+msgstr ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+"      "
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "<option>USERGROUPS_ENAB</option> (booléen)"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+
+#: userdel.8.xml:149(filename) useradd.8.xml:683(filename)
+#: su.1.xml:353(filename) pwconv.8.xml:171(filename)
+#: passwd.1.xml:389(filename) newusers.8.xml:384(filename)
+#: login.access.5.xml:99(filename) login.1.xml:367(filename)
+#: groupadd.8.xml:215(filename) chsh.1.xml:148(filename)
+#: chpasswd.8.xml:223(filename) chgpasswd.8.xml:199(filename)
+#: chfn.1.xml:116(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+#: userdel.8.xml:151(para) useradd.8.xml:685(para) su.1.xml:355(para)
+#: pwconv.8.xml:173(para) passwd.1.xml:391(para) newusers.8.xml:386(para)
+#: login.access.5.xml:101(para) login.1.xml:369(para) groupadd.8.xml:217(para)
+#: chsh.1.xml:150(para) chpasswd.8.xml:225(para) chgpasswd.8.xml:201(para)
+#: chfn.1.xml:118(para)
+msgid "Shadow password suite configuration."
+msgstr "Configuration de la suite des mots de passe cachés « shadow password »."
+
+#: userdel.8.xml:170(title) useradd.8.xml:692(title) pwck.8.xml:251(title)
+#: passwd.1.xml:404(title) grpck.8.xml:209(title) groupmod.8.xml:182(title)
+#: groupdel.8.xml:107(title) groupadd.8.xml:246(title) chage.1.xml:228(title)
+msgid "EXIT VALUES"
+msgstr "VALEURS DE RETOUR"
+
+#: userdel.8.xml:175(replaceable) useradd.8.xml:697(replaceable)
+#: pwck.8.xml:256(replaceable) passwd.1.xml:409(replaceable)
+#: grpck.8.xml:214(replaceable) groupmod.8.xml:187(replaceable)
+#: groupdel.8.xml:112(replaceable) groupadd.8.xml:251(replaceable)
+#: chage.1.xml:233(replaceable)
+msgid "0"
+msgstr "0"
+
+#: userdel.8.xml:177(para) useradd.8.xml:699(para) pwck.8.xml:258(para)
+#: passwd.1.xml:411(para) grpck.8.xml:216(para) groupmod.8.xml:189(para)
+#: groupdel.8.xml:114(para) groupadd.8.xml:253(para) chage.1.xml:235(para)
+msgid "success"
+msgstr "succès"
+
+#: userdel.8.xml:181(replaceable) useradd.8.xml:703(replaceable)
+#: su.1.xml:55(manvolnum) sg.1.xml:39(manvolnum) pwck.8.xml:262(replaceable)
+#: passwd.1.xml:45(manvolnum) passwd.1.xml:415(replaceable)
+#: newgrp.1.xml:39(manvolnum) login.1.xml:71(manvolnum)
+#: grpck.8.xml:220(replaceable) groups.1.xml:35(manvolnum)
+#: gpasswd.1.xml:43(manvolnum) expiry.1.xml:42(manvolnum)
+#: chsh.1.xml:41(manvolnum) chfn.1.xml:42(manvolnum) chage.1.xml:35(manvolnum)
+#: chage.1.xml:239(replaceable)
+msgid "1"
+msgstr "1"
+
+#: userdel.8.xml:183(para) useradd.8.xml:705(para)
+msgid "can't update password file"
+msgstr "impossible de mettre à jour le fichier des mots de passe"
+
+#: userdel.8.xml:187(replaceable) useradd.8.xml:709(replaceable)
+#: pwck.8.xml:268(replaceable) passwd.1.xml:421(replaceable)
+#: grpck.8.xml:226(replaceable) groupmod.8.xml:193(replaceable)
+#: groupdel.8.xml:118(replaceable) groupadd.8.xml:257(replaceable)
+#: chage.1.xml:245(replaceable)
+msgid "2"
+msgstr "2"
+
+#: userdel.8.xml:189(para) useradd.8.xml:711(para) pwck.8.xml:264(para)
+#: grpck.8.xml:222(para) groupmod.8.xml:195(para) groupdel.8.xml:120(para)
+#: groupadd.8.xml:259(para) chage.1.xml:247(para)
+msgid "invalid command syntax"
+msgstr "erreur de syntaxe"
+
+#: userdel.8.xml:193(replaceable) useradd.8.xml:727(replaceable)
+#: pwck.8.xml:292(replaceable) passwd.1.xml:445(replaceable)
+#: groupmod.8.xml:211(replaceable) groupdel.8.xml:124(replaceable)
+msgid "6"
+msgstr "6"
+
+#: userdel.8.xml:195(para)
+msgid "specified user doesn't exist"
+msgstr "l'utilisateur indiqué n'existe pas"
+
+#: userdel.8.xml:201(para)
+msgid "user currently logged in"
+msgstr "l'utilisateur est actuellement connecté"
+
+#: userdel.8.xml:205(replaceable) useradd.8.xml:739(replaceable)
+#: groupmod.8.xml:223(replaceable) groupdel.8.xml:136(replaceable)
+#: groupadd.8.xml:281(replaceable)
+msgid "10"
+msgstr "10"
+
+#: userdel.8.xml:207(para) useradd.8.xml:741(para) groupmod.8.xml:225(para)
+#: groupdel.8.xml:138(para) groupadd.8.xml:283(para)
+msgid "can't update group file"
+msgstr "impossible de mettre à jour le fichier des groupes"
+
+#: userdel.8.xml:211(replaceable) useradd.8.xml:745(replaceable)
+msgid "12"
+msgstr "12"
+
+#: userdel.8.xml:213(para)
+msgid "can't remove home directory"
+msgstr "impossible de supprimer le répertoire personnel"
+
+#: userdel.8.xml:171(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>userdel</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: userdel.8.xml:222(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+
+#: userdel.8.xml:229(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+"Vous devez vérifier vous-même qu'aucun fichier possédé par l'utilisateur ne "
+"subsiste sur tous les systèmes de fichiers."
+
+#: userdel.8.xml:233(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+"Vous ne pouvez supprimer aucun attribut NIS d'un client NIS. Cela doit être "
+"effectué sur le serveur NIS."
+
+#: userdel.8.xml:236(para)
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+"Si <option>USERGROUPS_ENAB</option> vaut <emphasis remap=\"I\">yes</"
+"emphasis> dans le fichier <filename>/etc/login.defs</filename>, "
+"<command>userdel</command> supprimera le groupe ayant le même nom que "
+"l'utilisateur. Afin d'éviter des incohérences entre les fichiers passwd et "
+"group, <command>userdel</command> vérifie que le groupe n'est pas utilisé "
+"comme groupe primaire d'un autre utilisateur ; si c'est le cas un "
+"avertissement sera affiché et le groupe ne sera pas supprimé. L'option "
+"<option>-f</option> permet de forcer la suppression du groupe."
+
+#: userdel.8.xml:249(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: useradd.8.xml:49(refentrytitle) useradd.8.xml:54(refname)
+#: useradd.8.xml:59(command) useradd.8.xml:66(command)
+#: useradd.8.xml:70(command) login.defs.5.xml:421(term)
+msgid "useradd"
+msgstr "useradd"
+
+#: useradd.8.xml:55(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+"créer un nouvel utilisateur ou modifier les informations par défaut "
+"appliquées aux nouveaux utilisateurs"
+
+#: useradd.8.xml:67(arg) useradd.8.xml:71(arg)
+msgid "-D"
+msgstr "-D"
+
+#: useradd.8.xml:80(para)
+#, fuzzy
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+"Quand elle est invoquée sans l'option <option>-D</option>, la commande "
+"<command>useradd</command> crée un nouveau compte utilisateur qui utilise "
+"les valeurs indiquées sur la ligne de commande et les valeurs par défaut du "
+"système. En fonction des options de la ligne de commande, la commande "
+"useradd fera la mise à jour des fichiers du système, elle pourra créer le "
+"répertoire personnel et copier les fichiers initiaux."
+
+#: useradd.8.xml:89(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+
+#: useradd.8.xml:98(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>useradd</command> sont :"
+
+#: useradd.8.xml:102(term) useradd.8.xml:499(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option><replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--base-dir</option> <replaceable>RÉP_BASE</"
+"replaceable>"
+
+#: useradd.8.xml:107(para)
+#, fuzzy
+msgid ""
+"The default base directory for the system if <option>-d</"
+"option><replaceable>HOME_DIR</replaceable> is not specified. "
+"<replaceable>BASE_DIR</replaceable> is concatenated with the account name to "
+"define the home directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+"Répertoire de base par défaut du système si l'option <option>-d</option> rép "
+"n'est pas spécifiée. <replaceable>RÉP_BASE</replaceable> est concaténé avec "
+"le nom du compte pour définir le répertoire personnel. Quand l'option "
+"<option>-m</option> n'est pas utilisée, <replaceable>RÉP_BASE</replaceable> "
+"doit exister."
+
+#: useradd.8.xml:115(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+
+#: useradd.8.xml:130(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+"Toute chaîne de texte. C'est généralement une description courte du compte, "
+"elle est actuellement utilisée comme champ pour le nom complet de "
+"l'utilisateur."
+
+#: useradd.8.xml:143(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+"Le nouvel utilisateur sera créé en utilisant <replaceable>RÉP_PERSO</"
+"replaceable> comme valeur de répertoire de connexion de l'utilisateur. Le "
+"comportement par défaut est de concaténer <replaceable>UTILISATEUR</"
+"replaceable> au répertoire <replaceable>RÉP_BASE</replaceable>, et de "
+"l'utiliser en tant que nom de répertoire de connexion. Il n'est pas "
+"nécessaire que le répertoire <replaceable>RÉP_PERSO</replaceable> existe "
+"mais il ne sera pas créé s'il n'existe pas."
+
+#: useradd.8.xml:155(term)
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-D</option>, <option>--defaults</option>"
+
+#: useradd.8.xml:159(para)
+#, fuzzy
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr "Modifier les valeurs par défaut"
+
+#: useradd.8.xml:174(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+
+#: useradd.8.xml:188(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+"Nombre de jours suivant la fin de validité d'un mot de passe après lequel le "
+"compte est définitivement désactivé. Une valeur de 0 désactive le compte dès "
+"que le mot de passe a dépassé sa fin de validité, et une valeur de -1 "
+"désactive cette fonctionnalité."
+
+#: useradd.8.xml:194(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's login shell. The default is to leave this field "
+#| "blank, which causes the system to select the default login shell."
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+"Le nom de l'interpréteur de commandes initial de l'utilisateur (« login "
+"shell »). Le comportement par défaut est de laisser ce champ vide. Le "
+"système sélectionnera alors l'interpréteur par défaut."
+
+#: useradd.8.xml:208(para)
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+"Nom du groupe ou identifiant numérique du groupe de connexion initial de "
+"l'utilisateur. Le nom du groupe doit exister. Un numéro de groupe doit se "
+"référer à un groupe déjà existant."
+
+#: useradd.8.xml:213(para)
+msgid ""
+"If not specified, the bahavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+
+#: useradd.8.xml:236(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+"Liste de groupes supplémentaires auxquels appartient également "
+"l'utilisateur. Chaque groupe est séparé du suivant par une virgule, sans "
+"espace entre eux. Les groupes sont soumis aux mêmes restrictions que celles "
+"de l'option <option>-g</option>. Le comportement par défaut pour "
+"l'utilisateur est de n'appartenir qu'au groupe initial."
+
+#: useradd.8.xml:253(term)
+msgid ""
+"<option>-k</option>, <option>--skel</option><replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-k</option>, <option>--skel</option><replaceable>RÉP_SQUELETTE</"
+"replaceable>"
+
+#: useradd.8.xml:258(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+
+#: useradd.8.xml:263(para)
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr ""
+"Cette option n'est valable que si l'option <option>-m</option> (ou <option>--"
+"create-home</option>) est utilisée."
+
+#: useradd.8.xml:267(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+
+#: useradd.8.xml:276(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-K</option>, <option>--key</option><replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option> <replaceable>CLÉ</"
+"replaceable>=<replaceable>VALEUR</replaceable>"
+
+#: useradd.8.xml:281(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K </option><replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-"
+"1</replaceable> can be used when creating system account to turn off "
+"password ageing, even though system account has no password at all. Multiple "
+"<option>-K</option> options can be specified, e.g.: <option>-K </"
+"option><replaceable>UID_MIN</replaceable>=<replaceable>100</"
+"replaceable><option>-K </option><replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Surcharge les valeurs par défaut du fichier <filename>/etc/login.defs</"
+"filename> (<option>UID_MIN</option>, <option>UID_MAX</option>, "
+"<option>UMASK</option>, <option>PASS_MAX_DAYS</option> et autres). "
+"<placeholder-1/> Par exemple : <option>-K</option> "
+"<replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</replaceable> peut "
+"être utilisé pour la création de comptes système pour désactiver la gestion "
+"de la durée de validité des mots de passe, même si les comptes système n'ont "
+"pas de mot de passe. Plusieurs options <option>-K</option> peuvent être "
+"spécifiées, comme par exemple : <option>-K</option> <replaceable>UID_MIN</"
+"replaceable>=<replaceable>100</replaceable> <option>-K</option> "
+"<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: useradd.8.xml:297(para)
+msgid ""
+"Note: <option>-K </option><replaceable>UID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Note : <option>-K</option> <replaceable>UID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable> ne fonctionne pas pour l'instant."
+
+#: useradd.8.xml:305(term)
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--no-log-init</option>"
+
+#: useradd.8.xml:307(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr ""
+
+#: useradd.8.xml:310(para)
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"resetted to avoid reusing the entry from a previously deleted user."
+msgstr ""
+
+#: useradd.8.xml:318(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:322(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+
+#: useradd.8.xml:328(para)
+msgid "By default, no home directories are created."
+msgstr ""
+
+#: useradd.8.xml:335(option)
+msgid "-M"
+msgstr "-M"
+
+#: useradd.8.xml:338(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+
+#: useradd.8.xml:347(term)
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-N</option>, <option>--no-user-group</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:357(para) useradd.8.xml:465(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: useradd.8.xml:370(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr ""
+"Permet de créer un compte d'utilisateur avec un identifiant (« UID ») "
+"dupliqué (non unique)."
+
+#: useradd.8.xml:371(para)
+msgid ""
+"This option is only valid in combination with the <option>-o</option> option."
+msgstr "Cette option n'est valable qu'avec l'option <option>-o</option>."
+
+#: useradd.8.xml:383(para) groupadd.8.xml:150(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"Le mot de passe chiffré, comme renvoyé par "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>. Le comportement par défaut est de désactiver le mot de passe."
+
+#: useradd.8.xml:400(term) newusers.8.xml:263(term) groupadd.8.xml:167(term)
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--system</option>"
+
+#: useradd.8.xml:404(para) newusers.8.xml:267(para)
+msgid "Create a system account."
+msgstr "Créer un compte système."
+
+#: useradd.8.xml:407(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are choosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: useradd.8.xml:416(para)
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such an user, regardless of the default setting in <filename>/etc/login."
+"defs</filename> (<option>CREATE_HOME</option>). You have to specify the "
+"<option>-m</option> options if you want a home directory for a system "
+"account to be created."
+msgstr ""
+
+#: useradd.8.xml:432(para)
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+"Le nom de l'interpréteur de commandes initial de l'utilisateur (« login "
+"shell »). Le comportement par défaut est de laisser ce champ vide. Le "
+"système sélectionnera alors l'interpréteur par défaut indiqué par la "
+"variable <option>SHELL</option> dans <filename>/etc/default/useradd</"
+"filename>, ou une chaîne vide par défaut."
+
+#: useradd.8.xml:447(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than 999 and greater than "
+"every other user. Values between 0 and 999 are typically reserved for system "
+"accounts."
+msgstr ""
+"La valeur numérique de l'identifiant de l'utilisateur. Cette valeur doit "
+"être unique, à moins que l'option <option>-o</option> ne soit utilisée. La "
+"valeur ne doit pas être négative. Le comportement par défaut est d'utiliser "
+"la plus petite valeur d'identifiant plus grande que 999, et plus grande que "
+"celle des identifiants de tous les autres utilisateurs. Les valeurs "
+"comprises entre 0 et 999 sont généralement réservées pour les comptes "
+"systèmes."
+
+#: useradd.8.xml:457(term)
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-U</option>, <option>--user-group</option>"
+
+#: useradd.8.xml:461(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+
+#: useradd.8.xml:479(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's new login shell. Setting this field to blank "
+#| "causes the system to select the default login shell."
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Nom du nouvel interpréteur de commandes initial (« login shell ») de "
+"l'utilisateur. Si ce champ est vide, le système sélectionnera l'interpréteur "
+"de commandes initial par défaut."
+
+#: useradd.8.xml:489(title)
+msgid "Changing the default values"
+msgstr "Modifier les valeurs par défaut"
+
+#: useradd.8.xml:490(para)
+#, fuzzy
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+"Quand il est invoqué avec l'option <option>-D</option>, <command>useradd</"
+"command> affichera soit les valeurs actuelles par défaut, soit mettra à jour "
+"les valeurs par défaut via la ligne de commande. Les options valables sont :"
+
+#: useradd.8.xml:504(para)
+#, fuzzy
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+"Préfixe du chemin des répertoires personnels pour les nouveaux utilisateurs. "
+"Le nom de l'utilisateur sera attaché à la fin de <replaceable>RÉP_PERSO</"
+"replaceable> pour créer le nom du nouveau répertoire si l'option <option>-d</"
+"option> n'est pas utilisée pendant la création d'un nouveau compte."
+
+#: useradd.8.xml:511(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:523(para)
+msgid "The date on which the user account is disabled."
+msgstr "Date à laquelle le compte utilisateur sera désactivé."
+
+#: useradd.8.xml:524(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:536(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+"Nombre de jours après la fin de validité d'un mot de passe avant que le "
+"compte ne soit désactivé."
+
+#: useradd.8.xml:540(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:552(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>. The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+
+#: useradd.8.xml:561(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:573(para)
+msgid "The name of a new user's login shell."
+msgstr ""
+
+#: useradd.8.xml:576(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:588(title)
+msgid "NOTES"
+msgstr "NOTES"
+
+#: useradd.8.xml:589(para)
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+"L'administrateur système doit se charger de placer les fichiers par défaut "
+"dans le répertoire <filename>/etc/skel</filename> (ou tout autre répertoire "
+"de modèles indiqué dans <filename>/etc/default/useradd</filename> ou sur la "
+"ligne de commande)."
+
+#: useradd.8.xml:598(para)
+#, fuzzy
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Vous ne pouvez pas ajouter d'utilisateur à un groupe NIS. Cela doit être "
+"effectué sur le serveur NIS."
+
+#: useradd.8.xml:603(para)
+#, fuzzy
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+"De la même façon, si le nom de l'utilisateur existe dans une base de données "
+"externe, telle que NIS, <command>useradd</command> refusera de créer le "
+"compte d'utilisateur."
+
+#: useradd.8.xml:609(para)
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Les noms d'utilisateur doivent commencer par une lettre minuscule ou un "
+"tiret bas (« underscore »), et seuls des lettres minuscules, des chiffres, "
+"des « underscore », ou des tirets peuvent suivre. Ils peuvent se terminer par "
+"un signe dollar. Soit, sous la forme d'une expression rationnelle : [a-z_][a-"
+"z0-9_-]*[$]?"
+
+#: useradd.8.xml:615(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr "Les noms d'utilisateur sont limités à 16 caractères."
+
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "<option>CREATE_HOME</option> (boolean)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr ""
+"Indiquer si un répertoire personnel doit être créé par défaut pour les "
+"nouveaux utilisateurs."
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overriden on the "
+"command line."
+msgstr ""
+"Ce réglage ne s'applique pas pour les utilisateurs système, et peut être "
+"annulé sur la ligne de commande."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+msgid "<option>GID_MAX</option> (number)"
+msgstr "<option>GID_MAX</option> (nombre)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+msgid "<option>GID_MIN</option> (number)"
+msgstr "<option>GID_MIN</option> (nombre)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"Plage d'identifiants numériques de groupes que les commandes "
+"<command>useradd</command>, <command>groupadd</command> ou "
+"<command>newusers</command> peuvent utiliser pour la création des groupes "
+"normaux."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr "<option>PASS_MAX_DAYS</option> (nombre)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+"Nombre maximum de jours de validité d'un mot de passe. Après cette durée, "
+"une modification du mot de passe est obligatoire. S'il n'est pas précisé, la "
+"valeur de -1 est utilisée (ce qui enlève toute restriction)."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "<option>PASS_MIN_DAYS</option> (nombre)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+"Nombre minimum de jours autorisé avant la modification d'un mot de passe. "
+"Toute tentative de modification du mot de passe avant cette durée est "
+"rejetée. S'il n'est pas précisé, la valeur de -1 est utilisée (ce qui enlève "
+"toute restriction)."
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr "<option>PASS_WARN_AGE</option> (nombre)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+"Nombre de jours durant lesquels l'utilisateur recevra un avertissement avant "
+"que son mot de passe n'arrive en fin de validité. Une valeur négative "
+"signifie qu'aucun avertissement n'est donné. S'il n'est pas précisé, aucun "
+"avertissement n'est donné."
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "<option>SYS_GID_MAX</option> (nombre)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "<option>SYS_GID_MIN</option> (nombre)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"Plage d'identifiants numériques de groupes que les commandes "
+"<command>useradd</command>, <command>groupadd</command> ou "
+"<command>newusers</command> peuvent utiliser pour la création de groupes "
+"système."
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "<option>SYS_UID_MAX</option> (nombre)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "<option>SYS_UID_MIN</option> (nombre)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+"Plage d'identifiants numériques d'utilisateurs que les commandes "
+"<command>useradd</command> ou <command>newusers</command> peuvent utiliser "
+"pour la création d'utilisateurs système."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>UID_MAX</option> (number)"
+msgstr "<option>UID_MAX</option> (nombre)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>UID_MIN</option> (number)"
+msgstr "<option>UID_MIN</option> (nombre)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+"Plage d'identifiants numériques d'utilisateurs que les commandes "
+"<command>useradd</command> ou <command>newusers</command> peuvent utiliser "
+"pour la création d'utilisateurs normaux."
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+msgid "<option>UMASK</option> (number)"
+msgstr "<option>UMASK</option> (nombre)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+#, fuzzy
+#| msgid ""
+#| "The permission mask is initialized to this value. If not specified, the "
+#| "permission mask will be initialized to 022."
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+"Valeur d'initialisation du masque de permissions. S'il n'est pas précisé, le "
+"masque des permissions sera initialisé à 022."
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create"
+msgstr ""
+
+#: useradd.8.xml:42(para) newusers.8.xml:42(para) login.defs.5.xml:42(para)
+#: login.1.xml:42(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overriden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: useradd.8.xml:671(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+#: useradd.8.xml:673(para)
+msgid "Default values for account creation."
+msgstr "Valeurs par défaut pour la création de comptes."
+
+#: useradd.8.xml:677(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+#: useradd.8.xml:679(para)
+msgid "Directory containing default files."
+msgstr "Répertoire contenant les fichiers par défaut."
+
+#: useradd.8.xml:715(replaceable) shadow.3.xml:35(manvolnum)
+#: pwck.8.xml:274(replaceable) passwd.1.xml:427(replaceable)
+#: grpck.8.xml:232(replaceable) groupmod.8.xml:199(replaceable)
+#: groupadd.8.xml:263(replaceable)
+msgid "3"
+msgstr "3"
+
+#: useradd.8.xml:717(para) passwd.1.xml:447(para) groupmod.8.xml:201(para)
+#: groupadd.8.xml:265(para)
+msgid "invalid argument to option"
+msgstr "paramètre non valable pour l'option"
+
+#: useradd.8.xml:721(replaceable) pwck.8.xml:280(replaceable)
+#: passwd.1.xml:433(replaceable) grpck.8.xml:238(replaceable)
+#: groupmod.8.xml:205(replaceable) groupadd.8.xml:269(replaceable)
+msgid "4"
+msgstr "4"
+
+#: useradd.8.xml:723(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "UID déjà utilisé (et pas d'option <option>-o</option>)"
+
+#: useradd.8.xml:729(para) groupmod.8.xml:207(para) groupmod.8.xml:213(para)
+#: groupdel.8.xml:126(para)
+msgid "specified group doesn't exist"
+msgstr "le groupe spécifié n'existe pas"
+
+#: useradd.8.xml:733(replaceable) groupmod.8.xml:217(replaceable)
+#: groupadd.8.xml:275(replaceable)
+msgid "9"
+msgstr "9"
+
+#: useradd.8.xml:735(para)
+msgid "username already in use"
+msgstr "nom d'utilisateur déjà utilisé"
+
+#: useradd.8.xml:747(para)
+msgid "can't create home directory"
+msgstr "impossible de créer le répertoire personnel"
+
+#: useradd.8.xml:751(replaceable)
+msgid "13"
+msgstr "13"
+
+#: useradd.8.xml:753(para)
+msgid "can't create mail spool"
+msgstr "impossible de créer le répertoire d'attente des courriels"
+
+#: useradd.8.xml:693(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>useradd</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: useradd.8.xml:762(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: suauth.5.xml:34(refentrytitle) suauth.5.xml:39(refname)
+msgid "suauth"
+msgstr "suauth"
+
+#: suauth.5.xml:35(manvolnum) shadow.5.xml:35(manvolnum)
+#: pwck.8.xml:286(replaceable) porttime.5.xml:35(manvolnum)
+#: passwd.5.xml:35(manvolnum) passwd.1.xml:439(replaceable)
+#: login.defs.5.xml:98(manvolnum) login.access.5.xml:36(manvolnum)
+#: limits.5.xml:36(manvolnum) gshadow.5.xml:34(manvolnum)
+#: grpck.8.xml:244(replaceable) faillog.5.xml:35(manvolnum)
+msgid "5"
+msgstr "5"
+
+#: suauth.5.xml:36(refmiscinfo) shadow.5.xml:36(refmiscinfo)
+#: porttime.5.xml:36(refmiscinfo) passwd.5.xml:36(refmiscinfo)
+#: login.defs.5.xml:99(refmiscinfo) login.access.5.xml:37(refmiscinfo)
+#: limits.5.xml:37(refmiscinfo) gshadow.5.xml:35(refmiscinfo)
+#: faillog.5.xml:36(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr "Formats et conversions de fichiers"
+
+#: suauth.5.xml:40(refpurpose)
+msgid "detailed su control file"
+msgstr "Fichier de contrôle détaillé de su"
+
+#: suauth.5.xml:45(command) suauth.5.xml:171(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+#: suauth.5.xml:51(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+"Le fichier <filename>/etc/suauth</filename> est lu chaque fois que su est "
+"exécuté. Il permet de modifier le comportement de la commande su, en "
+"fonction de :"
+
+#. .RS
+#: suauth.5.xml:58(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      1) the user su is targetting\n"
+"    "
+msgstr ""
+"\n"
+"      1) l'utilisateur cible de su\n"
+"    "
+
+#. .fi
+#: suauth.5.xml:62(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+"2) l'utilisateur qui exécute la commande su (ou un groupe dont il est membre)"
+
+#: suauth.5.xml:67(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+"Le fichier est formaté de la façon suivante (les lignes commençant par un "
+"« # » sont des commentaires, et sont ignorées) :"
+
+#: suauth.5.xml:72(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      to-id:from-id:ACTION\n"
+"    "
+msgstr ""
+"\n"
+"      vers-id:par-id:ACTION\n"
+"    "
+
+#: suauth.5.xml:76(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\""
+msgstr ""
+"Où vers-id peut être le mot <emphasis>ALL</emphasis>, une liste de noms "
+"d'utilisateurs séparés par une virgule ou <emphasis>ALL EXCEPT</emphasis> "
+"suivi d'une liste d'utilisateurs séparés par une virgule."
+
+#: suauth.5.xml:82(para)
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is neccessary."
+msgstr ""
+"par-id utilise le même format que vers-id, mais accepte également le mot-clé "
+"<emphasis>GROUP</emphasis>. <emphasis>ALL EXCEPT GROUP</emphasis> est "
+"également accepté. <emphasis>GROUP</emphasis> est suivi d'un ou plusieurs "
+"noms de groupes, séparés par une virgule. Il n'est pas suffisant d'avoir "
+"comme groupe primaire le groupe approprié : une entrée dans "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> est nécessaire."
+
+#: suauth.5.xml:93(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr "Les valeurs d'ACTION valables sont :"
+
+#: suauth.5.xml:99(emphasis)
+msgid "DENY"
+msgstr "DENY"
+
+#: suauth.5.xml:102(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr ""
+"La tentative de changement d'utilisateur s'est arrêtée avant que le mot de "
+"passe ne soit demandé."
+
+#: suauth.5.xml:109(emphasis)
+msgid "NOPASS"
+msgstr "NOPASS"
+
+#: suauth.5.xml:112(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+"La tentative est automatiquement réussie. Aucun mot de passe n'est demandé."
+
+#: suauth.5.xml:120(emphasis)
+msgid "OWNPASS"
+msgstr "OWNPASS"
+
+#: suauth.5.xml:123(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+"Pour que la commande su soit réussie, l'utilisateur doit entrer son propre "
+"mot de passe. Ceci lui est demandé."
+
+#: suauth.5.xml:131(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+"Notez qu'il y a trois champs séparés par un « deux-points ». Ne pas accoler "
+"d'espace à ce « deux-points ». Notez aussi que le fichier est examiné "
+"séquentiellement ligne par ligne, et que la première règle applicable est "
+"utilisée sans que le reste du fichier ne soit examiné. Ceci permet à "
+"l'administrateur système de définir un contrôle aussi fin qu'il le souhaite."
+
+#: suauth.5.xml:141(title)
+msgid "EXAMPLE"
+msgstr "EXEMPLE"
+
+#: suauth.5.xml:142(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      # sample /etc/suauth file\n"
+"      #\n"
+"      # A couple of privileged usernames may\n"
+"      # su to root with their own password.\n"
+"      #\n"
+"      root:chris,birddog:OWNPASS\n"
+"      #\n"
+"      # Anyone else may not su to root unless in\n"
+"      # group wheel. This is how BSD does things.\n"
+"      #\n"
+"      root:ALL EXCEPT GROUP wheel:DENY\n"
+"      #\n"
+"      # Perhaps terry and birddog are accounts\n"
+"      # owned by the same person.\n"
+"      # Access can be arranged between them\n"
+"      # with no password.\n"
+"      #\n"
+"      terry:birddog:NOPASS\n"
+"      birddog:terry:NOPASS\n"
+"      #\n"
+"    "
+msgstr ""
+"\n"
+"      # exemple de fichier /etc/suauth\n"
+"      #\n"
+"      # Deux utilisateurs privilégiés peuvent\n"
+"      # devenir root avec leur propre mot de passe.\n"
+"      #\n"
+"      root:chris,birddog:OWNPASS\n"
+"      #\n"
+"      # Les autres ne peuvent pas de venir root avec\n"
+"      # su, à l'exception des membres du groupe wheel.\n"
+"      # Ceci correspond au comportement des BSD.\n"
+"      #\n"
+"      root:ALL EXCEPT GROUP wheel:DENY\n"
+"      #\n"
+"      # terry et birddog sont des comptes possédés\n"
+"      # par la même personne.\n"
+"      # Un accès sans mot passe est aménagé\n"
+"      # entre ces deux comptes.\n"
+"      #\n"
+"      terry:birddog:NOPASS\n"
+"      birddog:terry:NOPASS\n"
+"      #\n"
+"    "
+
+#: suauth.5.xml:178(title) pwconv.8.xml:135(title) login.defs.5.xml:455(title)
+msgid "BUGS"
+msgstr "BOGUES"
+
+#: suauth.5.xml:179(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+"Il en reste sans doute beaucoup. L'analyseur du fichier est particulièrement "
+"impitoyable avec les erreurs de syntaxe. Il n'autorise d'espace qu'en début "
+"et fin de ligne, et seul le délimiteur spécifique doit être utilisé."
+
+#: suauth.5.xml:188(title) shadow.3.xml:183(title)
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSTICS"
+
+#: suauth.5.xml:189(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+"Une erreur dans l'analyse du fichier est reportée via "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> au niveau ERR dans la catégorie AUTH."
+
+#: suauth.5.xml:198(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: su.1.xml:54(refentrytitle) su.1.xml:59(refname) su.1.xml:64(command)
+#: login.defs.5.xml:395(term)
+msgid "su"
+msgstr "su"
+
+#: su.1.xml:56(refmiscinfo) sg.1.xml:40(refmiscinfo)
+#: passwd.1.xml:46(refmiscinfo) newgrp.1.xml:40(refmiscinfo)
+#: login.1.xml:72(refmiscinfo) groups.1.xml:36(refmiscinfo)
+#: gpasswd.1.xml:44(refmiscinfo) expiry.1.xml:43(refmiscinfo)
+#: chsh.1.xml:42(refmiscinfo) chfn.1.xml:43(refmiscinfo)
+#: chage.1.xml:36(refmiscinfo)
+msgid "User Commands"
+msgstr "Commandes utilisateur"
+
+#: su.1.xml:60(refpurpose)
+#, fuzzy
+msgid "change user ID or become superuser"
+msgstr "Changer d'identifiant d'utilisateur ou devenir superutilisateur"
+
+#: su.1.xml:70(replaceable) login.1.xml:85(replaceable)
+#: login.1.xml:93(replaceable)
+msgid "username"
+msgstr "nom_utilisateur"
+
+#: su.1.xml:78(para)
+#, fuzzy
+msgid ""
+"The <command>su</command> command is used to become another user during a "
+"login session. Invoked without a <option>username</option>, <command>su</"
+"command> defaults to becoming the superuser. The optional argument <option>-"
+"</option> may be used to provide an environment similar to what the user "
+"would expect had the user logged in directly."
+msgstr ""
+"<command>Su</command> permet de devenir un autre utilisateur pour la durée "
+"d'une session. Invoqué sans nom d'utilisateur, le comportement par défaut "
+"est de devenir superutilisateur. Le paramètre optionnel <option>-</option> "
+"permet d'obtenir un environnement similaire à celui que l'utilisateur aurait "
+"obtenu lors d'une connexion directe."
+
+#: su.1.xml:87(para)
+msgid ""
+"Additional arguments may be provided after the username, in which case they "
+"are supplied to the user's login shell. In particular, an argument of "
+"<option>-c</option> will cause the next argument to be treated as a command "
+"by most command interpreters. The command will be executed by the shell "
+"specified in <filename>/etc/passwd</filename> for the target user."
+msgstr ""
+"Des paramètres supplémentaires peuvent être fournis après le nom de "
+"l'utilisateur. Dans ce cas, ils sont donnés à l'interpréteur de commandes de "
+"connexion de l'utilisateur. En particulier, le paramètre « <option>-c</"
+"option> » considère que le paramètre suivant est une commande pour la "
+"plupart des interpréteurs de commandes. La commande sera exécutée par "
+"l'interpréteur indiqué dans <filename>/etc/passwd</filename> pour "
+"l'utilisateur cible."
+
+#: su.1.xml:96(para)
+msgid ""
+"You can use the <option>--</option> argument to separate <command>su</"
+"command> options from the arguments supplied to the shell."
+msgstr ""
+"Vous pouvez utiliser le paramètre <option>--</option> pour séparer les "
+"options de <command>su</command> des paramètres fournis par l'interpréteur "
+"de commandes."
+
+#: su.1.xml:101(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+"Un mot de passe sera demandé à l'utilisateur, si nécessaire. Les mots de "
+"passe incorrects produisent un message d'erreur. Toutes les tentatives, "
+"réussies ou non, sont enregistrées afin de détecter tout abus du système."
+
+#: su.1.xml:106(para)
+#, fuzzy
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"L'environnement actuel est fourni au nouvel interpréteur de commandes. La "
+"valeur de <envar>$PATH</envar> est réinitialisée à <filename>/bin:/usr/bin</"
+"filename> pour les utilisateurs normaux, ou à <emphasis>/sbin:/bin:/usr/"
+"sbin:/usr/bin</emphasis> pour le superutilisateur. Ce comportement peut être "
+"modifié avec les paramètres <emphasis>ENV_PATH</emphasis> et "
+"<emphasis>ENV_SUPATH</emphasis> de <filename>/etc/login.defs</filename>. "
+
+#: su.1.xml:115(para) login.1.xml:166(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+"Une connexion à un sous-système est indiquée par la présence d'un « * » comme "
+"premier caractère de l'interpréteur de commandes initial. Le répertoire "
+"personnel sera utilisé comme racine d'un nouveau système de fichiers dans "
+"lequel l'utilisateur sera connecté."
+
+#: su.1.xml:124(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr "Les options applicables à la commande <command>su</command> sont :"
+
+#: su.1.xml:128(term)
+#, fuzzy
+msgid ""
+"<option>-c</option>, <option>--command</option><replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option> <replaceable>COMMENTAIRE</"
+"replaceable>"
+
+#: su.1.xml:133(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr ""
+"Indiquer une commande qui sera invoquée par l'interpréteur de commandes en "
+"utilisant son option <option>-c</option>"
+
+#: su.1.xml:140(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: su.1.xml:144(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+"Fournir à l'utilisateur un environnement similaire à celui qu'il aurait "
+"obtenu s'il s'était connecté directement."
+
+#: su.1.xml:148(para)
+msgid ""
+"When <option>-</option> is used, it must be specified as the last "
+"<command>su</command> option. The other forms (<option>-l</option> and "
+"<option>--login</option>) do not have this restriction."
+msgstr ""
+"Lorsque <option>-</option> est utilisé, il doit être indiqué comme dernier "
+"paramètre de <command>su</command> option. Les autres formes (<option>-l</"
+"option> et <option>--login</option>) ne présentent pas cette restriction."
+
+#: su.1.xml:162(para)
+msgid "The shell that will be invoked."
+msgstr "Interpréteur de commande devant être appelé."
+
+#: su.1.xml:170(para)
+msgid "The shell specified with --shell."
+msgstr "Interpréteur de commande indiqué par --shell."
+
+#: su.1.xml:173(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+"Si <option>--preserve-environment</option> est utilisé, l'interpréteur de "
+"commandes indiqué par la variable d'environnement <envar>$SHELL</envar> sera "
+"utilisé."
+
+#: su.1.xml:180(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+"Interpréteur de commandes indiqué dans <filename>/etc/passwd</filename> pour "
+"l'utilisateur cible."
+
+#: su.1.xml:186(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+"<filename>/bin/sh</filename> si aucun interpréteur de commandes ne peut être "
+"trouvé par l'une des méthodes ci-dessus."
+
+#: su.1.xml:163(para)
+#, fuzzy
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+"L'interpréteur de commandes est choisi parmi (celui de plus haute priorité "
+"en tête) : <placeholder-1/>"
+
+#: su.1.xml:191(para)
+#, fuzzy
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shell</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+"Si l'utilisateur cible possède un interpréteur de commande restreint (par "
+"exemple, le champ de l'interpréteur de commande dans <filename>/etc/passwd</"
+"filename> n'est pas renseigné dans <filename>/etc/shell</filename>), alors, "
+"ni l'option <option>--shell</option> ni la variable d'environnement <envar>"
+"$SHELL</envar> ne seront prises en compte à moins que <command>su</command> "
+"ne soit appelé par le superutilisateur."
+
+#: su.1.xml:202(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:211(envar)
+msgid "$PATH"
+msgstr ""
+
+#: su.1.xml:213(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+
+#: su.1.xml:222(envar)
+msgid "$IFS"
+msgstr ""
+
+#: su.1.xml:224(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+
+#: su.1.xml:207(para)
+#, fuzzy
+#| msgid "Preserve the current environment."
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr "Préserver l'environnement actuel."
+
+#: su.1.xml:233(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+"Si l'utilisateur cible possède un interpréteur de commandes restreint, cette "
+"option n'a aucun effet (à moins que <command>su</command> ne soit appelé par "
+"le superutilisateur)."
+
+#: su.1.xml:242(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+
+#: su.1.xml:251(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+
+#: su.1.xml:258(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+
+#: su.1.xml:268(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+
+#: su.1.xml:281(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+
+#: su.1.xml:289(para)
+msgid "Other environment might be set by PAM modules."
+msgstr ""
+
+#: su.1.xml:237(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:303(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Cette version de <command>su</command> a de nombreuses options de "
+"compilation. Seules certaines d'entre elles peuvent avoir été activées sur "
+"votre site."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE</option> (string)"
+msgstr "<option>CONSOLE</option> (chaîne ce caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+"S'il est défini, soit un chemin complet du fichier contenant les noms de "
+"périphériques (un par ligne), soit une liste de noms du périphérique "
+"délimitée par des « : ». Les connexions d'un administrateur ne seront "
+"autorisées que depuis ces périphériques."
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+"S'il n'est pas défini, root pourra se connecter depuis n'importe quel "
+"périphérique."
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "<option>CONSOLE_GROUPS</option> (chaîne ce caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+"Une liste de groupes à rajouter aux groupes supplémentaires de l'utilisateur "
+"lors d'une connexion sur une console (déterminé par le paramètre CONSOLE). "
+"Par défaut, aucun groupe n'est ajouté. <placeholder-1/> À utiliser avec "
+"précaution : il est possible que les utilisateurs aient un accès permanent "
+"à ces groupes, et cela même s'ils ne sont pas connectés sur la console."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "<option>DEFAULT_HOME</option> (booléen)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"in no."
+msgstr ""
+"Indiquer si la connexion est permise si on ne peut pas accéder au répertoire "
+"personnel. Le réglage par défaut est « no »."
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+"S'il est réglé sur <replaceable>yes</replaceable>, l'utilisateur va se "
+"connecter dans le répertoire racine (<filename>/</filename>) s'il n'est pas "
+"possible d'accéder à son répertoire personnel."
+
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "<option>ENV_HZ</option> (chaîne ce caractères)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+"S'il est défini, il sera utilisé pour définir la variable d'environnement HZ "
+"lorsqu'un utilisateur se connecte. La valeur doit être précédée par "
+"<replaceable>HZ=</replaceable>. Une valeur commune sur Linux est "
+"<replaceable>HZ=100</replaceable>."
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+"La variable d'environnement <envar>HZ</envar> est uniquement définie quand "
+"l'utilisateur (le super-utilisateur) se connecte avec <command>sulogin</"
+"command>."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "<option>ENVIRON_FILE</option> (chaîne ce caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+"Si ce fichier existe et est lisible, l'environnement de connexion sera lu à  "
+"partir de lui. Chaque ligne doit être sous la forme nom=valeur."
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "The file is formatted like this, with lines starting with a # being "
+#| "treated as comment lines and ignored;"
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+"Le fichier est formaté de la façon suivante (les lignes commençant par un "
+"« # » sont des commentaires, et sont ignorées) :"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "<option>ENV_PATH</option> (chaîne ce caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value can be preceded by <replaceable>PATH=</"
+"replaceable>, or a colon separated list of paths (for example <replaceable>/"
+"bin:/usr/bin</replaceable>). The default value is <replaceable>PATH=/bin:/"
+"usr/bin</replaceable>."
+msgstr ""
+"S'il est défini, il sera utilisé pour définir la variable d'environnement "
+"PATH quand un utilisateur ordinaire se connecte. La valeur peut être "
+"précédée par <replaceable>PATH=</replaceable>, ou une liste de chemins "
+"séparés par des deux points (par exemple <replaceable>/bin:/usr/bin</"
+"replaceable>). La valeur par défaut est <replaceable>PATH=/bin:/usr/bin</"
+"replaceable>."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "<option>ENV_SUPATH</option> (chaîne ce caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value can be preceded by <replaceable>PATH=</"
+"replaceable>, or a colon separated list of paths (for example <replaceable>/"
+"sbin:/bin:/usr/sbin:/usr/bin</replaceable>). The default value is "
+"<replaceable>PATH=/bin:/usr/bin</replaceable>."
+msgstr ""
+"S'il est défini, il sera utilisé pour définir la variable d'environnement "
+"PATH quand le super-utilisateur se connecte. La valeur peut être précédée "
+"par <replaceable>PATH=</replaceable> ou une liste de chemins séparés par "
+"deux points (par exemple <replaceable>/sbin:/bin:/usr/sbin:/usr/bin</"
+"replaceable>). La valeur par défaut est <replaceable>PATH=/bin:/usr/bin</"
+"replaceable>."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "<option>ENV_TZ</option> (chaîne ce caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+"S'il est défini, il sera utilisé pour définir la variable d'environnement TZ "
+"quand un utilisateur se connecte. La valeur peut être le nom d'un fuseau "
+"horaire précédé par <replaceable>TZ=</replaceable> (par exemple "
+"<replaceable>TZ=CST6CDT</replaceable>), ou le chemin complet vers le fichier "
+"contenant la spécification du fuseau horaire (par exemple <filename>/etc/"
+"tzname</filename>)."
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+"Si un chemin complet est spécifié mais que le fichier n'existe pas ou ne "
+"peut pas être lu, la valeur par défaut utilisée est <replaceable>TZ=CST6CDT</"
+"replaceable>."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "<option>LOGIN_STRING</option> (chaîne ce caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will no be translated."
+msgstr ""
+"La chaîne de caractères utilisée pour l'invite de mot de passe. La valeur "
+"par défaut est d'utiliser \"Password: \" (« mot de passe : »), ou une "
+"traduction de cette chaîne. Si vous définissez cette variable, l'invite ne "
+"sera pas traduite."
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+"Si la chaîne contient <replaceable>%s</replaceable>, ces caractères seront "
+"remplacés par le nom de l'utilisateur."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "<option>MAIL_CHECK_ENAB</option> (booléen)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+"Activer le contrôle et l'affichage du statut de la boîte aux lettres durant "
+"la connexion."
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+"Vous devriez le désactiver si les fichiers de démarrage de l'interpréteur de "
+"commandes vérifie déjà la présence de courriers (« mail -e » ou équivalent)."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "<option>QUOTAS_ENAB</option> (booléen)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable setting of ulimit, umask, and niceness from passwd gecos field."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "<option>SULOG_FILE</option> (chaîne ce caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+"S'il est défini, les activités de su seront enregistrées dans ce fichier."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SU_NAME</option> (string)"
+msgstr "<option>SU_NAME</option> (chaîne ce caractères)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "<option>SU_WHEEL_ONLY</option> (booléen)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "<option>SYSLOG_SU_ENAB</option> (booléen)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+
+#: su.1.xml:363(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>sh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>"
+
+#: sg.1.xml:38(refentrytitle) sg.1.xml:43(refname) sg.1.xml:49(command)
+msgid "sg"
+msgstr "sg"
+
+#: sg.1.xml:44(refpurpose)
+msgid "execute command as different group ID"
+msgstr "exécuter une commande avec un autre identifiant de groupe"
+
+#: sg.1.xml:50(arg) newgrp.1.xml:49(arg)
+msgid "-"
+msgstr "-"
+
+#: sg.1.xml:52(arg) expiry.1.xml:53(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:51(arg)
+msgid "group <placeholder-1/> command"
+msgstr "groupe <placeholder-1/> commande"
+
+#: sg.1.xml:60(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+"La commande <command>sg</command> fonctionne de la même manière que "
+"<command>newgrp</command>, mais prend une commande comme paramètre. Cette "
+"commande sera exécutée avec un interpréteur de commandes <filename>/bin/sh</"
+"filename>. Avec la plupart des interpréteurs de commandes permettant "
+"d'exécuter <command>sg</command>, si la commande comporte plusieurs mots, il "
+"faut la placer entre des guillemets (« \" »). Une autre différence entre "
+"<command>newgrp</command> et <command>sg</command> est que certains "
+"interpréteurs de commandes traitent <command>newgrp</command> de façon "
+"particulière, en se remplaçant eux-mêmes par une nouvelle instance d'un "
+"interpréteur que <command>newgrp</command> crée. Ceci n'est pas le cas de "
+"<command>sg</command>, ce qui permet de retrouver le groupe précédent à la "
+"sortie de <command>sg</command>."
+
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "<option>SYSLOG_SG_ENAB</option> (booléen)"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+
+#: sg.1.xml:119(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+#| "condition=\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry condition=\"gshadow\"><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: shadow.5.xml:34(refentrytitle) shadow.5.xml:39(refname)
+#: shadow.3.xml:34(refentrytitle) shadow.3.xml:39(refname)
+#: pwck.8.xml:60(replaceable) pwck.8.xml:75(replaceable)
+#: grpck.8.xml:53(replaceable) grpck.8.xml:62(replaceable)
+msgid "shadow"
+msgstr "shadow"
+
+#: shadow.5.xml:40(refpurpose)
+#, fuzzy
+#| msgid "the password file"
+msgid "shadowed password file"
+msgstr "fichier des mots de passe"
+
+#: shadow.5.xml:45(para)
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+"<filename>shadow</filename> est un fichier qui contient les informations "
+"cachées concernant les mots de passe des utilisateurs et leurs dates de "
+"validité."
+
+#: shadow.5.xml:51(para) gshadow.5.xml:49(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+"Ce fichier ne doit pas être accessible en lecture par les utilisateurs "
+"normaux afin de maintenir la sécurité des mots de passe, en particuliers "
+"pour prévenir les attaques par dictionnaires."
+
+#: shadow.5.xml:56(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+
+#: shadow.5.xml:63(emphasis) passwd.5.xml:53(para)
+msgid "login name"
+msgstr "nom de connexion de l'utilisateur (« login »)"
+
+#: shadow.5.xml:65(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+
+#: shadow.5.xml:71(emphasis) gshadow.5.xml:68(emphasis)
+msgid "encrypted password"
+msgstr "mot de passe chiffré"
+
+#: shadow.5.xml:73(para) gshadow.5.xml:70(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+"Consultez <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> pour plus d'informations sur le traitement de "
+"cette chaîne."
+
+#: shadow.5.xml:78(para)
+msgid ""
+"If the password field contains some string that is not a valid result of "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, for instance ! or *, the user will not be able to use a unix "
+"password to log in (but the user may log in the system by other means)."
+msgstr ""
+"Si le champ du mot de passe contient une chaîne qui ne peut pas être un "
+"résultat valable de <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, par exemple si elle "
+"contient les caractères ! ou *, alors l'utilisateur ne pourra pas utiliser "
+"son mot de passe UNIX pour se connecter (mais il se peut que l'utilisateur "
+"puisse se connecter au système par d'autres moyens)."
+
+#: shadow.5.xml:85(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+
+#: shadow.5.xml:92(para) gshadow.5.xml:92(para)
+msgid ""
+"A password field which starts with a exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+
+#: shadow.5.xml:102(emphasis)
+msgid "date of last password change"
+msgstr "date du dernier changement de mot de passe"
+
+#: shadow.5.xml:105(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:109(para)
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"pasword the next time she will log in the system."
+msgstr ""
+
+#: shadow.5.xml:114(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+
+#: shadow.5.xml:121(emphasis)
+msgid "minimum password age"
+msgstr "age minimum du mot de passe"
+
+#: shadow.5.xml:123(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+
+#: shadow.5.xml:128(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+
+#: shadow.5.xml:135(emphasis)
+msgid "maximum password age"
+msgstr "age maximum du mot de passe"
+
+#: shadow.5.xml:137(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+
+#: shadow.5.xml:141(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+
+#: shadow.5.xml:146(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+
+#: shadow.5.xml:151(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+
+#: shadow.5.xml:159(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "password warning period"
+msgstr "Modifications du mot de passe"
+
+#: shadow.5.xml:162(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password has expired before the account will "
+#| "be disabled."
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+"Nombre de jours après la fin de validité d'un mot de passe avant que le "
+"compte ne soit désactivé."
+
+#: shadow.5.xml:167(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+
+#: shadow.5.xml:175(emphasis)
+msgid "password inactivity period"
+msgstr ""
+
+#: shadow.5.xml:178(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+
+#: shadow.5.xml:184(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+
+#: shadow.5.xml:189(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr ""
+
+#: shadow.5.xml:197(emphasis)
+msgid "account expiration date"
+msgstr "date de fin de validité du compte"
+
+#: shadow.5.xml:200(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:204(para)
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an acount expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+
+#: shadow.5.xml:210(para)
+msgid "An empty field means that the account will never expire."
+msgstr ""
+
+#: shadow.5.xml:213(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:221(emphasis)
+msgid "reserved field"
+msgstr "champ réservé"
+
+#: shadow.5.xml:223(para)
+msgid "This field is reserved for future use."
+msgstr "Ce champ est réservé pour une utilisation future."
+
+#: shadow.5.xml:245(filename)
+#, fuzzy
+#| msgid "/etc/shadow"
+msgid "/etc/shadow-"
+msgstr "/etc/shadow"
+
+#: shadow.5.xml:247(para)
+msgid "Backup file for /etc/shadow."
+msgstr ""
+
+#: shadow.5.xml:248(para) passwd.5.xml:134(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+
+#: shadow.5.xml:259(para)
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: shadow.3.xml:36(refmiscinfo)
+msgid "Library Calls"
+msgstr "Appels de bibliothèque"
+
+#: shadow.3.xml:40(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+#: shadow.3.xml:41(refpurpose)
+msgid "encrypted password file routines"
+msgstr "routines d'utilisation des mots de passe cachés"
+
+#: shadow.3.xml:45(title)
+msgid "SYNTAX"
+msgstr "SYNTAX"
+
+#: shadow.3.xml:47(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+#: shadow.3.xml:51(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+#: shadow.3.xml:55(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "struct spwd *getspnam(char"
+
+#: shadow.3.xml:56(emphasis)
+msgid "*name"
+msgstr "*nom"
+
+#: shadow.3.xml:56(emphasis) shadow.3.xml:69(emphasis)
+#: shadow.3.xml:74(emphasis) shadow.3.xml:80(emphasis)
+msgid ");"
+msgstr ");"
+
+#: shadow.3.xml:60(emphasis)
+msgid "void setspent();"
+msgstr "void setspent();"
+
+#: shadow.3.xml:64(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+#: shadow.3.xml:68(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+#: shadow.3.xml:69(emphasis) shadow.3.xml:80(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+#: shadow.3.xml:73(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+#: shadow.3.xml:74(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+#: shadow.3.xml:78(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+#: shadow.3.xml:79(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+#: shadow.3.xml:79(emphasis)
+msgid "FILE"
+msgstr "FICHIER"
+
+#: shadow.3.xml:84(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+#: shadow.3.xml:88(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+#: shadow.3.xml:94(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+"<emphasis remap=\"I\">shadow</emphasis> manipule le contenu du fichier des "
+"mots de passe cachés, <filename>/etc/shadow</filename>. La structure définie "
+"dans le fichier inclus est :"
+
+#: shadow.3.xml:99(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+"      char\t\t*sp_namp; /* user login name */\n"
+"      char\t\t*sp_pwdp; /* encrypted password */\n"
+"      long int\t\tsp_lstchg; /* last password change */\n"
+"      long int\t\tsp_min; /* days until change allowed. */\n"
+"      long int\t\tsp_max; /* days before change required */\n"
+"      long int\t\tsp_warn; /* days warning for expiration */\n"
+"      long int\t\tsp_inact; /* days before account inactive */\n"
+"      long int\t\tsp_expire; /* date when account expires */\n"
+"      unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+"    "
+msgstr ""
+"struct spwd {\n"
+"      char\t\t*sp_namp; /* nom de connexion de l'utilisateur */\n"
+"      char\t\t*sp_pwdp; /* mot de passe chiffré */\n"
+"      long int\t\tsp_lstchg; /* dernier changement de mot de passe */\n"
+"      long int\t\tsp_min; /* jours avant de pouvoir changer de mot de passe */\n"
+"      long int\t\tsp_max; /* jours avant l'obligation de changer de mot de passe */\n"
+"      long int\t\tsp_warn; /* jours d'avertissement avant la fin de validité */\n"
+"      long int\t\tsp_inact; /* jours avant que le compte soit inactif */\n"
+"      long int\t\tsp_expire; /* date de fin de validité du compte */\n"
+"      unsigned long int\tsp_flag; /* réservé pour une utilisation future */\n"
+"}\n"
+"    "
+
+#: shadow.3.xml:111(para)
+msgid "The meanings of each field are:"
+msgstr "La signification de chaque champ est la suivante :"
+
+#: shadow.3.xml:114(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+"sp_namp - pointeur vers le nom d'utilisateur terminé par un zéro binaire "
+"(« null-terminated »)"
+
+#: shadow.3.xml:117(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+"sp_pwdp - pointeur vers le mot de passe terminé par un zéro binaire ( « null-"
+"terminated »)"
+
+#: shadow.3.xml:120(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+"sp_lstchg - nombre de jours, comptés à partir du 1er janvier 1970, depuis la "
+"dernière modification du mot de passe"
+
+#: shadow.3.xml:123(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr ""
+"sp_min - nombre de jours pendant lesquels le mot de passe ne peut pas être "
+"changé"
+
+#: shadow.3.xml:126(para)
+msgid "sp_max - days after which password must be changed"
+msgstr ""
+"sp_max - nombre maximal de jours avant que le mot de passe doive être changé"
+
+#: shadow.3.xml:129(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+"sp_warn - nombre de jours avant que le mot de passe n'arrive en fin de "
+"validité pendant lesquels l'utilisateur est averti de la fin prochaine de la "
+"validité de son mot de passe"
+
+#: shadow.3.xml:134(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+"sp_inact - nombre de jours après la fin de validité du mot de passe avant de "
+"considérer que le compte est inactif et soit désactivé"
+
+#: shadow.3.xml:139(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+"sp_expire - nombre de jours, comptés à partir du 1er janvier 1970, après "
+"lesquels le compte sera désactivé"
+
+#: shadow.3.xml:142(para)
+msgid "sp_flag - reserved for future use"
+msgstr "sp_flag - réservé pour une utilisation future"
+
+#: shadow.3.xml:150(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+"<emphasis>Getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, et <emphasis>sgetspent</emphasis> renvoient "
+"tous un pointeur vers une structure <emphasis>struct spwd</emphasis>. "
+"<emphasis>Getspent</emphasis> renvoie l'entrée suivante du fichier, et "
+"<emphasis>fgetspent</emphasis> renvoie l'entrée suivante du flux qui est "
+"considéré comme étant un fichier au format correct. <emphasis>Sgetspent</"
+"emphasis> renvoie un pointeur vers une structure <emphasis>struct spwd</"
+"emphasis> en utilisant la chaîne de caractère fournie en entrée. "
+"<emphasis>Getspnam</emphasis> cherche à partir de la position courante une "
+"entrée correspondant à <emphasis>nom</emphasis> dans le fichier fourni en "
+"entrée."
+
+#: shadow.3.xml:163(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+"<emphasis>Setspent</emphasis> et <emphasis>endspent</emphasis> peuvent être "
+"utilisés pour débuter et terminer l'accès au fichier de mots de passe cachés."
+
+# TBD: vérifier tous les remap
+#: shadow.3.xml:169(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+"Les fonctions <emphasis>lckpwdf</emphasis> et <emphasis>ulckpwdf</emphasis> "
+"doivent être utilisées pour garantir un accès exclusif au fichier <filename>/"
+"etc/shadow</filename>. <emphasis>Lckpwdf</emphasis> essaie de placer un "
+"verrou avec <emphasis>pw_lock</emphasis> pendant 15 secondes. Il essaie "
+"ensuite de placer un second verrou en utilisant <emphasis>spw_lock</"
+"emphasis> pendant le reste de ces 15 secondes. Si un de ces verrous ne peut "
+"être placé, <emphasis>lckpwdf</emphasis> renvoie -1. Quand les deux verrous "
+"peuvent être placés, la valeur 0 est renvoyée."
+
+#: shadow.3.xml:184(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+"Les fonctions renvoient NULL si plus aucune entrée n'est disponible ou si "
+"une erreur est survenue lors du traitement. Les fonctions dont la valeur de "
+"retour est un <emphasis>int</emphasis> renvoient 0 en cas de succès et -1 en "
+"cas d'échec."
+
+#: shadow.3.xml:194(para)
+#, fuzzy
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+"Ces fonctions peuvent n'être disponibles que pour le superutilisateur car "
+"l'accès au fichier de mots de passe cachés est restreint."
+
+#: shadow.3.xml:214(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: pwconv.8.xml:42(refentrytitle) pwconv.8.xml:47(refname)
+#: pwconv.8.xml:56(command) login.defs.5.xml:388(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+#: pwconv.8.xml:48(refname) pwconv.8.xml:59(command)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+#: pwconv.8.xml:49(refname) pwconv.8.xml:62(command)
+#: login.defs.5.xml:302(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+#: pwconv.8.xml:50(refname) pwconv.8.xml:65(command)
+#: login.defs.5.xml:308(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+#: pwconv.8.xml:51(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr ""
+"Convertir vers ou depuis les fichiers de mots de passe ou de groupe cachés"
+
+#: pwconv.8.xml:71(para)
+#, fuzzy
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+"<command>pwconv</command> crée le fichier <emphasis remap=\"I\">shadow</"
+"emphasis> à partir du fichier <emphasis remap=\"I\">passwd</emphasis> et "
+"d'un éventuel fichier <emphasis remap=\"I\">shadow</emphasis>."
+
+#: pwconv.8.xml:77(para)
+#, fuzzy
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+"<command>pwunconv</command> crée le fichier <emphasis remap=\"I\">passwd</"
+"emphasis> à partir des fichiers <emphasis remap=\"I\">passwd</emphasis> et "
+"<emphasis remap=\"I\">shadow</emphasis> puis supprime <emphasis remap=\"I"
+"\">shadow</emphasis>."
+
+#: pwconv.8.xml:84(para)
+#, fuzzy
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+"<command>grpconv</command> crée <emphasis remap=\"I\">gshadow</emphasis> à "
+"partir de <emphasis remap=\"I\">group</emphasis> et d'un éventuel fichier "
+"<emphasis remap=\"I\">gshadow</emphasis>."
+
+#: pwconv.8.xml:90(para)
+#, fuzzy
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+"<command>grpunconv</command> crée <emphasis remap=\"I\">group</emphasis> à "
+"partir des fichiers <emphasis remap=\"I\">group</emphasis> et <emphasis "
+"remap=\"I\">gshadow</emphasis> puis supprime <emphasis remap=\"I\">gshadow</"
+"emphasis>."
+
+#: pwconv.8.xml:97(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+"Ces quatre programmes opèrent sur les fichiers de mots de passe et "
+"d'informations sur les groupes cachés ou non : <filename>/etc/passwd</"
+"filename>, <filename>/etc/group</filename>, <filename>/etc/shadow</"
+"filename>, et <filename>/etc/gshadow</filename>."
+
+#: pwconv.8.xml:104(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+"Chaque programme place les verrous nécessaires avant d'effectuer la "
+"conversion. <command>Pwconv</command> et <command>grpconv</command> sont "
+"similaires. Dans un premier temps, les entrées du fichier de mots de passe "
+"cachés (<filename>/etc/shadow</filename> ou <filename>/etc/gshadow</"
+"filename>) qui n'existent pas dans le fichier principal (<filename>passwd</"
+"filename> ou <filename>group</filename>), sont retirées. Ensuite, les "
+"entrées du fichier <filename>shadow</filename> n'ayant pas pour mot de passe "
+"« x » dans le fichier <filename>passwd</filename> sont mises à jour. Enfin, "
+"les mots de passe du fichier <filename>passwd</filename> sont remplacés par "
+"« x ». Ces programmes peuvent être utilisés pour une première conversion, ou "
+"bien pour une mise à jour, si les fichiers principaux [ NdT : non cachés ] "
+"ont été édités à la main."
+
+#: pwconv.8.xml:115(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+"Lors de l'ajout de nouvelles entrées dans <filename>/etc/shadow</filename>, "
+"<command>pwconv</command> utilisera les valeurs de <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"et <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> définies dans le fichier "
+"<filename>/etc/login.defs</filename>."
+
+#: pwconv.8.xml:124(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+"De même, <command>pwunconv</command> et <command>grpunconv</command> sont "
+"similaires. Les mots de passe des fichiers principaux sont mis à jour à "
+"partir des fichiers d'informations cachées (« shadowed file »). Les entrées "
+"existant dans un fichier principal, mais pas dans le fichier caché sont "
+"laissées. Enfin, le fichier caché est supprimé. Certaines informations d'âge "
+"des mots de passe sont perdues par <command>pwunconv</command>. Il ne "
+"convertit que ce qu'il peut."
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+"Des erreurs dans les fichiers de mots de passe ou d'informations sur les "
+"groupes (comme des entrées invalides ou redondantes) peuvent conduire ces "
+"programmes à boucler indéfiniment ou à échouer d'une manière toute aussi "
+"étrange. Veuillez exécuter <command>pwck</command> et <command>grpck</"
+"command> pour corriger ces erreurs avant lancer toute conversion."
+
+#: pwconv.8.xml:147(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+
+#: pwconv.8.xml:155(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+
+#: pwconv.8.xml:181(para)
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>."
+
+#: pwck.8.xml:40(refentrytitle) pwck.8.xml:45(refname) pwck.8.xml:51(command)
+#: pwck.8.xml:66(command) login.defs.5.xml:380(term)
+msgid "pwck"
+msgstr "pwck"
+
+#: pwck.8.xml:46(refpurpose)
+msgid "verify integrity of password files"
+msgstr "Vérifier l'intégrité des fichiers de mots de passe"
+
+#: pwck.8.xml:52(arg) pwck.8.xml:67(arg) pwck.8.xml:171(option)
+msgid "-q"
+msgstr "-q"
+
+#: pwck.8.xml:53(arg) pwck.8.xml:192(option) grpck.8.xml:58(arg)
+#: grpck.8.xml:149(option)
+msgid "-s"
+msgstr "-s"
+
+#: pwck.8.xml:56(replaceable) pwck.8.xml:71(replaceable)
+#: passwd.5.xml:34(refentrytitle) passwd.5.xml:39(refname)
+#: passwd.1.xml:44(refentrytitle) passwd.1.xml:49(refname)
+#: passwd.1.xml:55(command) login.defs.5.xml:369(term)
+msgid "passwd"
+msgstr "passwd"
+
+#: pwck.8.xml:68(arg) pwck.8.xml:182(option) login.1.xml:222(option)
+#: grpck.8.xml:49(arg) grpck.8.xml:139(option)
+msgid "-r"
+msgstr "-r"
+
+#: pwck.8.xml:84(para)
+#, fuzzy
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename> have the proper "
+"format and contain valid data. The user is prompted to delete entries that "
+"are improperly formatted or which have other uncorrectable errors."
+msgstr ""
+"<command>Pwck</command> vérifie l'intégrité des informations "
+"d'authentification du système. Toutes les entrées des fichiers <filename>/"
+"etc/passwd</filename> et <filename>/etc/shadow</filename> sont vérifiées "
+"afin de s'assurer qu'elles ont le bon format et qu'elles contiennent des "
+"données valables dans chaque champ. Une confirmation de l'utilisateur sera "
+"demandée pour détruire les entrées mal formatées ou ayant d'autres erreurs "
+"non récupérables."
+
+#: pwck.8.xml:93(para) grpck.8.xml:80(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr "Voici les vérifications effectuées :"
+
+#: pwck.8.xml:96(para) grpck.8.xml:84(para)
+msgid "the correct number of fields"
+msgstr "nombre correct de champs"
+
+#: pwck.8.xml:99(para)
+#, fuzzy
+#| msgid "a unique user name"
+msgid "a unique and valid user name"
+msgstr "unicité des noms d'utilisateur"
+
+#: pwck.8.xml:102(para)
+msgid "a valid user and group identifier"
+msgstr "validité des identifiants d'utilisateur et de groupe"
+
+#: pwck.8.xml:105(para)
+msgid "a valid primary group"
+msgstr "validité du groupe primaire"
+
+#: pwck.8.xml:108(para)
+msgid "a valid home directory"
+msgstr "validité du répertoire personnel"
+
+#: pwck.8.xml:111(para)
+msgid "a valid login shell"
+msgstr "validité de l'interpréteur de commandes initial (« login shell »)"
+
+#: pwck.8.xml:115(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+
+#: pwck.8.xml:120(para)
+msgid "These checks are the following:"
+msgstr ""
+
+#: pwck.8.xml:125(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+
+#: pwck.8.xml:131(para)
+msgid "passwords are specified in the shadowed file"
+msgstr ""
+
+#: pwck.8.xml:134(para)
+#, fuzzy
+#| msgid "the correct number of fields"
+msgid "shadow entries have the correct number of fields"
+msgstr "nombre correct de champs"
+
+#: pwck.8.xml:137(para)
+msgid "shadow entries are unique in shadow"
+msgstr ""
+
+#: pwck.8.xml:140(para)
+#, fuzzy
+#| msgid "date of last password change"
+msgid "the last password changes are not in the future"
+msgstr "date du dernier changement de mot de passe"
+
+#: pwck.8.xml:144(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+"Une erreur dans le nombre de champs ou la non unicité d'un nom d'utilisateur "
+"sera fatale. Si le nombre de champs n'est pas correct, il sera demandé à "
+"l'utilisateur de supprimer la ligne. Si l'utilisateur ne répond pas par "
+"l'affirmative, les vérifications suivantes ne seront pas effectuées. Il sera "
+"également demandé de supprimer les entrées correspondant aux noms "
+"d'utilisateur redondants, mais dans ce cas, les autres vérifications seront "
+"effectuées. Toutes les autres erreurs ne sont que des avertissements et "
+"l'utilisateur est encouragé à utiliser <command>usermod</command> pour les "
+"corriger."
+
+#: pwck.8.xml:155(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+"Les commandes qui opèrent sur le fichier <filename>/etc/passwd</filename> ne "
+"peuvent pas modifier les entrées corrompues ou redondantes. <command>Pwck</"
+"command> doit être utilisé dans ce cas pour retirer ces entrées."
+
+#: pwck.8.xml:165(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>pwck</command> sont :"
+
+#: pwck.8.xml:174(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+"Ne signaler que les erreurs. Les avertissements qui ne nécessite pas une "
+"action de la part de l'utilisateur ne seront pas affichés."
+
+#: pwck.8.xml:185(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr "Permet d'exécuter <command>pwck</command> dans le mode lecture seule."
+
+#: pwck.8.xml:195(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+"Trie les entrées de <filename>/etc/passwd</filename> et <filename>/etc/"
+"shadow</filename> par UID."
+
+#: pwck.8.xml:203(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename>. The user may select "
+"alternate files with the <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> parameters."
+msgstr ""
+"Par défaut, <command>pwck</command> opère sur les fichiers <filename>/etc/"
+"passwd</filename> et <filename>/etc/shadow</filename>. L'utilisateur peut "
+"spécifier d'autres fichiers avec les paramètres <emphasis remap=\"I"
+"\">fichier_passwd</emphasis> et <emphasis remap=\"I\">fichier_shadow</"
+"emphasis>."
+
+#: pwck.8.xml:270(para)
+msgid "one or more bad password entries"
+msgstr "une entrée de mot de passe ou plus est incorrecte"
+
+#: pwck.8.xml:276(para)
+msgid "can't open password files"
+msgstr "impossible d'ouvrir les fichiers de mots de passe"
+
+#: pwck.8.xml:282(para)
+msgid "can't lock password files"
+msgstr "impossible de verrouiller les fichiers de mots de passe"
+
+#: pwck.8.xml:288(para)
+msgid "can't update password files"
+msgstr "impossible de mettre à jour les fichiers des mots de passe"
+
+#: pwck.8.xml:294(para)
+msgid "can't sort password files"
+msgstr "impossible de trier les fichiers de mots de passe"
+
+#: pwck.8.xml:252(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>pwck</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: pwck.8.xml:303(para)
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: porttime.5.xml:34(refentrytitle) porttime.5.xml:39(refname)
+msgid "porttime"
+msgstr "porttime"
+
+#: porttime.5.xml:40(refpurpose)
+msgid "port access time file"
+msgstr ""
+"Fichier de configuration des droits d'accès en fonction de la date et de "
+"l'heure"
+
+#: porttime.5.xml:45(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+"<emphasis remap=\"I\">porttime</emphasis> contient une liste de tty, noms "
+"d'utilisateurs, et horaires d'accès autorisés."
+
+#: porttime.5.xml:50(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+"Chaque entrée consiste en trois champs séparés par un caractère deux-points "
+"« : ». Le premier champ est une liste de tty séparés par des virgules, ou un "
+"astérisque « * » pour indiquer que l'entrée correspond à toutes les tty. Le "
+"second champ est une liste de noms d'utilisateurs, ou un astérisque  pour "
+"indiquer que cette entrée correspond à n'importe quel utilisateur. Le "
+"troisième champ est une liste d'horaires d'accès autorisés."
+
+#: porttime.5.xml:59(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+"Chaque horaire d'accès consiste en zéro ou plusieurs abréviations de jours "
+"de la semaine : <emphasis>Su</emphasis> (dimanche), <emphasis>Mo</emphasis> "
+"(lundi), <emphasis>Tu</emphasis> (mardi), <emphasis>We</emphasis> "
+"(mercredi), <emphasis>Th</emphasis> (jeudi), <emphasis>Fr</emphasis> "
+"(vendredi), <emphasis>Sa</emphasis> (samedi), suivi d'un couple d'horaires "
+"séparés par un tiret. L'abréviation <emphasis>Wk</emphasis> peut être "
+"utilisée pour représenter les jours de la semaine du lundi au vendredi, et "
+"<emphasis>Al</emphasis> permet de spécifier l'ensemble des jours de la "
+"semaine. Par défaut, si aucun jour n'est spécifié, <emphasis>Al</emphasis> "
+"est utilisé."
+
+#: porttime.5.xml:73(title)
+msgid "EXAMPLES"
+msgstr "EXEMPLES"
+
+#: porttime.5.xml:74(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+"L'entrée suivante autorise l'accès à l'utilisateur <emphasis remap=\"B"
+"\">jfh</emphasis> sur n'importe quel port pendant la semaine de 9 heures à "
+"17 heures."
+
+#: porttime.5.xml:80(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+#: porttime.5.xml:82(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+"L'entrée suivante autorise l'accès à /dev/console uniquement aux "
+"utilisateurs <emphasis>root</emphasis> et <emphasis>oper</emphasis> à "
+"n'importe quelle heure. Ceci permet de montrer l'importance de l'ordre des "
+"entrées dans le fichier <filename>/etc/porttime</filename>. Les autres "
+"utilisateurs ne satisferont que la deuxième entrée, qui n'autorise aucun "
+"accès."
+
+#: porttime.5.xml:91(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"      console:root,oper:Al0000-2400\n"
+"      console:*:\n"
+"    "
+msgstr ""
+"\n"
+"      console:root,oper:Al0000-2400\n"
+"      console:*:\n"
+"    "
+
+#: porttime.5.xml:96(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+"L'entrée suivante autorise l'accès à tous les ports pour l'utilisateur "
+"<emphasis>games</emphasis>, en dehors des heures de travail."
+
+#: porttime.5.xml:101(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+#: porttime.5.xml:108(filename) logoutd.8.xml:67(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+#: porttime.5.xml:110(para) logoutd.8.xml:69(para)
+msgid "File containing port access."
+msgstr "Fichier contenant le port d'accès."
+
+#: porttime.5.xml:118(para) login.access.5.xml:109(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: passwd.5.xml:40(refpurpose)
+msgid "the password file"
+msgstr "fichier des mots de passe"
+
+#: passwd.5.xml:45(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+"<filename>/etc/passwd</filename> contient différentes informations sur les "
+"comptes utilisateurs. Ces informations consistent en sept champs séparés par "
+"des deux-points (« : ») :"
+
+#: passwd.5.xml:56(para)
+msgid "optional encrypted password"
+msgstr "un mot de passe chiffré optionnel"
+
+#: passwd.5.xml:59(para)
+msgid "numerical user ID"
+msgstr "l'identifiant numérique de l'utilisateur"
+
+#: passwd.5.xml:62(para)
+msgid "numerical group ID"
+msgstr "l'identifiant numérique du groupe de l'utilisateur"
+
+#: passwd.5.xml:65(para)
+msgid "user name or comment field"
+msgstr "le nom complet de l'utilisateur ou un champ de commentaires"
+
+#: passwd.5.xml:68(para)
+msgid "user home directory"
+msgstr "le répertoire personnel de l'utilisateur"
+
+#: passwd.5.xml:71(para)
+msgid "optional user command interpreter"
+msgstr "l'interpréteur de commandes de l'utilisateur (optionnel)"
+
+#: passwd.5.xml:75(para)
+msgid ""
+"The encrypted password field may be blank, in which case no password is "
+"required to authenticate as the specified login name. However, some "
+"applications which read the <filename>/etc/passwd</filename> file may decide "
+"not to permit <emphasis>any</emphasis> access at all if the "
+"<emphasis>password</emphasis> field is blank. If the <emphasis>password</"
+"emphasis> field is a lower-case <quote>x</quote>, then the encrypted "
+"password is actually stored in the <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> file instead; there "
+"<emphasis>must</emphasis> be a corresponding line in the <filename>/etc/"
+"shadow</filename> file, or else the user account is invalid. If the "
+"<emphasis>password</emphasis> field is any other string, then it will be "
+"treated as an encrypted password, as specified by "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Le champ du mot de passe chiffré peut être vide. Dans ce cas, aucun mot de "
+"passe n'est nécessaire pour s'authentifier avec le compte donné. Cependant, "
+"certaines applications qui lisent le fichier <filename>/etc/passwd</"
+"filename> peuvent décider de ne donner aucun accès si le <emphasis>mot de</"
+"emphasis> passe est vide. Si le mot de passe est un <quote>x</quote> "
+"minuscule, alors le mot de passe chiffré se trouve dans le fichier "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry> ; il <emphasis>doit</emphasis> y avoir une ligne "
+"correspondante dans le fichier <filename>shadow</filename>, sinon le compte "
+"de l'utilisateur n'est pas valide. Si le mot de passe est constitué d'une "
+"autre chaîne, alors il est considéré comme un mot de passe chiffré, comme "
+"indiqué dans <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>."
+
+#: passwd.5.xml:94(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Le champ de commentaire est utilisé par différents utilitaires système, tels "
+"que <citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+
+#: passwd.5.xml:100(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+"Le champ du répertoire personnel de l'utilisateur correspond au nom du "
+"répertoire de travail initial. <command>Login</command> utilise cette "
+"information pour définir la valeur de la variable d'environnement <envar>"
+"$HOME</envar>."
+
+#: passwd.5.xml:106(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+"Le champ de l'interpréteur de commandes correspond au nom de l'interpréteur "
+"de commandes de l'utilisateur, ou au nom d'un programme initial à exécuter. "
+"<command>Login</command> utilise cette information pour définir la valeur de "
+"la variable d'environnement <envar>$SHELL</envar>. Si ce champ est vide, "
+"<filename>/bin/sh</filename> est utilisé par défaut."
+
+# TBC: file ?
+#: passwd.5.xml:127(para)
+msgid "optional encrypted password file"
+msgstr "un mot de passe chiffré optionnel"
+
+#: passwd.5.xml:131(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/passwd-"
+msgstr "/etc/passwd"
+
+#: passwd.5.xml:133(para)
+msgid "Backup file for /etc/passwd."
+msgstr ""
+
+#: passwd.5.xml:145(para)
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: passwd.1.xml:50(refpurpose)
+msgid "change user password"
+msgstr "Modifier le mot de passe d'un utilisateur"
+
+#: passwd.1.xml:67(para)
+#, fuzzy
+msgid ""
+"The <command>passwd</command> command changes passwords for user accounts. A "
+"normal user may only change the password for his/her own account, while the "
+"superuser may change the password for any account. <command>passwd</command> "
+"also changes the account or associated password validity period."
+msgstr ""
+"<command>Passwd</command> modifie les mots de passe des comptes "
+"d'utilisateurs. Un utilisateur normal ne peut changer que son propre mot de "
+"passe, le superutilisateur peut changer le mot de passe associé à n'importe "
+"quel compte. <command>Passwd</command> modifie également les informations "
+"associées au compte, telles que le nom complet de l'utilisateur, son "
+"interpréteur de commandes de connexion (« login shell »), la date de fin de "
+"validité du mot de passe, ou sa durée de validité."
+
+#: passwd.1.xml:76(title)
+msgid "Password Changes"
+msgstr "Modifications du mot de passe"
+
+#: passwd.1.xml:77(para)
+#, fuzzy
+msgid ""
+"The user is first prompted for his/her old password, if one is present. This "
+"password is then encrypted and compared against the stored password. The "
+"user has only one chance to enter the correct password. The superuser is "
+"permitted to bypass this step so that forgotten passwords may be changed."
+msgstr ""
+"Dans un premier temps, l'utilisateur doit fournir son ancien mot de passe, "
+"s'il en avait un. Ce mot de passe est ensuite chiffré puis comparé avec le "
+"mot de passe enregistré. L'utilisateur n'a droit qu'à un seul essai pour "
+"entrer le mot de passe correct. Le superutilisateur peut contourner cette "
+"première étape de manière à changer les mots de passe ayant été oubliés."
+
+#: passwd.1.xml:85(para)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+"Une fois que le mot de passe a été entré, les informations de limite de "
+"validité du mot de passe sont vérifiées pour s'assurer que l'utilisateur est "
+"autorisé à modifier son mot de passe à cet instant. Dans le cas contraire, "
+"<command>passwd</command> refuse de changer le mot de passe, et quitte."
+
+#: passwd.1.xml:92(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+"Le nouveau mot de passe sera demandé deux fois à l'utilisateur. Le second "
+"mot de passe est comparé avec le premier. Ces deux mots de passe devront "
+"être identiques pour que le mot de passe soit changé."
+
+#: passwd.1.xml:98(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+"La complexité de ce mot de passe est alors testée. Comme ligne de conduite "
+"générale, un mot de passe doit toujours être constitué de 6 à 8 caractères "
+"en en choisissant un ou plus parmi chacun des ensembles suivants :"
+
+#: passwd.1.xml:106(para)
+msgid "lower case alphabetics"
+msgstr "caractères alphabétiques minuscules"
+
+#: passwd.1.xml:109(para)
+msgid "digits 0 thru 9"
+msgstr "chiffres de 0 à 9"
+
+#: passwd.1.xml:112(para)
+msgid "punctuation marks"
+msgstr "marques de ponctuation"
+
+#: passwd.1.xml:116(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+"Il faudra faire attention à ne pas utiliser les caractères de suppression ou "
+"d'effacement. <command>Passwd</command> rejettera tout mot de passe dont la "
+"complexité ne sera pas suffisante."
+
+#: passwd.1.xml:125(title)
+msgid "Hints for user passwords"
+msgstr "Astuces pour les mots de passe"
+
+#: passwd.1.xml:126(para)
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+"La sécurité d'un mot de passe repose sur la force de l'algorithme de "
+"chiffrement et sur la taille de l'espace de clés utilisé. La méthode de "
+"chiffrement des systèmes <emphasis>UNIX</emphasis> est basée sur "
+"l'algorithme NBS DES. Des méthodes plus récentes sont maintenant "
+"recommandées (voir <option>ENCRYPT_METHOD</option>). La taille de l'espace "
+"de clés dépend de l'aléa du mot de passe utilisé."
+
+#: passwd.1.xml:135(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+"Les compromissions de la sécurité des mots de passe résultent le plus "
+"souvent d'une négligence dans le choix du mot de passe, ou lors de son "
+"utilisation. Pour cette raison, vous ne devez pas sélectionner de mot de "
+"passe apparaissant dans un dictionnaire ou devant être écrit. Le mot de "
+"passe ne doit pas non plus être un nom propre, un numéro minéralogique, une "
+"date de naissance, ou une adresse. En effet ceux-ci pourraient être devinés "
+"pour violer la sécurité du système."
+
+#: passwd.1.xml:144(para)
+msgid ""
+"You can find advices on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+
+#: passwd.1.xml:153(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>passwd</command> sont :"
+
+#: passwd.1.xml:158(term) faillog.8.xml:71(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+# NOTE: pas clair
+#: passwd.1.xml:162(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+"Cette option ne peut être utilisée qu'avec <option>-S</option> et permet "
+"d'afficher l'état des mots de passe pour tous les utilisateurs."
+
+#: passwd.1.xml:169(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: passwd.1.xml:173(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+"Supprime le mot de passe (le rend vide) d'un utilisateur. C'est une façon "
+"rapide de supprimer l'authentification par mot de passe pour un compte. Il "
+"rend le compte indiqué sans mot de passe."
+
+#: passwd.1.xml:181(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+#: passwd.1.xml:185(para)
+msgid ""
+"Immediately expire an account's password. This in effect can force a user to "
+"change his/her password at the user's next login."
+msgstr ""
+"Annule immédiatement la validité du mot de passe d'un compte. Ceci permet "
+"d'obliger un utilisateur à changer son mot de passe lors de sa prochaine "
+"connexion."
+
+#: passwd.1.xml:198(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option> "
+"<replaceable>DURÉE_INACTIVITÉ</replaceable>"
+
+# NOTE: Only this user account
+#: passwd.1.xml:202(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+"Cette option permet de désactiver un compte un certain nombre de jours après "
+"que son mot de passe soit arrivé en fin de validité. Après qu'un mot de "
+"passe soit arrivé en fin de validité depuis plus de "
+"<replaceable>DURÉE_INACTIVITÉ</replaceable> jours, l'utilisateur ne pourra "
+"plus se connecter avec ce compte."
+
+#: passwd.1.xml:211(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+# NOTE: pas clair
+#: passwd.1.xml:215(para)
+#, fuzzy
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+"Indique que seuls les mots de passe arrivés en fin de validité doivent être "
+"modifié. C'est utile quand l'utilisateur ne veut pas modifier un mot de "
+"passe qui serait toujours valable."
+
+#: passwd.1.xml:223(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+#: passwd.1.xml:227(para)
+#, fuzzy
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+"Verrouille le compte indiqué. Cette option désactive un compte en modifiant "
+"son mot de passe pour une valeur qui ne peut pas correspondre à un mot de "
+"passe chiffré possible."
+
+#: passwd.1.xml:233(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+
+#: passwd.1.xml:240(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr ""
+
+#: passwd.1.xml:247(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-n</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option> <replaceable>JOURS_MIN</"
+"replaceable>"
+
+#: passwd.1.xml:251(para) chage.1.xml:142(para)
+msgid ""
+"Set the minimum number of days between password changes to "
+"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
+"indicates that the user may change his/her password at any time."
+msgstr ""
+"Définit le nombre minimum de jours entre chaque changement de mot de passe à "
+"<replaceable>MIN_DAYS</replaceable>. Une valeur de zéro pour ce champ "
+"indique que l'utilisateur peut changer son mot de passe quand il le souhaite."
+
+#: passwd.1.xml:269(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option><replaceable>REPOSITORY</"
+"replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--repository</option> <replaceable>REPOSITORY</"
+"replaceable>"
+
+#: passwd.1.xml:273(para)
+#, fuzzy
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr ""
+"Change le mot de passe de la base <replaceable>REPOSITORY</replaceable>"
+
+#: passwd.1.xml:279(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+#: passwd.1.xml:283(para)
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+"Afficher l'état d'un compte. Cet état est constitué de 7 champs. Le premier "
+"champ est le nom du compte. Le second champ indique si le mot de passe est "
+"bloqué (L), n'a pas de mot de passe (NP) ou a un mot de passe utilisable "
+"(P). Le troisième champ donne la date de dernière modification du mot de "
+"passe. Les quatre champs suivants sont : la durée minimum avant "
+"modification, la durée maximum de validité, la durée d'avertissement, et la "
+"durée d'inactivité autorisée pour le mot de passe. Les durées sont exprimées "
+"en jours."
+
+#: passwd.1.xml:297(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+#: passwd.1.xml:301(para)
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+"Déverrouille le mot de passe du compte indiqué. Cette option réactive un mot "
+"de passe en remettant le mot de passe à sa valeur précédente (la valeur "
+"présente avant l'utilisation de l'option <option>-l</option>)."
+
+#: passwd.1.xml:310(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option> "
+"<replaceable>DURÉE_AVERTISSEMENT</replaceable>"
+
+#: passwd.1.xml:314(para)
+msgid ""
+"Set the number of days of warning before a password change is required. The "
+"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
+"the password expiring that a user will be warned that his/her password is "
+"about to expire."
+msgstr ""
+"Fixe le nombre de jours d'avertissement avant que le changement de mot de "
+"passe ne soit obligatoire. La valeur <replaceable>DURÉE_AVERTISSEMENT</"
+"replaceable> est le nombre de jours précédant la fin de validité pendant "
+"lesquels un utilisateur sera prévenu que son mot de passe est sur le point "
+"d'arriver en fin de validité."
+
+#: passwd.1.xml:323(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-x</option>, <option>--maxdays</option> <replaceable>JOURS_MAX</"
+"replaceable>"
+
+#: passwd.1.xml:327(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+"Fixe le nombre maximum de jours pendant lesquels un mot de passe reste "
+"valable. Après <replaceable>JOURS_MAX</replaceable>, le mot de passe devra "
+"être modifié."
+
+#: passwd.1.xml:339(para)
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+"La vérification de la complexité des mots de passe peut varier d'un site à "
+"l'autre. Il est vivement conseillé aux utilisateurs de choisir un mot de "
+"passe aussi complexe que possible dans la limite de ce qu'il est capable de "
+"mémoriser. "
+
+#: passwd.1.xml:344(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+"Il se peut que les utilisateurs ne puisse pas changer leur mot de passe sur "
+"un système si NIS est activé et qu'ils ne sont pas connectés au serveur NIS."
+
+#: passwd.1.xml:349(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr "<option>ENCRYPT_METHOD</option> (chaîne ce caractères)"
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+"Définit les algorithmes de chiffrement par défaut du système pour coder les "
+"mots de passes (si aucun algorithme n'a été indiqué sur la ligne de "
+"commandes)."
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid "<replaceable>DES</replaceable> (default)"
+msgstr "<replaceable>DES</replaceable> (par défaut)"
+
+#: passwd.1.xml:43(replaceable) newusers.8.xml:43(replaceable)
+#: login.defs.5.xml:43(replaceable) gpasswd.1.xml:43(replaceable)
+#: chpasswd.8.xml:43(replaceable) chgpasswd.8.xml:43(replaceable)
+msgid "MD5"
+msgstr "MD5"
+
+#: passwd.1.xml:46(replaceable) newusers.8.xml:46(replaceable)
+#: login.defs.5.xml:46(replaceable) gpasswd.1.xml:46(replaceable)
+#: chpasswd.8.xml:46(replaceable) chgpasswd.8.xml:46(replaceable)
+msgid "SHA256"
+msgstr "SHA256"
+
+#: passwd.1.xml:49(replaceable) newusers.8.xml:49(replaceable)
+#: login.defs.5.xml:49(replaceable) gpasswd.1.xml:49(replaceable)
+#: chpasswd.8.xml:49(replaceable) chgpasswd.8.xml:49(replaceable)
+msgid "SHA512"
+msgstr "SHA512"
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid "It can take one of these values: <placeholder-1/>"
+msgstr "Il peut prendre une de ces valeurs : <placeholder-1/>"
+
+#: passwd.1.xml:53(para) newusers.8.xml:53(para) login.defs.5.xml:53(para)
+#: gpasswd.1.xml:53(para) chpasswd.8.xml:53(para) chgpasswd.8.xml:53(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+"Remarque : ce paramètre remplace la variable <option>MD5_CRYPT_ENAB</option>."
+
+#: passwd.1.xml:57(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:57(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:57(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:57(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:57(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:57(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr "<option>MD5_CRYPT_ENAB</option> (booléen)"
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superceded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>OBSCURE_CHECKS_ENAB</option> (booléen)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "<option>PASS_ALWAYS_WARN</option> (booléen)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "<option>PASS_CHANGE_TRIES</option> (nombre)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "<option>PASS_MAX_LEN</option> (nombre)"
+
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "<option>PASS_MIN_LEN</option> (nombre)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your crypt"
+"() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MIN_ROUNDS</option> (nombre)"
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr "<option>SHA_CRYPT_MAX_ROUNDS</option> (nombre)"
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999999999 range."
+msgstr ""
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+
+#: passwd.1.xml:395(filename)
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/pam.d/passwd"
+
+#: passwd.1.xml:397(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr ""
+
+#: passwd.1.xml:417(para) chage.1.xml:241(para)
+msgid "permission denied"
+msgstr "permission refusée"
+
+#: passwd.1.xml:423(para)
+msgid "invalid combination of options"
+msgstr "combinaison d'options non valable"
+
+#: passwd.1.xml:429(para)
+msgid "unexpected failure, nothing done"
+msgstr "échec inattendu, rien n'a été fait"
+
+#: passwd.1.xml:435(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr "échec inattendu, le fichier <filename>passwd</filename> est manquant"
+
+#: passwd.1.xml:441(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr ""
+"fichier <filename>passwd</filename> en cours d'utilisation, veuillez "
+"réessayer plus tard"
+
+#: passwd.1.xml:405(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>passwd</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: passwd.1.xml:456(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+#| "condition=\"no_pam\"><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+"\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+"condition=\"no_pam\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: nologin.8.xml:34(refentrytitle) nologin.8.xml:39(refname)
+#: nologin.8.xml:45(command)
+msgid "nologin"
+msgstr "nologin"
+
+#: nologin.8.xml:40(refpurpose)
+msgid "politely refuse a login"
+msgstr "refuser poliment une connexion"
+
+#: nologin.8.xml:51(para)
+#, fuzzy
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+"<command>nologin</command> affiche un message indiquant que le compte n'est "
+"pas disponible et retourne avec un code non nul. Ceci est prévu en "
+"remplacement d'un champ de remplacement de l'interpréteur de commandes pour "
+"les comptes qui ont été désactivés."
+
+#: nologin.8.xml:56(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"Pour désactiver toutes les connexions, veuillez consulter "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+#: nologin.8.xml:65(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: nologin.8.xml:76(title)
+msgid "HISTORY"
+msgstr "HISTORIQUE"
+
+#: nologin.8.xml:77(para)
+msgid "The <command>nologin</command> command appearred in BSD 4.4."
+msgstr "La commande <command>nologin</command> est apparue avec BSD 4.4."
+
+#: newusers.8.xml:50(refentrytitle) newusers.8.xml:55(refname)
+#: newusers.8.xml:61(command) login.defs.5.xml:353(term)
+msgid "newusers"
+msgstr "newusers"
+
+#: newusers.8.xml:56(refpurpose)
+msgid "update and create new users in batch"
+msgstr "Mettre à jour, ou créer de nouveaux utilisateurs par lots"
+
+#: newusers.8.xml:64(replaceable)
+msgid "new_users"
+msgstr "nouveaux_utilisateurs"
+
+#: newusers.8.xml:71(para)
+#, fuzzy
+msgid ""
+"The <command>newusers</command> command reads a file of user name and clear-"
+"text password pairs and uses this information to update a group of existing "
+"users or to create new users. Each line is in the same format as the "
+"standard password file (see <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the exceptions "
+"explained below:"
+msgstr ""
+"<command>Newusers</command> lit un fichier contenant des paires de nom "
+"d'utilisateur et de mot de passe et utilise ces informations pour mettre à "
+"jour un groupe d'utilisateurs existants ou pour créer de nouveaux "
+"utilisateurs. Chaque ligne est au même format que le fichier des mots de "
+"passe (voir <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>) avec les exceptions suivantes :"
+
+#: newusers.8.xml:79(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+
+#: newusers.8.xml:84(emphasis)
+msgid "pw_name"
+msgstr "pw_name"
+
+#: newusers.8.xml:87(para)
+msgid "This is the name of the user."
+msgstr ""
+
+#: newusers.8.xml:90(para)
+msgid ""
+"It can be the name of a new user or the name of an existing user (or an user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+
+#: newusers.8.xml:101(emphasis)
+msgid "pw_passwd"
+msgstr "pw_passwd"
+
+#: newusers.8.xml:104(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+"Ce champ sera chiffré et utilisé comme la nouvelle valeur du mot de passe "
+"chiffré."
+
+#: newusers.8.xml:112(emphasis)
+msgid "pw_uid"
+msgstr "pw_uid"
+
+#: newusers.8.xml:115(para)
+msgid "This field is used to define the UID of the user."
+msgstr ""
+
+#: newusers.8.xml:118(para)
+msgid ""
+"If the field is empty, an new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:122(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr ""
+
+#: newusers.8.xml:126(para)
+msgid ""
+"If this field contains the name of an existing user (or the name of an user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+
+#: newusers.8.xml:132(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+
+#: newusers.8.xml:140(emphasis)
+msgid "pw_gid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:143(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:146(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:152(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+
+#: newusers.8.xml:158(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+
+#: newusers.8.xml:164(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created earlier wbefore by <command>newusers</command>), a new group will be "
+"created with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and Gs the ID for the new group."
+msgstr ""
+
+#: newusers.8.xml:176(emphasis)
+msgid "pw_gecos"
+msgstr "pw_gecos"
+
+#: newusers.8.xml:179(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr ""
+
+#: newusers.8.xml:186(emphasis)
+msgid "pw_dir"
+msgstr "pw_dir"
+
+#: newusers.8.xml:189(para)
+msgid "This field is used to define the home directory of the user."
+msgstr ""
+
+#: newusers.8.xml:192(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+
+#: newusers.8.xml:197(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+
+#: newusers.8.xml:207(emphasis)
+msgid "pw_shell"
+msgstr "pw_shell"
+
+#: newusers.8.xml:210(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+
+#: newusers.8.xml:218(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+
+#: newusers.8.xml:224(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+
+#: newusers.8.xml:232(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+"Cette commande a été conçue pour les gros systèmes pour lesquels un grand "
+"nombre de comptes sont mis à jour à un même instant."
+
+#: newusers.8.xml:240(para)
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>newusers</command> sont :"
+
+#: newusers.8.xml:245(term) chpasswd.8.xml:116(term) chgpasswd.8.xml:95(term)
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-c</option>, <option>--crypt-method</option>"
+
+#: newusers.8.xml:247(para) chpasswd.8.xml:118(para) chgpasswd.8.xml:97(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:248(para) chpasswd.8.xml:122(para) chgpasswd.8.xml:101(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+
+#: newusers.8.xml:270(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are choosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: newusers.8.xml:284(term) chpasswd.8.xml:154(term) chgpasswd.8.xml:129(term)
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--sha-rounds</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:156(para) chgpasswd.8.xml:131(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:289(para) chpasswd.8.xml:159(para) chgpasswd.8.xml:134(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+
+#: newusers.8.xml:293(para) chpasswd.8.xml:163(para) chgpasswd.8.xml:138(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+
+#: newusers.8.xml:297(para) chpasswd.8.xml:167(para) chgpasswd.8.xml:142(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+
+#: newusers.8.xml:301(para) chpasswd.8.xml:171(para) chgpasswd.8.xml:146(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: newusers.8.xml:313(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+"Le fichier d'entrée doit être correctement protégé puisqu'il contient des "
+"mots de passe en clair."
+
+#: newusers.8.xml:317(para) chpasswd.8.xml:187(para) chgpasswd.8.xml:162(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+
+#: newusers.8.xml:390(filename)
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/pam.d/newusers"
+
+#: newusers.8.xml:392(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:400(para)
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: newgrp.1.xml:38(refentrytitle) newgrp.1.xml:43(refname)
+#: newgrp.1.xml:49(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+#: newgrp.1.xml:44(refpurpose)
+msgid "log in to a new group"
+msgstr "se connecter avec un nouveau groupe"
+
+#: newgrp.1.xml:50(replaceable) grpck.8.xml:51(replaceable)
+#: grpck.8.xml:60(replaceable) groupdel.8.xml:51(replaceable)
+#: groupadd.8.xml:58(replaceable) gpasswd.1.xml:66(replaceable)
+msgid "group"
+msgstr "groupe"
+
+#: newgrp.1.xml:56(para)
+#, fuzzy
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+"<command>Newgrp</command> permet de changer l'identifiant de groupe de "
+"l'utilisateur au cours d'une session. Si l'option <option>-</option> est "
+"fournie, l'environnement de l'utilisateur est réinitialisé, comme si "
+"l'utilisateur venait de se connecter. Sinon, l'environnement actuel, y-"
+"compris le répertoire de travail actuel est conservé."
+
+# NOTE:
+#: newgrp.1.xml:64(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+"<command>Newgrp</command> change l'identifiant de groupe réel actuel à la "
+"valeur du groupe indiqué, ou au groupe par défaut défini dans <filename>/etc/"
+"passwd</filename> si aucun nom de groupe n'est fourni. <command>Newgrp</"
+"command> essaiera également d'ajouter le groupe à l'ensemble des groupes de "
+"l'utilisateur. Si l'utilisateur n'est pas superutilisateur, un mot de passe "
+"lui sera demandé s'il n'utilise pas de mot de passe (dans <filename>/etc/"
+"shadow</filename>, si cet utilisateur a une entrée dans le fichier des mots "
+"de passe cachés, ou dans <filename>/etc/passwd</filename> sinon), mais que "
+"le groupe en a un, ou si l'utilisateur n'est pas dans la liste des membres "
+"de ce groupe et que ce groupe utilise un mot de passe. L'accès sera refusé "
+"si le mot de passe du groupe est vide et que l'utilisateur ne fait pas "
+"partie de ses membres."
+
+#: newgrp.1.xml:78(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+"S'il y a une entrée pour ce groupe dans <filename>/etc/gshadow</filename>, "
+"alors la liste des membres et le mot de passe de ce groupe seront pris dans "
+"ce fichier, sinon, l'entrée du fichier <filename>/etc/group</filename> est "
+"utilisée."
+
+#: newgrp.1.xml:130(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>sg</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry "
+#| "condition=\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry condition=\"gshadow\"><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: logoutd.8.xml:34(refentrytitle) logoutd.8.xml:39(refname)
+#: logoutd.8.xml:45(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+#: logoutd.8.xml:40(refpurpose)
+msgid "Enforce login time restrictions"
+msgstr "Imposer les restrictions de connexion dans le temps"
+
+#: logoutd.8.xml:51(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+"<command>Logoutd</command> impose les restrictions (sur les ports, la date "
+"et l'heure de connexion) spécifiées dans <filename>/etc/porttime</filename>. "
+"<command>Logoutd</command> doit être démarré depuis <filename>/etc/rc</"
+"filename>. Il analyse le fichier <filename>/var/run/utmp</filename> "
+"régulièrement, et, pour chaque utilisateur, il vérifie que ce nom "
+"d'utilisateur est autorisé à être connecté à ce port à ce moment. Toute "
+"session en violation avec les restrictions de <filename>/etc/porttime</"
+"filename> est terminée."
+
+#: logoutd.8.xml:73(filename) login.1.xml:319(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+#: logoutd.8.xml:75(para) login.1.xml:321(para)
+msgid "List of current login sessions."
+msgstr "Liste des sessions de connexion en cours."
+
+#: login.defs.5.xml:97(refentrytitle) login.defs.5.xml:102(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+#: login.defs.5.xml:103(refpurpose)
+msgid "shadow password suite configuration"
+msgstr "configuration de la suite des mots de passe cachés « shadow password »"
+
+#: login.defs.5.xml:108(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+"Le fichier <filename>/etc/login.defs</filename> définit la configuration de "
+"la suite shadow password (mots de passe cachés) pour le système. Ce fichier "
+"est indispensable. Son absence n'empêchera pas le système de fonctionner, "
+"mais aura probablement des conséquences indésirables."
+
+#: login.defs.5.xml:115(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+"Ce fichier est un fichier texte, dont chaque ligne décrit un paramètre de "
+"configuration. Les lignes consistent en un nom et une valeur, séparés par un "
+"espace. Les lignes blanches et les lignes de commentaires sont ignorées. Les "
+"commentaires commencent par un caractère « # », qui doit être le premier "
+"caractère non blanc de la ligne."
+
+#: login.defs.5.xml:123(para)
+#, fuzzy
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+"Les valeurs des paramètres sont de quatre types : chaînes de caractères, "
+"booléens, nombres et nombres longs. Une chaîne de caractères est constituée "
+"de n'importe quel caractère imprimable. Un booléen est soit « yes » (oui) "
+"soit « no » (non). Un paramètre booléen non défini, ou défini avec une valeur "
+"autre que celles-là prendra la valeur « no ». Un nombre (normal ou long) peut "
+"être soit décimal, soit octal (en précédant la valeur d'un « 0 »), ou encore "
+"hexadécimal (en précédant la valeur de « 0x »). La valeur maximale des "
+"paramètres numériques normaux ou longs dépend de la machine."
+
+#: login.defs.5.xml:138(para)
+msgid "The following configuration items are provided:"
+msgstr "Les paramètres de configuration suivants sont fournis :"
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr "<option>CHFN_AUTH</option> (booléen)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+#, fuzzy
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"La valeur <emphasis remap=\"I\">yes</emphasis> indique que les programmes "
+"<command>chfn</command> et <command>chsh</command> nécessiteront une "
+"authentification avant de procéder à tout changement, à moins qu'ils ne "
+"soient exécutés par le superutilisateur."
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "<option>CHFN_RESTRICT</option> (chaîne ce caractères)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+#, fuzzy
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+"Ce paramètre spécifie quelles valeurs du champ <emphasis remap=\"I\">gecos</"
+"emphasis> du fichier <filename>passwd</filename> peuvent être modifiées par "
+"les utilisateurs ordinaires à l'aide du programme <command>chfn</command>. "
+"Il est constitué d'une combinaison de lettre parmi <emphasis remap=\"I\">f</"
+"emphasis>, <emphasis remap=\"I\">r</emphasis>, <emphasis remap=\"I\">w</"
+"emphasis> et <emphasis remap=\"I\">h</emphasis>, correspondant "
+"respectivement au nom complet, au numéro de bureau, au numéro de téléphone "
+"professionnel et au numéro de téléphone personnel. Pour des raisons de "
+"compatibilité avec des versions antérieures, « yes » est équivalent à « rwh » "
+"et « no », à « frwh ». S'il n'est pas spécifié, seul le superutilisateur peut "
+"effectuer des modifications. Pour une configuration encore plus restrictive, "
+"il sera préférable de ne pas installer <command>chfn</command> avec "
+"l'indicateur SUID positionné."
+
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "<option>CHSH_AUTH</option> (booléen)"
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+#, fuzzy
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"La valeur <emphasis remap=\"I\">yes</emphasis> indique que les programmes "
+"<command>chfn</command> et <command>chsh</command> nécessiteront une "
+"authentification avant de procéder à tout changement, à moins qu'ils ne "
+"soient exécutés par le superutilisateur."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "<option>ERASECHAR</option> (nombre)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+"Le caractère ERASE du terminal (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+"La valeur peut être préfixée par « 0 » pour une valeur octale, ou « 0x » pour "
+"une valeur hexadécimale."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "<option>FAIL_DELAY</option> (nombre)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+"Le délai en secondes avant qu'un nouvel essai soit permit après un échec de "
+"connexion."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "<option>FAILLOG_ENAB</option> (booléen)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+"Activer l'enregistrement et l'affichage des informations d'échec de "
+"connexion de <filename>/var/log/faillog</filename>"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "<option>FAKE_SHELL</option> (chaîne ce caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+"S'il est défini, <command>login</command> exécutera cet interpréteur de "
+"commandes au lieu de l'interpréteur de l'utilisateur spécifié dans "
+"<filename>/etc/passwd</filename>."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "<option>FTMP_FILE</option> (chaîne ce caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+"S'il est défini, les échecs de connexion seront enregistrés dans ce fichier "
+"sous le format utmp"
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "<option>HUSHLOGIN_FILE</option> (chaîne ce caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+"S'il est défini, ce fichier peut désactiver tous les affichages habituels "
+"durant la séquence de connexion. Si un nom de chemin complet est spécifié, "
+"alors le mode taiseux sera activé si le nom ou l'interpréteur de commandes "
+"de l'utilisateur sont trouvés dans le fichier. Si ce n'est pas un nom de "
+"chemin complet, alors le mode taiseux sera activé si le fichier existe dans "
+"le répertoire personnel de l'utilisateur."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "<option>ISSUE_FILE</option> (chaîne ce caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+"S'il est défini, ce fichier sera affiché avant chaque invite de connexion."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "<option>KILLCHAR</option> (nombre)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+"Le caractère KILL du terminal (<replaceable>025</replaceable> = CTRL/U)."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "<option>LASTLOG_ENAB</option> (booléen)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+"Activer la journalisation et l'affichage des informations de dernière "
+"connexion de /var/log/lastlog."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "<option>LOG_OK_LOGINS</option> (booléen)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr "Activer la journalisation des connexions réussies."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "<option>LOG_UNKFAIL_ENAB</option> (booléen)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+"Activer l'affichage des noms d'utilisateurs inconnus quand les échecs de "
+"connexions sont enregistrés."
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+"Remarque : la journalisation des noms d'utilisateurs inconnus peut être un "
+"problème de sécurité si un utilisateur entre son mot de passe au lieu de son "
+"nom d'utilisateur."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "<option>LOGIN_RETRIES</option> (nombre)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr ""
+"Le nombre maximum de tentatives de connexion en cas de mauvais mot de passe."
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overriden by PAM, since the default pam_unix module "
+"has it's own built in of 3 retries. However, this is a safe fallback in case "
+"you are using an authentication module that does not enforce PAM_MAXTRIES."
+msgstr ""
+"Ce sera probablement écrasé par PAM, puisque le module pam_unix est réglé en "
+"dur pour n'effectuer que 3 tentatives. Toutefois, il s'agit d'une solution "
+"de repli au cas où vous utilisez un module d'authentification qui ne fait "
+"pas appliquer PAM_MAXTRIES."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "<option>LOGIN_TIMEOUT</option> (nombre)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr "Le temps maximum en secondes pour la connexion."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "<option>MOTD_FILE</option> (chaîne ce caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "<option>NOLOGINS_FILE</option> (chaîne ce caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+
+#: login.defs.5.xml:181(para)
+#, fuzzy
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+"Les paramètres PASS_MAX_DAYS, PASS_MIN_DAYS et PASS_WARN_AGE ne sont "
+"utilisés qu'au moment de la création d'un compte. Les changements "
+"n'affecteront pas les comptes existants."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>PORTTIME_CHECKS_ENAB</option> (booléen)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking of time restrictions specified in /etc/porttime."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "<option>TTYGROUP</option> (chaîne ce caractères)"
+
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+msgid "<option>TTYPERM</option> (string)"
+msgstr "<option>TTYPERM</option> (chaîne ce caractères)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "<option>TTYTYPE_FILE</option> (chaîne ce caractères)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+msgid "<option>ULIMIT</option> (number)"
+msgstr "<option>ULIMIT</option> (nombre)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr "Valeur par défaut d'<command>ulimit</command>."
+
+#: login.defs.5.xml:209(title)
+msgid "CROSS REFERENCES"
+msgstr "RÉFÉRENCES CROISÉES"
+
+#: login.defs.5.xml:210(para)
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+"Les références croisées ci-dessous montrent quels sont les paramètres "
+"utilisés par les différents programmes de la suite shadow password."
+
+#: login.defs.5.xml:218(term) chfn.1.xml:41(refentrytitle)
+#: chfn.1.xml:46(refname) chfn.1.xml:52(command)
+msgid "chfn"
+msgstr "chfn"
+
+#: login.defs.5.xml:220(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:228(term) chgpasswd.8.xml:42(refentrytitle)
+#: chgpasswd.8.xml:47(refname) chgpasswd.8.xml:53(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:230(para) login.defs.5.xml:260(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#: login.defs.5.xml:238(term) chpasswd.8.xml:41(refentrytitle)
+#: chpasswd.8.xml:46(refname) chpasswd.8.xml:52(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:240(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#: login.defs.5.xml:248(term) chsh.1.xml:40(refentrytitle)
+#: chsh.1.xml:45(refname) chsh.1.xml:51(command)
+msgid "chsh"
+msgstr "chsh"
+
+#: login.defs.5.xml:250(para)
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr "CHSH_AUTH LOGIN_STRING"
+
+#: login.defs.5.xml:258(term) gpasswd.1.xml:42(refentrytitle)
+#: gpasswd.1.xml:47(refname) gpasswd.1.xml:61(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+#: login.defs.5.xml:268(term) groupadd.8.xml:42(refentrytitle)
+#: groupadd.8.xml:47(refname) groupadd.8.xml:53(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+#: login.defs.5.xml:270(para)
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+
+#: login.defs.5.xml:277(term) groupdel.8.xml:38(refentrytitle)
+#: groupdel.8.xml:43(refname) groupdel.8.xml:49(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:279(para) login.defs.5.xml:285(para)
+#: login.defs.5.xml:291(para) login.defs.5.xml:298(para)
+#: login.defs.5.xml:304(para) login.defs.5.xml:310(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr "MAX_MEMBERS_PER_GROUP"
+
+#: login.defs.5.xml:283(term) groupmems.8.xml:38(refentrytitle)
+#: groupmems.8.xml:43(refname) groupmems.8.xml:49(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+#: login.defs.5.xml:289(term) groupmod.8.xml:38(refentrytitle)
+#: groupmod.8.xml:43(refname) groupmod.8.xml:49(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+#: login.defs.5.xml:296(term) grpck.8.xml:38(refentrytitle)
+#: grpck.8.xml:43(refname) grpck.8.xml:49(command) grpck.8.xml:58(command)
+msgid "grpck"
+msgstr "grpck"
+
+#: login.defs.5.xml:316(term) login.1.xml:70(refentrytitle)
+#: login.1.xml:75(refname) login.1.xml:81(command) login.1.xml:89(command)
+#: login.1.xml:96(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:318(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS "
+"LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR "
+"MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> "
+"TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</"
+"phrase> USERGROUPS_ENAB"
+msgstr ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS "
+"LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR "
+"MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> "
+"TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</"
+"phrase> USERGROUPS_ENAB"
+
+#: login.defs.5.xml:345(term)
+msgid "newgrp / sg"
+msgstr "newgrp / sg"
+
+#: login.defs.5.xml:347(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr "SYSLOG_SG_ENAB"
+
+#: login.defs.5.xml:355(para)
+msgid ""
+"ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+"SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+"ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+"SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+
+#: login.defs.5.xml:371(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+
+#: login.defs.5.xml:382(para) login.defs.5.xml:390(para)
+msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+
+#: login.defs.5.xml:397(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+
+#: login.defs.5.xml:412(term)
+msgid "sulogin"
+msgstr "sulogin"
+
+#: login.defs.5.xml:414(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+
+#: login.defs.5.xml:423(para)
+msgid ""
+"CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+"PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN "
+"UID_MAX UID_MIN UMASK"
+msgstr ""
+"CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+"PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN "
+"UID_MAX UID_MIN UMASK"
+
+#: login.defs.5.xml:436(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB"
+msgstr "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB"
+
+#: login.defs.5.xml:445(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP"
+msgstr "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP"
+
+#: login.defs.5.xml:456(para)
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+"La plupart des fonctionnalités qui étaient fournies par les mots de passe "
+"cachés (« shadow password ») sont désormais gérées par PAM. De ce fait, "
+"<filename>/etc/login.defs</filename> n'est plus utilisé par "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> et moins utilisé par <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> et "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>. Veuillez plutôt vous référer aux fichiers de configuration de "
+"PAM correspondant."
+
+#: login.defs.5.xml:472(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: login.access.5.xml:35(refentrytitle) login.access.5.xml:40(refname)
+msgid "login.access"
+msgstr "login.access"
+
+#: login.access.5.xml:41(refpurpose)
+msgid "login access control table"
+msgstr "table de contrôle des connexions"
+
+#: login.access.5.xml:46(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+"Le fichier <emphasis remap=\"I\">login.access</emphasis> permet de spécifier "
+"des paires (utilisateur, hôte) et/ou (utilisateur, tty) pour lesquels toute "
+"connexion sera soit acceptée soit refusée."
+
+#: login.access.5.xml:52(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+"Lorsqu'un utilisateur se connecte, le fichier <emphasis remap=\"I\">login."
+"access</emphasis> est lu jusqu'à la première entrée correspondant à la paire "
+"(utilisateur, hôte) ou, dans le cas d'une connexion ne passant pas par le "
+"réseau, à la première entrée correspondant au couple (utilisateur, tty). Le "
+"champ des permissions de la table pour cette entrée détermine alors si la "
+"connexion doit être acceptée ou refusée."
+
+#: login.access.5.xml:60(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+"Chaque ligne de la table de contrôle des connexions (« login access control "
+"table ») est composée de trois champs séparés par le caractère « : » :"
+
+#: login.access.5.xml:65(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I"
+"\">utilisateurs</emphasis>:<emphasis remap=\"I\">origines</emphasis>"
+
+#: login.access.5.xml:69(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+"Le premier champ est soit un « <emphasis>+</emphasis> » (accès autorisé), "
+"soit un « <emphasis>-</emphasis> » (accès refusé). Le second champ est une "
+"liste d'un ou plusieurs noms d'utilisateurs ou de groupes, ou <emphasis>ALL</"
+"emphasis> (correspond à tous les utilisateurs). Le troisième champ est une "
+"liste d'un ou plusieurs noms de tty (pour les connexions hors réseau), noms "
+"d'hôtes, noms de domaines (commençant par un « <literal>.</literal> »), "
+"adresses d'hôte, adresses de sous-réseau (terminant par un « <literal>.</"
+"literal> »), <emphasis>ALL</emphasis> (pour spécifier n'importe quelle "
+"connexion), ou <emphasis>LOCAL</emphasis> (correspond à n'importe quelle "
+"chaîne ne contenant pas de « <literal>.</literal> »). Si vous utilisez NIS, "
+"vous pouvez utiliser @nomdegroupe pour les motifs d'utilisateur et d'hôte."
+
+#: login.access.5.xml:83(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+"L'opérateur <emphasis>EXCEPT</emphasis> permet d'écrire des règles très "
+"compactes."
+
+#: login.access.5.xml:88(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+"Le fichier d'informations sur les groupes (/etc/group) n'est utilisé que "
+"lorsqu'un nom ne correspond à aucun des utilisateurs connectés. Seuls les "
+"groupes pour lesquels la liste des utilisateurs est spécifiée sont "
+"utilisés : le programme ne recherche pas parmi les groupes primaires des "
+"utilisateurs."
+
+#: login.1.xml:76(refpurpose)
+msgid "begin session on the system"
+msgstr "Démarrer une session sur le système"
+
+#: login.1.xml:82(arg) login.1.xml:90(arg) login.1.xml:97(arg)
+#: login.1.xml:214(option) groupmems.8.xml:54(arg)
+msgid "-p"
+msgstr "-p"
+
+#: login.1.xml:83(replaceable) login.1.xml:91(replaceable)
+#: login.1.xml:98(replaceable)
+msgid "host"
+msgstr "hôte"
+
+#: login.1.xml:83(arg) login.1.xml:91(arg) chfn.1.xml:56(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+#: login.1.xml:86(replaceable)
+msgid "ENV=VAR"
+msgstr "ENV=VAR"
+
+#: login.1.xml:92(arg) login.1.xml:192(option) expiry.1.xml:54(arg)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:98(arg) chfn.1.xml:54(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: login.1.xml:104(para)
+#, fuzzy
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+"<command>Login</command> permet d'établir une nouvelle session sur le "
+"système. Elle est généralement invoquée après avoir répondu à l'invite de "
+"login <emphasis remap=\"I\">login:</emphasis> sur le terminal de "
+"l'utilisateur. <command>Login</command> peut être spécifique à "
+"l'interpréteur de commandes (« shell ») et ne devrait pas être invoqué comme "
+"un sous-processus. En général, <command>login</command> est traité comme "
+"<emphasis remap=\"B\">>exec login</emphasis>, ce qui entraîne la sortie de "
+"l'interpréteur de commandes en cours. L'exécution de <command>login</"
+"command> depuis un interpréteur de commandes (« shell ») autre qu'un "
+"interpréteur de commandes initial (« login shell ») produira un message "
+"d'erreur."
+
+#: login.1.xml:118(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+"Un mot de passe est ensuite demandé à l'utilisateur. L'affichage du mot de "
+"passe est désactivé pour éviter de révéler le mot de passe. Seul un petit "
+"nombre d'échecs est permis avant que <command>login</command> ne quitte et "
+"que la liaison ne soit interrompue."
+
+#: login.1.xml:125(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+"Si une date de fin de validité du mot de passe a été définie pour ce compte, "
+"un nouveau mot de passe pourra vous être demandé. Votre ancien mot de passe "
+"et votre nouveau mot de passe vous seront alors demandés avant de pouvoir "
+"continuer. Veuillez lire la page de manuel "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> pour plus d'informations."
+
+#: login.1.xml:134(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+"Après une connexion réussie, vous serez informé des messages du système et "
+"de la présence de courrier. Vous pouvez désactiver l'affichage du message du "
+"système (<filename>/etc/motd</filename>), en créant un fichier vide "
+"<filename>.hushlogin</filename> dans le répertoire de votre compte. Le "
+"message concernant les courriers sera « <emphasis>You have new mail.</"
+"emphasis> », « <emphasis>You have mail.</emphasis> », ou « <emphasis>No Mail.</"
+"emphasis> » suivant l'état de votre boîte aux lettres."
+
+#: login.1.xml:145(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+"Vos identifiants d'utilisateur et de groupe seront définis en fonction des "
+"valeurs spécifiées dans le fichier <filename>/etc/passwd</filename>. Les "
+"valeurs des variables d'environnement <emphasis>$HOME</emphasis>, <emphasis>"
+"$SHELL</emphasis>, <emphasis>$PATH</emphasis>, <emphasis>$LOGNAME</"
+"emphasis>, et <emphasis>$MAIL</emphasis> seront définies en fonction des "
+"champs appropriés de l'entrée qui vous correspond. Les valeurs d'ulimit, "
+"d'umask et de nice pourront également être affectées en fonction des entrées "
+"du champ GECOS."
+
+#: login.1.xml:154(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+"Sur certains systèmes, la variable d'environnement <emphasis>$TERM</"
+"emphasis> sera initialisée au type de terminal de votre tty, comme spécifié "
+"dans <filename>/etc/ttytype</filename>."
+
+#: login.1.xml:160(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+"Un script d'initialisation pour votre interpréteur de commandes pourra "
+"également être exécuté. Veuillez vous référer à la section de manuel "
+"appropriée pour plus d'informations sur cette fonctionnalité."
+
+#: login.1.xml:172(para) login.1.xml:248(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+"Le programme <command>login</command> n'est PAS responsable de la "
+"suppression d'utilisateurs dans le fichier utmp. Les responsables du "
+"nettoyage de l'appartenance des sessions de terminal sont "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> et <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>. Si vous utilisez "
+"<command>login</command> depuis un interpréteur de commandes sans "
+"<command>exec</command>, l'utilisateur que vous utilisez continuera à "
+"apparaître comme étant connecté même après s'être déconnecté de cette « sous-"
+"session »."
+
+#: login.1.xml:195(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr "Ne pas réaliser d'authentification. L'utilisateur est pré-authentifié."
+
+#: login.1.xml:198(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+
+#: login.1.xml:206(option)
+msgid "-h"
+msgstr "-h"
+
+#: login.1.xml:209(para)
+msgid "Name of the remote host for this login."
+msgstr "Nom de l'hôte distant pour cette connexion."
+
+#: login.1.xml:217(para)
+msgid "Preserve environment."
+msgstr "Préserver l'environnement."
+
+#: login.1.xml:225(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr ""
+"Exécuter le protocole de connexion automatique (autologin) pour rlogin."
+
+#: login.1.xml:230(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+"Les options <option>-r</option>, <option>-h</option> et <option>-f</option> "
+"ne peuvent être utilisées que par root."
+
+#: login.1.xml:239(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Cette version de <command>login</command> comporte de nombreuses options de "
+"compilation. Seules certaines d'entre elles peuvent avoir été activées sur "
+"votre site."
+
+#: login.1.xml:244(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr ""
+"L'emplacement des fichiers peut varier suivant la configuration du système."
+
+#: login.1.xml:260(para)
+#, fuzzy
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+"Comme pour n'importe quel programme, l'apparence de <command>login</command> "
+"peut être imitée. Si des utilisateurs non sûrs ont un accès physique à la "
+"machine, un attaquant pourrait utiliser cet accès pour obtenir le mot de "
+"passe de la personne qui s'assiérait ensuite face à l'écran. Sous Linux, le "
+"mécanisme SAK peut être utilisé par les utilisateurs pour initier un chemin "
+"de confiance et prévenir ce genre d'attaques."
+
+#: login.1.xml:325(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+#: login.1.xml:327(para)
+msgid "List of previous login sessions."
+msgstr "Liste des sessions de connexion précédentes."
+
+#: login.1.xml:343(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+#: login.1.xml:345(para)
+msgid "System message of the day file."
+msgstr "Fichier contenant le message du système."
+
+#: login.1.xml:349(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+#: login.1.xml:351(para)
+msgid "Prevent non-root users from logging in."
+msgstr "Empêcher les utilisateurs non-root de se connecter."
+
+#: login.1.xml:355(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+#: login.1.xml:357(para)
+msgid "List of terminal types."
+msgstr "Liste des types de terminaux."
+
+#: login.1.xml:361(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+#: login.1.xml:363(para)
+msgid "Suppress printing of system messages."
+msgstr "Supprimer l'affichage des messages du système."
+
+#: login.1.xml:377(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: limits.5.xml:35(refentrytitle) limits.5.xml:40(refname)
+msgid "limits"
+msgstr "limits"
+
+#: limits.5.xml:41(refpurpose)
+msgid "resource limits definition"
+msgstr "définition des limites de ressources"
+
+#: limits.5.xml:47(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+"Le fichier <emphasis remap=\"I\">limits</emphasis> (<filename>/etc/limits</"
+"filename> par défaut ou LIMITS_FILE définit dans <filename>config.h</"
+"filename>) décrit les limites de ressource que vous voulez imposer. Il doit "
+"être possédé et ne doit être lisible que par le compte root."
+
+#: limits.5.xml:55(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+"Par défaut, aucun quota (aucune limite) n'est imposé à « root ». En fait, il "
+"n'est pas possible d'imposer de cette façon de limite aux comptes root ou "
+"équivalents (comptes ayant un UID de 0)."
+
+#: limits.5.xml:61(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr ""
+"Chaque ligne décrit une limite pour un utilisateur, elle est de la forme "
+"suivante :"
+
+#: limits.5.xml:64(emphasis)
+msgid "user LIMITS_STRING"
+msgstr "utilisateur LISTE_DE_LIMITES"
+
+#: limits.5.xml:67(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+"Où <emphasis>LISTE_DE_LIMITES</emphasis> est une chaîne construite par la "
+"concaténation d'une liste de limites de ressource. Chaque limite consiste en "
+"une lettre (identifiant le type de limite) et une valeur numérique."
+
+#: limits.5.xml:73(para)
+msgid "The valid identifiers are:"
+msgstr "Les identifiants possibles sont :"
+
+#: limits.5.xml:76(para)
+msgid "A: max address space (KB)"
+msgstr "A : espace d'adressage maximal (en kilo octets)"
+
+#: limits.5.xml:77(para)
+msgid "C: max core file size (KB)"
+msgstr ""
+"C : taille maximale d'un fichier image de la mémoire (« core », en kilo "
+"octets)"
+
+#: limits.5.xml:78(para)
+msgid "D: max data size (KB)"
+msgstr ""
+"D : taille maximale du segment de données d'un programme (en kilo octets)"
+
+#: limits.5.xml:79(para)
+msgid "F: maximum filesize (KB)"
+msgstr "F : taille maximale des fichiers (en kilo octets)"
+
+#: limits.5.xml:80(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr ""
+"M : taille  maximale de mémoire verrouillée (« locked-in-memory », en kilo "
+"octets)"
+
+#: limits.5.xml:81(para)
+msgid "N: max number of open files"
+msgstr "N : nombre maximal de fichiers ouverts"
+
+#: limits.5.xml:82(para)
+msgid "R: max resident set size (KB)"
+msgstr ""
+"R : taille maximale de la mémoire résidente (« resident set size », en kilo "
+"octets)"
+
+#: limits.5.xml:83(para)
+msgid "S: max stack size (KB)"
+msgstr "S : taille maximale de la pile (en kilo octets)"
+
+#: limits.5.xml:84(para)
+msgid "T: max CPU time (MIN)"
+msgstr "T : temps processeur maximal consommé (en minutes)"
+
+#: limits.5.xml:85(para)
+msgid "U: max number of processes"
+msgstr "U : nombre maximal de processus"
+
+#: limits.5.xml:86(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"K : masque de création de fichier, positionné par "
+"<citerefentry><refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum></"
+"citerefentry>."
+
+#: limits.5.xml:91(para)
+msgid "L: max number of logins for this user"
+msgstr "L : nombre maximal de connexions simultanées pour cet utilisateur"
+
+#: limits.5.xml:92(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"P : priorité des processus, positionné par "
+"<citerefentry><refentrytitle>setpriority</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: limits.5.xml:97(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+
+#: limits.5.xml:99(para)
+msgid "O: max real time priority"
+msgstr ""
+
+#: limits.5.xml:102(para)
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+"Par exemple, <emphasis remap=\"I\">L2D2048N5</emphasis> est une chaîne "
+"<emphasis>LISTE_DE_LIMITES</emphasis> valable. Pour faciliter la lecture, "
+"les entrées suivantes sont équivalentes :"
+
+# NOTE: elle va pas cette chaîne
+#: limits.5.xml:108(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"      username L2D2048N5\n"
+"      username L2 D2048 N5\n"
+"    "
+msgstr ""
+"\n"
+"      utilisateur L2D2048N5\n"
+"      utilisateur L2 D2048 N5\n"
+"    "
+
+#: limits.5.xml:113(para)
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. A "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+"Attention : tout ce qui suit <emphasis remap=\"I\">utilisateur</emphasis> "
+"est considéré comme une limite de chaîne. Les commentaires ne sont pas "
+"autorisés. Une chaîne de limites non valable sera rejetée (non utilisée) par "
+"le programme <command>login</command>."
+
+#: limits.5.xml:120(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+"L'entrée par défaut est représentée par un utilisateur dénommé « <emphasis>*</"
+"emphasis> ». Si plusieurs entrées par défaut sont présentes dans le fichier "
+"de limites, alors seule la dernière sera prise en compte."
+
+#: limits.5.xml:127(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+"Un simple tiret « <emphasis>-</emphasis> » sera suffisant pour désactiver "
+"toute limite à un utilisateur, "
+
+#: limits.5.xml:132(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+"Notez également que les limites ne sont spécifiées que PAR CONNEXION. Il n'y "
+"a pas de limite globale ou permanente. Des limites globales pourraient voir "
+"le jour, mais pour l'instant, il faut faire sans."
+
+#: limits.5.xml:143(filename)
+msgid "/etc/limits"
+msgstr "/etc/limits"
+
+#: limits.5.xml:151(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: lastlog.8.xml:35(refentrytitle) lastlog.8.xml:40(refname)
+#: lastlog.8.xml:46(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: lastlog.8.xml:41(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+"signaler les connexions les plus récentes de tous les utilisateurs ou d'un "
+"utilisateur donné"
+
+#: lastlog.8.xml:55(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+"<command>Lastlog</command> affiche le contenu du journal des dernières "
+"connexions (<filename>/var/log/lastlog</filename>). Les champs "
+"<emphasis>Utilisateur</emphasis>, <emphasis>Port</emphasis>, date de "
+"<emphasis>Dernière</emphasis> connexion sont affichés. Par défaut (aucune "
+"option de spécifiée), les entrées de laslog sont affichées triées par ordre "
+"d'apparition dans <filename>/etc/passwd</filename>."
+
+#: lastlog.8.xml:67(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>lastlog</command> sont :"
+
+#: lastlog.8.xml:72(term)
+msgid ""
+"<option>-b</option>, <option>--before</option><replaceable>DAYS</replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--before</option> <replaceable>JOURS</"
+"replaceable>"
+
+#: lastlog.8.xml:76(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+"N'affiche que les entrées du fichier lastlog plus anciennes que <emphasis "
+"remap=\"I\">JOURS</emphasis>."
+
+#: lastlog.8.xml:90(term) faillog.8.xml:140(term)
+msgid ""
+"<option>-t</option>, <option>--time</option><replaceable>DAYS</replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option> <replaceable>JOURS</replaceable>"
+
+#: lastlog.8.xml:95(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+"Affiche les entrées du fichier lastlog plus récentes que <emphasis remap=\"I"
+"\">JOURS</emphasis>."
+
+#: lastlog.8.xml:102(term) faillog.8.xml:151(term)
+msgid ""
+"<option>-u</option>, <option>--user</option><replaceable>LOGIN</replaceable>|"
+"<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option><replaceable>LOGIN</replaceable>|"
+"<replaceable>INTERVALLE</replaceable>"
+
+#: lastlog.8.xml:107(para)
+msgid "Print the lastlog record of the specified user(s)."
+msgstr "N'afficher que les entrées correspondant aux utilisateurs indiqués."
+
+#: lastlog.8.xml:110(para) faillog.8.xml:161(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+
+#: lastlog.8.xml:122(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+"Dans le cas où l'utilisateur ne s'est jamais connecté, le message "
+"« <emphasis>**Never logged in**</emphasis> » (« <emphasis>**Jamais connecté**</"
+"emphasis> ») est affiché à la place des champs <emphasis>Port</emphasis> et "
+"date de <emphasis>Dernière</emphasis> connexion."
+
+#: lastlog.8.xml:127(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+
+#: lastlog.8.xml:135(title) groups.1.xml:65(title) chsh.1.xml:106(title)
+#: chage.1.xml:193(title)
+msgid "NOTE"
+msgstr "NOTE"
+
+#: lastlog.8.xml:136(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+"Le fichier <filename>lastlog</filename> est une base de données qui contient "
+"des informations concernant la dernière connexion de chaque utilisateur. "
+"Vous n'avez pas à faire de rotation (avec rotate) sur ce fichier. C'est un "
+"fichier « creux », donc sa taille sur le disque est bien plus petite que "
+"celle affichée par « <command>ls -l</command> » (qui peut indiquer un très "
+"gros fichier si vous avez des utilisateurs avec des UID élevés). Vous pouvez "
+"afficher sa taille réelle avec « <command>ls -s</command> »."
+
+#: lastlog.8.xml:150(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+#: lastlog.8.xml:152(para)
+msgid "Database times of previous user logins."
+msgstr ""
+"Base de données de l'heure des connexions précédentes des utilisateurs."
+
+#: lastlog.8.xml:160(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+"S'il y a des trous importants dans les valeurs des UID, lastlog s'exécutera "
+"plus lentement, sans affichage à l'écran (par exemple, s'il n'y a pas "
+"d'entrée pour les utilisateurs ayant un UID compris entre 170 et 800 dans "
+"base de données lastlog, le programme lastlog semblera bloqué comme s'il "
+"traitait les entrées correspondant aux UID 171 à 799)."
+
+#: gshadow.5.xml:33(refentrytitle) gshadow.5.xml:38(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+#: gshadow.5.xml:39(refpurpose)
+msgid "shadowed group file"
+msgstr "informations cachées sur les groupes"
+
+#: gshadow.5.xml:44(para)
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+"<filename>/etc/gshadow</filename> contient les informations cachées sur les "
+"groupes."
+
+#: gshadow.5.xml:54(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+"Chaque ligne de ce fichier contient les champs suivants, séparés par des "
+"deux-points (« : ») :"
+
+#: gshadow.5.xml:60(emphasis)
+msgid "group name"
+msgstr "nom du groupe"
+
+#: gshadow.5.xml:62(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr ""
+
+#: gshadow.5.xml:75(para)
+msgid ""
+"If the password field contains some string that is not a valid result of "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, for instance ! or *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+"Si le champ du mot de passe contient une chaîne qui ne peut pas être un "
+"résultat valable de <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, par exemple si elle "
+"contient les caractères ! ou *, les utilisateurs ne pourront pas utiliser le "
+"mot de passe UNIX pour accéder au groupe (mais les membres du groupe n'ont "
+"pas besoin de mot de passe)."
+
+#: gshadow.5.xml:82(para)
+#, fuzzy
+#| msgid ""
+#| "The comment field is used by various system utilities, such as "
+#| "<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"The password is used when an user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"Le champ de commentaire est utilisé par différents utilitaires système, tels "
+"que <citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+
+#: gshadow.5.xml:88(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+
+#: gshadow.5.xml:98(para)
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+"Ce mot de passe remplace tout mot de passe indiqué dans <filename>/etc/"
+"group</filename>."
+
+#: gshadow.5.xml:106(emphasis)
+msgid "administrators"
+msgstr "administrateurs"
+
+#: gshadow.5.xml:108(para) gshadow.5.xml:124(para)
+msgid "It must be a comma-separated list of user names."
+msgstr "Ce champ doit être une liste d'utilisateurs, séparés par des virgules."
+
+#: gshadow.5.xml:111(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr ""
+
+#: gshadow.5.xml:115(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+
+#: gshadow.5.xml:122(emphasis)
+msgid "members"
+msgstr "membres"
+
+#: gshadow.5.xml:127(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+
+#: gshadow.5.xml:131(para)
+#, fuzzy
+#| msgid ""
+#| "This information supersedes any password present in <filename>/etc/group</"
+#| "filename>."
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+"Ces informations sont prioritaires sur tous les autres champs présents dans "
+"<filename>/etc/group</filename>."
+
+#: gshadow.5.xml:160(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: grpck.8.xml:44(refpurpose)
+msgid "verify integrity of group files"
+msgstr "Vérifier l'intégrité des fichiers d'administration des groupes"
+
+#: grpck.8.xml:70(para)
+#, fuzzy
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+"<command>Grpck</command> vérifie l'intégrité des informations "
+"d'authentification du système. Toutes les entrées des fichiers <filename>/"
+"etc/group</filename> et <filename>/etc/gshadow</filename> sont vérifiées "
+"afin de s'assurer qu'elles ont le bon format et qu'elles contiennent des "
+"données valables dans chaque champ. Une confirmation de l'utilisateur sera "
+"demandée pour détruire les entrées mal formatées ou ayant d'autres erreurs "
+"non récupérables."
+
+#: grpck.8.xml:87(para)
+#, fuzzy
+#| msgid "a unique group name"
+msgid "a unique and valid group name"
+msgstr "unicité des noms de groupe"
+
+#: grpck.8.xml:90(para)
+#, fuzzy
+#| msgid ""
+#| "Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+#| "\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+"Trie les entrées de <filename>/etc/group</filename><phrase condition="
+"\"gshadow\"> et <filename>/etc/gshadow</filename></phrase> par GID."
+
+#: grpck.8.xml:97(para)
+#, fuzzy
+#| msgid "a valid list of members and administrators"
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr "validité des membres et administrateurs"
+
+#: grpck.8.xml:103(para)
+#, fuzzy
+#| msgid ""
+#| "These four programs all operate on the normal and shadow password and "
+#| "group files: <filename>/etc/passwd</filename>, <filename>/etc/group</"
+#| "filename>, <filename>/etc/shadow</filename>, and <filename>/etc/gshadow</"
+#| "filename>."
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+"Ces quatre programmes opèrent sur les fichiers de mots de passe et "
+"d'informations sur les groupes cachés ou non : <filename>/etc/passwd</"
+"filename>, <filename>/etc/group</filename>, <filename>/etc/shadow</"
+"filename>, et <filename>/etc/gshadow</filename>."
+
+#: grpck.8.xml:111(para)
+#, fuzzy
+#| msgid ""
+#| "The checks for correct number of fields and unique group name are fatal. "
+#| "If the entry has the wrong number of fields, the user will be prompted to "
+#| "delete the entire line. If the user does not answer affirmatively, all "
+#| "further checks are bypassed. An entry with a duplicated group name is "
+#| "prompted for deletion, but the remaining checks will still be made. All "
+#| "other errors are warnings and the user is encouraged to run the "
+#| "<command>groupmod</command> command to correct the error."
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+"Une erreur dans le nombre de champs ou la non unicité d'un nom de groupe "
+"sera fatale. Si le nombre de champs n'est pas correct, il sera demandé à "
+"l'utilisateur de supprimer la ligne. Si l'utilisateur ne répond pas par "
+"l'affirmative, les vérifications suivantes ne seront pas effectuées. Il sera "
+"également demandé de supprimer les entrées correspondant aux noms de groupe "
+"redondants, mais dans ce cas, les autres vérifications seront effectuées. "
+"Toutes les autres erreurs ne sont que des avertissements et l'utilisateur "
+"est encouragé à utiliser <command>groupmod</command> pour les corriger."
+
+#: grpck.8.xml:122(para)
+#, fuzzy
+#| msgid ""
+#| "The commands which operate on the <filename>/etc/group</filename> file "
+#| "are not able to alter corrupted or duplicated entries. <command>grpck</"
+#| "command> should be used in those circumstances to remove the offending "
+#| "entry."
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+"Les commandes qui opèrent sur le fichier <filename>/etc/group</filename> ne "
+"peuvent pas modifier les entrées corrompues ou redondantes. <command>Grpck</"
+"command> doit être utilisé dans ce cas pour supprimer ces entrées."
+
+#: grpck.8.xml:134(para)
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>grpck</command> sont :"
+
+#: grpck.8.xml:141(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+
+#: grpck.8.xml:151(para)
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+"Trie les entrées de <filename>/etc/group</filename><phrase condition="
+"\"gshadow\"> et <filename>/etc/gshadow</filename></phrase> par GID."
+
+#: grpck.8.xml:160(para)
+#, fuzzy
+#| msgid ""
+#| "By default, <command>pwck</command> operates on the files <filename>/etc/"
+#| "passwd</filename> and <filename>/etc/shadow</filename>. The user may "
+#| "select alternate files with the <emphasis remap=\"I\">passwd</emphasis> "
+#| "and <emphasis remap=\"I\">shadow</emphasis> parameters."
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\"> and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+"Par défaut, <command>pwck</command> opère sur les fichiers <filename>/etc/"
+"passwd</filename> et <filename>/etc/shadow</filename>. L'utilisateur peut "
+"spécifier d'autres fichiers avec les paramètres <emphasis remap=\"I"
+"\">fichier_passwd</emphasis> et <emphasis remap=\"I\">fichier_shadow</"
+"emphasis>."
+
+#: grpck.8.xml:228(para)
+msgid "one or more bad group entries"
+msgstr "une entrée de groupe ou plus est incorrecte"
+
+#: grpck.8.xml:234(para)
+msgid "can't open group files"
+msgstr "impossible d'ouvrir les fichiers group"
+
+#: grpck.8.xml:240(para)
+msgid "can't lock group files"
+msgstr "impossible de verrouiller les fichiers group"
+
+#: grpck.8.xml:246(para)
+msgid "can't update group files"
+msgstr "impossible de mettre à jour les fichiers group"
+
+#: grpck.8.xml:210(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>grpck</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: grpck.8.xml:255(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry "
+#| "condition=\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum>, </citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry "
+"condition=\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum>, </citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: groups.1.xml:34(refentrytitle) groups.1.xml:39(refname)
+#: groups.1.xml:45(command)
+msgid "groups"
+msgstr "groups"
+
+#: groups.1.xml:40(refpurpose)
+msgid "display current group names"
+msgstr "Afficher la liste des groupes auxquels appartient l'utilisateur"
+
+#: groups.1.xml:47(replaceable) chfn.1.xml:58(replaceable)
+msgid "user"
+msgstr "utilisateur"
+
+#: groups.1.xml:54(para)
+#, fuzzy
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+"<command>Groups</command> affiche la liste des noms de groupe (ou leur "
+"identifiant numérique) de l'utilisateur. Si une valeur n'a pas d'entrée "
+"correspondante dans <filename>/etc/group</filename>, l'identifiant numérique "
+"du groupe est affiché. Le paramètre optionnel <emphasis remap=\"I"
+"\">utilisateur</emphasis> permet d'afficher la liste des groupes pour cet "
+"utilisateur."
+
+#: groups.1.xml:66(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change their current "
+"real and effective group ID."
+msgstr ""
+"Sur les systèmes qui ne gèrent pas l'appartenance à plusieurs groupes, "
+"seules les informations contenues dans <filename>/etc/group</filename> sont "
+"affichées. L'utilisateur doit utiliser <command>newgrp</command> ou "
+"<command>sg</command> pour modifier l'identifiant de groupe réel et effectif."
+
+#: groups.1.xml:88(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+#: groupmod.8.xml:44(refpurpose)
+msgid "modify a group definition on the system"
+msgstr "Modifier la définition d'un groupe du système"
+
+#: groupmod.8.xml:53(replaceable)
+msgid "GROUP"
+msgstr "GROUPE"
+
+#: groupmod.8.xml:59(para)
+#, fuzzy
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+"La commande <command>groupmod</command> modifie la définition du "
+"<replaceable>GROUPE</replaceable> spécifié en modifiant l'entrée "
+"correspondante de la base de données des groupes."
+
+#: groupmod.8.xml:68(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>groupmod</command> sont :"
+
+#: groupmod.8.xml:74(term) groupadd.8.xml:94(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option> <replaceable>GID</replaceable>"
+
+#: groupmod.8.xml:78(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the group will be changed from <replaceable>GROUP</"
+#| "replaceable> to <replaceable>NEW_GROUP</replaceable> name."
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+"Le nom du groupe sera modifié de <emphasis remap=\"I\">GROUPE</emphasis> "
+"vers <emphasis remap=\"I\">NOUVEAU_NOM_GROUPE</emphasis>."
+
+#: groupmod.8.xml:82(para)
+#, fuzzy
+#| msgid ""
+#| "This value must be unique, unless the <option>-o</option> option is used. "
+#| "The value must be non-negative. Values between 0 and 999 are typically "
+#| "reserved for system accounts."
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used. Values between 0 and 999 are typically reserved for system groups."
+msgstr ""
+"Cette valeur doit être unique, à moins que l'option <option>-o</option> ne "
+"soit utilisée. La valeur ne doit pas être négative. Les valeurs comprises "
+"entre 0 et 999 sont généralement réservées aux comptes système."
+
+#: groupmod.8.xml:89(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+
+#: groupmod.8.xml:104(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option><replaceable>NEW_GROUP</"
+"replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--new-name</option> "
+"<replaceable>NOUVEAU_NOM_GROUPE</replaceable>"
+
+#: groupmod.8.xml:109(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+"Le nom du groupe sera modifié de <emphasis remap=\"I\">GROUPE</emphasis> "
+"vers <emphasis remap=\"I\">NOUVEAU_NOM_GROUPE</emphasis>."
+
+#: groupmod.8.xml:120(para)
+#, fuzzy
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+"En combinaison avec l'option <option>-g</option>, cette option permet de "
+"changer l'identifiant du groupe vers une valeur déjà utilisée."
+
+#: groupmod.8.xml:219(para)
+msgid "group name already in use"
+msgstr "nom de groupe déjà utilisé"
+
+#: groupmod.8.xml:183(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>groupmod</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: groupmod.8.xml:234(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: groupmems.8.xml:44(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr "Administrer les membres du groupe primaire d'un utilisateur"
+
+#: groupmems.8.xml:51(replaceable) groupmems.8.xml:52(replaceable)
+msgid "user_name"
+msgstr "nom_utilisateur"
+
+#: groupmems.8.xml:51(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:52(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+#: groupmems.8.xml:53(replaceable)
+msgid "group_name"
+msgstr "nom_groupe"
+
+#: groupmems.8.xml:53(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+#: groupmems.8.xml:54(arg)
+msgid "-l"
+msgstr "-l"
+
+#: groupmems.8.xml:61(para)
+#, fuzzy
+msgid ""
+"The <command>groupmems</command> command allows a user to administer his/her "
+"own group membership list without the requirement of superuser privileges. "
+"The <command>groupmems</command> utility is for systems that configure its "
+"users to be in their own name sake primary group (i.e., guest / guest)."
+msgstr ""
+"L'utilitaire <command>groupmems</command> permet à un utilisateur "
+"d'administrer la liste des membres de son propre groupe sans avoir les "
+"privilèges du superutilisateur. L'utilitaire <command>groupmems</command> a "
+"été conçu pour les systèmes qui configurent leurs utilisateurs de telle "
+"sorte qu'ils soient responsable de leur groupe primaire (par exemple guest/"
+"guest)."
+
+#: groupmems.8.xml:69(para)
+#, fuzzy
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+"Seul le superutilisateur, en tant qu'administrateur, peut utiliser "
+"<command>groupmems</command> pour modifier la liste des membres d'un autre "
+"groupe."
+
+#: groupmems.8.xml:76(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>groupmems</command> sont :"
+
+#: groupmems.8.xml:82(term)
+msgid ""
+"<option>-a</option>, <option>--add</option><replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--add</option><replaceable>nom_utilisateur</"
+"replaceable>"
+
+#: groupmems.8.xml:84(para)
+msgid "Add an user to the group membership list."
+msgstr "Ajouter un utilisateur à la liste des membres du groupe."
+
+#: groupmems.8.xml:85(para) groupmems.8.xml:101(para)
+#: groupmems.8.xml:126(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+
+#: groupmems.8.xml:93(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option><replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--delete</option><replaceable>nom_utilisateur</"
+"replaceable>"
+
+#: groupmems.8.xml:95(para)
+msgid "Delete a user from the group membership list."
+msgstr "Supprimer un utilisateur de la liste des membres du groupe."
+
+#: groupmems.8.xml:96(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+
+#: groupmems.8.xml:109(term)
+msgid ""
+"<option>-g</option>, <option>--group</option><replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--group</option><replaceable>nom_groupe</"
+"replaceable>"
+
+#: groupmems.8.xml:111(para)
+#, fuzzy
+msgid "The superuser can specify which group membership list to modify."
+msgstr "Le superutilisateur peut préciser la liste des groupes à modifier."
+
+#: groupmems.8.xml:117(term) chage.1.xml:128(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: groupmems.8.xml:119(para)
+msgid "List the group membership list."
+msgstr "Afficher la liste des membres du groupe."
+
+#: groupmems.8.xml:123(term)
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-p</option>, <option>--purge</option>"
+
+#: groupmems.8.xml:125(para)
+msgid "Purge all users from the group membership list."
+msgstr "Supprimer tous les utilisateurs de la liste des membres du groupe."
+
+#: groupmems.8.xml:137(title)
+msgid "SETUP"
+msgstr "CONFIGURATION"
+
+#: groupmems.8.xml:138(para)
+msgid ""
+"The <command>groupmems</command> executable should be in mode <literal>2770</"
+"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
+"emphasis>. The system administrator can add users to group <emphasis>groups</"
+"emphasis> to allow or disallow them using the <command>groupmems</command> "
+"utility to manage their own group membership list."
+msgstr ""
+"<command>Groupmems</command> doit être installé dans le mode <literal>2770</"
+"literal> avec pour utilisateur <emphasis>root</emphasis> et pour groupe "
+"<emphasis>groups</emphasis>. L'administrateur système peut ajouter des "
+"utilisateurs au groupe <emphasis>groups</emphasis> pour leur permettre ou "
+"leur interdire d'utiliser <command>groupmems</command> pour gérer leur "
+"propre liste de membres du groupe."
+
+#: groupmems.8.xml:147(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2770 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+"    "
+msgstr ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2770 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+"    "
+
+#: groupmems.8.xml:179(para)
+msgid "secure group account information"
+msgstr "informations cachées sur les groupes"
+
+#: groupmems.8.xml:187(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupdel.8.xml:44(refpurpose)
+msgid "delete a group"
+msgstr "Supprimer un groupe"
+
+#: groupdel.8.xml:58(para)
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <emphasis remap=\"I\">group</emphasis>. "
+"The named group must exist."
+msgstr ""
+"La commande <command>groupdel</command> modifie les fichiers "
+"d'administration des comptes du système, en supprimant les entrées qui se "
+"réfèrent à <emphasis remap=\"I\">groupe</emphasis>. Le groupe indiqué doit "
+"exister."
+
+#: groupdel.8.xml:66(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+"Vous ne pouvez pas supprimer le groupe primaire d'un utilisateur existant. "
+"Vous devez supprimer l'utilisateur auparavant."
+
+#: groupdel.8.xml:70(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+"Vous devriez vérifier vous-même qu'aucun fichier possédé par le groupe ne "
+"subsiste sur tous les systèmes de fichiers."
+
+#: groupdel.8.xml:132(para)
+msgid "can't remove user's primary group"
+msgstr "impossible de supprimer le groupe primaire d'un utilisateur existant"
+
+#: groupdel.8.xml:108(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>groupdel</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: groupdel.8.xml:147(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: groupadd.8.xml:48(refpurpose)
+msgid "create a new group"
+msgstr "Créer un nouveau groupe"
+
+#: groupadd.8.xml:65(para)
+#, fuzzy
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+"La commande <command>groupadd</command> crée un nouveau compte de groupe en "
+"utilisant les valeurs spécifiées sur la ligne de commande et les valeurs par "
+"défaut du système. Le nouveau groupe sera inséré dans les fichiers du "
+"système selon les besoins."
+
+#: groupadd.8.xml:74(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>groupadd</command> sont :"
+
+#: groupadd.8.xml:84(para)
+#, fuzzy
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+"Avec cette option, <command>groupadd</command> quittera juste avec un état "
+"de succès si le groupe indiqué existe déjà. Avec l'option <option>-g</"
+"option>, si le groupe indiqué existe déjà, un autre gid (non utilisé) sera "
+"choisi (c.-à-d. que <option>-g</option> est désactivée)."
+
+#: groupadd.8.xml:98(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than 999 and greater than "
+"every other group. Values between 0 and 999 are typically reserved for "
+"system accounts."
+msgstr ""
+"La valeur numérique de l'identifiant du groupe (« group ID » ou GID). Cette "
+"valeur doit être unique, à moins que l'option <option>-o</option> ne soit "
+"utilisée. La valeur ne doit pas être négative. Par défaut le plus petit "
+"identifiant plus grand que 999 et que les identifiants des groupes existants "
+"est utilisé. Les valeurs comprises entre 0 et 999 sont généralement "
+"réservées aux comptes système."
+
+# NOTE: missing <filename>
+#: groupadd.8.xml:118(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+"Surcharger les valeurs par défaut du fichier <filename>/etc/login.defs</"
+"filename> (GID_MIN, GID_MAX et autres). L'option <option>-K</option> peut "
+"être indiquée plusieurs fois."
+
+#: groupadd.8.xml:123(para)
+msgid ""
+"Example: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable><option>-K </"
+"option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Exemple : <option>-K</option> <replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable> <option>-K</option> "
+"<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: groupadd.8.xml:127(para)
+msgid ""
+"Note: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Note : <option>-K</option> <replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> ne fonctionne pas pour l'instant."
+
+#: groupadd.8.xml:139(para)
+#, fuzzy
+msgid "This option permits to add a group with a non-unique GID."
+msgstr "Permet de créer un groupe avec un identifiant (« GID ») déjà utilisé."
+
+#: groupadd.8.xml:171(para)
+msgid "Create a system group."
+msgstr "Créer un groupe système."
+
+#: groupadd.8.xml:174(para)
+msgid ""
+"The numeric identifiers of new system groups are choosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+
+#: groupadd.8.xml:225(para)
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Les noms de groupe doivent commencer par une lettre minuscule ou un tiret "
+"bas (« underscore »), et seuls des lettres minuscules, des chiffres, des "
+"« underscore », ou des tirets peuvent suivre. Ils peuvent se terminer par un "
+"signe dollar. Soit, sous la forme d'une expression rationnelle : [a-z_][a-z0-"
+"9_-]*[$]?"
+
+#: groupadd.8.xml:231(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr "Les noms de groupe sont limités à &GROUP_NAME_MAX_LENGTH; caractères."
+
+#: groupadd.8.xml:234(para)
+#, fuzzy
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Vous ne pouvez pas ajouter d'utilisateur à un groupe NIS. Cela doit être "
+"effectué sur le serveur NIS."
+
+#: groupadd.8.xml:238(para)
+#, fuzzy
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+"Si le nom du groupe existe dans une base de données externe, telle que NIS, "
+"<command>groupadd</command> refusera de créer le groupe."
+
+#: groupadd.8.xml:271(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr "GID déjà utilisé (et <option>-o</option> n'est pas utilisé)"
+
+#: groupadd.8.xml:277(para)
+msgid "group name not unique"
+msgstr "nom de groupe déjà utilisé"
+
+#: groupadd.8.xml:247(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>groupadd</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#: groupadd.8.xml:292(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:49(phrase)
+#, fuzzy
+#| msgid "administer the <placeholder-1/> file"
+msgid "administer <placeholder-1/>"
+msgstr "Administrer le fichier <placeholder-1/>"
+
+#: gpasswd.1.xml:52(phrase)
+#, fuzzy
+#| msgid "-K <placeholder-1/>=<placeholder-2/>"
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#: gpasswd.1.xml:63(replaceable)
+#, fuzzy
+msgid "option"
+msgstr "options"
+
+#: gpasswd.1.xml:73(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+
+#: gpasswd.1.xml:81(para)
+#, fuzzy
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+"<command>Gpasswd</command> est utilisé pour administrer le fichier "
+"<filename>/etc/group</filename> (ainsi que le fichier <filename>/etc/"
+"gshadow</filename> si l'option SHADOWGRP a été définie lors de la "
+"compilation). Chaque groupe peut avoir des administrateurs, des membres "
+"ainsi qu'un mot de passe. L'administrateur système peut utiliser l'option "
+"<option>-A</option> pour définir le(s) administrateur(s) de groupe et "
+"l'option <option>-M</option> pour en définir les membres. Il possède "
+"également tous les droits des administrateurs et des membres du groupe."
+
+#: gpasswd.1.xml:86(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:93(para)
+#, fuzzy
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+"<command>Gpasswd</command> exécuté par un administrateur de groupe suivi "
+"d'un nom de groupe, affiche simplement l'invite de mot de passe du groupe. "
+"Si un mot de passe est défini alors les membres du groupe pourront utiliser "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> sans mot de passe, tandis que les utilisateurs n'étant pas "
+"membre du groupe devront fournir le mot de passe."
+
+#: gpasswd.1.xml:101(title)
+msgid "Notes about group passwords"
+msgstr "Notes sur les mots de passe de groupe"
+
+#: gpasswd.1.xml:102(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+"Les mots de passe de groupe représentent naturellement un risque en matière "
+"de sécurité, puisque plusieurs personnes ont connaissance du mot de passe. "
+"Cependant, les groupes sont utiles pour permettre la coopération entre "
+"différents utilisateurs."
+
+#: gpasswd.1.xml:113(para)
+#, fuzzy
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr ""
+"Les options <option>-r</option>, <option>-h</option> et <option>-f</option> "
+"ne peuvent être utilisées que par root."
+
+#: gpasswd.1.xml:117(para)
+msgid "The options cannot be combined."
+msgstr ""
+
+#: gpasswd.1.xml:120(para)
+#, fuzzy
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>passwd</command> sont :"
+
+#: gpasswd.1.xml:125(term)
+msgid ""
+"<option>-a</option>, <option>--add</option><replaceable>user</replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--add</option><replaceable>utilisateur</"
+"replaceable>"
+
+#: gpasswd.1.xml:129(para)
+#, fuzzy
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Le nom du groupe sera modifié de <emphasis remap=\"I\">GROUPE</emphasis> "
+"vers <emphasis remap=\"I\">NOUVEAU_NOM_GROUPE</emphasis>."
+
+#: gpasswd.1.xml:138(term)
+msgid ""
+"<option>-d</option>, <option>--delete</option><replaceable>user</replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--delete</option><replaceable>utilisateur</"
+"replaceable>"
+
+#: gpasswd.1.xml:142(para)
+#, fuzzy
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+"Le nom du groupe sera modifié de <emphasis remap=\"I\">GROUPE</emphasis> "
+"vers <emphasis remap=\"I\">NOUVEAU_NOM_GROUPE</emphasis>."
+
+#: gpasswd.1.xml:151(term)
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove-password</option>"
+
+#: gpasswd.1.xml:155(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. Only "
+"group members will be allowed to use <command>newgrp</command> to join the "
+"named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:166(term)
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-R</option>, <option>--restrict</option>"
+
+#: gpasswd.1.xml:170(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. Only "
+"group members will be allowed to use <command>newgrp</command> to join the "
+"named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:181(term)
+msgid ""
+"<option>-A</option>, <option>--administrators</option><replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-A</option>, <option>--administrators</"
+"option><replaceable>utilisateur</replaceable>,..."
+
+#: gpasswd.1.xml:185(para)
+#, fuzzy
+msgid "Set the list of administrative users."
+msgstr "liste d'administrateurs du groupe séparés par des virgules"
+
+#: gpasswd.1.xml:193(term)
+msgid ""
+"<option>-M</option>, <option>--members</option><replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-M</option>, <option>--members</option><replaceable>utilisateur</"
+"replaceable>,..."
+
+#: gpasswd.1.xml:197(para)
+#, fuzzy
+msgid "Set the list of group members."
+msgstr "liste des membres du groupe séparés par des virgules"
+
+#: gpasswd.1.xml:207(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+
+#: gpasswd.1.xml:252(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+
+#: faillog.8.xml:34(refentrytitle) faillog.8.xml:39(refname)
+#: faillog.8.xml:45(command) faillog.5.xml:34(refentrytitle)
+#: faillog.5.xml:39(refname) faillog.5.xml:86(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+#: faillog.8.xml:40(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr ""
+"Examiner le fichier faillog, et fixer les limites d'échecs de connexion"
+
+#: faillog.8.xml:54(para)
+#, fuzzy
+#| msgid ""
+#| "<command>faillog</command> formats the contents of the failure log from "
+#| "<filename>/var/log/faillog</filename> database. It also can be used for "
+#| "maintains failure counters and limits. Run <command>faillog</command> "
+#| "without arguments display only list of user faillog records who have ever "
+#| "had a login failure."
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+"<command>Faillog</command> affiche le contenu du journal des échecs de "
+"connexion (<filename>/var/log/faillog</filename>), et maintient le décompte "
+"et les limitations de ces échecs. Exécuter <command>faillog</command> sans "
+"argument n'affiche que la liste des échecs des utilisateurs qui ont déjà eu "
+"un échec de connexion."
+
+#: faillog.8.xml:65(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>faillog</command> sont :"
+
+#: faillog.8.xml:73(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+
+#: faillog.8.xml:86(term)
+msgid ""
+"<option>-l</option>, <option>--lock-time</option><replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-time</option> <replaceable>SEC</"
+"replaceable>"
+
+# NOTE: s/to/during/
+#: faillog.8.xml:91(para)
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+"Verrouiller le compte pendant <replaceable>SEC</replaceable> secondes après "
+"un échec de connexion."
+
+#: faillog.8.xml:95(para) faillog.8.xml:121(para) faillog.8.xml:133(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+"L'accès en écriture sur <filename>/var/log/faillog</filename> est nécessaire "
+"pour cette option."
+
+#: faillog.8.xml:102(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option><replaceable>MAX</replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option> <replaceable>MAX</"
+"replaceable>"
+
+#: faillog.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "Reset the counters of login failures or one record if used with the "
+#| "<option>-u</option><replaceable>LOGIN</replaceable> option."
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+"Réinitialiser les compteurs (ou un compteur, si l'option <option>-u</option> "
+"<replaceable>IDENTIFIANT</replaceable> est utilisée) des échecs de connexion."
+
+#: faillog.8.xml:111(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+
+#: faillog.8.xml:116(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+
+#: faillog.8.xml:128(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:130(para)
+msgid "Reset the counters of login failures."
+msgstr ""
+
+#: faillog.8.xml:144(para)
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+"Afficher les entrées de faillog plus récentes que <replaceable>JOURS</"
+"replaceable>."
+
+#: faillog.8.xml:156(para)
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+"Afficher l'entrée de faillog ou maintient le décompte et les limitations "
+"(suivant que l'option <option>-l</option>, <option>-m</option> ou <option>-"
+"r</option> est utilisée) seulement pour les utilisateurs indiqués."
+
+#: faillog.8.xml:174(para)
+#, fuzzy
+#| msgid ""
+#| "The <option>-r</option>, <option>-h</option> and <option>-f</option> "
+#| "options are only used when <command>login</command> is invoked by root."
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+"Les options <option>-r</option>, <option>-h</option> et <option>-f</option> "
+"ne peuvent être utilisées que par root."
+
+#: faillog.8.xml:179(para)
+msgid ""
+"NOTE: in display mode, only the records of users which currently exist in "
+"the system are displayed. In the other modes (when the <option>-l</option>, "
+"<option>-m</option>, or <option>-r</option> options are used), the records "
+"of the user, or the range of users, or all the users that may have an entry "
+"in the faillog database will be changed. This is useful to reset records of "
+"users that have been deleted or set a policy in advance for a range of users."
+msgstr ""
+
+#: faillog.8.xml:192(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+"<command>Faillog</command> n'affiche que les utilisateurs n'ayant pas eu de "
+"connexion réussie depuis leur dernier échec. Pour afficher un utilisateur "
+"ayant eu une connexion réussie depuis son dernier échec, vous devez "
+"explicitement demander cet utilisateur avec l'option <option>-u</option>, ou "
+"demander l'affichage de tous les utilisateurs avec l'option <option>-a</"
+"option>."
+
+#: faillog.8.xml:205(filename) faillog.5.xml:74(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+#: faillog.8.xml:207(para) faillog.5.xml:76(para)
+msgid "Failure logging file."
+msgstr "Journal des échecs de connexion."
+
+#: faillog.8.xml:215(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: faillog.5.xml:40(refpurpose)
+msgid "login failure logging file"
+msgstr "journal des échecs de connexion"
+
+#: faillog.5.xml:45(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+
+#: faillog.5.xml:49(para)
+#, fuzzy
+#| msgid ""
+#| "<filename>/var/log/faillog</filename> maintains a count of login failures "
+#| "and the limits for each account. The file is fixed length record, indexed "
+#| "by numerical UID. Each record contains the count of login failures since "
+#| "the last successful login; the maximum number of failures before the "
+#| "account is disabled; the line the last login failure occurred on; the "
+#| "date the last login failure occurred; and the time in seconds how long "
+#| "the account will be locked after a failure."
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"whiche the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+"<filename>/var/log/faillog</filename> maintient un compteur des échecs de "
+"connexion ainsi que les limites associées à chaque compte. Le fichier est "
+"constitué d'enregistrements de longueur fixe, indexés par l'identifiant "
+"numérique des utilisateurs (UID). Chaque enregistrement comprend le nombre "
+"d'échecs de connexion depuis la dernière connexion réussie, le nombre "
+"maximal d'échecs avant que le compte ne soit désactivé, la ligne "
+"correspondant au dernier échec de connexion, la date du dernier échec, et le "
+"temps en secondes après lequel le compte sera bloqué après un échec."
+
+#: faillog.5.xml:59(para)
+msgid "The structure of the file is:"
+msgstr "La structure du fichier est la suivante :"
+
+#: faillog.5.xml:60(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort   fail_cnt;\n"
+"\tshort   fail_max;\n"
+"\tchar    fail_line[12];\n"
+"\ttime_t  fail_time;\n"
+"\tlong    fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort   fail_cnt;      /* compteur des échecs */\n"
+"\tshort   fail_max;      /* nb max avant désactivation */\n"
+"\tchar    fail_line[12]; /* ligne du dernier échec */\n"
+"\ttime_t  fail_time;     /* date du dernier échec */\n"
+"\tlong    fail_locktime;};"
+
+#: expiry.1.xml:41(refentrytitle) expiry.1.xml:46(refname)
+#: expiry.1.xml:52(command)
+msgid "expiry"
+msgstr "expiry"
+
+#: expiry.1.xml:47(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr "Vérifier et sécuriser la durée de validité des mots de passe"
+
+#: expiry.1.xml:60(para)
+#, fuzzy
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+"Avec l'option <option>-c</option>, <command>expiry</command> vérifie la "
+"validité du mot de passe de l'utilisateur courant, et force (avec l'option "
+"<option>-f</option>) des changements quand nécessaire. Il peut être appelé "
+"par un utilisateur normal."
+
+#: expiry.1.xml:87(para) chage.1.xml:262(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: chsh.1.xml:46(refpurpose)
+msgid "change login shell"
+msgstr "Changer l'interpréteur de commandes initial"
+
+#: chsh.1.xml:63(para)
+#, fuzzy
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account, the superuser may change "
+"the login shell for any account."
+msgstr ""
+"<command>Chsh</command> modifie l'interpréteur de commandes initial (« login "
+"shell ») de l'utilisateur qui sera invoqué lors des connexions de "
+"l'utilisateur. Un utilisateur normal ne peut changer que l'interpréteur "
+"associé à son propre compte. Le superutilisateur peut changer l'interpréteur "
+"de commandes initial de n'importe quel compte."
+
+#: chsh.1.xml:74(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr "Les options applicables à la commande <command>chsh</command> sont :"
+
+#: chsh.1.xml:96(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Quand l'option <option>-s</option> n'est pas sélectionnée, <command>chsh</"
+"command> opère de façon interactive, demandant à l'utilisateur quel doit "
+"être le nouvel interpréteur de commandes initial (« login shell »). "
+"L'utilisateur pourra entrer une nouvelle valeur pour modifier "
+"l'interpréteur, ou laisser la ligne blanche pour conserver l'interpréteur "
+"actuel. L'interpréteur actuel est indiqué entre crochets (<emphasis>[ ]</"
+"emphasis>)."
+
+#: chsh.1.xml:107(para)
+#, fuzzy
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+"La seule restriction placée sur l'interpréteur est que cette commande doit "
+"être listée dans <filename>/etc/shells</filename>, à moins que "
+"<command>chsh</command> ne soit invoqué par le superutilisateur, qui peut "
+"ajouter n'importe quelle valeur. Un compte avec un interpréteur de commandes "
+"restreint ne peut pas changer son interpréteur. Pour cette raison, il est "
+"déconseillé de placer <filename>/bin/rsh</filename> dans <filename>/etc/"
+"shells</filename>, puisqu'un changement accidentel vers un interpréteur "
+"restreint empêchera alors l'utilisateur de retourner ensuite à "
+"l'interpréteur précédent."
+
+#: chsh.1.xml:142(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+#: chsh.1.xml:144(para)
+msgid "List of valid login shells."
+msgstr "Liste des interpréteurs de commandes initiaux valables."
+
+#: chsh.1.xml:158(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chpasswd.8.xml:47(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "Mettre à jour des mots de passe par lot"
+
+#: chpasswd.8.xml:61(para)
+#, fuzzy
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+"<command>Chpasswd</command> lit une liste de paires de noms d'utilisateurs "
+"et de mots de passe depuis l'entrée standard et utilise ces informations "
+"pour mettre à jour un groupe d'utilisateurs existants. Chaque ligne est au "
+"format suivant :"
+
+#: chpasswd.8.xml:66(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">nom_utilisateur</emphasis>:<emphasis remap=\"I"
+"\">mot_de_passe</emphasis>"
+
+#: chpasswd.8.xml:71(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"Par défaut, le mot de passe doit être fourni en clair. L'algorithme de "
+"chiffrement par défaut est le chiffrement DES. L'âge du mot de passe sera "
+"également mis à jour, s'il est présent."
+
+#: chpasswd.8.xml:76(para) chgpasswd.8.xml:75(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"ENCRYPT_METHOD variable of <filename>/etc/login.defs</filename>, and can be "
+"overwiten with the <option>-e</option>, <option>-m</option>, or <option>-c</"
+"option> options."
+msgstr ""
+
+#: chpasswd.8.xml:82(para)
+msgid ""
+"<command>chpasswd</command> first update the password in memory, and then "
+"commit all the changes to disk if no errors occured for any users."
+msgstr ""
+
+#: chpasswd.8.xml:89(para)
+msgid "The supplied passwords must be in clear-text."
+msgstr "Les mots de passe doivent être fournis en clair."
+
+#: chpasswd.8.xml:92(para)
+msgid ""
+"PAM is used to update the password in the system database according to the "
+"PAM chpasswd configuration."
+msgstr ""
+
+#: chpasswd.8.xml:96(para)
+msgid ""
+"When <command>chpasswd</command> fails to update a password, it continues "
+"updating the passwords of the next users, and will return an error code on "
+"exit."
+msgstr ""
+
+#: chpasswd.8.xml:102(para) chgpasswd.8.xml:81(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+"Cette commande est destinée aux gros systèmes pour lesquels un nombre "
+"importants de comptes sont créés en une seule fois."
+
+#: chpasswd.8.xml:110(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>chpasswd</command> sont :"
+
+#: chpasswd.8.xml:119(para) chgpasswd.8.xml:98(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr ""
+
+#: chpasswd.8.xml:129(term) chgpasswd.8.xml:108(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: chpasswd.8.xml:131(para) chgpasswd.8.xml:110(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr "Indique que les mots de passe fournis sont chiffrés."
+
+#: chpasswd.8.xml:145(term) chgpasswd.8.xml:120(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+#: chpasswd.8.xml:147(para) chgpasswd.8.xml:122(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+"Permettre d'utiliser le chiffrement MD5, plutôt que DES, lorsque les mots de "
+"passe fournis ne sont pas chiffrés."
+
+#: chpasswd.8.xml:183(para) chgpasswd.8.xml:158(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+"Pensez à fixer les permissions ou umask afin d'empêcher la lecture par les "
+"autres utilisateurs des fichiers non chiffrés. "
+
+#: chpasswd.8.xml:229(filename)
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/pam.d/chpasswd"
+
+#: chpasswd.8.xml:231(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr ""
+
+#: chpasswd.8.xml:239(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry "
+#| "condition=\"no_pam\"><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry "
+"condition=\"no_pam\"><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: chgpasswd.8.xml:48(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr "Mettre à jour par lot des mots de passe des groupes"
+
+#: chgpasswd.8.xml:62(para)
+#, fuzzy
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"<command>Chgpasswd</command> lit une liste de paires de noms de groupes et "
+"de mots de passe depuis l'entrée standard et utilise ces informations pour "
+"mettre à jour un ensemble de groupes existants. Chaque ligne est au format "
+"suivant :"
+
+#: chgpasswd.8.xml:67(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">nom_utilisateur</emphasis>:<emphasis remap=\"I"
+"\">mot_de_passe</emphasis>"
+
+#: chgpasswd.8.xml:71(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"Par défaut, le mot de passe doit être fourni en clair. L'algorithme de "
+"chiffrement par défaut est le chiffrement DES."
+
+#: chgpasswd.8.xml:89(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>chgpasswd</command> sont :"
+
+#: chgpasswd.8.xml:209(para)
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+#: chfn.1.xml:47(refpurpose)
+msgid "change real user name and information"
+msgstr "Modifier le nom complet et les informations associées à un utilisateur"
+
+#: chfn.1.xml:53(replaceable)
+msgid "full_name"
+msgstr "nom_complet"
+
+#: chfn.1.xml:53(arg)
+msgid "-f <placeholder-1/>"
+msgstr "-f <placeholder-1/>"
+
+#: chfn.1.xml:54(replaceable)
+msgid "room_no"
+msgstr "no_bureau"
+
+#: chfn.1.xml:55(replaceable)
+msgid "work_ph"
+msgstr "tel_bureau"
+
+#: chfn.1.xml:55(arg)
+msgid "-w <placeholder-1/>"
+msgstr "-w <placeholder-1/>"
+
+#: chfn.1.xml:56(replaceable)
+msgid "home_ph"
+msgstr "tel_perso"
+
+#: chfn.1.xml:57(replaceable)
+msgid "other"
+msgstr "autre"
+
+#: chfn.1.xml:57(arg)
+msgid "-o <placeholder-1/>"
+msgstr "-o <placeholder-1/>"
+
+#: chfn.1.xml:64(para)
+#, fuzzy
+msgid ""
+"The <command>chfn</command> command changes user fullname, office number, "
+"office extension, and home phone number information for a user's account. "
+"This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+"<command>Chfn</command> modifie le nom complet d'un utilisateur, son numéro "
+"de bureau, son numéro de téléphone professionnel, et son numéro de téléphone "
+"personnel. Ces informations sont généralement affichées par "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> ou d'autres programmes similaires. Un utilisateur normal ne "
+"peut modifier que les informations associées à son propre compte, avec les "
+"restrictions spécifiées dans <filename>/etc/login.defs</filename>. (Par "
+"défaut, les utilisateurs ne peuvent pas modifier leur nom complet). Le "
+"superutilisateur peut modifier n'importe quel champ pour n'importe quel "
+"compte. De plus, seul le superutilisateur peut utiliser l'option <option>-o</"
+"option> pour modifier les parties non spécifiées du champ GECOS."
+
+#: chfn.1.xml:78(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+
+#: chfn.1.xml:87(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+"Si aucune option n'est sélectionnée, <command>chfn</command> opère de "
+"manière interactive, demandant à l'utilisateur d'entrer les valeurs "
+"actuelles de chacun des champs. Entrer une nouvelle valeur pour la modifier, "
+"ou de laisser une ligne blanche pour conserver la valeur actuelle. La valeur "
+"actuelle est indiquée entre crochets (<emphasis remap=\"B\">[ ]</emphasis>). "
+"En l'absence d'option, <command>chfn</command> opère sur l'utilisateur "
+"actuel."
+
+#: chfn.1.xml:132(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chage.1.xml:34(refentrytitle) chage.1.xml:39(refname)
+#: chage.1.xml:44(command)
+msgid "chage"
+msgstr "chage"
+
+#: chage.1.xml:40(refpurpose)
+msgid "change user password expiry information"
+msgstr "Modifier les informations de validité d'un mot de passe"
+
+#: chage.1.xml:56(para)
+msgid ""
+"The <command>chage</command> command changes the number of days between "
+"password changes and the date of the last password change. This information "
+"is used by the system to determine when a user must change his/her password."
+msgstr ""
+"La commande <command>chage</command> modifie le nombre de jours entre les "
+"changements de mot de passe et la date du dernier changement. Ces "
+"informations sont utilisées par le système pour déterminer si un utilisateur "
+"doit changer son mot de passe."
+
+#: chage.1.xml:66(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr ""
+"Les options disponibles pour la commande <command>chage</command> sont :"
+
+#: chage.1.xml:71(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option><replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--lastday</option> <replaceable>DERNIER_JOUR</"
+"replaceable>"
+
+#: chage.1.xml:75(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+"Fixer le nombre du jour, à compter du 1er janvier 1970, où le mot de passe a "
+"été changé la dernière fois. La date peut aussi être exprimée dans le format "
+"AAAA-MM-JJ (ou le format utilisé plus communément dans votre région)."
+
+#: chage.1.xml:83(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</"
+"replaceable>"
+msgstr ""
+"<option>-E</option>, <option>--expiredate</option> "
+"<replaceable>DATE_FIN_VALIDITÉ</replaceable>"
+
+# NOTE: s/date//
+#: chage.1.xml:87(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+"Fixer la date, ou le nombre de jours à compter du 1er janvier 1970, à partir "
+"de laquelle le compte de l'utilisateur ne sera plus accessible. La date peut "
+"aussi être exprimée dans le format AAAA-MM-JJ (ou le format plus communément "
+"utilisé dans votre région). Un utilisateur dont le compte est bloqué doit "
+"contacter l'administrateur système pour pouvoir utiliser à nouveau le "
+"système."
+
+#: chage.1.xml:95(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+"Une valeur de <emphasis remap=\"I\">-1</emphasis> pour "
+"<replaceable>DATE_FIN_VALIDITÉ</replaceable> aura pour effet de supprimer la "
+"date de fin de validité."
+
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-I</option>, <option>--inactive</option> "
+"<replaceable>DURÉE_INACTIVITÉ</replaceable>"
+
+#: chage.1.xml:113(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+"Fixer le nombre de jours d'inactivité, après qu'un mot de passe ait dépassé "
+"la date de fin de validité, avant que le compte ne soit bloqué. La valeur "
+"<replaceable>DURÉE_INACTIVITÉ</replaceable> est le nombre de jours "
+"d'inactivité. Un utilisateur dont le compte est bloqué doit contacter "
+"l'administrateur système avant de pouvoir utiliser de nouveau le système."
+
+#: chage.1.xml:120(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+"Une valeur de <emphasis remap=\"I\">-1</emphasis> pour "
+"<replaceable>DURÉE_INACTIVITÉ</replaceable> supprime la durée d'inactivité "
+"pour un compte."
+
+#: chage.1.xml:132(para)
+msgid "Show account aging information."
+msgstr "Afficher les informations sur l'âge des comptes."
+
+#: chage.1.xml:138(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option> <replaceable>JOURS_MIN</"
+"replaceable>"
+
+#: chage.1.xml:150(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-M</option>, <option>--maxdays</option> <replaceable>JOURS_MAX</"
+"replaceable>"
+
+#: chage.1.xml:154(para)
+msgid ""
+"Set the maximum number of days during which a password is valid. When "
+"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
+"is less than the current day, the user will be required to change his/her "
+"password before being able to use his/her account. This occurrence can be "
+"planned for in advance by use of the <option>-W</option> option, which "
+"provides the user with advance warning."
+msgstr ""
+"Fixer le nombre maximum de jours pendant lesquels un mot de passe est "
+"valable. Quand <replaceable>JOURS_MAX</replaceable> plus "
+"<replaceable>DERNIER_JOUR</replaceable> est inférieur à la date actuelle, "
+"l'utilisateur est obligé de changer son mot de passe avant de pouvoir "
+"utiliser son compte. Cet événement peut être déclenché plus tôt grâce à "
+"l'option <option>-W</option> qui prévient l'utilisateur à l'avance par un "
+"message d'alerte."
+
+#: chage.1.xml:163(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+"Une valeur de <emphasis remap=\"I\">-1</emphasis> pour "
+"<replaceable>JOURS_MAX</replaceable> supprime la vérification de validité."
+
+#: chage.1.xml:171(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--warndays</option> "
+"<replaceable>DURÉE_AVERTISSEMENT</replaceable>"
+
+#: chage.1.xml:175(para)
+msgid ""
+"Set the number of days of warning before a password change is required. The "
+"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
+"the password expiring that a user will be warned his/her password is about "
+"to expire."
+msgstr ""
+"Fixer le nombre de jours d'avertissement avant que le changement de mot de "
+"passe ne soit obligatoire. La valeur <replaceable>DURÉE_AVERTISSEMENT</"
+"replaceable> est le nombre de jours précédant la fin de validité pendant "
+"lesquels un utilisateur sera prévenu que son mot de passe est sur le point "
+"d'arriver en fin de validité."
+
+#: chage.1.xml:184(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Si aucune de ces options n'est donnée, <command>chage</command> utilise un "
+"mode interactif, demandant confirmation à l'utilisateur pour les valeurs de "
+"tous les champs. Entrez la nouvelle valeur pour modifier la valeur du champ, "
+"ou laissez la ligne vide pour conserver la valeur actuelle. La valeur "
+"actuelle est affichée entre crochets."
+
+#: chage.1.xml:194(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"Le programme <command>chage</command> nécessite l'utilisation d'un fichier "
+"de mots de passe cachés (« shadow password file »)."
+
+#: chage.1.xml:198(para)
+msgid ""
+"The <command>chage</command> command is restricted to the root user, except "
+"for the <option>-l</option> option, which may be used by an unprivileged "
+"user to determine when his/her password or account is due to expire."
+msgstr ""
+"La commande <command>chage</command> est réservée à l'utilisateur root, sauf "
+"pour l'option <option>-l</option>, qui peut être utilisée par un utilisateur "
+"non privilégié pour lui permettre de savoir quand son mot de passe ou son "
+"compte arrivera en fin de validité."
+
+#: chage.1.xml:251(replaceable)
+msgid "15"
+msgstr "15"
+
+#: chage.1.xml:253(para)
+msgid "can't find the shadow password file"
+msgstr "impossible de trouver le fichier des mots de passe cachés"
+
+#: chage.1.xml:229(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"La commande <command>chage</command> retourne les valeurs suivantes en "
+"quittant : <placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr "Nicolas FRANÇOIS <nicolas.francois@centraliens.net>, 2005."
+
+#~ msgid ""
+#~ "The encrypted password, as returned by "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. The default is to disable the account."
+#~ msgstr ""
+#~ "Le mot de passe chiffré, comme renvoyé par "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. Le comportement par défaut est de désactiver "
+#~ "le compte."
+
+# NOTE: shadowed, not encrypted
+#~ msgid "encrypted password file"
+#~ msgstr "fichier des mots de passe cachés"
+
+#~ msgid "comma-separated list of group administrators"
+#~ msgstr "liste d'administrateurs du groupe séparés par des virgules"
+
+#~ msgid ""
+#~ "The group name and password fields must be filled. The encrypted password "
+#~ "consists of characters from the 64-character alphabet a thru z, A thru Z, "
+#~ "0 thru 9, \\. and /. Refer to <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry> for details on how "
+#~ "this string is interpreted. If the password field contains some string "
+#~ "that is not valid result of <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, for instance ! or "
+#~ "*, the user will not be able to use a unix password to log in, subject to "
+#~ "<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+#~ "citerefentry>."
+#~ msgstr ""
+#~ "Les champs « nom du groupe » et « mot de passe » doivent être remplis. Le "
+#~ "mot de passe chiffré comprend 13 caractères pris dans l'alphabet de 64 "
+#~ "caractères a-z, A-Z, 0-9, \\. et /. Consultez "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry> pour plus d'informations sur le traitement de "
+#~ "cette chaîne. Si le champ du mot de passe contient une chaîne qui ne peut "
+#~ "pas être un résultat valable de <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, par exemple si "
+#~ "elle contient les caractères ! ou *, alors l'utilisateur ne pourra pas "
+#~ "utiliser son mot de passe UNIX pour se connecter. Ceci peut dépendre de "
+#~ "<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+#~ "citerefentry>."
+
+#, fuzzy
+#~ msgid ""
+#~ "The group ID of the given <replaceable>GROUP</replaceable> will be "
+#~ "changed to <replaceable>GID</replaceable>. The value of <replaceable>GID</"
+#~ "replaceable> must be a non-negative decimal integer. This value must be "
+#~ "unique, unless the <option>-o</option> option is used. Values between 0 "
+#~ "and 999 are typically reserved for system groups. Any files that have the "
+#~ "old group ID and must continue to belong to <replaceable>GROUP</"
+#~ "replaceable>, must have their group ID changed manually."
+#~ msgstr ""
+#~ "Indiquer la nouvelle Valeur numérique de l'identifiant du "
+#~ "<replaceable>GROUPE</replaceable> (« group ID » ou GID). La valeur de "
+#~ "<replaceable>GID</replaceable> doit être un entier décimal non négatif. "
+#~ "Cette valeur doit être unique, à moins que l'option <option>-o</option> "
+#~ "ne soit utilisée. Les valeurs comprises entre 0 et 999 sont généralement "
+#~ "réservées aux comptes système. Vous devrez modifier vous-même le groupe "
+#~ "propriétaire de tous les fichiers possédés par ce groupe."
+
+#~ msgid ""
+#~ "Note: if you use PAM, it is recommended to set this variable consistently "
+#~ "with the PAM modules configuration."
+#~ msgstr ""
+#~ "Remarque : si vous utilisez PAM, il est recommandé d'ajuster cette "
+#~ "variable de façon cohérente avec la configuration des modules PAM."
+
+#, fuzzy
+#~| msgid ""
+#~| "<command>usermod</command> will not allow you to change the name of a "
+#~| "user who is logged in. You must make certain that the named user is not "
+#~| "executing any processes when this command is being executed if the "
+#~| "user's numerical user ID is being changed. You must change the owner of "
+#~| "any <command>crontab</command> files manually. You must change the owner "
+#~| "of any <command>at</command> jobs manually. You must make any changes "
+#~| "involving NIS on the NIS server."
+#~ msgid ""
+#~ "<command>usermod</command> will not allow you to change the name of an "
+#~ "user who is logged in. You must make certain that the named user is not "
+#~ "executing any processes when this command is being executed if the user's "
+#~ "numerical user ID is being changed. You must change the owner of any "
+#~ "<command>crontab</command> files manually. You must change the owner of "
+#~ "any <command>at</command> jobs manually. You must make any changes "
+#~ "involving NIS on the NIS server."
+#~ msgstr ""
+#~ "<command>Usermod</command> ne vous permet pas de modifier le nom d'un "
+#~ "utilisateur qui est actuellement connecté. Vous devez vous assurer que "
+#~ "l'utilisateur nommé n'est pas en train d'exécuter un quelconque programme "
+#~ "lorsque cette commande est exécutée si l'UID numérique de l'utilisateur "
+#~ "est modifié. Vous devez modifier vous-même le nom du propriétaire de tous "
+#~ "les fichiers <command>crontab</command> et des tâches <command>at</"
+#~ "command>. Vous devez effectuer toutes les modifications impliquant NIS "
+#~ "sur le serveur NIS."
+
+#~ msgid ""
+#~ "<command>userdel</command> will not allow you to remove an account if the "
+#~ "user is currently logged in. You must kill any running processes which "
+#~ "belong to an account that you are deleting."
+#~ msgstr ""
+#~ "<command>Userdel</command> ne vous permet pas de supprimer un compte si "
+#~ "l'utilisateur en question est actuellement connecté. Vous devez tuer tous "
+#~ "les processus en cours d'exécution appartenant à l'utilisateur que vous "
+#~ "êtes en train de supprimer."
+
+#~ msgid ""
+#~ "The group name or number of the user's new initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1."
+#~ msgstr ""
+#~ "Nom du groupe ou identifiant numérique du groupe de connexion initial de "
+#~ "l'utilisateur. Le nom du groupe doit exister. Un numéro de groupe doit se "
+#~ "référer à un groupe déjà existant. Le numéro de groupe par défaut est de "
+#~ "1."
+
+#~ msgid ""
+#~ "The group name or number of the user's initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1 or whatever is specified in <filename>/etc/"
+#~ "default/useradd</filename>."
+#~ msgstr ""
+#~ "Nom ou ou numéro du groupe de connexion initial de l'utilisateur. Le nom "
+#~ "du groupe doit exister. Un numéro de groupe doit se référer à un groupe "
+#~ "existant. Le numéro de groupe par défaut est de 1, ou la valeur indiquée "
+#~ "dans <filename>/etc/default/useradd</filename>."
+
+#~ msgid ""
+#~ "The group name or ID for a new user's initial group. The named group must "
+#~ "exist, and a numerical group ID must have an existing entry."
+#~ msgstr ""
+#~ "Nom de groupe ou identifiant numérique du groupe initial d'un nouvel "
+#~ "utilisateur. Le groupe spécifié doit exister, et un identifiant de groupe "
+#~ "numérique doit déjà exister."
+
+#~ msgid "days since Jan 1, 1970 that password was last changed"
+#~ msgstr ""
+#~ "nombre de jours, comptés à partir du 1er janvier 1970, depuis le dernier "
+#~ "changement de mot de passe"
+
+#~ msgid "days after which password must be changed"
+#~ msgstr "nombre de jours après lesquels le mot de passe doit être changé"
+
+#~ msgid "days before password is to expire that user is warned"
+#~ msgstr ""
+#~ "nombre de jours avant la fin de validité du mot de passe et pendant "
+#~ "lesquels l'utilisateur est averti"
+
+#~ msgid "days after password expires that account is disabled"
+#~ msgstr ""
+#~ "nombre de jours après la fin de validité provoquant la désactivation du "
+#~ "compte"
+
+#~ msgid "days since Jan 1, 1970 that account is disabled"
+#~ msgstr ""
+#~ "nombre de jours, comptés à partir du 1er janvier 1970, depuis que le "
+#~ "compte est désactivé"
+
+#, fuzzy
+#~ msgid ""
+#~ "The password field must be filled. The encrypted password consists of 13 "
+#~ "to 24 characters from the 64 character alphabet a thru z, A thru Z, 0 "
+#~ "thru 9, \\. and /. Optionally it can start with a \"$\" character. This "
+#~ "means the encrypted password was generated using another (not DES) "
+#~ "algorithm. For example if it starts with \"$1$\" it means the MD5-based "
+#~ "algorithm was used."
+#~ msgstr ""
+#~ "Le champ « mot de passe » doit être rempli. Le mot de passe chiffré "
+#~ "comprend 13 à 24 caractères pris dans l'alphabet de 64 caractère : a-z, A-"
+#~ "Z, 0-9, \\. et /. Il peut optionellement commencer par un caractère « $ ». "
+#~ "Ceci signifie que le mot de passe a été généré par un autre algorithme "
+#~ "(autre que DES). Par exemple, s'il commence par « $1$ », l'algorithme basé "
+#~ "sur MD5 a été utilisé."
+
+#~ msgid ""
+#~ "The date of the last password change is given as the number of days since "
+#~ "Jan 1, 1970. The password may not be changed again until the proper "
+#~ "number of days have passed, and must be changed after the maximum number "
+#~ "of days. If the minimum number of days required is greater than the "
+#~ "maximum number of day allowed, this password may not be changed by the "
+#~ "user."
+#~ msgstr ""
+#~ "La date de dernière modification du mot de passe est donnée par le nombre "
+#~ "de jours écoulés depuis le 1er janvier 1970 jusqu'au dernier changement "
+#~ "du mot de passe. Un mot de passe ne peut pas être changé de nouveau avant "
+#~ "le nombre de jours indiqués, et doit être modifié avant le nombre maximal "
+#~ "de jours spécifié. Si le nombre minimal de jours requis est plus grand "
+#~ "que le nombre maximal de jours de validité, ce mot de passe ne peut pas "
+#~ "être changé par l'utilisateur."
+
+#~ msgid ""
+#~ "An account is considered to be inactive and is disabled if the password "
+#~ "is not changed within the specified number of days after the password "
+#~ "expires. An account will also be disabled on the specified day regardless "
+#~ "of other password expiration information."
+#~ msgstr ""
+#~ "Un compte est considéré comme inactif et est désactivé si le mot de passe "
+#~ "n'est pas changé dans l'intervalle indiqué après la fin de la validité du "
+#~ "mot de passe. Un compte est également désactivé le jour indiqué quels que "
+#~ "soient les autres informations de validité."
+
+#~ msgid ""
+#~ "This information supersedes any password or password age information "
+#~ "present in <filename>/etc/passwd</filename>."
+#~ msgstr ""
+#~ "Ces informations sont prioritaires sur tous les autres champs présents "
+#~ "dans <filename>/etc/passwd</filename>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#, fuzzy
+#~ msgid ""
+#~ "This field will be checked for existence as a directory, and a new "
+#~ "directory with this name will be created if it does not already exist. "
+#~ "The ownership of the directory will be set to be that of the user being "
+#~ "created or updated."
+#~ msgstr ""
+#~ "L'existence du répertoire indiqué dans ce champ est vérifiée, et dans le "
+#~ "cas contraire, le répertoire est créé. Le propriétaire du répertoire sera "
+#~ "l'utilisateur dont le compte est créé ou mis à jour."
+
+#, fuzzy
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "-a"
+#~ msgstr "-a"
+
+#~ msgid "-d"
+#~ msgstr "-d"
+
+#~ msgid "-g"
+#~ msgstr "-g"
+
+#~ msgid "GID"
+#~ msgstr "GID"
+
+#~ msgid "-o"
+#~ msgstr "-o"
+
+#~ msgid "KEY"
+#~ msgstr "CLÉ"
+
+#~ msgid "VALUE"
+#~ msgstr "VALEUR"
+
+#, fuzzy
+#~ msgid "-R"
+#~ msgstr "-"
+
+#, fuzzy
+#~ msgid "<option>-A</option><replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option> <replaceable>UID</replaceable>"
+
+#, fuzzy
+#~ msgid "<option>-M</option><replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option> <replaceable>UID</replaceable>"
+
+#~ msgid "Display faillog records for all users."
+#~ msgstr "Afficher les échecs de tous les utilisateurs."
+
+#~ msgid ""
+#~ "Set maximum number of login failures after the account is disabled to "
+#~ "<replaceable>MAX</replaceable>. Selecting <replaceable>MAX</replaceable> "
+#~ "value of 0 has the effect of not placing a limit on the number of failed "
+#~ "logins. The maximum failure count should always be 0 for <emphasis>root</"
+#~ "emphasis> to prevent a denial of services attack against the system."
+#~ msgstr ""
+#~ "Fixer le nombre maximum d'échecs de connexion après lesquels le compte "
+#~ "sera désactivé à <emphasis remap=\"I\">MAX</emphasis>. Une limite "
+#~ "<replaceable>MAX</replaceable> de 0 aura pour effet de ne pas placer de "
+#~ "limite d'échec. La limite pour l'utilisateur <emphasis>root</emphasis> "
+#~ "devrait toujours être 0 pour éviter tout risque de déni de service contre "
+#~ "le système."
+
+#~ msgid ""
+#~ "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--user</option> <replaceable>IDENTIFIANT</"
+#~ "replaceable>"
+
+#~ msgid ""
+#~ "The user's home directory will be created if it does not exist. The files "
+#~ "contained in <replaceable>SKEL_DIR</replaceable> will be copied to the "
+#~ "home directory if the <option>-k</option> option is used, otherwise the "
+#~ "files contained in <filename>/etc/skel</filename> will be used instead. "
+#~ "Any directories contained in <replaceable>SKEL_DIR</replaceable> or "
+#~ "<filename>/etc/skel</filename> will be created in the user's home "
+#~ "directory as well. The <option>-k</option> option is only valid in "
+#~ "conjunction with the <option>-m</option> option. The default is to not "
+#~ "create the directory and to not copy any files."
+#~ msgstr ""
+#~ "Le répertoire personnel de l'utilisateur sera créé s'il n'existe pas "
+#~ "déjà. Les fichiers contenus dans <replaceable>rép_squelette</replaceable> "
+#~ "seront copiés dans le répertoire personnel si l'option <option>-k</"
+#~ "option> est employée ; sinon, les fichiers contenus dans <filename>/etc/"
+#~ "skel</filename> seront utilisés à la place. Tous les répertoires contenus "
+#~ "dans <replaceable>rép_squelette</replaceable> ou dans <filename>/etc/"
+#~ "skel</filename> seront également créés dans le répertoire personnel de "
+#~ "l'utilisateur. L'option <option>-k</option> n'est valable qu'en "
+#~ "conjonction avec l'option <option>-m</option>. Le comportement par défaut "
+#~ "est de ne pas créer le répertoire, et de ne copier aucun fichier."
+
+#~ msgid ""
+#~ "Your password must be easily remembered so that you will not be forced to "
+#~ "write it on a piece of paper. This can be accomplished by appending two "
+#~ "small words together and separating each with a special character or "
+#~ "digit. For example, Pass%word."
+#~ msgstr ""
+#~ "Vous devez pouvoir vous souvenir facilement de votre mot de passe, afin "
+#~ "de ne pas avoir à le noter sur un morceau de papier. Pour ce faire, on "
+#~ "peut choisir d'accoler deux mots en les séparant avec un caractère "
+#~ "spécial ou un chiffre. Par exemple, Mot2passe."
+
+#~ msgid ""
+#~ "Other methods of construction involve selecting an easily remembered "
+#~ "phrase from literature and selecting the first or last letter from each "
+#~ "word. An example of this is:"
+#~ msgstr ""
+#~ "D'autres méthodes de construction utilisent une phrase facile à se "
+#~ "rappeler, et consistent à sélectionner la première ou la dernière lettre "
+#~ "de chaque mot. Voici un exemple [ NdT : en anglais ] :"
+
+#~ msgid "Ask not for whom the bell tolls"
+#~ msgstr "Ask not for whom the bell tolls."
+
+#~ msgid "which produces"
+#~ msgstr "Ce qui donne :"
+
+#~ msgid "An4wtbt"
+#~ msgstr "An4wtbt."
+
+#~ msgid ""
+#~ "You may be reasonably sure few crackers will have included this in their "
+#~ "dictionaries. You should, however, select your own methods for "
+#~ "constructing passwords and not rely exclusively on the methods given here."
+#~ msgstr ""
+#~ "Vous pouvez raisonnablement être assuré que quelques crackers ont "
+#~ "désormais inclus ces mots de passe dans leurs dictionnaires. Vous pouvez "
+#~ "également utiliser votre propre méthode de construction de mots de passe "
+#~ "et ne pas compter exclusivement sur les méthodes proposées ici."
+
+#~ msgid ""
+#~ "The only restriction placed on the contents of the fields is that no "
+#~ "control characters may be present, nor any of comma, colon, or equal "
+#~ "sign. The <emphasis remap=\"I\">other</emphasis> field does not have this "
+#~ "restriction, and is used to store accounting information used by other "
+#~ "applications."
+#~ msgstr ""
+#~ "La seule restriction pour le contenu des champs est qu'ils ne doivent "
+#~ "contenir aucun caractère de contrôle, ni aucune virgule, deux-points ou "
+#~ "signe égal. Le champ <emphasis remap=\"I\">autre</emphasis> n'a pas cette "
+#~ "limitation et peut être utilisé pour enregistrer des informations sur le "
+#~ "compte pour d'autres applications."
+
+#~ msgid ""
+#~ "Range of user IDs to choose from for the <command>useradd</command> "
+#~ "program."
+#~ msgstr ""
+#~ "Plage d'identifiants numériques d'utilisateur que <command>useradd</"
+#~ "command> peut utiliser."
+
+#~ msgid ""
+#~ "The <option>-t</option> flag overrides the use of <option>-u</option>."
+#~ msgstr ""
+#~ "L'utilisation de l'option <option>-t</option> supplante l'option <option>-"
+#~ "u</option>."
+
+# NOTE: shadow => gshadow
+#~ msgid ""
+#~ "By default, <command>grpck</command> operates on the files <filename>/etc/"
+#~ "group</filename> and <filename>/etc/gshadow</filename>. The user may "
+#~ "select alternate files with the <emphasis remap=\"I\">group</emphasis> "
+#~ "and <emphasis remap=\"I\">shadow</emphasis> parameters. Additionally, the "
+#~ "user may execute the command in read-only mode by specifying the <option>-"
+#~ "r</option> flag. This causes all questions regarding changes to be "
+#~ "answered <emphasis>no</emphasis> without user intervention. "
+#~ "<command>grpck</command> can also sort entries in <filename>/etc/group</"
+#~ "filename> and <filename>/etc/gshadow</filename> by GID. To run it in sort "
+#~ "mode pass it <option>-s</option> flag. No checks are performed then, it "
+#~ "just sorts."
+#~ msgstr ""
+#~ "Par défaut, <command>grpck</command> opère sur les fichiers <filename>/"
+#~ "etc/group</filename> et <filename>/etc/gshadow</filename>. L'utilisateur "
+#~ "peut spécifier d'autres fichiers avec les paramètres <emphasis remap=\"I"
+#~ "\">group</emphasis> et <emphasis remap=\"I\">gshadow</emphasis>. De plus, "
+#~ "l'utilisateur peut exécuter les commandes en lecture seule en utilisant "
+#~ "l'option <option>-r</option>. Ceci aura pour conséquence de répondre "
+#~ "<emphasis>no</emphasis> à toutes les questions demandant des "
+#~ "modifications, sans intervention de l'utilisateur. <command>Grpck</"
+#~ "command> permet aussi de trier les entrées de <filename>/etc/group</"
+#~ "filename> et <filename>/etc/gshadow</filename> par GID. Pour effectuer ce "
+#~ "tri, utilisez l'option <option>-s</option>. Aucune vérification n'est "
+#~ "alors effectuée, les entrées sont seulement triées."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "MAIL_DIR USERDEL_CMD"
+#~ msgstr "MAIL_DIR USERDEL_CMD"
+
+#~ msgid "MAIL_DIR"
+#~ msgstr "MAIL_DIR"
+
+#~ msgid "CHFN_AUTH"
+#~ msgstr "CHFN_AUTH"
+
+#~ msgid "GID_MAX GID_MIN"
+#~ msgstr "GID_MAX GID_MIN"
+
+#~ msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+#~ msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "The name of the new user's login shell. The named program will be used "
+#~ "for all future new user accounts."
+#~ msgstr ""
+#~ "Nom de l'interpréteur de commandes initial (« login shell ») d'un nouvel "
+#~ "utilisateur. Le programme nommé sera utilisé pour tous les futurs "
+#~ "nouveaux comptes utilisateur."
+
+#~ msgid ""
+#~ "If no options are specified, <command>useradd</command> displays the "
+#~ "current default values."
+#~ msgstr ""
+#~ "Si aucune option n'est spécifiée, <command>useradd</command> affiche les "
+#~ "valeurs par défaut du moment."
+
+#~ msgid "-R <placeholder-1/>"
+#~ msgstr "-R <placeholder-1/>"
+
+#~ msgid "user,"
+#~ msgstr "utilisateur,"
+
+#~ msgid "-A <placeholder-1/>"
+#~ msgstr "-A <placeholder-1/>"
+
+#~ msgid "-M <placeholder-1/>"
+#~ msgstr "-M <placeholder-1/>"
+
+#~ msgid ""
+#~ "Group administrator can add and delete users using <option>-a</option> "
+#~ "and <option>-d</option> options respectively. Administrators can use "
+#~ "<option>-r</option> option to remove group password. When no password is "
+#~ "set only group members can use <command>newgrp</command> to join the "
+#~ "group. Option <option>-R</option> disables access via a password to the "
+#~ "group through <command>newgrp</command> command (however members will "
+#~ "still be able to switch to this group)."
+#~ msgstr ""
+#~ "Un administrateur de groupe peut ajouter ou supprimer des utilisateurs en "
+#~ "utilisant respectivement les options <option>-a</option> et <option>-d</"
+#~ "option>. Les administrateurs peuvent utiliser l'option <option>-r</"
+#~ "option> pour supprimer le mot de passe d'un groupe. Lorsqu'aucun mot de "
+#~ "passe n'est défini, seuls les membres d'un groupe peuvent utiliser "
+#~ "<command>newgrp</command> pour utiliser ce groupe. L'option <option>-R</"
+#~ "option> désactive l'accès au groupe via la commande <command>newgrp</"
+#~ "command> (sauf pour les membres du groupe)."
+
+#~ msgid ""
+#~ "<option>-c</option>, <option>--command</option><replaceable>SHELL</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-c</option>, <option>--command</"
+#~ "option><replaceable>INTERPRÉTEUR_COMMANDES</replaceable>"
+
+#, fuzzy
+#~ msgid ""
+#~ "This field must contain name of group. When specified an existing group "
+#~ "name the named user will be added as a new member of this group. If "
+#~ "specified non-existent non-numerical group name a new group will be "
+#~ "created."
+#~ msgstr ""
+#~ "Ce champ peut être le nom d'un groupe existant, ce qui permet d'ajouter "
+#~ "l'utilisateur désigné dans la liste des membres du groupe. Si un "
+#~ "identifiant de groupe inexistant est indiqué, un nouveau groupe est créé, "
+#~ "avec cet identifiant de groupe."
diff --git a/man/po/it.po b/man/po/it.po
new file mode 100644 (file)
index 0000000..ef28f77
--- /dev/null
@@ -0,0 +1,10115 @@
+# Italian translations for shadow package.
+# Copyright © 2005 the shadow copyright holder.
+# This file is distributed under the same license as the shadow package.
+# Giuseppe Sacco <eppesuig@debian.org>, 2005.
+# Danilo Piazzalunga <danilopiazza@libero.it>, 2005.
+# Isabella Ruocco <isacher@nettaxi.com>, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.3\n"
+"POT-Creation-Date: 2009-07-24 03:03+0200\n"
+"PO-Revision-Date: 2007-05-27 16:42+0200\n"
+"Last-Translator: Giuseppe Sacco <eppesuig@debian.org>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: vipw.8.xml:38(refentrytitle) vipw.8.xml:43(refname) vipw.8.xml:52(command)
+msgid "vipw"
+msgstr "vipw"
+
+#: vipw.8.xml:39(manvolnum) usermod.8.xml:40(manvolnum)
+#: userdel.8.xml:42(manvolnum) userdel.8.xml:199(replaceable)
+#: useradd.8.xml:50(manvolnum) pwconv.8.xml:43(manvolnum)
+#: pwck.8.xml:41(manvolnum) nologin.8.xml:35(manvolnum)
+#: newusers.8.xml:51(manvolnum) logoutd.8.xml:35(manvolnum)
+#: lastlog.8.xml:36(manvolnum) grpck.8.xml:39(manvolnum)
+#: groupmod.8.xml:39(manvolnum) groupmems.8.xml:39(manvolnum)
+#: groupdel.8.xml:39(manvolnum) groupdel.8.xml:130(replaceable)
+#: groupadd.8.xml:43(manvolnum) faillog.8.xml:35(manvolnum)
+#: faillog.5.xml:86(manvolnum) chpasswd.8.xml:42(manvolnum)
+#: chgpasswd.8.xml:43(manvolnum)
+msgid "8"
+msgstr "8"
+
+#: vipw.8.xml:40(refmiscinfo) usermod.8.xml:41(refmiscinfo)
+#: userdel.8.xml:43(refmiscinfo) useradd.8.xml:51(refmiscinfo)
+#: pwconv.8.xml:44(refmiscinfo) pwck.8.xml:42(refmiscinfo)
+#: nologin.8.xml:36(refmiscinfo) newusers.8.xml:52(refmiscinfo)
+#: logoutd.8.xml:36(refmiscinfo) lastlog.8.xml:37(refmiscinfo)
+#: grpck.8.xml:40(refmiscinfo) groupmod.8.xml:40(refmiscinfo)
+#: groupmems.8.xml:40(refmiscinfo) groupdel.8.xml:40(refmiscinfo)
+#: groupadd.8.xml:44(refmiscinfo) faillog.8.xml:36(refmiscinfo)
+#: chpasswd.8.xml:43(refmiscinfo) chgpasswd.8.xml:44(refmiscinfo)
+msgid "System Management Commands"
+msgstr ""
+
+#: vipw.8.xml:44(refname) vipw.8.xml:58(command)
+msgid "vigr"
+msgstr "vigr"
+
+# type: Plain text
+#: vipw.8.xml:45(refpurpose)
+#, fuzzy
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"vipw, vigr - editano i file delle password, dei gruppi, delle password "
+"oscurate, o dei gruppi oscurati.\n"
+"#-#-#-#-#  vipw.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"vipw, vigr - modificano i file delle password, dei gruppi, delle shadow "
+"password o dei gruppi shadow"
+
+#: vipw.8.xml:54(replaceable) vipw.8.xml:60(replaceable)
+#: usermod.8.xml:52(replaceable) userdel.8.xml:52(arg)
+#: useradd.8.xml:61(replaceable) useradd.8.xml:73(replaceable)
+#: su.1.xml:66(replaceable) passwd.1.xml:57(replaceable)
+#: newusers.8.xml:63(replaceable) lastlog.8.xml:48(replaceable)
+#: groupmod.8.xml:51(replaceable) groupadd.8.xml:55(replaceable)
+#: faillog.8.xml:47(replaceable) chsh.1.xml:53(replaceable)
+#: chpasswd.8.xml:54(replaceable) chgpasswd.8.xml:55(replaceable)
+#: chage.1.xml:46(replaceable)
+msgid "options"
+msgstr "opzioni"
+
+# type: SH
+#: vipw.8.xml:66(title) usermod.8.xml:59(title) userdel.8.xml:60(title)
+#: useradd.8.xml:79(title) suauth.5.xml:50(title) su.1.xml:77(title)
+#: sg.1.xml:59(title) shadow.5.xml:44(title) shadow.3.xml:93(title)
+#: shadow.3.xml:149(title) pwconv.8.xml:70(title) pwck.8.xml:83(title)
+#: porttime.5.xml:44(title) passwd.5.xml:44(title) passwd.1.xml:66(title)
+#: nologin.8.xml:50(title) newusers.8.xml:70(title) newgrp.1.xml:55(title)
+#: logoutd.8.xml:50(title) login.defs.5.xml:107(title)
+#: login.access.5.xml:45(title) login.1.xml:103(title) limits.5.xml:46(title)
+#: lastlog.8.xml:54(title) gshadow.5.xml:43(title) grpck.8.xml:69(title)
+#: groups.1.xml:53(title) groupmod.8.xml:58(title) groupmems.8.xml:60(title)
+#: groupdel.8.xml:57(title) groupadd.8.xml:64(title) gpasswd.1.xml:72(title)
+#: faillog.8.xml:53(title) faillog.5.xml:44(title) expiry.1.xml:59(title)
+#: chsh.1.xml:62(title) chpasswd.8.xml:60(title) chgpasswd.8.xml:61(title)
+#: chfn.1.xml:63(title) chage.1.xml:55(title)
+msgid "DESCRIPTION"
+msgstr "DESCRIZIONE"
+
+# type: Plain text
+#: vipw.8.xml:67(para)
+#, fuzzy
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<command>vipw</command> e <command>vigr</command> permettono di modificare "
+"rispettivamente i file <filename>/etc/passwd</filename> e <filename>/etc/"
+"group</filename>. Con l'opzione <option>-s</option>, vengono aperte le "
+"versioni shadow di quei file, rispettivamente <filename>/etc/shadow</"
+"filename> e <filename>/etc/gshadow</filename>. I programmi si occupano di "
+"impostare i lock necessari per evitare la corruzione dei file. Per "
+"determinare l'editor da usare, i programmi prima provano con la variabile "
+"d'ambiente <envar>$VISUAL</envar>, poi con la variabile d'ambiente <envar>"
+"$EDITOR</envar> e infine con l'editor predefinito, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+# type: SH
+#: vipw.8.xml:84(title) usermod.8.xml:67(title) userdel.8.xml:69(title)
+#: useradd.8.xml:97(title) su.1.xml:123(title) pwck.8.xml:164(title)
+#: passwd.1.xml:152(title) newusers.8.xml:239(title) login.1.xml:188(title)
+#: lastlog.8.xml:66(title) grpck.8.xml:133(title) groupmod.8.xml:67(title)
+#: groupmems.8.xml:75(title) groupadd.8.xml:73(title) gpasswd.1.xml:112(title)
+#: faillog.8.xml:64(title) chsh.1.xml:73(title) chpasswd.8.xml:109(title)
+#: chgpasswd.8.xml:88(title) chage.1.xml:65(title)
+msgid "OPTIONS"
+msgstr "OPZIONI"
+
+# type: Plain text
+#: vipw.8.xml:85(para)
+#, fuzzy
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr "Il comando <command>chage</command> accetta le seguenti opzioni:"
+
+# type: TP
+#: vipw.8.xml:91(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: vipw.8.xml:93(para)
+msgid "Edit group database."
+msgstr ""
+
+# type: TP
+#: vipw.8.xml:97(term) userdel.8.xml:99(term) useradd.8.xml:247(term)
+#: passwd.1.xml:192(term) newusers.8.xml:257(term) lastlog.8.xml:82(term)
+#: groupmod.8.xml:98(term) groupadd.8.xml:108(term) faillog.8.xml:80(term)
+#: chsh.1.xml:79(term) chpasswd.8.xml:137(term) chgpasswd.8.xml:114(term)
+#: chage.1.xml:103(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+# type: Plain text
+#: vipw.8.xml:99(para) userdel.8.xml:101(para) useradd.8.xml:249(para)
+#: passwd.1.xml:194(para) newusers.8.xml:259(para) lastlog.8.xml:86(para)
+#: groupmod.8.xml:100(para) groupadd.8.xml:110(para) faillog.8.xml:82(para)
+#: chsh.1.xml:81(para) chpasswd.8.xml:139(para) chgpasswd.8.xml:116(para)
+#: chage.1.xml:105(para)
+msgid "Display help message and exit."
+msgstr "Mostra un messaggio di aiuto ed esce."
+
+# type: IP
+#: vipw.8.xml:103(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#: vipw.8.xml:105(para)
+msgid "Edit passwd database."
+msgstr ""
+
+# type: IP
+#: vipw.8.xml:109(term) passwd.1.xml:259(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:111(para) passwd.1.xml:263(para)
+msgid "Quiet mode."
+msgstr ""
+
+# type: IP
+#: vipw.8.xml:115(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: vipw.8.xml:117(para)
+msgid "Edit shadow or gshadow database."
+msgstr ""
+
+# type: SH
+#: vipw.8.xml:124(title) usermod.8.xml:372(title) userdel.8.xml:140(title)
+#: useradd.8.xml:644(title) suauth.5.xml:168(title) su.1.xml:338(title)
+#: sg.1.xml:88(title) shadow.5.xml:230(title) shadow.3.xml:201(title)
+#: pwconv.8.xml:168(title) pwck.8.xml:227(title) porttime.5.xml:105(title)
+#: passwd.5.xml:116(title) passwd.1.xml:374(title) newusers.8.xml:357(title)
+#: newgrp.1.xml:99(title) logoutd.8.xml:64(title) login.access.5.xml:96(title)
+#: login.1.xml:316(title) limits.5.xml:140(title) lastlog.8.xml:147(title)
+#: gshadow.5.xml:141(title) grpck.8.xml:185(title) groups.1.xml:75(title)
+#: groupmod.8.xml:164(title) groupmems.8.xml:168(title)
+#: groupdel.8.xml:89(title) groupadd.8.xml:200(title) gpasswd.1.xml:233(title)
+#: faillog.8.xml:202(title) faillog.5.xml:71(title) expiry.1.xml:68(title)
+#: chsh.1.xml:133(title) chpasswd.8.xml:208(title) chgpasswd.8.xml:184(title)
+#: chfn.1.xml:113(title) chage.1.xml:206(title)
+msgid "FILES"
+msgstr "FILE"
+
+#: vipw.8.xml:127(filename) usermod.8.xml:375(filename)
+#: userdel.8.xml:143(filename) useradd.8.xml:659(filename)
+#: sg.1.xml:103(filename) pwck.8.xml:230(filename)
+#: newusers.8.xml:372(filename) newgrp.1.xml:114(filename)
+#: gshadow.5.xml:144(filename) grpck.8.xml:188(filename)
+#: groups.1.xml:78(filename) groupmod.8.xml:167(filename)
+#: groupmems.8.xml:171(filename) groupdel.8.xml:92(filename)
+#: groupadd.8.xml:203(filename) gpasswd.1.xml:50(filename)
+#: gpasswd.1.xml:53(filename) gpasswd.1.xml:236(filename)
+#: chgpasswd.8.xml:187(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+# type: Plain text
+#: vipw.8.xml:129(para) usermod.8.xml:377(para) userdel.8.xml:145(para)
+#: useradd.8.xml:661(para) sg.1.xml:105(para) pwck.8.xml:232(para)
+#: newusers.8.xml:374(para) newgrp.1.xml:116(para) gshadow.5.xml:146(para)
+#: grpck.8.xml:190(para) groups.1.xml:80(para) groupmod.8.xml:169(para)
+#: groupmems.8.xml:173(para) groupdel.8.xml:94(para) groupadd.8.xml:205(para)
+#: gpasswd.1.xml:238(para) chgpasswd.8.xml:189(para)
+msgid "Group account information."
+msgstr "Informazioni sugli account di gruppo."
+
+#: vipw.8.xml:133(filename) usermod.8.xml:381(filename)
+#: useradd.8.xml:665(filename) sg.1.xml:109(filename)
+#: newusers.8.xml:378(filename) newgrp.1.xml:120(filename)
+#: gshadow.5.xml:150(filename) grpck.8.xml:194(filename)
+#: groupmod.8.xml:173(filename) groupmems.8.xml:177(filename)
+#: groupdel.8.xml:98(filename) groupadd.8.xml:209(filename)
+#: gpasswd.1.xml:54(filename) gpasswd.1.xml:242(filename)
+#: chgpasswd.8.xml:193(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+# type: Plain text
+#: vipw.8.xml:135(para) usermod.8.xml:383(para) useradd.8.xml:667(para)
+#: sg.1.xml:111(para) newusers.8.xml:380(para) newgrp.1.xml:122(para)
+#: gshadow.5.xml:152(para) grpck.8.xml:196(para) groupmod.8.xml:175(para)
+#: groupdel.8.xml:100(para) groupadd.8.xml:211(para) gpasswd.1.xml:244(para)
+#: chgpasswd.8.xml:195(para)
+msgid "Secure group account information."
+msgstr "Informazioni sicure sugli account di gruppo."
+
+#: vipw.8.xml:139(filename) usermod.8.xml:387(filename)
+#: userdel.8.xml:155(filename) useradd.8.xml:647(filename)
+#: su.1.xml:341(filename) sg.1.xml:91(filename) shadow.5.xml:233(filename)
+#: pwck.8.xml:236(filename) passwd.5.xml:119(filename)
+#: passwd.1.xml:377(filename) newusers.8.xml:360(filename)
+#: newgrp.1.xml:102(filename) login.1.xml:331(filename)
+#: grpck.8.xml:200(filename) expiry.1.xml:71(filename)
+#: chsh.1.xml:136(filename) chpasswd.8.xml:211(filename)
+#: chfn.1.xml:122(filename) chage.1.xml:210(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+# type: Plain text
+#: vipw.8.xml:141(para) usermod.8.xml:389(para) userdel.8.xml:157(para)
+#: useradd.8.xml:649(para) su.1.xml:343(para) sg.1.xml:93(para)
+#: shadow.5.xml:235(para) pwck.8.xml:238(para) passwd.5.xml:121(para)
+#: passwd.1.xml:379(para) newusers.8.xml:362(para) newgrp.1.xml:104(para)
+#: login.1.xml:333(para) grpck.8.xml:202(para) expiry.1.xml:73(para)
+#: chsh.1.xml:138(para) chpasswd.8.xml:213(para) chfn.1.xml:124(para)
+#: chage.1.xml:213(para)
+msgid "User account information."
+msgstr "informazioni sugli account utente."
+
+#: vipw.8.xml:145(filename) usermod.8.xml:393(filename)
+#: userdel.8.xml:161(filename) useradd.8.xml:653(filename)
+#: su.1.xml:347(filename) sg.1.xml:97(filename) shadow.5.xml:239(filename)
+#: shadow.3.xml:204(filename) pwck.8.xml:242(filename)
+#: passwd.5.xml:125(filename) passwd.1.xml:383(filename)
+#: newusers.8.xml:366(filename) newgrp.1.xml:108(filename)
+#: login.1.xml:337(filename) expiry.1.xml:77(filename)
+#: chpasswd.8.xml:217(filename) chage.1.xml:218(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+# type: Plain text
+#: vipw.8.xml:147(para) usermod.8.xml:395(para) userdel.8.xml:163(para)
+#: useradd.8.xml:655(para) su.1.xml:349(para) sg.1.xml:99(para)
+#: shadow.5.xml:241(para) shadow.3.xml:206(para) pwck.8.xml:244(para)
+#: passwd.1.xml:385(para) newusers.8.xml:368(para) newgrp.1.xml:110(para)
+#: login.1.xml:339(para) expiry.1.xml:79(para) chpasswd.8.xml:219(para)
+#: chage.1.xml:221(para)
+msgid "Secure user account information."
+msgstr "Informazioni sicure sugli account di utenti."
+
+# type: SH
+#: vipw.8.xml:154(title) usermod.8.xml:402(title) userdel.8.xml:248(title)
+#: useradd.8.xml:761(title) suauth.5.xml:197(title) su.1.xml:362(title)
+#: sg.1.xml:118(title) shadow.5.xml:258(title) shadow.3.xml:213(title)
+#: pwconv.8.xml:180(title) pwck.8.xml:302(title) porttime.5.xml:117(title)
+#: passwd.5.xml:144(title) passwd.1.xml:455(title) nologin.8.xml:64(title)
+#: newusers.8.xml:399(title) newgrp.1.xml:129(title)
+#: login.defs.5.xml:471(title) login.access.5.xml:108(title)
+#: login.1.xml:376(title) limits.5.xml:150(title) gshadow.5.xml:159(title)
+#: grpck.8.xml:254(title) groups.1.xml:87(title) groupmod.8.xml:233(title)
+#: groupmems.8.xml:186(title) groupdel.8.xml:146(title)
+#: groupadd.8.xml:291(title) gpasswd.1.xml:251(title) faillog.8.xml:214(title)
+#: faillog.5.xml:83(title) expiry.1.xml:86(title) chsh.1.xml:157(title)
+#: chpasswd.8.xml:238(title) chgpasswd.8.xml:208(title) chfn.1.xml:131(title)
+#: chage.1.xml:261(title)
+msgid "SEE ALSO"
+msgstr "VEDERE ANCHE"
+
+# type: Plain text
+#: vipw.8.xml:155(para)
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: usermod.8.xml:39(refentrytitle) usermod.8.xml:44(refname)
+#: usermod.8.xml:50(command) login.defs.5.xml:443(term)
+msgid "usermod"
+msgstr "usermod"
+
+# type: Plain text
+#: usermod.8.xml:45(refpurpose)
+msgid "modify a user account"
+msgstr "modifica l'account di un utente"
+
+# type: TH
+#: usermod.8.xml:54(replaceable) userdel.8.xml:54(replaceable)
+#: useradd.8.xml:63(replaceable) passwd.1.xml:60(replaceable)
+#: chsh.1.xml:56(replaceable) chage.1.xml:49(replaceable)
+msgid "LOGIN"
+msgstr "LOGIN"
+
+# type: Plain text
+#: usermod.8.xml:60(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"Il comando <command>usermod</command> modifica i file di account del sistema "
+"in modo da riflettere i cambiamenti che sono specificati sulla linea di "
+"comando."
+
+# type: TP
+#: usermod.8.xml:68(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr "Il comando <command>usermod</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: usermod.8.xml:74(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--append</option>"
+
+# type: IP
+#: usermod.8.xml:78(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+# type: TP
+#: usermod.8.xml:85(term) useradd.8.xml:125(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option><replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: usermod.8.xml:90(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"Il campo commento del nuovo utente nel file password. Normalmente viene "
+"modificato usando l'utilità <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+# type: TP
+#: usermod.8.xml:99(term) useradd.8.xml:138(term)
+msgid ""
+"<option>-d</option>, <option>--home</option><replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: usermod.8.xml:104(para)
+#, fuzzy
+msgid "The user's new login directory."
+msgstr "- una home directory valida"
+
+# type: Plain text
+#: usermod.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "The user's new login directory. If the <option>-m</option> option is "
+#| "given the contents of the current home directory will be moved to the new "
+#| "home directory, which is created if it does not already exist."
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+"La nuova directory di login dell'utente. Se è data l'opzione <option>-m</"
+"option> il contenuto della home directory corrente sarà spostato nella nuova "
+"home directory, che viene creata se non esiste già."
+
+# type: TP
+#: usermod.8.xml:116(term) useradd.8.xml:165(term) useradd.8.xml:518(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: usermod.8.xml:121(para) useradd.8.xml:170(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+"La data in cui l'account dell'utente verrà disabilitato. La data è "
+"specificata nel formato <emphasis remap=\"I\">MM/GG/AA</emphasis>."
+
+# type: TP
+#: usermod.8.xml:128(term) useradd.8.xml:183(term) useradd.8.xml:531(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: usermod.8.xml:133(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password has expired before the account will "
+#| "be disabled."
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+"Il numero di giorni dopo la scadenza di una password prima che l'account "
+"venga disabilitato."
+
+# type: Plain text
+#: usermod.8.xml:137(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password expires until the account is "
+#| "permanently disabled. A value of 0 disables the account as soon as the "
+#| "password has expired, and a value of -1 disables the feature. The default "
+#| "value is -1."
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+"Il numero di giorni dopo la scadenza della password prima che l'account "
+"verrà permanentemente disabilitato. Un valore pari a 0 disabilita l'account "
+"non appena la password è scaduta, ed un valore pari a -1 disabilita questa "
+"caratteristica. Il valore predefinito è -1."
+
+# type: IP
+#: usermod.8.xml:145(term) useradd.8.xml:203(term) useradd.8.xml:547(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option><replaceable>GROUP</replaceable>"
+msgstr ""
+
+# type: Plain text
+#: usermod.8.xml:150(para)
+#, fuzzy
+#| msgid ""
+#| "The group name or number of the user's initial login group. The group "
+#| "name must exist. A group number must refer to an already existing group."
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+"Il nuome o numero del nuovo gruppo di connessione dell'utente.  Il nome del "
+"gruppo deve esistere. Un numero di gruppo deve riferirsi ad un gruppo già "
+"esistente."
+
+#: usermod.8.xml:157(term) useradd.8.xml:231(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option><replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+
+# type: Plain text
+#: usermod.8.xml:162(para)
+#, fuzzy
+#| msgid ""
+#| "A list of supplementary groups which the user is also a member of. Each "
+#| "group is separated from the next by a comma, with no intervening "
+#| "whitespace. The groups are subject to the same restrictions as the group "
+#| "given with the <option>-g</option> option. The default is for the user to "
+#| "belong only to the initial group."
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+"Una lista di gruppi supplementari di cui l'utente è altresì membro.  Ciascun "
+"gruppo è separato dal successivo da una virgola, senza spazi bianchi "
+"intermedi.  I gruppi sono soggetti alle stesse restrizioni del gruppo dato "
+"con l'opzione <option>-g</option>.  Il comportamento predefinito è che "
+"l'utente appartenga solo al gruppo iniziale."
+
+# type: Plain text
+#: usermod.8.xml:169(para)
+#, fuzzy
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+"Una lista di gruppi supplementari di cui l'utente è altresì membro. Ciascun "
+"gruppo è separato dal successivo da una virgola, senza spazi bianchi "
+"intermedi. I gruppi sono soggetti alle stesse restrizioni del gruppo dato "
+"con l'opzione <option>-g</option>.  Se l'utente è attualmente membro di un "
+"gruppo che non è elencato, l'utente verrà rimosso dal gruppo."
+
+# type: IP
+#: usermod.8.xml:178(term)
+msgid ""
+"<option>-l</option>, <option>--login</option><replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: usermod.8.xml:183(para)
+#, fuzzy
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory name should probably be changed "
+"manually to reflect the new login name."
+msgstr ""
+"Il nome dell'utente verrà cambiato da I<login> a I<nome_login>.  Niente "
+"altro viene cambiato.  In particolare, la home directory dell'utente "
+"dovrebbe probabilmente essere modificata in modo da riflettere il nuovo nome "
+"di login."
+
+# type: IP
+#: usermod.8.xml:193(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: usermod.8.xml:197(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+
+#: usermod.8.xml:203(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+
+# type: IP
+#: usermod.8.xml:212(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:216(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+
+# type: IP
+#: usermod.8.xml:220(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+# type: TP
+#: usermod.8.xml:227(term) useradd.8.xml:366(term) groupmod.8.xml:116(term)
+#: groupadd.8.xml:135(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+#: usermod.8.xml:231(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+
+# type: TP
+#: usermod.8.xml:238(term) useradd.8.xml:378(term) groupmod.8.xml:127(term)
+#: groupadd.8.xml:145(term)
+msgid ""
+"<option>-p</option>, <option>--password</option><replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: usermod.8.xml:243(para) groupmod.8.xml:132(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+
+#: usermod.8.xml:248(para) useradd.8.xml:388(para) groupmod.8.xml:137(para)
+#: groupadd.8.xml:155(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+
+#: usermod.8.xml:253(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+
+#: usermod.8.xml:259(para) useradd.8.xml:393(para) groupmod.8.xml:142(para)
+#: groupadd.8.xml:160(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+
+# type: TP
+#: usermod.8.xml:266(term) useradd.8.xml:427(term) useradd.8.xml:568(term)
+#: su.1.xml:157(term) chsh.1.xml:85(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+msgstr ""
+
+# type: Plain text
+#: usermod.8.xml:271(para) chsh.1.xml:89(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+"Il nome della nuova shell di login dell'utente. Lasciando questo campo vuoto "
+"si fa in modo che il sistema selezioni la shell di connessione predefinita."
+
+# type: TP
+#: usermod.8.xml:278(term) useradd.8.xml:442(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:283(para)
+msgid "The new numerical value of the user's ID."
+msgstr ""
+
+# type: Plain text
+#: usermod.8.xml:286(para)
+#, fuzzy
+#| msgid ""
+#| "The numerical value of the user's ID. This value must be unique, unless "
+#| "the <option>-o</option> option is used. The value must be non-negative. "
+#| "The default is to use the smallest ID value greater than 999 and greater "
+#| "than every other user. Values between 0 and 999 are typically reserved "
+#| "for system accounts."
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative. Values between 0 and 999 are typically "
+"reserved for system accounts."
+msgstr ""
+"Il valore numerico dell'identificatore (ID) del gruppo.  Questo valore deve "
+"essere univoco, a meno che non venga usata l'opzione <option>-o</option>.  "
+"Il valore deve essere non-negativo.  La scelta predefinita è quella di usare "
+"il minimo valore di ID superiore a 999 e superiore a qualunque altro "
+"gruppo.  Valori tra 0 e 999 sono tipicamente riservati per account di "
+"sistema."
+
+# type: Plain text
+#: usermod.8.xml:292(para)
+#, fuzzy
+#| msgid ""
+#| "The numerical value of the user's ID. This value must be unique, unless "
+#| "the <option>-o</option> option is used. The value must be non-negative. "
+#| "Values between 0 and 999 are typically reserved for system accounts. Any "
+#| "files which the user owns and which are located in the directory tree "
+#| "rooted at the user's home directory will have the file user ID changed "
+#| "automatically. Files outside of the user's home directory must be altered "
+#| "manually."
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+"Il valore numerico dell'ID dell'utente.  Questo valore deve essere univoco, "
+"a meno che non venga usata l'opzione <option>-o</option>. Questo valore deve "
+"essere non-negativo. Valori tra 0 e 999 sono tipicamente riservati ad "
+"account di sistema. Tutti i file che l'utente possiede e che sono "
+"posiszionati nell'albero di directory avente come radice la home directory "
+"dell'utente avranno l'ID utente del file cambiato automaticamente. I file "
+"fuori della home directory dell'utente devono essere modificati manualmente."
+
+#: usermod.8.xml:297(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+
+# type: IP
+#: usermod.8.xml:304(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+#: usermod.8.xml:308(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+
+#: usermod.8.xml:313(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+
+# type: IP
+#: usermod.8.xml:324(term) useradd.8.xml:474(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#| "replaceable>"
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option><replaceable>SEUSER</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</replaceable>"
+
+# type: Plain text
+#: usermod.8.xml:329(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's new login shell. Setting this field to blank "
+#| "causes the system to select the default login shell."
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"the blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Il nome della nuova shell di login dell'utente. Lasciando questo campo vuoto "
+"si fa in modo che il sistema selezioni la shell di connessione predefinita."
+
+# type: SH
+#: usermod.8.xml:340(title) userdel.8.xml:221(title) useradd.8.xml:597(title)
+#: su.1.xml:302(title) shadow.3.xml:193(title) passwd.1.xml:338(title)
+#: newusers.8.xml:312(title) login.1.xml:238(title) lastlog.8.xml:159(title)
+#: groupdel.8.xml:65(title) groupadd.8.xml:224(title) gpasswd.1.xml:206(title)
+#: faillog.8.xml:191(title) chpasswd.8.xml:182(title)
+#: chgpasswd.8.xml:157(title)
+msgid "CAVEATS"
+msgstr "AVVISI/CAVEAT"
+
+#: usermod.8.xml:341(para)
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux, but only check if the user "
+"is logged in according to utmp on other architectures."
+msgstr ""
+
+#: usermod.8.xml:349(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+
+#: usermod.8.xml:353(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+
+#: usermod.8.xml:359(title) userdel.8.xml:125(title) useradd.8.xml:621(title)
+#: su.1.xml:310(title) sg.1.xml:76(title) pwconv.8.xml:146(title)
+#: pwck.8.xml:213(title) passwd.1.xml:356(title) newusers.8.xml:324(title)
+#: newgrp.1.xml:87(title) login.1.xml:272(title) grpck.8.xml:173(title)
+#: groupmod.8.xml:152(title) groupmems.8.xml:156(title)
+#: groupdel.8.xml:77(title) groupadd.8.xml:186(title) gpasswd.1.xml:218(title)
+#: chsh.1.xml:120(title) chpasswd.8.xml:194(title) chgpasswd.8.xml:169(title)
+#: chfn.1.xml:99(title)
+msgid "CONFIGURATION"
+msgstr ""
+
+#: usermod.8.xml:360(para) userdel.8.xml:126(para) useradd.8.xml:622(para)
+#: su.1.xml:311(para) sg.1.xml:77(para) pwck.8.xml:214(para)
+#: passwd.1.xml:357(para) newusers.8.xml:325(para) newgrp.1.xml:88(para)
+#: login.1.xml:273(para) grpck.8.xml:174(para) groupmod.8.xml:153(para)
+#: groupmems.8.xml:157(para) groupdel.8.xml:78(para) groupadd.8.xml:187(para)
+#: gpasswd.1.xml:219(para) chsh.1.xml:121(para) chpasswd.8.xml:195(para)
+#: chgpasswd.8.xml:170(para) chfn.1.xml:100(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+
+# type: IP
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+
+# type: IP
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+#, fuzzy
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+
+#. Note: on HP, split groups have the same ID, but different
+#.                names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr ""
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+
+# type: Plain text
+#: usermod.8.xml:403(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: userdel.8.xml:41(refentrytitle) userdel.8.xml:46(refname)
+#: userdel.8.xml:51(command) login.defs.5.xml:434(term)
+msgid "userdel"
+msgstr "userdel"
+
+# type: Plain text
+#: userdel.8.xml:47(refpurpose)
+msgid "delete a user account and related files"
+msgstr "Rimuove l'account di un utente ed i file relativi"
+
+# type: Plain text
+#: userdel.8.xml:61(para)
+#, fuzzy
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"Il comando <command>userdel</command> modifica i file di account del "
+"sistema, rimuovendo tutte le voci che si riferiscono a <emphasis remap=\"I"
+"\">login_name</emphasis>. L'utente nominato deve esistere."
+
+# type: TP
+#: userdel.8.xml:70(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr "Il comando <command>userdel</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: userdel.8.xml:75(term) groupadd.8.xml:80(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option>"
+
+#: userdel.8.xml:79(para)
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+
+#: userdel.8.xml:92(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+
+# type: IP
+#: userdel.8.xml:105(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+# type: Plain text
+#: userdel.8.xml:109(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+"I file nella home directory dell'utente verranno rimossi insieme alla home "
+"directory stessa. I file collocati in altri file system dovranno essere "
+"ricercati e rimossi manualmente."
+
+#: userdel.8.xml:115(para)
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr ""
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr ""
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+"      "
+msgstr ""
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+
+# type: IP
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+
+#: userdel.8.xml:149(filename) useradd.8.xml:683(filename)
+#: su.1.xml:353(filename) pwconv.8.xml:171(filename)
+#: passwd.1.xml:389(filename) newusers.8.xml:384(filename)
+#: login.access.5.xml:99(filename) login.1.xml:367(filename)
+#: groupadd.8.xml:215(filename) chsh.1.xml:148(filename)
+#: chpasswd.8.xml:223(filename) chgpasswd.8.xml:199(filename)
+#: chfn.1.xml:116(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+#: userdel.8.xml:151(para) useradd.8.xml:685(para) su.1.xml:355(para)
+#: pwconv.8.xml:173(para) passwd.1.xml:391(para) newusers.8.xml:386(para)
+#: login.access.5.xml:101(para) login.1.xml:369(para) groupadd.8.xml:217(para)
+#: chsh.1.xml:150(para) chpasswd.8.xml:225(para) chgpasswd.8.xml:201(para)
+#: chfn.1.xml:118(para)
+msgid "Shadow password suite configuration."
+msgstr ""
+
+# type: SH
+#: userdel.8.xml:170(title) useradd.8.xml:692(title) pwck.8.xml:251(title)
+#: passwd.1.xml:404(title) grpck.8.xml:209(title) groupmod.8.xml:182(title)
+#: groupdel.8.xml:107(title) groupadd.8.xml:246(title) chage.1.xml:228(title)
+msgid "EXIT VALUES"
+msgstr "VALORI RESTITUITI"
+
+# type: IP
+#: userdel.8.xml:175(replaceable) useradd.8.xml:697(replaceable)
+#: pwck.8.xml:256(replaceable) passwd.1.xml:409(replaceable)
+#: grpck.8.xml:214(replaceable) groupmod.8.xml:187(replaceable)
+#: groupdel.8.xml:112(replaceable) groupadd.8.xml:251(replaceable)
+#: chage.1.xml:233(replaceable)
+msgid "0"
+msgstr "0"
+
+# type: Plain text
+#: userdel.8.xml:177(para) useradd.8.xml:699(para) pwck.8.xml:258(para)
+#: passwd.1.xml:411(para) grpck.8.xml:216(para) groupmod.8.xml:189(para)
+#: groupdel.8.xml:114(para) groupadd.8.xml:253(para) chage.1.xml:235(para)
+msgid "success"
+msgstr "successo"
+
+# type: IP
+#: userdel.8.xml:181(replaceable) useradd.8.xml:703(replaceable)
+#: su.1.xml:55(manvolnum) sg.1.xml:39(manvolnum) pwck.8.xml:262(replaceable)
+#: passwd.1.xml:45(manvolnum) passwd.1.xml:415(replaceable)
+#: newgrp.1.xml:39(manvolnum) login.1.xml:71(manvolnum)
+#: grpck.8.xml:220(replaceable) groups.1.xml:35(manvolnum)
+#: gpasswd.1.xml:43(manvolnum) expiry.1.xml:42(manvolnum)
+#: chsh.1.xml:41(manvolnum) chfn.1.xml:42(manvolnum) chage.1.xml:35(manvolnum)
+#: chage.1.xml:239(replaceable)
+msgid "1"
+msgstr "1"
+
+# type: Plain text
+#: userdel.8.xml:183(para) useradd.8.xml:705(para)
+#, fuzzy
+msgid "can't update password file"
+msgstr "impossibile aggiornare i file delle password"
+
+# type: IP
+#: userdel.8.xml:187(replaceable) useradd.8.xml:709(replaceable)
+#: pwck.8.xml:268(replaceable) passwd.1.xml:421(replaceable)
+#: grpck.8.xml:226(replaceable) groupmod.8.xml:193(replaceable)
+#: groupdel.8.xml:118(replaceable) groupadd.8.xml:257(replaceable)
+#: chage.1.xml:245(replaceable)
+msgid "2"
+msgstr "2"
+
+# type: Plain text
+#: userdel.8.xml:189(para) useradd.8.xml:711(para) pwck.8.xml:264(para)
+#: grpck.8.xml:222(para) groupmod.8.xml:195(para) groupdel.8.xml:120(para)
+#: groupadd.8.xml:259(para) chage.1.xml:247(para)
+msgid "invalid command syntax"
+msgstr "sintassi del comando errata"
+
+#: userdel.8.xml:193(replaceable) useradd.8.xml:727(replaceable)
+#: pwck.8.xml:292(replaceable) passwd.1.xml:445(replaceable)
+#: groupmod.8.xml:211(replaceable) groupdel.8.xml:124(replaceable)
+msgid "6"
+msgstr "6"
+
+# type: Plain text
+#: userdel.8.xml:195(para)
+msgid "specified user doesn't exist"
+msgstr "il gruppo specificato non esiste"
+
+#: userdel.8.xml:201(para)
+msgid "user currently logged in"
+msgstr ""
+
+# type: IP
+#: userdel.8.xml:205(replaceable) useradd.8.xml:739(replaceable)
+#: groupmod.8.xml:223(replaceable) groupdel.8.xml:136(replaceable)
+#: groupadd.8.xml:281(replaceable)
+msgid "10"
+msgstr "10"
+
+# type: Plain text
+#: userdel.8.xml:207(para) useradd.8.xml:741(para) groupmod.8.xml:225(para)
+#: groupdel.8.xml:138(para) groupadd.8.xml:283(para)
+msgid "can't update group file"
+msgstr "non è possibile aggiornare il file group"
+
+# type: IP
+#: userdel.8.xml:211(replaceable) useradd.8.xml:745(replaceable)
+msgid "12"
+msgstr "12"
+
+# type: Plain text
+#: userdel.8.xml:213(para)
+msgid "can't remove home directory"
+msgstr ""
+
+# type: TP
+#: userdel.8.xml:171(para)
+#, fuzzy
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> esce con i seguenti valori:\n"
+"#-#-#-#-#  grpck.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> restituisce i seguenti valori:"
+
+#: userdel.8.xml:222(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+
+# type: Plain text
+#: userdel.8.xml:229(para)
+#, fuzzy
+#| msgid ""
+#| "You must manually check all file systems to insure that no files remain "
+#| "with the named group as the file group ID."
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+"Occorre controllare manualmente tutti i filesystem per assicurarsi che non "
+"rimanga alcun file avente come ID di gruppo il gruppo specificato."
+
+# type: Plain text
+#: userdel.8.xml:233(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+"Non è possibile rimuovere nessun attributo NIS su un client NIS.  Questo "
+"deve essere fatto sul server NIS."
+
+#: userdel.8.xml:236(para)
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+
+# type: Plain text
+#: userdel.8.xml:249(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: useradd.8.xml:49(refentrytitle) useradd.8.xml:54(refname)
+#: useradd.8.xml:59(command) useradd.8.xml:66(command)
+#: useradd.8.xml:70(command) login.defs.5.xml:421(term)
+msgid "useradd"
+msgstr "useradd"
+
+# type: Plain text
+#: useradd.8.xml:55(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+"crea un nuovo utente o aggiorna le informazioni predefinite per i nuovi "
+"utenti"
+
+#: useradd.8.xml:67(arg) useradd.8.xml:71(arg)
+msgid "-D"
+msgstr "-D"
+
+# type: Plain text
+#: useradd.8.xml:80(para)
+#, fuzzy
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+"Quando viene invocato senza l'opzione <option>-D</option>, il comando "
+"<command>useradd</command> crea un nuovo account di utente usando i valori "
+"specificati sulla linea di comando ed i valori predefiniti dal sistema.  Il "
+"nuovo account di utente verrà aggiunto ai file di sistema che lo "
+"necessitano, verrà creata la home directory, e lì verranno copiati i file "
+"iniziali, a seconda delle opzioni sulla linea di comando.  Le opzioni che si "
+"applicano al comando <command>useradd</command> sono"
+
+#: useradd.8.xml:89(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+
+# type: Plain text
+#: useradd.8.xml:98(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr "Il comando <command>useradd</command> accetta le seguenti opzioni:"
+
+# type: TP
+#: useradd.8.xml:102(term) useradd.8.xml:499(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option><replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+
+#: useradd.8.xml:107(para)
+msgid ""
+"The default base directory for the system if <option>-d</"
+"option><replaceable>HOME_DIR</replaceable> is not specified. "
+"<replaceable>BASE_DIR</replaceable> is concatenated with the account name to "
+"define the home directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+
+#: useradd.8.xml:115(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+
+#: useradd.8.xml:130(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+
+# type: Plain text
+#: useradd.8.xml:143(para)
+#, fuzzy
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+"Il nuovo utente verrà creato usando I<home_dir> come valore per la directory "
+"di login dell'utente.  Il comportamento predefinito è di appendere il nome "
+"I<login> a I<home_predefinita> ed usare quella come nome di directory di "
+"login."
+
+# type: IP
+#: useradd.8.xml:155(term)
+#, fuzzy
+#| msgid "<option>-d</option>, <option>--delete</option>"
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+# type: SS
+#: useradd.8.xml:159(para)
+#, fuzzy
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr "Cambiare i valori predefiniti"
+
+#: useradd.8.xml:174(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+
+# type: Plain text
+#: useradd.8.xml:188(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password expires until the account is "
+#| "permanently disabled. A value of 0 disables the account as soon as the "
+#| "password has expired, and a value of -1 disables the feature. The default "
+#| "value is -1."
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+"Il numero di giorni dopo la scadenza della password prima che l'account "
+"verrà permanentemente disabilitato. Un valore pari a 0 disabilita l'account "
+"non appena la password è scaduta, ed un valore pari a -1 disabilita questa "
+"caratteristica. Il valore predefinito è -1."
+
+# type: Plain text
+#: useradd.8.xml:194(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's login shell. The default is to leave this field "
+#| "blank, which causes the system to select the default login shell."
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+"Il nome della shell di login dell'utente. Il comportamento predefinito è di "
+"lasciare vuoto questo campo, che fa sì che il sistema selezioni la shell di "
+"connessione predefinita."
+
+# type: Plain text
+#: useradd.8.xml:208(para)
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+"Il nuome o numero del nuovo gruppo di connessione dell'utente.  Il nome del "
+"gruppo deve esistere. Un numero di gruppo deve riferirsi ad un gruppo già "
+"esistente."
+
+#: useradd.8.xml:213(para)
+msgid ""
+"If not specified, the bahavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+
+# type: Plain text
+#: useradd.8.xml:236(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+"Una lista di gruppi supplementari di cui l'utente è altresì membro.  Ciascun "
+"gruppo è separato dal successivo da una virgola, senza spazi bianchi "
+"intermedi.  I gruppi sono soggetti alle stesse restrizioni del gruppo dato "
+"con l'opzione <option>-g</option>.  Il comportamento predefinito è che "
+"l'utente appartenga solo al gruppo iniziale."
+
+# type: IP
+#: useradd.8.xml:253(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#| "replaceable>"
+msgid ""
+"<option>-k</option>, <option>--skel</option><replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</replaceable>"
+
+#: useradd.8.xml:258(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:263(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:267(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+
+#: useradd.8.xml:276(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-K</option>, <option>--key</option><replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:281(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K </option><replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-"
+"1</replaceable> can be used when creating system account to turn off "
+"password ageing, even though system account has no password at all. Multiple "
+"<option>-K</option> options can be specified, e.g.: <option>-K </"
+"option><replaceable>UID_MIN</replaceable>=<replaceable>100</"
+"replaceable><option>-K </option><replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:297(para)
+msgid ""
+"Note: <option>-K </option><replaceable>UID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:305(term)
+#, fuzzy
+#| msgid "<option>-l</option>, <option>--list</option>"
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: useradd.8.xml:307(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr ""
+
+#: useradd.8.xml:310(para)
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"resetted to avoid reusing the entry from a previously deleted user."
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:318(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:322(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+
+#: useradd.8.xml:328(para)
+msgid "By default, no home directories are created."
+msgstr ""
+
+#: useradd.8.xml:335(option)
+#, fuzzy
+#| msgid "-"
+msgid "-M"
+msgstr "-"
+
+#: useradd.8.xml:338(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+
+# type: TP
+#: useradd.8.xml:347(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:357(para) useradd.8.xml:465(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: useradd.8.xml:370(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:371(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-o</option> option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+# type: Plain text
+#: useradd.8.xml:383(para) groupadd.8.xml:150(para)
+#, fuzzy
+#| msgid ""
+#| "Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#| "manvolnum></citerefentry> for details on how this string is interpreted."
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"Fare riferimento a <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> per dettagli sul modo "
+"in cui questa stringa viene interpretata."
+
+# type: IP
+#: useradd.8.xml:400(term) newusers.8.xml:263(term) groupadd.8.xml:167(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: useradd.8.xml:404(para) newusers.8.xml:267(para)
+msgid "Create a system account."
+msgstr ""
+
+#: useradd.8.xml:407(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are choosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: useradd.8.xml:416(para)
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such an user, regardless of the default setting in <filename>/etc/login."
+"defs</filename> (<option>CREATE_HOME</option>). You have to specify the "
+"<option>-m</option> options if you want a home directory for a system "
+"account to be created."
+msgstr ""
+
+# type: Plain text
+#: useradd.8.xml:432(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's login shell. The default is to leave this field "
+#| "blank, which causes the system to select the default login shell."
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+"Il nome della shell di login dell'utente. Il comportamento predefinito è di "
+"lasciare vuoto questo campo, che fa sì che il sistema selezioni la shell di "
+"connessione predefinita."
+
+# type: Plain text
+#: useradd.8.xml:447(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than 999 and greater than "
+"every other user. Values between 0 and 999 are typically reserved for system "
+"accounts."
+msgstr ""
+"Il valore numerico dell'identificatore (ID) del gruppo.  Questo valore deve "
+"essere univoco, a meno che non venga usata l'opzione <option>-o</option>.  "
+"Il valore deve essere non-negativo.  La scelta predefinita è quella di usare "
+"il minimo valore di ID superiore a 999 e superiore a qualunque altro "
+"gruppo.  Valori tra 0 e 999 sono tipicamente riservati per account di "
+"sistema."
+
+# type: TP
+#: useradd.8.xml:457(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:461(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+
+# type: Plain text
+#: useradd.8.xml:479(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's new login shell. Setting this field to blank "
+#| "causes the system to select the default login shell."
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Il nome della nuova shell di login dell'utente. Lasciando questo campo vuoto "
+"si fa in modo che il sistema selezioni la shell di connessione predefinita."
+
+# type: SS
+#: useradd.8.xml:489(title)
+msgid "Changing the default values"
+msgstr "Cambiare i valori predefiniti"
+
+# type: Plain text
+#: useradd.8.xml:490(para)
+#, fuzzy
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+"Quando invocato con l'opzione <option>-D</option>, <command>useradd</"
+"command> o mostrerà i valori predefiniti correnti, oppure aggiornerà i "
+"valori predefiniti dalla linea di comando. Le opzioni valide sono"
+
+# type: Plain text
+#: useradd.8.xml:504(para)
+#, fuzzy
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+"Il prefisso del percorso per la home directory del nuovo utente.  Il nome "
+"dell'utente verrà aggiunto alla fine di I<home_predefinita> per creare il "
+"nome della nuova directory se non viene usata l'opzione <option>-d</"
+"option>I< quando si crea un nuovo account.>"
+
+#: useradd.8.xml:511(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+# type: Plain text
+#: useradd.8.xml:523(para)
+msgid "The date on which the user account is disabled."
+msgstr "La data in cui l'account dell'utente verrà disabilitato."
+
+#: useradd.8.xml:524(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+# type: Plain text
+#: useradd.8.xml:536(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+"Il numero di giorni dopo la scadenza di una password prima che l'account "
+"venga disabilitato."
+
+#: useradd.8.xml:540(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:552(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>. The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+
+#: useradd.8.xml:561(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:573(para)
+msgid "The name of a new user's login shell."
+msgstr ""
+
+#: useradd.8.xml:576(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+# type: SH
+#: useradd.8.xml:588(title)
+msgid "NOTES"
+msgstr "NOTE"
+
+# type: Plain text
+#: useradd.8.xml:589(para)
+#, fuzzy
+#| msgid ""
+#| "The system administrator is responsible for placing the default user "
+#| "files in the <filename>/etc/skel/</filename> directory."
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+"L'amministratore di sistema è responsabile del posizionamento dei file "
+"predefiniti degli utenti nella directory <filename>/etc/skel/</filename>."
+
+# type: Plain text
+#: useradd.8.xml:598(para)
+#, fuzzy
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Non è possibile aggiungere un utente ad un gruppo NIS. Questo deve essere "
+"fatto sul server NIS."
+
+#: useradd.8.xml:603(para)
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+
+#: useradd.8.xml:609(para)
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+
+#: useradd.8.xml:615(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr ""
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overriden on the "
+"command line."
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+#, fuzzy
+msgid "<option>GID_MAX</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+# type: IP
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+#, fuzzy
+msgid "<option>GID_MIN</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+# type: IP
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+# type: IP
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>UID_MAX</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+# type: IP
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>UID_MIN</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+#, fuzzy
+msgid "<option>UMASK</option> (number)"
+msgstr "<option>-M</option> I<gg_max>"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create"
+msgstr ""
+
+#: useradd.8.xml:42(para) newusers.8.xml:42(para) login.defs.5.xml:42(para)
+#: login.1.xml:42(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overriden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+# type: Plain text
+#: useradd.8.xml:671(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+#: useradd.8.xml:673(para)
+msgid "Default values for account creation."
+msgstr ""
+
+#: useradd.8.xml:677(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+# type: Plain text
+#: useradd.8.xml:679(para)
+msgid "Directory containing default files."
+msgstr "Directory contenente i file predefiniti."
+
+# type: IP
+#: useradd.8.xml:715(replaceable) shadow.3.xml:35(manvolnum)
+#: pwck.8.xml:274(replaceable) passwd.1.xml:427(replaceable)
+#: grpck.8.xml:232(replaceable) groupmod.8.xml:199(replaceable)
+#: groupadd.8.xml:263(replaceable)
+msgid "3"
+msgstr "3"
+
+#: useradd.8.xml:717(para) passwd.1.xml:447(para) groupmod.8.xml:201(para)
+#: groupadd.8.xml:265(para)
+msgid "invalid argument to option"
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:721(replaceable) pwck.8.xml:280(replaceable)
+#: passwd.1.xml:433(replaceable) grpck.8.xml:238(replaceable)
+#: groupmod.8.xml:205(replaceable) groupadd.8.xml:269(replaceable)
+msgid "4"
+msgstr "4"
+
+#: useradd.8.xml:723(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr ""
+
+# type: Plain text
+#: useradd.8.xml:729(para) groupmod.8.xml:207(para) groupmod.8.xml:213(para)
+#: groupdel.8.xml:126(para)
+msgid "specified group doesn't exist"
+msgstr "il gruppo specificato non esiste"
+
+#: useradd.8.xml:733(replaceable) groupmod.8.xml:217(replaceable)
+#: groupadd.8.xml:275(replaceable)
+msgid "9"
+msgstr "9"
+
+#: useradd.8.xml:735(para)
+msgid "username already in use"
+msgstr ""
+
+# type: Plain text
+#: useradd.8.xml:747(para)
+msgid "can't create home directory"
+msgstr ""
+
+# type: IP
+#: useradd.8.xml:751(replaceable)
+msgid "13"
+msgstr "13"
+
+#: useradd.8.xml:753(para)
+msgid "can't create mail spool"
+msgstr ""
+
+# type: TP
+#: useradd.8.xml:693(para)
+#, fuzzy
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> esce con i seguenti valori:\n"
+"#-#-#-#-#  grpck.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> restituisce i seguenti valori:"
+
+# type: Plain text
+#: useradd.8.xml:762(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: suauth.5.xml:34(refentrytitle) suauth.5.xml:39(refname)
+msgid "suauth"
+msgstr "suauth"
+
+# type: IP
+#: suauth.5.xml:35(manvolnum) shadow.5.xml:35(manvolnum)
+#: pwck.8.xml:286(replaceable) porttime.5.xml:35(manvolnum)
+#: passwd.5.xml:35(manvolnum) passwd.1.xml:439(replaceable)
+#: login.defs.5.xml:98(manvolnum) login.access.5.xml:36(manvolnum)
+#: limits.5.xml:36(manvolnum) gshadow.5.xml:34(manvolnum)
+#: grpck.8.xml:244(replaceable) faillog.5.xml:35(manvolnum)
+msgid "5"
+msgstr "5"
+
+#: suauth.5.xml:36(refmiscinfo) shadow.5.xml:36(refmiscinfo)
+#: porttime.5.xml:36(refmiscinfo) passwd.5.xml:36(refmiscinfo)
+#: login.defs.5.xml:99(refmiscinfo) login.access.5.xml:37(refmiscinfo)
+#: limits.5.xml:37(refmiscinfo) gshadow.5.xml:35(refmiscinfo)
+#: faillog.5.xml:36(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr ""
+
+#: suauth.5.xml:40(refpurpose)
+msgid "detailed su control file"
+msgstr ""
+
+#: suauth.5.xml:45(command) suauth.5.xml:171(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+#: suauth.5.xml:51(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+
+#. .RS
+#: suauth.5.xml:58(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      1) the user su is targetting\n"
+"    "
+msgstr ""
+
+#. .fi
+#: suauth.5.xml:62(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+
+#: suauth.5.xml:67(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+
+#: suauth.5.xml:72(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      to-id:from-id:ACTION\n"
+"    "
+msgstr ""
+
+#: suauth.5.xml:76(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\""
+msgstr ""
+
+#: suauth.5.xml:82(para)
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is neccessary."
+msgstr ""
+
+#: suauth.5.xml:93(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr ""
+
+#: suauth.5.xml:99(emphasis)
+msgid "DENY"
+msgstr ""
+
+#: suauth.5.xml:102(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr ""
+
+# type: SH
+#: suauth.5.xml:109(emphasis)
+msgid "NOPASS"
+msgstr ""
+
+#: suauth.5.xml:112(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+
+# type: TH
+#: suauth.5.xml:120(emphasis)
+msgid "OWNPASS"
+msgstr ""
+
+#: suauth.5.xml:123(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+
+#: suauth.5.xml:131(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+
+# type: SH
+#: suauth.5.xml:141(title)
+#, fuzzy
+msgid "EXAMPLE"
+msgstr "ESEMPI"
+
+#: suauth.5.xml:142(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      # sample /etc/suauth file\n"
+"      #\n"
+"      # A couple of privileged usernames may\n"
+"      # su to root with their own password.\n"
+"      #\n"
+"      root:chris,birddog:OWNPASS\n"
+"      #\n"
+"      # Anyone else may not su to root unless in\n"
+"      # group wheel. This is how BSD does things.\n"
+"      #\n"
+"      root:ALL EXCEPT GROUP wheel:DENY\n"
+"      #\n"
+"      # Perhaps terry and birddog are accounts\n"
+"      # owned by the same person.\n"
+"      # Access can be arranged between them\n"
+"      # with no password.\n"
+"      #\n"
+"      terry:birddog:NOPASS\n"
+"      birddog:terry:NOPASS\n"
+"      #\n"
+"    "
+msgstr ""
+
+# type: SH
+#: suauth.5.xml:178(title) pwconv.8.xml:135(title) login.defs.5.xml:455(title)
+msgid "BUGS"
+msgstr "PROBLEMI"
+
+#: suauth.5.xml:179(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+
+# type: SH
+#: suauth.5.xml:188(title) shadow.3.xml:183(title)
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSTICA"
+
+# type: Plain text
+#: suauth.5.xml:189(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+
+# type: Plain text
+#: suauth.5.xml:198(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: su.1.xml:54(refentrytitle) su.1.xml:59(refname) su.1.xml:64(command)
+#: login.defs.5.xml:395(term)
+msgid "su"
+msgstr "su"
+
+#: su.1.xml:56(refmiscinfo) sg.1.xml:40(refmiscinfo)
+#: passwd.1.xml:46(refmiscinfo) newgrp.1.xml:40(refmiscinfo)
+#: login.1.xml:72(refmiscinfo) groups.1.xml:36(refmiscinfo)
+#: gpasswd.1.xml:44(refmiscinfo) expiry.1.xml:43(refmiscinfo)
+#: chsh.1.xml:42(refmiscinfo) chfn.1.xml:43(refmiscinfo)
+#: chage.1.xml:36(refmiscinfo)
+msgid "User Commands"
+msgstr ""
+
+# type: Plain text
+#: su.1.xml:60(refpurpose)
+#, fuzzy
+msgid "change user ID or become superuser"
+msgstr "cambia ID utente o diventa amministratore"
+
+#: su.1.xml:70(replaceable) login.1.xml:85(replaceable)
+#: login.1.xml:93(replaceable)
+msgid "username"
+msgstr ""
+
+# type: Plain text
+#: su.1.xml:78(para)
+#, fuzzy
+msgid ""
+"The <command>su</command> command is used to become another user during a "
+"login session. Invoked without a <option>username</option>, <command>su</"
+"command> defaults to becoming the superuser. The optional argument <option>-"
+"</option> may be used to provide an environment similar to what the user "
+"would expect had the user logged in directly."
+msgstr ""
+"<command>su</command> permette di diventare un altro utente durante una "
+"sessione di login. Se nessun <option>nome</option> utente viene specificato, "
+"<command>su</command> acquisice i privilegi di amministratore. L'opzione "
+"<option>-</option> può essere usata per fornire un ambiente simile a quello "
+"che l'utente troverebbe se effettuasse il login direttamente."
+
+# type: Plain text
+#: su.1.xml:87(para)
+msgid ""
+"Additional arguments may be provided after the username, in which case they "
+"are supplied to the user's login shell. In particular, an argument of "
+"<option>-c</option> will cause the next argument to be treated as a command "
+"by most command interpreters. The command will be executed by the shell "
+"specified in <filename>/etc/passwd</filename> for the target user."
+msgstr ""
+"Dopo il nome utente, è possibile specificare argomenti aggiuntivi da passare "
+"alla shell di login dell'utente. In particolare, molti interpreti di comando "
+"adottano la convenzione per cui l'opzione <option>-c</option> seguita da un "
+"argomento fa sì che quest'ultimo sia considerato un comando.Il comando viene "
+"eseguito dalla shell specificata in <filename>/etc/passwd</filename> per "
+"l'utente di destinazione."
+
+#: su.1.xml:96(para)
+msgid ""
+"You can use the <option>--</option> argument to separate <command>su</"
+"command> options from the arguments supplied to the shell."
+msgstr ""
+
+# type: Plain text
+#: su.1.xml:101(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+"All'utente viene quindi chiesta la password, se necessario. Una password "
+"errata viene segnalata da un messaggio d'errore. Viene effettuato il log di "
+"tutti i tentativi, siano essi riusciti o meno, al fine di rilevare ogni "
+"abuso del sistema."
+
+# type: Plain text
+#: su.1.xml:106(para)
+#, fuzzy
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"Le variabili d'ambiente in uso vengono passate alla nuova shell, eccetto il "
+"valore di <envar>$PATH</envar> che viene impostato a <filename>/bin:/usr/"
+"bin</filename> per gli utenti qualsiasi e a <filename>/sbin:/bin:/usr/sbin:/"
+"usr/bin</filename> per l'amministratore. Questa impostazione è controllata "
+"dalle definizioni <emphasis>ENV_PATH</emphasis> ed <emphasis>ENV_SUPATH</"
+"emphasis> in <filename>/etc/login.defs</filename>."
+
+# type: Plain text
+#: su.1.xml:115(para) login.1.xml:166(para)
+#, fuzzy
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Un sottosistema di login è indicato dalla presenza del carattere \"*\" all"
+"\\'inizio della shell di login. La directory home impostata sarà utilizzata "
+"come root di un nuovo filesystem al quale l\\'utente accede.\n"
+"#-#-#-#-#  login.1.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Un accesso a un sottosistema è indicato dalla presenza del carattere \"*\" "
+"all'inizio della shell di login. La home directory impostata diventa la root "
+"di un nuovo file system al quale l'utente accede."
+
+# type: TP
+#: su.1.xml:124(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr "Il comando <command>su</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: su.1.xml:128(term)
+#, fuzzy
+msgid ""
+"<option>-c</option>, <option>--command</option><replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--command</option><replaceable>SHELL</"
+"replaceable>"
+
+#: su.1.xml:133(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr ""
+
+# type: TP
+#: su.1.xml:140(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: su.1.xml:144(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+
+#: su.1.xml:148(para)
+msgid ""
+"When <option>-</option> is used, it must be specified as the last "
+"<command>su</command> option. The other forms (<option>-l</option> and "
+"<option>--login</option>) do not have this restriction."
+msgstr ""
+
+#: su.1.xml:162(para)
+msgid "The shell that will be invoked."
+msgstr ""
+
+#: su.1.xml:170(para)
+msgid "The shell specified with --shell."
+msgstr ""
+
+#: su.1.xml:173(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+
+#: su.1.xml:180(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+
+#: su.1.xml:186(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+
+#: su.1.xml:163(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:191(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shell</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+
+# type: IP
+#: su.1.xml:202(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:211(envar)
+msgid "$PATH"
+msgstr ""
+
+#: su.1.xml:213(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+
+#: su.1.xml:222(envar)
+msgid "$IFS"
+msgstr ""
+
+#: su.1.xml:224(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+
+# type: Plain text
+#: su.1.xml:207(para)
+#, fuzzy
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr "Non modifica l'ambiente."
+
+#: su.1.xml:233(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+
+#: su.1.xml:242(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+
+#: su.1.xml:251(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+
+#: su.1.xml:258(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+
+#: su.1.xml:268(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+
+#: su.1.xml:281(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+
+#: su.1.xml:289(para)
+msgid "Other environment might be set by PAM modules."
+msgstr ""
+
+#: su.1.xml:237(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr ""
+
+# type: Plain text
+#: su.1.xml:303(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Questa versione di <command>su</command> ha molte opzioni di compilazione; "
+"solo una parte di esse potrebbe essere in uso su un determinato sistema."
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr ""
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"in no."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+
+# type: IP
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value can be preceded by <replaceable>PATH=</"
+"replaceable>, or a colon separated list of paths (for example <replaceable>/"
+"bin:/usr/bin</replaceable>). The default value is <replaceable>PATH=/bin:/"
+"usr/bin</replaceable>."
+msgstr ""
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value can be preceded by <replaceable>PATH=</"
+"replaceable>, or a colon separated list of paths (for example <replaceable>/"
+"sbin:/bin:/usr/sbin:/usr/bin</replaceable>). The default value is "
+"<replaceable>PATH=/bin:/usr/bin</replaceable>."
+msgstr ""
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will no be translated."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable setting of ulimit, umask, and niceness from passwd gecos field."
+msgstr ""
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SU_NAME</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+
+# type: IP
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+
+# type: IP
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+
+# type: Plain text
+#: su.1.xml:363(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: sg.1.xml:38(refentrytitle) sg.1.xml:43(refname) sg.1.xml:49(command)
+msgid "sg"
+msgstr "sg"
+
+# type: Plain text
+#: sg.1.xml:44(refpurpose)
+#, fuzzy
+msgid "execute command as different group ID"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"sg - esegue un comando con un ID di gruppo diverso\n"
+"#-#-#-#-#  newgrp.1.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"sg - esegue un comando con un diverso ID di gruppo"
+
+#: sg.1.xml:50(arg) newgrp.1.xml:49(arg)
+msgid "-"
+msgstr "-"
+
+#: sg.1.xml:52(arg) expiry.1.xml:53(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:51(arg)
+msgid "group <placeholder-1/> command"
+msgstr ""
+
+# type: Plain text
+#: sg.1.xml:60(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+"Il comando <command>sg</command> funziona in maniera analoga a "
+"<command>newgrp</command>, ma accetta un comando che viene eseguito con la "
+"shell B</bin/sh>. La maggior parte delle shell che permettono l'uso di "
+"<command>sg</command> richiede che i comandi composti da più parole siano "
+"inclusi tra apici. Un'altra differenza tra <command>newgrp</command> e "
+"<command>sg</command> è che alcune shell trattano <command>newgrp</command> "
+"in maniera speciale, sostituendo se stesse con la shell creata da "
+"<command>newgrp</command>. Questo non accade con <command>sg</command>, per "
+"cui all'uscita del comando <command>sg</command> si ritorna al precedente ID "
+"di gruppo."
+
+# type: IP
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+
+# type: Plain text
+#: sg.1.xml:119(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: shadow.5.xml:34(refentrytitle) shadow.5.xml:39(refname)
+#: shadow.3.xml:34(refentrytitle) shadow.3.xml:39(refname)
+#: pwck.8.xml:60(replaceable) pwck.8.xml:75(replaceable)
+#: grpck.8.xml:53(replaceable) grpck.8.xml:62(replaceable)
+msgid "shadow"
+msgstr "shadow"
+
+# type: Plain text
+#: shadow.5.xml:40(refpurpose)
+#, fuzzy
+msgid "shadowed password file"
+msgstr "impossibile aprire i file delle password"
+
+# type: Plain text
+#: shadow.5.xml:45(para)
+#, fuzzy
+#| msgid ""
+#| "<emphasis remap=\"I\">shadow</emphasis> contains the encrypted password "
+#| "information for user's accounts and optional the password aging "
+#| "information. Included is:"
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+"<emphasis remap=\"I\">shadow</emphasis> contiene le informazioni sulle "
+"password cifrate per gli account degli utenti e, opzionalmente, le "
+"informazioni sulla durata delle password. Sono inclusi:"
+
+# type: Plain text
+#: shadow.5.xml:51(para) gshadow.5.xml:49(para)
+#, fuzzy
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Questo file non deve essere leggibile dagli utenti normali se si vuole "
+"mantenere la sicurezza sulle password.\n"
+"#-#-#-#-#  shadow.5.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Questo file non deve essere leggibile dagli utenti se si vuole mantenere la "
+"sicurezza delle password."
+
+#: shadow.5.xml:56(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+
+# type: Plain text
+#: shadow.5.xml:63(emphasis) passwd.5.xml:53(para)
+msgid "login name"
+msgstr "nome di login"
+
+#: shadow.5.xml:65(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+
+# type: Plain text
+#: shadow.5.xml:71(emphasis) gshadow.5.xml:68(emphasis)
+#, fuzzy
+msgid "encrypted password"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Password crittata\n"
+"#-#-#-#-#  shadow.5.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Password cifrata"
+
+# type: Plain text
+#: shadow.5.xml:73(para) gshadow.5.xml:70(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+"Fare riferimento a <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> per dettagli sul modo "
+"in cui questa stringa viene interpretata."
+
+# type: Plain text
+#: shadow.5.xml:78(para)
+#, fuzzy
+msgid ""
+"If the password field contains some string that is not a valid result of "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, for instance ! or *, the user will not be able to use a unix "
+"password to log in (but the user may log in the system by other means)."
+msgstr ""
+"<command>gpasswd</command> invocata da un amministratore di gruppo con il "
+"solo nome del gruppo richiede solamente la password di gruppo. Se la "
+"password è impostata i membri possono ancora usare "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> senza la password, i non-membri devono fornire la password."
+
+#: shadow.5.xml:85(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+
+#: shadow.5.xml:92(para) gshadow.5.xml:92(para)
+msgid ""
+"A password field which starts with a exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+
+# type: Plain text
+#: shadow.5.xml:102(emphasis)
+#, fuzzy
+msgid "date of last password change"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Giorni prima che la password possa essere modificata\n"
+"#-#-#-#-#  shadow.5.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Giorni prima dei quali la password non può essere cambiata"
+
+#: shadow.5.xml:105(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:109(para)
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"pasword the next time she will log in the system."
+msgstr ""
+
+#: shadow.5.xml:114(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+
+# type: SS
+#: shadow.5.xml:121(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "minimum password age"
+msgstr "Modifiche delle password"
+
+#: shadow.5.xml:123(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+
+#: shadow.5.xml:128(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+
+# type: SS
+#: shadow.5.xml:135(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "maximum password age"
+msgstr "Modifiche delle password"
+
+#: shadow.5.xml:137(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+
+#: shadow.5.xml:141(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+
+#: shadow.5.xml:146(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+
+#: shadow.5.xml:151(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+
+# type: SS
+#: shadow.5.xml:159(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "password warning period"
+msgstr "Modifiche delle password"
+
+# type: Plain text
+#: shadow.5.xml:162(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password has expired before the account will "
+#| "be disabled."
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+"Il numero di giorni dopo la scadenza di una password prima che l'account "
+"venga disabilitato."
+
+#: shadow.5.xml:167(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+
+#: shadow.5.xml:175(emphasis)
+msgid "password inactivity period"
+msgstr ""
+
+#: shadow.5.xml:178(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+
+#: shadow.5.xml:184(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+
+#: shadow.5.xml:189(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr ""
+
+# type: Plain text
+#: shadow.5.xml:197(emphasis)
+#, fuzzy
+#| msgid "User account information."
+msgid "account expiration date"
+msgstr "informazioni sugli account utente."
+
+#: shadow.5.xml:200(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:204(para)
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an acount expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+
+#: shadow.5.xml:210(para)
+msgid "An empty field means that the account will never expire."
+msgstr ""
+
+#: shadow.5.xml:213(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+
+# type: Plain text
+#: shadow.5.xml:221(emphasis)
+#, fuzzy
+#| msgid "a reserved field"
+msgid "reserved field"
+msgstr "Campo riservato"
+
+# type: Plain text
+#: shadow.5.xml:223(para)
+#, fuzzy
+#| msgid "sp_flag - reserved for future use"
+msgid "This field is reserved for future use."
+msgstr "sp_flag - riservato per uso futuro."
+
+#: shadow.5.xml:245(filename)
+#, fuzzy
+#| msgid "/etc/shadow"
+msgid "/etc/shadow-"
+msgstr "/etc/shadow"
+
+#: shadow.5.xml:247(para)
+msgid "Backup file for /etc/shadow."
+msgstr ""
+
+#: shadow.5.xml:248(para) passwd.5.xml:134(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+
+# type: Plain text
+#: shadow.5.xml:259(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: shadow.3.xml:36(refmiscinfo)
+msgid "Library Calls"
+msgstr ""
+
+#: shadow.3.xml:40(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+# type: Plain text
+#: shadow.3.xml:41(refpurpose)
+msgid "encrypted password file routines"
+msgstr "gestione del file delle password cifrate"
+
+# type: SH
+#: shadow.3.xml:45(title)
+msgid "SYNTAX"
+msgstr "SINTASSI"
+
+#: shadow.3.xml:47(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+# type: Plain text
+#: shadow.3.xml:51(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+# type: Plain text
+#: shadow.3.xml:55(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "struct spwd *getspnam(char"
+
+#: shadow.3.xml:56(emphasis)
+msgid "*name"
+msgstr ""
+
+#: shadow.3.xml:56(emphasis) shadow.3.xml:69(emphasis)
+#: shadow.3.xml:74(emphasis) shadow.3.xml:80(emphasis)
+msgid ");"
+msgstr ");"
+
+# type: Plain text
+#: shadow.3.xml:60(emphasis)
+msgid "void setspent();"
+msgstr "void setspent();"
+
+# type: Plain text
+#: shadow.3.xml:64(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+# type: Plain text
+#: shadow.3.xml:68(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+#: shadow.3.xml:69(emphasis) shadow.3.xml:80(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+# type: Plain text
+#: shadow.3.xml:73(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+#: shadow.3.xml:74(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+#: shadow.3.xml:78(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+#: shadow.3.xml:79(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+# type: SH
+#: shadow.3.xml:79(emphasis)
+#, fuzzy
+msgid "FILE"
+msgstr "FILE"
+
+#: shadow.3.xml:84(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+#: shadow.3.xml:88(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+# type: Plain text
+#: shadow.3.xml:94(para)
+#, fuzzy
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+"I<shadow> manipola il contenuto del file delle shadow password, <filename>/"
+"etc/shadow</filename>. La struttura nel file I<#include> è la seguente:"
+
+#: shadow.3.xml:99(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+"      char\t\t*sp_namp; /* user login name */\n"
+"      char\t\t*sp_pwdp; /* encrypted password */\n"
+"      long int\t\tsp_lstchg; /* last password change */\n"
+"      long int\t\tsp_min; /* days until change allowed. */\n"
+"      long int\t\tsp_max; /* days before change required */\n"
+"      long int\t\tsp_warn; /* days warning for expiration */\n"
+"      long int\t\tsp_inact; /* days before account inactive */\n"
+"      long int\t\tsp_expire; /* date when account expires */\n"
+"      unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+"    "
+msgstr ""
+"struct spwd {\n"
+"      char\t\t*sp_namp; /* login dell'utente */      char\t\t*sp_pwdp; /* password cifrata */      long int\t\tsp_lstchg; /* ultimo cambio della password */      long int\t\tsp_min; /* giorni minimi tra i cambi */      long int\t\tsp_max; /* giorni massimi tra i cambi */      long int\t\tsp_warn; /* giorni di preavviso */      long int\t\tsp_inact; /* giorni di inattività */      long int\t\tsp_expire; /* data di scadenza dell'account */      unsigned long int\tsp_flag; /* riservato per uso futuro */}\n"
+"    "
+
+# type: Plain text
+#: shadow.3.xml:111(para)
+msgid "The meanings of each field are:"
+msgstr "Ciascun campo significa:"
+
+# type: Plain text
+#: shadow.3.xml:114(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+"sp_namp - puntatore a una stringa null-terminated che contiene il nome "
+"utente."
+
+# type: Plain text
+#: shadow.3.xml:117(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+"sp_pwdp - puntatore a una stringa null-terminated che contiene la password."
+
+# type: Plain text
+#: shadow.3.xml:120(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+"sp_lstchg - giorni a partire dal 1 gennaio 1970 in cui la password è stata "
+"cambiata l'ultima volta."
+
+# type: Plain text
+#: shadow.3.xml:123(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr "sp_min - giorni prima dei quali la password non può essere cambiata."
+
+# type: Plain text
+#: shadow.3.xml:126(para)
+msgid "sp_max - days after which password must be changed"
+msgstr "sp_max - giorni dopo i quali la password deve essere cambiata."
+
+# type: Plain text
+#: shadow.3.xml:129(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+"sp_warn - giorni prima della scadenza della password in cui l'utente viene "
+"avvertito."
+
+# type: Plain text
+#: shadow.3.xml:134(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+"sp_inact - giorni dopo la scadenza della password in cui l'account viene "
+"considerato inattivo e disabilitato."
+
+# type: Plain text
+#: shadow.3.xml:139(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+"sp_expire - giorni a partire dal 1 gennaio 1970 dopo i quali l'account viene "
+"disabilitato."
+
+# type: Plain text
+#: shadow.3.xml:142(para)
+msgid "sp_flag - reserved for future use"
+msgstr "sp_flag - riservato per uso futuro."
+
+# type: Plain text
+#: shadow.3.xml:150(para)
+#, fuzzy
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis> e <emphasis>sgetspent</emphasis> "
+"restituiscono un puntatore a uno <emphasis>struct spwd</emphasis>. "
+"<emphasis>getspent</emphasis> restituisce la voce successiva nel file, "
+"<emphasis>fgetspent</emphasis> la voce successiva nello stream specificato, "
+"che si suppone sia un file nel formato corretto. <emphasis>sgetspent</"
+"emphasis> restituisce un puntatore a uno <emphasis>struct spwd</emphasis> "
+"usando come input la stringa fornita. <emphasis>getspnam</emphasis> cerca "
+"una voce che corrisponde a <emphasis>name</emphasis> partendo dalla "
+"posizione corrente nel file."
+
+# type: Plain text
+#: shadow.3.xml:163(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+"<emphasis>setspent</emphasis> e <emphasis>endspent</emphasis> sono usate "
+"rispettivamente per iniziare e terminare l'accesso al file delle shadow "
+"password."
+
+# type: Plain text
+#: shadow.3.xml:169(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+"Le funzioni <emphasis>lckpwdf</emphasis> e <emphasis>ulckpwdf</emphasis> si "
+"usano per garantire l'accesso esclusivo al file <filename>/etc/shadow</"
+"filename>. <emphasis>lckpwdf</emphasis> prova ad acquisire il lock tramite "
+"<emphasis>pw_lock</emphasis> per un massimo di 15 secondi, dopodiché tenta "
+"di ottenere un secondo lock usando <emphasis>spw_lock</emphasis> per il "
+"tempo che rimane dei 15 secondi iniziali. Se anche uno solo dei due "
+"tentativi fallisce dopo un totale di 15 secondi, <emphasis>lckpwdf</"
+"emphasis> restituisce -1, mentre restituisce 0 se riesce ad acquisire "
+"entrambi i lock."
+
+# type: Plain text
+#: shadow.3.xml:184(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+"Le funzioni restituiscono NULL se non ci sono altre voci disponibili o se si "
+"verifica un errore durante l'elaborazione. Le funzioni di tipo "
+"<emphasis>int</emphasis> restituiscono 0 in caso di successo e -1 in caso di "
+"errore."
+
+# type: Plain text
+#: shadow.3.xml:194(para)
+#, fuzzy
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+"Queste funzioni possono essere usate solo dall'amministratore, perché "
+"l'accesso al file delle shadow password è riservato."
+
+# type: Plain text
+#: shadow.3.xml:214(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: pwconv.8.xml:42(refentrytitle) pwconv.8.xml:47(refname)
+#: pwconv.8.xml:56(command) login.defs.5.xml:388(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+#: pwconv.8.xml:48(refname) pwconv.8.xml:59(command)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+#: pwconv.8.xml:49(refname) pwconv.8.xml:62(command)
+#: login.defs.5.xml:302(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+#: pwconv.8.xml:50(refname) pwconv.8.xml:65(command)
+#: login.defs.5.xml:308(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+# type: Plain text
+#: pwconv.8.xml:51(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr "convertono a e da password e gruppi shadow."
+
+#: pwconv.8.xml:71(para)
+#, fuzzy
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+"<command>pwconv</command> crea <emphasis remap=\"I\">shadow</emphasis> da "
+"<emphasis remap=\"I\">passwd</emphasis> e, in modo opzionale, da un "
+"preesistente <emphasis remap=\"I\">shadow</emphasis>."
+
+#: pwconv.8.xml:77(para)
+#, fuzzy
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+"<command>pwunconv</command> creates <emphasis remap=\"I\">passwd</emphasis> "
+"from <emphasis remap=\"I\">passwd</emphasis> and <emphasis remap=\"I"
+"\">shadow</emphasis> and then removes <emphasis remap=\"I\">shadow</"
+"emphasis>."
+
+#: pwconv.8.xml:84(para)
+#, fuzzy
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+"<command>grpconv</command> crea <emphasis remap=\"I\">gshadow</emphasis> da "
+"<emphasis remap=\"I\">group</emphasis> e, in modo opzionale, da un "
+"preesistente <emphasis remap=\"I\">gshadow</emphasis>."
+
+#: pwconv.8.xml:90(para)
+#, fuzzy
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+"<command>grpunconv</command> crea <emphasis remap=\"I\">group</emphasis> da "
+"<emphasis remap=\"I\">group</emphasis> e <emphasis remap=\"I\">gshadow</"
+"emphasis> e quindi rimuove <emphasis remap=\"I\">gshadow</emphasis>."
+
+# type: Plain text
+#: pwconv.8.xml:97(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+"Questi quattro programmi agiscono tutti sui file normali e oscurati "
+"(shadow)  delle password e dei gruppi: <filename>/etc/passwd</filename>, "
+"<filename>/etc/group</filename>, <filename>/etc/shadow</filename> e "
+"<filename>/etc/gshadow</filename>."
+
+# type: Plain text
+#: pwconv.8.xml:104(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+"Ciascun programma, prima della conversione, acquisisce i lock necessari. "
+"<command>pwconv</command> e <command>grpconv</command> sono simili.  Per "
+"prima cosa vengono rimosse le voci nel file oscurato che non esistono nel "
+"file principale.  Quindi vengono aggiornate le voci oscurate che non hanno "
+"`x' come password nel file principale.  Vengono aggiunte le eventuali voci "
+"oscurate mancanti.  Infine, le password nel file principale vengono "
+"sostituite con `x'.  Questi programmi possono essere usati per le "
+"conversioni iniziali così come per aggiornare il file oscurato se il file "
+"principale viene editato a mano."
+
+# type: Plain text
+#: pwconv.8.xml:115(para)
+#, fuzzy
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+"<command>pwconv</command> userà i valori di B<PASS_MIN_DAYS>, "
+"B<PASS_MAX_DAYS> e B<PASS_WARN_AGE> da <filename>/etc/login.defs</filename> "
+"quando si aggiungono nuove voci a <filename>/etc/shadow</filename>."
+
+# type: Plain text
+#: pwconv.8.xml:124(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+"Analogamente, <command>pwunconv</command> e <command>grpunconv</command> "
+"sono simili. Le password nel file principale vengono aggiornate dal file "
+"oscurato. Voci che esistono nel file principale ma non nel file oscurato "
+"vengono lasciate stare. Infine, viene rimosso il file oscurato.Alcune "
+"informazioni sull'invecchiamento delle password vengono perse da "
+"<command>pwunconv</command>. Convertirà solo quello che potrà."
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+
+#: pwconv.8.xml:147(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+
+#: pwconv.8.xml:155(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+
+# type: Plain text
+#: pwconv.8.xml:181(para)
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>."
+
+#: pwck.8.xml:40(refentrytitle) pwck.8.xml:45(refname) pwck.8.xml:51(command)
+#: pwck.8.xml:66(command) login.defs.5.xml:380(term)
+msgid "pwck"
+msgstr "pwck"
+
+# type: Plain text
+#: pwck.8.xml:46(refpurpose)
+#, fuzzy
+msgid "verify integrity of password files"
+msgstr "verifica l'integrità dei file delle password"
+
+#: pwck.8.xml:52(arg) pwck.8.xml:67(arg) pwck.8.xml:171(option)
+msgid "-q"
+msgstr "-q"
+
+#: pwck.8.xml:53(arg) pwck.8.xml:192(option) grpck.8.xml:58(arg)
+#: grpck.8.xml:149(option)
+msgid "-s"
+msgstr "-s"
+
+#: pwck.8.xml:56(replaceable) pwck.8.xml:71(replaceable)
+#: passwd.5.xml:34(refentrytitle) passwd.5.xml:39(refname)
+#: passwd.1.xml:44(refentrytitle) passwd.1.xml:49(refname)
+#: passwd.1.xml:55(command) login.defs.5.xml:369(term)
+msgid "passwd"
+msgstr "passwd"
+
+#: pwck.8.xml:68(arg) pwck.8.xml:182(option) login.1.xml:222(option)
+#: grpck.8.xml:49(arg) grpck.8.xml:139(option)
+msgid "-r"
+msgstr "-r"
+
+# type: Plain text
+#: pwck.8.xml:84(para)
+#, fuzzy
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename> have the proper "
+"format and contain valid data. The user is prompted to delete entries that "
+"are improperly formatted or which have other uncorrectable errors."
+msgstr ""
+"<command>grpck</command> verifica l'integrità delle informazioni di "
+"autenticazione del sistema. Ogni voce in <filename>/etc/passwd</filename> e "
+"in <filename>/etc/shadow</filename> viene controllata per verificare che "
+"abbia il formato corretto e dati validi in ciascun campo. Viene richiesto "
+"all'utente di rimuovere le voci che non hanno un formato appropriato o che "
+"hanno altri errori impossibili da correggere."
+
+# type: Plain text
+#: pwck.8.xml:93(para) grpck.8.xml:80(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr "Vengono fatti controlli per verificare che ogni voce abbia:"
+
+# type: Plain text
+#: pwck.8.xml:96(para) grpck.8.xml:84(para)
+msgid "the correct number of fields"
+msgstr "il corretto numero di campi"
+
+# type: Plain text
+#: pwck.8.xml:99(para)
+#, fuzzy
+#| msgid "a unique user name"
+msgid "a unique and valid user name"
+msgstr "un nome utente univoco"
+
+# type: Plain text
+#: pwck.8.xml:102(para)
+msgid "a valid user and group identifier"
+msgstr "identificatori validi dell'utente e del gruppo"
+
+# type: Plain text
+#: pwck.8.xml:105(para)
+msgid "a valid primary group"
+msgstr "un gruppo primario valido"
+
+# type: Plain text
+#: pwck.8.xml:108(para)
+msgid "a valid home directory"
+msgstr "una home directory valida"
+
+# type: Plain text
+#: pwck.8.xml:111(para)
+msgid "a valid login shell"
+msgstr "una shell di login valida"
+
+#: pwck.8.xml:115(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+
+#: pwck.8.xml:120(para)
+msgid "These checks are the following:"
+msgstr ""
+
+#: pwck.8.xml:125(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+
+#: pwck.8.xml:131(para)
+msgid "passwords are specified in the shadowed file"
+msgstr ""
+
+# type: Plain text
+#: pwck.8.xml:134(para)
+#, fuzzy
+#| msgid "the correct number of fields"
+msgid "shadow entries have the correct number of fields"
+msgstr "il corretto numero di campi"
+
+#: pwck.8.xml:137(para)
+msgid "shadow entries are unique in shadow"
+msgstr ""
+
+# type: Plain text
+#: pwck.8.xml:140(para)
+#, fuzzy
+msgid "the last password changes are not in the future"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Giorni prima che la password possa essere modificata\n"
+"#-#-#-#-#  shadow.5.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Giorni prima dei quali la password non può essere cambiata"
+
+# type: Plain text
+#: pwck.8.xml:144(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+"Gli errori nelle verifiche sul corretto numero di campi e sull'univocità del "
+"nome utente sono irrimediabili. Se una voce ha un numero errato di campi, "
+"all'utente viene chiesto di cancellare l'intera riga; se l'utente non "
+"risponde affermativamente, vengono omessi tutti gli ulteriori controlli. "
+"Viene richiesta la cancellazione anche per le voci aventi il nome utente "
+"duplicato, ma i rimanenti controlli vengono ugualmente effettuati. Tutti gli "
+"altri errori non sono gravi e l'utente è invitato a eseguire il comando "
+"<command>usermod</command> per correggerli."
+
+# type: Plain text
+#: pwck.8.xml:155(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+"I comandi che operano sul file <filename>/etc/passwd</filename> non sono in "
+"grado di modificare voci corrotte o duplicate; in tali circostanze va usato "
+"<command>pwck</command> per rimuovere la voce scorretta."
+
+# type: Plain text
+#: pwck.8.xml:165(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr "Il comando <command>pwck</command> accetta le seguenti opzioni:"
+
+#: pwck.8.xml:174(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+
+# type: TP
+#: pwck.8.xml:185(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr ""
+
+#: pwck.8.xml:195(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+
+#: pwck.8.xml:203(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename>. The user may select "
+"alternate files with the <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> parameters."
+msgstr ""
+"Come impostazione predefinita, <command>pwck</command> opera sui file "
+"<filename>/etc/passwd</filename> e in <filename>/etc/shadow</filename>. "
+"L'utente può selezionare file alternativi con i parametri <emphasis remap=\"I"
+"\">passwd</emphasis> e <emphasis remap=\"I\">shadow</emphasis>."
+
+# type: Plain text
+#: pwck.8.xml:270(para)
+msgid "one or more bad password entries"
+msgstr "una o più voci di password conengono errori"
+
+# type: Plain text
+#: pwck.8.xml:276(para)
+msgid "can't open password files"
+msgstr "impossibile aprire i file delle password"
+
+# type: Plain text
+#: pwck.8.xml:282(para)
+msgid "can't lock password files"
+msgstr "impossibile fare il lock dei file delle password"
+
+# type: Plain text
+#: pwck.8.xml:288(para)
+msgid "can't update password files"
+msgstr "impossibile aggiornare i file delle password"
+
+# type: Plain text
+#: pwck.8.xml:294(para)
+#, fuzzy
+#| msgid "can't open password files"
+msgid "can't sort password files"
+msgstr "impossibile aprire i file delle password"
+
+# type: TP
+#: pwck.8.xml:252(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Il comando <command>pwck</command> restituisce i seguenti valori: "
+"<placeholder-1/>"
+
+# type: Plain text
+#: pwck.8.xml:303(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: porttime.5.xml:34(refentrytitle) porttime.5.xml:39(refname)
+msgid "porttime"
+msgstr "porttime"
+
+# type: Plain text
+#: porttime.5.xml:40(refpurpose)
+msgid "port access time file"
+msgstr "file delle porte e degli orari d'accesso"
+
+# type: Plain text
+#: porttime.5.xml:45(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+"<emphasis remap=\"I\">porttime</emphasis> contiene un elenco di device tty, "
+"nomi utente e orari di accesso permessi."
+
+# type: Plain text
+#: porttime.5.xml:50(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+"Ciascuna voce è composta da tre campi separati da due punti. Il primo è un "
+"elenco di device tty, separati da virgole, oppure un asterisco per indicare "
+"che la voce corrisponde a qualsiasi device. Il secondo campo è un elenco di "
+"nomi utente, separati da virgole, oppure un asterisco per indicare che la "
+"voce corrisponde ad ogni utente. Il terzo campo è un elenco degli orari, "
+"separati da virgole, in cui è consentito l'accesso."
+
+# type: Plain text
+#: porttime.5.xml:59(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+"Un orario di accesso consiste in zero o più giorni della settimana "
+"abbreviati in <emphasis>Mo</emphasis> (lunedì), <emphasis>Tu</emphasis>, "
+"<emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</emphasis>, "
+"<emphasis>Sa</emphasis> e <emphasis>Su</emphasis> (domenica), seguiti da una "
+"coppia di orari, separate da un trattino. L'abbreviazione <emphasis>Wk</"
+"emphasis> rappresenta tutti i giorni da lunedì a venerdì, mentre "
+"<emphasis>Al</emphasis> indica tutti i giorni della settimana. Se non si "
+"specifica alcun giorno, viene usato implicitamente <emphasis>Al</emphasis>."
+
+# type: SH
+#: porttime.5.xml:73(title)
+msgid "EXAMPLES"
+msgstr "ESEMPI"
+
+# type: Plain text
+#: porttime.5.xml:74(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+"La voce seguente permette l'accesso all'utente <emphasis remap=\"B\">jfh</"
+"emphasis> da qualsiasi porta durante i giorni lavorativi dalle 9 alle 17."
+
+# type: Plain text
+#: porttime.5.xml:80(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+# type: Plain text
+#: porttime.5.xml:82(para)
+#, fuzzy
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+"Le voci seguenti permettono l'accesso solo agli utenti <emphasis>root</"
+"emphasis> e <emphasis>oper</emphasis> da /dev/console a qualsiasi ora. Qui "
+"viene mostrato come il file <filename>/etc/porttime</filename> sia una lista "
+"ordinata di orari d'accesso: ogni altro utente corrisponderebbe alla seconda "
+"voce, che impedisce l'accesso in qualsiasi orario."
+
+# type: Plain text
+# no-wrap
+#: porttime.5.xml:91(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"      console:root,oper:Al0000-2400\n"
+"      console:*:\n"
+"    "
+msgstr ""
+"\n"
+"      console:root,oper:Al0000-2400\n"
+"      console:*:\n"
+"    "
+
+# type: Plain text
+#: porttime.5.xml:96(para)
+#, fuzzy
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+"La voce seguente permette l'accesso all'utente B<games> da qualsiasi porta "
+"durante gli orari non lavorativi."
+
+# type: Plain text
+#: porttime.5.xml:101(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+#: porttime.5.xml:108(filename) logoutd.8.xml:67(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+#: porttime.5.xml:110(para) logoutd.8.xml:69(para)
+#, fuzzy
+msgid "File containing port access."
+msgstr "file contenente le porte e gli orari di accesso"
+
+# type: Plain text
+#: porttime.5.xml:118(para) login.access.5.xml:109(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+# type: Plain text
+#: passwd.5.xml:40(refpurpose)
+#, fuzzy
+msgid "the password file"
+msgstr "impossibile aprire i file delle password"
+
+#: passwd.5.xml:45(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+
+# type: Plain text
+#: passwd.5.xml:56(para)
+#, fuzzy
+msgid "optional encrypted password"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Password crittata\n"
+"#-#-#-#-#  shadow.5.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Password cifrata"
+
+#: passwd.5.xml:59(para)
+msgid "numerical user ID"
+msgstr ""
+
+#: passwd.5.xml:62(para)
+msgid "numerical group ID"
+msgstr ""
+
+# type: Plain text
+#: passwd.5.xml:65(para)
+#, fuzzy
+msgid "user name or comment field"
+msgstr "Il campo commento del nuovo utente nel file password."
+
+# type: Plain text
+#: passwd.5.xml:68(para)
+#, fuzzy
+msgid "user home directory"
+msgstr "- una home directory valida"
+
+#: passwd.5.xml:71(para)
+msgid "optional user command interpreter"
+msgstr ""
+
+#: passwd.5.xml:75(para)
+msgid ""
+"The encrypted password field may be blank, in which case no password is "
+"required to authenticate as the specified login name. However, some "
+"applications which read the <filename>/etc/passwd</filename> file may decide "
+"not to permit <emphasis>any</emphasis> access at all if the "
+"<emphasis>password</emphasis> field is blank. If the <emphasis>password</"
+"emphasis> field is a lower-case <quote>x</quote>, then the encrypted "
+"password is actually stored in the <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> file instead; there "
+"<emphasis>must</emphasis> be a corresponding line in the <filename>/etc/"
+"shadow</filename> file, or else the user account is invalid. If the "
+"<emphasis>password</emphasis> field is any other string, then it will be "
+"treated as an encrypted password, as specified by "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+# type: Plain text
+#: passwd.5.xml:94(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:100(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+
+#: passwd.5.xml:106(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+
+# type: Plain text
+#: passwd.5.xml:127(para)
+#, fuzzy
+msgid "optional encrypted password file"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"shadow - file crittato delle password\n"
+"#-#-#-#-#  shadow.5.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"shadow - file delle password cifrate"
+
+#: passwd.5.xml:131(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/passwd-"
+msgstr "/etc/passwd"
+
+#: passwd.5.xml:133(para)
+msgid "Backup file for /etc/passwd."
+msgstr ""
+
+# type: Plain text
+#: passwd.5.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Plain text
+#: passwd.1.xml:50(refpurpose)
+msgid "change user password"
+msgstr "cambia la password utente"
+
+# type: Plain text
+#: passwd.1.xml:67(para)
+#, fuzzy
+msgid ""
+"The <command>passwd</command> command changes passwords for user accounts. A "
+"normal user may only change the password for his/her own account, while the "
+"superuser may change the password for any account. <command>passwd</command> "
+"also changes the account or associated password validity period."
+msgstr ""
+"<command>passwd</command> cambia la password per account utente o di "
+"gruppo.  Un utente normale può solo cambiare la password per il proprio "
+"account, mentre il super utente può cambiarla per qualsiasi account.  "
+"L'amministratore di un gruppo può cambiare la password del gruppo.  "
+"<command>passwd</command> può cambiare altri dati dell\\'utente come il nome "
+"completo, la shell di login, la data e l\\'intervallo di scadenza della "
+"password."
+
+# type: SS
+#: passwd.1.xml:76(title)
+msgid "Password Changes"
+msgstr "Modifiche delle password"
+
+# type: Plain text
+#: passwd.1.xml:77(para)
+#, fuzzy
+msgid ""
+"The user is first prompted for his/her old password, if one is present. This "
+"password is then encrypted and compared against the stored password. The "
+"user has only one chance to enter the correct password. The superuser is "
+"permitted to bypass this step so that forgotten passwords may be changed."
+msgstr ""
+"All\\'utente viene prima chiesta la propria password attuale, se presente.  "
+"Questa password viene cifrata e confrontata con quella memorizzata.  All"
+"\\'utente viene data solo una possibilità di inserire la password corretta.  "
+"Il super utente non ha questo obbligo."
+
+# type: Plain text
+#: passwd.1.xml:85(para)
+#, fuzzy
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+"Dopo che la password è stata inserita, vengono controllati i parametri "
+"dell'invecchiamento delle password per verificare che l'utente possa "
+"modificarla in questo momento.  Se il risultato è negativo, <command>passwd</"
+"command> non fa cambiare la password ed esce."
+
+# type: Plain text
+#: passwd.1.xml:92(para)
+#, fuzzy
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+"Se la password viene accettata, <command>passwd</command> la chiede una "
+"seconda volta e confronta le due password.  Le due password devono essere "
+"eguali affinché la password venga accettata."
+
+# type: Plain text
+#: passwd.1.xml:98(para)
+#, fuzzy
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+"All\\'utente viene poi chiesta la nuova password.  Viene misurata la "
+"complessità della password.  In linea di massima le password dovrebbero "
+"contenere dai 6 agli 8 caratteri di uno o più dei seguenti insiemi:"
+
+# type: Plain text
+#: passwd.1.xml:106(para)
+msgid "lower case alphabetics"
+msgstr "lettere minuscole"
+
+# type: Plain text
+#: passwd.1.xml:109(para)
+msgid "digits 0 thru 9"
+msgstr "numeri da 0 a 9"
+
+# type: Plain text
+#: passwd.1.xml:112(para)
+msgid "punctuation marks"
+msgstr "segni di punteggiatura"
+
+# type: Plain text
+#: passwd.1.xml:116(para)
+#, fuzzy
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+"Si deve fare attenzione a non inserire il carattere di cancellazione o di "
+"kill (azzeramento della linea).  <command>passwd</command> non accetta "
+"password non sufficientemente complesse."
+
+# type: SS
+#: passwd.1.xml:125(title)
+msgid "Hints for user passwords"
+msgstr "Suggerimenti per password utente"
+
+# type: Plain text
+#: passwd.1.xml:126(para)
+#, fuzzy
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+"La sicurezza di una password dipende dalla resistenza dell\\'algoritmo e "
+"dalla dimensione della chiave utilizzata.  Il metodi di cifratura del "
+"sistema <emphasis>\\s-2UNIX\\s+2</emphasis> si basa sull'algoritmo NBS DES "
+"ed è abbastanza sicuro.  La dimensione della chiave dipende dall aleatorità "
+"della password che viene utilizzata."
+
+# type: Plain text
+#: passwd.1.xml:135(para)
+#, fuzzy
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+"La compromissione di una password avviene normalmente a seguito di incuria "
+"nella scelta o nella gestione della password.  Per questo motivo non si "
+"devono utilizzare password che appaiono nei dizionari o che devono essere "
+"scritte.  La password non deve essere uno nome proprio, il numero della "
+"patente, la data di nascita o l'indirizzo.  Uno qualunque di questi potrebbe "
+"essere indovinato per violare la sicurezza del sistema."
+
+#: passwd.1.xml:144(para)
+msgid ""
+"You can find advices on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+
+# type: Plain text
+#: passwd.1.xml:153(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr "Il comando <command>passwd</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: passwd.1.xml:158(term) faillog.8.xml:71(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: passwd.1.xml:162(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+
+# type: IP
+#: passwd.1.xml:169(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: passwd.1.xml:173(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+
+# type: TP
+#: passwd.1.xml:181(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+#: passwd.1.xml:185(para)
+msgid ""
+"Immediately expire an account's password. This in effect can force a user to "
+"change his/her password at the user's next login."
+msgstr ""
+
+# type: TP
+#: passwd.1.xml:198(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+
+#: passwd.1.xml:202(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+
+# type: IP
+#: passwd.1.xml:211(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+#: passwd.1.xml:215(para)
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+
+# type: IP
+#: passwd.1.xml:223(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+#: passwd.1.xml:227(para)
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+
+#: passwd.1.xml:233(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+
+#: passwd.1.xml:240(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr ""
+
+# type: IP
+#: passwd.1.xml:247(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-n</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>GIORNI</replaceable>"
+
+# type: Plain text
+#: passwd.1.xml:251(para) chage.1.xml:142(para)
+#, fuzzy
+msgid ""
+"Set the minimum number of days between password changes to "
+"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
+"indicates that the user may change his/her password at any time."
+msgstr ""
+"Imposta il numero minimo di giorni tra i cambi di password. Un valore pari a "
+"zero indica che l'utente può cambiare la propria password in qualsiasi "
+"momento."
+
+# type: IP
+#: passwd.1.xml:269(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option><replaceable>REPOSITORY</"
+"replaceable>"
+msgstr ""
+
+#: passwd.1.xml:273(para)
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr ""
+
+# type: IP
+#: passwd.1.xml:279(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+# type: Plain text
+#: passwd.1.xml:283(para)
+#, fuzzy
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+"Lo stato attuale di un account può essere ispeziona con l\\'opzione <option>-"
+"S</option>. Lo stato consiste di 7 campi.  Il primo campo è il nome dell"
+"\\'utente.  Il secondo campo indica se l\\'account è bloccato (L), non ha "
+"password (NP) o ha una password valida (P).  Il terzo campo contiene la data "
+"di ultima modifica della password.  I successivi quattro campi sono l'età "
+"minima, la massima, il periodi di avviso e quello di iniattività.  Queste "
+"età sono espresse in giorni.  Vedere la precedente discussione su "
+"B<Informazioni sulla scadenza della password> per una discussione su questi "
+"campi."
+
+# type: IP
+#: passwd.1.xml:297(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+#: passwd.1.xml:301(para)
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+
+# type: IP
+#: passwd.1.xml:310(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: passwd.1.xml:314(para)
+#, fuzzy
+msgid ""
+"Set the number of days of warning before a password change is required. The "
+"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
+"the password expiring that a user will be warned that his/her password is "
+"about to expire."
+msgstr ""
+"Imposta il numero di giorni di preavviso prima che sia obbligatorio cambiare "
+"la password. L'opzione I<gg_avviso> indica il numero di giorni prima della "
+"scadenza della password in cui l'utente viene avvertito dell'imminente "
+"scadenza."
+
+# type: IP
+#: passwd.1.xml:323(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+
+#: passwd.1.xml:327(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+
+# type: Plain text
+#: passwd.1.xml:339(para)
+#, fuzzy
+#| msgid ""
+#| "Not all options may be supported. Password complexity checking may vary "
+#| "from site to site. The user is urged to select a password as complex as "
+#| "he or she feels comfortable with. Users may not be able to change their "
+#| "password on a system if NIS is enabled and they are not logged into the "
+#| "NIS server."
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+"Non tutte le opzioni potrebbero essere supportate. Il controllo della "
+"complessità delle password varia da sistema a sistema. L\\'utente deve poter "
+"selezionare la possibilità di selezionare una password che ritenga "
+"sufficientemente complessa. Gli utenti potrebbero non essere in condizione "
+"di modificare la propria password se NIS è abilitato e loro non hanno fatto "
+"il login sul server NIS."
+
+#: passwd.1.xml:344(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+
+#: passwd.1.xml:349(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr ""
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid "<replaceable>DES</replaceable> (default)"
+msgstr ""
+
+#: passwd.1.xml:43(replaceable) newusers.8.xml:43(replaceable)
+#: login.defs.5.xml:43(replaceable) gpasswd.1.xml:43(replaceable)
+#: chpasswd.8.xml:43(replaceable) chgpasswd.8.xml:43(replaceable)
+msgid "MD5"
+msgstr ""
+
+#: passwd.1.xml:46(replaceable) newusers.8.xml:46(replaceable)
+#: login.defs.5.xml:46(replaceable) gpasswd.1.xml:46(replaceable)
+#: chpasswd.8.xml:46(replaceable) chgpasswd.8.xml:46(replaceable)
+msgid "SHA256"
+msgstr ""
+
+#: passwd.1.xml:49(replaceable) newusers.8.xml:49(replaceable)
+#: login.defs.5.xml:49(replaceable) gpasswd.1.xml:49(replaceable)
+#: chpasswd.8.xml:49(replaceable) chgpasswd.8.xml:49(replaceable)
+msgid "SHA512"
+msgstr ""
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid "It can take one of these values: <placeholder-1/>"
+msgstr ""
+
+#: passwd.1.xml:53(para) newusers.8.xml:53(para) login.defs.5.xml:53(para)
+#: gpasswd.1.xml:53(para) chpasswd.8.xml:53(para) chgpasswd.8.xml:53(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+
+#: passwd.1.xml:57(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:57(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:57(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:57(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:57(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:57(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superceded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+
+# type: IP
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr ""
+
+# type: IP
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+
+# type: IP
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+
+# type: IP
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+# type: IP
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your crypt"
+"() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999999999 range."
+msgstr ""
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+
+#: passwd.1.xml:395(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/passwd"
+
+# type: Plain text
+#: passwd.1.xml:397(para)
+#, fuzzy
+#| msgid "<command>gpasswd </command>I<group>"
+msgid "PAM configuration for <command>passwd</command>."
+msgstr "<command>gpasswd </command>I<gruppo>"
+
+#: passwd.1.xml:417(para) chage.1.xml:241(para)
+msgid "permission denied"
+msgstr ""
+
+#: passwd.1.xml:423(para)
+msgid "invalid combination of options"
+msgstr ""
+
+#: passwd.1.xml:429(para)
+msgid "unexpected failure, nothing done"
+msgstr ""
+
+#: passwd.1.xml:435(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr ""
+
+# type: TP
+#: passwd.1.xml:441(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr ""
+
+# type: TP
+#: passwd.1.xml:405(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr "Il comando <command>passwd</command> restituisce i seguenti valori:"
+
+# type: Plain text
+#: passwd.1.xml:456(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+"\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: nologin.8.xml:34(refentrytitle) nologin.8.xml:39(refname)
+#: nologin.8.xml:45(command)
+msgid "nologin"
+msgstr "nologin"
+
+#: nologin.8.xml:40(refpurpose)
+msgid "politely refuse a login"
+msgstr ""
+
+#: nologin.8.xml:51(para)
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+
+# type: Plain text
+#: nologin.8.xml:56(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+# type: Plain text
+#: nologin.8.xml:65(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: nologin.8.xml:76(title)
+msgid "HISTORY"
+msgstr ""
+
+# type: TP
+#: nologin.8.xml:77(para)
+#, fuzzy
+msgid "The <command>nologin</command> command appearred in BSD 4.4."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> esce con i seguenti valori:\n"
+"#-#-#-#-#  grpck.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> restituisce i seguenti valori:"
+
+#: newusers.8.xml:50(refentrytitle) newusers.8.xml:55(refname)
+#: newusers.8.xml:61(command) login.defs.5.xml:353(term)
+msgid "newusers"
+msgstr "newusers"
+
+#: newusers.8.xml:56(refpurpose)
+msgid "update and create new users in batch"
+msgstr ""
+
+#: newusers.8.xml:64(replaceable)
+msgid "new_users"
+msgstr ""
+
+#: newusers.8.xml:71(para)
+msgid ""
+"The <command>newusers</command> command reads a file of user name and clear-"
+"text password pairs and uses this information to update a group of existing "
+"users or to create new users. Each line is in the same format as the "
+"standard password file (see <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the exceptions "
+"explained below:"
+msgstr ""
+
+#: newusers.8.xml:79(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr ""
+
+#: newusers.8.xml:84(emphasis)
+msgid "pw_name"
+msgstr ""
+
+#: newusers.8.xml:87(para)
+msgid "This is the name of the user."
+msgstr ""
+
+#: newusers.8.xml:90(para)
+msgid ""
+"It can be the name of a new user or the name of an existing user (or an user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+
+#: newusers.8.xml:101(emphasis)
+msgid "pw_passwd"
+msgstr ""
+
+#: newusers.8.xml:104(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+
+#: newusers.8.xml:112(emphasis)
+msgid "pw_uid"
+msgstr ""
+
+#: newusers.8.xml:115(para)
+msgid "This field is used to define the UID of the user."
+msgstr ""
+
+#: newusers.8.xml:118(para)
+msgid ""
+"If the field is empty, an new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:122(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr ""
+
+#: newusers.8.xml:126(para)
+msgid ""
+"If this field contains the name of an existing user (or the name of an user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+
+#: newusers.8.xml:132(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+
+#: newusers.8.xml:140(emphasis)
+msgid "pw_gid"
+msgstr ""
+
+#: newusers.8.xml:143(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:146(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:152(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+
+#: newusers.8.xml:158(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+
+#: newusers.8.xml:164(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created earlier wbefore by <command>newusers</command>), a new group will be "
+"created with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and Gs the ID for the new group."
+msgstr ""
+
+#: newusers.8.xml:176(emphasis)
+msgid "pw_gecos"
+msgstr ""
+
+#: newusers.8.xml:179(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr ""
+
+#: newusers.8.xml:186(emphasis)
+msgid "pw_dir"
+msgstr ""
+
+#: newusers.8.xml:189(para)
+msgid "This field is used to define the home directory of the user."
+msgstr ""
+
+#: newusers.8.xml:192(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+
+#: newusers.8.xml:197(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+
+#: newusers.8.xml:207(emphasis)
+msgid "pw_shell"
+msgstr ""
+
+#: newusers.8.xml:210(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+
+#: newusers.8.xml:218(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+
+#: newusers.8.xml:224(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+
+# type: Plain text
+#: newusers.8.xml:232(para)
+#, fuzzy
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+"Questo comando è appositamente pensato per grossi sistemi in cui si abbia la "
+"necessità di creare molti account nello stesso momento."
+
+# type: TP
+#: newusers.8.xml:240(para)
+#, fuzzy
+#| msgid ""
+#| "The options which apply to the <command>usermod</command> command are:"
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr "Il comando <command>usermod</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: newusers.8.xml:245(term) chpasswd.8.xml:116(term) chgpasswd.8.xml:95(term)
+#, fuzzy
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: newusers.8.xml:247(para) chpasswd.8.xml:118(para) chgpasswd.8.xml:97(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:248(para) chpasswd.8.xml:122(para) chgpasswd.8.xml:101(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+
+#: newusers.8.xml:270(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are choosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+# type: IP
+#: newusers.8.xml:284(term) chpasswd.8.xml:154(term) chgpasswd.8.xml:129(term)
+#, fuzzy
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:156(para) chgpasswd.8.xml:131(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:289(para) chpasswd.8.xml:159(para) chgpasswd.8.xml:134(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+
+#: newusers.8.xml:293(para) chpasswd.8.xml:163(para) chgpasswd.8.xml:138(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+
+#: newusers.8.xml:297(para) chpasswd.8.xml:167(para) chgpasswd.8.xml:142(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+
+#: newusers.8.xml:301(para) chpasswd.8.xml:171(para) chgpasswd.8.xml:146(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: newusers.8.xml:313(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+
+#: newusers.8.xml:317(para) chpasswd.8.xml:187(para) chgpasswd.8.xml:162(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+
+#: newusers.8.xml:390(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/passwd"
+
+#: newusers.8.xml:392(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr ""
+
+# type: Plain text
+#: newusers.8.xml:400(para)
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: newgrp.1.xml:38(refentrytitle) newgrp.1.xml:43(refname)
+#: newgrp.1.xml:49(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+# type: Plain text
+#: newgrp.1.xml:44(refpurpose)
+#, fuzzy
+msgid "log in to a new group"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"newgrp - logga in un nuovo gruppo\n"
+"#-#-#-#-#  newgrp.1.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"newgrp - effettua l'accesso a un nuovo gruppo"
+
+#: newgrp.1.xml:50(replaceable) grpck.8.xml:51(replaceable)
+#: grpck.8.xml:60(replaceable) groupdel.8.xml:51(replaceable)
+#: groupadd.8.xml:58(replaceable) gpasswd.1.xml:66(replaceable)
+msgid "group"
+msgstr ""
+
+# type: Plain text
+#: newgrp.1.xml:56(para)
+#, fuzzy
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"<command>newgrp</command> è utilizzato per cambiare l'ID di gruppo attuale "
+"durante una sessione di login.  Se il flag opzionale <option>-</option> "
+"viene specificato allora l\\'ambiente dell'utente viene reinizializzato come "
+"se l'utente stesse effettuando il login, altrimenti l'ambiente non viene "
+"modificato e la directory corrente non viene cambiata.\n"
+"#-#-#-#-#  newgrp.1.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"<command>newgrp</command> permette di cambiare il proprio ID di gruppo "
+"durante una sessione di login. Se viene specificato il flag <option>-</"
+"option>, l'ambiente dell'utente viene reinizializzato come se l'utente "
+"stesse effettuando il login, altrimenti l'ambiente non viene modificato e la "
+"directory corrente non viene cambiata."
+
+# type: Plain text
+#: newgrp.1.xml:64(para)
+#, fuzzy
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+"<command>newgrp</command> cambia l\\'ID di gruppo attuale reale in base al "
+"gruppo passato come argomento oppure al gruppo predefinito nel file "
+"<filename>/etc/passwd</filename>. Se l'utente non viene elencato come "
+"appartenente al gruppo o se il gruppo ha una password allora all\\'utente "
+"viene chiesta una password. Se la password di gruppo è vuota e l'utente non "
+"è elencato come me,bro del gruppo allora l\\'operazione genera un errore."
+
+#: newgrp.1.xml:78(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+
+# type: Plain text
+#: newgrp.1.xml:130(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: logoutd.8.xml:34(refentrytitle) logoutd.8.xml:39(refname)
+#: logoutd.8.xml:45(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+# type: Plain text
+#: logoutd.8.xml:40(refpurpose)
+msgid "Enforce login time restrictions"
+msgstr "fa rispettare le limitazioni sugli accessi"
+
+# type: Plain text
+#: logoutd.8.xml:51(para)
+#, fuzzy
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+"<command>logoutd</command> fa rispettare le limitazioni sugli orari e sulle "
+"porte di accesso specificate in <filename>/etc/porttime</filename>. "
+"<command>logoutd</command> andrebbe avviato da <filename>/etc/rc</filename>. "
+"Il file <filename>/var/run/utmp</filename> viene controllato periodicamente "
+"per verificare che a ciascun utente sia consentito l'accesso da quella "
+"determinata porta e all'orario attuale. Ogni sessione di login che stia "
+"violando le limitazioni in <filename>/etc/porttime</filename> viene "
+"terminata."
+
+#: logoutd.8.xml:73(filename) login.1.xml:319(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+# type: Plain text
+#: logoutd.8.xml:75(para) login.1.xml:321(para)
+msgid "List of current login sessions."
+msgstr "Elenco delle sessioni attive"
+
+#: login.defs.5.xml:97(refentrytitle) login.defs.5.xml:102(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+# type: Plain text
+#: login.defs.5.xml:103(refpurpose)
+#, fuzzy
+msgid "shadow password suite configuration"
+msgstr "shadow - gestione del file delle password cifrate"
+
+#: login.defs.5.xml:108(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+
+#: login.defs.5.xml:115(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+
+#: login.defs.5.xml:123(para)
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+
+#: login.defs.5.xml:138(para)
+msgid "The following configuration items are provided:"
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "<option>-M</option> I<gg_max>"
+
+# type: Plain text
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+"Il nome del gruppo verrà modificato da <replaceable>gruppo</replaceable> a "
+"<replaceable>nome_gruppo</replaceable>."
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr ""
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overriden by PAM, since the default pam_unix module "
+"has it's own built in of 3 retries. However, this is a safe fallback in case "
+"you are using an authentication module that does not enforce PAM_MAXTRIES."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+
+#: login.defs.5.xml:181(para)
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "<option>-c </option>I<commento>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking of time restrictions specified in /etc/porttime."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+# type: IP
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>TTYPERM</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "<option>-I</option> I<inattività>"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+
+# type: IP
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ULIMIT</option> (number)"
+msgstr "<option>-I</option> I<inattività>"
+
+# type: Plain text
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+msgid "Default <command>ulimit</command> value."
+msgstr "<command>groups</command> [I<utente>]"
+
+#: login.defs.5.xml:209(title)
+msgid "CROSS REFERENCES"
+msgstr ""
+
+#: login.defs.5.xml:210(para)
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+
+#: login.defs.5.xml:218(term) chfn.1.xml:41(refentrytitle)
+#: chfn.1.xml:46(refname) chfn.1.xml:52(command)
+msgid "chfn"
+msgstr ""
+
+#: login.defs.5.xml:220(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:228(term) chgpasswd.8.xml:42(refentrytitle)
+#: chgpasswd.8.xml:47(refname) chgpasswd.8.xml:53(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:230(para) login.defs.5.xml:260(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:238(term) chpasswd.8.xml:41(refentrytitle)
+#: chpasswd.8.xml:46(refname) chpasswd.8.xml:52(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:240(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:248(term) chsh.1.xml:40(refentrytitle)
+#: chsh.1.xml:45(refname) chsh.1.xml:51(command)
+msgid "chsh"
+msgstr ""
+
+#: login.defs.5.xml:250(para)
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr ""
+
+#: login.defs.5.xml:258(term) gpasswd.1.xml:42(refentrytitle)
+#: gpasswd.1.xml:47(refname) gpasswd.1.xml:61(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+#: login.defs.5.xml:268(term) groupadd.8.xml:42(refentrytitle)
+#: groupadd.8.xml:47(refname) groupadd.8.xml:53(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+#: login.defs.5.xml:270(para)
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr ""
+
+#: login.defs.5.xml:277(term) groupdel.8.xml:38(refentrytitle)
+#: groupdel.8.xml:43(refname) groupdel.8.xml:49(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:279(para) login.defs.5.xml:285(para)
+#: login.defs.5.xml:291(para) login.defs.5.xml:298(para)
+#: login.defs.5.xml:304(para) login.defs.5.xml:310(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:283(term) groupmems.8.xml:38(refentrytitle)
+#: groupmems.8.xml:43(refname) groupmems.8.xml:49(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+#: login.defs.5.xml:289(term) groupmod.8.xml:38(refentrytitle)
+#: groupmod.8.xml:43(refname) groupmod.8.xml:49(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+#: login.defs.5.xml:296(term) grpck.8.xml:38(refentrytitle)
+#: grpck.8.xml:43(refname) grpck.8.xml:49(command) grpck.8.xml:58(command)
+msgid "grpck"
+msgstr "grpck"
+
+#: login.defs.5.xml:316(term) login.1.xml:70(refentrytitle)
+#: login.1.xml:75(refname) login.1.xml:81(command) login.1.xml:89(command)
+#: login.1.xml:96(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:318(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS "
+"LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR "
+"MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> "
+"TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</"
+"phrase> USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:345(term)
+#, fuzzy
+#| msgid "newgrp"
+msgid "newgrp / sg"
+msgstr "newgrp"
+
+#: login.defs.5.xml:347(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:355(para)
+msgid ""
+"ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+"SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+
+#: login.defs.5.xml:371(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:382(para) login.defs.5.xml:390(para)
+msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+msgstr ""
+
+#: login.defs.5.xml:397(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:412(term)
+#, fuzzy
+msgid "sulogin"
+msgstr "login"
+
+#: login.defs.5.xml:414(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:423(para)
+msgid ""
+"CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+"PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN "
+"UID_MAX UID_MIN UMASK"
+msgstr ""
+
+#: login.defs.5.xml:436(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:445(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+# type: Plain text
+#: login.defs.5.xml:456(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Plain text
+#: login.defs.5.xml:472(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: login.access.5.xml:35(refentrytitle) login.access.5.xml:40(refname)
+msgid "login.access"
+msgstr "login.access"
+
+#: login.access.5.xml:41(refpurpose)
+msgid "login access control table"
+msgstr ""
+
+#: login.access.5.xml:46(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:52(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:60(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+
+# type: Plain text
+#: login.access.5.xml:65(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+
+#: login.access.5.xml:69(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+
+#: login.access.5.xml:83(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+
+#: login.access.5.xml:88(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+
+# type: Plain text
+#: login.1.xml:76(refpurpose)
+#, fuzzy
+msgid "begin session on the system"
+msgstr "login - apre una sessione sul sistema"
+
+#: login.1.xml:82(arg) login.1.xml:90(arg) login.1.xml:97(arg)
+#: login.1.xml:214(option) groupmems.8.xml:54(arg)
+msgid "-p"
+msgstr "-p"
+
+#: login.1.xml:83(replaceable) login.1.xml:91(replaceable)
+#: login.1.xml:98(replaceable)
+msgid "host"
+msgstr ""
+
+#: login.1.xml:83(arg) login.1.xml:91(arg) chfn.1.xml:56(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+#: login.1.xml:86(replaceable)
+msgid "ENV=VAR"
+msgstr ""
+
+#: login.1.xml:92(arg) login.1.xml:192(option) expiry.1.xml:54(arg)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:98(arg) chfn.1.xml:54(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+# type: Plain text
+#: login.1.xml:104(para)
+#, fuzzy
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+"<command>login</command> viene utilizzato per aprire una sessione sul "
+"sistema. Normalmente viene invocato automaticamente rispondendo al prompt "
+"<emphasis remap=\"I\">login:</emphasis> del terminale. <command>login</"
+"command> può essere trattato in maniera speciale dalla shell e non può "
+"essere invocato come sottoprocesso.  Normalmente <command>login</command> è "
+"trattato dalla shell come <emphasis remap=\"B\">exec login</emphasis> che "
+"termina la shell utente attuale.  L'esecuzione di <command>login</command> "
+"da una shell che non sia quella di login produce un messaggio d'errore."
+
+# type: Plain text
+#: login.1.xml:118(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+"All'utente viene quindi chiesta la password, se necessario. Durante questa "
+"operazione l'eco sul terminale è disabilitato per non rivelare la password. "
+"Solo un basso numero di tentativi falliti è permesso prima che "
+"<command>login</command> termini e che la connessione sia rallentata."
+
+# type: Plain text
+#: login.1.xml:125(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+"Se la scadenza delle password è abilitata per il proprio account, prima di "
+"proseguire ci può essere la richiesta di una nuova password. Il programma "
+"chiederà prima la vecchia password e poi la nuova per poter continuare. Per "
+"maggiori informazioni si faccia riferimento a "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+# type: Plain text
+#: login.1.xml:134(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+"Dopo aver completato correttamente l'accesso, vengono mostrati eventuali "
+"messaggi di sistema e si viene informati della presenza di nuova posta. Si "
+"può evitare di visualizzare i messaggi in <filename>/etc/motd</filename> "
+"creando un file vuoto chiamato <filename>.hushlogin</filename> nella propria "
+"directory di login. Il messaggio relativo alla presenza di posta è "
+"\"<emphasis>C'è nuova posta.</emphasis>\", \"<emphasis>C'è la solita posta.</"
+"emphasis>\" o \"<emphasis>Nessun messaggio di posta.</emphasis>\" a seconda "
+"dello stato della propria casella di posta."
+
+# type: Plain text
+#: login.1.xml:145(para)
+#, fuzzy
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Il proprio ID di utente e gruppo verranno poi impostati in base ai valori "
+"definiti nel file <filename>/etc/passwd</filename>.  I valori di <envar>"
+"$HOME</envar>, <envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</"
+"envar> e <envar>$MAIL</envar> sono impostatiin base ai corrispettivi valori "
+"nel file passwd.  I valori per ulimit, umask e nice possono essere impostati "
+"in base al campo GECOS.\n"
+"#-#-#-#-#  login.1.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"I propri ID di utente e gruppo vengono poi impostati in base ai valori "
+"definiti nel file <filename>/etc/passwd</filename>. I valori di <envar>"
+"$HOME</envar>, <envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</"
+"envar> e <envar>$MAIL</envar> sono impostati in base ai corrispettivi valori "
+"nel file delle password. I valori per ulimit, umask e nice possono essere "
+"impostati in base al campo GECOS."
+
+# type: Plain text
+#: login.1.xml:154(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+"In alcune installazioni la variabile d'ambiente <envar>$TERM</envar> può "
+"essere impostata in base al tipo di terminale della propria connessione, "
+"come specificato in <filename>/etc/ttytype</filename>."
+
+# type: Plain text
+#: login.1.xml:160(para)
+#, fuzzy
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Può anche essere eseguito uno script di inizializzazione per il proprio "
+"interprete dei comandi.  Guardare la pagian di manuale appropriata per "
+"maggiori informazioni su questa funzione.\n"
+"#-#-#-#-#  login.1.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Può anche essere eseguito uno script di inizializzazione per il proprio "
+"interprete dei comandi. Fare riferimento alla relativa pagina di manuale per "
+"maggiori informazioni su questa funzione."
+
+# type: Plain text
+#: login.1.xml:172(para) login.1.xml:248(para)
+#, fuzzy
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+"Il programma <command>login</command> NON è responsabile di rimuovere gli "
+"utenti dal file utmp.  La correzione del proprietario di una sessione di "
+"terminale è responsabilità di <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>  e "
+"<citerefentry><refentrytitle>init</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>.  Se si usa <command>login</command> senza <command>exec</"
+"command> dal prompt della shell, allora l'utente che si sta usando risulterà "
+"sempre connesso al sistema fino al termine della \"sottosessione\"."
+
+# type: Plain text
+#: login.1.xml:195(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr "Non effettua l'autenticazione, l'utente è già autenticato"
+
+#: login.1.xml:198(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+
+#: login.1.xml:206(option)
+msgid "-h"
+msgstr "-h"
+
+# type: Plain text
+#: login.1.xml:209(para)
+msgid "Name of the remote host for this login."
+msgstr "Nome dell'host remoto per questo login."
+
+# type: Plain text
+#: login.1.xml:217(para)
+msgid "Preserve environment."
+msgstr "Non modifica l'ambiente."
+
+# type: Plain text
+#: login.1.xml:225(para)
+#, fuzzy
+msgid "Perform autologin protocol for rlogin."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Attiva la modalità autologin di rlogin.\n"
+"#-#-#-#-#  login.1.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Attiva il protocollo autologin di rlogin."
+
+# type: Plain text
+#: login.1.xml:230(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+"Le opzioni <option>-r</option>, <option>-h</option> e <option>-f</option> "
+"possono essere utilizzate solo quando <command>login</command> viene "
+"invocato da root."
+
+# type: Plain text
+#: login.1.xml:239(para)
+#, fuzzy
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Questa versione di <command>login</command> ha molte altre opzioni, delle "
+"quali solo poche possono essere utilizzati in situazioni particolari.\n"
+"#-#-#-#-#  login.1.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Questa versione di <command>login</command> ha molte opzioni di "
+"compilazione; solo una parte di esse potrebbe essere in uso su un "
+"determinato sistema."
+
+# type: Plain text
+#: login.1.xml:244(para)
+#, fuzzy
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"La posizione dei file è soggetta a differenze nella configurazione di "
+"sistema.\n"
+"#-#-#-#-#  login.1.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"La posizione dei file è soggetta a differenze in base alla configurazione "
+"del sistema."
+
+#: login.1.xml:260(para)
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+
+#: login.1.xml:325(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+# type: Plain text
+#: login.1.xml:327(para)
+msgid "List of previous login sessions."
+msgstr "Elenco delle precedenti sessioni."
+
+#: login.1.xml:343(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+#: login.1.xml:345(para)
+msgid "System message of the day file."
+msgstr ""
+
+#: login.1.xml:349(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+# type: Plain text
+#: login.1.xml:351(para)
+msgid "Prevent non-root users from logging in."
+msgstr "Inibisce l\\'accesso al sistema per utenti diversi da root."
+
+#: login.1.xml:355(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+# type: Plain text
+#: login.1.xml:357(para)
+msgid "List of terminal types."
+msgstr "Elenco di tipi di terminale."
+
+#: login.1.xml:361(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+# type: Plain text
+#: login.1.xml:363(para)
+msgid "Suppress printing of system messages."
+msgstr ""
+"#-#-#-#-#    #-#-#-#-#\n"
+"Non fa mostrare i messaggi di sistema.\n"
+"#-#-#-#-#    #-#-#-#-#\n"
+"Impedisce che vengano mostrati i messaggi di sistema."
+
+# type: Plain text
+#: login.1.xml:377(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: limits.5.xml:35(refentrytitle) limits.5.xml:40(refname)
+msgid "limits"
+msgstr "limits"
+
+#: limits.5.xml:41(refpurpose)
+msgid "resource limits definition"
+msgstr ""
+
+#: limits.5.xml:47(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+
+#: limits.5.xml:55(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+
+#: limits.5.xml:61(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr ""
+
+#: limits.5.xml:64(emphasis)
+msgid "user LIMITS_STRING"
+msgstr ""
+
+#: limits.5.xml:67(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+
+#: limits.5.xml:73(para)
+msgid "The valid identifiers are:"
+msgstr ""
+
+#: limits.5.xml:76(para)
+msgid "A: max address space (KB)"
+msgstr ""
+
+#: limits.5.xml:77(para)
+msgid "C: max core file size (KB)"
+msgstr ""
+
+#: limits.5.xml:78(para)
+msgid "D: max data size (KB)"
+msgstr ""
+
+#: limits.5.xml:79(para)
+msgid "F: maximum filesize (KB)"
+msgstr ""
+
+#: limits.5.xml:80(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr ""
+
+#: limits.5.xml:81(para)
+msgid "N: max number of open files"
+msgstr ""
+
+#: limits.5.xml:82(para)
+msgid "R: max resident set size (KB)"
+msgstr ""
+
+#: limits.5.xml:83(para)
+msgid "S: max stack size (KB)"
+msgstr ""
+
+#: limits.5.xml:84(para)
+msgid "T: max CPU time (MIN)"
+msgstr ""
+
+#: limits.5.xml:85(para)
+msgid "U: max number of processes"
+msgstr ""
+
+# type: Plain text
+#: limits.5.xml:86(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:91(para)
+msgid "L: max number of logins for this user"
+msgstr ""
+
+# type: Plain text
+#: limits.5.xml:92(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:97(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+
+#: limits.5.xml:99(para)
+msgid "O: max real time priority"
+msgstr ""
+
+#: limits.5.xml:102(para)
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+
+#: limits.5.xml:108(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"      username L2D2048N5\n"
+"      username L2 D2048 N5\n"
+"    "
+msgstr ""
+
+#: limits.5.xml:113(para)
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. A "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+
+#: limits.5.xml:120(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+
+#: limits.5.xml:127(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+
+#: limits.5.xml:132(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+
+#: limits.5.xml:143(filename)
+msgid "/etc/limits"
+msgstr ""
+
+# type: Plain text
+#: limits.5.xml:151(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: lastlog.8.xml:35(refentrytitle) lastlog.8.xml:40(refname)
+#: lastlog.8.xml:46(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: lastlog.8.xml:41(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+
+# type: Plain text
+#: lastlog.8.xml:55(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+"<command>lastlog</command> mostra il log degli ultimi accessi, contenuto nel "
+"file <filename>/var/log/lastlog</filename>. Le informazioni mostrate sono il "
+"<emphasis>nome utente</emphasis>, la <emphasis>porta</emphasis>, e la "
+"<emphasis>data dell'ultimo accesso</emphasis>. Il comportamento predefinito "
+"(nessuna opzione specificata) è di mostrare i record di ultimo accesso per "
+"tutti gli utenti, nell'ordine in cui compaiono in <filename>/etc/passwd</"
+"filename>."
+
+# type: TP
+#: lastlog.8.xml:67(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr "Il comando <command>lastlog</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: lastlog.8.xml:72(term)
+msgid ""
+"<option>-b</option>, <option>--before</option><replaceable>DAYS</replaceable>"
+msgstr ""
+
+# type: Plain text
+#: lastlog.8.xml:76(para)
+#, fuzzy
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+"Mostra solo i record di ultimo accesso più recenti di un numero di I<GIORNI>."
+
+# type: IP
+#: lastlog.8.xml:90(term) faillog.8.xml:140(term)
+msgid ""
+"<option>-t</option>, <option>--time</option><replaceable>DAYS</replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>GIORNI</replaceable>"
+
+# type: Plain text
+#: lastlog.8.xml:95(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+"Mostra solo i record di ultimo accesso più recenti di un numero di <emphasis "
+"remap=\"I\">GIORNI</emphasis>."
+
+# type: IP
+#: lastlog.8.xml:102(term) faillog.8.xml:151(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#| "replaceable>"
+msgid ""
+"<option>-u</option>, <option>--user</option><replaceable>LOGIN</replaceable>|"
+"<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</replaceable>"
+
+# type: Plain text
+#: lastlog.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "Print the lastlog record for user with specified <emphasis remap=\"I"
+#| "\">LOGIN</emphasis> only."
+msgid "Print the lastlog record of the specified user(s)."
+msgstr ""
+"Mostra il record di ultimo accesso per l'utente specificato da <emphasis "
+"remap=\"I\">LOGIN</emphasis>."
+
+#: lastlog.8.xml:110(para) faillog.8.xml:161(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+
+# type: Plain text
+#: lastlog.8.xml:122(para)
+#, fuzzy
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Se l'utente non si è mai connesso verrà mostrato, al posto della porta e "
+"della data, il messaggio <emphasis>\"**Never logged in**\"</emphasis> (**Mai "
+"connesso**).\n"
+"#-#-#-#-#  lastlog.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Se l'utente non ha mai effettuato accessi al sistema viene mostrato, al "
+"posto della porta e della data, il messaggio <emphasis>\"**Nessun accesso "
+"effettuato**\"</emphasis>."
+
+#: lastlog.8.xml:127(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+
+# type: SH
+#: lastlog.8.xml:135(title) groups.1.xml:65(title) chsh.1.xml:106(title)
+#: chage.1.xml:193(title)
+msgid "NOTE"
+msgstr "NOTA"
+
+#: lastlog.8.xml:136(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+
+#: lastlog.8.xml:150(filename)
+msgid "/var/log/lastlog"
+msgstr ""
+
+#: lastlog.8.xml:152(para)
+msgid "Database times of previous user logins."
+msgstr ""
+
+# type: Plain text
+#: lastlog.8.xml:160(para)
+#, fuzzy
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Grandi intervalli nei numeri di uid provocheranno una prolungata esecuzione "
+"del programma lastlog senza alcun output sullo schermo (i.e. se mmdf=800 e "
+"l'ultimo uid=170, sembrerà che il programma rimanga appeso mentre elabora "
+"gli uid tra 171 e 799).\n"
+"#-#-#-#-#  lastlog.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Se ci sono dei grossi scarti tra i valori di UID, il programma lastlog può "
+"restare in esecuzione per un tempo prolungato senza produrre output sullo "
+"schermo (ad es. se mmdf=800 e l'ultimo UID vale 170, il programma sembrerà "
+"bloccato come se esaminasse gli UID tra 171 e 799)."
+
+#: gshadow.5.xml:33(refentrytitle) gshadow.5.xml:38(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+# type: Plain text
+#: gshadow.5.xml:39(refpurpose)
+msgid "shadowed group file"
+msgstr ""
+
+# type: Plain text
+#: gshadow.5.xml:44(para)
+#, fuzzy
+#| msgid ""
+#| "<emphasis remap=\"I\">shadow</emphasis> contains the encrypted password "
+#| "information for user's accounts and optional the password aging "
+#| "information. Included is:"
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+"<emphasis remap=\"I\">shadow</emphasis> contiene le informazioni sulle "
+"password cifrate per gli account degli utenti e, opzionalmente, le "
+"informazioni sulla durata delle password. Sono inclusi:"
+
+#: gshadow.5.xml:54(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+
+# type: Plain text
+#: gshadow.5.xml:60(emphasis)
+msgid "group name"
+msgstr ""
+
+#: gshadow.5.xml:62(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr ""
+
+# type: Plain text
+#: gshadow.5.xml:75(para)
+#, fuzzy
+msgid ""
+"If the password field contains some string that is not a valid result of "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, for instance ! or *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+"<command>gpasswd</command> invocata da un amministratore di gruppo con il "
+"solo nome del gruppo richiede solamente la password di gruppo. Se la "
+"password è impostata i membri possono ancora usare "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> senza la password, i non-membri devono fornire la password."
+
+# type: Plain text
+#: gshadow.5.xml:82(para)
+#, fuzzy
+#| msgid ""
+#| "The new value of the user's password file comment field. It is normally "
+#| "modified using the <citerefentry><refentrytitle>chfn</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgid ""
+"The password is used when an user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"Il campo commento del nuovo utente nel file password. Normalmente viene "
+"modificato usando l'utilità <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: gshadow.5.xml:88(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+
+# type: Plain text
+#: gshadow.5.xml:98(para)
+#, fuzzy
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Questa informazione ha la precedenza nei confronti di qualunque informazione "
+"sulla password o sulla scadenza della password presente in <filename>/etc/"
+"passwd</filename>.\n"
+"#-#-#-#-#  shadow.5.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Queste informazioni hanno la precedenza su qualunque informazione sulle "
+"password o sulla loro durata presente in <filename>/etc/passwd</filename>."
+
+#: gshadow.5.xml:106(emphasis)
+msgid "administrators"
+msgstr ""
+
+# type: Plain text
+#: gshadow.5.xml:108(para) gshadow.5.xml:124(para)
+#, fuzzy
+msgid "It must be a comma-separated list of user names."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"- una lista valida di membri ed amministratori\n"
+"#-#-#-#-#  grpck.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"- una lista valida di membri e amministratori"
+
+#: gshadow.5.xml:111(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr ""
+
+#: gshadow.5.xml:115(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+
+#: gshadow.5.xml:122(emphasis)
+msgid "members"
+msgstr ""
+
+#: gshadow.5.xml:127(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+
+# type: Plain text
+#: gshadow.5.xml:131(para)
+#, fuzzy
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Questa informazione ha la precedenza nei confronti di qualunque informazione "
+"sulla password o sulla scadenza della password presente in <filename>/etc/"
+"passwd</filename>.\n"
+"#-#-#-#-#  shadow.5.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Queste informazioni hanno la precedenza su qualunque informazione sulle "
+"password o sulla loro durata presente in <filename>/etc/passwd</filename>."
+
+# type: Plain text
+#: gshadow.5.xml:160(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Plain text
+#: grpck.8.xml:44(refpurpose)
+msgid "verify integrity of group files"
+msgstr "verifica l'integrità dei file di gruppo"
+
+# type: Plain text
+#: grpck.8.xml:70(para)
+#, fuzzy
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+"<command>grpck</command> verifica l'integrità delle informazioni di "
+"autenticazione del sistema. Ogni voce in <filename>/etc/group</filename> e "
+"in <filename>/etc/gshadow</filename> viene controllata per verificare che "
+"abbia il formato corretto e dati validi in ciascun campo. Viene richiesto "
+"all'utente di rimuovere le voci che non hanno un formato appropriato o che "
+"hanno altri errori impossibili da correggere."
+
+# type: Plain text
+#: grpck.8.xml:87(para)
+#, fuzzy
+#| msgid "a unique group name"
+msgid "a unique and valid group name"
+msgstr "un nome univoco di gruppo"
+
+#: grpck.8.xml:90(para)
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+
+# type: Plain text
+#: grpck.8.xml:97(para)
+#, fuzzy
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"- una lista valida di membri ed amministratori\n"
+"#-#-#-#-#  grpck.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"- una lista valida di membri e amministratori"
+
+# type: Plain text
+#: grpck.8.xml:103(para)
+#, fuzzy
+#| msgid ""
+#| "These four programs all operate on the normal and shadow password and "
+#| "group files: <filename>/etc/passwd</filename>, <filename>/etc/group</"
+#| "filename>, <filename>/etc/shadow</filename>, and <filename>/etc/gshadow</"
+#| "filename>."
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+"Questi quattro programmi agiscono tutti sui file normali e oscurati "
+"(shadow)  delle password e dei gruppi: <filename>/etc/passwd</filename>, "
+"<filename>/etc/group</filename>, <filename>/etc/shadow</filename> e "
+"<filename>/etc/gshadow</filename>."
+
+# type: Plain text
+#: grpck.8.xml:111(para)
+#, fuzzy
+#| msgid ""
+#| "The checks for correct number of fields and unique group name are fatal. "
+#| "If the entry has the wrong number of fields, the user will be prompted to "
+#| "delete the entire line. If the user does not answer affirmatively, all "
+#| "further checks are bypassed. An entry with a duplicated group name is "
+#| "prompted for deletion, but the remaining checks will still be made. All "
+#| "other errors are warnings and the user is encouraged to run the "
+#| "<command>groupmod</command> command to correct the error."
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+"Gli errori nelle verifiche sul corretto numero di campi e sull'univocità del "
+"nome del gruppo sono irrimediabili. Se una voce ha un numero errato di "
+"campi, all'utente viene chiesto di cancellare l'intera riga; se l'utente non "
+"risponde affermativamente, vengono omessi tutti gli ulteriori controlli. "
+"Viene richiesta la cancellazione anche per le voci aventi il nome del gruppo "
+"duplicato, ma i rimanenti controlli vengono ugualmente effettuati. Tutti gli "
+"altri errori non sono gravi e l'utente è invitato a eseguire il comando "
+"<command>groupmod</command> per correggerli."
+
+# type: Plain text
+#: grpck.8.xml:122(para)
+#, fuzzy
+#| msgid ""
+#| "The commands which operate on the <filename>/etc/group</filename> file "
+#| "are not able to alter corrupted or duplicated entries. <command>grpck</"
+#| "command> should be used in those circumstances to remove the offending "
+#| "entry."
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+"I comandi che operano sul file <filename>/etc/group</filename> non sono in "
+"grado di modificare voci corrotte o duplicate; in tali circostanze va usato "
+"<command>grpck</command> per rimuovere la voce scorretta."
+
+# type: Plain text
+#: grpck.8.xml:134(para)
+#, fuzzy
+#| msgid "The options which apply to the <command>pwck</command> command are:"
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr "Il comando <command>pwck</command> accetta le seguenti opzioni:"
+
+#: grpck.8.xml:141(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+
+#: grpck.8.xml:151(para)
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+
+#: grpck.8.xml:160(para)
+#, fuzzy
+#| msgid ""
+#| "By default, <command>pwck</command> operates on the files <filename>/etc/"
+#| "passwd</filename> and <filename>/etc/shadow</filename>. The user may "
+#| "select alternate files with the <emphasis remap=\"I\">passwd</emphasis> "
+#| "and <emphasis remap=\"I\">shadow</emphasis> parameters."
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\"> and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+"Come impostazione predefinita, <command>pwck</command> opera sui file "
+"<filename>/etc/passwd</filename> e in <filename>/etc/shadow</filename>. "
+"L'utente può selezionare file alternativi con i parametri <emphasis remap=\"I"
+"\">passwd</emphasis> e <emphasis remap=\"I\">shadow</emphasis>."
+
+# type: Plain text
+#: grpck.8.xml:228(para)
+msgid "one or more bad group entries"
+msgstr "una o più voci di gruppo contengono errori"
+
+# type: Plain text
+#: grpck.8.xml:234(para)
+msgid "can't open group files"
+msgstr "impossibile aprire i file dei gruppi"
+
+# type: Plain text
+#: grpck.8.xml:240(para)
+msgid "can't lock group files"
+msgstr "impossibile fare il lock dei file dei gruppi"
+
+# type: Plain text
+#: grpck.8.xml:246(para)
+msgid "can't update group files"
+msgstr "impossibile aggiornare i file dei gruppi"
+
+# type: TP
+#: grpck.8.xml:210(para)
+#, fuzzy
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> esce con i seguenti valori:\n"
+"#-#-#-#-#  grpck.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> restituisce i seguenti valori:"
+
+# type: Plain text
+#: grpck.8.xml:255(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gshadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: groups.1.xml:34(refentrytitle) groups.1.xml:39(refname)
+#: groups.1.xml:45(command)
+msgid "groups"
+msgstr "groups"
+
+# type: Plain text
+#: groups.1.xml:40(refpurpose)
+msgid "display current group names"
+msgstr "mostra i nomi dei gruppi correnti"
+
+#: groups.1.xml:47(replaceable) chfn.1.xml:58(replaceable)
+msgid "user"
+msgstr ""
+
+# type: Plain text
+#: groups.1.xml:54(para)
+#, fuzzy
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+"Per ciascuno dei gruppi correnti, <command>groups</command> mostra i nomi o "
+"i valori ID. Se un valore non ha nessuna voce corrispondente in <filename>/"
+"etc/group</filename>, esso viene mostrato in forma numerica. Se viene "
+"specificato un <emphasis remap=\"I\">utente</emphasis>, vengono mostrati i "
+"gruppi a cui appartiene quel determinato <emphasis remap=\"I\">utente</"
+"emphasis>."
+
+# type: Plain text
+#: groups.1.xml:66(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change their current "
+"real and effective group ID."
+msgstr ""
+"Sui sistemi che non supportano l'appartenenza a più gruppi "
+"contemporaneamente, vengono riportate le informazioni da <filename>/etc/"
+"group</filename>. L'utente deve usare <command>newgrp</command> o "
+"<command>sg</command> per cambiare gli ID dei gruppi reale ed efficace."
+
+# type: Plain text
+#: groups.1.xml:88(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+# type: Plain text
+#: groupmod.8.xml:44(refpurpose)
+msgid "modify a group definition on the system"
+msgstr ""
+
+# type: TH
+#: groupmod.8.xml:53(replaceable)
+msgid "GROUP"
+msgstr ""
+
+#: groupmod.8.xml:59(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+
+# type: Plain text
+#: groupmod.8.xml:68(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr "Il comando <command>groupmod</command> accetta le seguenti opzioni:"
+
+# type: TP
+#: groupmod.8.xml:74(term) groupadd.8.xml:94(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+msgstr ""
+
+# type: Plain text
+#: groupmod.8.xml:78(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the group will be changed from <replaceable>GROUP</"
+#| "replaceable> to <replaceable>NEW_GROUP</replaceable> name."
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+"Il nome del gruppo verrà modificato da <replaceable>gruppo</replaceable> a "
+"<replaceable>nome_gruppo</replaceable>."
+
+# type: Plain text
+#: groupmod.8.xml:82(para)
+#, fuzzy
+#| msgid ""
+#| "The numerical value of the user's ID. This value must be unique, unless "
+#| "the <option>-o</option> option is used. The value must be non-negative. "
+#| "The default is to use the smallest ID value greater than 999 and greater "
+#| "than every other user. Values between 0 and 999 are typically reserved "
+#| "for system accounts."
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used. Values between 0 and 999 are typically reserved for system groups."
+msgstr ""
+"Il valore numerico dell'identificatore (ID) del gruppo.  Questo valore deve "
+"essere univoco, a meno che non venga usata l'opzione <option>-o</option>.  "
+"Il valore deve essere non-negativo.  La scelta predefinita è quella di usare "
+"il minimo valore di ID superiore a 999 e superiore a qualunque altro "
+"gruppo.  Valori tra 0 e 999 sono tipicamente riservati per account di "
+"sistema."
+
+#: groupmod.8.xml:89(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+
+# type: TP
+#: groupmod.8.xml:104(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option><replaceable>NEW_GROUP</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: groupmod.8.xml:109(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+"Il nome del gruppo verrà modificato da <replaceable>gruppo</replaceable> a "
+"<replaceable>nome_gruppo</replaceable>."
+
+#: groupmod.8.xml:120(para)
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+
+#: groupmod.8.xml:219(para)
+msgid "group name already in use"
+msgstr ""
+
+# type: TP
+#: groupmod.8.xml:183(para)
+#, fuzzy
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> esce con i seguenti valori:\n"
+"#-#-#-#-#  grpck.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> restituisce i seguenti valori:"
+
+# type: Plain text
+#: groupmod.8.xml:234(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Plain text
+#: groupmems.8.xml:44(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr ""
+
+#: groupmems.8.xml:51(replaceable) groupmems.8.xml:52(replaceable)
+msgid "user_name"
+msgstr ""
+
+#: groupmems.8.xml:51(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:52(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+#: groupmems.8.xml:53(replaceable)
+msgid "group_name"
+msgstr ""
+
+#: groupmems.8.xml:53(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+#: groupmems.8.xml:54(arg)
+msgid "-l"
+msgstr "-l"
+
+#: groupmems.8.xml:61(para)
+msgid ""
+"The <command>groupmems</command> command allows a user to administer his/her "
+"own group membership list without the requirement of superuser privileges. "
+"The <command>groupmems</command> utility is for systems that configure its "
+"users to be in their own name sake primary group (i.e., guest / guest)."
+msgstr ""
+
+#: groupmems.8.xml:69(para)
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+
+# type: Plain text
+#: groupmems.8.xml:76(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr "Il comando <command>groupmems</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: groupmems.8.xml:82(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--maximum</option><replaceable>MAX</"
+#| "replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option><replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option><replaceable>MAX</replaceable>"
+
+#: groupmems.8.xml:84(para)
+msgid "Add an user to the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:85(para) groupmems.8.xml:101(para)
+#: groupmems.8.xml:126(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+
+# type: IP
+#: groupmems.8.xml:93(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option><replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>GIORNI</replaceable>"
+
+#: groupmems.8.xml:95(para)
+msgid "Delete a user from the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:96(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+
+# type: IP
+#: groupmems.8.xml:109(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#| "replaceable>"
+msgid ""
+"<option>-g</option>, <option>--group</option><replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</replaceable>"
+
+#: groupmems.8.xml:111(para)
+msgid "The superuser can specify which group membership list to modify."
+msgstr ""
+
+# type: IP
+#: groupmems.8.xml:117(term) chage.1.xml:128(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: groupmems.8.xml:119(para)
+msgid "List the group membership list."
+msgstr ""
+
+# type: TP
+#: groupmems.8.xml:123(term)
+#, fuzzy
+#| msgid "<option>-e</option>, <option>--expire</option>"
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+#: groupmems.8.xml:125(para)
+msgid "Purge all users from the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:137(title)
+msgid "SETUP"
+msgstr ""
+
+#: groupmems.8.xml:138(para)
+msgid ""
+"The <command>groupmems</command> executable should be in mode <literal>2770</"
+"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
+"emphasis>. The system administrator can add users to group <emphasis>groups</"
+"emphasis> to allow or disallow them using the <command>groupmems</command> "
+"utility to manage their own group membership list."
+msgstr ""
+
+#: groupmems.8.xml:147(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2770 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+"    "
+msgstr ""
+
+# type: Plain text
+#: groupmems.8.xml:179(para)
+msgid "secure group account information"
+msgstr "informazioni sicure sugli account di gruppo"
+
+# type: Plain text
+#: groupmems.8.xml:187(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Plain text
+#: groupdel.8.xml:44(refpurpose)
+msgid "delete a group"
+msgstr "Rimuove un gruppo"
+
+# type: Plain text
+#: groupdel.8.xml:58(para)
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <emphasis remap=\"I\">group</emphasis>. "
+"The named group must exist."
+msgstr ""
+"Il comando <command>groupdel</command> modifica i file di account di "
+"sistema, rimuovendo tutte le voci che si riferiscono a <emphasis remap=\"I"
+"\">gruppo</emphasis>.  Il gruppo nominato deve esistere."
+
+# type: Plain text
+#: groupdel.8.xml:66(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+"Non si può rimuovere un gruppo che sia gruppo primario di un utente. Occorre "
+"rimuovere l'utente prima di rimuovere il gruppo."
+
+# type: Plain text
+#: groupdel.8.xml:70(para)
+#, fuzzy
+#| msgid ""
+#| "You must manually check all file systems to insure that no files remain "
+#| "with the named group as the file group ID."
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+"Occorre controllare manualmente tutti i filesystem per assicurarsi che non "
+"rimanga alcun file avente come ID di gruppo il gruppo specificato."
+
+# type: Plain text
+#: groupdel.8.xml:132(para)
+msgid "can't remove user's primary group"
+msgstr "operazione impossibile perché il gruppo è primario per un utente"
+
+# type: TP
+#: groupdel.8.xml:108(para)
+#, fuzzy
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> esce con i seguenti valori:\n"
+"#-#-#-#-#  grpck.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> restituisce i seguenti valori:"
+
+# type: Plain text
+#: groupdel.8.xml:147(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+# type: Plain text
+#: groupadd.8.xml:48(refpurpose)
+msgid "create a new group"
+msgstr "Crea un nuovo gruppo"
+
+# type: Plain text
+#: groupadd.8.xml:65(para)
+#, fuzzy
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+"Il comando <command>groupadd</command> crea un nuovo account di gruppo "
+"usando i valori specificati sulla linea di comando ed i valori predefiniti "
+"dal sistema.  Il nuovo gruppo verrà aggiunto ai file di sistema che lo "
+"necessitano."
+
+# type: Plain text
+#: groupadd.8.xml:74(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr "Il comando <command>groupadd</command> accetta le seguenti opzioni:"
+
+#: groupadd.8.xml:84(para)
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+
+# type: Plain text
+#: groupadd.8.xml:98(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than 999 and greater than "
+"every other group. Values between 0 and 999 are typically reserved for "
+"system accounts."
+msgstr ""
+"Il valore numerico dell'identificatore (ID) del gruppo. Questo valore deve "
+"essere univoco, a meno che non venga usata l'opzione <option>-o</option>.  "
+"Il valore deve essere non-negativo.  La scelta predefinita è quella di usare "
+"il minimo valore di ID superiore a 999 e superiore a qualunque altro "
+"gruppo.  Valori tra 0 e 999 sono tipicamente riservati per account di "
+"sistema."
+
+#: groupadd.8.xml:118(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+
+# type: IP
+#: groupadd.8.xml:123(para)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#| "replaceable>"
+msgid ""
+"Example: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable><option>-K </"
+"option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</replaceable>"
+
+#: groupadd.8.xml:127(para)
+msgid ""
+"Note: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+
+#: groupadd.8.xml:139(para)
+msgid "This option permits to add a group with a non-unique GID."
+msgstr ""
+
+# type: Plain text
+#: groupadd.8.xml:171(para)
+#, fuzzy
+#| msgid "create a new group"
+msgid "Create a system group."
+msgstr "Crea un nuovo gruppo"
+
+#: groupadd.8.xml:174(para)
+msgid ""
+"The numeric identifiers of new system groups are choosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+
+#: groupadd.8.xml:225(para)
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+
+#: groupadd.8.xml:231(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr ""
+
+# type: Plain text
+#: groupadd.8.xml:234(para)
+#, fuzzy
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Non è possibile aggiungere un utente ad un gruppo NIS. Questo deve essere "
+"fatto sul server NIS."
+
+#: groupadd.8.xml:238(para)
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+
+#: groupadd.8.xml:271(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr ""
+
+#: groupadd.8.xml:277(para)
+msgid "group name not unique"
+msgstr ""
+
+# type: TP
+#: groupadd.8.xml:247(para)
+#, fuzzy
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> esce con i seguenti valori:\n"
+"#-#-#-#-#  grpck.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"Il comando <command>grpck</command> restituisce i seguenti valori:"
+
+# type: Plain text
+#: groupadd.8.xml:292(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:49(phrase)
+#, fuzzy
+#| msgid "administer the <placeholder-1/> file"
+msgid "administer <placeholder-1/>"
+msgstr "amministra il file <placeholder-1/>"
+
+#: gpasswd.1.xml:52(phrase)
+#, fuzzy
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#: gpasswd.1.xml:63(replaceable)
+#, fuzzy
+msgid "option"
+msgstr "opzioni"
+
+#: gpasswd.1.xml:73(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+
+# type: Plain text
+#: gpasswd.1.xml:81(para)
+#, fuzzy
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+"<command>gpasswd</command> viene usato per amministrare il file <filename>/"
+"etc/group</filename> (ed il file <filename>/etc/gshadow</filename> se "
+"compilato con SHADOWGRP definito). Ogni gruppo può avere amministratori, "
+"membri ed una password. L'amministratore di sistema può usare l'opzione "
+"<option>-A</option> per definire l'amministratore/gli amministratori di "
+"gruppo e l'opzione <option>-M</option> per definire i membri ed ha tutti i "
+"diritti degli amministratori di gruppo e dei membri."
+
+#: gpasswd.1.xml:86(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+
+# type: Plain text
+#: gpasswd.1.xml:93(para)
+#, fuzzy
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+"<command>gpasswd</command> invocata da un amministratore di gruppo con il "
+"solo nome del gruppo richiede solamente la password di gruppo. Se la "
+"password è impostata i membri possono ancora usare "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> senza la password, i non-membri devono fornire la password."
+
+# type: SS
+#: gpasswd.1.xml:101(title)
+msgid "Notes about group passwords"
+msgstr "Note sulle password di gruppo"
+
+# type: Plain text
+#: gpasswd.1.xml:102(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+"Le password di gruppo non un problema di sicurezza perché più di una persona "
+"deve conoscerle. Ciononostante i gruppi sono uno strumento molto utile per "
+"la cooperazione tra vari utenti."
+
+# type: Plain text
+#: gpasswd.1.xml:113(para)
+#, fuzzy
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr ""
+"Le opzioni <option>-r</option>, <option>-h</option> e <option>-f</option> "
+"possono essere utilizzate solo quando <command>login</command> viene "
+"invocato da root."
+
+#: gpasswd.1.xml:117(para)
+msgid "The options cannot be combined."
+msgstr ""
+
+# type: Plain text
+#: gpasswd.1.xml:120(para)
+#, fuzzy
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr "Il comando <command>passwd</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: gpasswd.1.xml:125(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--maximum</option><replaceable>MAX</"
+#| "replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option><replaceable>user</replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option><replaceable>MAX</replaceable>"
+
+# type: Plain text
+#: gpasswd.1.xml:129(para)
+#, fuzzy
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Il nome del gruppo verrà modificato da <replaceable>gruppo</replaceable> a "
+"<replaceable>nome_gruppo</replaceable>."
+
+# type: IP
+#: gpasswd.1.xml:138(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option><replaceable>user</replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>GIORNI</replaceable>"
+
+# type: Plain text
+#: gpasswd.1.xml:142(para)
+#, fuzzy
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+"Il nome del gruppo verrà modificato da <replaceable>gruppo</replaceable> a "
+"<replaceable>nome_gruppo</replaceable>."
+
+# type: IP
+#: gpasswd.1.xml:151(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--remove</option>"
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: gpasswd.1.xml:155(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. Only "
+"group members will be allowed to use <command>newgrp</command> to join the "
+"named <replaceable>group</replaceable>."
+msgstr ""
+
+# type: IP
+#: gpasswd.1.xml:166(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: gpasswd.1.xml:170(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. Only "
+"group members will be allowed to use <command>newgrp</command> to join the "
+"named <replaceable>group</replaceable>."
+msgstr ""
+
+# type: IP
+#: gpasswd.1.xml:181(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#| "replaceable>"
+msgid ""
+"<option>-A</option>, <option>--administrators</option><replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-u</option>, <option>--user</option> <replaceable>LOGIN</replaceable>"
+
+# type: Plain text
+#: gpasswd.1.xml:185(para)
+#, fuzzy
+msgid "Set the list of administrative users."
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"- una lista valida di membri ed amministratori\n"
+"#-#-#-#-#  grpck.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"- una lista valida di membri e amministratori"
+
+# type: IP
+#: gpasswd.1.xml:193(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-M</option>, <option>--members</option><replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>GIORNI</replaceable>"
+
+#: gpasswd.1.xml:197(para)
+msgid "Set the list of group members."
+msgstr ""
+
+#: gpasswd.1.xml:207(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+
+# type: Plain text
+#: gpasswd.1.xml:252(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: faillog.8.xml:34(refentrytitle) faillog.8.xml:39(refname)
+#: faillog.8.xml:45(command) faillog.5.xml:34(refentrytitle)
+#: faillog.5.xml:39(refname) faillog.5.xml:86(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+# type: Plain text
+#: faillog.8.xml:40(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr "mostra i conteggi e imposta i limiti degli accessi falliti"
+
+# type: Plain text
+#: faillog.8.xml:54(para)
+#, fuzzy
+#| msgid ""
+#| "<command>faillog</command> formats the contents of the failure log from "
+#| "<filename>/var/log/faillog</filename> database. It also can be used for "
+#| "maintains failure counters and limits. Run <command>faillog</command> "
+#| "without arguments display only list of user faillog records who have ever "
+#| "had a login failure."
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+"<command>faillog</command> mostra il log degli accessi falliti, contenuto "
+"nel file <filename>/var/log/faillog</filename>; può anche essere usato per "
+"impostare i conteggi e i limiti dei tentativi falliti. Eseguire "
+"<command>faillog</command> senza argomenti per ottenere un elenco degli "
+"utenti che hanno fallito almeno un tentativo di accesso."
+
+# type: Plain text
+#: faillog.8.xml:65(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr "Il comando <command>faillog</command> accetta le seguenti opzioni:"
+
+#: faillog.8.xml:73(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+
+# type: IP
+#: faillog.8.xml:86(term)
+msgid ""
+"<option>-l</option>, <option>--lock-time</option><replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-time</option><replaceable>SEC</"
+"replaceable>"
+
+# type: Plain text
+#: faillog.8.xml:91(para)
+#, fuzzy
+#| msgid ""
+#| "Lock account to <replaceable>SEC</replaceable> seconds after failed login."
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+"Blocca l'account per <replaceable>SEC</replaceable> secondi dopo un "
+"tentativo di accesso fallito."
+
+#: faillog.8.xml:95(para) faillog.8.xml:121(para) faillog.8.xml:133(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+
+# type: IP
+#: faillog.8.xml:102(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option><replaceable>MAX</replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option><replaceable>MAX</replaceable>"
+
+# type: Plain text
+#: faillog.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "Reset the counters of login failures or one record if used with the "
+#| "<option>-u</option><replaceable>LOGIN</replaceable> option. Write access "
+#| "to <filename>/var/log/faillog</filename> is required for this option."
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+"Azzera i conteggi degli accessi falliti per tutti gli utenti, o per un "
+"utente solo se usato con l'opzione <option>-u</option> <replaceable>LOGIN</"
+"replaceable>. Per usare questa opzione è richiesto l'accesso in scrittura a "
+"<filename>/var/log/faillog</filename>."
+
+#: faillog.8.xml:111(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+
+#: faillog.8.xml:116(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+
+# type: IP
+#: faillog.8.xml:128(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:130(para)
+msgid "Reset the counters of login failures."
+msgstr ""
+
+# type: Plain text
+#: faillog.8.xml:144(para)
+#, fuzzy
+#| msgid ""
+#| "Display faillog records more recent than <replaceable>DAYS</replaceable>. "
+#| "The <option>-t</option> flag overrides the use of <option>-u</option>."
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+"Mostra i record degli accessi falliti più recenti di un numero di "
+"<replaceable>GIORNI</replaceable>. L'opzione <option>-t</option> ha la "
+"precedenza sull'uso di <option>-u</option>."
+
+# type: Plain text
+#: faillog.8.xml:156(para)
+#, fuzzy
+#| msgid ""
+#| "Display faillog record or maintains failure counters and limits (if used "
+#| "with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+#| "options) only for user with <replaceable>LOGIN</replaceable>."
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+"Mostra il record degli accessi falliti o, se sono state usate con le opzioni "
+"<option>-r</option>, <option>-m</option> o <option>-l</option>, imposta "
+"conteggi e limiti solo per l'utente specificato da <replaceable>LOGIN</"
+"replaceable>."
+
+# type: Plain text
+#: faillog.8.xml:174(para)
+#, fuzzy
+#| msgid ""
+#| "The <option>-r</option>, <option>-h</option> and <option>-f</option> "
+#| "options are only used when <command>login</command> is invoked by root."
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+"Le opzioni <option>-r</option>, <option>-h</option> e <option>-f</option> "
+"possono essere utilizzate solo quando <command>login</command> viene "
+"invocato da root."
+
+#: faillog.8.xml:179(para)
+msgid ""
+"NOTE: in display mode, only the records of users which currently exist in "
+"the system are displayed. In the other modes (when the <option>-l</option>, "
+"<option>-m</option>, or <option>-r</option> options are used), the records "
+"of the user, or the range of users, or all the users that may have an entry "
+"in the faillog database will be changed. This is useful to reset records of "
+"users that have been deleted or set a policy in advance for a range of users."
+msgstr ""
+
+# type: Plain text
+#: faillog.8.xml:192(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+"<command>faillog</command> mostra solo gli utenti che non hanno effettuato "
+"nessun accesso corretto dopo l'ultimo tentativo fallito. Un utente che abbia "
+"completato correttamente un accesso dopo l'ultimo tentativo fallito è "
+"mostrato solo se viene richiesto esplicitamente con l'opzione <option>-u</"
+"option> o se viene richiesto di mostrare tutti gli utenti con l'opzione "
+"<option>-a</option>."
+
+#: faillog.8.xml:205(filename) faillog.5.xml:74(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+# type: Plain text
+#: faillog.8.xml:207(para) faillog.5.xml:76(para)
+msgid "Failure logging file."
+msgstr ""
+
+# type: Plain text
+#: faillog.8.xml:215(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Plain text
+#: faillog.5.xml:40(refpurpose)
+msgid "login failure logging file"
+msgstr "File di log degli accessi falliti"
+
+#: faillog.5.xml:45(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+
+# type: Plain text
+#: faillog.5.xml:49(para)
+#, fuzzy
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"whiche the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+"<filename>/var/log/faillog</filename> mantiene i conteggi e i limiti dei "
+"tentativi di accesso falliti per ciascun account. Il file è composto da "
+"record di lunghezza fissa, indicizzati dal valore numerico di UID. Ciascun "
+"record contiene il conteggio degli accessi falliti a partire dall'ultimo "
+"login corretto, il numero massimo di tentativi permessi prima che l'account "
+"venga disabilitato, il terminale sul quale l'ultimo tentativo fallito è "
+"avvenuto e infine la data in cui è avvenuto."
+
+# type: Plain text
+#: faillog.5.xml:59(para)
+msgid "The structure of the file is:"
+msgstr "La struttura del file è la seguente:"
+
+# type: Plain text
+#: faillog.5.xml:60(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort   fail_cnt;\n"
+"\tshort   fail_max;\n"
+"\tchar    fail_line[12];\n"
+"\ttime_t  fail_time;\n"
+"\tlong    fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort   fail_cnt;\n"
+"\tshort   fail_max;\n"
+"\tchar    fail_line[12];\n"
+"\ttime_t  fail_time;\n"
+"\tlong    fail_locktime;\n"
+"};"
+
+#: expiry.1.xml:41(refentrytitle) expiry.1.xml:46(refname)
+#: expiry.1.xml:52(command)
+msgid "expiry"
+msgstr "expiry"
+
+# type: Plain text
+#: expiry.1.xml:47(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr "controlla e fa rispettare la scadenza della password"
+
+# type: Plain text
+#: expiry.1.xml:60(para)
+#, fuzzy
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+"<command>expiry</command> controlla (<option>-c</option>) la scadenza della "
+"password in uso e, se necessario, richiede (<option>-f</option>) che venga "
+"cambiata. Questo comando può essere eseguito da un utente qualsiasi."
+
+# type: Plain text
+#: expiry.1.xml:87(para) chage.1.xml:262(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Plain text
+#: chsh.1.xml:46(refpurpose)
+msgid "change login shell"
+msgstr "cambia la shell di login"
+
+# type: Plain text
+#: chsh.1.xml:63(para)
+#, fuzzy
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account, the superuser may change "
+"the login shell for any account."
+msgstr ""
+"<command>chsh</command> cambia la shell di login dell'utente, in altre "
+"parole determina il comando iniziale eseguito quando un utente fa il login. "
+"Un utente qualsiasi può cambiare la shell di login solo per il proprio "
+"account, mentre l'amministratore può cambiare la shell di login per ogni "
+"account."
+
+# type: Plain text
+#: chsh.1.xml:74(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr "Il comando <command>chsh</command> accetta le seguenti opzioni:"
+
+# type: Plain text
+#: chsh.1.xml:96(para)
+#, fuzzy
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Se non viene usata l'opzione <option>-s</option>, <command>chsh</command> "
+"opera in maniera interattiva, mostrando all'utente la shell attuale.  "
+"Inserire il nuovo valore oppure lasciare la linea vuota per non modificare "
+"il valore precedente.  La shell attuale è mostrata tra parentesi <emphasis>"
+"[ ]</emphasis>."
+
+# type: Plain text
+#: chsh.1.xml:107(para)
+#, fuzzy
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+"L'unica limitazione sulla scelta della shell di login è che il nome del "
+"comando deve essere presente in <filename>/etc/shells</filename>; fa "
+"eccezione l'amministratore di sistema, che è libero di scegliere qualsiasi "
+"valore. Un account con una shell di login limitata non può cambiare la "
+"propria shell di login. Per questo motivo è sconsigliato includere "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename>: se "
+"accidentalmente un utente selezionasse una shell limitata, non potrebbe più "
+"tornare alla shell di login che usava originariamente."
+
+#: chsh.1.xml:142(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+# type: Plain text
+#: chsh.1.xml:144(para)
+msgid "List of valid login shells."
+msgstr ""
+"#-#-#-#-#    #-#-#-#-#\n"
+"Elenco delle shell di login valide.\n"
+"#-#-#-#-#    #-#-#-#-#\n"
+"Elenco delle shell di login ammesse."
+
+# type: Plain text
+#: chsh.1.xml:158(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Plain text
+#: chpasswd.8.xml:47(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "aggiorna le password in modo non interattivo"
+
+# type: Plain text
+#: chpasswd.8.xml:61(para)
+#, fuzzy
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+"<command>chpasswd</command> legge da standard input un elenco di coppie di "
+"nomi utente e password e usa queste informazioni per aggiornare un gruppo di "
+"utenti esistenti. Ciascuna riga usa il formato:"
+
+# type: Plain text
+#: chpasswd.8.xml:66(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">nome_utente</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+
+# type: Plain text
+#: chpasswd.8.xml:71(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"Come impostazione predefinita, si devono fornire password in chiaro. "
+"L'algoritmo di cifratura predefinito è DES. Se sono presenti, vengono "
+"aggiornate anche le informazioni sulla durata delle password."
+
+#: chpasswd.8.xml:76(para) chgpasswd.8.xml:75(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"ENCRYPT_METHOD variable of <filename>/etc/login.defs</filename>, and can be "
+"overwiten with the <option>-e</option>, <option>-m</option>, or <option>-c</"
+"option> options."
+msgstr ""
+
+#: chpasswd.8.xml:82(para)
+msgid ""
+"<command>chpasswd</command> first update the password in memory, and then "
+"commit all the changes to disk if no errors occured for any users."
+msgstr ""
+
+# type: Plain text
+#: chpasswd.8.xml:89(para)
+#, fuzzy
+#| msgid "Supplied passwords are in encrypted form."
+msgid "The supplied passwords must be in clear-text."
+msgstr "Le password fornite sono in forma cifrata."
+
+#: chpasswd.8.xml:92(para)
+msgid ""
+"PAM is used to update the password in the system database according to the "
+"PAM chpasswd configuration."
+msgstr ""
+
+#: chpasswd.8.xml:96(para)
+msgid ""
+"When <command>chpasswd</command> fails to update a password, it continues "
+"updating the passwords of the next users, and will return an error code on "
+"exit."
+msgstr ""
+
+# type: Plain text
+#: chpasswd.8.xml:102(para) chgpasswd.8.xml:81(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+"Questo comando è appositamente pensato per grossi sistemi in cui si abbia la "
+"necessità di creare molti account nello stesso momento."
+
+# type: Plain text
+#: chpasswd.8.xml:110(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr "Il comando <command>chpasswd</command> accetta le seguenti opzioni:"
+
+#: chpasswd.8.xml:119(para) chgpasswd.8.xml:98(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr ""
+
+# type: IP
+#: chpasswd.8.xml:129(term) chgpasswd.8.xml:108(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+# type: Plain text
+#: chpasswd.8.xml:131(para) chgpasswd.8.xml:110(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr "Le password fornite sono in forma cifrata."
+
+# type: IP
+#: chpasswd.8.xml:145(term) chgpasswd.8.xml:120(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+# type: Plain text
+#: chpasswd.8.xml:147(para) chgpasswd.8.xml:122(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+"Usa la cifratura MD5 anziché DES quando le password fornite non sono cifrate."
+
+#: chpasswd.8.xml:183(para) chgpasswd.8.xml:158(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+
+#: chpasswd.8.xml:229(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/passwd"
+
+# type: Plain text
+#: chpasswd.8.xml:231(para)
+#, fuzzy
+#| msgid "<command>chpasswd</command> [B<options>]"
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr "<command>chpasswd</command> [B<opzioni>]"
+
+# type: Plain text
+#: chpasswd.8.xml:239(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Plain text
+#: chgpasswd.8.xml:48(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr ""
+
+# type: Plain text
+#: chgpasswd.8.xml:62(para)
+#, fuzzy
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"<command>chpasswd</command> legge da standard input un elenco di coppie di "
+"nomi utente e password e usa queste informazioni per aggiornare un gruppo di "
+"utenti esistenti. Ciascuna riga usa il formato:"
+
+# type: Plain text
+#: chgpasswd.8.xml:67(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+
+# type: Plain text
+#: chgpasswd.8.xml:71(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"Come impostazione predefinita, si devono fornire password in chiaro. "
+"L'algoritmo di cifratura predefinito è DES."
+
+# type: Plain text
+#: chgpasswd.8.xml:89(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr "Il comando <command>chgpasswd</command> accetta le seguenti opzioni:"
+
+# type: Plain text
+#: chgpasswd.8.xml:209(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Plain text
+#: chfn.1.xml:47(refpurpose)
+#, fuzzy
+msgid "change real user name and information"
+msgstr ""
+"#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+"chfn - cambia il vero nome utente e le informazioni\n"
+"#-#-#-#-#  chfn.1.po (PACKAGE VERSION)  #-#-#-#-#\n"
+"chfn - cambia le informazioni personali dell'utente"
+
+#: chfn.1.xml:53(replaceable)
+msgid "full_name"
+msgstr ""
+
+#: chfn.1.xml:53(arg)
+msgid "-f <placeholder-1/>"
+msgstr "-f <placeholder-1/>"
+
+#: chfn.1.xml:54(replaceable)
+msgid "room_no"
+msgstr ""
+
+#: chfn.1.xml:55(replaceable)
+msgid "work_ph"
+msgstr ""
+
+#: chfn.1.xml:55(arg)
+msgid "-w <placeholder-1/>"
+msgstr "-w <placeholder-1/>"
+
+#: chfn.1.xml:56(replaceable)
+msgid "home_ph"
+msgstr ""
+
+#: chfn.1.xml:57(replaceable)
+msgid "other"
+msgstr ""
+
+#: chfn.1.xml:57(arg)
+msgid "-o <placeholder-1/>"
+msgstr "-o <placeholder-1/>"
+
+# type: Plain text
+#: chfn.1.xml:64(para)
+#, fuzzy
+msgid ""
+"The <command>chfn</command> command changes user fullname, office number, "
+"office extension, and home phone number information for a user's account. "
+"This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+"<command>chfn</command> è usato per cambiare il nome completo dell'utente, "
+"il numero dell'ufficio, quello di telefono dell'ufficio e di casa, e altre "
+"informazioni. Questi dati sono normalmente stampati dal programma "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> o equivalenti. Un utente normale può cambiare solo i dati "
+"relativi al proprio account, con eventuali altre limitazioni specificate in "
+"<filename>/etc/login.defs</filename>. (La configurazione predefinita "
+"inibisce la modifica del proprio nome completo.) Il super utente può "
+"cambiare tutte le informazioni di ciascun utente. Inoltre, solo il super "
+"utente può usare l'opzione <option>-o</option> per la modifica del campo "
+"GECOS senza restrizioni."
+
+#: chfn.1.xml:78(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+
+# type: Plain text
+#: chfn.1.xml:87(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+"Se nessuna delle opzioni è selezionata, <command>chfn</command> opera in "
+"maniera interattiva, chiedendo all'utente il valore da impostare per ogni "
+"campo.  Inserire un nuovo valore per sostituire il contenuto attuale, oppure "
+"lasciare la linea vuota per non cambiarlo.  Il valore attuale è mostrato tra "
+"le parentesi <emphasis remap=\"B\">[ ]</emphasis>. Senza alcuna opzione, "
+"<command>chfn</command>, chiede l'account sul quale operare."
+
+# type: Plain text
+#: chfn.1.xml:132(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chage.1.xml:34(refentrytitle) chage.1.xml:39(refname)
+#: chage.1.xml:44(command)
+msgid "chage"
+msgstr "chage"
+
+# type: Plain text
+#: chage.1.xml:40(refpurpose)
+msgid "change user password expiry information"
+msgstr "cambia le informazioni sulla scadenza della password"
+
+# type: Plain text
+#: chage.1.xml:56(para)
+msgid ""
+"The <command>chage</command> command changes the number of days between "
+"password changes and the date of the last password change. This information "
+"is used by the system to determine when a user must change his/her password."
+msgstr ""
+"<command>chage</command> modifica il numero minimo di giorni tra i cambi di "
+"password e la data dell'ultimo cambio. Queste informazioni sono usate dal "
+"sistema per determinare quando un utente deve cambiare la propria password."
+
+# type: Plain text
+#: chage.1.xml:66(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr "Il comando <command>chage</command> accetta le seguenti opzioni:"
+
+# type: IP
+#: chage.1.xml:71(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option><replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: chage.1.xml:75(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+"Imposta la data dell'ultimo cambio della password, espressa come il numero "
+"di giorni trascorsi dal 1 gennaio 1970. La data può anche essere specificata "
+"nel formato AAAA-MM-GG o nella notazione comunemente usata nel proprio paese."
+
+# type: TP
+#: chage.1.xml:83(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: chage.1.xml:87(para)
+#, fuzzy
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+"Imposta la data in cui l'account dell'utente non sarà più accessibile. "
+"L'opzione I<data_scadenza> indica la data in cui l'account viene bloccato, "
+"espressa come il numero di giorni trascorsi dal 1 gennaio 1970. La data può "
+"anche essere specificata nel formato AAAA-MM-GG o nella notazione "
+"comunemente usata nel proprio paese. Un utente con l'account bloccato deve "
+"contattare l'amministratore prima di poter usare ancora il sistema."
+
+#: chage.1.xml:95(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+
+# type: TP
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: chage.1.xml:113(para)
+#, fuzzy
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+"Imposta il numero di giorni di inattività dopo la scadenza della password "
+"dopo i quali l'account viene bloccato. L'opzione <replaceable>inattività</"
+"replaceable> indica il numero di giorni di inattività; un valore pari a zero "
+"disabilita questa funzione. Un utente con l'account bloccato deve contattare "
+"l'amministratore prima di poter usare ancora il sistema."
+
+#: chage.1.xml:120(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+
+# type: Plain text
+#: chage.1.xml:132(para)
+msgid "Show account aging information."
+msgstr ""
+
+# type: IP
+#: chage.1.xml:138(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+
+# type: IP
+#: chage.1.xml:150(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: chage.1.xml:154(para)
+#, fuzzy
+msgid ""
+"Set the maximum number of days during which a password is valid. When "
+"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
+"is less than the current day, the user will be required to change his/her "
+"password before being able to use his/her account. This occurrence can be "
+"planned for in advance by use of the <option>-W</option> option, which "
+"provides the user with advance warning."
+msgstr ""
+"Imposta il numero massimo di giorni di validità di una password. Quando la "
+"somma di <replaceable>gg_max</replaceable> e <replaceable>gg_min</"
+"replaceable> è inferiore ai giorni attualmente trascorsi, l'utente è "
+"obbligato a cambiare la password prima di poter usare ancora il proprio "
+"account. Questo evento può essere reso noto in anticipo usando l'opzione "
+"<option>-W</option>, che fornisce un preavviso all'utente."
+
+#: chage.1.xml:163(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+
+# type: IP
+#: chage.1.xml:171(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+"replaceable>"
+msgstr ""
+
+# type: Plain text
+#: chage.1.xml:175(para)
+msgid ""
+"Set the number of days of warning before a password change is required. The "
+"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
+"the password expiring that a user will be warned his/her password is about "
+"to expire."
+msgstr ""
+"Imposta il numero di giorni di preavviso prima che sia obbligatorio cambiare "
+"la password. L'opzione <replaceable>gg_avviso</replaceable> indica il numero "
+"di giorni prima della scadenza della password in cui l'utente viene "
+"avvertito dell'imminente scadenza."
+
+# type: Plain text
+#: chage.1.xml:184(para)
+#, fuzzy
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Se non viene specificata nessuna opzione, <command>chage</command> opera in "
+"modalità interattiva, mostrando tra parentesi quadre il valore attuale di "
+"ciascun campo e chiedendo il nuovo valore all'utente. Inserire un nuovo "
+"valore per modificare il campo, oppure lasciare la riga vuota per continuare "
+"a usare il valore attuale."
+
+# type: Plain text
+#: chage.1.xml:194(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"<command>chage</command> richiede che il file delle shadow password sia "
+"disponibile."
+
+# type: Plain text
+#: chage.1.xml:198(para)
+msgid ""
+"The <command>chage</command> command is restricted to the root user, except "
+"for the <option>-l</option> option, which may be used by an unprivileged "
+"user to determine when his/her password or account is due to expire."
+msgstr ""
+"L'uso del comando <command>chage</command> è permesso solo all'utente root, "
+"tranne per l'opzione <option>-l</option>, che può essere usata da un utente "
+"non privilegiato per conoscere la scadenza della propria password o "
+"dell'account."
+
+# type: IP
+#: chage.1.xml:251(replaceable)
+msgid "15"
+msgstr "15"
+
+# type: Plain text
+#: chage.1.xml:253(para)
+msgid "can't find the shadow password file"
+msgstr ""
+
+# type: TP
+#: chage.1.xml:229(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Il comando <command>chage</command> restituisce i seguenti valori: "
+"<placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Giuseppe Sacco <eppesuig@debian.org>, 2005.\n"
+"Danilo Piazzalunga <danilopiazza@libero.it>, 2005."
+
+#, fuzzy
+#~ msgid "and <placeholder-1/> files"
+#~ msgstr "-a <placeholder-1/>"
+
+# type: Plain text
+#, fuzzy
+#~ msgid ""
+#~ "<command>usermod</command> will not allow you to change the name of an "
+#~ "user who is logged in. You must make certain that the named user is not "
+#~ "executing any processes when this command is being executed if the user's "
+#~ "numerical user ID is being changed. You must change the owner of any "
+#~ "<command>crontab</command> files manually. You must change the owner of "
+#~ "any <command>at</command> jobs manually. You must make any changes "
+#~ "involving NIS on the NIS server."
+#~ msgstr ""
+#~ "<command>usermod</command> non permetterà di modificare il nome di un "
+#~ "utente che è attualmente connesso. Occorre essere certi che l'utente "
+#~ "nominato non sta eseguendo alcun processo quando questo comando viene "
+#~ "eseguito se l'ID numerico dell'utente sta per essere cambiato. Occorre "
+#~ "cambiare il proprietario di ogni file <command>crontab</command> "
+#~ "manualmente.  Occorre cambiare il proprietario di ogni <command>at</"
+#~ "command> job manualmente. Occorre fare qualunque cambiamento che riguarda "
+#~ "NIS sul server NIS."
+
+# type: Plain text
+#~ msgid ""
+#~ "<command>userdel</command> will not allow you to remove an account if the "
+#~ "user is currently logged in. You must kill any running processes which "
+#~ "belong to an account that you are deleting."
+#~ msgstr ""
+#~ "<command>userdel</command> non permetterà di rimuovere alcun account se "
+#~ "l'utente è attualmente connesso. Occorre uccidere qualunque processo in "
+#~ "esecuzione che appartenga ad un account che si sta rimuovendo. Non è "
+#~ "possibile rimuovere nessun attributo NIS su un client NIS."
+
+# type: Plain text
+#, fuzzy
+#~ msgid "encrypted password file"
+#~ msgstr ""
+#~ "#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+#~ "shadow - file crittato delle password\n"
+#~ "#-#-#-#-#  shadow.5.po (PACKAGE VERSION)  #-#-#-#-#\n"
+#~ "shadow - file delle password cifrate"
+
+# type: Plain text
+#~ msgid ""
+#~ "The group name or number of the user's new initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1."
+#~ msgstr ""
+#~ "Il nuome o numero del nuovo gruppo di connessione dell'utente. Il nome "
+#~ "del gruppo deve esistere. Un numero di gruppo deve riferirsi ad un gruppo "
+#~ "già esistente. Il numero di gruppo predefinito è 1."
+
+# type: Plain text
+#, fuzzy
+#~ msgid ""
+#~ "The group name or number of the user's initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1 or whatever is specified in <filename>/etc/"
+#~ "default/useradd</filename>."
+#~ msgstr ""
+#~ "Il nuome o numero del nuovo gruppo di connessione dell'utente. Il nome "
+#~ "del gruppo deve esistere. Un numero di gruppo deve riferirsi ad un gruppo "
+#~ "già esistente. Il numero di gruppo predefinito è 1."
+
+# type: Plain text
+#~ msgid ""
+#~ "The group name or ID for a new user's initial group. The named group must "
+#~ "exist, and a numerical group ID must have an existing entry."
+#~ msgstr ""
+#~ "Il nome o ID del gruppo iniziale per un nuovo utente.  Il gruppo nominato "
+#~ "deve esistere, ed un ID numerico di gruppo deve avere una voce esistente."
+
+# type: Plain text
+#~ msgid "days since Jan 1, 1970 that password was last changed"
+#~ msgstr ""
+#~ "Giorni a partire dal 1 gennaio 1970 in cui la password è stata cambiata "
+#~ "l'ultima volta"
+
+# type: Plain text
+#, fuzzy
+#~ msgid "days after which password must be changed"
+#~ msgstr ""
+#~ "#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+#~ "Giorni dopo i quali la password deve essere modificata\n"
+#~ "#-#-#-#-#  shadow.5.po (PACKAGE VERSION)  #-#-#-#-#\n"
+#~ "Giorni dopo i quali la password deve essere cambiata"
+
+# type: Plain text
+#~ msgid "days before password is to expire that user is warned"
+#~ msgstr ""
+#~ "Giorni prima della scadenza della password in cui l'utente viene avvertito"
+
+# type: Plain text
+#~ msgid "days after password expires that account is disabled"
+#~ msgstr ""
+#~ "Giorni dopo la scadenza della password in cui l'account viene disabilitato"
+
+# type: Plain text
+#~ msgid "days since Jan 1, 1970 that account is disabled"
+#~ msgstr ""
+#~ "Giorni a partire dal 1 gennaio 1970 dopo i quali l'account viene "
+#~ "disabilitato"
+
+# type: Plain text
+#~ msgid ""
+#~ "The password field must be filled. The encrypted password consists of 13 "
+#~ "to 24 characters from the 64 character alphabet a thru z, A thru Z, 0 "
+#~ "thru 9, \\. and /. Optionally it can start with a \"$\" character. This "
+#~ "means the encrypted password was generated using another (not DES) "
+#~ "algorithm. For example if it starts with \"$1$\" it means the MD5-based "
+#~ "algorithm was used."
+#~ msgstr ""
+#~ "Il campo password non può essere vuoto. La password cifrata è composta da "
+#~ "un numero compreso tra 13 a 24 di caratteri scelti da un alfabeto di 64 "
+#~ "caratteri: da a fino a z, da A a Z, da 0 a 9, . e /. Facoltativamente, la "
+#~ "password può iniziare con il carattere \"$\"; questo sta a indicare che "
+#~ "la password cifrata è stata generata usando un algoritmo diverso da DES. "
+#~ "Ad esempio, \"$1$\" significa che è stato usato un algoritmo basato su "
+#~ "MD5."
+
+# type: Plain text
+#~ msgid ""
+#~ "The date of the last password change is given as the number of days since "
+#~ "Jan 1, 1970. The password may not be changed again until the proper "
+#~ "number of days have passed, and must be changed after the maximum number "
+#~ "of days. If the minimum number of days required is greater than the "
+#~ "maximum number of day allowed, this password may not be changed by the "
+#~ "user."
+#~ msgstr ""
+#~ "La data dell'ultimo cambio della password è espressa come il numero di "
+#~ "giorni trascorsi dal 1 gennaio 1970. La passowrd non può essere cambiata "
+#~ "nuovamente prima che sia passato il numero di giorni previsti, ma deve "
+#~ "obbligatoriamente essere cambiata dopo il massimo numero di giorni. Se il "
+#~ "numero minimo di giorni richiesti è superiore al numero massimo di giorni "
+#~ "concessi, all'utente non è permesso cambiare la password."
+
+# type: Plain text
+#, fuzzy
+#~ msgid ""
+#~ "An account is considered to be inactive and is disabled if the password "
+#~ "is not changed within the specified number of days after the password "
+#~ "expires. An account will also be disabled on the specified day regardless "
+#~ "of other password expiration information."
+#~ msgstr ""
+#~ "#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+#~ "Un account viene considerato inattivo e viene disabilitato se la password "
+#~ "non viene modificata entro il numero di giorni specificato dopo la "
+#~ "scadenza della password.  Un account sarà anche disabilitato il giorno "
+#~ "specificato senza tener conto di altre informazioni sulla scadenza della "
+#~ "password.\n"
+#~ "#-#-#-#-#  shadow.5.po (PACKAGE VERSION)  #-#-#-#-#\n"
+#~ "Un account viene considerato inattivo e viene disabilitato se, dopo la "
+#~ "scadenza, la password non viene cambiata entro il numero di giorni "
+#~ "specificato. Inoltre, un account viene disabilitato il giorno "
+#~ "specificato, senza tener conto di altre informazioni sulla scadenza della "
+#~ "password."
+
+# type: Plain text
+#, fuzzy
+#~ msgid ""
+#~ "This information supersedes any password or password age information "
+#~ "present in <filename>/etc/passwd</filename>."
+#~ msgstr ""
+#~ "#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+#~ "Questa informazione ha la precedenza nei confronti di qualunque "
+#~ "informazione sulla password o sulla scadenza della password presente in "
+#~ "<filename>/etc/passwd</filename>.\n"
+#~ "#-#-#-#-#  shadow.5.po (PACKAGE VERSION)  #-#-#-#-#\n"
+#~ "Queste informazioni hanno la precedenza su qualunque informazione sulle "
+#~ "password o sulla loro durata presente in <filename>/etc/passwd</filename>."
+
+# type: Plain text
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Plain text
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Plain text
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+# type: Plain text
+#, fuzzy
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "-a"
+#~ msgstr "-a"
+
+#~ msgid "-d"
+#~ msgstr "-d"
+
+#~ msgid "-g"
+#~ msgstr "-g"
+
+#~ msgid "-o"
+#~ msgstr "-o"
+
+# type: SH
+#, fuzzy
+#~ msgid "VALUE"
+#~ msgstr "VALORI RESTITUITI"
+
+#~ msgid "-K <placeholder-1/>=<placeholder-2/>"
+#~ msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#, fuzzy
+#~ msgid "-R"
+#~ msgstr "-"
+
+# type: IP
+#, fuzzy
+#~ msgid "<option>-A</option><replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-t</option>, <option>--time</option><replaceable>GIORNI</"
+#~ "replaceable>"
+
+# type: IP
+#, fuzzy
+#~ msgid "<option>-M</option><replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-t</option>, <option>--time</option><replaceable>GIORNI</"
+#~ "replaceable>"
+
+# type: Plain text
+#~ msgid "Display faillog records for all users."
+#~ msgstr "Mostra i record degli accessi falliti per tutti gli utenti."
+
+# type: Plain text
+#~ msgid ""
+#~ "Set maximum number of login failures after the account is disabled to "
+#~ "<replaceable>MAX</replaceable>. Selecting <replaceable>MAX</replaceable> "
+#~ "value of 0 has the effect of not placing a limit on the number of failed "
+#~ "logins. The maximum failure count should always be 0 for <emphasis>root</"
+#~ "emphasis> to prevent a denial of services attack against the system."
+#~ msgstr ""
+#~ "Imposta a <replaceable>MAX</replaceable> il numero massimo di tentativi "
+#~ "permessi prima che l'account venga disabilitato. Un valore pari a zero "
+#~ "significa che non viene posto nessun limite sul numero di tentativi "
+#~ "falliti. Per impedire un possibile attacco di tipo Denial of Service al "
+#~ "sistema, si consiglia di impostare questo valore a 0 per <emphasis>root</"
+#~ "emphasis>."
+
+# type: Plain text
+#, fuzzy
+#~ msgid ""
+#~ "The user's home directory will be created if it does not exist. The files "
+#~ "contained in <replaceable>SKEL_DIR</replaceable> will be copied to the "
+#~ "home directory if the <option>-k</option> option is used, otherwise the "
+#~ "files contained in <filename>/etc/skel</filename> will be used instead. "
+#~ "Any directories contained in <replaceable>SKEL_DIR</replaceable> or "
+#~ "<filename>/etc/skel</filename> will be created in the user's home "
+#~ "directory as well. The <option>-k</option> option is only valid in "
+#~ "conjunction with the <option>-m</option> option. The default is to not "
+#~ "create the directory and to not copy any files."
+#~ msgstr ""
+#~ "La home directory dell'utente verrà creata se non esiste.  I file "
+#~ "contenuti in I<dir_scheletro> saranno copiati nella home directory se "
+#~ "viene usata l'opzione <option>-k</option>, altrimenti verranno usati i "
+#~ "file contenuti in <filename>/etc/skel</filename>.  Anche tutte le "
+#~ "directory contenute in I<dir_scheletro> o <filename>/etc/skel</filename> "
+#~ "verranno create nella home directory dell'utente.  L'opzione <option>-k</"
+#~ "option> è valida solo in congiunzione con l'opzione <option>-m</option>.  "
+#~ "Il comportamento predefinito è di non creare la directory e di non "
+#~ "copiarvi alcun file."
+
+# type: Plain text
+#, fuzzy
+#~ msgid ""
+#~ "Your password must be easily remembered so that you will not be forced to "
+#~ "write it on a piece of paper. This can be accomplished by appending two "
+#~ "small words together and separating each with a special character or "
+#~ "digit. For example, Pass%word."
+#~ msgstr ""
+#~ "La password deve essere facile da ricordare in modo tale da non essere "
+#~ "costretti a scriversela.  Un modo per farlo è quello di concatenare due "
+#~ "parole brevi separandole con della punteggiatura o un numero.  Per "
+#~ "esempio Pass%word."
+
+# type: Plain text
+#, fuzzy
+#~ msgid ""
+#~ "Other methods of construction involve selecting an easily remembered "
+#~ "phrase from literature and selecting the first or last letter from each "
+#~ "word. An example of this is:"
+#~ msgstr ""
+#~ "Un altro metodo di costruzione di implica la selezione di una frase "
+#~ "imparata a memoria perché presente in letteratura, selezionandone le "
+#~ "prime o ultime lettere di ogni parola.  Un esempio di questo tipo è"
+
+# type: Plain text
+#~ msgid "Ask not for whom the bell tolls"
+#~ msgstr "Non chiedere per chi suona la campana"
+
+# type: Plain text
+#~ msgid "which produces"
+#~ msgstr "che produce"
+
+# type: Plain text
+#~ msgid "An4wtbt"
+#~ msgstr "NcXcslc"
+
+# type: Plain text
+#, fuzzy
+#~ msgid ""
+#~ "You may be reasonably sure few crackers will have included this in their "
+#~ "dictionaries. You should, however, select your own methods for "
+#~ "constructing passwords and not rely exclusively on the methods given here."
+#~ msgstr ""
+#~ "Si può essere abbastanza certi che pochi malintenzionati l\\'abbiano "
+#~ "inclusa nel proprio dizionario.  Si dovrebbe, comunque, selezionare un "
+#~ "proprio metodo per contruire password e non affidarsi esclusivamente a "
+#~ "quelli proposti qui."
+
+# type: Plain text
+#~ msgid ""
+#~ "The only restriction placed on the contents of the fields is that no "
+#~ "control characters may be present, nor any of comma, colon, or equal "
+#~ "sign. The <emphasis remap=\"I\">other</emphasis> field does not have this "
+#~ "restriction, and is used to store accounting information used by other "
+#~ "applications."
+#~ msgstr ""
+#~ "L'unica limitazione sul contenuto dei campi è che non possono essere "
+#~ "presenti virgole, due punti o segni di uguaglianza, né altri caratteri di "
+#~ "controllo. Fa eccezione il campo <emphasis remap=\"I\">altro</emphasis>, "
+#~ "in cui sono memorizzare informazioni di accounting usate da altre "
+#~ "applicazioni."
+
+# type: TP
+#, fuzzy
+#~ msgid ""
+#~ "The <option>-t</option> flag overrides the use of <option>-u</option>."
+#~ msgstr ""
+#~ "#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+#~ "<option>-t</option> sovrascrive l'uso di <option>-u</option>.\n"
+#~ "#-#-#-#-#  lastlog.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+#~ "L'opzione <option>-t</option> ha la precedenza sull'uso di <option>-u</"
+#~ "option>."
+
+# type: Plain text
+#~ msgid ""
+#~ "By default, <command>grpck</command> operates on the files <filename>/etc/"
+#~ "group</filename> and <filename>/etc/gshadow</filename>. The user may "
+#~ "select alternate files with the <emphasis remap=\"I\">group</emphasis> "
+#~ "and <emphasis remap=\"I\">shadow</emphasis> parameters. Additionally, the "
+#~ "user may execute the command in read-only mode by specifying the <option>-"
+#~ "r</option> flag. This causes all questions regarding changes to be "
+#~ "answered <emphasis>no</emphasis> without user intervention. "
+#~ "<command>grpck</command> can also sort entries in <filename>/etc/group</"
+#~ "filename> and <filename>/etc/gshadow</filename> by GID. To run it in sort "
+#~ "mode pass it <option>-s</option> flag. No checks are performed then, it "
+#~ "just sorts."
+#~ msgstr ""
+#~ "Come impostazione predefinita, <command>grpck</command> opera sui file "
+#~ "<filename>/etc/group</filename> e in <filename>/etc/gshadow</filename>. "
+#~ "L'utente può selezionare file alternativi con i parametri <emphasis remap="
+#~ "\"I\">group</emphasis> e <emphasis remap=\"I\">shadow</emphasis>. "
+#~ "Inoltre, il comando può essere eseguito in modalità di sola lettura "
+#~ "specificando l'opzione <option>-r</option>: questo fa in modo che, senza "
+#~ "l'intervento dell'utente, venga risposto <emphasis>no</emphasis> a tutte "
+#~ "le domande che riguardano i cambiamenti. Con <command>grpck</command> si "
+#~ "possono anche ordinare per GID le voci in <filename>/etc/group</filename> "
+#~ "e in <filename>/etc/gshadow</filename>, è sufficiente fornire l'opzione "
+#~ "<option>-s</option>. Non viene effettuato nessun controllo, il programma "
+#~ "si limita a ordinare i file."
+
+# type: Plain text
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Plain text
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+# type: Plain text
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "-n"
+#~ msgstr "-n"
+
+# type: Plain text
+#~ msgid ""
+#~ "The name of the new user's login shell. The named program will be used "
+#~ "for all future new user accounts."
+#~ msgstr ""
+#~ "Il nome della shell di login per un nuovo utente. Il programma nominato "
+#~ "verrà usato per tutti gli account dei futuri nuovi utenti."
+
+# type: Plain text
+#~ msgid ""
+#~ "If no options are specified, <command>useradd</command> displays the "
+#~ "current default values."
+#~ msgstr ""
+#~ "Se non è specificata alcuna opzione, <command>useradd</command> mostra i "
+#~ "valori predefiniti correnti."
+
+# type: Plain text
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>"
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>"
+
+#~ msgid "-R <placeholder-1/>"
+#~ msgstr "-R <placeholder-1/>"
+
+#~ msgid "-A <placeholder-1/>"
+#~ msgstr "-A <placeholder-1/>"
+
+#~ msgid "-M <placeholder-1/>"
+#~ msgstr "-M <placeholder-1/>"
+
+# type: Plain text
+#, fuzzy
+#~ msgid ""
+#~ "Group administrator can add and delete users using <option>-a</option> "
+#~ "and <option>-d</option> options respectively. Administrators can use "
+#~ "<option>-r</option> option to remove group password. When no password is "
+#~ "set only group members can use <command>newgrp</command> to join the "
+#~ "group. Option <option>-R</option> disables access via a password to the "
+#~ "group through <command>newgrp</command> command (however members will "
+#~ "still be able to switch to this group)."
+#~ msgstr ""
+#~ "L'amministratore di gruppo può aggiungere e rimuovere utenti usando "
+#~ "rispettivamente le opzioni <option>-a</option> e <option>-d</option>. Gli "
+#~ "amministratori possono usare l'opzione <option>-r</option> per rimuovere "
+#~ "la password di gruppo. Quando non è impostata alcuna password solo i "
+#~ "membri del gruppo possono usare <command>newgrp</command> per unirsi al "
+#~ "gruppo. L'opzione <option>-R</option> disabilita l'accesso al gruppo "
+#~ "tramite il comando <command>newgrp</command>."
+
+# type: Plain text
+#~ msgid "<command>pwck</command> [<option>-sr</option>] [I<passwd> I<shadow>]"
+#~ msgstr ""
+#~ "<command>pwck</command> [<option>-sr</option>] [I<passwd> I<shadow>]"
+
+# type: Plain text
+#, fuzzy
+#~ msgid "lastlog - examine lastlog file"
+#~ msgstr ""
+#~ "#-#-#-#-#  it.po (shadow 4.0.3)  #-#-#-#-#\n"
+#~ "lastlog - esamina il file lastlog\n"
+#~ "#-#-#-#-#  lastlog.8.po (PACKAGE VERSION)  #-#-#-#-#\n"
+#~ "lastlog - esamina il file degli ultimi accessi"
+
+# type: TP
+#~ msgid ""
+#~ "<command>lastlog</command> [E<lt><option>-u</option>|<option>--user</"
+#~ "option>E<gt> I<login-name>]"
+#~ msgstr ""
+#~ "<command>lastlog</command> [E<lt><option>-u</option>|<option>--user</"
+#~ "option>E<gt> I<nome-login>]"
+
+# type: Plain text
+#~ msgid ""
+#~ "[E<lt><option>-t</option>|<option>--time</option>E<gt> I<days>] "
+#~ "[E<lt><option>-h</option>|<option>--help</option>E<gt>]"
+#~ msgstr ""
+#~ "[E<lt><option>-t</option>|<option>--time</option>E<gt> I<giorni>] "
+#~ "[E<lt><option>-h</option>|<option>--help</option>E<gt>]"
+
+# type: Plain text
+#~ msgid "will cause the lastlog record for I<login-name> only to be printed"
+#~ msgstr "richiede di mostrare i soli dati di I<nome-login>."
+
+# type: Plain text
+#~ msgid "will cause only the lastlogins more recent than fIdays to be printed"
+#~ msgstr "mostra solo le connessioni più recenti di I<giorni>."
+
+# type: TH
+#~ msgid "Debian GNU/Linux"
+#~ msgstr "Debian GNU/Linux"
+
+# type: Plain text
+#~ msgid ""
+#~ "Note that turning shadow passwords off and on again will lose all "
+#~ "password aging information."
+#~ msgstr ""
+#~ "Notare che disattivando e riattivando le shadow password si perdono tutte "
+#~ "le informazioni sulla durata delle password."
+
+# type: Plain text
+#~ msgid "<command>groupdel</command> I<group>"
+#~ msgstr "<command>groupdel</command> I<gruppo>"
+
+# type: Plain text
+#~ msgid ""
+#~ "[<option>-e</option> I<expire_date>] [<option>-f</option> "
+#~ "I<inactive_days>]"
+#~ msgstr ""
+#~ "[<option>-e</option> I<data_scadenza>] [<option>-f</option> "
+#~ "I<tempo_inattività>]"
+
+# type: Plain text
+#~ msgid ""
+#~ "[<option>-g</option> I<initial_group>] [<option>-G</option> I<group>"
+#~ "[,...]]"
+#~ msgstr ""
+#~ "[<option>-g</option> I<gruppo_iniziale>] [<option>-G</option> I<gruppo>"
+#~ "[,...]]"
+
+# type: Plain text
+#~ msgid ""
+#~ "[<option>-m</option> [<option>-k</option> I<skeleton_dir>]] [<option>-o</"
+#~ "option>] [<option>-p</option> I<passwd>]"
+#~ msgstr ""
+#~ "[<option>-m</option> [<option>-k</option> I<dir_scheletro>]] [ <option>-"
+#~ "o</option>] [<option>-p</option> I<password>]"
+
+# type: TP
+#~ msgid ""
+#~ "<command>useradd</command> <option>-D</option> [<option>-g</option>I< "
+#~ "default_group>] [<option>-b</option>I< default_home>]"
+#~ msgstr ""
+#~ "<command>useradd</command> <option>-D</option> [<option>-g</"
+#~ "option>I<gruppo_predefinito>] [<option>-b</option>I<home_predefinita>]"
+
+# type: Plain text
+#~ msgid ""
+#~ "[<option>-e</option>I< default_expire_date>] [<option>-f</option>I< "
+#~ "default_inactive>]"
+#~ msgstr ""
+#~ "[<option>-e</option>I< data_scadenza_predefinita>] [<option>-f</option>I< "
+#~ "inattività_predefinita>]"
+
+# type: Plain text
+#~ msgid "[<option>-s</option>I< default_shell>]"
+#~ msgstr "[<option>-s</option>I< shell_predefinita>]"
+
+# type: SS
+#~ msgid "Creating New Users"
+#~ msgstr "Creare Nuovi Utenti"
+
+# type: IP
+#~ msgid "<option>-d </option>I<home_dir>"
+#~ msgstr "<option>-d </option>I<home_dir>"
+
+# type: IP
+#~ msgid "<option>-e </option>I<expire_date>"
+#~ msgstr "<option>-e </option>I<data_scadenza>"
+
+# type: IP
+#~ msgid "<option>-f </option>I<inactive_days>"
+#~ msgstr "<option>-f </option>I<giorni_inattività>"
+
+# type: IP
+#~ msgid "<option>-g </option>I<initial_group>"
+#~ msgstr "<option>-g </option>I<gruppo_iniziale>"
+
+# type: IP
+#~ msgid "<option>-G </option>I<group,[...]>"
+#~ msgstr "<option>-G </option>I<gruppo,[...]>"
+
+# type: IP
+#~ msgid "<option>-b </option>I<default_home>"
+#~ msgstr "<option>-b </option>I<home_predefinita>"
+
+# type: IP
+#~ msgid "<option>-e </option>I<default_expire_date>"
+#~ msgstr "<option>-e </option>I<data_scadenza_predefinita>"
+
+# type: IP
+#~ msgid "<option>-f </option>I<default_inactive>"
+#~ msgstr "<option>-f </option>I<inattività_predefinita>"
+
+# type: IP
+#~ msgid "<option>-g </option>I<default_group>"
+#~ msgstr "<option>-g </option>I<gruppo_predefinito>"
+
+# type: IP
+#~ msgid "<option>-s </option>I<default_shell>"
+#~ msgstr "<option>-s </option>I<shell_predifinita>"
+
+# type: Plain text
+#~ msgid "[<option>-f </option>I<full_name>] [<option>-r </option>I<room_no>]"
+#~ msgstr ""
+#~ "[<option>-f </option>I<nome_completo>] [<option>-r </"
+#~ "option>I<numero_stanza>]"
+
+# type: Plain text
+#~ msgid ""
+#~ "[<option>-w </option>I<work_ph>] [<option>-h </option>I<home_ph>] "
+#~ "[<option>-o </option>I<other>] [I<user>]"
+#~ msgstr ""
+#~ "[<option>-w </option>I<tel_ufficio>] [<option>-h </option>I<tel_casa>] "
+#~ "[<option>-o </option>I<altro>] [I<nome_utente>]"
+
+# type: Plain text
+#~ msgid "groupmod - Modify a group"
+#~ msgstr "groupmod - Modifica un gruppo"
+
+# type: Plain text
+#~ msgid ""
+#~ "<command>groupmod</command> [<option>-g</option>I< gid >[<option>-o</"
+#~ "option>]] [<option>-n</option>I< group_name >] I<group>"
+#~ msgstr ""
+#~ "<command>groupmod</command> [<option>-g</option>I< gid >[<option>-o</"
+#~ "option>]] [<option>-n</option>I< nome_gruppo >] I<gruppo>"
+
+# type: IP
+#~ msgid "<option>-g </option>I<gid>"
+#~ msgstr "<option>-g </option>I<gid>"
+
+# type: IP
+#~ msgid "<option>-n </option>I<group_name>"
+#~ msgstr "<option>-n </option>I<nome_gruppo>"
+
+# type: SS
+#~ msgid "Group passwords"
+#~ msgstr "Password di gruppo"
+
+# type: Plain text
+#~ msgid ""
+#~ "When the <option>-g</option> option is used, the password for the named "
+#~ "group is changed.  The user must either be the super user, or a group "
+#~ "administrator for the named group.  The current group password is not "
+#~ "prompted for.  The <option>-r</option> option is used with the <option>-"
+#~ "g</option> option to remove the current password from the named group.  "
+#~ "This allows group access to all members.  The <option>-R</option> option "
+#~ "is used with the <option>-g</option> option to restrict the named group "
+#~ "for all users."
+#~ msgstr ""
+#~ "Quando viene speficata l\\'opzione <option>-g</option>, viene cambiata la "
+#~ "password per il gruppo specificato.  L\\'utente deve essere il super "
+#~ "utente oppure l'amministratore del gruppo.  La password corrente non "
+#~ "viene richiesta.  L\\'opzione <option>-r</option>, assieme alla <option>-"
+#~ "g</option> elimina la password attuale dal gruppo.  Questo permette "
+#~ "l'accesso al gruppo a tutti i membri."
+
+# type: Plain text
+#~ msgid ""
+#~ "The password aging information may be changed by the super user with the "
+#~ "<option>-x</option>, <option>-n</option>, <option>-w</option>, and "
+#~ "<option>-i</option> options.  The <option>-x</option> option is used to "
+#~ "set the maximum number of days a password remains valid.  After I<max> "
+#~ "days, the password is required to be changed.  The <option>-n</option> "
+#~ "option is used to set the minimum number of days before a password may be "
+#~ "changed.  The user will not be permitted to change the password until "
+#~ "I<min> days have elapsed.  The <option>-w</option> option is used to set "
+#~ "the number of days of warning the user will receive before his/her "
+#~ "password will expire.  The warning occurs I<warn> days before the "
+#~ "expiration, telling the user how many days remain until the password is "
+#~ "set to expire.  The <option>-i</option> option is used to disable an "
+#~ "account after the password has been expired for a number of days.  After "
+#~ "a user account has had an expired password for I<inact> days, the user "
+#~ "may no longer sign on to the account."
+#~ msgstr ""
+#~ "Le informazioni sull\\'invecchiamanto delle password possono essere "
+#~ "modificate dal super utente con le opzioni <option>-x</option>, <option>-"
+#~ "n</option>, <option>-w</option> e <option>-i</option>.  L\\'opzione "
+#~ "<option>-x</option> è usata per impostare il massimo numero di giorni per "
+#~ "il quale la password è valida.  Dopo il numero I<max> di giorni viene "
+#~ "richiesta la modifica della password.  L\\'opzione <option>-n</option> è "
+#~ "usata per impostare il minimo numero di giorni prima che una password "
+#~ "possa essere modificata.  L\\'utente non potrà modificare la password "
+#~ "prima che siano passati I<min> giorni.  L\\'opzione <option>-w</option> è "
+#~ "usata per impostare il numero di giorni durante i quali l\\'utente verrà "
+#~ "avvisato che la propria password è in scadenza.  L'avviso parte I<warn> "
+#~ "giorni prima della scadenza e riporta il numero di giorni che ancora gli "
+#~ "rimangono.  L\\'opzione <option>-i</option> è usata per disabilitare un "
+#~ "account dopo che non è stato più usato per un certo numero di giorni.  "
+#~ "Dopo che un account non è stato usato per I<inact> giorni successivi alla "
+#~ "scadenza, l\\'utente non può più accedere al sistema."
+
+# type: Plain text
+#~ msgid ""
+#~ "If you wish to immediately expire an account's password, you can use the "
+#~ "<option>-e</option> option.  This in effect can force a user to change "
+#~ "his/her password at the user's next login.  You can also use the <option>-"
+#~ "d</option> option to delete a user's password (make it empty).  Use "
+#~ "caution with this option since it can make an account not require a "
+#~ "password at all to login, leaving your system open to intruders."
+#~ msgstr ""
+#~ "Se si vuole fare scadere subito una password, si può utilizzare l"
+#~ "\\'opzione <option>-e</option>. Questo in pratica obbliga l\\'utente a "
+#~ "inserire una nuova password al successivo login. Si può anche utilizzare l"
+#~ "\\'opzione <option>-d</option> per azzerare una password. Usare questa "
+#~ "opzione con attenzione perché potrebbe permettere l\\'accesso al sistema "
+#~ "senza l\\'utilizzo di una password, lasciando quindi spazio di azione a "
+#~ "intrusi."
+
+# type: SS
+#~ msgid "Account maintenance"
+#~ msgstr "Gestione dell\\'account"
+
+# type: Plain text
+#~ msgid ""
+#~ "User accounts may be locked and unlocked with the <option>-l</option> and "
+#~ "<option>-u</option> flags.  The <option>-l</option> option disables an "
+#~ "account by changing the password to a value which matches no possible "
+#~ "encrypted value.  The <option>-u</option> option re-enables an account by "
+#~ "changing the password back to its previous value."
+#~ msgstr ""
+#~ "Gli account utente possono essere bloccati e sbloccati con i flag "
+#~ "<option>-l</option> e <option>-u</option>.  L\\'opzione <option>-l</"
+#~ "option> disabilita l\\'account impostando la password ad un valore che "
+#~ "non corrisponde a nessuna possibile password cifrata.  L\\'opzione "
+#~ "<option>-u</option> abilita un account impostando la password al suo "
+#~ "valore precedente."
+
+# type: Plain text
+#~ msgid ""
+#~ "<command>groupadd</command> [<option>-g</option>I< gid >[<option>-o</"
+#~ "option>]] I<group>"
+#~ msgstr ""
+#~ "<command>groupadd</command> [<option>-g</option>I< gid >[<option>-o</"
+#~ "option>]] I<gruppo>"
+
+# type: TP
+#~ msgid ""
+#~ "<command>usermod</command> [<option>-c</option> I<comment>] [<option>-d</"
+#~ "option> I<home_dir> [<option>-m</option>]]"
+#~ msgstr ""
+#~ "<command>usermod</command> [<option>-c</option> I<commento>] [<option>-d</"
+#~ "option> I<home_dir> [<option>-m</option>]]"
+
+# type: Plain text
+#~ msgid ""
+#~ "[<option>-g</option> I<initial_group>] [<option>-G</option> I<group> "
+#~ "[,...]]"
+#~ msgstr ""
+#~ "[<option>-g</option> I<gruppo_iniziale>] [<option>-G</option> I<gruppo>"
+#~ "[,...]]"
+
+# type: Plain text
+#~ msgid "[<option>-l</option> I<login_name>] [<option>-p</option> I<passwd>]"
+#~ msgstr ""
+#~ "[<option>-l</option> I<nome_login>] [<option>-p</option> I<password>]"
+
+# type: Plain text
+#~ msgid ""
+#~ "[<option>-s</option> I<shell>] [<option>-u</option> I<uid> [<option>-o</"
+#~ "option>]] [<option>-L</option>|<option>-U</option>] I<login>"
+#~ msgstr ""
+#~ "[<option>-s</option> I<shell>] [<option>-u</option> I<uid> [ <option>-o</"
+#~ "option>]] [<option>-L</option>|<option>-U</option>] I<login>"
+
+# type: IP
+#~ msgid "<option>-l </option>I<login_name>"
+#~ msgstr "<option>-l </option>I<nome_login>"
+
+# type: Plain text
+#~ msgid "<command>userdel</command> [<option>-r</option>] I<login>"
+#~ msgstr "<command>userdel</command> [<option>-r</option>] I<login>"
+
+# type: Plain text
+#~ msgid ""
+#~ "The <command>userdel</command> command modifies the system account files, "
+#~ "deleting all entries that refer to I<login>.  The named user must exist.  "
+#~ "The options which apply to the <command>userdel</command> command are:"
+#~ msgstr ""
+#~ "Il comando <command>userdel</command> modifica i file di account del "
+#~ "sistema, rimuovendo tutte le voci che si riferiscono a I<login>.  "
+#~ "L'utente nominato deve esistere."
+
+# type: Plain text
+#~ msgid ""
+#~ "When looking for an editor, the programs will first try the environment "
+#~ "variable <envar>VISUAL</envar>, then the environment variable "
+#~ "<envar>EDITOR</envar>, and finally the default editor, <command>vi</"
+#~ "command>."
+#~ msgstr ""
+#~ "Quando cercano un editor, i programmi prima proveranno con la variabile "
+#~ "d'ambiente <envar>VISUAL</envar>, poi con la variabile d'ambiente "
+#~ "<envar>EDITOR</envar>, e infine con l'editor predefinito, <command>vi</"
+#~ "command>."
+
+# type: Plain text
+#~ msgid "<command>newgrp</command> [<option>-</option>] [I<group>]"
+#~ msgstr "<command>newgrp</command> [<option>-</option>] [I<gruppo>]"
+
+# type: Plain text
+#~ msgid ""
+#~ "<command>sg</command> [<option>-</option>] [I<group> [[<option>-c</"
+#~ "option>] I<command>]]"
+#~ msgstr ""
+#~ "<command>sg</command> [<option>-</option>] [I<gruppo> [[<option>-c</"
+#~ "option>] I<commndo>]]"
+
+# type: Plain text
+#~ msgid "[<option>-s </option>I<login_shell>] [I<user>]"
+#~ msgstr "[<option>-s </option>I<shell>] [I<nome_utente>]"
+
+# type: Plain text
+#~ msgid ""
+#~ "The only restrictions placed on the login shell is that the command name "
+#~ "must be listed in <filename>/etc/shells</filename>, unless the invoker is "
+#~ "the super-user, and then any value may be added.  An account with a "
+#~ "restricted login shell may not change her login shell.  For this reason, "
+#~ "placing B</bin/rsh> in <filename>/etc/shells</filename> is discouraged "
+#~ "since accidentally changing to a restricted shell would prevent the user "
+#~ "from every changing her login shell back to its original value."
+#~ msgstr ""
+#~ "La sola restrizione imposta per la shell di login è che il comando debba "
+#~ "essere elencato nel file <filename>/etc/shells</filename>, a meno che non "
+#~ "si stia operando da super utente, nel qual caso ogni valore è valido.  Un "
+#~ "account che utilizzi una \"restricted login shell\" non può modificare la "
+#~ "propria shell di login.  Per questa ragione è sconsigliato inserire B</"
+#~ "bin/rsh> in <filename>/etc/shells</filename> poiché una modifica "
+#~ "accindentale da parte di un utente non gli permetterebbe di ripristinare "
+#~ "il valore originario."
+
+# type: Plain text
+#~ msgid "<command>gpasswd -a </command>I<user> I<group>"
+#~ msgstr "<command>gpasswd</command> <option>-a</option> I<utente> I<gruppo>"
+
+# type: Plain text
+#~ msgid "<command>gpasswd -d </command>I<user> I<group>"
+#~ msgstr "<command>gpasswd</command> <option>-d</option> I<utente> I<gruppo>"
+
+# type: Plain text
+#~ msgid "<command>gpasswd -R </command>I<group>"
+#~ msgstr "<command>gpasswd</command> <option>-R</option> I<gruppo>"
+
+# type: Plain text
+#~ msgid "<command>gpasswd -r </command>I<group>"
+#~ msgstr "<command>gpasswd</command> <option>-r</option> I<gruppo>"
+
+# type: Plain text
+#~ msgid ""
+#~ "<command>gpasswd</command> [<option>-A </option>I<user>,...] [<option>-M</"
+#~ "option> I<user>,...] I<group>"
+#~ msgstr ""
+#~ "<command>gpasswd</command> [<option>-A</option> I<utente>,...] [<option>-"
+#~ "M</option> I<utente>,...] I<gruppo>"
+
+# type: Plain text
+#~ msgid ""
+#~ "<command>login</command> [<option>-p</option>] [I<username>] "
+#~ "[I<ENV=VAR> ...]"
+#~ msgstr ""
+#~ "<command>login</command> [<option>-p</option>] [I<nome_utente>] "
+#~ "[I<ENV=VAR> ...]"
+
+# type: Plain text
+#~ msgid ""
+#~ "<command>login</command> [<option>-p</option>] [<option>-h </"
+#~ "option>I<host>] [<option>-f </option>I<username>]"
+#~ msgstr ""
+#~ "<command>login</command> [<option>-p</option>] [<option>-h </"
+#~ "option>I<host>] [<option>-f </option>I<nome_utente>]"
+
+# type: Plain text
+#~ msgid ""
+#~ "<command>login</command> [<option>-p</option>] <option>-r </option>I<host>"
+#~ msgstr ""
+#~ "<command>login</command> [<option>-p</option>] <option>-r </option>I<host>"
+
+# type: Plain text
+#~ msgid ""
+#~ "When invoked from the I<login:> prompt, the user may enter environmental "
+#~ "variables after the username.  These variables are entered in the form "
+#~ "<envar>NAME=VALUE</envar>.  Not all variables may be set in the fashion, "
+#~ "notably <envar>PATH</envar>, <envar>HOME</envar> and <envar>SHELL</"
+#~ "envar>.  Additionally, <envar>IFS</envar> may be inhibited if the user"
+#~ "\\'s login shell is <command>/bin/sh</command>."
+#~ msgstr ""
+#~ "Quando viene invocato dal prompt I<login:> l'utente può inserire "
+#~ "variabili d'ambiente subito dopo il nome utente.  Il formato di questa "
+#~ "aggiunta deve essere nella forma <envar>NAME=VALUE</envar>.  Non tutte le "
+#~ "variabili possono essere impostate in questo modo, tipicamente "
+#~ "<envar>PATH</envar>, <envar>HOME</envar> e <envar>SHELL</envar>.  Inoltre "
+#~ "<envar>IFS</envar> può essere inibito se la shell di login dell\\'utente "
+#~ "è <command>/bin/sh</command>."
+
+# type: TP
+#~ msgid ""
+#~ "<command>expiry</command> [<option>-c</option>] [<option>-f</option>]"
+#~ msgstr ""
+#~ "<command>expiry</command> [<option>-c</option>] [<option>-f</option>]"
+
+# type: Plain text
+#~ msgid "<command>grpck</command> [<option>-r</option>] [I<group> I<shadow>]"
+#~ msgstr ""
+#~ "<command>grpck</command> [<option>-r</option>] [I<gruppo> I<shadow>]"
+
+# type: TP
+#~ msgid ""
+#~ "<command>chage</command> [<option>-m</option> I<mindays>] [<option>-M</"
+#~ "option> I<maxdays>] [<option>-d</option> I<lastday>] [<option>-I</option> "
+#~ "I<inactive>]"
+#~ msgstr ""
+#~ "<command>chage</command> [<option>-m</option> I<gg_min>] [<option>-M</"
+#~ "option> I<gg_max>] [<option>-d</option> I<ultimo_giorno>] [<option>-I</"
+#~ "option> I<inattività>]"
+
+# type: Plain text
+#~ msgid ""
+#~ "[<option>-E</option> I<expiredate>] [<option>-W</option> I<warndays>] "
+#~ "I<user>"
+#~ msgstr ""
+#~ "[<option>-E</option> I<data_scadenza>] [<option>-W</option> I<gg_avviso>] "
+#~ "I<utente>"
+
+# type: TP
+#~ msgid "<command>chage</command> <option>-l</option> I<user>"
+#~ msgstr "<command>chage</command> <option>-l</option> I<utente>"
+
+# type: IP
+#~ msgid "<option>-d</option> I<lastday>"
+#~ msgstr "<option>-d</option> I<ultimo_giorno>"
+
+# type: IP
+#~ msgid "<option>-E</option> I<expiredate>"
+#~ msgstr "<option>-E</option> I<data_scadenza>"
+
+# type: IP
+#~ msgid "<option>-m</option> I<mindays>"
+#~ msgstr "<option>-m</option> I<gg_min>"
+
+# type: IP
+#~ msgid "<option>-W</option> I<warndays>"
+#~ msgstr "<option>-W</option> I<gg_avviso>"
+
+# type: Plain text
+#~ msgid ""
+#~ "[<option>-f</option> I<full_name>] [<option>-r</option> I<room_no>] "
+#~ "[<option>-w</option> I<work_ph>] [<option>-h</option> I<home_ph>] "
+#~ "[<option>-o</option> I<other>] [I<user>]"
+#~ msgstr ""
+#~ "[<option>-f</option> I<nome_completo>] [<option>-r</option> "
+#~ "I<numero_stanza>] [<option>-w</option> I<tel_lavoro>] [<option>-h</"
+#~ "option> I<tel_casa>] [<option>-o</option> I<altro>] [I<utente>]"
+
+# type: Plain text
+#~ msgid ""
+#~ "Remember keep protected for reading by others fille passed to standard "
+#~ "input <command>chpasswd</command> command if it contains unencrypted "
+#~ "passwords."
+#~ msgstr ""
+#~ "Evitare che il file usato come input per il comando <command>chpasswd</"
+#~ "command> sia accessibile in lettura se contiene password non cifrate."
+
+# type: TP
+#~ msgid ""
+#~ "<command>chsh</command> [<option>-s</option> I<login_shell>] [I<user>]"
+#~ msgstr ""
+#~ "<command>chsh</command> [<option>-s</option> I<shell_di_login>] "
+#~ "[I<utente>]"
+
+# type: TP
+#~ msgid "<command>faillog</command> [B<options>]"
+#~ msgstr "<command>faillog</command> [B<opzioni>]"
+
+# type: TP
+#~ msgid "<command>lastlog</command> [B<options>]"
+#~ msgstr "<command>lastlog</command> [B<opzioni>]"
+
+# type: Plain text
+#~ msgid ""
+#~ "<command>login</command> [<option>-p</option>] [<option>-h</option> "
+#~ "I<host>] [<option>-f</option> I<username>]"
+#~ msgstr ""
+#~ "<command>login</command> [<option>-p</option>] [<option>-h</option> "
+#~ "I<host>] [<option>-f</option> I<nome_utente>]"
+
+# type: Plain text
+#~ msgid ""
+#~ "<command>login</command> [<option>-p</option>] <option>-r</option> I<host>"
+#~ msgstr ""
+#~ "<command>login</command> [<option>-p</option>] <option>-r</option> I<host>"
+
+# type: Plain text
+#~ msgid "<filename>/etc/porttime</filename>\t- login and port permissions"
+#~ msgstr "<filename>/etc/porttime</filename>\t- permessi e porte di accesso"
+
+# type: Plain text
+#~ msgid ""
+#~ "<command>shadowconfig on</command> will turn shadow passwords on; "
+#~ "<command>shadowconfig off</command> will turn shadow passwords off. "
+#~ "<command>shadowconfig</command> will print an error message and exit with "
+#~ "a nonzero code if it finds anything awry. If that happens, you should "
+#~ "correct the error and run it again. Turning shadow passwords on when they "
+#~ "are already on, or off when they are already off, is harmless."
+#~ msgstr ""
+#~ "<command>shadowconfig on</command> abilita le shadow password, "
+#~ "<command>shadowconfig off</command> le disabilita. Se accade qualcosa di "
+#~ "anomalo, <command>shadowconfig</command> mostra un messaggio d'errore ed "
+#~ "esce con un codice diverso da zero; in tal caso è necessario correggere "
+#~ "l'errore e riprovare. Tentare di attivare le shadow password quando già "
+#~ "lo sono o di disattivarle quando non lo sono è un'azione senza "
+#~ "conseguenze."
+
+# type: Plain text
+#~ msgid "<command>su</command> [<option>-</option>] [I<username> [I<args>]]"
+#~ msgstr ""
+#~ "<command>su</command> [<option>-</option>] [I<nome_utente> [I<argomenti>]]"
diff --git a/man/po/pl.po b/man/po/pl.po
new file mode 100644 (file)
index 0000000..e806892
--- /dev/null
@@ -0,0 +1,7976 @@
+# Polish translation for shadow man pages
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: man pages for shadow 4.0.16\n"
+"POT-Creation-Date: 2009-07-24 03:03+0200\n"
+"PO-Revision-Date: 2008-08-15 12:10-0300\n"
+"Last-Translator: Tomasz Kłoczko <kloczek@pld.org.pl>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: vipw.8.xml:38(refentrytitle) vipw.8.xml:43(refname) vipw.8.xml:52(command)
+msgid "vipw"
+msgstr "vipw"
+
+#: vipw.8.xml:39(manvolnum) usermod.8.xml:40(manvolnum)
+#: userdel.8.xml:42(manvolnum) userdel.8.xml:199(replaceable)
+#: useradd.8.xml:50(manvolnum) pwconv.8.xml:43(manvolnum)
+#: pwck.8.xml:41(manvolnum) nologin.8.xml:35(manvolnum)
+#: newusers.8.xml:51(manvolnum) logoutd.8.xml:35(manvolnum)
+#: lastlog.8.xml:36(manvolnum) grpck.8.xml:39(manvolnum)
+#: groupmod.8.xml:39(manvolnum) groupmems.8.xml:39(manvolnum)
+#: groupdel.8.xml:39(manvolnum) groupdel.8.xml:130(replaceable)
+#: groupadd.8.xml:43(manvolnum) faillog.8.xml:35(manvolnum)
+#: faillog.5.xml:86(manvolnum) chpasswd.8.xml:42(manvolnum)
+#: chgpasswd.8.xml:43(manvolnum)
+msgid "8"
+msgstr "8"
+
+#: vipw.8.xml:40(refmiscinfo) usermod.8.xml:41(refmiscinfo)
+#: userdel.8.xml:43(refmiscinfo) useradd.8.xml:51(refmiscinfo)
+#: pwconv.8.xml:44(refmiscinfo) pwck.8.xml:42(refmiscinfo)
+#: nologin.8.xml:36(refmiscinfo) newusers.8.xml:52(refmiscinfo)
+#: logoutd.8.xml:36(refmiscinfo) lastlog.8.xml:37(refmiscinfo)
+#: grpck.8.xml:40(refmiscinfo) groupmod.8.xml:40(refmiscinfo)
+#: groupmems.8.xml:40(refmiscinfo) groupdel.8.xml:40(refmiscinfo)
+#: groupadd.8.xml:44(refmiscinfo) faillog.8.xml:36(refmiscinfo)
+#: chpasswd.8.xml:43(refmiscinfo) chgpasswd.8.xml:44(refmiscinfo)
+msgid "System Management Commands"
+msgstr "Polecenia Zarządzania Systemem"
+
+#: vipw.8.xml:44(refname) vipw.8.xml:58(command)
+msgid "vigr"
+msgstr "vigr"
+
+#: vipw.8.xml:45(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr "edytuj plik haseł, grup lub ich wersji chronionych"
+
+#: vipw.8.xml:54(replaceable) vipw.8.xml:60(replaceable)
+#: usermod.8.xml:52(replaceable) userdel.8.xml:52(arg)
+#: useradd.8.xml:61(replaceable) useradd.8.xml:73(replaceable)
+#: su.1.xml:66(replaceable) passwd.1.xml:57(replaceable)
+#: newusers.8.xml:63(replaceable) lastlog.8.xml:48(replaceable)
+#: groupmod.8.xml:51(replaceable) groupadd.8.xml:55(replaceable)
+#: faillog.8.xml:47(replaceable) chsh.1.xml:53(replaceable)
+#: chpasswd.8.xml:54(replaceable) chgpasswd.8.xml:55(replaceable)
+#: chage.1.xml:46(replaceable)
+msgid "options"
+msgstr "opcje"
+
+#: vipw.8.xml:66(title) usermod.8.xml:59(title) userdel.8.xml:60(title)
+#: useradd.8.xml:79(title) suauth.5.xml:50(title) su.1.xml:77(title)
+#: sg.1.xml:59(title) shadow.5.xml:44(title) shadow.3.xml:93(title)
+#: shadow.3.xml:149(title) pwconv.8.xml:70(title) pwck.8.xml:83(title)
+#: porttime.5.xml:44(title) passwd.5.xml:44(title) passwd.1.xml:66(title)
+#: nologin.8.xml:50(title) newusers.8.xml:70(title) newgrp.1.xml:55(title)
+#: logoutd.8.xml:50(title) login.defs.5.xml:107(title)
+#: login.access.5.xml:45(title) login.1.xml:103(title) limits.5.xml:46(title)
+#: lastlog.8.xml:54(title) gshadow.5.xml:43(title) grpck.8.xml:69(title)
+#: groups.1.xml:53(title) groupmod.8.xml:58(title) groupmems.8.xml:60(title)
+#: groupdel.8.xml:57(title) groupadd.8.xml:64(title) gpasswd.1.xml:72(title)
+#: faillog.8.xml:53(title) faillog.5.xml:44(title) expiry.1.xml:59(title)
+#: chsh.1.xml:62(title) chpasswd.8.xml:60(title) chgpasswd.8.xml:61(title)
+#: chfn.1.xml:63(title) chage.1.xml:55(title)
+msgid "DESCRIPTION"
+msgstr "OPIS"
+
+#: vipw.8.xml:67(para)
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Polecenia <command>vipw</command> i <command>vigr</command> umożliwiają "
+"modyfikację plików odpowiednio <filename>/etc/passwd</filename> i <filename>/"
+"etc/group</filename>. Przy zastosowaniu flagi <option>-s</option> modyfikują "
+"także dodatkowe wersje chronione tych plików - odpowiednio <filename>/etc/"
+"shadow</filename> i <filename>/etc/gshadow</filename>. Dla ochrony przed "
+"uszkodzeniem w trakcie modyfikacji tych plików programy te ustawiają "
+"odpowiednie blokady. Szukając edytora programy te używają w pierwszej "
+"kolejności zmiennej środowiska <envar>$VISUAL</envar>, a następnie <envar>"
+"$EDITOR</envar>, a na końcu a na końcu domyślnego edytora "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: vipw.8.xml:84(title) usermod.8.xml:67(title) userdel.8.xml:69(title)
+#: useradd.8.xml:97(title) su.1.xml:123(title) pwck.8.xml:164(title)
+#: passwd.1.xml:152(title) newusers.8.xml:239(title) login.1.xml:188(title)
+#: lastlog.8.xml:66(title) grpck.8.xml:133(title) groupmod.8.xml:67(title)
+#: groupmems.8.xml:75(title) groupadd.8.xml:73(title) gpasswd.1.xml:112(title)
+#: faillog.8.xml:64(title) chsh.1.xml:73(title) chpasswd.8.xml:109(title)
+#: chgpasswd.8.xml:88(title) chage.1.xml:65(title)
+msgid "OPTIONS"
+msgstr "OPCJE"
+
+#: vipw.8.xml:85(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr ""
+"Polecenia <command>vipw</command> i <command>vigr</command> posiadają "
+"następujące opcje:Polecenia <command>vipw</command> i <command>vigr</"
+"command> posiadają następujące opcje:"
+
+#: vipw.8.xml:91(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: vipw.8.xml:93(para)
+msgid "Edit group database."
+msgstr "Edycja bazy grup."
+
+#: vipw.8.xml:97(term) userdel.8.xml:99(term) useradd.8.xml:247(term)
+#: passwd.1.xml:192(term) newusers.8.xml:257(term) lastlog.8.xml:82(term)
+#: groupmod.8.xml:98(term) groupadd.8.xml:108(term) faillog.8.xml:80(term)
+#: chsh.1.xml:79(term) chpasswd.8.xml:137(term) chgpasswd.8.xml:114(term)
+#: chage.1.xml:103(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+#: vipw.8.xml:99(para) userdel.8.xml:101(para) useradd.8.xml:249(para)
+#: passwd.1.xml:194(para) newusers.8.xml:259(para) lastlog.8.xml:86(para)
+#: groupmod.8.xml:100(para) groupadd.8.xml:110(para) faillog.8.xml:82(para)
+#: chsh.1.xml:81(para) chpasswd.8.xml:139(para) chgpasswd.8.xml:116(para)
+#: chage.1.xml:105(para)
+msgid "Display help message and exit."
+msgstr "Wyświetlenie komunikatu pomocy i zakończenie działania."
+
+#: vipw.8.xml:103(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#: vipw.8.xml:105(para)
+msgid "Edit passwd database."
+msgstr "Edycja bazy passwd."
+
+#: vipw.8.xml:109(term) passwd.1.xml:259(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:111(para) passwd.1.xml:263(para)
+msgid "Quiet mode."
+msgstr "Cichy tryb pracy."
+
+#: vipw.8.xml:115(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: vipw.8.xml:117(para)
+msgid "Edit shadow or gshadow database."
+msgstr "Edycja bazy shadow lub gshadow."
+
+#: vipw.8.xml:124(title) usermod.8.xml:372(title) userdel.8.xml:140(title)
+#: useradd.8.xml:644(title) suauth.5.xml:168(title) su.1.xml:338(title)
+#: sg.1.xml:88(title) shadow.5.xml:230(title) shadow.3.xml:201(title)
+#: pwconv.8.xml:168(title) pwck.8.xml:227(title) porttime.5.xml:105(title)
+#: passwd.5.xml:116(title) passwd.1.xml:374(title) newusers.8.xml:357(title)
+#: newgrp.1.xml:99(title) logoutd.8.xml:64(title) login.access.5.xml:96(title)
+#: login.1.xml:316(title) limits.5.xml:140(title) lastlog.8.xml:147(title)
+#: gshadow.5.xml:141(title) grpck.8.xml:185(title) groups.1.xml:75(title)
+#: groupmod.8.xml:164(title) groupmems.8.xml:168(title)
+#: groupdel.8.xml:89(title) groupadd.8.xml:200(title) gpasswd.1.xml:233(title)
+#: faillog.8.xml:202(title) faillog.5.xml:71(title) expiry.1.xml:68(title)
+#: chsh.1.xml:133(title) chpasswd.8.xml:208(title) chgpasswd.8.xml:184(title)
+#: chfn.1.xml:113(title) chage.1.xml:206(title)
+msgid "FILES"
+msgstr "PLIKI"
+
+#: vipw.8.xml:127(filename) usermod.8.xml:375(filename)
+#: userdel.8.xml:143(filename) useradd.8.xml:659(filename)
+#: sg.1.xml:103(filename) pwck.8.xml:230(filename)
+#: newusers.8.xml:372(filename) newgrp.1.xml:114(filename)
+#: gshadow.5.xml:144(filename) grpck.8.xml:188(filename)
+#: groups.1.xml:78(filename) groupmod.8.xml:167(filename)
+#: groupmems.8.xml:171(filename) groupdel.8.xml:92(filename)
+#: groupadd.8.xml:203(filename) gpasswd.1.xml:50(filename)
+#: gpasswd.1.xml:53(filename) gpasswd.1.xml:236(filename)
+#: chgpasswd.8.xml:187(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+#: vipw.8.xml:129(para) usermod.8.xml:377(para) userdel.8.xml:145(para)
+#: useradd.8.xml:661(para) sg.1.xml:105(para) pwck.8.xml:232(para)
+#: newusers.8.xml:374(para) newgrp.1.xml:116(para) gshadow.5.xml:146(para)
+#: grpck.8.xml:190(para) groups.1.xml:80(para) groupmod.8.xml:169(para)
+#: groupmems.8.xml:173(para) groupdel.8.xml:94(para) groupadd.8.xml:205(para)
+#: gpasswd.1.xml:238(para) chgpasswd.8.xml:189(para)
+msgid "Group account information."
+msgstr "Informacje o grupach użytkowników."
+
+#: vipw.8.xml:133(filename) usermod.8.xml:381(filename)
+#: useradd.8.xml:665(filename) sg.1.xml:109(filename)
+#: newusers.8.xml:378(filename) newgrp.1.xml:120(filename)
+#: gshadow.5.xml:150(filename) grpck.8.xml:194(filename)
+#: groupmod.8.xml:173(filename) groupmems.8.xml:177(filename)
+#: groupdel.8.xml:98(filename) groupadd.8.xml:209(filename)
+#: gpasswd.1.xml:54(filename) gpasswd.1.xml:242(filename)
+#: chgpasswd.8.xml:193(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+#: vipw.8.xml:135(para) usermod.8.xml:383(para) useradd.8.xml:667(para)
+#: sg.1.xml:111(para) newusers.8.xml:380(para) newgrp.1.xml:122(para)
+#: gshadow.5.xml:152(para) grpck.8.xml:196(para) groupmod.8.xml:175(para)
+#: groupdel.8.xml:100(para) groupadd.8.xml:211(para) gpasswd.1.xml:244(para)
+#: chgpasswd.8.xml:195(para)
+msgid "Secure group account information."
+msgstr "Informacje chronione o grupach użytkowników."
+
+#: vipw.8.xml:139(filename) usermod.8.xml:387(filename)
+#: userdel.8.xml:155(filename) useradd.8.xml:647(filename)
+#: su.1.xml:341(filename) sg.1.xml:91(filename) shadow.5.xml:233(filename)
+#: pwck.8.xml:236(filename) passwd.5.xml:119(filename)
+#: passwd.1.xml:377(filename) newusers.8.xml:360(filename)
+#: newgrp.1.xml:102(filename) login.1.xml:331(filename)
+#: grpck.8.xml:200(filename) expiry.1.xml:71(filename)
+#: chsh.1.xml:136(filename) chpasswd.8.xml:211(filename)
+#: chfn.1.xml:122(filename) chage.1.xml:210(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+#: vipw.8.xml:141(para) usermod.8.xml:389(para) userdel.8.xml:157(para)
+#: useradd.8.xml:649(para) su.1.xml:343(para) sg.1.xml:93(para)
+#: shadow.5.xml:235(para) pwck.8.xml:238(para) passwd.5.xml:121(para)
+#: passwd.1.xml:379(para) newusers.8.xml:362(para) newgrp.1.xml:104(para)
+#: login.1.xml:333(para) grpck.8.xml:202(para) expiry.1.xml:73(para)
+#: chsh.1.xml:138(para) chpasswd.8.xml:213(para) chfn.1.xml:124(para)
+#: chage.1.xml:213(para)
+msgid "User account information."
+msgstr "Informacja o kontach użytkowników."
+
+#: vipw.8.xml:145(filename) usermod.8.xml:393(filename)
+#: userdel.8.xml:161(filename) useradd.8.xml:653(filename)
+#: su.1.xml:347(filename) sg.1.xml:97(filename) shadow.5.xml:239(filename)
+#: shadow.3.xml:204(filename) pwck.8.xml:242(filename)
+#: passwd.5.xml:125(filename) passwd.1.xml:383(filename)
+#: newusers.8.xml:366(filename) newgrp.1.xml:108(filename)
+#: login.1.xml:337(filename) expiry.1.xml:77(filename)
+#: chpasswd.8.xml:217(filename) chage.1.xml:218(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+#: vipw.8.xml:147(para) usermod.8.xml:395(para) userdel.8.xml:163(para)
+#: useradd.8.xml:655(para) su.1.xml:349(para) sg.1.xml:99(para)
+#: shadow.5.xml:241(para) shadow.3.xml:206(para) pwck.8.xml:244(para)
+#: passwd.1.xml:385(para) newusers.8.xml:368(para) newgrp.1.xml:110(para)
+#: login.1.xml:339(para) expiry.1.xml:79(para) chpasswd.8.xml:219(para)
+#: chage.1.xml:221(para)
+msgid "Secure user account information."
+msgstr "Informacje chronione o użytkownikach."
+
+#: vipw.8.xml:154(title) usermod.8.xml:402(title) userdel.8.xml:248(title)
+#: useradd.8.xml:761(title) suauth.5.xml:197(title) su.1.xml:362(title)
+#: sg.1.xml:118(title) shadow.5.xml:258(title) shadow.3.xml:213(title)
+#: pwconv.8.xml:180(title) pwck.8.xml:302(title) porttime.5.xml:117(title)
+#: passwd.5.xml:144(title) passwd.1.xml:455(title) nologin.8.xml:64(title)
+#: newusers.8.xml:399(title) newgrp.1.xml:129(title)
+#: login.defs.5.xml:471(title) login.access.5.xml:108(title)
+#: login.1.xml:376(title) limits.5.xml:150(title) gshadow.5.xml:159(title)
+#: grpck.8.xml:254(title) groups.1.xml:87(title) groupmod.8.xml:233(title)
+#: groupmems.8.xml:186(title) groupdel.8.xml:146(title)
+#: groupadd.8.xml:291(title) gpasswd.1.xml:251(title) faillog.8.xml:214(title)
+#: faillog.5.xml:83(title) expiry.1.xml:86(title) chsh.1.xml:157(title)
+#: chpasswd.8.xml:238(title) chgpasswd.8.xml:208(title) chfn.1.xml:131(title)
+#: chage.1.xml:261(title)
+msgid "SEE ALSO"
+msgstr "ZOBACZ TAKŻE"
+
+#: vipw.8.xml:155(para)
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: usermod.8.xml:39(refentrytitle) usermod.8.xml:44(refname)
+#: usermod.8.xml:50(command) login.defs.5.xml:443(term)
+msgid "usermod"
+msgstr "usermod"
+
+#: usermod.8.xml:45(refpurpose)
+msgid "modify a user account"
+msgstr "zmiana danych konta użytkownika"
+
+#: usermod.8.xml:54(replaceable) userdel.8.xml:54(replaceable)
+#: useradd.8.xml:63(replaceable) passwd.1.xml:60(replaceable)
+#: chsh.1.xml:56(replaceable) chage.1.xml:49(replaceable)
+msgid "LOGIN"
+msgstr "LOGIN"
+
+#: usermod.8.xml:60(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"Polecenie <command>usermod</command> zmienia systemowe pliki kont, "
+"odzwierciedlając zmiany podane w wierszu poleceń."
+
+#: usermod.8.xml:68(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr "Polecenie <command>usermod</command> posiada następujące opcje:"
+
+#: usermod.8.xml:74(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: usermod.8.xml:78(para)
+#, fuzzy
+#| msgid ""
+#| "Add the user to the supplemental group(s). Use only with <option>-G</"
+#| "option> option."
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr ""
+"Dodaj użytkownika do dodatkowej grupy lub grup. Może być użyte tylko z opcją "
+"<option>-G</option>."
+
+#: usermod.8.xml:85(term) useradd.8.xml:125(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option><replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option><replaceable>KOMENTARZ</"
+"replaceable>"
+
+#: usermod.8.xml:90(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: usermod.8.xml:99(term) useradd.8.xml:138(term)
+msgid ""
+"<option>-d</option>, <option>--home</option><replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option><replaceable>KAT_DOMOWY</"
+"replaceable>"
+
+#: usermod.8.xml:104(para)
+msgid "The user's new login directory."
+msgstr ""
+
+#: usermod.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "The user's new login directory. If the <option>-m</option> option is "
+#| "given the contents of the current home directory will be moved to the new "
+#| "home directory, which is created if it does not already exist."
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+"Nowy katalog domowy użytkownika. Jeżeli podano opcję <option>-m</option>, to "
+"zawartość aktualnego katalogu domowego zostanie przesunięta do nowego "
+"katalogu. Nowy katalog domowy jest tworzony jeśli nie istnieje."
+
+#: usermod.8.xml:116(term) useradd.8.xml:165(term) useradd.8.xml:518(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</"
+"replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option><replaceable>DATA_WAŻN</"
+"replaceable>"
+
+#: usermod.8.xml:121(para) useradd.8.xml:170(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+"Data, od której konto danego użytkownika zostanie wyłączone. Data podawana "
+"jest w formacie <emphasis remap=\"I\">MM/DD/RR</emphasis>."
+
+#: usermod.8.xml:128(term) useradd.8.xml:183(term) useradd.8.xml:531(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option><replaceable>NIEAKTYWNE</"
+"replaceable>"
+
+#: usermod.8.xml:133(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+
+#: usermod.8.xml:137(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password expires until the account is "
+#| "permanently disabled. A value of 0 disables the account as soon as the "
+#| "password has expired, and a value of -1 disables the feature. The default "
+#| "value is -1."
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+"Liczba dni po wygaśnięciu hasła do stałego wyłączenia konta. Wartość 0 "
+"wyłącza konto natychmiast po przeterminowaniu hasła, zaś wartość -1 wyłącza "
+"tę cechę. Domyślną wartością jest -1."
+
+#: usermod.8.xml:145(term) useradd.8.xml:203(term) useradd.8.xml:547(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option><replaceable>GROUP</replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>GRUPA</replaceable>"
+
+#: usermod.8.xml:150(para)
+#, fuzzy
+#| msgid ""
+#| "The group name or number of the user's new initial login group. The group "
+#| "name must exist. A group number must refer to an already existing group. "
+#| "The default group number is 1."
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+"Nazwa lub numer początkowej grupy logowania użytkownika. Nazwa grupy musi "
+"istnieć. Numer grupy musi odnosić się do już istniejącej grupy. Domyślnym "
+"numerem grupy jest 1."
+
+#: usermod.8.xml:157(term) useradd.8.xml:231(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option><replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+"<option>-G</option>, <option>--groups</option><replaceable>GRUPA1</"
+"replaceable>[<emphasis remap=\"I\">,GRUPA2,...</emphasis>[<emphasis remap=\"I"
+"\">,GRUPAN</emphasis>]]]"
+
+#: usermod.8.xml:162(para)
+#, fuzzy
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+"Lista dodatkowych grup, do których również należy użytkownik. Każda grupa "
+"oddzielona jest od następnej przecinkiem, bez wtrąconej spacji. Do grup "
+"odnoszą się te same ograniczenia, które obowiązują przy grupie podanej w "
+"opcji <option>-g</option>.   Jeżeli użytkownik jest obecnie członkiem grupy, "
+"której nie podano na liście, to zostanie z niej usunięty."
+
+#: usermod.8.xml:169(para)
+#, fuzzy
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+"Lista dodatkowych grup, do których również należy użytkownik. Każda grupa "
+"oddzielona jest od następnej przecinkiem, bez wtrąconej spacji. Do grup "
+"odnoszą się te same ograniczenia, które obowiązują przy grupie podanej w "
+"opcji <option>-g</option>.   Jeżeli użytkownik jest obecnie członkiem grupy, "
+"której nie podano na liście, to zostanie z niej usunięty."
+
+#: usermod.8.xml:178(term)
+msgid ""
+"<option>-l</option>, <option>--login</option><replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--login</option><replaceable>NOWY_LOGIN</"
+"replaceable>"
+
+#: usermod.8.xml:183(para)
+#, fuzzy
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory name should probably be changed "
+"manually to reflect the new login name."
+msgstr ""
+"Nazwa użytkownika zostanie zmieniona z <emphasis remap=\"I\">LOGIN</"
+"emphasis> na <emphasis remap=\"I\">NOWY_LOGIN</emphasis>. Nic więcej nie "
+"jest zmieniane. W szczególności, prawdopodobnie powinna zostać zmieniona "
+"nazwa katalogu domowego użytkownika, tak by odzwierciedlała nową nazwę "
+"użytkownika."
+
+#: usermod.8.xml:193(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: usermod.8.xml:197(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+"Zablokuj hasło użytkownika. Opcja ta powoduje wstawienie ’!’ na początku "
+"zakodowanego hasła. Opcji tej nie można używać z opcjami <option>-p</option> "
+"or <option>-U</option>."
+
+#: usermod.8.xml:203(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+
+#: usermod.8.xml:212(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:216(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+
+#: usermod.8.xml:220(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:227(term) useradd.8.xml:366(term) groupmod.8.xml:116(term)
+#: groupadd.8.xml:135(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+#: usermod.8.xml:231(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+
+#: usermod.8.xml:238(term) useradd.8.xml:378(term) groupmod.8.xml:127(term)
+#: groupadd.8.xml:145(term)
+msgid ""
+"<option>-p</option>, <option>--password</option><replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+"<option>-p</option>, <option>--password</option><replaceable>HASŁO</"
+"replaceable>"
+
+#: usermod.8.xml:243(para) groupmod.8.xml:132(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+
+#: usermod.8.xml:248(para) useradd.8.xml:388(para) groupmod.8.xml:137(para)
+#: groupadd.8.xml:155(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+
+#: usermod.8.xml:253(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+
+#: usermod.8.xml:259(para) useradd.8.xml:393(para) groupmod.8.xml:142(para)
+#: groupadd.8.xml:160(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+
+#: usermod.8.xml:266(term) useradd.8.xml:427(term) useradd.8.xml:568(term)
+#: su.1.xml:157(term) chsh.1.xml:85(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+
+#: usermod.8.xml:271(para) chsh.1.xml:89(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+"Nazwa nowej powłoki (shell) użytkownika. Ustawienie tego pola na puste "
+"powoduje, że system wybierze domyślną powłokę logowania."
+
+#: usermod.8.xml:278(term) useradd.8.xml:442(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#: usermod.8.xml:283(para)
+msgid "The new numerical value of the user's ID."
+msgstr ""
+
+#: usermod.8.xml:286(para)
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative. Values between 0 and 999 are typically "
+"reserved for system accounts."
+msgstr ""
+
+#: usermod.8.xml:292(para)
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+
+#: usermod.8.xml:297(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+
+#: usermod.8.xml:304(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+#: usermod.8.xml:308(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+"Odblokowuje hasło użytkownika. Opcja ta powoduje usuniecie ’!’ z początku "
+"zakodowanego hasła. Opcji tej nie można używać z opcjami <option>-p</option> "
+"lub <option>-L</option>."
+
+#: usermod.8.xml:313(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+
+#: usermod.8.xml:324(term) useradd.8.xml:474(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-s</option>, <option>--shell</option><replaceable>SHELL</"
+#| "replaceable>"
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option><replaceable>SEUSER</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+
+#: usermod.8.xml:329(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's new login shell. Setting this field to blank "
+#| "causes the system to select the default login shell."
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"the blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Nazwa nowej powłoki (shell) użytkownika. Ustawienie tego pola na puste "
+"powoduje, że system wybierze domyślną powłokę logowania."
+
+#: usermod.8.xml:340(title) userdel.8.xml:221(title) useradd.8.xml:597(title)
+#: su.1.xml:302(title) shadow.3.xml:193(title) passwd.1.xml:338(title)
+#: newusers.8.xml:312(title) login.1.xml:238(title) lastlog.8.xml:159(title)
+#: groupdel.8.xml:65(title) groupadd.8.xml:224(title) gpasswd.1.xml:206(title)
+#: faillog.8.xml:191(title) chpasswd.8.xml:182(title)
+#: chgpasswd.8.xml:157(title)
+msgid "CAVEATS"
+msgstr "OSTRZEŻENIA"
+
+#: usermod.8.xml:341(para)
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux, but only check if the user "
+"is logged in according to utmp on other architectures."
+msgstr ""
+
+#: usermod.8.xml:349(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+
+#: usermod.8.xml:353(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+
+#: usermod.8.xml:359(title) userdel.8.xml:125(title) useradd.8.xml:621(title)
+#: su.1.xml:310(title) sg.1.xml:76(title) pwconv.8.xml:146(title)
+#: pwck.8.xml:213(title) passwd.1.xml:356(title) newusers.8.xml:324(title)
+#: newgrp.1.xml:87(title) login.1.xml:272(title) grpck.8.xml:173(title)
+#: groupmod.8.xml:152(title) groupmems.8.xml:156(title)
+#: groupdel.8.xml:77(title) groupadd.8.xml:186(title) gpasswd.1.xml:218(title)
+#: chsh.1.xml:120(title) chpasswd.8.xml:194(title) chgpasswd.8.xml:169(title)
+#: chfn.1.xml:99(title)
+msgid "CONFIGURATION"
+msgstr ""
+
+#: usermod.8.xml:360(para) userdel.8.xml:126(para) useradd.8.xml:622(para)
+#: su.1.xml:311(para) sg.1.xml:77(para) pwck.8.xml:214(para)
+#: passwd.1.xml:357(para) newusers.8.xml:325(para) newgrp.1.xml:88(para)
+#: login.1.xml:273(para) grpck.8.xml:174(para) groupmod.8.xml:153(para)
+#: groupmems.8.xml:157(para) groupdel.8.xml:78(para) groupadd.8.xml:187(para)
+#: gpasswd.1.xml:219(para) chsh.1.xml:121(para) chpasswd.8.xml:195(para)
+#: chgpasswd.8.xml:170(para) chfn.1.xml:100(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+#, fuzzy
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+
+#. Note: on HP, split groups have the same ID, but different
+#.                names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr ""
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+
+#: usermod.8.xml:403(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: userdel.8.xml:41(refentrytitle) userdel.8.xml:46(refname)
+#: userdel.8.xml:51(command) login.defs.5.xml:434(term)
+msgid "userdel"
+msgstr "userdel"
+
+#: userdel.8.xml:47(refpurpose)
+msgid "delete a user account and related files"
+msgstr "plik chroniony informacji o użytkownikach"
+
+#: userdel.8.xml:61(para)
+#, fuzzy
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"Polecenie <command>usermod</command> zmienia systemowe pliki kont, "
+"odzwierciedlając zmiany podane w wierszu poleceń."
+
+#: userdel.8.xml:70(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr "Polecenie <command>userdel</command> posiada następujące opcje:"
+
+#: userdel.8.xml:75(term) groupadd.8.xml:80(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option>"
+
+#: userdel.8.xml:79(para)
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+
+#: userdel.8.xml:92(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+
+#: userdel.8.xml:105(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: userdel.8.xml:109(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+
+#: userdel.8.xml:115(para)
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr "USERDEL_CMD (łańcuch)"
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr ""
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+"      "
+msgstr ""
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+
+#: userdel.8.xml:149(filename) useradd.8.xml:683(filename)
+#: su.1.xml:353(filename) pwconv.8.xml:171(filename)
+#: passwd.1.xml:389(filename) newusers.8.xml:384(filename)
+#: login.access.5.xml:99(filename) login.1.xml:367(filename)
+#: groupadd.8.xml:215(filename) chsh.1.xml:148(filename)
+#: chpasswd.8.xml:223(filename) chgpasswd.8.xml:199(filename)
+#: chfn.1.xml:116(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+#: userdel.8.xml:151(para) useradd.8.xml:685(para) su.1.xml:355(para)
+#: pwconv.8.xml:173(para) passwd.1.xml:391(para) newusers.8.xml:386(para)
+#: login.access.5.xml:101(para) login.1.xml:369(para) groupadd.8.xml:217(para)
+#: chsh.1.xml:150(para) chpasswd.8.xml:225(para) chgpasswd.8.xml:201(para)
+#: chfn.1.xml:118(para)
+msgid "Shadow password suite configuration."
+msgstr "Konfiguracja pakietu shadow."
+
+#: userdel.8.xml:170(title) useradd.8.xml:692(title) pwck.8.xml:251(title)
+#: passwd.1.xml:404(title) grpck.8.xml:209(title) groupmod.8.xml:182(title)
+#: groupdel.8.xml:107(title) groupadd.8.xml:246(title) chage.1.xml:228(title)
+msgid "EXIT VALUES"
+msgstr "KOD ZAKOŃCZENIA"
+
+#: userdel.8.xml:175(replaceable) useradd.8.xml:697(replaceable)
+#: pwck.8.xml:256(replaceable) passwd.1.xml:409(replaceable)
+#: grpck.8.xml:214(replaceable) groupmod.8.xml:187(replaceable)
+#: groupdel.8.xml:112(replaceable) groupadd.8.xml:251(replaceable)
+#: chage.1.xml:233(replaceable)
+msgid "0"
+msgstr "0"
+
+#: userdel.8.xml:177(para) useradd.8.xml:699(para) pwck.8.xml:258(para)
+#: passwd.1.xml:411(para) grpck.8.xml:216(para) groupmod.8.xml:189(para)
+#: groupdel.8.xml:114(para) groupadd.8.xml:253(para) chage.1.xml:235(para)
+msgid "success"
+msgstr "poprawne zakończenie działania programu"
+
+#: userdel.8.xml:181(replaceable) useradd.8.xml:703(replaceable)
+#: su.1.xml:55(manvolnum) sg.1.xml:39(manvolnum) pwck.8.xml:262(replaceable)
+#: passwd.1.xml:45(manvolnum) passwd.1.xml:415(replaceable)
+#: newgrp.1.xml:39(manvolnum) login.1.xml:71(manvolnum)
+#: grpck.8.xml:220(replaceable) groups.1.xml:35(manvolnum)
+#: gpasswd.1.xml:43(manvolnum) expiry.1.xml:42(manvolnum)
+#: chsh.1.xml:41(manvolnum) chfn.1.xml:42(manvolnum) chage.1.xml:35(manvolnum)
+#: chage.1.xml:239(replaceable)
+msgid "1"
+msgstr "1"
+
+#: userdel.8.xml:183(para) useradd.8.xml:705(para)
+msgid "can't update password file"
+msgstr "nie można zaktualizować pliku z hasłami"
+
+#: userdel.8.xml:187(replaceable) useradd.8.xml:709(replaceable)
+#: pwck.8.xml:268(replaceable) passwd.1.xml:421(replaceable)
+#: grpck.8.xml:226(replaceable) groupmod.8.xml:193(replaceable)
+#: groupdel.8.xml:118(replaceable) groupadd.8.xml:257(replaceable)
+#: chage.1.xml:245(replaceable)
+msgid "2"
+msgstr "2"
+
+#: userdel.8.xml:189(para) useradd.8.xml:711(para) pwck.8.xml:264(para)
+#: grpck.8.xml:222(para) groupmod.8.xml:195(para) groupdel.8.xml:120(para)
+#: groupadd.8.xml:259(para) chage.1.xml:247(para)
+msgid "invalid command syntax"
+msgstr "niepoprawna składnia polecenia"
+
+#: userdel.8.xml:193(replaceable) useradd.8.xml:727(replaceable)
+#: pwck.8.xml:292(replaceable) passwd.1.xml:445(replaceable)
+#: groupmod.8.xml:211(replaceable) groupdel.8.xml:124(replaceable)
+msgid "6"
+msgstr "6"
+
+#: userdel.8.xml:195(para)
+msgid "specified user doesn't exist"
+msgstr ""
+
+#: userdel.8.xml:201(para)
+msgid "user currently logged in"
+msgstr ""
+
+#: userdel.8.xml:205(replaceable) useradd.8.xml:739(replaceable)
+#: groupmod.8.xml:223(replaceable) groupdel.8.xml:136(replaceable)
+#: groupadd.8.xml:281(replaceable)
+msgid "10"
+msgstr "10"
+
+#: userdel.8.xml:207(para) useradd.8.xml:741(para) groupmod.8.xml:225(para)
+#: groupdel.8.xml:138(para) groupadd.8.xml:283(para)
+msgid "can't update group file"
+msgstr "nie można zaktualizować pliku z grupami"
+
+#: userdel.8.xml:211(replaceable) useradd.8.xml:745(replaceable)
+msgid "12"
+msgstr "12"
+
+#: userdel.8.xml:213(para)
+msgid "can't remove home directory"
+msgstr ""
+
+#: userdel.8.xml:171(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>userdel</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: userdel.8.xml:222(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+
+#: userdel.8.xml:229(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+
+#: userdel.8.xml:233(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+
+#: userdel.8.xml:236(para)
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+
+#: userdel.8.xml:249(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: useradd.8.xml:49(refentrytitle) useradd.8.xml:54(refname)
+#: useradd.8.xml:59(command) useradd.8.xml:66(command)
+#: useradd.8.xml:70(command) login.defs.5.xml:421(term)
+msgid "useradd"
+msgstr "useradd"
+
+#: useradd.8.xml:55(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+
+#: useradd.8.xml:67(arg) useradd.8.xml:71(arg)
+msgid "-D"
+msgstr "-D"
+
+#: useradd.8.xml:80(para)
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+
+#: useradd.8.xml:89(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+
+#: useradd.8.xml:98(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr "Polecenie <command>useradd</command> posiada następujące opcje:"
+
+#: useradd.8.xml:102(term) useradd.8.xml:499(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option><replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--base-dir</option><replaceable>KAT_BAZOWY</"
+"replaceable>"
+
+#: useradd.8.xml:107(para)
+msgid ""
+"The default base directory for the system if <option>-d</"
+"option><replaceable>HOME_DIR</replaceable> is not specified. "
+"<replaceable>BASE_DIR</replaceable> is concatenated with the account name to "
+"define the home directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+
+#: useradd.8.xml:115(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+
+#: useradd.8.xml:130(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+
+#: useradd.8.xml:143(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+
+#: useradd.8.xml:155(term)
+#, fuzzy
+#| msgid "<option>-d</option>, <option>--delete</option>"
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: useradd.8.xml:159(para)
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr ""
+
+#: useradd.8.xml:174(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+
+#: useradd.8.xml:188(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password expires until the account is "
+#| "permanently disabled. A value of 0 disables the account as soon as the "
+#| "password has expired, and a value of -1 disables the feature. The default "
+#| "value is -1."
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+"Liczba dni po wygaśnięciu hasła do stałego wyłączenia konta. Wartość 0 "
+"wyłącza konto natychmiast po przeterminowaniu hasła, zaś wartość -1 wyłącza "
+"tę cechę. Domyślną wartością jest -1."
+
+#: useradd.8.xml:194(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+
+#: useradd.8.xml:208(para)
+#, fuzzy
+#| msgid ""
+#| "The group name or number of the user's new initial login group. The group "
+#| "name must exist. A group number must refer to an already existing group. "
+#| "The default group number is 1."
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+"Nazwa lub numer początkowej grupy logowania użytkownika. Nazwa grupy musi "
+"istnieć. Numer grupy musi odnosić się do już istniejącej grupy. Domyślnym "
+"numerem grupy jest 1."
+
+#: useradd.8.xml:213(para)
+msgid ""
+"If not specified, the bahavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+
+#: useradd.8.xml:236(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+
+#: useradd.8.xml:253(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-s</option>, <option>--shell</option><replaceable>SHELL</"
+#| "replaceable>"
+msgid ""
+"<option>-k</option>, <option>--skel</option><replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+
+#: useradd.8.xml:258(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+
+#: useradd.8.xml:263(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:267(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+
+#: useradd.8.xml:276(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-K</option>, <option>--key</option><replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option><replaceable>KLUCZ</"
+"replaceable>=<replaceable>WARTOŚĆ</replaceable>"
+
+#: useradd.8.xml:281(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K </option><replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-"
+"1</replaceable> can be used when creating system account to turn off "
+"password ageing, even though system account has no password at all. Multiple "
+"<option>-K</option> options can be specified, e.g.: <option>-K </"
+"option><replaceable>UID_MIN</replaceable>=<replaceable>100</"
+"replaceable><option>-K </option><replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:297(para)
+msgid ""
+"Note: <option>-K </option><replaceable>UID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+
+#: useradd.8.xml:305(term)
+#, fuzzy
+#| msgid "<option>-l</option>, <option>--list</option>"
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: useradd.8.xml:307(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr ""
+
+#: useradd.8.xml:310(para)
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"resetted to avoid reusing the entry from a previously deleted user."
+msgstr ""
+
+#: useradd.8.xml:318(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:322(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+
+#: useradd.8.xml:328(para)
+msgid "By default, no home directories are created."
+msgstr ""
+
+#: useradd.8.xml:335(option)
+#, fuzzy
+#| msgid "-"
+msgid "-M"
+msgstr "-"
+
+#: useradd.8.xml:338(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+
+#: useradd.8.xml:347(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:357(para) useradd.8.xml:465(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: useradd.8.xml:370(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr ""
+
+#: useradd.8.xml:371(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-o</option> option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:383(para) groupadd.8.xml:150(para)
+#, fuzzy
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: useradd.8.xml:400(term) newusers.8.xml:263(term) groupadd.8.xml:167(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: useradd.8.xml:404(para) newusers.8.xml:267(para)
+msgid "Create a system account."
+msgstr ""
+
+#: useradd.8.xml:407(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are choosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: useradd.8.xml:416(para)
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such an user, regardless of the default setting in <filename>/etc/login."
+"defs</filename> (<option>CREATE_HOME</option>). You have to specify the "
+"<option>-m</option> options if you want a home directory for a system "
+"account to be created."
+msgstr ""
+
+#: useradd.8.xml:432(para)
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+
+#: useradd.8.xml:447(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than 999 and greater than "
+"every other user. Values between 0 and 999 are typically reserved for system "
+"accounts."
+msgstr ""
+
+#: useradd.8.xml:457(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:461(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+
+#: useradd.8.xml:479(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's new login shell. Setting this field to blank "
+#| "causes the system to select the default login shell."
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Nazwa nowej powłoki (shell) użytkownika. Ustawienie tego pola na puste "
+"powoduje, że system wybierze domyślną powłokę logowania."
+
+#: useradd.8.xml:489(title)
+msgid "Changing the default values"
+msgstr ""
+
+#: useradd.8.xml:490(para)
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+
+#: useradd.8.xml:504(para)
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+
+#: useradd.8.xml:511(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:523(para)
+msgid "The date on which the user account is disabled."
+msgstr ""
+
+#: useradd.8.xml:524(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:536(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+
+#: useradd.8.xml:540(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:552(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>. The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+
+#: useradd.8.xml:561(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:573(para)
+msgid "The name of a new user's login shell."
+msgstr ""
+
+#: useradd.8.xml:576(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:588(title)
+msgid "NOTES"
+msgstr "UWAGI"
+
+#: useradd.8.xml:589(para)
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+
+#: useradd.8.xml:598(para)
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+
+#: useradd.8.xml:603(para)
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+
+#: useradd.8.xml:609(para)
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+
+#: useradd.8.xml:615(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr ""
+
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr ""
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overriden on the "
+"command line."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+#, fuzzy
+msgid "<option>GID_MAX</option> (number)"
+msgstr "GID_MAX (numer)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+#, fuzzy
+msgid "<option>GID_MIN</option> (number)"
+msgstr "GID_MIN (numer)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr "PASS_MAX_DAYS (numer)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "PASS_MIN_DAYS (numer)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr "PASS_WARN_AGE (numer)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "GID_MAX (numer)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "GID_MIN (numer)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "UID_MAX (numer)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "UID_MIN (numer)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>UID_MAX</option> (number)"
+msgstr "UID_MAX (numer)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>UID_MIN</option> (number)"
+msgstr "UID_MIN (numer)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+#, fuzzy
+msgid "<option>UMASK</option> (number)"
+msgstr "UMASK (number)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create"
+msgstr ""
+
+#: useradd.8.xml:42(para) newusers.8.xml:42(para) login.defs.5.xml:42(para)
+#: login.1.xml:42(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overriden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: useradd.8.xml:671(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+#: useradd.8.xml:673(para)
+msgid "Default values for account creation."
+msgstr ""
+
+#: useradd.8.xml:677(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+#: useradd.8.xml:679(para)
+msgid "Directory containing default files."
+msgstr ""
+
+#: useradd.8.xml:715(replaceable) shadow.3.xml:35(manvolnum)
+#: pwck.8.xml:274(replaceable) passwd.1.xml:427(replaceable)
+#: grpck.8.xml:232(replaceable) groupmod.8.xml:199(replaceable)
+#: groupadd.8.xml:263(replaceable)
+msgid "3"
+msgstr "3"
+
+#: useradd.8.xml:717(para) passwd.1.xml:447(para) groupmod.8.xml:201(para)
+#: groupadd.8.xml:265(para)
+msgid "invalid argument to option"
+msgstr "nieprawidłowy argument opcji"
+
+#: useradd.8.xml:721(replaceable) pwck.8.xml:280(replaceable)
+#: passwd.1.xml:433(replaceable) grpck.8.xml:238(replaceable)
+#: groupmod.8.xml:205(replaceable) groupadd.8.xml:269(replaceable)
+msgid "4"
+msgstr "4"
+
+#: useradd.8.xml:723(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "UID juz jest używany (i nie uzyto opcji <option>-o</option>)"
+
+#: useradd.8.xml:729(para) groupmod.8.xml:207(para) groupmod.8.xml:213(para)
+#: groupdel.8.xml:126(para)
+msgid "specified group doesn't exist"
+msgstr ""
+
+#: useradd.8.xml:733(replaceable) groupmod.8.xml:217(replaceable)
+#: groupadd.8.xml:275(replaceable)
+msgid "9"
+msgstr "9"
+
+#: useradd.8.xml:735(para)
+msgid "username already in use"
+msgstr ""
+
+#: useradd.8.xml:747(para)
+msgid "can't create home directory"
+msgstr ""
+
+#: useradd.8.xml:751(replaceable)
+msgid "13"
+msgstr "13"
+
+#: useradd.8.xml:753(para)
+msgid "can't create mail spool"
+msgstr ""
+
+#: useradd.8.xml:693(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>useradd</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: useradd.8.xml:762(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: suauth.5.xml:34(refentrytitle) suauth.5.xml:39(refname)
+msgid "suauth"
+msgstr "suauth"
+
+#: suauth.5.xml:35(manvolnum) shadow.5.xml:35(manvolnum)
+#: pwck.8.xml:286(replaceable) porttime.5.xml:35(manvolnum)
+#: passwd.5.xml:35(manvolnum) passwd.1.xml:439(replaceable)
+#: login.defs.5.xml:98(manvolnum) login.access.5.xml:36(manvolnum)
+#: limits.5.xml:36(manvolnum) gshadow.5.xml:34(manvolnum)
+#: grpck.8.xml:244(replaceable) faillog.5.xml:35(manvolnum)
+msgid "5"
+msgstr "5"
+
+#: suauth.5.xml:36(refmiscinfo) shadow.5.xml:36(refmiscinfo)
+#: porttime.5.xml:36(refmiscinfo) passwd.5.xml:36(refmiscinfo)
+#: login.defs.5.xml:99(refmiscinfo) login.access.5.xml:37(refmiscinfo)
+#: limits.5.xml:37(refmiscinfo) gshadow.5.xml:35(refmiscinfo)
+#: faillog.5.xml:36(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr ""
+
+#: suauth.5.xml:40(refpurpose)
+msgid "detailed su control file"
+msgstr ""
+
+#: suauth.5.xml:45(command) suauth.5.xml:171(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+#: suauth.5.xml:51(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+
+#. .RS
+#: suauth.5.xml:58(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      1) the user su is targetting\n"
+"    "
+msgstr ""
+
+#. .fi
+#: suauth.5.xml:62(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+
+#: suauth.5.xml:67(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+
+#: suauth.5.xml:72(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      to-id:from-id:ACTION\n"
+"    "
+msgstr ""
+
+#: suauth.5.xml:76(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\""
+msgstr ""
+
+#: suauth.5.xml:82(para)
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is neccessary."
+msgstr ""
+
+#: suauth.5.xml:93(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr ""
+
+#: suauth.5.xml:99(emphasis)
+msgid "DENY"
+msgstr "DENY"
+
+#: suauth.5.xml:102(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr ""
+
+#: suauth.5.xml:109(emphasis)
+msgid "NOPASS"
+msgstr "NOPASS"
+
+#: suauth.5.xml:112(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+
+#: suauth.5.xml:120(emphasis)
+msgid "OWNPASS"
+msgstr "OWNPASS"
+
+#: suauth.5.xml:123(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+
+#: suauth.5.xml:131(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+
+#: suauth.5.xml:141(title)
+msgid "EXAMPLE"
+msgstr "EXAMPLE"
+
+#: suauth.5.xml:142(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      # sample /etc/suauth file\n"
+"      #\n"
+"      # A couple of privileged usernames may\n"
+"      # su to root with their own password.\n"
+"      #\n"
+"      root:chris,birddog:OWNPASS\n"
+"      #\n"
+"      # Anyone else may not su to root unless in\n"
+"      # group wheel. This is how BSD does things.\n"
+"      #\n"
+"      root:ALL EXCEPT GROUP wheel:DENY\n"
+"      #\n"
+"      # Perhaps terry and birddog are accounts\n"
+"      # owned by the same person.\n"
+"      # Access can be arranged between them\n"
+"      # with no password.\n"
+"      #\n"
+"      terry:birddog:NOPASS\n"
+"      birddog:terry:NOPASS\n"
+"      #\n"
+"    "
+msgstr ""
+
+#: suauth.5.xml:178(title) pwconv.8.xml:135(title) login.defs.5.xml:455(title)
+msgid "BUGS"
+msgstr "BŁĘDY"
+
+#: suauth.5.xml:179(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+
+#: suauth.5.xml:188(title) shadow.3.xml:183(title)
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSTYKA"
+
+#: suauth.5.xml:189(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+
+#: suauth.5.xml:198(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: su.1.xml:54(refentrytitle) su.1.xml:59(refname) su.1.xml:64(command)
+#: login.defs.5.xml:395(term)
+msgid "su"
+msgstr "su"
+
+#: su.1.xml:56(refmiscinfo) sg.1.xml:40(refmiscinfo)
+#: passwd.1.xml:46(refmiscinfo) newgrp.1.xml:40(refmiscinfo)
+#: login.1.xml:72(refmiscinfo) groups.1.xml:36(refmiscinfo)
+#: gpasswd.1.xml:44(refmiscinfo) expiry.1.xml:43(refmiscinfo)
+#: chsh.1.xml:42(refmiscinfo) chfn.1.xml:43(refmiscinfo)
+#: chage.1.xml:36(refmiscinfo)
+msgid "User Commands"
+msgstr "Polecenia użytkowników"
+
+#: su.1.xml:60(refpurpose)
+msgid "change user ID or become superuser"
+msgstr ""
+
+#: su.1.xml:70(replaceable) login.1.xml:85(replaceable)
+#: login.1.xml:93(replaceable)
+msgid "username"
+msgstr ""
+
+#: su.1.xml:78(para)
+msgid ""
+"The <command>su</command> command is used to become another user during a "
+"login session. Invoked without a <option>username</option>, <command>su</"
+"command> defaults to becoming the superuser. The optional argument <option>-"
+"</option> may be used to provide an environment similar to what the user "
+"would expect had the user logged in directly."
+msgstr ""
+
+#: su.1.xml:87(para)
+msgid ""
+"Additional arguments may be provided after the username, in which case they "
+"are supplied to the user's login shell. In particular, an argument of "
+"<option>-c</option> will cause the next argument to be treated as a command "
+"by most command interpreters. The command will be executed by the shell "
+"specified in <filename>/etc/passwd</filename> for the target user."
+msgstr ""
+
+#: su.1.xml:96(para)
+msgid ""
+"You can use the <option>--</option> argument to separate <command>su</"
+"command> options from the arguments supplied to the shell."
+msgstr ""
+
+#: su.1.xml:101(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+
+#: su.1.xml:106(para)
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: su.1.xml:115(para) login.1.xml:166(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+
+#: su.1.xml:124(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr "Polecenie <command>su</command> posiada następujące opcje:"
+
+#: su.1.xml:128(term)
+msgid ""
+"<option>-c</option>, <option>--command</option><replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--command</option><replaceable>POLECENIE</"
+"replaceable>"
+
+#: su.1.xml:133(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr ""
+
+#: su.1.xml:140(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: su.1.xml:144(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+
+#: su.1.xml:148(para)
+msgid ""
+"When <option>-</option> is used, it must be specified as the last "
+"<command>su</command> option. The other forms (<option>-l</option> and "
+"<option>--login</option>) do not have this restriction."
+msgstr ""
+
+#: su.1.xml:162(para)
+msgid "The shell that will be invoked."
+msgstr ""
+
+#: su.1.xml:170(para)
+msgid "The shell specified with --shell."
+msgstr ""
+
+#: su.1.xml:173(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+
+#: su.1.xml:180(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+
+#: su.1.xml:186(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+
+#: su.1.xml:163(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:191(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shell</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+
+#: su.1.xml:202(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:211(envar)
+msgid "$PATH"
+msgstr ""
+
+#: su.1.xml:213(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+
+#: su.1.xml:222(envar)
+msgid "$IFS"
+msgstr ""
+
+#: su.1.xml:224(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+
+#: su.1.xml:207(para)
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:233(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+
+#: su.1.xml:242(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+
+#: su.1.xml:251(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+
+#: su.1.xml:258(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+
+#: su.1.xml:268(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+
+#: su.1.xml:281(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+
+#: su.1.xml:289(para)
+msgid "Other environment might be set by PAM modules."
+msgstr ""
+
+#: su.1.xml:237(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:303(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"in no."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value can be preceded by <replaceable>PATH=</"
+"replaceable>, or a colon separated list of paths (for example <replaceable>/"
+"bin:/usr/bin</replaceable>). The default value is <replaceable>PATH=/bin:/"
+"usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value can be preceded by <replaceable>PATH=</"
+"replaceable>, or a colon separated list of paths (for example <replaceable>/"
+"sbin:/bin:/usr/sbin:/usr/bin</replaceable>). The default value is "
+"<replaceable>PATH=/bin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will no be translated."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable setting of ulimit, umask, and niceness from passwd gecos field."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SU_NAME</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+
+#: su.1.xml:363(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>sh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>"
+
+#: sg.1.xml:38(refentrytitle) sg.1.xml:43(refname) sg.1.xml:49(command)
+msgid "sg"
+msgstr "sg"
+
+#: sg.1.xml:44(refpurpose)
+msgid "execute command as different group ID"
+msgstr ""
+
+#: sg.1.xml:50(arg) newgrp.1.xml:49(arg)
+msgid "-"
+msgstr "-"
+
+#: sg.1.xml:52(arg) expiry.1.xml:53(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:51(arg)
+msgid "group <placeholder-1/> command"
+msgstr ""
+
+#: sg.1.xml:60(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+
+#: sg.1.xml:119(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: shadow.5.xml:34(refentrytitle) shadow.5.xml:39(refname)
+#: shadow.3.xml:34(refentrytitle) shadow.3.xml:39(refname)
+#: pwck.8.xml:60(replaceable) pwck.8.xml:75(replaceable)
+#: grpck.8.xml:53(replaceable) grpck.8.xml:62(replaceable)
+msgid "shadow"
+msgstr ""
+
+#: shadow.5.xml:40(refpurpose)
+#, fuzzy
+#| msgid "can't update password file"
+msgid "shadowed password file"
+msgstr "nie można zaktualizować pliku z hasłami"
+
+#: shadow.5.xml:45(para)
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+
+#: shadow.5.xml:51(para) gshadow.5.xml:49(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+
+#: shadow.5.xml:56(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+
+#: shadow.5.xml:63(emphasis) passwd.5.xml:53(para)
+msgid "login name"
+msgstr ""
+
+#: shadow.5.xml:65(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+
+#: shadow.5.xml:71(emphasis) gshadow.5.xml:68(emphasis)
+msgid "encrypted password"
+msgstr ""
+
+#: shadow.5.xml:73(para) gshadow.5.xml:70(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+
+#: shadow.5.xml:78(para)
+#, fuzzy
+msgid ""
+"If the password field contains some string that is not a valid result of "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, for instance ! or *, the user will not be able to use a unix "
+"password to log in (but the user may log in the system by other means)."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: shadow.5.xml:85(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+
+#: shadow.5.xml:92(para) gshadow.5.xml:92(para)
+msgid ""
+"A password field which starts with a exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+
+#: shadow.5.xml:102(emphasis)
+msgid "date of last password change"
+msgstr ""
+
+#: shadow.5.xml:105(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:109(para)
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"pasword the next time she will log in the system."
+msgstr ""
+
+#: shadow.5.xml:114(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+
+#: shadow.5.xml:121(emphasis)
+msgid "minimum password age"
+msgstr ""
+
+#: shadow.5.xml:123(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+
+#: shadow.5.xml:128(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+
+#: shadow.5.xml:135(emphasis)
+msgid "maximum password age"
+msgstr ""
+
+#: shadow.5.xml:137(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+
+#: shadow.5.xml:141(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+
+#: shadow.5.xml:146(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+
+#: shadow.5.xml:151(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+
+#: shadow.5.xml:159(emphasis)
+msgid "password warning period"
+msgstr ""
+
+#: shadow.5.xml:162(para)
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+
+#: shadow.5.xml:167(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+
+#: shadow.5.xml:175(emphasis)
+msgid "password inactivity period"
+msgstr ""
+
+#: shadow.5.xml:178(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+
+#: shadow.5.xml:184(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+
+#: shadow.5.xml:189(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr ""
+
+#: shadow.5.xml:197(emphasis)
+#, fuzzy
+#| msgid "User account information."
+msgid "account expiration date"
+msgstr "Informacja o kontach użytkowników."
+
+#: shadow.5.xml:200(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:204(para)
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an acount expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+
+#: shadow.5.xml:210(para)
+msgid "An empty field means that the account will never expire."
+msgstr ""
+
+#: shadow.5.xml:213(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:221(emphasis)
+msgid "reserved field"
+msgstr ""
+
+#: shadow.5.xml:223(para)
+msgid "This field is reserved for future use."
+msgstr ""
+
+#: shadow.5.xml:245(filename)
+#, fuzzy
+#| msgid "/etc/shadow"
+msgid "/etc/shadow-"
+msgstr "/etc/shadow"
+
+#: shadow.5.xml:247(para)
+msgid "Backup file for /etc/shadow."
+msgstr ""
+
+#: shadow.5.xml:248(para) passwd.5.xml:134(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+
+#: shadow.5.xml:259(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: shadow.3.xml:36(refmiscinfo)
+msgid "Library Calls"
+msgstr ""
+
+#: shadow.3.xml:40(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+#: shadow.3.xml:41(refpurpose)
+msgid "encrypted password file routines"
+msgstr ""
+
+#: shadow.3.xml:45(title)
+msgid "SYNTAX"
+msgstr "SKŁADNIA"
+
+#: shadow.3.xml:47(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+#: shadow.3.xml:51(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+#: shadow.3.xml:55(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "struct spwd *getspnam(char"
+
+#: shadow.3.xml:56(emphasis)
+msgid "*name"
+msgstr "*name"
+
+#: shadow.3.xml:56(emphasis) shadow.3.xml:69(emphasis)
+#: shadow.3.xml:74(emphasis) shadow.3.xml:80(emphasis)
+msgid ");"
+msgstr ");"
+
+#: shadow.3.xml:60(emphasis)
+msgid "void setspent();"
+msgstr "void setspent()"
+
+#: shadow.3.xml:64(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+#: shadow.3.xml:68(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+#: shadow.3.xml:69(emphasis) shadow.3.xml:80(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+#: shadow.3.xml:73(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+#: shadow.3.xml:74(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+#: shadow.3.xml:78(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+#: shadow.3.xml:79(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+#: shadow.3.xml:79(emphasis)
+msgid "FILE"
+msgstr "FILE"
+
+#: shadow.3.xml:84(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+#: shadow.3.xml:88(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+#: shadow.3.xml:94(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+
+#: shadow.3.xml:99(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+"      char\t\t*sp_namp; /* user login name */\n"
+"      char\t\t*sp_pwdp; /* encrypted password */\n"
+"      long int\t\tsp_lstchg; /* last password change */\n"
+"      long int\t\tsp_min; /* days until change allowed. */\n"
+"      long int\t\tsp_max; /* days before change required */\n"
+"      long int\t\tsp_warn; /* days warning for expiration */\n"
+"      long int\t\tsp_inact; /* days before account inactive */\n"
+"      long int\t\tsp_expire; /* date when account expires */\n"
+"      unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+"    "
+msgstr ""
+
+#: shadow.3.xml:111(para)
+msgid "The meanings of each field are:"
+msgstr ""
+
+#: shadow.3.xml:114(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+
+#: shadow.3.xml:117(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+
+#: shadow.3.xml:120(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+
+#: shadow.3.xml:123(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr ""
+
+#: shadow.3.xml:126(para)
+msgid "sp_max - days after which password must be changed"
+msgstr ""
+
+#: shadow.3.xml:129(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+
+#: shadow.3.xml:134(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+
+#: shadow.3.xml:139(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+
+#: shadow.3.xml:142(para)
+msgid "sp_flag - reserved for future use"
+msgstr ""
+
+#: shadow.3.xml:150(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+
+#: shadow.3.xml:163(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+
+#: shadow.3.xml:169(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+
+#: shadow.3.xml:184(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+
+#: shadow.3.xml:194(para)
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+
+#: shadow.3.xml:214(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: pwconv.8.xml:42(refentrytitle) pwconv.8.xml:47(refname)
+#: pwconv.8.xml:56(command) login.defs.5.xml:388(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+#: pwconv.8.xml:48(refname) pwconv.8.xml:59(command)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+#: pwconv.8.xml:49(refname) pwconv.8.xml:62(command)
+#: login.defs.5.xml:302(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+#: pwconv.8.xml:50(refname) pwconv.8.xml:65(command)
+#: login.defs.5.xml:308(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+#: pwconv.8.xml:51(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr ""
+
+#: pwconv.8.xml:71(para)
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:77(para)
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:84(para)
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:90(para)
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:97(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:104(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+
+#: pwconv.8.xml:115(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:124(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+
+#: pwconv.8.xml:147(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+
+#: pwconv.8.xml:155(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+
+#: pwconv.8.xml:181(para)
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>."
+
+#: pwck.8.xml:40(refentrytitle) pwck.8.xml:45(refname) pwck.8.xml:51(command)
+#: pwck.8.xml:66(command) login.defs.5.xml:380(term)
+msgid "pwck"
+msgstr "pwck"
+
+#: pwck.8.xml:46(refpurpose)
+msgid "verify integrity of password files"
+msgstr ""
+
+#: pwck.8.xml:52(arg) pwck.8.xml:67(arg) pwck.8.xml:171(option)
+msgid "-q"
+msgstr "-q"
+
+#: pwck.8.xml:53(arg) pwck.8.xml:192(option) grpck.8.xml:58(arg)
+#: grpck.8.xml:149(option)
+msgid "-s"
+msgstr "-s"
+
+#: pwck.8.xml:56(replaceable) pwck.8.xml:71(replaceable)
+#: passwd.5.xml:34(refentrytitle) passwd.5.xml:39(refname)
+#: passwd.1.xml:44(refentrytitle) passwd.1.xml:49(refname)
+#: passwd.1.xml:55(command) login.defs.5.xml:369(term)
+msgid "passwd"
+msgstr "passwd"
+
+#: pwck.8.xml:68(arg) pwck.8.xml:182(option) login.1.xml:222(option)
+#: grpck.8.xml:49(arg) grpck.8.xml:139(option)
+msgid "-r"
+msgstr "-r"
+
+#: pwck.8.xml:84(para)
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename> have the proper "
+"format and contain valid data. The user is prompted to delete entries that "
+"are improperly formatted or which have other uncorrectable errors."
+msgstr ""
+
+#: pwck.8.xml:93(para) grpck.8.xml:80(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr ""
+
+#: pwck.8.xml:96(para) grpck.8.xml:84(para)
+msgid "the correct number of fields"
+msgstr ""
+
+#: pwck.8.xml:99(para)
+msgid "a unique and valid user name"
+msgstr ""
+
+#: pwck.8.xml:102(para)
+msgid "a valid user and group identifier"
+msgstr ""
+
+#: pwck.8.xml:105(para)
+msgid "a valid primary group"
+msgstr ""
+
+#: pwck.8.xml:108(para)
+msgid "a valid home directory"
+msgstr ""
+
+#: pwck.8.xml:111(para)
+msgid "a valid login shell"
+msgstr ""
+
+#: pwck.8.xml:115(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+
+#: pwck.8.xml:120(para)
+msgid "These checks are the following:"
+msgstr ""
+
+#: pwck.8.xml:125(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+
+#: pwck.8.xml:131(para)
+msgid "passwords are specified in the shadowed file"
+msgstr ""
+
+#: pwck.8.xml:134(para)
+msgid "shadow entries have the correct number of fields"
+msgstr ""
+
+#: pwck.8.xml:137(para)
+msgid "shadow entries are unique in shadow"
+msgstr ""
+
+#: pwck.8.xml:140(para)
+msgid "the last password changes are not in the future"
+msgstr ""
+
+#: pwck.8.xml:144(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+
+#: pwck.8.xml:155(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+
+#: pwck.8.xml:165(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr "Polecenie <command>pwck</command> posiada następujące opcje:"
+
+#: pwck.8.xml:174(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+
+#: pwck.8.xml:185(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr ""
+
+#: pwck.8.xml:195(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+
+#: pwck.8.xml:203(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename>. The user may select "
+"alternate files with the <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> parameters."
+msgstr ""
+
+#: pwck.8.xml:270(para)
+msgid "one or more bad password entries"
+msgstr ""
+
+#: pwck.8.xml:276(para)
+msgid "can't open password files"
+msgstr ""
+
+#: pwck.8.xml:282(para)
+msgid "can't lock password files"
+msgstr ""
+
+#: pwck.8.xml:288(para)
+msgid "can't update password files"
+msgstr ""
+
+#: pwck.8.xml:294(para)
+#, fuzzy
+#| msgid "can't update password file"
+msgid "can't sort password files"
+msgstr "nie można zaktualizować pliku z hasłami"
+
+#: pwck.8.xml:252(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>pwck</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: pwck.8.xml:303(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: porttime.5.xml:34(refentrytitle) porttime.5.xml:39(refname)
+msgid "porttime"
+msgstr ""
+
+#: porttime.5.xml:40(refpurpose)
+msgid "port access time file"
+msgstr ""
+
+#: porttime.5.xml:45(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+
+#: porttime.5.xml:50(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+
+#: porttime.5.xml:59(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+
+#: porttime.5.xml:73(title)
+msgid "EXAMPLES"
+msgstr "PRZYKŁADY"
+
+#: porttime.5.xml:74(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+
+#: porttime.5.xml:80(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+#: porttime.5.xml:82(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+
+#: porttime.5.xml:91(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"      console:root,oper:Al0000-2400\n"
+"      console:*:\n"
+"    "
+msgstr ""
+"\n"
+"      console:root,oper:Al0000-2400\n"
+"      console:*:\n"
+"    "
+
+#: porttime.5.xml:96(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+
+#: porttime.5.xml:101(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+#: porttime.5.xml:108(filename) logoutd.8.xml:67(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+#: porttime.5.xml:110(para) logoutd.8.xml:69(para)
+msgid "File containing port access."
+msgstr ""
+
+#: porttime.5.xml:118(para) login.access.5.xml:109(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: passwd.5.xml:40(refpurpose)
+msgid "the password file"
+msgstr ""
+
+#: passwd.5.xml:45(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+
+#: passwd.5.xml:56(para)
+msgid "optional encrypted password"
+msgstr ""
+
+#: passwd.5.xml:59(para)
+msgid "numerical user ID"
+msgstr ""
+
+#: passwd.5.xml:62(para)
+msgid "numerical group ID"
+msgstr ""
+
+#: passwd.5.xml:65(para)
+msgid "user name or comment field"
+msgstr ""
+
+#: passwd.5.xml:68(para)
+msgid "user home directory"
+msgstr ""
+
+#: passwd.5.xml:71(para)
+msgid "optional user command interpreter"
+msgstr ""
+
+#: passwd.5.xml:75(para)
+msgid ""
+"The encrypted password field may be blank, in which case no password is "
+"required to authenticate as the specified login name. However, some "
+"applications which read the <filename>/etc/passwd</filename> file may decide "
+"not to permit <emphasis>any</emphasis> access at all if the "
+"<emphasis>password</emphasis> field is blank. If the <emphasis>password</"
+"emphasis> field is a lower-case <quote>x</quote>, then the encrypted "
+"password is actually stored in the <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> file instead; there "
+"<emphasis>must</emphasis> be a corresponding line in the <filename>/etc/"
+"shadow</filename> file, or else the user account is invalid. If the "
+"<emphasis>password</emphasis> field is any other string, then it will be "
+"treated as an encrypted password, as specified by "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:94(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:100(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+
+#: passwd.5.xml:106(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+
+#: passwd.5.xml:127(para)
+msgid "optional encrypted password file"
+msgstr ""
+
+#: passwd.5.xml:131(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/passwd-"
+msgstr "/etc/passwd"
+
+#: passwd.5.xml:133(para)
+msgid "Backup file for /etc/passwd."
+msgstr ""
+
+#: passwd.5.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: passwd.1.xml:50(refpurpose)
+msgid "change user password"
+msgstr "zmiana hasła użytkownika"
+
+#: passwd.1.xml:67(para)
+msgid ""
+"The <command>passwd</command> command changes passwords for user accounts. A "
+"normal user may only change the password for his/her own account, while the "
+"superuser may change the password for any account. <command>passwd</command> "
+"also changes the account or associated password validity period."
+msgstr ""
+
+#: passwd.1.xml:76(title)
+msgid "Password Changes"
+msgstr ""
+
+#: passwd.1.xml:77(para)
+msgid ""
+"The user is first prompted for his/her old password, if one is present. This "
+"password is then encrypted and compared against the stored password. The "
+"user has only one chance to enter the correct password. The superuser is "
+"permitted to bypass this step so that forgotten passwords may be changed."
+msgstr ""
+
+#: passwd.1.xml:85(para)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+
+#: passwd.1.xml:92(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+
+#: passwd.1.xml:98(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+
+#: passwd.1.xml:106(para)
+msgid "lower case alphabetics"
+msgstr ""
+
+#: passwd.1.xml:109(para)
+msgid "digits 0 thru 9"
+msgstr ""
+
+#: passwd.1.xml:112(para)
+msgid "punctuation marks"
+msgstr ""
+
+#: passwd.1.xml:116(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+
+#: passwd.1.xml:125(title)
+msgid "Hints for user passwords"
+msgstr ""
+
+#: passwd.1.xml:126(para)
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+
+#: passwd.1.xml:135(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+
+#: passwd.1.xml:144(para)
+msgid ""
+"You can find advices on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+
+#: passwd.1.xml:153(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr "Polecenie <command>passwd</command> posiada następujące opcje:"
+
+#: passwd.1.xml:158(term) faillog.8.xml:71(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: passwd.1.xml:162(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+
+#: passwd.1.xml:169(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: passwd.1.xml:173(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+
+#: passwd.1.xml:181(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+#: passwd.1.xml:185(para)
+msgid ""
+"Immediately expire an account's password. This in effect can force a user to "
+"change his/her password at the user's next login."
+msgstr ""
+
+#: passwd.1.xml:198(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option><replaceable>NIEAKTYWNE</"
+"replaceable>"
+
+#: passwd.1.xml:202(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+
+#: passwd.1.xml:211(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+#: passwd.1.xml:215(para)
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+
+#: passwd.1.xml:223(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+#: passwd.1.xml:227(para)
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+
+#: passwd.1.xml:233(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+
+#: passwd.1.xml:240(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr ""
+
+#: passwd.1.xml:247(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-n</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_DNI</"
+"replaceable>"
+
+#: passwd.1.xml:251(para) chage.1.xml:142(para)
+msgid ""
+"Set the minimum number of days between password changes to "
+"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
+"indicates that the user may change his/her password at any time."
+msgstr ""
+"Utawia minimalną liczbę dni pomiędzy zmianami hasła na "
+"<replaceable>MIN_DAYS</replaceable>. Wartość zerowa oznacza, że użytkownik "
+"może je zmieniać w dowolnym czasie."
+
+#: passwd.1.xml:269(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option><replaceable>REPOSITORY</"
+"replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--repository</option><replaceable>REPOZYTORIUM</"
+"replaceable>"
+
+#: passwd.1.xml:273(para)
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr ""
+
+#: passwd.1.xml:279(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+#: passwd.1.xml:283(para)
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+
+#: passwd.1.xml:297(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+#: passwd.1.xml:301(para)
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+
+#: passwd.1.xml:310(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option><replaceable>DNI_OSTRZ</"
+"replaceable>"
+
+#: passwd.1.xml:314(para)
+msgid ""
+"Set the number of days of warning before a password change is required. The "
+"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
+"the password expiring that a user will be warned that his/her password is "
+"about to expire."
+msgstr ""
+
+#: passwd.1.xml:323(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-x</option>, <option>--maxdays</option><replaceable>MAX_DNI</"
+"replaceable>"
+
+#: passwd.1.xml:327(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+
+#: passwd.1.xml:339(para)
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+
+#: passwd.1.xml:344(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+
+#: passwd.1.xml:349(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr ""
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid "<replaceable>DES</replaceable> (default)"
+msgstr ""
+
+#: passwd.1.xml:43(replaceable) newusers.8.xml:43(replaceable)
+#: login.defs.5.xml:43(replaceable) gpasswd.1.xml:43(replaceable)
+#: chpasswd.8.xml:43(replaceable) chgpasswd.8.xml:43(replaceable)
+msgid "MD5"
+msgstr ""
+
+#: passwd.1.xml:46(replaceable) newusers.8.xml:46(replaceable)
+#: login.defs.5.xml:46(replaceable) gpasswd.1.xml:46(replaceable)
+#: chpasswd.8.xml:46(replaceable) chgpasswd.8.xml:46(replaceable)
+msgid "SHA256"
+msgstr ""
+
+#: passwd.1.xml:49(replaceable) newusers.8.xml:49(replaceable)
+#: login.defs.5.xml:49(replaceable) gpasswd.1.xml:49(replaceable)
+#: chpasswd.8.xml:49(replaceable) chgpasswd.8.xml:49(replaceable)
+msgid "SHA512"
+msgstr ""
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid "It can take one of these values: <placeholder-1/>"
+msgstr ""
+
+#: passwd.1.xml:53(para) newusers.8.xml:53(para) login.defs.5.xml:53(para)
+#: gpasswd.1.xml:53(para) chpasswd.8.xml:53(para) chgpasswd.8.xml:53(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+
+#: passwd.1.xml:57(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:57(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:57(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:57(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:57(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:57(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superceded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "PASS_WARN_AGE (numer)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "PASS_MAX_DAYS (numer)"
+
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "PASS_MIN_DAYS (numer)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your crypt"
+"() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999999999 range."
+msgstr ""
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+
+#: passwd.1.xml:395(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/passwd"
+
+#: passwd.1.xml:397(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr ""
+
+#: passwd.1.xml:417(para) chage.1.xml:241(para)
+msgid "permission denied"
+msgstr "brak dostępu"
+
+#: passwd.1.xml:423(para)
+msgid "invalid combination of options"
+msgstr "nieprawidłowa kombinacja opcji"
+
+#: passwd.1.xml:429(para)
+msgid "unexpected failure, nothing done"
+msgstr ""
+
+#: passwd.1.xml:435(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr ""
+
+#: passwd.1.xml:441(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr ""
+
+#: passwd.1.xml:405(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>passwd</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: passwd.1.xml:456(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+"\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: nologin.8.xml:34(refentrytitle) nologin.8.xml:39(refname)
+#: nologin.8.xml:45(command)
+msgid "nologin"
+msgstr "nologin"
+
+#: nologin.8.xml:40(refpurpose)
+msgid "politely refuse a login"
+msgstr ""
+
+#: nologin.8.xml:51(para)
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+
+#: nologin.8.xml:56(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:65(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:76(title)
+msgid "HISTORY"
+msgstr ""
+
+#: nologin.8.xml:77(para)
+msgid "The <command>nologin</command> command appearred in BSD 4.4."
+msgstr ""
+
+#: newusers.8.xml:50(refentrytitle) newusers.8.xml:55(refname)
+#: newusers.8.xml:61(command) login.defs.5.xml:353(term)
+msgid "newusers"
+msgstr "newusers"
+
+#: newusers.8.xml:56(refpurpose)
+msgid "update and create new users in batch"
+msgstr "wsadowa aktualizacja i tworzenie nowych użytkowników"
+
+#: newusers.8.xml:64(replaceable)
+msgid "new_users"
+msgstr "new_users"
+
+#: newusers.8.xml:71(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>newusers</command> command reads a file of user name and "
+#| "clear-text password pairs and uses this information to update a group of "
+#| "existing users or to create new users. Each line is in the same format as "
+#| "the standard password file (see <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the following "
+#| "exceptions:"
+msgid ""
+"The <command>newusers</command> command reads a file of user name and clear-"
+"text password pairs and uses this information to update a group of existing "
+"users or to create new users. Each line is in the same format as the "
+"standard password file (see <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the exceptions "
+"explained below:"
+msgstr ""
+"Polecenie <command>newusers</command> odczytuje z pliku nazwa użytkowników i "
+"podane jawnym tekstem hasło. Odczytane informacje wykorzystywane są do "
+"aktualizacji grupy istniejących użytkowników lub tworzenia nowych. Każdy "
+"wiersz pliku posiada taki sam format jak standardowy plik haseł (patrz "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>), z następującymi wyjątkami:"
+
+#: newusers.8.xml:79(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr ""
+
+#: newusers.8.xml:84(emphasis)
+#, fuzzy
+#| msgid "*name"
+msgid "pw_name"
+msgstr "*name"
+
+#: newusers.8.xml:87(para)
+msgid "This is the name of the user."
+msgstr ""
+
+#: newusers.8.xml:90(para)
+msgid ""
+"It can be the name of a new user or the name of an existing user (or an user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+
+#: newusers.8.xml:101(emphasis)
+msgid "pw_passwd"
+msgstr "pw_passwd"
+
+#: newusers.8.xml:104(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+"To pole zostanie zakodowane i użyte jako nowa wartość zakodowanego hasła."
+
+#: newusers.8.xml:112(emphasis)
+#, fuzzy
+#| msgid "pw_gid"
+msgid "pw_uid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:115(para)
+msgid "This field is used to define the UID of the user."
+msgstr ""
+
+#: newusers.8.xml:118(para)
+msgid ""
+"If the field is empty, an new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:122(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr ""
+
+#: newusers.8.xml:126(para)
+msgid ""
+"If this field contains the name of an existing user (or the name of an user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+
+#: newusers.8.xml:132(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+
+#: newusers.8.xml:140(emphasis)
+msgid "pw_gid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:143(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:146(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:152(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+
+#: newusers.8.xml:158(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+
+#: newusers.8.xml:164(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created earlier wbefore by <command>newusers</command>), a new group will be "
+"created with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and Gs the ID for the new group."
+msgstr ""
+
+#: newusers.8.xml:176(emphasis)
+msgid "pw_gecos"
+msgstr ""
+
+#: newusers.8.xml:179(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr ""
+
+#: newusers.8.xml:186(emphasis)
+msgid "pw_dir"
+msgstr "pw_dir"
+
+#: newusers.8.xml:189(para)
+msgid "This field is used to define the home directory of the user."
+msgstr ""
+
+#: newusers.8.xml:192(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+
+#: newusers.8.xml:197(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+
+#: newusers.8.xml:207(emphasis)
+msgid "pw_shell"
+msgstr ""
+
+#: newusers.8.xml:210(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+
+#: newusers.8.xml:218(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+
+#: newusers.8.xml:224(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+
+#: newusers.8.xml:232(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+
+#: newusers.8.xml:240(para)
+#, fuzzy
+#| msgid ""
+#| "The options which apply to the <command>usermod</command> command are:"
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr "Polecenie <command>usermod</command> posiada następujące opcje:"
+
+#: newusers.8.xml:245(term) chpasswd.8.xml:116(term) chgpasswd.8.xml:95(term)
+#, fuzzy
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: newusers.8.xml:247(para) chpasswd.8.xml:118(para) chgpasswd.8.xml:97(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:248(para) chpasswd.8.xml:122(para) chgpasswd.8.xml:101(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+
+#: newusers.8.xml:270(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are choosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: newusers.8.xml:284(term) chpasswd.8.xml:154(term) chgpasswd.8.xml:129(term)
+#, fuzzy
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:156(para) chgpasswd.8.xml:131(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:289(para) chpasswd.8.xml:159(para) chgpasswd.8.xml:134(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+
+#: newusers.8.xml:293(para) chpasswd.8.xml:163(para) chgpasswd.8.xml:138(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+
+#: newusers.8.xml:297(para) chpasswd.8.xml:167(para) chgpasswd.8.xml:142(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+
+#: newusers.8.xml:301(para) chpasswd.8.xml:171(para) chgpasswd.8.xml:146(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: newusers.8.xml:313(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+
+#: newusers.8.xml:317(para) chpasswd.8.xml:187(para) chgpasswd.8.xml:162(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+
+#: newusers.8.xml:390(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/passwd"
+
+#: newusers.8.xml:392(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:400(para)
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: newgrp.1.xml:38(refentrytitle) newgrp.1.xml:43(refname)
+#: newgrp.1.xml:49(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+#: newgrp.1.xml:44(refpurpose)
+msgid "log in to a new group"
+msgstr ""
+
+#: newgrp.1.xml:50(replaceable) grpck.8.xml:51(replaceable)
+#: grpck.8.xml:60(replaceable) groupdel.8.xml:51(replaceable)
+#: groupadd.8.xml:58(replaceable) gpasswd.1.xml:66(replaceable)
+msgid "group"
+msgstr "group"
+
+#: newgrp.1.xml:56(para)
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+
+#: newgrp.1.xml:64(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+
+#: newgrp.1.xml:78(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+
+#: newgrp.1.xml:130(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: logoutd.8.xml:34(refentrytitle) logoutd.8.xml:39(refname)
+#: logoutd.8.xml:45(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+#: logoutd.8.xml:40(refpurpose)
+msgid "Enforce login time restrictions"
+msgstr ""
+
+#: logoutd.8.xml:51(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+
+#: logoutd.8.xml:73(filename) login.1.xml:319(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+#: logoutd.8.xml:75(para) login.1.xml:321(para)
+msgid "List of current login sessions."
+msgstr ""
+
+#: login.defs.5.xml:97(refentrytitle) login.defs.5.xml:102(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+#: login.defs.5.xml:103(refpurpose)
+msgid "shadow password suite configuration"
+msgstr ""
+
+#: login.defs.5.xml:108(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+
+#: login.defs.5.xml:115(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+
+#: login.defs.5.xml:123(para)
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+
+#: login.defs.5.xml:138(para)
+msgid "The following configuration items are provided:"
+msgstr ""
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "UMASK (number)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "PASS_MIN_DAYS (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "GID_MIN (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr ""
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overriden by PAM, since the default pam_unix module "
+"has it's own built in of 3 retries. However, this is a safe fallback in case "
+"you are using an authentication module that does not enforce PAM_MAXTRIES."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+
+#: login.defs.5.xml:181(para)
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "GID_MAX (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking of time restrictions specified in /etc/porttime."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>TTYPERM</option> (string)"
+msgstr "USERDEL_CMD (łańcuch)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "MAIL_DIR (łańcuch)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ULIMIT</option> (number)"
+msgstr "UID_MIN (numer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr ""
+
+#: login.defs.5.xml:209(title)
+msgid "CROSS REFERENCES"
+msgstr ""
+
+#: login.defs.5.xml:210(para)
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+
+#: login.defs.5.xml:218(term) chfn.1.xml:41(refentrytitle)
+#: chfn.1.xml:46(refname) chfn.1.xml:52(command)
+msgid "chfn"
+msgstr "chfn"
+
+#: login.defs.5.xml:220(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:228(term) chgpasswd.8.xml:42(refentrytitle)
+#: chgpasswd.8.xml:47(refname) chgpasswd.8.xml:53(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:230(para) login.defs.5.xml:260(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:238(term) chpasswd.8.xml:41(refentrytitle)
+#: chpasswd.8.xml:46(refname) chpasswd.8.xml:52(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:240(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:248(term) chsh.1.xml:40(refentrytitle)
+#: chsh.1.xml:45(refname) chsh.1.xml:51(command)
+msgid "chsh"
+msgstr "chsh"
+
+#: login.defs.5.xml:250(para)
+#, fuzzy
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr "CHFN_AUTH CHFN_RESTRICT"
+
+#: login.defs.5.xml:258(term) gpasswd.1.xml:42(refentrytitle)
+#: gpasswd.1.xml:47(refname) gpasswd.1.xml:61(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+#: login.defs.5.xml:268(term) groupadd.8.xml:42(refentrytitle)
+#: groupadd.8.xml:47(refname) groupadd.8.xml:53(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+#: login.defs.5.xml:270(para)
+#, fuzzy
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:277(term) groupdel.8.xml:38(refentrytitle)
+#: groupdel.8.xml:43(refname) groupdel.8.xml:49(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:279(para) login.defs.5.xml:285(para)
+#: login.defs.5.xml:291(para) login.defs.5.xml:298(para)
+#: login.defs.5.xml:304(para) login.defs.5.xml:310(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:283(term) groupmems.8.xml:38(refentrytitle)
+#: groupmems.8.xml:43(refname) groupmems.8.xml:49(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+#: login.defs.5.xml:289(term) groupmod.8.xml:38(refentrytitle)
+#: groupmod.8.xml:43(refname) groupmod.8.xml:49(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+#: login.defs.5.xml:296(term) grpck.8.xml:38(refentrytitle)
+#: grpck.8.xml:43(refname) grpck.8.xml:49(command) grpck.8.xml:58(command)
+msgid "grpck"
+msgstr "grpck"
+
+#: login.defs.5.xml:316(term) login.1.xml:70(refentrytitle)
+#: login.1.xml:75(refname) login.1.xml:81(command) login.1.xml:89(command)
+#: login.1.xml:96(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:318(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS "
+"LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR "
+"MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> "
+"TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</"
+"phrase> USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:345(term)
+#, fuzzy
+#| msgid "newgrp"
+msgid "newgrp / sg"
+msgstr "newgrp"
+
+#: login.defs.5.xml:347(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:355(para)
+#, fuzzy
+msgid ""
+"ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+"SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:371(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:382(para) login.defs.5.xml:390(para)
+msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+
+#: login.defs.5.xml:397(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:412(term)
+#, fuzzy
+msgid "sulogin"
+msgstr "login"
+
+#: login.defs.5.xml:414(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:423(para)
+#, fuzzy
+msgid ""
+"CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+"PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN "
+"UID_MAX UID_MIN UMASK"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:436(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:445(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:456(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: login.defs.5.xml:472(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: login.access.5.xml:35(refentrytitle) login.access.5.xml:40(refname)
+msgid "login.access"
+msgstr "login.access"
+
+#: login.access.5.xml:41(refpurpose)
+msgid "login access control table"
+msgstr ""
+
+#: login.access.5.xml:46(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:52(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:60(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+
+#: login.access.5.xml:65(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+
+#: login.access.5.xml:69(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+
+#: login.access.5.xml:83(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+
+#: login.access.5.xml:88(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+
+#: login.1.xml:76(refpurpose)
+msgid "begin session on the system"
+msgstr ""
+
+#: login.1.xml:82(arg) login.1.xml:90(arg) login.1.xml:97(arg)
+#: login.1.xml:214(option) groupmems.8.xml:54(arg)
+msgid "-p"
+msgstr "-p"
+
+#: login.1.xml:83(replaceable) login.1.xml:91(replaceable)
+#: login.1.xml:98(replaceable)
+msgid "host"
+msgstr ""
+
+#: login.1.xml:83(arg) login.1.xml:91(arg) chfn.1.xml:56(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+#: login.1.xml:86(replaceable)
+msgid "ENV=VAR"
+msgstr "ENV=VAR"
+
+#: login.1.xml:92(arg) login.1.xml:192(option) expiry.1.xml:54(arg)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:98(arg) chfn.1.xml:54(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: login.1.xml:104(para)
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+
+#: login.1.xml:118(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+
+#: login.1.xml:125(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+
+#: login.1.xml:134(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+
+#: login.1.xml:145(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+
+#: login.1.xml:154(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+
+#: login.1.xml:160(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+
+#: login.1.xml:172(para) login.1.xml:248(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+
+#: login.1.xml:195(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr ""
+
+#: login.1.xml:198(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+
+#: login.1.xml:206(option)
+msgid "-h"
+msgstr "-h"
+
+#: login.1.xml:209(para)
+msgid "Name of the remote host for this login."
+msgstr ""
+
+#: login.1.xml:217(para)
+msgid "Preserve environment."
+msgstr ""
+
+#: login.1.xml:225(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr ""
+
+#: login.1.xml:230(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+
+#: login.1.xml:239(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+
+#: login.1.xml:244(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr ""
+
+#: login.1.xml:260(para)
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+
+#: login.1.xml:325(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+#: login.1.xml:327(para)
+msgid "List of previous login sessions."
+msgstr ""
+
+#: login.1.xml:343(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+#: login.1.xml:345(para)
+msgid "System message of the day file."
+msgstr ""
+
+#: login.1.xml:349(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+#: login.1.xml:351(para)
+msgid "Prevent non-root users from logging in."
+msgstr ""
+
+#: login.1.xml:355(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+#: login.1.xml:357(para)
+msgid "List of terminal types."
+msgstr ""
+
+#: login.1.xml:361(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+#: login.1.xml:363(para)
+msgid "Suppress printing of system messages."
+msgstr ""
+
+#: login.1.xml:377(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: limits.5.xml:35(refentrytitle) limits.5.xml:40(refname)
+msgid "limits"
+msgstr "limits"
+
+#: limits.5.xml:41(refpurpose)
+msgid "resource limits definition"
+msgstr ""
+
+#: limits.5.xml:47(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+
+#: limits.5.xml:55(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+
+#: limits.5.xml:61(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr ""
+
+#: limits.5.xml:64(emphasis)
+msgid "user LIMITS_STRING"
+msgstr ""
+
+#: limits.5.xml:67(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+
+#: limits.5.xml:73(para)
+msgid "The valid identifiers are:"
+msgstr ""
+
+#: limits.5.xml:76(para)
+msgid "A: max address space (KB)"
+msgstr ""
+
+#: limits.5.xml:77(para)
+msgid "C: max core file size (KB)"
+msgstr ""
+
+#: limits.5.xml:78(para)
+msgid "D: max data size (KB)"
+msgstr ""
+
+#: limits.5.xml:79(para)
+msgid "F: maximum filesize (KB)"
+msgstr ""
+
+#: limits.5.xml:80(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr ""
+
+#: limits.5.xml:81(para)
+msgid "N: max number of open files"
+msgstr ""
+
+#: limits.5.xml:82(para)
+msgid "R: max resident set size (KB)"
+msgstr ""
+
+#: limits.5.xml:83(para)
+msgid "S: max stack size (KB)"
+msgstr ""
+
+#: limits.5.xml:84(para)
+msgid "T: max CPU time (MIN)"
+msgstr ""
+
+#: limits.5.xml:85(para)
+msgid "U: max number of processes"
+msgstr ""
+
+#: limits.5.xml:86(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:91(para)
+msgid "L: max number of logins for this user"
+msgstr ""
+
+#: limits.5.xml:92(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:97(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+
+#: limits.5.xml:99(para)
+msgid "O: max real time priority"
+msgstr ""
+
+#: limits.5.xml:102(para)
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+
+#: limits.5.xml:108(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"      username L2D2048N5\n"
+"      username L2 D2048 N5\n"
+"    "
+msgstr ""
+"\n"
+"      username L2D2048N5\n"
+"      username L2 D2048 N5\n"
+"    "
+
+#: limits.5.xml:113(para)
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. A "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+
+#: limits.5.xml:120(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+
+#: limits.5.xml:127(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+
+#: limits.5.xml:132(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+
+#: limits.5.xml:143(filename)
+msgid "/etc/limits"
+msgstr "/etc/limits"
+
+#: limits.5.xml:151(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: lastlog.8.xml:35(refentrytitle) lastlog.8.xml:40(refname)
+#: lastlog.8.xml:46(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: lastlog.8.xml:41(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+"wyświetla informacje o ostanim logowaniu dla wybranego lub wszystkich "
+"użytkowaników"
+
+#: lastlog.8.xml:55(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+"Polecenie <command>lastlog</command> formatuje i wyświetla zawartość bazy "
+"ostatnich logowań zapisanych w pliku <filename>/var/log/lastlog</filename>. "
+"Wyświetlone zostaną <emphasis>nazwa użytkownika</emphasis>, <emphasis>port</"
+"emphasis> i <emphasis>czas</emphasis> ostatniego logowania. Domyślnie (bez "
+"flag) pozycje wyświetlane są w kolejności w jakiej są w pliku <filename>/etc/"
+"passwd</filename>."
+
+#: lastlog.8.xml:67(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr "Polecenie <command>lastlog</command> posiada następujące opcje:"
+
+#: lastlog.8.xml:72(term)
+msgid ""
+"<option>-b</option>, <option>--before</option><replaceable>DAYS</replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--before</option><replaceable>DNI</replaceable>"
+
+#: lastlog.8.xml:76(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+"Wyświetlenie rekordów lastlog starszych niż zadana <emphasis remap=\"I"
+"\">DNI</emphasis>."
+
+#: lastlog.8.xml:90(term) faillog.8.xml:140(term)
+msgid ""
+"<option>-t</option>, <option>--time</option><replaceable>DAYS</replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>DNI</replaceable>"
+
+#: lastlog.8.xml:95(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+"Wyświetlenie rekordów lastlog nie starszych niż zadana ilość <emphasis remap="
+"\"I\">DNI</emphasis>."
+
+#: lastlog.8.xml:102(term) faillog.8.xml:151(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option><replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-u</option>, <option>--user</option><replaceable>LOGIN</replaceable>|"
+"<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option><replaceable>KLUCZ</"
+"replaceable>=<replaceable>WARTOŚĆ</replaceable>"
+
+#: lastlog.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "Print the lastlog record for user with specified <emphasis remap=\"I"
+#| "\">LOGIN</emphasis> only."
+msgid "Print the lastlog record of the specified user(s)."
+msgstr ""
+"Wyświetlenie informacji o ostanim logowaniu dla użytkownika "
+"<replaceable>LOGIN</replaceable>."
+
+#: lastlog.8.xml:110(para) faillog.8.xml:161(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+
+#: lastlog.8.xml:122(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+"Jeżeli użytkownik nigdy się nie logował to zamiast portu i czasu \n"
+"logowania wyświetlany jest komunikat <emphasis>**Nigdy nie zalogowany**</"
+"emphasis> (użytkownik nigdy się nie logował)."
+
+#: lastlog.8.xml:127(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+
+#: lastlog.8.xml:135(title) groups.1.xml:65(title) chsh.1.xml:106(title)
+#: chage.1.xml:193(title)
+msgid "NOTE"
+msgstr "UWAGI"
+
+#: lastlog.8.xml:136(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+"Baza danych <filename>lastlog</filename> jest plikiem zawierajacym "
+"informacje o ostanim logowaniu każdego użytkowanika. Pliku tego nie powinnoa "
+"się okresowo kasować i zakąłdać od nowa (rotacja). Plik ten jest plikiem z "
+"dziurami tak więc jego rozmiar jest zwykle znacznie mniejszy pokazywany "
+"przez polecenie \"<command>ls -l</command>\" (pokazujące że jest on dużych "
+"rozmiarów jeżeli masz w <filename>passwd</filename> użytkowaników z wysokimi "
+"wartościami UID). Mozesz wyświetlić rzeczywisty rozmiar tego pliku używając "
+"polecenia \"<command>ls -s</command>\"."
+
+#: lastlog.8.xml:150(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+#: lastlog.8.xml:152(para)
+msgid "Database times of previous user logins."
+msgstr "Baza danych ostatnich logowań użytkowników."
+
+#: lastlog.8.xml:160(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+"Duże luki w numeracji UID powodują, że program będzie pracował dłużej, nie "
+"wyświetlając wyników (np. jeśli w bazie lastlog nie ma wpisów dla o UID "
+"pomiedzy 170, a 800, to program będzie sprawiał wrażenie zawieszonego w "
+"trakcie przetwarzania wpisów dla użytkowanikół o UID 171-799)."
+
+#: gshadow.5.xml:33(refentrytitle) gshadow.5.xml:38(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+#: gshadow.5.xml:39(refpurpose)
+msgid "shadowed group file"
+msgstr ""
+
+#: gshadow.5.xml:44(para)
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+
+#: gshadow.5.xml:54(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+
+#: gshadow.5.xml:60(emphasis)
+msgid "group name"
+msgstr "nazwa grupy"
+
+#: gshadow.5.xml:62(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr ""
+
+#: gshadow.5.xml:75(para)
+#, fuzzy
+msgid ""
+"If the password field contains some string that is not a valid result of "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, for instance ! or *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: gshadow.5.xml:82(para)
+#, fuzzy
+#| msgid ""
+#| "The new value of the user's password file comment field. It is normally "
+#| "modified using the <citerefentry><refentrytitle>chfn</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgid ""
+"The password is used when an user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: gshadow.5.xml:88(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+
+#: gshadow.5.xml:98(para)
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+
+#: gshadow.5.xml:106(emphasis)
+msgid "administrators"
+msgstr ""
+
+#: gshadow.5.xml:108(para) gshadow.5.xml:124(para)
+msgid "It must be a comma-separated list of user names."
+msgstr ""
+
+#: gshadow.5.xml:111(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr ""
+
+#: gshadow.5.xml:115(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+
+#: gshadow.5.xml:122(emphasis)
+msgid "members"
+msgstr ""
+
+#: gshadow.5.xml:127(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+
+#: gshadow.5.xml:131(para)
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+
+#: gshadow.5.xml:160(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: grpck.8.xml:44(refpurpose)
+msgid "verify integrity of group files"
+msgstr ""
+
+#: grpck.8.xml:70(para)
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+
+#: grpck.8.xml:87(para)
+msgid "a unique and valid group name"
+msgstr ""
+
+#: grpck.8.xml:90(para)
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+
+#: grpck.8.xml:97(para)
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr ""
+
+#: grpck.8.xml:103(para)
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+
+#: grpck.8.xml:111(para)
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+
+#: grpck.8.xml:122(para)
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+
+#: grpck.8.xml:134(para)
+#, fuzzy
+#| msgid "The options which apply to the <command>pwck</command> command are:"
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr "Polecenie <command>pwck</command> posiada następujące opcje:"
+
+#: grpck.8.xml:141(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+
+#: grpck.8.xml:151(para)
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+
+#: grpck.8.xml:160(para)
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\"> and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+
+#: grpck.8.xml:228(para)
+msgid "one or more bad group entries"
+msgstr ""
+
+#: grpck.8.xml:234(para)
+msgid "can't open group files"
+msgstr ""
+
+#: grpck.8.xml:240(para)
+msgid "can't lock group files"
+msgstr ""
+
+#: grpck.8.xml:246(para)
+msgid "can't update group files"
+msgstr ""
+
+#: grpck.8.xml:210(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>grpckl</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: grpck.8.xml:255(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gshadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: groups.1.xml:34(refentrytitle) groups.1.xml:39(refname)
+#: groups.1.xml:45(command)
+msgid "groups"
+msgstr "groups"
+
+#: groups.1.xml:40(refpurpose)
+msgid "display current group names"
+msgstr ""
+
+#: groups.1.xml:47(replaceable) chfn.1.xml:58(replaceable)
+msgid "user"
+msgstr ""
+
+#: groups.1.xml:54(para)
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+
+#: groups.1.xml:66(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change their current "
+"real and effective group ID."
+msgstr ""
+
+#: groups.1.xml:88(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+#: groupmod.8.xml:44(refpurpose)
+msgid "modify a group definition on the system"
+msgstr "modyfikuj definicję grupy systemowej"
+
+#: groupmod.8.xml:53(replaceable)
+msgid "GROUP"
+msgstr "GRUPA"
+
+#: groupmod.8.xml:59(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+"Polcenie <command>groupmod</command> modifikuje definicję grupy "
+"<replaceable>GRUPA</replaceable> poprzez modifikację stosownego wpisu w "
+"bazie grup."
+
+#: groupmod.8.xml:68(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr "Polecenie <command>groupmod</command> posiada następujące opcje:"
+
+#: groupmod.8.xml:74(term) groupadd.8.xml:94(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+
+#: groupmod.8.xml:78(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the group will be changed from <replaceable>GROUP</"
+#| "replaceable> to <replaceable>NEW_GROUP</replaceable> name."
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: groupmod.8.xml:82(para)
+#, fuzzy
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used. Values between 0 and 999 are typically reserved for system groups."
+msgstr ""
+"Nowa wartość ID grupy <replaceable>GRUPA</replaceable>. Numeryczna wartość "
+"<replaceable>GID</replaceable> musi mieć nieujemną wartość całkowitą. "
+"Wartość ta musi być unikalna chyba że użyto opcji <option>-o</option>. "
+"Wartości pomiędzy 0 a 999 są zwykle zarezerwowane dla grup systemowych. "
+"Pliki, dla których stary identyfikator jest identyfikatorem grupy pliku, "
+"wymagają ręcznej zmiany ID grupy."
+
+#: groupmod.8.xml:89(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+
+#: groupmod.8.xml:104(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option><replaceable>NEW_GROUP</"
+"replaceable>"
+msgstr ""
+"<option>-a</option>, <option>--append</option><replaceable>NOWA_GRUPA</"
+"replaceable>"
+
+#: groupmod.8.xml:109(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: groupmod.8.xml:120(para)
+#, fuzzy
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+"Użyte z opcją <option>-g</option> umożliwia zmiane <replaceable>GID</"
+"replaceable> grupy na wartość nieunikalną."
+
+#: groupmod.8.xml:219(para)
+msgid "group name already in use"
+msgstr "nazwa grupy już jest w użyciu"
+
+#: groupmod.8.xml:183(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>groupmod</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: groupmod.8.xml:234(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: groupmems.8.xml:44(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr ""
+
+#: groupmems.8.xml:51(replaceable) groupmems.8.xml:52(replaceable)
+msgid "user_name"
+msgstr "user_name"
+
+#: groupmems.8.xml:51(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:52(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+#: groupmems.8.xml:53(replaceable)
+msgid "group_name"
+msgstr ""
+
+#: groupmems.8.xml:53(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+#: groupmems.8.xml:54(arg)
+msgid "-l"
+msgstr "-l"
+
+#: groupmems.8.xml:61(para)
+msgid ""
+"The <command>groupmems</command> command allows a user to administer his/her "
+"own group membership list without the requirement of superuser privileges. "
+"The <command>groupmems</command> utility is for systems that configure its "
+"users to be in their own name sake primary group (i.e., guest / guest)."
+msgstr ""
+
+#: groupmems.8.xml:69(para)
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+
+#: groupmems.8.xml:76(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr "Polecenie <command>groupmems</command> posiada następujące opcje:"
+
+#: groupmems.8.xml:82(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option><replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#: groupmems.8.xml:84(para)
+msgid "Add an user to the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:85(para) groupmems.8.xml:101(para)
+#: groupmems.8.xml:126(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+
+#: groupmems.8.xml:93(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option><replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>DNI</replaceable>"
+
+#: groupmems.8.xml:95(para)
+msgid "Delete a user from the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:96(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+
+#: groupmems.8.xml:109(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+msgid ""
+"<option>-g</option>, <option>--group</option><replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+
+#: groupmems.8.xml:111(para)
+msgid "The superuser can specify which group membership list to modify."
+msgstr ""
+
+#: groupmems.8.xml:117(term) chage.1.xml:128(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: groupmems.8.xml:119(para)
+msgid "List the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:123(term)
+#, fuzzy
+#| msgid "<option>-e</option>, <option>--expire</option>"
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+#: groupmems.8.xml:125(para)
+msgid "Purge all users from the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:137(title)
+msgid "SETUP"
+msgstr ""
+
+#: groupmems.8.xml:138(para)
+msgid ""
+"The <command>groupmems</command> executable should be in mode <literal>2770</"
+"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
+"emphasis>. The system administrator can add users to group <emphasis>groups</"
+"emphasis> to allow or disallow them using the <command>groupmems</command> "
+"utility to manage their own group membership list."
+msgstr ""
+
+#: groupmems.8.xml:147(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2770 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+"    "
+msgstr ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2770 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+"    "
+
+#: groupmems.8.xml:179(para)
+msgid "secure group account information"
+msgstr ""
+
+#: groupmems.8.xml:187(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupdel.8.xml:44(refpurpose)
+msgid "delete a group"
+msgstr ""
+
+#: groupdel.8.xml:58(para)
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <emphasis remap=\"I\">group</emphasis>. "
+"The named group must exist."
+msgstr ""
+
+#: groupdel.8.xml:66(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+
+#: groupdel.8.xml:70(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+
+#: groupdel.8.xml:132(para)
+msgid "can't remove user's primary group"
+msgstr ""
+
+#: groupdel.8.xml:108(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>groupdel</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: groupdel.8.xml:147(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: groupadd.8.xml:48(refpurpose)
+msgid "create a new group"
+msgstr "twółrz nową grupę"
+
+#: groupadd.8.xml:65(para)
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+
+#: groupadd.8.xml:74(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr "Polecenie <command>groupadd</command> posiada następujące opcje:"
+
+#: groupadd.8.xml:84(para)
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+
+#: groupadd.8.xml:98(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than 999 and greater than "
+"every other group. Values between 0 and 999 are typically reserved for "
+"system accounts."
+msgstr ""
+
+#: groupadd.8.xml:118(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+
+#: groupadd.8.xml:123(para)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option><replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"Example: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable><option>-K </"
+"option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option><replaceable>KLUCZ</"
+"replaceable>=<replaceable>WARTOŚĆ</replaceable>"
+
+#: groupadd.8.xml:127(para)
+msgid ""
+"Note: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+
+#: groupadd.8.xml:139(para)
+msgid "This option permits to add a group with a non-unique GID."
+msgstr ""
+
+#: groupadd.8.xml:171(para)
+#, fuzzy
+#| msgid "create a new group"
+msgid "Create a system group."
+msgstr "twółrz nową grupę"
+
+#: groupadd.8.xml:174(para)
+msgid ""
+"The numeric identifiers of new system groups are choosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+
+#: groupadd.8.xml:225(para)
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+
+#: groupadd.8.xml:231(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr ""
+
+#: groupadd.8.xml:234(para)
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+
+#: groupadd.8.xml:238(para)
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+
+#: groupadd.8.xml:271(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr ""
+
+#: groupadd.8.xml:277(para)
+msgid "group name not unique"
+msgstr ""
+
+#: groupadd.8.xml:247(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>groupadd</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#: groupadd.8.xml:292(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:49(phrase)
+#, fuzzy
+#| msgid "-r <placeholder-1/>"
+msgid "administer <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: gpasswd.1.xml:52(phrase)
+#, fuzzy
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#: gpasswd.1.xml:63(replaceable)
+#, fuzzy
+msgid "option"
+msgstr "opcje"
+
+#: gpasswd.1.xml:73(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+
+#: gpasswd.1.xml:81(para)
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+
+#: gpasswd.1.xml:86(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:93(para)
+#, fuzzy
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+"Nowa wartość pola komentarza dla danego użytkownika w pliku haseł. Zwykle "
+"jest zmieniana przy pomocy polecenia <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:101(title)
+msgid "Notes about group passwords"
+msgstr ""
+
+#: gpasswd.1.xml:102(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+
+#: gpasswd.1.xml:113(para)
+#, fuzzy
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: gpasswd.1.xml:117(para)
+msgid "The options cannot be combined."
+msgstr ""
+
+#: gpasswd.1.xml:120(para)
+#, fuzzy
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr "Polecenie <command>passwd</command> posiada następujące opcje:"
+
+#: gpasswd.1.xml:125(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option><replaceable>user</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#: gpasswd.1.xml:129(para)
+#, fuzzy
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: gpasswd.1.xml:138(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option><replaceable>user</replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>DNI</replaceable>"
+
+#: gpasswd.1.xml:142(para)
+#, fuzzy
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+"Nazwa grupy zostanie zmieniona z <replaceable>GRUPA</replaceable> na nazwę "
+"<replaceable>NOWA_GRUPA</replaceable>."
+
+#: gpasswd.1.xml:151(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--remove</option>"
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: gpasswd.1.xml:155(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. Only "
+"group members will be allowed to use <command>newgrp</command> to join the "
+"named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:166(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: gpasswd.1.xml:170(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. Only "
+"group members will be allowed to use <command>newgrp</command> to join the "
+"named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:181(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-A</option>, <option>--administrators</option><replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_DNI</"
+"replaceable>"
+
+#: gpasswd.1.xml:185(para)
+msgid "Set the list of administrative users."
+msgstr ""
+
+#: gpasswd.1.xml:193(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-b</option>, <option>--before</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-M</option>, <option>--members</option><replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-b</option>, <option>--before</option><replaceable>DNI</replaceable>"
+
+#: gpasswd.1.xml:197(para)
+msgid "Set the list of group members."
+msgstr ""
+
+#: gpasswd.1.xml:207(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+
+#: gpasswd.1.xml:252(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: faillog.8.xml:34(refentrytitle) faillog.8.xml:39(refname)
+#: faillog.8.xml:45(command) faillog.5.xml:34(refentrytitle)
+#: faillog.5.xml:39(refname) faillog.5.xml:86(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+#: faillog.8.xml:40(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr ""
+
+#: faillog.8.xml:54(para)
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+
+#: faillog.8.xml:65(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr "Polecenie <command>faillog</command> posiada następujące opcje:"
+
+#: faillog.8.xml:73(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+
+#: faillog.8.xml:86(term)
+msgid ""
+"<option>-l</option>, <option>--lock-time</option><replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-time</option><replaceable>SEK</"
+"replaceable>"
+
+#: faillog.8.xml:91(para)
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+
+#: faillog.8.xml:95(para) faillog.8.xml:121(para) faillog.8.xml:133(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+
+#: faillog.8.xml:102(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option><replaceable>MAX</replaceable>"
+msgstr ""
+
+#: faillog.8.xml:107(para)
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+
+#: faillog.8.xml:111(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+
+#: faillog.8.xml:116(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+
+#: faillog.8.xml:128(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:130(para)
+msgid "Reset the counters of login failures."
+msgstr ""
+
+#: faillog.8.xml:144(para)
+#, fuzzy
+#| msgid ""
+#| "Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+#| "emphasis>."
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+"Wyświetlenie rekordów lastlog nie starszych niż zadana ilość <emphasis remap="
+"\"I\">DNI</emphasis>."
+
+#: faillog.8.xml:156(para)
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:174(para)
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:179(para)
+msgid ""
+"NOTE: in display mode, only the records of users which currently exist in "
+"the system are displayed. In the other modes (when the <option>-l</option>, "
+"<option>-m</option>, or <option>-r</option> options are used), the records "
+"of the user, or the range of users, or all the users that may have an entry "
+"in the faillog database will be changed. This is useful to reset records of "
+"users that have been deleted or set a policy in advance for a range of users."
+msgstr ""
+
+#: faillog.8.xml:192(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+
+#: faillog.8.xml:205(filename) faillog.5.xml:74(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+#: faillog.8.xml:207(para) faillog.5.xml:76(para)
+msgid "Failure logging file."
+msgstr ""
+
+#: faillog.8.xml:215(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: faillog.5.xml:40(refpurpose)
+msgid "login failure logging file"
+msgstr ""
+
+#: faillog.5.xml:45(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+
+#: faillog.5.xml:49(para)
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"whiche the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+
+#: faillog.5.xml:59(para)
+msgid "The structure of the file is:"
+msgstr "Struktura tego pliku to:"
+
+#: faillog.5.xml:60(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort   fail_cnt;\n"
+"\tshort   fail_max;\n"
+"\tchar    fail_line[12];\n"
+"\ttime_t  fail_time;\n"
+"\tlong    fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort   fail_cnt;\n"
+"\tshort   fail_max;\n"
+"\tchar    fail_line[12];\n"
+"\ttime_t  fail_time;\n"
+"\tlong    fail_locktime;\n"
+"};"
+
+#: expiry.1.xml:41(refentrytitle) expiry.1.xml:46(refname)
+#: expiry.1.xml:52(command)
+msgid "expiry"
+msgstr "expiry"
+
+#: expiry.1.xml:47(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr "sprawdzenie ważności i wymuszenie zmiany hasła"
+
+#: expiry.1.xml:60(para)
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+"Polecenie <command>expiry</command> sprawdza (<option>-c</option>), kiedy "
+"wygaśnie aktualne hasło oraz wymusza (<option>-f</option>) lub wymusza jego "
+"zmianę.Może ono być wywoływane jako zwykłe polecenie przez użytkownika."
+
+#: expiry.1.xml:87(para) chage.1.xml:262(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: chsh.1.xml:46(refpurpose)
+msgid "change login shell"
+msgstr "zmiana powłoki zgłoszeniowej"
+
+#: chsh.1.xml:63(para)
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account, the superuser may change "
+"the login shell for any account."
+msgstr ""
+"Polecenie <command>chsh</command> zmienia powłokę zgłoszeniową użytkownika, "
+"która określa nazwę początkowego polecenia zgłoszeniowego użytkownika. "
+"Zwykły użytkownik może zmienić wyłącznie  powłokę zgłoszeniową własnego "
+"konta, superużytkownik może zmienić powłokę zgłoszeniową dla dowolnego konta."
+
+#: chsh.1.xml:74(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr "Polecenie <command>chsh</command> posiada następujące opcje:"
+
+#: chsh.1.xml:96(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Jeżeli nie podano opcji <option>-s</option>, to polecenie <command>chsh</"
+"command> działa w trybie interaktywnym, proponując użytkownikowi bieżącą "
+"powłokę logowania. Wprowadzenie nowej wartości powoduje zmianę powłoki, a "
+"podanie wartości pustej  pozostawia bieżącą powłokę. Bieżąca powłoka "
+"wyświetlana jest w nawiasach <emphasis>[ ]</emphasis>"
+
+#: chsh.1.xml:107(para)
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+"Jedynym ograniczeniem nałożonym na powłokę zgłoszeniową jest to, że jej "
+"nazwa musi być wymieniona w <filename>/etc/shells</filename>, chyba że "
+"polecenie chsh zostało uruchomione przez superużytkownika wówczas może być "
+"podana dowolna nazwa. Użytkownicy kont z ograniczoną powłoką logowania nie "
+"mogą jej zmieniać. Odradza się z tego powodu umieszczanie <filename>/bin/"
+"rsh</filename> w pliku <filename>/etc/shells</filename>, gdyż przypadkowa "
+"zmiana na powłokę ograniczoną uniemożliwi użytkownikowi jakąkolwiek zmianę "
+"powłoki logowania, nawet z powrotem na dotychczasową."
+
+#: chsh.1.xml:142(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+#: chsh.1.xml:144(para)
+msgid "List of valid login shells."
+msgstr "Lista dozwolonych powłok zgłoszeniowych."
+
+#: chsh.1.xml:158(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chpasswd.8.xml:47(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "wsadowa aktualizacja haseł użytkowników"
+
+#: chpasswd.8.xml:61(para)
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+"Polecenie <command>chpasswd</command> czyta pary danych (użytkownik i hasło) "
+"ze standardowego wejścia. Odczytane informacje wykorzystywane są do "
+"aktualizacji danych o grupie istniejących użytkowników. Każdy wiersz "
+"przekazywanych danych ma postać:"
+
+#: chpasswd.8.xml:66(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">nazwa_użytkownika</emphasis>:<emphasis remap=\"I"
+"\">hasło</emphasis>"
+
+#: chpasswd.8.xml:71(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"Domyślnie dostarczane hasła muszą być w postaci jawnej. Podczas kodowania "
+"haseł używany jest domyślnie algorytm DES. W trakcie zmiany hasła "
+"aktualizowany jest także wiek hasła."
+
+#: chpasswd.8.xml:76(para) chgpasswd.8.xml:75(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"ENCRYPT_METHOD variable of <filename>/etc/login.defs</filename>, and can be "
+"overwiten with the <option>-e</option>, <option>-m</option>, or <option>-c</"
+"option> options."
+msgstr ""
+
+#: chpasswd.8.xml:82(para)
+msgid ""
+"<command>chpasswd</command> first update the password in memory, and then "
+"commit all the changes to disk if no errors occured for any users."
+msgstr ""
+
+#: chpasswd.8.xml:89(para)
+#, fuzzy
+#| msgid "Supplied passwords are in encrypted form."
+msgid "The supplied passwords must be in clear-text."
+msgstr ""
+"Dostarczone na standardowe wejście hasła są traktowane jako już zakodowane."
+
+#: chpasswd.8.xml:92(para)
+msgid ""
+"PAM is used to update the password in the system database according to the "
+"PAM chpasswd configuration."
+msgstr ""
+
+#: chpasswd.8.xml:96(para)
+msgid ""
+"When <command>chpasswd</command> fails to update a password, it continues "
+"updating the passwords of the next users, and will return an error code on "
+"exit."
+msgstr ""
+
+#: chpasswd.8.xml:102(para) chgpasswd.8.xml:81(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+"Polecenie to przeznaczone jest do użytku w dużych systemach, gdzie "
+"aktualizuje się wiele kont naraz."
+
+#: chpasswd.8.xml:110(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr "Polecenie <command>chpasswd</command> posiada następujące opcje:"
+
+#: chpasswd.8.xml:119(para) chgpasswd.8.xml:98(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr ""
+
+#: chpasswd.8.xml:129(term) chgpasswd.8.xml:108(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: chpasswd.8.xml:131(para) chgpasswd.8.xml:110(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr ""
+"Dostarczone na standardowe wejście hasła są traktowane jako już zakodowane."
+
+#: chpasswd.8.xml:145(term) chgpasswd.8.xml:120(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+#: chpasswd.8.xml:147(para) chgpasswd.8.xml:122(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+"Jeżeli dpostarczane hasła są w postaci jawnej użyj kodowania MD5 zamiast "
+"domyślnego DES."
+
+#: chpasswd.8.xml:183(para) chgpasswd.8.xml:158(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+"Pamiętaj żeby zabezpieczyć przed odczytem plik przekazywany na standardowe "
+"wejście polecenia."
+
+#: chpasswd.8.xml:229(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/passwd"
+
+#: chpasswd.8.xml:231(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr ""
+
+#: chpasswd.8.xml:239(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: chgpasswd.8.xml:48(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr "wsadowa aktualizacja haseł grup"
+
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"Polecenie <command>chgpasswd</command> czyta pary danych (grupa i hasło) ze "
+"standardowego wejścia. Odczytane informacje wykorzystywane są do "
+"aktualizacji danych o grupach istniejących użytkowników. Każdy wiersz "
+"przekazywanych danych ma postać:"
+
+#: chgpasswd.8.xml:67(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">nazwa_grupy</emphasis>:<emphasis remap=\"I\">hasło</"
+"emphasis>"
+
+#: chgpasswd.8.xml:71(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"Domyślnie dostarczane hasła muszą być w postaci jawnej. Podczas kodowania "
+"haseł używany jest domyślnie algorytm DES."
+
+#: chgpasswd.8.xml:89(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr "Polecenie <command>chgpasswd</command> posiada następujące opcje:"
+
+#: chgpasswd.8.xml:209(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chfn.1.xml:47(refpurpose)
+msgid "change real user name and information"
+msgstr ""
+
+#: chfn.1.xml:53(replaceable)
+msgid "full_name"
+msgstr "full_name"
+
+#: chfn.1.xml:53(arg)
+msgid "-f <placeholder-1/>"
+msgstr "-f <placeholder-1/>"
+
+#: chfn.1.xml:54(replaceable)
+msgid "room_no"
+msgstr "room_no"
+
+#: chfn.1.xml:55(replaceable)
+msgid "work_ph"
+msgstr "work_ph"
+
+#: chfn.1.xml:55(arg)
+msgid "-w <placeholder-1/>"
+msgstr "-w <placeholder-1/>"
+
+#: chfn.1.xml:56(replaceable)
+msgid "home_ph"
+msgstr "home_ph"
+
+#: chfn.1.xml:57(replaceable)
+msgid "other"
+msgstr "other"
+
+#: chfn.1.xml:57(arg)
+msgid "-o <placeholder-1/>"
+msgstr "-o <placeholder-1/>"
+
+#: chfn.1.xml:64(para)
+msgid ""
+"The <command>chfn</command> command changes user fullname, office number, "
+"office extension, and home phone number information for a user's account. "
+"This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+
+#: chfn.1.xml:78(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+
+#: chfn.1.xml:87(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+
+#: chfn.1.xml:132(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chage.1.xml:34(refentrytitle) chage.1.xml:39(refname)
+#: chage.1.xml:44(command)
+msgid "chage"
+msgstr "chage"
+
+#: chage.1.xml:40(refpurpose)
+msgid "change user password expiry information"
+msgstr "zmiana informacji o terminie ważności hasła użytkownika"
+
+#: chage.1.xml:56(para)
+msgid ""
+"The <command>chage</command> command changes the number of days between "
+"password changes and the date of the last password change. This information "
+"is used by the system to determine when a user must change his/her password."
+msgstr ""
+"Polecenie <command>chage</command> zmienia liczbę dni pomiędzy zmianami "
+"hasła i datę ostatniej zmiany hasła. Informację tę system wykorzystuje do "
+"ustalenia, kiedy użytkownik musi zmienić hasło."
+
+#: chage.1.xml:66(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr "Polecenie <command>chage</command> posiada następujące opcje:"
+
+#: chage.1.xml:71(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option><replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--lastday</option><replaceable>OSTATNI</"
+"replaceable>"
+
+#: chage.1.xml:75(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+"Ustawia ilość dni od 1 stycznia 1970 kiedy hało było ostani raz zmieniane. "
+"Data ważności może być takze prezekazana w formacie RRRR-MM-DD (lub formacie "
+"używanym lokalnie)."
+
+#: chage.1.xml:83(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</"
+"replaceable>"
+msgstr ""
+"<option>-E</option>, <option>--expiredate</option><replaceable>DATA_WAŻN</"
+"replaceable>"
+
+#: chage.1.xml:87(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+"Ustawia datę, począwszy od której konto użytkownika nie będzie już dostępne. "
+"<replaceable>DATA_WAŻN</replaceable> jest liczbą dni od 1 stycznia 1970, od "
+"której konto jest blokowane. Data może być też wyrażona w formacie RRRR-MM-"
+"DD (lub innej, powszechniej używanej w danym regionie). Użytkownik, którego "
+"konto jest zablokowane musi skontaktować się z administratorem systemu zanim "
+"będzie mógł z niego ponownie skorzystać."
+
+#: chage.1.xml:95(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+"Przekazanie <emphasis remap=\"I\">-1</emphasis> jako <replaceable>DATA_WAŻN</"
+"replaceable> usuwa ograniczenie ważności konta użytkownika."
+
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-I</option>, <option>--inactive</option><replaceable>NIEAKTYWNE</"
+"replaceable>"
+
+#: chage.1.xml:113(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+"Opcja ta służy do ustawiania czasu nieaktywności konta po wygaśnięciu "
+"ważności hasła, po którym to czasie konto jest blokowane. Parametr "
+"<replaceable>NIEAKTYWNE</replaceable> jest liczbą dni nieaktywności. "
+"Użytkownik, którego konto jest zablokowane musi skontaktować się z "
+"administratorem systemu zanim będzie mógł z niego ponownie skorzystać."
+
+#: chage.1.xml:120(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+"Przekazanie <emphasis remap=\"I\">-1</emphasis> jako "
+"<replaceable>NIEAKTYWNE</replaceable> usuwa ograniczenie nieaktywniści konta "
+"użytkownika."
+
+#: chage.1.xml:132(para)
+msgid "Show account aging information."
+msgstr "Wyświetlenie informacji o terminach ważności konta i hasła."
+
+#: chage.1.xml:138(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_DNI</"
+"replaceable>"
+
+#: chage.1.xml:150(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-M</option>, <option>--maxdays</option><replaceable>MAX_DNI</"
+"replaceable>"
+
+#: chage.1.xml:154(para)
+msgid ""
+"Set the maximum number of days during which a password is valid. When "
+"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
+"is less than the current day, the user will be required to change his/her "
+"password before being able to use his/her account. This occurrence can be "
+"planned for in advance by use of the <option>-W</option> option, which "
+"provides the user with advance warning."
+msgstr ""
+"Ustawia maksymalną liczbę dni, przez jakie hasło jest ważne. Gdy "
+"<replaceable>MAX_DNI</replaceable> plus <replaceable>OSTATNI</replaceable> "
+"jest mniejsze niż bieżący dzień, użytkownik musi zmienić swoje hasła, zanim "
+"będzie mógł skorzystać z konta. Zdarzenie to może być zaplanowane z "
+"wyprzedzeniem przez wykorzystanie opcji <option>-W</option>, ostrzegającej "
+"zawczasu użytkownika o zbliżającym się terminie zmiany."
+
+#: chage.1.xml:163(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+"Przekazanie <emphasis remap=\"I\">-1</emphasis> jako <replaceable>MAX_DAYS</"
+"replaceable> usuwa sprawdzanie wazności hasła."
+
+#: chage.1.xml:171(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--warndays</option><replaceable>DNI_OSTRZ</"
+"replaceable>"
+
+#: chage.1.xml:175(para)
+msgid ""
+"Set the number of days of warning before a password change is required. The "
+"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
+"the password expiring that a user will be warned his/her password is about "
+"to expire."
+msgstr ""
+"Ustawia na <replaceable>DNI_OSTRZ</replaceable> liczbę dni przed upływem "
+"ważności hasła. Od tego dnia użytkownik będzie ostrzegany o nadchodzącym "
+"terminie zmiany hasła."
+
+#: chage.1.xml:184(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Jeśli nie podano żadnej opcji, to <command>chage</command> działa w trybie "
+"interaktywnym, proponując użytkownikowi wartości bieżące dla każdego z pól. "
+"Wprowadzenie nowej wartości powoduje zmianę wartości pola, a podanie "
+"wartości pustej pozostawia wartość bieżącą. Bieżąca wartość pola wyświetlana "
+"jest w nawiasach <emphasis>[ ]</emphasis>."
+
+#: chage.1.xml:194(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"Program <command>chage</command> wymaga do działania chronionego pliku haseł "
+"użytkowników (shadow)."
+
+#: chage.1.xml:198(para)
+msgid ""
+"The <command>chage</command> command is restricted to the root user, except "
+"for the <option>-l</option> option, which may be used by an unprivileged "
+"user to determine when his/her password or account is due to expire."
+msgstr ""
+"Polecenia chage może użyć tylko użytkownik root, za wyjątkiem opcji <option>-"
+"l</option>. Może się nią posłużyć się użytkownik nieuprzywilejowany  do "
+"stwierdzenia, kiedy wygasa jego własne hasło lub konto."
+
+#: chage.1.xml:251(replaceable)
+msgid "15"
+msgstr "15"
+
+#: chage.1.xml:253(para)
+msgid "can't find the shadow password file"
+msgstr "nie można znaleźć pliku shadow"
+
+#: chage.1.xml:229(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Polecenie <command>chage</command> kończy działanie z następującymi "
+"wartościami kodów zakończenia: <placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr "Tomasz Kłoczko <kloczek@pld.org.pl>, 2006"
+
+#, fuzzy
+#~ msgid "and <placeholder-1/> files"
+#~ msgstr "-a <placeholder-1/>"
+
+#, fuzzy
+#~| msgid ""
+#~| "<command>usermod</command> will not allow you to change the name of a "
+#~| "user who is logged in. You must make certain that the named user is not "
+#~| "executing any processes when this command is being executed if the "
+#~| "user's numerical user ID is being changed. You must change the owner of "
+#~| "any <command>crontab</command> files manually. You must change the owner "
+#~| "of any <command>at</command> jobs manually. You must make any changes "
+#~| "involving NIS on the NIS server."
+#~ msgid ""
+#~ "<command>usermod</command> will not allow you to change the name of an "
+#~ "user who is logged in. You must make certain that the named user is not "
+#~ "executing any processes when this command is being executed if the user's "
+#~ "numerical user ID is being changed. You must change the owner of any "
+#~ "<command>crontab</command> files manually. You must change the owner of "
+#~ "any <command>at</command> jobs manually. You must make any changes "
+#~ "involving NIS on the NIS server."
+#~ msgstr ""
+#~ "Polecenie <command>usermod</command> nie pozwola na zmianę nazwy "
+#~ "zalogowanego użytkownika. Jeśli zmieniany jest numeryczny identyfikator "
+#~ "użytkownika procesu to musisz się upewnić, że w trakcie wykonywania tego "
+#~ "polecenia użytkownik nie wykonuje żadnego procesu. Właśniciela plików "
+#~ "<command>crontab</command> musisz zmienić ręcznie. Właśniciela zadań "
+#~ "<command>at</command> musisz zmienić ręcznie. Jakiekolwiek zmiany "
+#~ "dotyczące NIS musisz wykonać na serwerze NIS."
+
+#~ msgid ""
+#~ "The group name or number of the user's new initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1."
+#~ msgstr ""
+#~ "Nazwa lub numer początkowej grupy logowania użytkownika. Nazwa grupy musi "
+#~ "istnieć. Numer grupy musi odnosić się do już istniejącej grupy. Domyślnym "
+#~ "numerem grupy jest 1."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#, fuzzy
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "-a"
+#~ msgstr "-a"
+
+#~ msgid "-d"
+#~ msgstr "-d"
+
+#~ msgid "-g"
+#~ msgstr "-g"
+
+#~ msgid "GID"
+#~ msgstr "GID"
+
+#~ msgid "-o"
+#~ msgstr "-o"
+
+#~ msgid "KEY"
+#~ msgstr "KLUCZ"
+
+#~ msgid "VALUE"
+#~ msgstr "WARTOŚĆ"
+
+#~ msgid "-K <placeholder-1/>=<placeholder-2/>"
+#~ msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#, fuzzy
+#~ msgid "-R"
+#~ msgstr "-"
+
+#, fuzzy
+#~ msgid "<option>-A</option><replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#, fuzzy
+#~ msgid "<option>-M</option><replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#~ msgid ""
+#~ "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#~ "replaceable>"
+
+#~ msgid "An4wtbt"
+#~ msgstr "An4wtbt"
+
+#~ msgid ""
+#~ "The <option>-t</option> flag overrides the use of <option>-u</option>."
+#~ msgstr ""
+#~ "Opcja <option>-t</option> przesłania użycie opcji <option>-u</option>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "MAIL_DIR USERDEL_CMD"
+#~ msgstr "MAIL_DIR USERDEL_CMD"
+
+#~ msgid "MAIL_DIR"
+#~ msgstr "MAIL_DIR"
+
+#~ msgid "CHFN_AUTH"
+#~ msgstr "CHFN_AUTH"
+
+#~ msgid "GID_MAX GID_MIN"
+#~ msgstr "GID_MAX GID_MIN"
+
+#~ msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+#~ msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "-R <placeholder-1/>"
+#~ msgstr "-R <placeholder-1/>"
+
+#~ msgid "-A <placeholder-1/>"
+#~ msgstr "-A <placeholder-1/>"
+
+#~ msgid "-M <placeholder-1/>"
+#~ msgstr "-M <placeholder-1/>"
diff --git a/man/po/remove-potcdate.sin b/man/po/remove-potcdate.sin
new file mode 100644 (file)
index 0000000..2436c49
--- /dev/null
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/man/po/ru.po b/man/po/ru.po
new file mode 100644 (file)
index 0000000..5b993fe
--- /dev/null
@@ -0,0 +1,10220 @@
+# translation of shadow_1:4.0.18.2-1_ru.po to Russian
+# Yuri Kozlov <kozlov.y@gmail.com>, 2005, 2006, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: 1:4.0.18.2-1\n"
+"POT-Creation-Date: 2009-07-24 03:03+0200\n"
+"PO-Revision-Date: 2007-11-21 21:37+0300\n"
+"Last-Translator: Yuri Kozlov <kozlov.y@gmail.com>\n"
+"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\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: Content of: <refentry><refsect1><para><command>
+#: vipw.8.xml:38(refentrytitle) vipw.8.xml:43(refname) vipw.8.xml:52(command)
+msgid "vipw"
+msgstr "vipw"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><manvolnum>
+#: vipw.8.xml:39(manvolnum) usermod.8.xml:40(manvolnum)
+#: userdel.8.xml:42(manvolnum) userdel.8.xml:199(replaceable)
+#: useradd.8.xml:50(manvolnum) pwconv.8.xml:43(manvolnum)
+#: pwck.8.xml:41(manvolnum) nologin.8.xml:35(manvolnum)
+#: newusers.8.xml:51(manvolnum) logoutd.8.xml:35(manvolnum)
+#: lastlog.8.xml:36(manvolnum) grpck.8.xml:39(manvolnum)
+#: groupmod.8.xml:39(manvolnum) groupmems.8.xml:39(manvolnum)
+#: groupdel.8.xml:39(manvolnum) groupdel.8.xml:130(replaceable)
+#: groupadd.8.xml:43(manvolnum) faillog.8.xml:35(manvolnum)
+#: faillog.5.xml:86(manvolnum) chpasswd.8.xml:42(manvolnum)
+#: chgpasswd.8.xml:43(manvolnum)
+msgid "8"
+msgstr "8"
+
+# type: Content of: <refentry><refmeta><refmiscinfo>
+#: vipw.8.xml:40(refmiscinfo) usermod.8.xml:41(refmiscinfo)
+#: userdel.8.xml:43(refmiscinfo) useradd.8.xml:51(refmiscinfo)
+#: pwconv.8.xml:44(refmiscinfo) pwck.8.xml:42(refmiscinfo)
+#: nologin.8.xml:36(refmiscinfo) newusers.8.xml:52(refmiscinfo)
+#: logoutd.8.xml:36(refmiscinfo) lastlog.8.xml:37(refmiscinfo)
+#: grpck.8.xml:40(refmiscinfo) groupmod.8.xml:40(refmiscinfo)
+#: groupmems.8.xml:40(refmiscinfo) groupdel.8.xml:40(refmiscinfo)
+#: groupadd.8.xml:44(refmiscinfo) faillog.8.xml:36(refmiscinfo)
+#: chpasswd.8.xml:43(refmiscinfo) chgpasswd.8.xml:44(refmiscinfo)
+msgid "System Management Commands"
+msgstr "Команды управления системой"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: vipw.8.xml:44(refname) vipw.8.xml:58(command)
+msgid "vigr"
+msgstr "vigr"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: vipw.8.xml:45(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr ""
+"служат для редактирования файлов паролей, групп, теневых паролей "
+"пользователей или групп."
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: vipw.8.xml:54(replaceable) vipw.8.xml:60(replaceable)
+#: usermod.8.xml:52(replaceable) userdel.8.xml:52(arg)
+#: useradd.8.xml:61(replaceable) useradd.8.xml:73(replaceable)
+#: su.1.xml:66(replaceable) passwd.1.xml:57(replaceable)
+#: newusers.8.xml:63(replaceable) lastlog.8.xml:48(replaceable)
+#: groupmod.8.xml:51(replaceable) groupadd.8.xml:55(replaceable)
+#: faillog.8.xml:47(replaceable) chsh.1.xml:53(replaceable)
+#: chpasswd.8.xml:54(replaceable) chgpasswd.8.xml:55(replaceable)
+#: chage.1.xml:46(replaceable)
+msgid "options"
+msgstr "параметры"
+
+# type: Content of: <refentry><refsect1><title>
+#: vipw.8.xml:66(title) usermod.8.xml:59(title) userdel.8.xml:60(title)
+#: useradd.8.xml:79(title) suauth.5.xml:50(title) su.1.xml:77(title)
+#: sg.1.xml:59(title) shadow.5.xml:44(title) shadow.3.xml:93(title)
+#: shadow.3.xml:149(title) pwconv.8.xml:70(title) pwck.8.xml:83(title)
+#: porttime.5.xml:44(title) passwd.5.xml:44(title) passwd.1.xml:66(title)
+#: nologin.8.xml:50(title) newusers.8.xml:70(title) newgrp.1.xml:55(title)
+#: logoutd.8.xml:50(title) login.defs.5.xml:107(title)
+#: login.access.5.xml:45(title) login.1.xml:103(title) limits.5.xml:46(title)
+#: lastlog.8.xml:54(title) gshadow.5.xml:43(title) grpck.8.xml:69(title)
+#: groups.1.xml:53(title) groupmod.8.xml:58(title) groupmems.8.xml:60(title)
+#: groupdel.8.xml:57(title) groupadd.8.xml:64(title) gpasswd.1.xml:72(title)
+#: faillog.8.xml:53(title) faillog.5.xml:44(title) expiry.1.xml:59(title)
+#: chsh.1.xml:62(title) chpasswd.8.xml:60(title) chgpasswd.8.xml:61(title)
+#: chfn.1.xml:63(title) chage.1.xml:55(title)
+msgid "DESCRIPTION"
+msgstr "ОПИСАНИЕ"
+
+#: vipw.8.xml:67(para)
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<command>vipw</command> и <command>vigr</command> редактируют файлы "
+"<filename>/etc/passwd</filename> и <filename>/etc/group</filename>, "
+"соответственно. Если указан параметр <option>-s</option>, то будут "
+"редактироваться теневые версии этих файлов, <filename>/etc/shadow</filename> "
+"и <filename>/etc/gshadow</filename>, соответственно. На время работы "
+"программы устанавливают блокировку для предотвращения повреждения файла. При "
+"выборе редактора программы сначала проверяют переменную среды <envar>"
+"$VISUAL</envar>, затем <envar>$EDITOR</envar>, и если ничего не найдено, "
+"запускают стандартный редактор <citerefentry><refentrytitle>vi</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><title>
+#: vipw.8.xml:84(title) usermod.8.xml:67(title) userdel.8.xml:69(title)
+#: useradd.8.xml:97(title) su.1.xml:123(title) pwck.8.xml:164(title)
+#: passwd.1.xml:152(title) newusers.8.xml:239(title) login.1.xml:188(title)
+#: lastlog.8.xml:66(title) grpck.8.xml:133(title) groupmod.8.xml:67(title)
+#: groupmems.8.xml:75(title) groupadd.8.xml:73(title) gpasswd.1.xml:112(title)
+#: faillog.8.xml:64(title) chsh.1.xml:73(title) chpasswd.8.xml:109(title)
+#: chgpasswd.8.xml:88(title) chage.1.xml:65(title)
+msgid "OPTIONS"
+msgstr "ПАРАМЕТРЫ"
+
+#: vipw.8.xml:85(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr "Параметры команд <command>vipw</command> и <command>vigr</command>:"
+
+#: vipw.8.xml:91(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:93(para)
+msgid "Edit group database."
+msgstr "Редактирует базу данных групп."
+
+#: vipw.8.xml:97(term) userdel.8.xml:99(term) useradd.8.xml:247(term)
+#: passwd.1.xml:192(term) newusers.8.xml:257(term) lastlog.8.xml:82(term)
+#: groupmod.8.xml:98(term) groupadd.8.xml:108(term) faillog.8.xml:80(term)
+#: chsh.1.xml:79(term) chpasswd.8.xml:137(term) chgpasswd.8.xml:114(term)
+#: chage.1.xml:103(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:99(para) userdel.8.xml:101(para) useradd.8.xml:249(para)
+#: passwd.1.xml:194(para) newusers.8.xml:259(para) lastlog.8.xml:86(para)
+#: groupmod.8.xml:100(para) groupadd.8.xml:110(para) faillog.8.xml:82(para)
+#: chsh.1.xml:81(para) chpasswd.8.xml:139(para) chgpasswd.8.xml:116(para)
+#: chage.1.xml:105(para)
+msgid "Display help message and exit."
+msgstr "Показать краткую справку и закончить работу."
+
+#: vipw.8.xml:103(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:105(para)
+msgid "Edit passwd database."
+msgstr "Редактировать базу данных passwd."
+
+#: vipw.8.xml:109(term) passwd.1.xml:259(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:111(para) passwd.1.xml:263(para)
+msgid "Quiet mode."
+msgstr "Не выводить сообщений при работе."
+
+#: vipw.8.xml:115(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:117(para)
+msgid "Edit shadow or gshadow database."
+msgstr "Редактировать базу данных shadow или gshadow."
+
+# type: Content of: <refentry><refsect1><title>
+#: vipw.8.xml:124(title) usermod.8.xml:372(title) userdel.8.xml:140(title)
+#: useradd.8.xml:644(title) suauth.5.xml:168(title) su.1.xml:338(title)
+#: sg.1.xml:88(title) shadow.5.xml:230(title) shadow.3.xml:201(title)
+#: pwconv.8.xml:168(title) pwck.8.xml:227(title) porttime.5.xml:105(title)
+#: passwd.5.xml:116(title) passwd.1.xml:374(title) newusers.8.xml:357(title)
+#: newgrp.1.xml:99(title) logoutd.8.xml:64(title) login.access.5.xml:96(title)
+#: login.1.xml:316(title) limits.5.xml:140(title) lastlog.8.xml:147(title)
+#: gshadow.5.xml:141(title) grpck.8.xml:185(title) groups.1.xml:75(title)
+#: groupmod.8.xml:164(title) groupmems.8.xml:168(title)
+#: groupdel.8.xml:89(title) groupadd.8.xml:200(title) gpasswd.1.xml:233(title)
+#: faillog.8.xml:202(title) faillog.5.xml:71(title) expiry.1.xml:68(title)
+#: chsh.1.xml:133(title) chpasswd.8.xml:208(title) chgpasswd.8.xml:184(title)
+#: chfn.1.xml:113(title) chage.1.xml:206(title)
+msgid "FILES"
+msgstr "ФАЙЛЫ"
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: vipw.8.xml:127(filename) usermod.8.xml:375(filename)
+#: userdel.8.xml:143(filename) useradd.8.xml:659(filename)
+#: sg.1.xml:103(filename) pwck.8.xml:230(filename)
+#: newusers.8.xml:372(filename) newgrp.1.xml:114(filename)
+#: gshadow.5.xml:144(filename) grpck.8.xml:188(filename)
+#: groups.1.xml:78(filename) groupmod.8.xml:167(filename)
+#: groupmems.8.xml:171(filename) groupdel.8.xml:92(filename)
+#: groupadd.8.xml:203(filename) gpasswd.1.xml:50(filename)
+#: gpasswd.1.xml:53(filename) gpasswd.1.xml:236(filename)
+#: chgpasswd.8.xml:187(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:129(para) usermod.8.xml:377(para) userdel.8.xml:145(para)
+#: useradd.8.xml:661(para) sg.1.xml:105(para) pwck.8.xml:232(para)
+#: newusers.8.xml:374(para) newgrp.1.xml:116(para) gshadow.5.xml:146(para)
+#: grpck.8.xml:190(para) groups.1.xml:80(para) groupmod.8.xml:169(para)
+#: groupmems.8.xml:173(para) groupdel.8.xml:94(para) groupadd.8.xml:205(para)
+#: gpasswd.1.xml:238(para) chgpasswd.8.xml:189(para)
+msgid "Group account information."
+msgstr "содержит информацию о группах"
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: vipw.8.xml:133(filename) usermod.8.xml:381(filename)
+#: useradd.8.xml:665(filename) sg.1.xml:109(filename)
+#: newusers.8.xml:378(filename) newgrp.1.xml:120(filename)
+#: gshadow.5.xml:150(filename) grpck.8.xml:194(filename)
+#: groupmod.8.xml:173(filename) groupmems.8.xml:177(filename)
+#: groupdel.8.xml:98(filename) groupadd.8.xml:209(filename)
+#: gpasswd.1.xml:54(filename) gpasswd.1.xml:242(filename)
+#: chgpasswd.8.xml:193(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:135(para) usermod.8.xml:383(para) useradd.8.xml:667(para)
+#: sg.1.xml:111(para) newusers.8.xml:380(para) newgrp.1.xml:122(para)
+#: gshadow.5.xml:152(para) grpck.8.xml:196(para) groupmod.8.xml:175(para)
+#: groupdel.8.xml:100(para) groupadd.8.xml:211(para) gpasswd.1.xml:244(para)
+#: chgpasswd.8.xml:195(para)
+msgid "Secure group account information."
+msgstr "содержит защищаемую информацию о группах"
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: vipw.8.xml:139(filename) usermod.8.xml:387(filename)
+#: userdel.8.xml:155(filename) useradd.8.xml:647(filename)
+#: su.1.xml:341(filename) sg.1.xml:91(filename) shadow.5.xml:233(filename)
+#: pwck.8.xml:236(filename) passwd.5.xml:119(filename)
+#: passwd.1.xml:377(filename) newusers.8.xml:360(filename)
+#: newgrp.1.xml:102(filename) login.1.xml:331(filename)
+#: grpck.8.xml:200(filename) expiry.1.xml:71(filename)
+#: chsh.1.xml:136(filename) chpasswd.8.xml:211(filename)
+#: chfn.1.xml:122(filename) chage.1.xml:210(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:141(para) usermod.8.xml:389(para) userdel.8.xml:157(para)
+#: useradd.8.xml:649(para) su.1.xml:343(para) sg.1.xml:93(para)
+#: shadow.5.xml:235(para) pwck.8.xml:238(para) passwd.5.xml:121(para)
+#: passwd.1.xml:379(para) newusers.8.xml:362(para) newgrp.1.xml:104(para)
+#: login.1.xml:333(para) grpck.8.xml:202(para) expiry.1.xml:73(para)
+#: chsh.1.xml:138(para) chpasswd.8.xml:213(para) chfn.1.xml:124(para)
+#: chage.1.xml:213(para)
+msgid "User account information."
+msgstr "содержит информацию о пользователях"
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: vipw.8.xml:145(filename) usermod.8.xml:393(filename)
+#: userdel.8.xml:161(filename) useradd.8.xml:653(filename)
+#: su.1.xml:347(filename) sg.1.xml:97(filename) shadow.5.xml:239(filename)
+#: shadow.3.xml:204(filename) pwck.8.xml:242(filename)
+#: passwd.5.xml:125(filename) passwd.1.xml:383(filename)
+#: newusers.8.xml:366(filename) newgrp.1.xml:108(filename)
+#: login.1.xml:337(filename) expiry.1.xml:77(filename)
+#: chpasswd.8.xml:217(filename) chage.1.xml:218(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: vipw.8.xml:147(para) usermod.8.xml:395(para) userdel.8.xml:163(para)
+#: useradd.8.xml:655(para) su.1.xml:349(para) sg.1.xml:99(para)
+#: shadow.5.xml:241(para) shadow.3.xml:206(para) pwck.8.xml:244(para)
+#: passwd.1.xml:385(para) newusers.8.xml:368(para) newgrp.1.xml:110(para)
+#: login.1.xml:339(para) expiry.1.xml:79(para) chpasswd.8.xml:219(para)
+#: chage.1.xml:221(para)
+msgid "Secure user account information."
+msgstr "содержит защищаемую информацию о пользователях"
+
+# type: Content of: <refentry><refsect1><title>
+#: vipw.8.xml:154(title) usermod.8.xml:402(title) userdel.8.xml:248(title)
+#: useradd.8.xml:761(title) suauth.5.xml:197(title) su.1.xml:362(title)
+#: sg.1.xml:118(title) shadow.5.xml:258(title) shadow.3.xml:213(title)
+#: pwconv.8.xml:180(title) pwck.8.xml:302(title) porttime.5.xml:117(title)
+#: passwd.5.xml:144(title) passwd.1.xml:455(title) nologin.8.xml:64(title)
+#: newusers.8.xml:399(title) newgrp.1.xml:129(title)
+#: login.defs.5.xml:471(title) login.access.5.xml:108(title)
+#: login.1.xml:376(title) limits.5.xml:150(title) gshadow.5.xml:159(title)
+#: grpck.8.xml:254(title) groups.1.xml:87(title) groupmod.8.xml:233(title)
+#: groupmems.8.xml:186(title) groupdel.8.xml:146(title)
+#: groupadd.8.xml:291(title) gpasswd.1.xml:251(title) faillog.8.xml:214(title)
+#: faillog.5.xml:83(title) expiry.1.xml:86(title) chsh.1.xml:157(title)
+#: chpasswd.8.xml:238(title) chgpasswd.8.xml:208(title) chfn.1.xml:131(title)
+#: chage.1.xml:261(title)
+msgid "SEE ALSO"
+msgstr "СМОТРИТЕ ТАКЖЕ"
+
+#: vipw.8.xml:155(para)
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: usermod.8.xml:39(refentrytitle) usermod.8.xml:44(refname)
+#: usermod.8.xml:50(command) login.defs.5.xml:443(term)
+msgid "usermod"
+msgstr "usermod"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: usermod.8.xml:45(refpurpose)
+msgid "modify a user account"
+msgstr "изменяет учётную запись пользователя"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><emphasis>
+#: usermod.8.xml:54(replaceable) userdel.8.xml:54(replaceable)
+#: useradd.8.xml:63(replaceable) passwd.1.xml:60(replaceable)
+#: chsh.1.xml:56(replaceable) chage.1.xml:49(replaceable)
+msgid "LOGIN"
+msgstr "LOGIN"
+
+# type: Content of: <refentry><refsect1><para>
+#: usermod.8.xml:60(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"Команда <command>usermod</command> изменяет системные файлы учётных записей "
+"согласно переданным в командной строке параметрам."
+
+# type: Content of: <refentry><refsect1><para>
+#: usermod.8.xml:68(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr "Параметры команды <command>usermod</command>:"
+
+#: usermod.8.xml:74(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--append</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:78(para)
+#, fuzzy
+#| msgid ""
+#| "Add the user to the supplemental group(s). Use only with <option>-G</"
+#| "option> option."
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr ""
+"Добавить пользователя в дополнительную группу(ы). Использовать только вместе "
+"с параметром <option>-G</option>."
+
+#: usermod.8.xml:85(term) useradd.8.xml:125(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option><replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option><replaceable>КОММЕНТАРИЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:90(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"Новое значение поля комментария в файле пользовательских паролей. Обычно его "
+"изменяют с помощью программы <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: usermod.8.xml:99(term) useradd.8.xml:138(term)
+msgid ""
+"<option>-d</option>, <option>--home</option><replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option><replaceable>ДОМАШНИЙ_КАТАЛОГ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: usermod.8.xml:104(para)
+#, fuzzy
+#| msgid "user home directory"
+msgid "The user's new login directory."
+msgstr "домашний каталог пользователя"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "The user's new login directory. If the <option>-m</option> option is "
+#| "given the contents of the current home directory will be moved to the new "
+#| "home directory, which is created if it does not already exist."
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+"Новый домашний каталог пользователя. Если указан параметр <option>-m</"
+"option>, то содержимое текущего домашнего каталога будет перемещено в новый "
+"домашний каталог, который будет создан, если он ещё не существует."
+
+#: usermod.8.xml:116(term) useradd.8.xml:165(term) useradd.8.xml:518(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</"
+"replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</"
+"option><replaceable>ДАТА_УСТАРЕВАНИЯ</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:121(para) useradd.8.xml:170(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+"Дата, когда учётная запись пользователя будет заблокирована. Дата задаётся в "
+"формате <emphasis remap=\"I\">ГГГГ-ММ-ДД</emphasis>."
+
+#: usermod.8.xml:128(term) useradd.8.xml:183(term) useradd.8.xml:531(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option><replaceable>ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:133(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password has expired before the account will "
+#| "be disabled."
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+"Число дней, которые должны пройти после устаревания пароля, перед тем как "
+"учётная запись будет заблокирована."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:137(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password expires until the account is "
+#| "permanently disabled. A value of 0 disables the account as soon as the "
+#| "password has expired, and a value of -1 disables the feature. The default "
+#| "value is -1."
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+"Число дней, которые должны пройти после устаревания пароля, чтобы учётная "
+"запись заблокировалась навсегда. Если указано значение 0, то учётная запись "
+"блокируется сразу после устаревания пароля, а при значении -1 данная "
+"возможность не используется. По умолчанию используется значение -1."
+
+#: usermod.8.xml:145(term) useradd.8.xml:203(term) useradd.8.xml:547(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option><replaceable>GROUP</replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>ГРУППА</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:150(para)
+#, fuzzy
+#| msgid ""
+#| "The group name or number of the user's new initial login group. The group "
+#| "name must exist. A group number must refer to an already existing group. "
+#| "The default group number is 1."
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+"Имя или числовой идентификатор новой начальной группы пользователя. Группа с "
+"таким именем должна существовать. Идентификатор группы должен указывать на "
+"уже существующую группу. По умолчанию идентификатор группы установлен в 1."
+
+#: usermod.8.xml:157(term) useradd.8.xml:231(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option><replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+"<option>-G</option>, <option>--groups</option><replaceable>ГРУППА1</"
+"replaceable>[<emphasis remap=\"I\">,ГРУППА2,...</emphasis>[<emphasis remap="
+"\"I\">,ГРУППАN</emphasis>]]]"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:162(para)
+#, fuzzy
+#| msgid ""
+#| "A list of supplementary groups which the user is also a member of. Each "
+#| "group is separated from the next by a comma, with no intervening "
+#| "whitespace. The groups are subject to the same restrictions as the group "
+#| "given with the <option>-g</option> option. The default is for the user to "
+#| "belong only to the initial group."
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+"Список дополнительных групп, в которых числится пользователь. Перечисление "
+"групп осуществляется через запятую, без промежуточных пробелов. На указанные "
+"группы действуют те же ограничения, что и для группы указанной в параметре "
+"<option>-g</option>. По умолчанию пользователь входит только в начальную "
+"группу."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:169(para)
+#, fuzzy
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+"Список дополнительных групп, в которых числится пользователь. Перечисление "
+"групп осуществляется через запятую, без промежуточных пробелов. На указанные "
+"группы действуют те же ограничения, что и для группы указанной в параметре "
+"<option>-g</option>. Если пользователь член группы, которой в указанном "
+"списке нет, то пользователь удаляется из этой группы. Такое поведение можно "
+"изменить с помощью параметра <option>-a</option>, при указании которого к "
+"уже имеющемуся списку групп пользователя добавляется список указанных "
+"дополнительных групп."
+
+#: usermod.8.xml:178(term)
+msgid ""
+"<option>-l</option>, <option>--login</option><replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--login</option><replaceable>НОВОЕ_ИМЯ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:183(para)
+#, fuzzy
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory name should probably be changed "
+"manually to reflect the new login name."
+msgstr ""
+"Имя пользователя будет изменено с emphasis remap=\"I\">ИМЯ</emphasis> на "
+"<emphasis remap=\"I\">НОВОЕ_ИМЯ</emphasis>. Больше ничего не меняется. В "
+"частности, вероятно, должно быть изменено имя домашнего каталога "
+"пользователя, чтобы отразить изменение имени пользователя."
+
+#: usermod.8.xml:193(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:197(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+"Заблокировать пароль пользователя. Это делается помещением символа '!' в "
+"начало шифрованного пароля, чтобы приводит к блокировке пароля. Не "
+"используйте этот параметр вместе с <option>-p</option> или <option>-U</"
+"option>."
+
+#: usermod.8.xml:203(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+
+#: usermod.8.xml:212(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:216(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+
+#: usermod.8.xml:220(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:227(term) useradd.8.xml:366(term) groupmod.8.xml:116(term)
+#: groupadd.8.xml:135(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:231(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+"При использовании с параметром <option>-u</option>, этот параметр позволяет "
+"указывать не уникальный числовой идентификатор пользователя."
+
+#: usermod.8.xml:238(term) useradd.8.xml:378(term) groupmod.8.xml:127(term)
+#: groupadd.8.xml:145(term)
+msgid ""
+"<option>-p</option>, <option>--password</option><replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+"<option>-p</option>, <option>--password</option><replaceable>ПАРОЛЬ</"
+"replaceable>"
+
+#: usermod.8.xml:243(para) groupmod.8.xml:132(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+"Шифрованное значение пароля, которое возвращает функция "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+
+#: usermod.8.xml:248(para) useradd.8.xml:388(para) groupmod.8.xml:137(para)
+#: groupadd.8.xml:155(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+
+#: usermod.8.xml:253(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+
+#: usermod.8.xml:259(para) useradd.8.xml:393(para) groupmod.8.xml:142(para)
+#: groupadd.8.xml:160(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+
+#: usermod.8.xml:266(term) useradd.8.xml:427(term) useradd.8.xml:568(term)
+#: su.1.xml:157(term) chsh.1.xml:85(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option><replaceable>ОБОЛОЧКА</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:271(para) chsh.1.xml:89(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+"Имя новой регистрационной оболочки пользователя. Если задать пустое "
+"значение, то будет использована регистрационная оболочка по умолчанию."
+
+#: usermod.8.xml:278(term) useradd.8.xml:442(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#: usermod.8.xml:283(para)
+msgid "The new numerical value of the user's ID."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:286(para)
+#, fuzzy
+#| msgid ""
+#| "The numerical value of the user's ID. This value must be unique, unless "
+#| "the <option>-o</option> option is used. The value must be non-negative. "
+#| "The default is to use the smallest ID value greater than 999 and greater "
+#| "than every other user. Values between 0 and 999 are typically reserved "
+#| "for system accounts."
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative. Values between 0 and 999 are typically "
+"reserved for system accounts."
+msgstr ""
+"Числовое значение идентификатора пользователя (ID). Оно должно быть "
+"уникальным, если не используется параметр <option>-o</option>. Значение "
+"должно быть неотрицательным. По умолчанию используется наименьшее значение "
+"ID большее 999 и большее любого другого значения пользователя. Значения от 0 "
+"до 999 обычно зарезервированы для системных учётных записей."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:292(para)
+#, fuzzy
+#| msgid ""
+#| "The numerical value of the user's ID. This value must be unique, unless "
+#| "the <option>-o</option> option is used. The value must be non-negative. "
+#| "Values between 0 and 999 are typically reserved for system accounts. Any "
+#| "files which the user owns and which are located in the directory tree "
+#| "rooted at the user's home directory will have the file user ID changed "
+#| "automatically. Files outside of the user's home directory must be altered "
+#| "manually."
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+"Числовое значение идентификатора пользователя (ID). Значение должно быть "
+"уникальным, если не задан параметр <option>-o</option>. Значение должно быть "
+"неотрицательным. Значения от 0 до 999 обычно зарезервированы для системных "
+"учётных записей. Для всех файлов, которыми владеет пользователь и которые "
+"расположены в его домашнем каталоге идентификатор владельца файла будет "
+"изменён автоматически. Для файлов, расположенных вне домашнего каталога "
+"идентификатор нужно изменять вручную."
+
+#: usermod.8.xml:297(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+
+#: usermod.8.xml:304(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:308(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+"Разблокировать пароль пользователя. Это выполняется удалением символа '!' из "
+"начала шифрованного пароля. Не используйте этот параметр вместе с <option>-"
+"p</option> или <option>-L</option>."
+
+#: usermod.8.xml:313(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+
+#: usermod.8.xml:324(term) useradd.8.xml:474(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-s</option>, <option>--shell</option><replaceable>SHELL</"
+#| "replaceable>"
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option><replaceable>SEUSER</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option><replaceable>ОБОЛОЧКА</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:329(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's new login shell. Setting this field to blank "
+#| "causes the system to select the default login shell."
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"the blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Имя новой регистрационной оболочки пользователя. Если задать пустое "
+"значение, то будет использована регистрационная оболочка по умолчанию."
+
+# type: Content of: <refentry><refsect1><title>
+#: usermod.8.xml:340(title) userdel.8.xml:221(title) useradd.8.xml:597(title)
+#: su.1.xml:302(title) shadow.3.xml:193(title) passwd.1.xml:338(title)
+#: newusers.8.xml:312(title) login.1.xml:238(title) lastlog.8.xml:159(title)
+#: groupdel.8.xml:65(title) groupadd.8.xml:224(title) gpasswd.1.xml:206(title)
+#: faillog.8.xml:191(title) chpasswd.8.xml:182(title)
+#: chgpasswd.8.xml:157(title)
+msgid "CAVEATS"
+msgstr "ПРЕДОСТЕРЕЖЕНИЯ"
+
+#: usermod.8.xml:341(para)
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux, but only check if the user "
+"is logged in according to utmp on other architectures."
+msgstr ""
+
+#: usermod.8.xml:349(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+
+#: usermod.8.xml:353(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+
+#: usermod.8.xml:359(title) userdel.8.xml:125(title) useradd.8.xml:621(title)
+#: su.1.xml:310(title) sg.1.xml:76(title) pwconv.8.xml:146(title)
+#: pwck.8.xml:213(title) passwd.1.xml:356(title) newusers.8.xml:324(title)
+#: newgrp.1.xml:87(title) login.1.xml:272(title) grpck.8.xml:173(title)
+#: groupmod.8.xml:152(title) groupmems.8.xml:156(title)
+#: groupdel.8.xml:77(title) groupadd.8.xml:186(title) gpasswd.1.xml:218(title)
+#: chsh.1.xml:120(title) chpasswd.8.xml:194(title) chgpasswd.8.xml:169(title)
+#: chfn.1.xml:99(title)
+msgid "CONFIGURATION"
+msgstr ""
+
+#: usermod.8.xml:360(para) userdel.8.xml:126(para) useradd.8.xml:622(para)
+#: su.1.xml:311(para) sg.1.xml:77(para) pwck.8.xml:214(para)
+#: passwd.1.xml:357(para) newusers.8.xml:325(para) newgrp.1.xml:88(para)
+#: login.1.xml:273(para) grpck.8.xml:174(para) groupmod.8.xml:153(para)
+#: groupmems.8.xml:157(para) groupdel.8.xml:78(para) groupadd.8.xml:187(para)
+#: gpasswd.1.xml:219(para) chsh.1.xml:121(para) chpasswd.8.xml:195(para)
+#: chgpasswd.8.xml:170(para) chfn.1.xml:100(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "MAIL_DIR (строка)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+"Почтовый каталог. Данный параметр нужен для управления почтовым ящиком при "
+"изменении или удалении учётной записи пользователя. Если параметр не задан, "
+"то используется значение указанное при сборке."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+#, fuzzy
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "MAIL_DIR (строка)"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+#, fuzzy
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+"Если используется <option>--preserve-environment</option>, то оболочка "
+"задаётся переменной среды <envar>$SHELL</envar>."
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+
+#. Note: on HP, split groups have the same ID, but different
+#.                names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr ""
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+
+#: usermod.8.xml:403(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><command>
+#: userdel.8.xml:41(refentrytitle) userdel.8.xml:46(refname)
+#: userdel.8.xml:51(command) login.defs.5.xml:434(term)
+msgid "userdel"
+msgstr "userdel"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: userdel.8.xml:47(refpurpose)
+msgid "delete a user account and related files"
+msgstr "удаляет учётную запись и файлы пользователя"
+
+#: userdel.8.xml:61(para)
+#, fuzzy
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"Команда <command>userdel</command> изменяет системные файлы учётных записей, "
+"удаляя все записи, относящиеся к указанному <emphasis remap=\"I"
+"\">имени_пользователя</emphasis>. Заданная учётная запись должна "
+"существовать."
+
+# type: Content of: <refentry><refsect1><para>
+#: userdel.8.xml:70(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr "Параметры команды <command>userdel</command>:"
+
+#: userdel.8.xml:75(term) groupadd.8.xml:80(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option>"
+
+#: userdel.8.xml:79(para)
+#, fuzzy
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+"С этим параметром учётная запись будет удалена, даже если пользователь в "
+"этот момент работает в системе. Она также заставляет <command>userdel</"
+"command> удалить домашний каталог пользователя и почтовый ящик, даже если "
+"другой пользователь использует тот же домашний каталог или если почтовый "
+"ящик не принадлежит данному пользователю. Если значение "
+"<emphasis>USERGROUPS_ENAB</emphasis> равно <emphasis remap=\"I\">yes</"
+"emphasis> в файле <filename>/etc/login.defs</filename> и если существует "
+"группа с именем удаляемого пользователя, то это группа будет удалена, даже "
+"если она всё ещё является первичной группой другого пользователя."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:92(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+"<emphasis>Примечание:</emphasis> Этот параметр опасно использовать; он может "
+"привести систему в нерабочее состояние."
+
+#: userdel.8.xml:105(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:109(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+"Файлы в домашнем каталоге пользователя будут удалены вместе с самим домашним "
+"каталогом и почтовым ящиком. Пользовательские файлы, расположенные в других "
+"файловых системах, нужно искать и удалять вручную."
+
+#: userdel.8.xml:115(para)
+#, fuzzy
+#| msgid ""
+#| "The mail spool is defined by the <emphasis>MAIL_DIR</emphasis> variable "
+#| "in the <filename>login.defs</filename> file."
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+"Имя файла почтового ящика задаётся переменной <emphasis>MAIL_DIR</emphasis> "
+"в файле <filename>login.defs</filename>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr "USERDEL_CMD (строка)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+"Определяет программу, которая будет запущена при удалении пользователя. Она "
+"должна удалять любые задания at/cron/печати удаляемого пользователя "
+"(передаётся в качестве первого аргумента)."
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr ""
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+"      "
+msgstr ""
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: userdel.8.xml:149(filename) useradd.8.xml:683(filename)
+#: su.1.xml:353(filename) pwconv.8.xml:171(filename)
+#: passwd.1.xml:389(filename) newusers.8.xml:384(filename)
+#: login.access.5.xml:99(filename) login.1.xml:367(filename)
+#: groupadd.8.xml:215(filename) chsh.1.xml:148(filename)
+#: chpasswd.8.xml:223(filename) chgpasswd.8.xml:199(filename)
+#: chfn.1.xml:116(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:151(para) useradd.8.xml:685(para) su.1.xml:355(para)
+#: pwconv.8.xml:173(para) passwd.1.xml:391(para) newusers.8.xml:386(para)
+#: login.access.5.xml:101(para) login.1.xml:369(para) groupadd.8.xml:217(para)
+#: chsh.1.xml:150(para) chpasswd.8.xml:225(para) chgpasswd.8.xml:201(para)
+#: chfn.1.xml:118(para)
+msgid "Shadow password suite configuration."
+msgstr "содержит конфигурацию подсистемы теневых паролей"
+
+# type: Content of: <refentry><refsect1><title>
+#: userdel.8.xml:170(title) useradd.8.xml:692(title) pwck.8.xml:251(title)
+#: passwd.1.xml:404(title) grpck.8.xml:209(title) groupmod.8.xml:182(title)
+#: groupdel.8.xml:107(title) groupadd.8.xml:246(title) chage.1.xml:228(title)
+msgid "EXIT VALUES"
+msgstr "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: userdel.8.xml:175(replaceable) useradd.8.xml:697(replaceable)
+#: pwck.8.xml:256(replaceable) passwd.1.xml:409(replaceable)
+#: grpck.8.xml:214(replaceable) groupmod.8.xml:187(replaceable)
+#: groupdel.8.xml:112(replaceable) groupadd.8.xml:251(replaceable)
+#: chage.1.xml:233(replaceable)
+msgid "0"
+msgstr "0"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:177(para) useradd.8.xml:699(para) pwck.8.xml:258(para)
+#: passwd.1.xml:411(para) grpck.8.xml:216(para) groupmod.8.xml:189(para)
+#: groupdel.8.xml:114(para) groupadd.8.xml:253(para) chage.1.xml:235(para)
+msgid "success"
+msgstr "успешное выполнение"
+
+# type: Content of: <refentry><refmeta><manvolnum>
+#: userdel.8.xml:181(replaceable) useradd.8.xml:703(replaceable)
+#: su.1.xml:55(manvolnum) sg.1.xml:39(manvolnum) pwck.8.xml:262(replaceable)
+#: passwd.1.xml:45(manvolnum) passwd.1.xml:415(replaceable)
+#: newgrp.1.xml:39(manvolnum) login.1.xml:71(manvolnum)
+#: grpck.8.xml:220(replaceable) groups.1.xml:35(manvolnum)
+#: gpasswd.1.xml:43(manvolnum) expiry.1.xml:42(manvolnum)
+#: chsh.1.xml:41(manvolnum) chfn.1.xml:42(manvolnum) chage.1.xml:35(manvolnum)
+#: chage.1.xml:239(replaceable)
+msgid "1"
+msgstr "1"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:183(para) useradd.8.xml:705(para)
+msgid "can't update password file"
+msgstr "не удалось изменить файл паролей"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: userdel.8.xml:187(replaceable) useradd.8.xml:709(replaceable)
+#: pwck.8.xml:268(replaceable) passwd.1.xml:421(replaceable)
+#: grpck.8.xml:226(replaceable) groupmod.8.xml:193(replaceable)
+#: groupdel.8.xml:118(replaceable) groupadd.8.xml:257(replaceable)
+#: chage.1.xml:245(replaceable)
+msgid "2"
+msgstr "2"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:189(para) useradd.8.xml:711(para) pwck.8.xml:264(para)
+#: grpck.8.xml:222(para) groupmod.8.xml:195(para) groupdel.8.xml:120(para)
+#: groupadd.8.xml:259(para) chage.1.xml:247(para)
+msgid "invalid command syntax"
+msgstr "ошибка в параметрах команды"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: userdel.8.xml:193(replaceable) useradd.8.xml:727(replaceable)
+#: pwck.8.xml:292(replaceable) passwd.1.xml:445(replaceable)
+#: groupmod.8.xml:211(replaceable) groupdel.8.xml:124(replaceable)
+msgid "6"
+msgstr "6"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:195(para)
+msgid "specified user doesn't exist"
+msgstr "указанный пользователь не существует"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:201(para)
+msgid "user currently logged in"
+msgstr "пользователь сейчас работает в системе"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: userdel.8.xml:205(replaceable) useradd.8.xml:739(replaceable)
+#: groupmod.8.xml:223(replaceable) groupdel.8.xml:136(replaceable)
+#: groupadd.8.xml:281(replaceable)
+msgid "10"
+msgstr "10"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:207(para) useradd.8.xml:741(para) groupmod.8.xml:225(para)
+#: groupdel.8.xml:138(para) groupadd.8.xml:283(para)
+msgid "can't update group file"
+msgstr "не удалось изменить файл групп"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: userdel.8.xml:211(replaceable) useradd.8.xml:745(replaceable)
+msgid "12"
+msgstr "12"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: userdel.8.xml:213(para)
+msgid "can't remove home directory"
+msgstr "не удалось удалить домашний каталог"
+
+# type: Content of: <refentry><refsect1><para>
+#: userdel.8.xml:171(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Команда <command>userdel</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: userdel.8.xml:222(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: userdel.8.xml:229(para)
+#, fuzzy
+#| msgid ""
+#| "You must manually check all file systems to insure that no files remain "
+#| "with the named group as the file group ID."
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+"Вы должны вручную проверить все файловые системы, чтобы убедиться, что не "
+"осталось файлов, принадлежащих удалённой группе."
+
+# type: Content of: <refentry><refsect1><para>
+#: userdel.8.xml:233(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+"Нельзя удалить NIS атрибуты клиента NIS. Это необходимо сделать на NIS "
+"сервере."
+
+#: userdel.8.xml:236(para)
+#, fuzzy
+#| msgid ""
+#| "If <emphasis>USERGROUPS_ENAB</emphasis> is defined to <emphasis remap=\"I"
+#| "\">yes</emphasis> in <filename>/etc/login.defs</filename>, "
+#| "<command>userdel</command> will delete the group with the same name as "
+#| "the user. To avoid inconsistencies in the passwd and group databases, "
+#| "<command>userdel</command> will check that this group is not used as a "
+#| "primary group for another user, and will just warn without deleting the "
+#| "user otherwise. The <option>-f</option> option can force the deletion of "
+#| "this group."
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+"Если значение переменной <emphasis>USERGROUPS_ENAB</emphasis> равно "
+"<emphasis remap=\"I\">yes</emphasis> в файле <filename>/etc/login.defs</"
+"filename>, то <command>userdel</command> удалит группу с именем как у "
+"пользователя. Чтобы избежать рассогласованности в базах данных групп и "
+"паролей, <command>userdel</command> проверит, что данная группа не "
+"используется в качестве первичной для другого пользователя, и выдаст "
+"предупреждение без удаления, если такое случится. Параметр <option>-f</"
+"option> поможет удалить группу в любом случае."
+
+#: userdel.8.xml:249(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: useradd.8.xml:49(refentrytitle) useradd.8.xml:54(refname)
+#: useradd.8.xml:59(command) useradd.8.xml:66(command)
+#: useradd.8.xml:70(command) login.defs.5.xml:421(term)
+msgid "useradd"
+msgstr "useradd"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: useradd.8.xml:55(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+"регистрирует нового пользователя или изменяет информацию по умолчанию о "
+"новых пользователях"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#: useradd.8.xml:67(arg) useradd.8.xml:71(arg)
+msgid "-D"
+msgstr "-D"
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:80(para)
+#, fuzzy
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+"При запуске без параметра <option>-D</option>, команда <command>useradd</"
+"command> создаёт новую учётную запись пользователя, используя значения из "
+"командной строки и системные значения по умолчанию. В зависимости от "
+"параметров командной строки, команда useradd обновляет системные файлы, а "
+"также может создать домашний каталог нового пользователя и скопировать файлы "
+"настроек."
+
+#: useradd.8.xml:89(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:98(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr "Параметры команды <command>useradd</command>:"
+
+#: useradd.8.xml:102(term) useradd.8.xml:499(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option><replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--base-dir</"
+"option><replaceable>БАЗОВЫЙ_КАТАЛОГ</replaceable>"
+
+#: useradd.8.xml:107(para)
+#, fuzzy
+msgid ""
+"The default base directory for the system if <option>-d</"
+"option><replaceable>HOME_DIR</replaceable> is not specified. "
+"<replaceable>BASE_DIR</replaceable> is concatenated with the account name to "
+"define the home directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+"Базовый системный каталог по умолчанию, если другой каталог не указан с "
+"помощью параметра <option>-d</option>. <replaceable>БАЗОВЫЙ_КАТАЛОГ</"
+"replaceable> объединяется с именем учётной записи для определения домашнего "
+"каталога. Если не используется параметр <option>-m</option>, то "
+"<replaceable>БАЗОВЫЙ_КАТАЛОГ</replaceable> должен существовать."
+
+#: useradd.8.xml:115(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:130(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+"Любая текстовая строка. Обычно, здесь коротко описывается учётная запись, и "
+"в настоящее время используется как поле для имени и фамилии пользователя."
+
+#: useradd.8.xml:143(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+"Для создаваемого пользователя будет использован каталог "
+"<replaceable>БАЗОВЫЙ_КАТАЛОГ</replaceable> в качестве начального каталога. "
+"По умолчанию, это значение получается объединением <replaceable>ИМЕНИ</"
+"replaceable> пользователя с <replaceable>БАЗОВЫМ_КАТАЛОГОМ</replaceable> и "
+"используется как имя домашнего каталога. Каталог "
+"<replaceable>БАЗОВЫЙ_КАТАЛОГ</replaceable> необязательно должен существовать "
+"и не будет создан, если его нет."
+
+#: useradd.8.xml:155(term)
+#, fuzzy
+#| msgid "<option>-d</option>, <option>--delete</option>"
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: useradd.8.xml:159(para)
+#, fuzzy
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr "Изменение значений по умолчанию"
+
+#: useradd.8.xml:174(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:188(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password expires until the account is "
+#| "permanently disabled. A value of 0 disables the account as soon as the "
+#| "password has expired, and a value of -1 disables the feature. The default "
+#| "value is -1."
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+"Число дней, которые должны пройти после устаревания пароля, чтобы учётная "
+"запись заблокировалась навсегда. Если указано значение 0, то учётная запись "
+"блокируется сразу после устаревания пароля, а при значении -1 данная "
+"возможность не используется. По умолчанию используется значение -1."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:194(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's login shell. The default is to leave this field "
+#| "blank, which causes the system to select the default login shell."
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+"Имя регистрационной оболочки пользователя. Если задать пустое значение, то "
+"будет использована регистрационная оболочка по умолчанию."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:208(para)
+#, fuzzy
+#| msgid ""
+#| "The group name or number of the user's new initial login group. The group "
+#| "name must exist. A group number must refer to an already existing group. "
+#| "The default group number is 1."
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+"Имя или числовой идентификатор новой начальной группы пользователя. Группа с "
+"таким именем должна существовать. Идентификатор группы должен указывать на "
+"уже существующую группу. По умолчанию идентификатор группы установлен в 1."
+
+#: useradd.8.xml:213(para)
+msgid ""
+"If not specified, the bahavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:236(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+"Список дополнительных групп, в которых числится пользователь. Перечисление "
+"групп осуществляется через запятую, без промежуточных пробелов. На указанные "
+"группы действуют те же ограничения, что и для группы указанной в параметре "
+"<option>-g</option>. По умолчанию пользователь входит только в начальную "
+"группу."
+
+#: useradd.8.xml:253(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-s</option>, <option>--shell</option><replaceable>SHELL</"
+#| "replaceable>"
+msgid ""
+"<option>-k</option>, <option>--skel</option><replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option><replaceable>ОБОЛОЧКА</"
+"replaceable>"
+
+#: useradd.8.xml:258(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+
+#: useradd.8.xml:263(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:267(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+
+#: useradd.8.xml:276(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-K</option>, <option>--key</option><replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option><replaceable>КЛЮЧ</"
+"replaceable>=<replaceable>ЗНАЧЕНИЕ</replaceable>"
+
+#: useradd.8.xml:281(para)
+#, fuzzy
+#| msgid ""
+#| "Overrides /etc/login.defs defaults (UID_MIN, UID_MAX, UMASK, "
+#| "PASS_MAX_DAYS and others). <placeholder-1/> Example: <option>-K </"
+#| "option><replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</"
+#| "replaceable> can be used when creating system account to turn off "
+#| "password ageing, even though system account has no password at all. "
+#| "Multiple <option>-K</option> options can be specified, e.g.: <option>-K </"
+#| "option><replaceable>UID_MIN</replaceable>=<replaceable>100</"
+#| "replaceable><option> -K </option><replaceable>UID_MAX</"
+#| "replaceable>=<replaceable>499</replaceable>"
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K </option><replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-"
+"1</replaceable> can be used when creating system account to turn off "
+"password ageing, even though system account has no password at all. Multiple "
+"<option>-K</option> options can be specified, e.g.: <option>-K </"
+"option><replaceable>UID_MIN</replaceable>=<replaceable>100</"
+"replaceable><option>-K </option><replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Используется для изменения значений по умолчанию, хранимых в файле /etc/"
+"login.defs (UID_MIN, UID_MAX, UMASK, PASS_MAX_DAYS и других). <placeholder-1/"
+"> Пример: <option>-K </option><replaceable>PASS_MAX_DAYS</"
+"replaceable>=<replaceable>-1</replaceable> можно использовать при создании "
+"системной учётной записи, чтобы выключить устаревание пароля, даже если "
+"системная учётная запись вообще не имеет пароля. Можно указывать параметр "
+"<option>-K</option> несколько раз, например: <option>-K </"
+"option><replaceable>UID_MIN</replaceable>=<replaceable>100</"
+"replaceable><option> -K </option><replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable>"
+
+#: useradd.8.xml:297(para)
+msgid ""
+"Note: <option>-K </option><replaceable>UID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Замечание: запись вида <option>-K </option><replaceable>UID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable> пока не работает."
+
+#: useradd.8.xml:305(term)
+#, fuzzy
+#| msgid "<option>-l</option>, <option>--list</option>"
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: useradd.8.xml:307(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr ""
+
+#: useradd.8.xml:310(para)
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"resetted to avoid reusing the entry from a previously deleted user."
+msgstr ""
+
+#: useradd.8.xml:318(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:322(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+
+#: useradd.8.xml:328(para)
+msgid "By default, no home directories are created."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><option>
+#: useradd.8.xml:335(option)
+#, fuzzy
+#| msgid "-"
+msgid "-M"
+msgstr "-"
+
+#: useradd.8.xml:338(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+
+#: useradd.8.xml:347(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:357(para) useradd.8.xml:465(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:370(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr "Позволяет создать учётную запись с уже имеющимся (не уникальным) UID."
+
+#: useradd.8.xml:371(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-o</option> option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:383(para) groupadd.8.xml:150(para)
+#, fuzzy
+#| msgid ""
+#| "The encrypted password, as returned by "
+#| "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#| "manvolnum></citerefentry>. The default is to disable the account."
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"Шифрованное значение пароля, которое возвращает функция "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>. По умолчанию учётная запись заблокирована."
+
+#: useradd.8.xml:400(term) newusers.8.xml:263(term) groupadd.8.xml:167(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: useradd.8.xml:404(para) newusers.8.xml:267(para)
+msgid "Create a system account."
+msgstr ""
+
+#: useradd.8.xml:407(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are choosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: useradd.8.xml:416(para)
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such an user, regardless of the default setting in <filename>/etc/login."
+"defs</filename> (<option>CREATE_HOME</option>). You have to specify the "
+"<option>-m</option> options if you want a home directory for a system "
+"account to be created."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:432(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's login shell. The default is to leave this field "
+#| "blank, which causes the system to select the default login shell."
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+"Имя регистрационной оболочки пользователя. Если задать пустое значение, то "
+"будет использована регистрационная оболочка по умолчанию."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:447(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than 999 and greater than "
+"every other user. Values between 0 and 999 are typically reserved for system "
+"accounts."
+msgstr ""
+"Числовое значение идентификатора пользователя (ID). Оно должно быть "
+"уникальным, если не используется параметр <option>-o</option>. Значение "
+"должно быть неотрицательным. По умолчанию используется наименьшее значение "
+"ID большее 999 и большее любого другого значения пользователя. Значения от 0 "
+"до 999 обычно зарезервированы для системных учётных записей."
+
+#: useradd.8.xml:457(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:461(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:479(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the user's new login shell. Setting this field to blank "
+#| "causes the system to select the default login shell."
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+"Имя новой регистрационной оболочки пользователя. Если задать пустое "
+"значение, то будет использована регистрационная оболочка по умолчанию."
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: useradd.8.xml:489(title)
+msgid "Changing the default values"
+msgstr "Изменение значений по умолчанию"
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: useradd.8.xml:490(para)
+#, fuzzy
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+"При запуске программы с параметром <option>-D</option> команда "
+"<command>useradd</command> показывает текущие значения по умолчанию или "
+"изменяет их, если указаны дополнительные параметры в командной строке. "
+"Допустимые параметры:"
+
+#: useradd.8.xml:504(para)
+#, fuzzy
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+"Начальная часть пути нового домашнего каталога пользователя. Имя "
+"пользователя будет добавлено в конец <replaceable>ДОМАШНЕГО_КАТАЛОГА</"
+"replaceable> для создания имени нового каталога, если не задан параметр "
+"<option>-d</option> при создании новой учётной записи."
+
+#: useradd.8.xml:511(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:523(para)
+msgid "The date on which the user account is disabled."
+msgstr "Дата, когда учётная запись пользователя заблокирована."
+
+#: useradd.8.xml:524(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:536(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+"Число дней, которые должны пройти после устаревания пароля, перед тем как "
+"учётная запись будет заблокирована."
+
+#: useradd.8.xml:540(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:552(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>. The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+
+#: useradd.8.xml:561(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:573(para)
+msgid "The name of a new user's login shell."
+msgstr ""
+
+#: useradd.8.xml:576(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><title>
+#: useradd.8.xml:588(title)
+msgid "NOTES"
+msgstr "ЗАМЕЧАНИЯ"
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:589(para)
+#, fuzzy
+#| msgid ""
+#| "The system administrator is responsible for placing the default user "
+#| "files in the <filename>/etc/skel/</filename> directory."
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+"Системный администратор сам решает, какие файлы нужно положить в каталог "
+"<filename>/etc/skel/</filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:598(para)
+#, fuzzy
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Нельзя добавить пользователя в NIS группу. Это необходимо делать на NIS "
+"сервере."
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:603(para)
+#, fuzzy
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+"Также, если имя пользователя уже существует во внешней базе данных такой как "
+"NIS, то <command>useradd</command> не станет создавать учётную запись "
+"пользователя."
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:609(para)
+#, fuzzy
+#| msgid ""
+#| "Usernames must begin with a lower case letter or an underscore, and only "
+#| "lower case letters, underscores, dashes, and dollar signs may follow. In "
+#| "regular expression terms: [a-z_][a-z0-9_-]*[$]"
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Имена пользователей должны начинаться со строчной буквы или символа "
+"подчёркивания, и должны состоять только из строчных букв, символов "
+"подчёркивания, тире и знака доллара. Это можно описать регулярным "
+"выражением: [a-z_][a-z0-9_-]*[$]"
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:615(para)
+#, fuzzy
+#| msgid "Groupnames may only be up to 16 characters long."
+msgid "Usernames may only be up to 32 characters long."
+msgstr "Имена групп могут быть длиной не более 16 знаков."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr ""
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overriden on the "
+"command line."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+#, fuzzy
+msgid "<option>GID_MAX</option> (number)"
+msgstr "GID_MAX (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+#, fuzzy
+msgid "<option>GID_MIN</option> (number)"
+msgstr "GID_MIN (число)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+#, fuzzy
+#| msgid ""
+#| "Range of group IDs to choose from for the <command>useradd</command> and "
+#| "<command>groupadd</command> programs."
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"Диапазон идентификаторов групп, используемый в программах <command>useradd</"
+"command> и <command>groupadd</command>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr "PASS_MAX_DAYS (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+"Максимальное число дней использования пароля. Если пароль старее этого "
+"числа, то будет запущена процедура смены пароля. Если значение не задано, то "
+"предполагается значение -1 (то есть возможность ограничения не используется)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "PASS_MIN_DAYS (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+"Максимальное число дней между изменениями пароля. Любая смена пароля ранее "
+"заданного срока выполнена не будет. Если значение не задано, то "
+"предполагается значение -1 (то есть возможность ограничения не используется)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr "PASS_WARN_AGE (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+"Число дней за которое начнёт выдаваться предупреждение об устаревании "
+"пароля. Нулевое значение означает, что предупреждение выдаётся в день "
+"устаревания, при отрицательном значении предупреждение выдаваться не будет. "
+"Если значение не задано, выдача предупреждения отключается."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "GID_MAX (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "GID_MIN (число)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+#, fuzzy
+#| msgid ""
+#| "Range of group IDs to choose from for the <command>useradd</command> and "
+#| "<command>groupadd</command> programs."
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+"Диапазон идентификаторов групп, используемый в программах <command>useradd</"
+"command> и <command>groupadd</command>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "UID_MAX (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "UID_MIN (число)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#, fuzzy
+#| msgid ""
+#| "Range of group IDs to choose from for the <command>useradd</command> and "
+#| "<command>groupadd</command> programs."
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+"Диапазон идентификаторов групп, используемый в программах <command>useradd</"
+"command> и <command>groupadd</command>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>UID_MAX</option> (number)"
+msgstr "UID_MAX (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>UID_MIN</option> (number)"
+msgstr "UID_MIN (число)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#, fuzzy
+#| msgid ""
+#| "Range of group IDs to choose from for the <command>useradd</command> and "
+#| "<command>groupadd</command> programs."
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+"Диапазон идентификаторов групп, используемый в программах <command>useradd</"
+"command> и <command>groupadd</command>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+#, fuzzy
+msgid "<option>UMASK</option> (number)"
+msgstr "UMASK (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+#, fuzzy
+#| msgid ""
+#| "The permission mask is initialized to this value. If not specified, the "
+#| "permission mask will be initialized to 022."
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+"Задаёт начальное значение маски доступа. Если не указано, то маска доступа "
+"устанавливается в 022."
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create"
+msgstr ""
+
+#: useradd.8.xml:42(para) newusers.8.xml:42(para) login.defs.5.xml:42(para)
+#: login.1.xml:42(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overriden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: useradd.8.xml:671(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:673(para)
+msgid "Default values for account creation."
+msgstr "содержит защищаемую информацию о пользователях"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: useradd.8.xml:677(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:679(para)
+msgid "Directory containing default files."
+msgstr "каталог, содержащий пользовательские файлы по умолчанию"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: useradd.8.xml:715(replaceable) shadow.3.xml:35(manvolnum)
+#: pwck.8.xml:274(replaceable) passwd.1.xml:427(replaceable)
+#: grpck.8.xml:232(replaceable) groupmod.8.xml:199(replaceable)
+#: groupadd.8.xml:263(replaceable)
+msgid "3"
+msgstr "3"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:717(para) passwd.1.xml:447(para) groupmod.8.xml:201(para)
+#: groupadd.8.xml:265(para)
+msgid "invalid argument to option"
+msgstr "недопустимое значение параметра"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: useradd.8.xml:721(replaceable) pwck.8.xml:280(replaceable)
+#: passwd.1.xml:433(replaceable) grpck.8.xml:238(replaceable)
+#: groupmod.8.xml:205(replaceable) groupadd.8.xml:269(replaceable)
+msgid "4"
+msgstr "4"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:723(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "такой UID уже существует (и не задан параметр <option>-o</option>)"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:729(para) groupmod.8.xml:207(para) groupmod.8.xml:213(para)
+#: groupdel.8.xml:126(para)
+msgid "specified group doesn't exist"
+msgstr "указанная группа не существует"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: useradd.8.xml:733(replaceable) groupmod.8.xml:217(replaceable)
+#: groupadd.8.xml:275(replaceable)
+msgid "9"
+msgstr "9"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:735(para)
+msgid "username already in use"
+msgstr "имя пользователя уже существует"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:747(para)
+msgid "can't create home directory"
+msgstr "не удалось создать домашний каталог"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: useradd.8.xml:751(replaceable)
+msgid "13"
+msgstr "13"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: useradd.8.xml:753(para)
+msgid "can't create mail spool"
+msgstr "не удалось создать почтовый ящик"
+
+# type: Content of: <refentry><refsect1><para>
+#: useradd.8.xml:693(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Команда <command>useradd</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: useradd.8.xml:762(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refname>
+#: suauth.5.xml:34(refentrytitle) suauth.5.xml:39(refname)
+msgid "suauth"
+msgstr "suauth"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><manvolnum>
+#: suauth.5.xml:35(manvolnum) shadow.5.xml:35(manvolnum)
+#: pwck.8.xml:286(replaceable) porttime.5.xml:35(manvolnum)
+#: passwd.5.xml:35(manvolnum) passwd.1.xml:439(replaceable)
+#: login.defs.5.xml:98(manvolnum) login.access.5.xml:36(manvolnum)
+#: limits.5.xml:36(manvolnum) gshadow.5.xml:34(manvolnum)
+#: grpck.8.xml:244(replaceable) faillog.5.xml:35(manvolnum)
+msgid "5"
+msgstr "5"
+
+# type: Content of: <refentry><refmeta><refmiscinfo>
+#: suauth.5.xml:36(refmiscinfo) shadow.5.xml:36(refmiscinfo)
+#: porttime.5.xml:36(refmiscinfo) passwd.5.xml:36(refmiscinfo)
+#: login.defs.5.xml:99(refmiscinfo) login.access.5.xml:37(refmiscinfo)
+#: limits.5.xml:37(refmiscinfo) gshadow.5.xml:35(refmiscinfo)
+#: faillog.5.xml:36(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr "Форматы файлов"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: suauth.5.xml:40(refpurpose)
+msgid "detailed su control file"
+msgstr "файл управления командой su"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: suauth.5.xml:45(command) suauth.5.xml:171(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+# type: Content of: <refentry><refsect1><para>
+#: suauth.5.xml:51(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+"Файл <filename>/etc/suauth</filename> проверяется каждый раз при запуске "
+"команды su. Он влияет на поведение команды su, в зависимости от:"
+
+# type: Content of: <refentry><refsect1><literallayout>
+#. .RS
+#: suauth.5.xml:58(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      1) the user su is targetting\n"
+"    "
+msgstr ""
+"\n"
+"      1) пользователя, права которого нужно получить с помощью su\n"
+"    "
+
+# type: Content of: <refentry><refsect1><para>
+#. .fi
+#: suauth.5.xml:62(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+"2) пользователя, запустившего команду su (или группы, членом которой он "
+"может быть)"
+
+# type: Content of: <refentry><refsect1><para>
+#: suauth.5.xml:67(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+"Формат файла показан ниже, строки начинающиеся с # считаются комментарием и "
+"игнорируются;"
+
+# type: Content of: <refentry><refsect1><literallayout>
+#: suauth.5.xml:72(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      to-id:from-id:ACTION\n"
+"    "
+msgstr ""
+"\n"
+"      желаемый-id:желающий-id:ДЕЙСТВИЕ\n"
+"    "
+
+#: suauth.5.xml:76(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\""
+msgstr ""
+"Где желаемый-id может быть словом <emphasis>ALL</emphasis>, списком имён "
+"пользователей, перечисленных через запятую \",\" или фразы <emphasis>ALL "
+"EXCEPT</emphasis> , после которой идёт список имён пользователей "
+"перечисленных через \",\""
+
+#: suauth.5.xml:82(para)
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is neccessary."
+msgstr ""
+"желающий-id может содержать то же, что и желательный-id, плюс новое "
+"слово<emphasis>GROUP</emphasis>. <emphasis>ALL EXCEPT GROUP</emphasis> тоже "
+"допустимо. После <emphasis>GROUP</emphasis> указывается одна или более "
+"названий групп, разделённых \",\". Недостаточно иметь id первичной группы "
+"соответствующей группы, необходимо иметь запись в файле "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para>
+#: suauth.5.xml:93(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr "В поле ДЕЙСТВИЕ может быть только одно из следующих значений:"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><emphasis>
+#: suauth.5.xml:99(emphasis)
+msgid "DENY"
+msgstr "DENY"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: suauth.5.xml:102(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr "Команда su останавливает выполнение, даже не спрашивая пароль."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><emphasis>
+#: suauth.5.xml:109(emphasis)
+msgid "NOPASS"
+msgstr "NOPASS"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: suauth.5.xml:112(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr "Команда su выполняется без запроса пароля."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><emphasis>
+#: suauth.5.xml:120(emphasis)
+msgid "OWNPASS"
+msgstr "OWNPASS"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: suauth.5.xml:123(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+"Чтобы успешно выполнить команду su, пользователь должен ввести свой "
+"собственный пароль."
+
+# type: Content of: <refentry><refsect1><para>
+#: suauth.5.xml:131(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+"Заметим, что тут используются три поля, разделённых двоеточиями. Никаких "
+"пробелов не допускается около двоеточий. Также заметим, что файл "
+"просматривается строка за строкой, и первое подходящее правило будет "
+"использовано без проверки оставшихся правил. Это позволяет системному "
+"администратору осуществлять любой контроль, какой он пожелает."
+
+# type: Content of: <refentry><refsect1><title>
+#: suauth.5.xml:141(title)
+msgid "EXAMPLE"
+msgstr "ПРИМЕР"
+
+# type: Content of: <refentry><refsect1><literallayout>
+#: suauth.5.xml:142(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      # sample /etc/suauth file\n"
+"      #\n"
+"      # A couple of privileged usernames may\n"
+"      # su to root with their own password.\n"
+"      #\n"
+"      root:chris,birddog:OWNPASS\n"
+"      #\n"
+"      # Anyone else may not su to root unless in\n"
+"      # group wheel. This is how BSD does things.\n"
+"      #\n"
+"      root:ALL EXCEPT GROUP wheel:DENY\n"
+"      #\n"
+"      # Perhaps terry and birddog are accounts\n"
+"      # owned by the same person.\n"
+"      # Access can be arranged between them\n"
+"      # with no password.\n"
+"      #\n"
+"      terry:birddog:NOPASS\n"
+"      birddog:terry:NOPASS\n"
+"      #\n"
+"    "
+msgstr ""
+"\n"
+"      # пример файла /etc/suauth\n"
+"      #\n"
+"      # Пара привилегированных имён пользователей\n"
+"      # могут выполнить su, чтобы получить права суперпользователя введя свой пароль.\n"
+"      #\n"
+"      root:chris,birddog:OWNPASS\n"
+"      #\n"
+"      # Все остальные не могут выполнить su для получения root, если они \n"
+"      # не члены группы wheel. Так настроено в BSD.\n"
+"      #\n"
+"      root:ALL EXCEPT GROUP wheel:DENY\n"
+"      #\n"
+"      # Возможно учётными записями terry и birddog\n"
+"      # владеет один человек.\n"
+"      # Переход из одной записи в другую\n"
+"      # можно сделать без запроса пароля.\n"
+"      #\n"
+"      terry:birddog:NOPASS\n"
+"      birddog:terry:NOPASS\n"
+"      #\n"
+"    "
+
+# type: Content of: <refentry><refsect1><title>
+#: suauth.5.xml:178(title) pwconv.8.xml:135(title) login.defs.5.xml:455(title)
+msgid "BUGS"
+msgstr "ОШИБКИ РЕАЛИЗАЦИИ"
+
+# type: Content of: <refentry><refsect1><para>
+#: suauth.5.xml:179(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+"Может быть несколько кривостей. Анализатор файла, в частности, не прощает "
+"синтаксических ошибок, ожидая, что не будет недопустимых пробелов (кроме как "
+"в начале и конце строк) и специальных слов, разделяющих различные вещи."
+
+# type: Content of: <refentry><refsect1><title>
+#: suauth.5.xml:188(title) shadow.3.xml:183(title)
+msgid "DIAGNOSTICS"
+msgstr "ДИАГНОСТИКА"
+
+#: suauth.5.xml:189(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+"Ошибки при анализе файла выводятся с помощью "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> с уровнем ERR средства AUTH."
+
+#: suauth.5.xml:198(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: su.1.xml:54(refentrytitle) su.1.xml:59(refname) su.1.xml:64(command)
+#: login.defs.5.xml:395(term)
+msgid "su"
+msgstr "su"
+
+# type: Content of: <refentry><refmeta><refmiscinfo>
+#: su.1.xml:56(refmiscinfo) sg.1.xml:40(refmiscinfo)
+#: passwd.1.xml:46(refmiscinfo) newgrp.1.xml:40(refmiscinfo)
+#: login.1.xml:72(refmiscinfo) groups.1.xml:36(refmiscinfo)
+#: gpasswd.1.xml:44(refmiscinfo) expiry.1.xml:43(refmiscinfo)
+#: chsh.1.xml:42(refmiscinfo) chfn.1.xml:43(refmiscinfo)
+#: chage.1.xml:36(refmiscinfo)
+msgid "User Commands"
+msgstr "Пользовательские команды"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: su.1.xml:60(refpurpose)
+msgid "change user ID or become superuser"
+msgstr "изменяет ID пользователя или делает его суперпользователем"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><arg><replaceable>
+#: su.1.xml:70(replaceable) login.1.xml:85(replaceable)
+#: login.1.xml:93(replaceable)
+msgid "username"
+msgstr "имя_пользователя"
+
+#: su.1.xml:78(para)
+msgid ""
+"The <command>su</command> command is used to become another user during a "
+"login session. Invoked without a <option>username</option>, <command>su</"
+"command> defaults to becoming the superuser. The optional argument <option>-"
+"</option> may be used to provide an environment similar to what the user "
+"would expect had the user logged in directly."
+msgstr ""
+"Программа <command>su</command> используется для того, чтобы пользователь "
+"мог стать другим пользователем в текущей сессии. Если <command>su</command> "
+"вызывается без <option>имени_пользователя</option>, то это по умолчанию "
+"делает пользователя суперпользователем. Необязательный параметр <option>-</"
+"option> можно использовать для воссоздания рабочей среды, такой же как если "
+"бы настоящий пользователь выполнял вход в систему."
+
+#: su.1.xml:87(para)
+msgid ""
+"Additional arguments may be provided after the username, in which case they "
+"are supplied to the user's login shell. In particular, an argument of "
+"<option>-c</option> will cause the next argument to be treated as a command "
+"by most command interpreters. The command will be executed by the shell "
+"specified in <filename>/etc/passwd</filename> for the target user."
+msgstr ""
+"После имени пользователя можно указать дополнительные аргументы, которые "
+"будут переданы регистрационной оболочке пользователя. В частности, аргумент "
+"<option>-c</option> заставит большинство оболочек считать следующий аргумент "
+"как команду. Команда будет выполнена оболочкой, указанной в файле <filename>/"
+"etc/passwd</filename>, которая является регистрационной для указываемого "
+"пользователя."
+
+#: su.1.xml:96(para)
+msgid ""
+"You can use the <option>--</option> argument to separate <command>su</"
+"command> options from the arguments supplied to the shell."
+msgstr ""
+"Вы можете использовать параметр <option>--</option> чтобы отделить параметры "
+"<command>su</command> от параметров передаваемых оболочке."
+
+# type: Content of: <refentry><refsect1><para>
+#: su.1.xml:101(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+"Пользователю предложат ввести пароль, если он задан. При неверном пароле "
+"возникает сообщение об ошибке. Все попытки, удачные и неудачные, "
+"протоколируются системой с целью обнаружения злоупотреблений."
+
+#: su.1.xml:106(para)
+#, fuzzy
+#| msgid ""
+#| "The current environment is passed to the new shell. The value of <envar>"
+#| "$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+#| "users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+#| "superuser. This may be changed with the <emphasis>ENV_PATH</emphasis> and "
+#| "<emphasis>ENV_SUPATH</emphasis> definitions in <filename>/etc/login.defs</"
+#| "filename>."
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+"Текущая рабочая среда передаётся новой оболочке. Значение <envar>$PATH</"
+"envar> устанавливается равным <filename>/bin:/usr/bin</filename> для обычных "
+"пользователей, или <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> для "
+"суперпользователя. Эти значения можно изменить в переменных "
+"<emphasis>ENV_PATH</emphasis> и <emphasis>ENV_SUPATH</emphasis> в файле "
+"<filename>/etc/login.defs</filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: su.1.xml:115(para) login.1.xml:166(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+"Субсистемный вход в систему можно распознать по наличию символа \"*\" в "
+"начале регистрационной оболочки. Заданный домашний каталог будет использован "
+"как корень новой файловой системы, в которой регистрируется пользователь."
+
+# type: Content of: <refentry><refsect1><para>
+#: su.1.xml:124(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr "Параметры команды <command>su</command>:"
+
+#: su.1.xml:128(term)
+msgid ""
+"<option>-c</option>, <option>--command</option><replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--command</option><replaceable>КОМАНДА</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: su.1.xml:133(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr ""
+"Указать команду, которая будет запущена оболочкой в виде параметра для "
+"<option>-c</option>."
+
+#: su.1.xml:140(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: su.1.xml:144(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+"Предоставляет среду, как если бы пользователь непосредственно "
+"регистрировался в системе."
+
+#: su.1.xml:148(para)
+msgid ""
+"When <option>-</option> is used, it must be specified as the last "
+"<command>su</command> option. The other forms (<option>-l</option> and "
+"<option>--login</option>) do not have this restriction."
+msgstr ""
+"Если используется <option>-</option>, то он должен быть задан последним "
+"параметром <command>su</command>. Другие формы (<option>-l</option> и "
+"<option>--login</option>) не имеют этого ограничения."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: su.1.xml:162(para)
+msgid "The shell that will be invoked."
+msgstr "Оболочка, которая будет запущена."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: su.1.xml:170(para)
+msgid "The shell specified with --shell."
+msgstr "Оболочка указанная в параметре --shell."
+
+#: su.1.xml:173(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+"Если используется <option>--preserve-environment</option>, то оболочка "
+"задаётся переменной среды <envar>$SHELL</envar>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: su.1.xml:180(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+"Оболочка, указанная в записи файла <filename>/etc/passwd</filename> для "
+"заданного пользователя."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para>
+#: su.1.xml:186(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+"<filename>/bin/sh</filename>, если ни одной оболочке не было найдено с "
+"помощью методов, указанных выше."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: su.1.xml:163(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+"Запущенная оболочка выбирается из (в порядке убывания приоритета): "
+"<placeholder-1/>"
+
+#: su.1.xml:191(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shell</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+"Если заданный пользователь имеет ограниченную оболочку (то есть оболочка в "
+"поле пользовательской записи в файле <filename>/etc/passwd</filename> не "
+"прописана в файле <filename>/etc/shell</filename>), то параметр <option>--"
+"shell</option> или переменная среды <envar>$SHELL</envar> не будет взята в "
+"учётную запись, если <command>su</command> не была запущена "
+"суперпользователем."
+
+#: su.1.xml:202(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:211(envar)
+msgid "$PATH"
+msgstr ""
+
+#: su.1.xml:213(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+
+#: su.1.xml:222(envar)
+msgid "$IFS"
+msgstr ""
+
+#: su.1.xml:224(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: su.1.xml:207(para)
+#, fuzzy
+#| msgid "Preserve the current environment."
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr "Сохранить имеющуюся рабочую среду."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: su.1.xml:233(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+"Если заданный пользователь имеет ограниченную оболочку, то этот параметр не "
+"сработает (если <command>su</command> не запускается суперпользователем)."
+
+#: su.1.xml:242(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+
+#: su.1.xml:251(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+
+#: su.1.xml:258(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+
+#: su.1.xml:268(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+
+#: su.1.xml:281(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+
+#: su.1.xml:289(para)
+msgid "Other environment might be set by PAM modules."
+msgstr ""
+
+#: su.1.xml:237(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: su.1.xml:303(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Данная версия программы <command>su</command> может быть собрана с разными "
+"параметрами и только некоторые из них смогут быть использованы на любой "
+"машине."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE</option> (string)"
+msgstr "CHFN_RESTRICT (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "CHFN_RESTRICT (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"in no."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "MAIL_DIR (строка)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "MAIL_DIR (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "The file is formatted like this, with lines starting with a # being "
+#| "treated as comment lines and ignored;"
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+"Формат файла показан ниже, строки начинающиеся с # считаются комментарием и "
+"игнорируются;"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "CHFN_RESTRICT (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value can be preceded by <replaceable>PATH=</"
+"replaceable>, or a colon separated list of paths (for example <replaceable>/"
+"bin:/usr/bin</replaceable>). The default value is <replaceable>PATH=/bin:/"
+"usr/bin</replaceable>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "CHFN_RESTRICT (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value can be preceded by <replaceable>PATH=</"
+"replaceable>, or a colon separated list of paths (for example <replaceable>/"
+"sbin:/bin:/usr/sbin:/usr/bin</replaceable>). The default value is "
+"<replaceable>PATH=/bin:/usr/bin</replaceable>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "CHFN_RESTRICT (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "CHFN_RESTRICT (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will no be translated."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable setting of ulimit, umask, and niceness from passwd gecos field."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SU_NAME</option> (string)"
+msgstr "MAIL_DIR (строка)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+
+#: su.1.xml:363(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>sh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: sg.1.xml:38(refentrytitle) sg.1.xml:43(refname) sg.1.xml:49(command)
+msgid "sg"
+msgstr "sg"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: sg.1.xml:44(refpurpose)
+msgid "execute command as different group ID"
+msgstr "выполняет команду с правами другой группы"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><option>
+#: sg.1.xml:50(arg) newgrp.1.xml:49(arg)
+msgid "-"
+msgstr "-"
+
+# type: Content of: <refentry><refsect1><para><option>
+#: sg.1.xml:52(arg) expiry.1.xml:53(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:51(arg)
+msgid "group <placeholder-1/> command"
+msgstr "группа <placeholder-1/> команда"
+
+#: sg.1.xml:60(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+"Команда <command>sg</command> работает подобно команде <command>newgrp</"
+"command>, но в качестве параметра ожидает команду. Команда будет выполнена "
+"оболочкой <filename>/bin/sh</filename>. В большинстве оболочек, откуда может "
+"запускаться <command>sg</command>, команду из нескольких слов нужно "
+"заключать в кавычки. Другим отличием между <command>newgrp</command> и "
+"<command>sg</command> является то, что некоторые оболочки воспринимают "
+"<command>newgrp</command> особенным образом, заменяя себя новым экземпляром "
+"оболочки, которую создаёт <command>newgrp</command>. Этого не происходит с "
+"командой <command>sg</command>, поэтому после завершения работы <command>sg</"
+"command> вы возвращаетесь в предыдущую группу."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+
+#: sg.1.xml:119(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.5.xml:34(refentrytitle) shadow.5.xml:39(refname)
+#: shadow.3.xml:34(refentrytitle) shadow.3.xml:39(refname)
+#: pwck.8.xml:60(replaceable) pwck.8.xml:75(replaceable)
+#: grpck.8.xml:53(replaceable) grpck.8.xml:62(replaceable)
+msgid "shadow"
+msgstr "shadow"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: shadow.5.xml:40(refpurpose)
+#, fuzzy
+#| msgid "the password file"
+msgid "shadowed password file"
+msgstr "файл паролей"
+
+# type: Content of: <refentry><refsect1><para>
+#: shadow.5.xml:45(para)
+#, fuzzy
+#| msgid ""
+#| "<emphasis remap=\"I\">shadow</emphasis> contains the encrypted password "
+#| "information for user's accounts and optional the password aging "
+#| "information. Included is:"
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+"<emphasis remap=\"I\">shadow</emphasis> содержит шифрованные пароли учётных "
+"записей пользователей и необязательную информацию об устаревании пароля. "
+"Включает в себя:"
+
+# type: Content of: <refentry><refsect1><para>
+#: shadow.5.xml:51(para) gshadow.5.xml:49(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+"Этот файл должен быть недоступен обычному пользователю, если нужно "
+"обеспечить безопасность паролей."
+
+#: shadow.5.xml:56(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.5.xml:63(emphasis) passwd.5.xml:53(para)
+msgid "login name"
+msgstr "имя пользователя для входа в систему"
+
+#: shadow.5.xml:65(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.5.xml:71(emphasis) gshadow.5.xml:68(emphasis)
+msgid "encrypted password"
+msgstr "шифрованный пароль"
+
+#: shadow.5.xml:73(para) gshadow.5.xml:70(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+"Подробней о пароле смотрите на странице руководства "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+
+#: shadow.5.xml:78(para)
+#, fuzzy
+#| msgid ""
+#| "If the password field contains some string that is not valid result of "
+#| "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#| "manvolnum></citerefentry>, for instance ! or *, the user will not be able "
+#| "to use a unix password to log in, subject to "
+#| "<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+#| "citerefentry>."
+msgid ""
+"If the password field contains some string that is not a valid result of "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, for instance ! or *, the user will not be able to use a unix "
+"password to log in (but the user may log in the system by other means)."
+msgstr ""
+"Если поле пароля содержит строку, которая не удовлетворяет требованиям "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, например содержит ! или *, то пользователь не сможет "
+"использовать этот unix пароль для регистрации с учётом настроек "
+"<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+"citerefentry>."
+
+#: shadow.5.xml:85(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+
+#: shadow.5.xml:92(para) gshadow.5.xml:92(para)
+msgid ""
+"A password field which starts with a exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.5.xml:102(emphasis)
+#, fuzzy
+#| msgid "days before password may be changed"
+msgid "date of last password change"
+msgstr "число дней, перед тем как пароль может быть изменён"
+
+#: shadow.5.xml:105(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:109(para)
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"pasword the next time she will log in the system."
+msgstr ""
+
+#: shadow.5.xml:114(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: shadow.5.xml:121(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "minimum password age"
+msgstr "Изменение пароля"
+
+#: shadow.5.xml:123(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+
+#: shadow.5.xml:128(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: shadow.5.xml:135(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "maximum password age"
+msgstr "Изменение пароля"
+
+#: shadow.5.xml:137(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+
+#: shadow.5.xml:141(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+
+#: shadow.5.xml:146(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+
+#: shadow.5.xml:151(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: shadow.5.xml:159(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "password warning period"
+msgstr "Изменение пароля"
+
+# type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#: shadow.5.xml:162(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password has expired before the account will "
+#| "be disabled."
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+"Число дней, которые должны пройти после устаревания пароля, перед тем как "
+"учётная запись будет заблокирована."
+
+#: shadow.5.xml:167(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+
+#: shadow.5.xml:175(emphasis)
+msgid "password inactivity period"
+msgstr ""
+
+#: shadow.5.xml:178(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+
+#: shadow.5.xml:184(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+
+#: shadow.5.xml:189(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: shadow.5.xml:197(emphasis)
+#, fuzzy
+#| msgid "User account information."
+msgid "account expiration date"
+msgstr "содержит информацию о пользователях"
+
+#: shadow.5.xml:200(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:204(para)
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an acount expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+
+#: shadow.5.xml:210(para)
+msgid "An empty field means that the account will never expire."
+msgstr ""
+
+#: shadow.5.xml:213(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.5.xml:221(emphasis)
+#, fuzzy
+#| msgid "a reserved field"
+msgid "reserved field"
+msgstr "зарезервированное поле"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.5.xml:223(para)
+#, fuzzy
+#| msgid "sp_flag - reserved for future use"
+msgid "This field is reserved for future use."
+msgstr "sp_flag - зарезервировано"
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: shadow.5.xml:245(filename)
+#, fuzzy
+#| msgid "/etc/shadow"
+msgid "/etc/shadow-"
+msgstr "/etc/shadow"
+
+#: shadow.5.xml:247(para)
+msgid "Backup file for /etc/shadow."
+msgstr ""
+
+#: shadow.5.xml:248(para) passwd.5.xml:134(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+
+#: shadow.5.xml:259(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+# type: Content of: <refentry><refmeta><refmiscinfo>
+#: shadow.3.xml:36(refmiscinfo)
+msgid "Library Calls"
+msgstr "Библиотечные функции"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: shadow.3.xml:40(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:41(refpurpose)
+msgid "encrypted password file routines"
+msgstr "процедуры для работы с файлом шифрованных паролей"
+
+# type: Content of: <refentry><refsect1><title>
+#: shadow.3.xml:45(title)
+msgid "SYNTAX"
+msgstr "СИНТАКСИС"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:47(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:51(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:55(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "struct spwd *getspnam(char"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: shadow.3.xml:56(emphasis)
+msgid "*name"
+msgstr "*name"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: shadow.3.xml:56(emphasis) shadow.3.xml:69(emphasis)
+#: shadow.3.xml:74(emphasis) shadow.3.xml:80(emphasis)
+msgid ");"
+msgstr ");"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:60(emphasis)
+msgid "void setspent();"
+msgstr "void setspent();"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:64(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:68(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><emphasis>
+#: shadow.3.xml:69(emphasis) shadow.3.xml:80(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:73(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:74(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:78(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:79(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+# type: Content of: <refentry><refsect1><title>
+#: shadow.3.xml:79(emphasis)
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:84(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: shadow.3.xml:88(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+#: shadow.3.xml:94(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+"<emphasis remap=\"I\">shadow</emphasis> управляет содержимым файла теневых "
+"паролей, <filename>/etc/shadow</filename>. Структура в файле <emphasis remap="
+"\"I\">#include</emphasis>:"
+
+# type: Content of: <refentry><refsect1><programlisting>
+#: shadow.3.xml:99(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+"      char\t\t*sp_namp; /* user login name */\n"
+"      char\t\t*sp_pwdp; /* encrypted password */\n"
+"      long int\t\tsp_lstchg; /* last password change */\n"
+"      long int\t\tsp_min; /* days until change allowed. */\n"
+"      long int\t\tsp_max; /* days before change required */\n"
+"      long int\t\tsp_warn; /* days warning for expiration */\n"
+"      long int\t\tsp_inact; /* days before account inactive */\n"
+"      long int\t\tsp_expire; /* date when account expires */\n"
+"      unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+"    "
+msgstr ""
+"struct spwd {\n"
+"      char\t \t \t*sp_namp;  /* имя пользователя */\n"
+"      char\t \t \t*sp_pwdp;  /* шифрованный пароль */\n"
+"      long int\t \t \tsp_lstchg; /* дата последней смены пароля */\n"
+"      long int\t \t \tsp_min;    /* дней должно пройти между сменами пароля. */\n"
+"      long int\t \t \tsp_max;    /* дней перед необходимостью смены пароля */\n"
+"      long int\t \t \tsp_warn;   /* дней вывода предупреждения об устаревании */\n"
+"      long int\t \t \tsp_inact;  /* дней перед тем как учётная запись заблокируется */\n"
+"      long int\t \t \tsp_expire; /* дата устаревания учётной записи */\n"
+"      unsigned long int\tsp_flag;   /* зарезервировано */\n"
+"}"
+
+# type: Content of: <refentry><refsect1><para>
+#: shadow.3.xml:111(para)
+msgid "The meanings of each field are:"
+msgstr "Значение каждого поля:"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:114(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+"sp_namp - указатель на строку с именем пользователя, завершающуюся нулевым "
+"символом"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:117(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+"sp_pwdp - указатель на строку с паролем, завершающуюся нулевым символом"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:120(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+"sp_lstchg - количество дней, когда был изменён пароль последний раз, начиная "
+"с 1 января 1970 года"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:123(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr "sp_min - количество дней, когда можно не менять пароль"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:126(para)
+msgid "sp_max - days after which password must be changed"
+msgstr ""
+"sp_max - количество дней, которое должно пройти, чтобы нужно было поменять "
+"пароль"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:129(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+"sp_warn - количество дней, когда будет выдаваться предупреждение о скором "
+"устаревании пароля перед тем как пароль устареет"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:134(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+"sp_inact - количество дней, которые должны пройти после устаревания пароля, "
+"когда начинать считать, что учётная запись неактивна и заблокирована"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:139(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+"sp_expire - дней, после которых учётная запись будет заблокирована, начиная "
+"с 1 января 1970 года"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: shadow.3.xml:142(para)
+msgid "sp_flag - reserved for future use"
+msgstr "sp_flag - зарезервировано"
+
+#: shadow.3.xml:150(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+"Функции <emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis> и <emphasis>sgetspent</emphasis> возвращают "
+"указатель на структуру <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> возвращает следующую запись из файла, а <emphasis>fgetspent</"
+"emphasis> возвращает следующую запись из заданного канала, предполагая, что "
+"это файл правильного формата.<emphasis>sgetspent</emphasis> возвращает "
+"указатель на <emphasis>struct spwd</emphasis>, используя предоставленную "
+"строку в качестве входящих данных. <emphasis>getspnam</emphasis> ищет "
+"начиная с текущей позиции в файле запись по имени <emphasis>name</emphasis>."
+
+# type: Content of: <refentry><refsect1><para>
+#: shadow.3.xml:163(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+"Функции <emphasis>setspent</emphasis> и <emphasis>endspent</emphasis> можно "
+"использовать для перемещения в начало и конец файла теневых паролей "
+"соответственно."
+
+#: shadow.3.xml:169(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+"Функции <emphasis>lckpwdf</emphasis> и <emphasis>ulckpwdf</emphasis> "
+"используются для получения монопольного доступа к файлу <filename>/etc/"
+"shadow</filename>. <emphasis>lckpwdf</emphasis> пытается выполнить "
+"блокировку с помощью <emphasis>pw_lock</emphasis> в течении 15 секунд. Далее "
+"выполняется попытка получить вторую блокировку с помощью <emphasis>spw_lock</"
+"emphasis> в течении времени оставшегося от первоначальных 15 секунд. При "
+"неудаче в любой из блокировок в течении 15 секунд, функция "
+"<emphasis>lckpwdf</emphasis> возвращает -1. Если обе блокировки прошли "
+"успешно возвращается 0."
+
+# type: Content of: <refentry><refsect1><para>
+#: shadow.3.xml:184(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+"Функции возвращают NULL, если все записи кончились или произошла ошибка во "
+"время работы. Функции, возвращающие <emphasis>int</emphasis>, возвращают 0 "
+"при успешном выполнении и -1 в случае неудачи."
+
+# type: Content of: <refentry><refsect1><para>
+#: shadow.3.xml:194(para)
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+"Данные функции могут использоваться только суперпользователем, так как "
+"доступ к файлу теневых паролей ограничен."
+
+#: shadow.3.xml:214(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><command>
+#: pwconv.8.xml:42(refentrytitle) pwconv.8.xml:47(refname)
+#: pwconv.8.xml:56(command) login.defs.5.xml:388(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: pwconv.8.xml:48(refname) pwconv.8.xml:59(command)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: pwconv.8.xml:49(refname) pwconv.8.xml:62(command)
+#: login.defs.5.xml:302(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: pwconv.8.xml:50(refname) pwconv.8.xml:65(command)
+#: login.defs.5.xml:308(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: pwconv.8.xml:51(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr "преобразует пароли пользователей и групп в/из защищённую форму"
+
+#: pwconv.8.xml:71(para)
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+"Команда <command>pwconv</command> создаёт файл <emphasis remap=\"I\">shadow</"
+"emphasis> из файла <emphasis remap=\"I\">passwd</emphasis> и необязательно "
+"существующего файла <emphasis remap=\"I\">shadow</emphasis>."
+
+#: pwconv.8.xml:77(para)
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+"Команда <command>pwunconv</command> создаёт файл <emphasis remap=\"I"
+"\">passwd</emphasis> из файлов <emphasis remap=\"I\">passwd</emphasis> и "
+"<emphasis remap=\"I\">shadow</emphasis>, а затем удаляет файл <emphasis "
+"remap=\"I\">shadow</emphasis>."
+
+#: pwconv.8.xml:84(para)
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+"Команда <command>grpconv</command> создаёт файл <emphasis remap=\"I"
+"\">gshadow</emphasis> из файла <emphasis remap=\"I\">group</emphasis> и "
+"необязательно существующего файла <emphasis remap=\"I\">gshadow</emphasis>."
+
+#: pwconv.8.xml:90(para)
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+"Команда <command>grpunconv</command> создаёт файл <emphasis remap=\"I"
+"\">group</emphasis> из файлов <emphasis remap=\"I\">group</emphasis> и "
+"<emphasis remap=\"I\">gshadow</emphasis>, а затем удаляет файл <emphasis "
+"remap=\"I\">gshadow</emphasis>."
+
+#: pwconv.8.xml:97(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+"Эти четыре программы работают с файлами обычных или теневых паролей "
+"пользователей и групп: <filename>/etc/passwd</filename>, <filename>/etc/"
+"group</filename>, <filename>/etc/shadow</filename> и <filename>/etc/gshadow</"
+"filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: pwconv.8.xml:104(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+"Каждая программа выполняет необходимые блокировки перед преобразованиями. "
+"Команды <command>pwconv</command> и <command>grpconv</command> выполняют "
+"схожий порядок действий. Сначала удаляются записи из теневого файла которых "
+"нет в главном файле. Затем обновляются записи в теневом файле которые не "
+"содержат `x' вместо пароля в главном файле. Далее добавляются отсутствующие "
+"теневые записи. Наконец, пароли в главном файле заменяются символом `x'. "
+"Данные программы можно использовать как для первоначального преобразования, "
+"так и для обновления теневого файла, если главный файл редактировался "
+"вручную."
+
+#: pwconv.8.xml:115(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+"Команда <command>pwconv</command> использует значения переменных <emphasis "
+"remap=\"I\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</"
+"emphasis> и <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> из файла "
+"<filename>/etc/login.defs</filename> при добавлении новых записей в файл "
+"<filename>/etc/shadow</filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: pwconv.8.xml:124(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+"Программы <command>pwunconv</command> и <command>grpunconv</command> также "
+"выполняют схожий порядок действий. Пароли в главном файле обновляются из "
+"теневого файла. Записи, которые существуют в главном файле, но не существуют "
+"в теневом файле оставляются как есть. По окончании, теневой файл удаляется. "
+"Информация об устаревании пароля не учитывается программой "
+"<command>pwunconv</command>. Конвертируется только возможное."
+
+# type: Content of: <refentry><refsect1><para>
+#: pwconv.8.xml:136(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+"Ошибки в файлах паролей или групп (типа неверных или дублирующихся записей) "
+"могут зациклить программу или произойдут какие-то другие странные вещи. "
+"Перед конвертацией запустите <command>pwck</command> и <command>grpck</"
+"command>, чтобы исправить возможные ошибки."
+
+#: pwconv.8.xml:147(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+
+#: pwconv.8.xml:155(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+
+#: pwconv.8.xml:181(para)
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: pwck.8.xml:40(refentrytitle) pwck.8.xml:45(refname) pwck.8.xml:51(command)
+#: pwck.8.xml:66(command) login.defs.5.xml:380(term)
+msgid "pwck"
+msgstr "pwck"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: pwck.8.xml:46(refpurpose)
+msgid "verify integrity of password files"
+msgstr "проверяет целостность файлов паролей"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#: pwck.8.xml:52(arg) pwck.8.xml:67(arg) pwck.8.xml:171(option)
+msgid "-q"
+msgstr "-q"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#: pwck.8.xml:53(arg) pwck.8.xml:192(option) grpck.8.xml:58(arg)
+#: grpck.8.xml:149(option)
+msgid "-s"
+msgstr "-s"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: pwck.8.xml:56(replaceable) pwck.8.xml:71(replaceable)
+#: passwd.5.xml:34(refentrytitle) passwd.5.xml:39(refname)
+#: passwd.1.xml:44(refentrytitle) passwd.1.xml:49(refname)
+#: passwd.1.xml:55(command) login.defs.5.xml:369(term)
+msgid "passwd"
+msgstr "passwd"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#: pwck.8.xml:68(arg) pwck.8.xml:182(option) login.1.xml:222(option)
+#: grpck.8.xml:49(arg) grpck.8.xml:139(option)
+msgid "-r"
+msgstr "-r"
+
+# type: Content of: <refentry><refsect1><para>
+#: pwck.8.xml:84(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>pwck</command> command verifies the integrity of the system "
+#| "authentication information. All entries in the <filename>/etc/passwd</"
+#| "filename> and <filename>/etc/shadow</filename> are checked to see that "
+#| "the entry has the proper format and valid data in each field. The user is "
+#| "prompted to delete entries that are improperly formatted or which have "
+#| "other uncorrectable errors."
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename> have the proper "
+"format and contain valid data. The user is prompted to delete entries that "
+"are improperly formatted or which have other uncorrectable errors."
+msgstr ""
+"Программа <command>pwck</command> проверяет корректность аутентификационной "
+"информации в системе. Проверяется формат всех записей файлов <filename>/etc/"
+"passwd</filename> и <filename>/etc/shadow</filename> и допустимость данных "
+"каждого поля. В случае обнаружения ошибок пользователю предлагается "
+"подтвердить удаление записей, имеющих неверный формат или восстановление "
+"которых невозможно."
+
+# type: Content of: <refentry><refsect1><para>
+#: pwck.8.xml:93(para) grpck.8.xml:80(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr "Выполняются следующие проверки:"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:96(para) grpck.8.xml:84(para)
+msgid "the correct number of fields"
+msgstr "правильное количество полей"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:99(para)
+#, fuzzy
+#| msgid "a unique user name"
+msgid "a unique and valid user name"
+msgstr "уникальность имени пользователя"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:102(para)
+msgid "a valid user and group identifier"
+msgstr "допустимость идентификатора пользователя и группы"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:105(para)
+msgid "a valid primary group"
+msgstr "допустимость первичной группы"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:108(para)
+msgid "a valid home directory"
+msgstr "допустимость домашнего каталога"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:111(para)
+msgid "a valid login shell"
+msgstr "допустимость регистрационной оболочки"
+
+#: pwck.8.xml:115(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+
+#: pwck.8.xml:120(para)
+msgid "These checks are the following:"
+msgstr ""
+
+#: pwck.8.xml:125(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+
+#: pwck.8.xml:131(para)
+msgid "passwords are specified in the shadowed file"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:134(para)
+#, fuzzy
+#| msgid "the correct number of fields"
+msgid "shadow entries have the correct number of fields"
+msgstr "правильное количество полей"
+
+#: pwck.8.xml:137(para)
+msgid "shadow entries are unique in shadow"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: pwck.8.xml:140(para)
+#, fuzzy
+#| msgid "days before password may be changed"
+msgid "the last password changes are not in the future"
+msgstr "число дней, перед тем как пароль может быть изменён"
+
+# type: Content of: <refentry><refsect1><para>
+#: pwck.8.xml:144(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+"Ошибки в количестве полей и уникальности имён пользователей невосстановимы. "
+"Если запись содержит неверное число полей, пользователя попросят подтвердить "
+"удаление всей записи. Если пользователь ответит отрицательно, дальнейшая "
+"проверка выполняться не будет. При ошибке повторения имени пользователя "
+"также возникает запрос на удаление, но в случае отказа проверка будет "
+"продолжена. Обо всех остальных ошибках выводится предупреждение и "
+"пользователю предлагается запустить команду <command>usermod</command>, "
+"чтобы исправить ошибку."
+
+#: pwck.8.xml:155(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+"Команды, которые работают с файлом <filename>/etc/passwd</filename> не могут "
+"изменять повреждённые или дублирующиеся записи. Как раз в этом случае и "
+"нужно использовать <command>pwck</command> для удаления испорченной записи."
+
+# type: Content of: <refentry><refsect1><para>
+#: pwck.8.xml:165(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr "Параметры команды <command>pwck</command>:"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: pwck.8.xml:174(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+"Сообщать только об ошибках. Предупреждения, которые не требуют от "
+"пользователя никаких действий, показаны не будут."
+
+#: pwck.8.xml:185(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr "Выполнять команду <command>pwck</command> в режиме \"только чтение\"."
+
+#: pwck.8.xml:195(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+"Отсортировать все записи в файлах <filename>/etc/passwd</filename> и "
+"<filename>/etc/shadow</filename> по числовому идентификатору пользователя."
+
+#: pwck.8.xml:203(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename>. The user may select "
+"alternate files with the <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> parameters."
+msgstr ""
+"По умолчанию, команда <command>pwck</command> работает с файлами <filename>/"
+"etc/passwd</filename> и <filename>/etc/shadow</filename>. Пользователь может "
+"указать другие файлы с помощью параметров <emphasis remap=\"I\">passwd</"
+"emphasis> и <emphasis remap=\"I\">shadow</emphasis>"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: pwck.8.xml:270(para)
+msgid "one or more bad password entries"
+msgstr "есть одна или более записей с недопустимыми паролями"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: pwck.8.xml:276(para)
+msgid "can't open password files"
+msgstr "не удалось открыть файл паролей"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: pwck.8.xml:282(para)
+msgid "can't lock password files"
+msgstr "не удалось заблокировать файл паролей"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: pwck.8.xml:288(para)
+msgid "can't update password files"
+msgstr "не удалось изменить файл паролей"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: pwck.8.xml:294(para)
+#, fuzzy
+#| msgid "can't open password files"
+msgid "can't sort password files"
+msgstr "не удалось открыть файл паролей"
+
+# type: Content of: <refentry><refsect1><para>
+#: pwck.8.xml:252(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Команда <command>pwck</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: pwck.8.xml:303(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: porttime.5.xml:34(refentrytitle) porttime.5.xml:39(refname)
+msgid "porttime"
+msgstr "porttime"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: porttime.5.xml:40(refpurpose)
+msgid "port access time file"
+msgstr "файл с временами доступа к портам"
+
+# type: Content of: <refentry><refsect1><para>
+#: porttime.5.xml:45(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+"Файл <emphasis remap=\"I\">porttime</emphasis> содержит список устройств "
+"tty, имена пользователей и разрешённое время входа."
+
+# type: Content of: <refentry><refsect1><para>
+#: porttime.5.xml:50(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+"Каждая запись состоит из трёх полей, разделённых двоеточиями. В первом поле "
+"содержится список устройств tty (перечисленных через запятую) или звёздочка, "
+"указывающая, что все устройства tty попадают под правило этой записи. Во "
+"втором поле содержится список имён пользователей (перечисленных через "
+"запятую) или звёздочка, указывающая, что все имена пользователей попадают "
+"под правило этой записи. В третьем поле содержится список (через запятую) "
+"допустимого времени работы."
+
+#: porttime.5.xml:59(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+"Каждая запись времени доступа состоит из нуля или более дней недели, "
+"обозначенных как <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, "
+"<emphasis>Tu</emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, "
+"<emphasis>Fr</emphasis> и <emphasis>Sa</emphasis>, а также временем начала и "
+"конца, записанного через дефис. Сокращение <emphasis>Wk</emphasis> можно "
+"использовать для обозначения периода с понедельника по пятницу, а "
+"<emphasis>Al</emphasis> обозначает каждый день. Если день не задан, то "
+"предполагается <emphasis>Al</emphasis> в качестве значения по умолчанию."
+
+# type: Content of: <refentry><refsect1><title>
+#: porttime.5.xml:73(title)
+msgid "EXAMPLES"
+msgstr "ПРИМЕРЫ"
+
+#: porttime.5.xml:74(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+"Следующая запись разрешает доступ пользователю <emphasis remap=\"B\">jfh</"
+"emphasis> с любого порта по будням с 9:00 до 17:00."
+
+# type: Content of: <refentry><refsect1><para>
+#: porttime.5.xml:80(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+#: porttime.5.xml:82(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+"Следующие записи разрешают доступ только пользователям <emphasis>root</"
+"emphasis> и <emphasis>oper</emphasis> с <filename>/dev/console</filename> в "
+"любое время. Это показывает, что файл <filename>/etc/porttime</filename> "
+"обрабатывается в порядке появления записей в файле. Любой другой "
+"пользователь попадёт под правило второй записи, которая не разрешает доступ "
+"в любое время."
+
+# type: Content of: <refentry><refsect1><programlisting>
+#: porttime.5.xml:91(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"      console:root,oper:Al0000-2400\n"
+"      console:*:\n"
+"    "
+msgstr ""
+"\n"
+"      console:root,oper:Al0000-2400\n"
+"      console:*:\n"
+"    "
+
+#: porttime.5.xml:96(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+"Следующая запись разрешает доступ пользователю <emphasis>games</emphasis> с "
+"любого порта в нерабочие часы."
+
+# type: Content of: <refentry><refsect1><para>
+#: porttime.5.xml:101(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: porttime.5.xml:108(filename) logoutd.8.xml:67(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: porttime.5.xml:110(para) logoutd.8.xml:69(para)
+msgid "File containing port access."
+msgstr ""
+"содержит разрешённое время работы определённых пользователей с определённых "
+"портов"
+
+#: porttime.5.xml:118(para) login.access.5.xml:109(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: passwd.5.xml:40(refpurpose)
+msgid "the password file"
+msgstr "файл паролей"
+
+# type: Content of: <refentry><refsect1><para>
+#: passwd.5.xml:45(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+"Файл <filename>/etc/passwd</filename> содержит учётные записи пользователей, "
+"по одной в каждой строке. Строка состоит из семи полей, разделённых "
+"двоеточиями (<quote>:</quote>). Поля:"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: passwd.5.xml:56(para)
+msgid "optional encrypted password"
+msgstr "необязательный зашифрованный пароль"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: passwd.5.xml:59(para)
+msgid "numerical user ID"
+msgstr "числовой идентификатор пользователя"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: passwd.5.xml:62(para)
+msgid "numerical group ID"
+msgstr "числовой идентификатор группы"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: passwd.5.xml:65(para)
+msgid "user name or comment field"
+msgstr "ФИО пользователя или поле комментария"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: passwd.5.xml:68(para)
+msgid "user home directory"
+msgstr "домашний каталог пользователя"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: passwd.5.xml:71(para)
+msgid "optional user command interpreter"
+msgstr "необязательный интерпретатор командной строки пользователя"
+
+#: passwd.5.xml:75(para)
+msgid ""
+"The encrypted password field may be blank, in which case no password is "
+"required to authenticate as the specified login name. However, some "
+"applications which read the <filename>/etc/passwd</filename> file may decide "
+"not to permit <emphasis>any</emphasis> access at all if the "
+"<emphasis>password</emphasis> field is blank. If the <emphasis>password</"
+"emphasis> field is a lower-case <quote>x</quote>, then the encrypted "
+"password is actually stored in the <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> file instead; there "
+"<emphasis>must</emphasis> be a corresponding line in the <filename>/etc/"
+"shadow</filename> file, or else the user account is invalid. If the "
+"<emphasis>password</emphasis> field is any other string, then it will be "
+"treated as an encrypted password, as specified by "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Поле с зашифрованным паролем может быть пустым, и тогда для входа под этой "
+"учётной записью пароль не требуется. Однако, некоторые приложения, которые "
+"читают файл <filename>/etc/passwd</filename>, могут решить не позволять "
+"<emphasis>любой</emphasis> доступ, если поле <emphasis>пароль</emphasis> "
+"пустое. Если поле <emphasis>пароль</emphasis> содержит строчную <quote>x</"
+"quote>, то шифрованный пароль хранится в файле "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry> <emphasis>должна</emphasis> быть соответствующая строка в "
+"файле <filename>shadow</filename>, иначе учётная запись считается "
+"недействительной. Если в поле <emphasis>пароль</emphasis> содержится какая-"
+"то другая строка, то она воспринимается как шифрованный пароль, как "
+"определено в <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>."
+
+#: passwd.5.xml:94(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"Поле комментария используется различными системными утилитами, такими как "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: passwd.5.xml:100(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+"В поле домашнего каталога хранится начальный рабочий каталог. Программа "
+"<command>login</command> использует эту информацию для установки значения "
+"переменной среды <envar>$HOME</envar>."
+
+#: passwd.5.xml:106(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+"В поле интерпретатора командной строки хранится название интерпретатора "
+"командной строки пользователя или программы, которая будет запущена первой. "
+"Программа <command>login</command> использует эту информацию для установки "
+"значения переменной среды <envar>$SHELL</envar>. Если это поле пустое, то "
+"используется значение по умолчанию <filename>/bin/sh</filename>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.5.xml:127(para)
+msgid "optional encrypted password file"
+msgstr "необязательный файл с шифрованными паролями"
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: passwd.5.xml:131(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/passwd-"
+msgstr "/etc/passwd"
+
+#: passwd.5.xml:133(para)
+msgid "Backup file for /etc/passwd."
+msgstr ""
+
+#: passwd.5.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: passwd.1.xml:50(refpurpose)
+msgid "change user password"
+msgstr "изменяет пароль пользователя"
+
+# type: Content of: <refentry><refsect1><para>
+#: passwd.1.xml:67(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>passwd</command> command changes passwords for user "
+#| "accounts. A normal user may only change the password for his/her own "
+#| "account, while the superuser may change the password for any account. "
+#| "<command>passwd</command> also changes account information, such as the "
+#| "full name of the user, the user's login shell, or his/her password expiry "
+#| "date and interval."
+msgid ""
+"The <command>passwd</command> command changes passwords for user accounts. A "
+"normal user may only change the password for his/her own account, while the "
+"superuser may change the password for any account. <command>passwd</command> "
+"also changes the account or associated password validity period."
+msgstr ""
+"Программа <command>passwd</command> изменяет пароли пользовательских учётных "
+"записей. Обычный пользователь может изменить пароль только своей учётной "
+"записи, суперпользователь может изменить пароль любой учётной записи. "
+"Программа <command>passwd</command> также изменяет информацию об учётной "
+"записи: полное имя пользователя, регистрационную оболочку командной строки "
+"или дату устаревания пароля и интервал."
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: passwd.1.xml:76(title)
+msgid "Password Changes"
+msgstr "Изменение пароля"
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:77(para)
+msgid ""
+"The user is first prompted for his/her old password, if one is present. This "
+"password is then encrypted and compared against the stored password. The "
+"user has only one chance to enter the correct password. The superuser is "
+"permitted to bypass this step so that forgotten passwords may be changed."
+msgstr ""
+"Сначала пользователя попросят ввести старый пароль, если он был. Этот пароль "
+"зашифровывается и сравнивается с имеющимся. У пользователя есть только одна "
+"попытка ввести правильный пароль. Для суперпользователя этот шаг "
+"пропускается, для того чтобы можно было изменить забытый пароль."
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:85(para)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+"После ввода пароля проверяется информация об устаревании пароля, чтобы "
+"убедиться, что пользователю разрешено изменять пароль в настоящий момент. "
+"Если нет, то <command>passwd</command> не производит изменение пароля и "
+"завершает работу."
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:92(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+"Затем пользователю предложат дважды ввести новый пароль. Значение второго "
+"ввода сравнивается с первым и для изменения пароли из обеих попыток должны "
+"совпасть."
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:98(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+"Затем пароль тестируется на сложность подбора. Согласно общим принципам, "
+"пароли должны быть длиной от 6 до 8 символов и включать один или более "
+"символов каждого типа:"
+
+# type: Content of: <refentry><refsect1><refsect2><itemizedlist><listitem><para>
+#: passwd.1.xml:106(para)
+msgid "lower case alphabetics"
+msgstr "строчные буквы"
+
+# type: Content of: <refentry><refsect1><refsect2><itemizedlist><listitem><para>
+#: passwd.1.xml:109(para)
+msgid "digits 0 thru 9"
+msgstr "цифры от 0 до 9"
+
+# type: Content of: <refentry><refsect1><refsect2><itemizedlist><listitem><para>
+#: passwd.1.xml:112(para)
+msgid "punctuation marks"
+msgstr "знаки пунктуации"
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:116(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+"Не включайте системные символы стирания и удаления. Программа "
+"<command>passwd</command> не примет пароль, который не имеет достаточной "
+"сложности."
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: passwd.1.xml:125(title)
+msgid "Hints for user passwords"
+msgstr "Выбор пароля"
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:126(para)
+#, fuzzy
+#| msgid ""
+#| "The security of a password depends upon the strength of the encryption "
+#| "algorithm and the size of the key space. The <emphasis>UNIX</emphasis> "
+#| "System encryption method is based on the NBS DES algorithm and is very "
+#| "secure. The size of the key space depends upon the randomness of the "
+#| "password which is selected."
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+"Безопасность пароля зависит от стойкости алгоритма шифрования и размера "
+"пространства ключа. В <emphasis>UNIX</emphasis> системах метод шифрования "
+"основан на алгоритме NBS DES и очень безопасен. Размер пространства ключа "
+"зависит от степени произвольности выбранного пароля."
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: passwd.1.xml:135(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+"Компромиссом в безопасности пароля является небрежный выбор пароля и "
+"сложность работы с ним. По этой причине, вы не должны использовать пароль, "
+"который является словом из словаря или который придётся записать из-за его "
+"сложности. Также, пароль не должен быть названием чего-либо, номером вашей "
+"лицензии, днём рождения и домашним адресом. Обо всём этом легко догадаться, "
+"что приведёт к нарушению безопасности системы."
+
+#: passwd.1.xml:144(para)
+msgid ""
+"You can find advices on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: passwd.1.xml:153(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr "Параметры команды <command>passwd</command>:"
+
+#: passwd.1.xml:158(term) faillog.8.xml:71(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: passwd.1.xml:162(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+"Этот параметр можно использовать только вместе с <option>-S</option> для "
+"вывода статуса всех пользователей."
+
+#: passwd.1.xml:169(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:173(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+"Удалить пароль пользователя (сделать его пустым). Это быстрый способ "
+"заблокировать пароль учётной записи. Это делает указанную учётную запись "
+"беспарольной."
+
+#: passwd.1.xml:181(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:185(para)
+msgid ""
+"Immediately expire an account's password. This in effect can force a user to "
+"change his/her password at the user's next login."
+msgstr ""
+"Немедленно сделать пароль устаревшим. В результате это заставит пользователя "
+"изменить пароль при следующем входе в систему."
+
+#: passwd.1.xml:198(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option><replaceable>ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:202(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+"Этот параметр используется для блокировки учётной записи по прошествии "
+"заданного числа дней после устаревания пароля. То есть, если пароль устарел "
+"и прошло более указанных <replaceable>ДНЕЙ</replaceable>, то пользователь "
+"больше не сможет использовать данную учётную запись."
+
+#: passwd.1.xml:211(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:215(para)
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+"Указывает, что изменение пароля нужно выполнить только для устаревших ключей "
+"аутентификации (паролей). Пользователи хотят оставить свои непросроченные "
+"ключи нетронутыми."
+
+#: passwd.1.xml:223(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:227(para)
+#, fuzzy
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+"Заблокировать указанную учётную запись. Этот параметр блокирует учётную "
+"запись изменяя значение пароля на вариант, который не может быть шифрованным "
+"паролем."
+
+#: passwd.1.xml:233(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+
+#: passwd.1.xml:240(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr ""
+
+#: passwd.1.xml:247(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-n</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option><replaceable>МИН_ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:251(para) chage.1.xml:142(para)
+msgid ""
+"Set the minimum number of days between password changes to "
+"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
+"indicates that the user may change his/her password at any time."
+msgstr ""
+"Задать <replaceable>минимальное количество дней</replaceable> между сменой "
+"пароля. Нулевое значение этого поля указывает на то, что пользователь может "
+"менять свой пароль когда захочет."
+
+#: passwd.1.xml:269(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option><replaceable>REPOSITORY</"
+"replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--repository</option><replaceable>РЕПОЗИТОРИЙ</"
+"replaceable>"
+
+#: passwd.1.xml:273(para)
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr "Изменить пароль в <replaceable>РЕПОЗИТОРИИ</replaceable>."
+
+#: passwd.1.xml:279(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:283(para)
+#, fuzzy
+#| msgid ""
+#| "Display account status information. The status information consists of 7 "
+#| "fields. The first field is the user's login name. The second field "
+#| "indicates if the user account is locked (L), has no password (NP), or has "
+#| "a usable password (P). The third field gives the date of the last "
+#| "password change. The next four fields are the minimum age, maximum age, "
+#| "warning period, and inactivity period for the password. These ages are "
+#| "expressed in days."
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+"Показать состояние учётной записи. Информация о состоянии содержит 7 полей. "
+"Первое поле содержит имя учётной записи. Второе поле указывает, "
+"заблокирована ли учётная запись (L), она без пароля (NP) или у неё есть "
+"рабочий пароль (P). Третье поле хранит дату последнего изменения пароля. В "
+"следующих четырёх полях хранятся минимальный срок, максимальный срок, период "
+"выдачи предупреждения и период неактивности пароля. Эти сроки измеряются в "
+"днях."
+
+#: passwd.1.xml:297(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:301(para)
+#, fuzzy
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+"Разблокировать указанную учётную запись. Этот параметр активирует учётную "
+"запись изменяя пароль на прежнее значение (которое было перед использованием "
+"параметра <option>-l</option>)."
+
+#: passwd.1.xml:310(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option><replaceable>ПРЕД_ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:314(para)
+msgid ""
+"Set the number of days of warning before a password change is required. The "
+"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
+"the password expiring that a user will be warned that his/her password is "
+"about to expire."
+msgstr ""
+"Установить число дней выдачи предупреждения, перед тем как потребуется смена "
+"пароля. В параметре <replaceable>ПРЕД_ДНЕЙ</replaceable> указывается число "
+"дней перед тем как пароль устареет, в течении которых пользователю будут "
+"напоминать, что пароль скоро устареет."
+
+#: passwd.1.xml:323(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-x</option>, <option>--maxdays</option><replaceable>МАКС_ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:327(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+"Установить максимальное количество дней, в течении которых пароль остаётся "
+"рабочим. После <replaceable>МАКС_ДНЕЙ</replaceable> пароль нужно изменить."
+
+# type: Content of: <refentry><refsect1><para>
+#: passwd.1.xml:339(para)
+#, fuzzy
+#| msgid ""
+#| "Not all options may be supported. Password complexity checking may vary "
+#| "from site to site. The user is urged to select a password as complex as "
+#| "he or she feels comfortable with. Users may not be able to change their "
+#| "password on a system if NIS is enabled and they are not logged into the "
+#| "NIS server."
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+"Не все параметры могут работать. Сложность пароля проверяется по разному на "
+"разных машинах. Пользователю настоятельно советуется выбирать пароль такой "
+"сложности, чтобы ему нормально работалось. Пользователи не могут изменять "
+"свои пароли в системе, если включён NIS и они не вошли на сервер NIS."
+
+#: passwd.1.xml:344(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+
+#: passwd.1.xml:349(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr ""
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid "<replaceable>DES</replaceable> (default)"
+msgstr ""
+
+#: passwd.1.xml:43(replaceable) newusers.8.xml:43(replaceable)
+#: login.defs.5.xml:43(replaceable) gpasswd.1.xml:43(replaceable)
+#: chpasswd.8.xml:43(replaceable) chgpasswd.8.xml:43(replaceable)
+msgid "MD5"
+msgstr ""
+
+#: passwd.1.xml:46(replaceable) newusers.8.xml:46(replaceable)
+#: login.defs.5.xml:46(replaceable) gpasswd.1.xml:46(replaceable)
+#: chpasswd.8.xml:46(replaceable) chgpasswd.8.xml:46(replaceable)
+msgid "SHA256"
+msgstr ""
+
+#: passwd.1.xml:49(replaceable) newusers.8.xml:49(replaceable)
+#: login.defs.5.xml:49(replaceable) gpasswd.1.xml:49(replaceable)
+#: chpasswd.8.xml:49(replaceable) chgpasswd.8.xml:49(replaceable)
+msgid "SHA512"
+msgstr ""
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid "It can take one of these values: <placeholder-1/>"
+msgstr ""
+
+#: passwd.1.xml:53(para) newusers.8.xml:53(para) login.defs.5.xml:53(para)
+#: gpasswd.1.xml:53(para) chpasswd.8.xml:53(para) chgpasswd.8.xml:53(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+
+#: passwd.1.xml:57(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:57(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:57(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:57(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:57(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:57(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superceded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "PASS_WARN_AGE (число)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "PASS_MAX_DAYS (число)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "PASS_MIN_DAYS (число)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your crypt"
+"() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999999999 range."
+msgstr ""
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: passwd.1.xml:395(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/passwd"
+
+#: passwd.1.xml:397(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:417(para) chage.1.xml:241(para)
+msgid "permission denied"
+msgstr "доступ запрещён"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:423(para)
+msgid "invalid combination of options"
+msgstr "недопустимая комбинация параметров"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:429(para)
+msgid "unexpected failure, nothing done"
+msgstr "неожиданная ошибка при работе, ничего не сделано"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:435(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr ""
+"неожиданная ошибка при работе, отсутствует файл <filename>passwd</filename>"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: passwd.1.xml:441(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr ""
+"файл <filename>passwd</filename> занят другой программой, попробуйте ещё раз"
+
+# type: Content of: <refentry><refsect1><para>
+#: passwd.1.xml:405(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Программа <command>passwd</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: passwd.1.xml:456(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+"\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><command>
+#: nologin.8.xml:34(refentrytitle) nologin.8.xml:39(refname)
+#: nologin.8.xml:45(command)
+msgid "nologin"
+msgstr "nologin"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: nologin.8.xml:40(refpurpose)
+msgid "politely refuse a login"
+msgstr "вежливо отказывает во входе в систему"
+
+# type: Content of: <refentry><refsect1><para>
+#: nologin.8.xml:51(para)
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+"Программа <command>nologin</command> выдаёт сообщение, что учётная запись "
+"недоступна и завершает работу с ненулевым кодом возврата. Она предназначена "
+"для замены оболочки командной строки в поле оболочки у заблокированных "
+"учётных записей."
+
+#: nologin.8.xml:56(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"Чтобы заблокировать все учётные записи посмотрите страницу руководства "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+#: nologin.8.xml:65(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><title>
+#: nologin.8.xml:76(title)
+#, fuzzy
+#| msgid "HYSTORY"
+msgid "HISTORY"
+msgstr "ИСТОРИЯ"
+
+# type: Content of: <refentry><refsect1><para>
+#: nologin.8.xml:77(para)
+#, fuzzy
+#| msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgid "The <command>nologin</command> command appearred in BSD 4.4."
+msgstr "Программа <command>nologin</command> впервые появилась в BSD 4.4."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: newusers.8.xml:50(refentrytitle) newusers.8.xml:55(refname)
+#: newusers.8.xml:61(command) login.defs.5.xml:353(term)
+msgid "newusers"
+msgstr "newusers"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: newusers.8.xml:56(refpurpose)
+msgid "update and create new users in batch"
+msgstr ""
+"обновляет и создаёт новые учётные записи пользователей в пакетном режиме"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: newusers.8.xml:64(replaceable)
+msgid "new_users"
+msgstr "new_users"
+
+# type: Content of: <refentry><refsect1><para>
+#: newusers.8.xml:71(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>newusers</command> command reads a file of user name and "
+#| "clear-text password pairs and uses this information to update a group of "
+#| "existing users or to create new users. Each line is in the same format as "
+#| "the standard password file (see <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the following "
+#| "exceptions:"
+msgid ""
+"The <command>newusers</command> command reads a file of user name and clear-"
+"text password pairs and uses this information to update a group of existing "
+"users or to create new users. Each line is in the same format as the "
+"standard password file (see <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the exceptions "
+"explained below:"
+msgstr ""
+"Программа <command>newusers</command> читает файл с парами имя пользователя/"
+"нешифрованный пароль и использует эту информацию для обновления группы "
+"существующих или создания новых учётных записей. Каждая строка имеет формат "
+"стандартного файла паролей (смотрите <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>) за исключением:"
+
+#: newusers.8.xml:79(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#: newusers.8.xml:84(emphasis)
+#, fuzzy
+#| msgid "group_name"
+msgid "pw_name"
+msgstr "имя_группы"
+
+#: newusers.8.xml:87(para)
+msgid "This is the name of the user."
+msgstr ""
+
+#: newusers.8.xml:90(para)
+msgid ""
+"It can be the name of a new user or the name of an existing user (or an user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: newusers.8.xml:101(emphasis)
+msgid "pw_passwd"
+msgstr "pw_passwd"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: newusers.8.xml:104(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+"Это поле будет зашифровано и использовано как новое значение шифрованного "
+"пароля."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#: newusers.8.xml:112(emphasis)
+#, fuzzy
+#| msgid "pw_gid"
+msgid "pw_uid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:115(para)
+msgid "This field is used to define the UID of the user."
+msgstr ""
+
+#: newusers.8.xml:118(para)
+msgid ""
+"If the field is empty, an new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:122(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr ""
+
+#: newusers.8.xml:126(para)
+msgid ""
+"If this field contains the name of an existing user (or the name of an user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+
+#: newusers.8.xml:132(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#: newusers.8.xml:140(emphasis)
+msgid "pw_gid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:143(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:146(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:152(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+
+#: newusers.8.xml:158(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+
+#: newusers.8.xml:164(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created earlier wbefore by <command>newusers</command>), a new group will be "
+"created with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and Gs the ID for the new group."
+msgstr ""
+
+#: newusers.8.xml:176(emphasis)
+msgid "pw_gecos"
+msgstr ""
+
+#: newusers.8.xml:179(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><emphasis>
+#: newusers.8.xml:186(emphasis)
+msgid "pw_dir"
+msgstr "pw_dir"
+
+#: newusers.8.xml:189(para)
+msgid "This field is used to define the home directory of the user."
+msgstr ""
+
+#: newusers.8.xml:192(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+
+#: newusers.8.xml:197(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+
+#: newusers.8.xml:207(emphasis)
+msgid "pw_shell"
+msgstr ""
+
+#: newusers.8.xml:210(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+
+#: newusers.8.xml:218(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+
+#: newusers.8.xml:224(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: newusers.8.xml:232(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+"Данная команда предназначена для работы в крупных системных средах, где за "
+"один раз заводится несколько учётных записей."
+
+# type: Content of: <refentry><refsect1><para>
+#: newusers.8.xml:240(para)
+#, fuzzy
+#| msgid ""
+#| "The options which apply to the <command>usermod</command> command are:"
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr "Параметры команды <command>usermod</command>:"
+
+#: newusers.8.xml:245(term) chpasswd.8.xml:116(term) chgpasswd.8.xml:95(term)
+#, fuzzy
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: newusers.8.xml:247(para) chpasswd.8.xml:118(para) chgpasswd.8.xml:97(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:248(para) chpasswd.8.xml:122(para) chgpasswd.8.xml:101(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+
+#: newusers.8.xml:270(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are choosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: newusers.8.xml:284(term) chpasswd.8.xml:154(term) chgpasswd.8.xml:129(term)
+#, fuzzy
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:156(para) chgpasswd.8.xml:131(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:289(para) chpasswd.8.xml:159(para) chgpasswd.8.xml:134(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+
+#: newusers.8.xml:293(para) chpasswd.8.xml:163(para) chgpasswd.8.xml:138(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+
+#: newusers.8.xml:297(para) chpasswd.8.xml:167(para) chgpasswd.8.xml:142(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+
+#: newusers.8.xml:301(para) chpasswd.8.xml:171(para) chgpasswd.8.xml:146(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: newusers.8.xml:313(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+"Файл с входными данными должен быть защищён, так как в нём содержатся не "
+"шифрованные пароли."
+
+#: newusers.8.xml:317(para) chpasswd.8.xml:187(para) chgpasswd.8.xml:162(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: newusers.8.xml:390(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/passwd"
+
+#: newusers.8.xml:392(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:400(para)
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: newgrp.1.xml:38(refentrytitle) newgrp.1.xml:43(refname)
+#: newgrp.1.xml:49(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: newgrp.1.xml:44(refpurpose)
+msgid "log in to a new group"
+msgstr "выполняет регистрацию пользователя в новой группе"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: newgrp.1.xml:50(replaceable) grpck.8.xml:51(replaceable)
+#: grpck.8.xml:60(replaceable) groupdel.8.xml:51(replaceable)
+#: groupadd.8.xml:58(replaceable) gpasswd.1.xml:66(replaceable)
+msgid "group"
+msgstr "группа"
+
+# type: Content of: <refentry><refsect1><para>
+#: newgrp.1.xml:56(para)
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+"Программа <command>newgrp</command> используется для изменения ID текущей "
+"группы в работающем сеансе. Если указан необязательный параметр <option>-</"
+"option>, то рабочая среда пользователя будет реиницилизирована, как если бы "
+"пользователь заново вошёл в систему, иначе имеющаяся среда, включая текущий "
+"рабочий каталог, изменены не будут."
+
+#: newgrp.1.xml:64(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+"Программа <command>newgrp</command> изменяет идентификатор текущей реальной "
+"группы на заданный или на группу по умолчанию, указанную в файле <filename>/"
+"etc/passwd</filename>, в случае если имя группы не указано. Программа "
+"<command>newgrp</command> также пытается добавить группу в список групп "
+"пользователя. Если пользователь не является суперпользователем, то его "
+"попросят ввести пароль, даже если он его не имеет (в файле <filename>/etc/"
+"shadow</filename>, если для этого пользователя имеется запись в файле "
+"теневых паролей, иначе используется файл <filename>/etc/passwd</filename>), "
+"а группа имеет, или если пользователь не является членом группы, а группа "
+"имеет пароль. Если пользователь не является членом группы, а у группы пустой "
+"пароль, то пользователю будет отказано в доступе."
+
+# type: Content of: <refentry><refsect1><para>
+#: newgrp.1.xml:78(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+"Если есть запись для этой группы в файле <filename>/etc/gshadow</filename>,"
+"то список членов и пароль этой группы будут взяты из этого файла, иначе "
+"используется запись из файла <filename>/etc/group</filename>."
+
+#: newgrp.1.xml:130(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: logoutd.8.xml:34(refentrytitle) logoutd.8.xml:39(refname)
+#: logoutd.8.xml:45(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: logoutd.8.xml:40(refpurpose)
+msgid "Enforce login time restrictions"
+msgstr "контролирует временные интервалы работы в системе"
+
+#: logoutd.8.xml:51(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+"Программа <command>logoutd</command> контролирует временные ограничения "
+"работы в системе и порты, заданные в файле <filename>/etc/porttime</"
+"filename>. Программа <command>logoutd</command> должен запускаться из "
+"сценария <filename>/etc/rc</filename>. Файл <filename>/var/run/utmp</"
+"filename> периодически сканируется и для каждого имени пользователя "
+"проверяется, разрешено ли данному пользователю работать в настоящий момент "
+"на данном порту. Любая сессия, которая нарушает ограничения, описанные в "
+"файле <filename>/etc/porttime</filename>, будет завершена."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: logoutd.8.xml:73(filename) login.1.xml:319(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: logoutd.8.xml:75(para) login.1.xml:321(para)
+msgid "List of current login sessions."
+msgstr "содержит список работающих сеансов в системе"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:97(refentrytitle) login.defs.5.xml:102(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:103(refpurpose)
+msgid "shadow password suite configuration"
+msgstr "содержит конфигурацию подсистемы теневых паролей"
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:108(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+"Файл <filename>/etc/login.defs</filename> содержит настройки подсистемы "
+"теневых паролей (shadow password suite). Этот файл является обязательным. "
+"Отсутствие данного файла не повлияет на работу системы, но, вероятно, "
+"приведёт к выполнению нежелаемых операций."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:115(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+"Файл представляет собой обычный текстовый файл; каждая строка описывает один "
+"параметр конфигурации. Строки состоят из названия параметра и его значения, "
+"которые разделяются пробельным символом. Пустые строки и комментарии "
+"игнорируются. Комментарии начинаются со знака фунта \"#\", который должен "
+"быть первым непробельным символом в строке."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:123(para)
+#, fuzzy
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+"Значения параметров могут быть четырёх типов: строки, логические значения, "
+"числа и длинные числа. Строки состоят из любых печатных символов. Под "
+"логическими значениями подразумеваются \"yes\" или \"no\". Неопределённый "
+"логический параметр или имеющий значение, отличное от указанных выше, "
+"считается как имеющий значение \"no\". Числа (обычные и длинные) можно "
+"задавать в десятичной, восьмеричной (перед значением ставится \"0\") или "
+"шестнадцатеричной (перед значением ставится \"0x\") системах счисления. "
+"Максимальные значения параметра обычного и длинного числа зависят от "
+"архитектуры компьютера."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:138(para)
+msgid "The following configuration items are provided:"
+msgstr "Возможны следующие параметры конфигурации:"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+#, fuzzy
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"Если равно <emphasis remap=\"I\">yes</emphasis>, то программы <command>chfn</"
+"command> и <command>chsh</command> будут проводить аутентификацию перед тем "
+"как выполнить любые изменения, в случае если команды не запущены "
+"суперпользователем."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "CHFN_RESTRICT (строка)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+#, fuzzy
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+"В этом параметре указывается, какие части поля <emphasis remap=\"I\">gecos</"
+"emphasis> из файла <filename>/etc/passwd</filename> могут изменять обычные "
+"пользователи с помощью программы <command>chfn</command>. Строка может "
+"содержать любую комбинацию букв <emphasis remap=\"I\">f</emphasis> , "
+"<emphasis remap=\"I\">r</emphasis>, <emphasis remap=\"I\">w</emphasis>, "
+"<emphasis remap=\"I\">h</emphasis>, для изменения полного имени "
+"пользователя, номера комнаты, рабочего и домашнего телефона соответственно. "
+"Для совместимости, значение \"yes\" эквивалентно \"rwh\" и \"no\" "
+"эквивалентно \"frwh\". Если ничего не задано, то только суперпользователь "
+"может выполнять любые изменения. Наиболее ограничительная настройка "
+"достигается снятием SUID бита с файла <filename>chfn</filename>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+#, fuzzy
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+"Если равно <emphasis remap=\"I\">yes</emphasis>, то программы <command>chfn</"
+"command> и <command>chsh</command> будут проводить аутентификацию перед тем "
+"как выполнить любые изменения, в случае если команды не запущены "
+"суперпользователем."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "UMASK (число)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+#, fuzzy
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+"Имя группы будет изменено с <emphasis remap=\"I\">ГРУППА</emphasis> на "
+"<emphasis remap=\"I\">НОВАЯ_ГРУППА</emphasis>."
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "PASS_MIN_DAYS (число)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "MAIL_DIR (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "MAIL_DIR (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "MAIL_DIR (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "GID_MAX (число)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "GID_MIN (число)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr ""
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overriden by PAM, since the default pam_unix module "
+"has it's own built in of 3 retries. However, this is a safe fallback in case "
+"you are using an authentication module that does not enforce PAM_MAXTRIES."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "GID_MAX (число)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "MAIL_DIR (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:181(para)
+#, fuzzy
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+"Параметры PASS_MAX_DAYS, PASS_MIN_DAYS и PASS_WARN_AGE используются только "
+"при создании учётной записи. Любые изменения этих параметров не влияют на "
+"уже существующие учётные записи."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (логический)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking of time restrictions specified in /etc/porttime."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "MAIL_DIR (строка)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>TTYPERM</option> (string)"
+msgstr "USERDEL_CMD (строка)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "MAIL_DIR (строка)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term>
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ULIMIT</option> (number)"
+msgstr "UID_MIN (число)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><title>
+#: login.defs.5.xml:209(title)
+#, fuzzy
+msgid "CROSS REFERENCES"
+msgstr "ПЕРЕКРЁСТНАЯ ССЫЛКА"
+
+# type: Content of: <refentry><refsect1><para>
+#: login.defs.5.xml:210(para)
+#, fuzzy
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+"Далее показано какие программы подсистемы теневых паролей используют данные "
+"параметры."
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:218(term) chfn.1.xml:41(refentrytitle)
+#: chfn.1.xml:46(refname) chfn.1.xml:52(command)
+msgid "chfn"
+msgstr "chfn"
+
+#: login.defs.5.xml:220(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><command>
+#: login.defs.5.xml:228(term) chgpasswd.8.xml:42(refentrytitle)
+#: chgpasswd.8.xml:47(refname) chgpasswd.8.xml:53(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:230(para) login.defs.5.xml:260(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><command>
+#: login.defs.5.xml:238(term) chpasswd.8.xml:41(refentrytitle)
+#: chpasswd.8.xml:46(refname) chpasswd.8.xml:52(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:240(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:248(term) chsh.1.xml:40(refentrytitle)
+#: chsh.1.xml:45(refname) chsh.1.xml:51(command)
+msgid "chsh"
+msgstr "chsh"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:250(para)
+#, fuzzy
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr "CHFN_AUTH CHFN_RESTRICT"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:258(term) gpasswd.1.xml:42(refentrytitle)
+#: gpasswd.1.xml:47(refname) gpasswd.1.xml:61(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:268(term) groupadd.8.xml:42(refentrytitle)
+#: groupadd.8.xml:47(refname) groupadd.8.xml:53(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:270(para)
+#, fuzzy
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:277(term) groupdel.8.xml:38(refentrytitle)
+#: groupdel.8.xml:43(refname) groupdel.8.xml:49(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:279(para) login.defs.5.xml:285(para)
+#: login.defs.5.xml:291(para) login.defs.5.xml:298(para)
+#: login.defs.5.xml:304(para) login.defs.5.xml:310(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><command>
+#: login.defs.5.xml:283(term) groupmems.8.xml:38(refentrytitle)
+#: groupmems.8.xml:43(refname) groupmems.8.xml:49(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:289(term) groupmod.8.xml:38(refentrytitle)
+#: groupmod.8.xml:43(refname) groupmod.8.xml:49(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:296(term) grpck.8.xml:38(refentrytitle)
+#: grpck.8.xml:43(refname) grpck.8.xml:49(command) grpck.8.xml:58(command)
+msgid "grpck"
+msgstr "grpck"
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:316(term) login.1.xml:70(refentrytitle)
+#: login.1.xml:75(refname) login.1.xml:81(command) login.1.xml:89(command)
+#: login.1.xml:96(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:318(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS "
+"LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR "
+"MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> "
+"TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</"
+"phrase> USERGROUPS_ENAB"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:345(term)
+#, fuzzy
+#| msgid "newgrp"
+msgid "newgrp / sg"
+msgstr "newgrp"
+
+#: login.defs.5.xml:347(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:355(para)
+#, fuzzy
+msgid ""
+"ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+"SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:371(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:382(para) login.defs.5.xml:390(para)
+msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+
+#: login.defs.5.xml:397(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: login.defs.5.xml:412(term)
+#, fuzzy
+msgid "sulogin"
+msgstr "login"
+
+#: login.defs.5.xml:414(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.defs.5.xml:423(para)
+#, fuzzy
+msgid ""
+"CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+"PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN "
+"UID_MAX UID_MIN UMASK"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:436(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:445(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:456(para)
+#, fuzzy
+#| msgid ""
+#| "Much of the functionality that used to be provided by the shadow password "
+#| "suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> "
+#| "is no longer used by programs such as: "
+#| "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>. Please refer to the corresponding PAM configuration files "
+#| "instead."
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+"Большинство функций подсистемы теневых паролей теперь реализовано через PAM. "
+"Поэтому, файл <filename>/etc/login.defs</filename> больше не используется "
+"программами: <citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>. Настройку данных программ следует выполнять в файлах "
+"конфигурации PAM."
+
+#: login.defs.5.xml:472(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: login.access.5.xml:35(refentrytitle) login.access.5.xml:40(refname)
+msgid "login.access"
+msgstr "login.access"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: login.access.5.xml:41(refpurpose)
+msgid "login access control table"
+msgstr "файл контроля доступа в систему"
+
+# type: Content of: <refentry><refsect1><para>
+#: login.access.5.xml:46(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+"В файле <emphasis remap=\"I\">login.access</emphasis> определяются "
+"комбинации (пользователь, хост) и/или (пользователь, терминал), которым "
+"будет разрешён или запрещён вход в систему."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.access.5.xml:52(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+"Когда кто-то пытается войти в систему выполняется сканирование файла "
+"<emphasis remap=\"I\">login.access</emphasis> в поисках первой совпадающей "
+"записи (пользователь, хост), или в случае не сетевого входа, первой "
+"совпадающей записи (пользователь, терминал). Из найденной записи выбирается "
+"поле прав доступа, по которому определяется разрешать ли данной учётной "
+"записи вход в систему или нет."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.access.5.xml:60(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+"Каждая строка таблицы контроля доступа в систему состоит из трёх полей "
+"разделённых символом \":\" и выглядит так:"
+
+#: login.access.5.xml:65(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">права_доступа</emphasis>:<emphasis remap=\"I"
+"\">пользователи</emphasis>:<emphasis remap=\"I\">источники</emphasis>"
+
+#: login.access.5.xml:69(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+"Первое поле должно содержать символ \"<emphasis>+</emphasis>\" (доступ "
+"разрешён) или \"<emphasis>-</emphasis>\" (доступ запрещён). Второе поле "
+"должно содержать имя одной или более учётных записей, имена групп или "
+"<emphasis>ALL</emphasis> (всегда совпадает). Третье поле должно содержать "
+"одно или нескольких имён терминалов (для доступа не из сети), имена хостов, "
+"доменных имён (начинаются с \"<literal>.</literal>\"), адреса хостов, адреса "
+"подсетей (заканчиваются на \"<literal>.</literal>\"), <emphasis>ALL</"
+"emphasis> (всегда совпадает) или <emphasis>LOCAL</emphasis> (любая строка, "
+"не содержащая символа \"<literal>.</literal>\"). Если используется NIS, то "
+"также можно использовать @имя_сетевой_группы в шаблонах хостов или именах "
+"пользователей."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.access.5.xml:83(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+"Оператор <emphasis>EXCEPT</emphasis> помогает в написании компактных правил."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.access.5.xml:88(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+"Поиск в файле групп производится только когда имя не совпадает с "
+"регистрирующимся пользователем. Рассматриваются группы только с явно "
+"прописанными в них пользователями: программа не принимает во внимание "
+"значение первичной группы пользователя."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: login.1.xml:76(refpurpose)
+msgid "begin session on the system"
+msgstr "начинает сеанс в системе"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#: login.1.xml:82(arg) login.1.xml:90(arg) login.1.xml:97(arg)
+#: login.1.xml:214(option) groupmems.8.xml:54(arg)
+msgid "-p"
+msgstr "-p"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: login.1.xml:83(replaceable) login.1.xml:91(replaceable)
+#: login.1.xml:98(replaceable)
+msgid "host"
+msgstr "хост"
+
+#: login.1.xml:83(arg) login.1.xml:91(arg) chfn.1.xml:56(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: login.1.xml:86(replaceable)
+msgid "ENV=VAR"
+msgstr "ПЕРЕМЕННАЯ_СРЕДЫ=ЗНАЧЕНИЕ"
+
+# type: Content of: <refentry><refsect1><para><option>
+#: login.1.xml:92(arg) login.1.xml:192(option) expiry.1.xml:54(arg)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:98(arg) chfn.1.xml:54(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: login.1.xml:104(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>login</command> program is used to establish a new session "
+#| "with the system. It is normally invoked automatically by responding to "
+#| "the <emphasis remap=\"I\">login:</emphasis> prompt on the user's "
+#| "terminal. <command>login</command> may be special to the shell and may "
+#| "not be invoked as a sub-process. Typically, <command>login</command> is "
+#| "treated by the shell as <emphasis remap=\"B\">exec login</emphasis> which "
+#| "causes the user to exit from the current shell. Attempting to execute "
+#| "<command>login</command> from any shell but the login shell will produce "
+#| "an error message."
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+"Программа <command>login</command> используется для запуска нового сеанса в "
+"системе. Как правило, эта программа вызывается автоматически и выводит "
+"приглашение <emphasis remap=\"I\">login:</emphasis> на терминал "
+"пользователя. Программа <command>login</command> может восприниматься "
+"оболочкой командной строки не как простая программа и вызываться не как "
+"подпроцесс. Обычно, оболочка запускает <command>login</command> посредством "
+"вызова <emphasis remap=\"B\">exec login</emphasis>, что приводит к "
+"завершению работы пользователя в текущей оболочке. Попытка запустить "
+"<command>login</command> из любой оболочки, отличной от регистрационной, "
+"приводит к сообщению об ошибке."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.1.xml:118(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+"В какой-то момент пользователя попросят ввести свой пароль. Чтобы "
+"недопустить раскрытия, символы при вводе пароля не отображаются. Разрешено "
+"очень маленькое число попыток ввода неправильного пароля, перед тем как "
+"<command>login</command> закончит работу и прервёт подключение."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.1.xml:125(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+"Если включён механизм устаревания пароля учётной записи, то перед входом в "
+"систему может потребоваться смена пароля. Для этого нужно ввести старый "
+"пароль и новый пароль. Подробней об этом написано в "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: login.1.xml:134(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+"После успешного входа в систему, будут показаны сообщения от системы и о "
+"наличии почты. Можно отключить вывод файла системных сообщений из файла "
+"<filename>/etc/motd</filename>, создав в домашнем каталоге файл нулевой "
+"длины с именем <filename>.hushlogin</filename>. Сообщение о наличии почты "
+"может быть одним из: \"<emphasis>У вас есть новая почта.</emphasis>\", "
+"\"<emphasis>У вас есть почта.</emphasis>\" или \"<emphasis>У вас нет почты.</"
+"emphasis>\", в зависимости от наполненности почтового ящика."
+
+#: login.1.xml:145(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+"Значения идентификатора учётной записи и группы будет взято из файла "
+"<filename>/etc/passwd</filename>. Значения переменных <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar> и "
+"<envar>$MAIL</envar> устанавливаются согласно соответствующим полям учётной "
+"записи пользователя. Также могут быть установлены значения ulimit, umask и "
+"nice из поля GECOS."
+
+#: login.1.xml:154(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+"В некоторых системах переменной среды <envar>$TERM</envar> будет присвоен "
+"тип терминала линии tty, согласно данным из файла <filename>/etc/ttytype</"
+"filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.1.xml:160(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+"Также может быть выполнен сценарий инициализации пользовательского "
+"интерпретатора команд. Подробней об этой функции смотрите соответствующую "
+"страницу руководства."
+
+#: login.1.xml:172(para) login.1.xml:248(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+"Программа <command>login</command> НЕ удаляет записи о пользователях из "
+"файла utmp. Эта задача программ <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> и "
+"<citerefentry><refentrytitle>init</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> удалять записи о владельце терминального сеанса. Если "
+"<command>login</command> запускается из командной строки без <command>exec</"
+"command>, то пользователь продолжает находиться в системе даже после "
+"завершения работы в \"порождённом сеансе\"."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:195(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr "Не выполнять аутентификацию, пользователь уже прошёл проверку."
+
+#: login.1.xml:198(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#: login.1.xml:206(option)
+msgid "-h"
+msgstr "-h"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:209(para)
+msgid "Name of the remote host for this login."
+msgstr "Имя удалённого хоста, на который нужно войти."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:217(para)
+msgid "Preserve environment."
+msgstr "Сохранить среду."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:225(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr "Выполнить протокол autologin для rlogin."
+
+#: login.1.xml:230(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+"Параметры <option>-r</option>, <option>-h</option> и <option>-f</option> "
+"используются только если <command>login</command> запускается "
+"суперпользователем."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.1.xml:239(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Данная версия <command>login</command> может быть собрана с разными "
+"параметрами и только некоторые из них смогут быть использованы на любой "
+"машине."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.1.xml:244(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr "Расположение файлов может отличаться на разных системах."
+
+# type: Content of: <refentry><refsect1><para>
+#: login.1.xml:260(para)
+#, fuzzy
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+"Как и для любой программы, запуск <command>login</command> может быть "
+"подделан. Если неуполномоченные пользователи имеют физический доступ к "
+"машине, то атакующий может использовать это для получения пароля следующего "
+"человека, который будет работать за машиной. Под Linux пользователи могут "
+"использовать механизм SAK для установления достоверного пути и таким образом "
+"предотвращения атаки."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: login.1.xml:325(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:327(para)
+msgid "List of previous login sessions."
+msgstr "содержит список завершённых сеансов работы с системой"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: login.1.xml:343(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:345(para)
+msgid "System message of the day file."
+msgstr "содержит системные сообщения за день"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: login.1.xml:349(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:351(para)
+msgid "Prevent non-root users from logging in."
+msgstr ""
+"при существовании файла блокируется доступ в систему обычным пользователям"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: login.1.xml:355(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:357(para)
+msgid "List of terminal types."
+msgstr "содержит список типов терминалов"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: login.1.xml:361(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: login.1.xml:363(para)
+msgid "Suppress printing of system messages."
+msgstr ""
+"при существовании файла системные сообщения при входе в систему не выводятся"
+
+#: login.1.xml:377(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: limits.5.xml:35(refentrytitle) limits.5.xml:40(refname)
+msgid "limits"
+msgstr "limits"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: limits.5.xml:41(refpurpose)
+msgid "resource limits definition"
+msgstr "файл контроля ресурсов"
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:47(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+"В файле <emphasis remap=\"I\">limits</emphasis> (по умолчанию <filename>/etc/"
+"limits</filename> или определяется значением LIMITS_FILE в файле "
+"<filename>config.h</filename>) описываются ограничения, которые можно "
+"изменять. Этот файл должен принадлежать суперпользователю и право на чтение "
+"должно быть только у суперпользователя."
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:55(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+"По умолчанию учётная запись 'root' ничем не ограничена. Фактически, никак "
+"нельзя установить ограничения с помощью этой процедуры на учётные записи, "
+"имеющие права суперпользователя (учётные записи с UID равным 0)."
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:61(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr "Каждая строка описывает ограничение для одного пользователя имеет вид:"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: limits.5.xml:64(emphasis)
+msgid "user LIMITS_STRING"
+msgstr "user СТРОКА_ОГРАНИЧЕНИЙ"
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:67(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+"<emphasis>СТРОКА_ОГРАНИЧЕНИЙ</emphasis> &mdash; это строка, в которой "
+"указаны сразу несколько ограничений. Каждое ограничение состоит из "
+"буквенного идентификатора и числового значения."
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:73(para)
+msgid "The valid identifiers are:"
+msgstr "Допустимые идентификаторы:"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:76(para)
+msgid "A: max address space (KB)"
+msgstr "A: максимальное адресное пространство (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:77(para)
+msgid "C: max core file size (KB)"
+msgstr "C: максимальный размер файла core (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:78(para)
+msgid "D: max data size (KB)"
+msgstr "D: максимальный размер данных (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:79(para)
+msgid "F: maximum filesize (KB)"
+msgstr "F: максимальный размер файла (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:80(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr "M: максимальное синхронизируемое адресное пространство памяти (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:81(para)
+msgid "N: max number of open files"
+msgstr "N: максимальное число открытых файлов"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:82(para)
+msgid "R: max resident set size (KB)"
+msgstr "R: максимальный размер резидентного сегмента (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:83(para)
+msgid "S: max stack size (KB)"
+msgstr "S: максимальный размер стека (КБ)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:84(para)
+msgid "T: max CPU time (MIN)"
+msgstr "T: максимальное время использования процессора (минут)"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:85(para)
+msgid "U: max number of processes"
+msgstr "U: максимальное число процессов"
+
+#: limits.5.xml:86(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"K: маска создаваемых файлов, устанавливается с помощью вызова "
+"<citerefentry><refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: limits.5.xml:91(para)
+msgid "L: max number of logins for this user"
+msgstr ""
+"L: максимальное число возможных регистраций в системе этого пользователя"
+
+#: limits.5.xml:92(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"P: приоритет процесса, устанавливается с помощью вызова "
+"<citerefentry><refentrytitle>setpriority</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: limits.5.xml:97(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+
+#: limits.5.xml:99(para)
+msgid "O: max real time priority"
+msgstr ""
+
+#: limits.5.xml:102(para)
+#, fuzzy
+#| msgid ""
+#| "For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+#| "<emphasis>LIMITS_STRING </emphasis>. For reading convenience, the "
+#| "following entries are equivalent:"
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+"Например, значение <emphasis remap=\"I\">L2D2048N5</emphasis> допустимо для "
+"<emphasis>СТРОКИ_ОГРАНИЧЕНИЙ</emphasis>. Для удобства чтения, следующие "
+"записи эквивалентны:"
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:108(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"      username L2D2048N5\n"
+"      username L2 D2048 N5\n"
+"    "
+msgstr ""
+"\n"
+"      username L2D2048N5\n"
+"      username L2 D2048 N5\n"
+"    "
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:113(para)
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. A "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+"Заметим, что после <emphasis remap=\"I\">username</emphasis> оставшаяся "
+"часть строки считается строкой ограничений, поэтому комментарии недопустимы. "
+"Неправильная строка ограничений будет отброшена (не учтена) программой "
+"<command>login</command>."
+
+#: limits.5.xml:120(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+"Запись по умолчанию выглядит как username\"<emphasis>*</emphasis>\". Если у "
+"вас есть несколько записей <emphasis remap=\"I\">по умолчанию</emphasis> в "
+"файле <emphasis>LIMITS_FILE</emphasis>, то будет использоваться последняя."
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:127(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+"Чтобы полностью снять ограничения с пользователя, используется одиночное "
+"тире \"<emphasis>-</emphasis> \"."
+
+# type: Content of: <refentry><refsect1><para>
+#: limits.5.xml:132(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+"Также заметьте, что все настройки ограничений делаются ДЛЯ КОНКРЕТНОЙ "
+"УЧЁТНОЙ ЗАПИСИ. Они не являются глобальными и не постоянны. Возможно "
+"глобальные ограничения и появятся, но пока это только в планах ;)"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: limits.5.xml:143(filename)
+msgid "/etc/limits"
+msgstr "/etc/limits"
+
+#: limits.5.xml:151(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: lastlog.8.xml:35(refentrytitle) lastlog.8.xml:40(refname)
+#: lastlog.8.xml:46(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: lastlog.8.xml:41(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+"выводит отчёт о последней регистрации в системе всех или указанного "
+"пользователя"
+
+#: lastlog.8.xml:55(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+"Программа <command>lastlog</command> упорядочивает и выводит содержимое "
+"файла <filename>/var/log/lastlog</filename>, который содержит даты "
+"последнего входа пользователей систему. Выводятся <emphasis>имя "
+"пользователя</emphasis>, <emphasis>порт</emphasis> и <emphasis>дата "
+"последнего входа в систему</emphasis>. По умолчанию (вызов без параметров) "
+"показываются записи файла lastlog, отсортированные согласно расположению "
+"пользователей в файле <filename>/etc/passwd</filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: lastlog.8.xml:67(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr "Параметры команды <command>lastlog</command>:"
+
+#: lastlog.8.xml:72(term)
+msgid ""
+"<option>-b</option>, <option>--before</option><replaceable>DAYS</replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--before</option><replaceable>ДНЕЙ</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: lastlog.8.xml:76(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+"Показать записи lastlog за последние <emphasis remap=\"I\">ДНЕЙ</emphasis>."
+
+#: lastlog.8.xml:90(term) faillog.8.xml:140(term)
+msgid ""
+"<option>-t</option>, <option>--time</option><replaceable>DAYS</replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>ДНЕЙ</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: lastlog.8.xml:95(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+"Показать записи lastlog новее чем <emphasis remap=\"I\">ДНЕЙ</emphasis>."
+
+#: lastlog.8.xml:102(term) faillog.8.xml:151(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option><replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-u</option>, <option>--user</option><replaceable>LOGIN</replaceable>|"
+"<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option><replaceable>КЛЮЧ</"
+"replaceable>=<replaceable>ЗНАЧЕНИЕ</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: lastlog.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "Print the lastlog record for user with specified <emphasis remap=\"I"
+#| "\">LOGIN</emphasis> only."
+msgid "Print the lastlog record of the specified user(s)."
+msgstr ""
+"Показать запись lastlog только для указанного пользователя с emphasis remap="
+"\"I\">ИМЕНЕМ</emphasis>."
+
+#: lastlog.8.xml:110(para) faillog.8.xml:161(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+
+#: lastlog.8.xml:122(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+"Если пользователь никогда не регистрировался в системе, то будет показано "
+"сообщение <emphasis>** Никогда не входил в систему**</emphasis> вместо "
+"названия порта и даты."
+
+#: lastlog.8.xml:127(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><title>
+#: lastlog.8.xml:135(title) groups.1.xml:65(title) chsh.1.xml:106(title)
+#: chage.1.xml:193(title)
+msgid "NOTE"
+msgstr "ЗАМЕЧАНИЕ"
+
+# type: Content of: <refentry><refsect1><para>
+#: lastlog.8.xml:136(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+"Файл <filename>lastlog</filename> содержит информацию о последней "
+"регистрации в системе каждого пользователя. Вы не должны применять к нему "
+"ротацию журнальных файлов. Этот файл является разреженным, поэтому его "
+"размер на диске гораздо меньше, чем показывает команда \"<command>ls -l</"
+"command>\" (которая может показывать, что это очень большой файл, если "
+"значения идентификаторов пользователей в системе достигают больших "
+"значений). Чтобы увидеть реальный размер введите \"<command>ls -s</command>"
+"\"."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: lastlog.8.xml:150(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: lastlog.8.xml:152(para)
+msgid "Database times of previous user logins."
+msgstr "содержит список завершённых сеансов работы с системой"
+
+# type: Content of: <refentry><refsect1><para>
+#: lastlog.8.xml:160(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+"Большие промежутки в значениях идентификаторов пользователей приводят к "
+"тому, что программа некоторое время ничего не выводит на экран (то есть, "
+"если в базе данных lastlog нет пользователей с идентификаторами с 170 по "
+"800, то во время обработки UID с 171 по 799 программа кажется повисшей)."
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: gshadow.5.xml:33(refentrytitle) gshadow.5.xml:38(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: gshadow.5.xml:39(refpurpose)
+msgid "shadowed group file"
+msgstr "файл с защищаемой информацией о группах"
+
+# type: Content of: <refentry><refsect1><para>
+#: gshadow.5.xml:44(para)
+#, fuzzy
+#| msgid ""
+#| "<filename>/etc/gshadow</filename> contains the shadowed information for "
+#| "group accounts. It contains lines with the following colon-separated "
+#| "fields:"
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+"Файл <filename>/etc/gshadow</filename> содержит защищаемую информацию о "
+"группах. Он состоит из строк с полями, отделёнными друг от друга двоеточием. "
+"Поля:"
+
+#: gshadow.5.xml:54(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: gshadow.5.xml:60(emphasis)
+msgid "group name"
+msgstr "имя группы"
+
+#: gshadow.5.xml:62(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr ""
+
+#: gshadow.5.xml:75(para)
+#, fuzzy
+#| msgid ""
+#| "If the password field contains some string that is not valid result of "
+#| "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#| "manvolnum></citerefentry>, for instance ! or *, the user will not be able "
+#| "to use a unix password to log in, subject to "
+#| "<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+#| "citerefentry>."
+msgid ""
+"If the password field contains some string that is not a valid result of "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, for instance ! or *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+"Если поле пароля содержит строку, которая не удовлетворяет требованиям "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, например содержит ! или *, то пользователь не сможет "
+"использовать этот unix пароль для регистрации с учётом настроек "
+"<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+"citerefentry>."
+
+#: gshadow.5.xml:82(para)
+#, fuzzy
+#| msgid ""
+#| "The comment field is used by various system utilities, such as "
+#| "<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"The password is used when an user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"Поле комментария используется различными системными утилитами, такими как "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: gshadow.5.xml:88(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: gshadow.5.xml:98(para)
+#, fuzzy
+#| msgid ""
+#| "This information supersedes any password present in <filename>/etc/group</"
+#| "filename>."
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+"Данная информация заменяет любой пароль файла <filename>/etc/group</"
+"filename>."
+
+#: gshadow.5.xml:106(emphasis)
+msgid "administrators"
+msgstr ""
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: gshadow.5.xml:108(para) gshadow.5.xml:124(para)
+#, fuzzy
+#| msgid "comma-separated list of group members"
+msgid "It must be a comma-separated list of user names."
+msgstr "список членов группы, перечисленных через запятую"
+
+#: gshadow.5.xml:111(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr ""
+
+#: gshadow.5.xml:115(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+
+#: gshadow.5.xml:122(emphasis)
+msgid "members"
+msgstr ""
+
+#: gshadow.5.xml:127(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: gshadow.5.xml:131(para)
+#, fuzzy
+#| msgid ""
+#| "This information supersedes any password present in <filename>/etc/group</"
+#| "filename>."
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+"Данная информация заменяет любой пароль файла <filename>/etc/group</"
+"filename>."
+
+#: gshadow.5.xml:160(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: grpck.8.xml:44(refpurpose)
+msgid "verify integrity of group files"
+msgstr "проверяет корректность файлов групп"
+
+# type: Content of: <refentry><refsect1><para>
+#: grpck.8.xml:70(para)
+#, fuzzy
+#| msgid ""
+#| "The <command>grpck</command> command verifies the integrity of the system "
+#| "authentication information. All entries in the <filename>/etc/group</"
+#| "filename> and <filename>/etc/gshadow</filename> are checked to see that "
+#| "the entry has the proper format and valid data in each field. The user is "
+#| "prompted to delete entries that are improperly formatted or which have "
+#| "other uncorrectable errors."
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+"Программа <command>grpck</command> проверяет корректность аутентификационной "
+"информации в системе. Проверяется формат всех записей файлов <filename>/etc/"
+"group</filename> и <filename>/etc/gshadow</filename>, а также допустимость "
+"данных каждого поля. В случае обнаружения ошибок пользователю предлагается "
+"подтвердить удаление записей, имеющих неверный формат или восстановление "
+"которых невозможно."
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: grpck.8.xml:87(para)
+#, fuzzy
+#| msgid "a unique group name"
+msgid "a unique and valid group name"
+msgstr "уникальность имени группы"
+
+#: grpck.8.xml:90(para)
+#, fuzzy
+#| msgid ""
+#| "Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/"
+#| "shadow</filename> by UID."
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+"Отсортировать все записи в файлах <filename>/etc/passwd</filename> и "
+"<filename>/etc/shadow</filename> по числовому идентификатору пользователя."
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: grpck.8.xml:97(para)
+#, fuzzy
+#| msgid "a valid list of members and administrators"
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr "корректный список членов и администраторов"
+
+#: grpck.8.xml:103(para)
+#, fuzzy
+#| msgid ""
+#| "These four programs all operate on the normal and shadow password and "
+#| "group files: <filename>/etc/passwd</filename>, <filename>/etc/group</"
+#| "filename>, <filename>/etc/shadow</filename>, and <filename>/etc/gshadow</"
+#| "filename>."
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+"Эти четыре программы работают с файлами обычных или теневых паролей "
+"пользователей и групп: <filename>/etc/passwd</filename>, <filename>/etc/"
+"group</filename>, <filename>/etc/shadow</filename> и <filename>/etc/gshadow</"
+"filename>."
+
+# type: Content of: <refentry><refsect1><para>
+#: grpck.8.xml:111(para)
+#, fuzzy
+#| msgid ""
+#| "The checks for correct number of fields and unique group name are fatal. "
+#| "If the entry has the wrong number of fields, the user will be prompted to "
+#| "delete the entire line. If the user does not answer affirmatively, all "
+#| "further checks are bypassed. An entry with a duplicated group name is "
+#| "prompted for deletion, but the remaining checks will still be made. All "
+#| "other errors are warnings and the user is encouraged to run the "
+#| "<command>groupmod</command> command to correct the error."
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+"Ошибки в количестве полей и уникальности имён групп невосстановимы. Если "
+"запись содержит неверное число полей, пользователя попросят подтвердить "
+"удаление всей записи. Если пользователь ответит отрицательно, дальнейшая "
+"проверка выполняться не будет. При ошибке повторения имени группы также "
+"возникает запрос на удаление, но в случае отказа проверка будет продолжена. "
+"Обо всех остальных ошибках выводится предупреждение и пользователю "
+"предлагается запустить команду <command>groupmod</command> чтобы исправить "
+"ошибку."
+
+#: grpck.8.xml:122(para)
+#, fuzzy
+#| msgid ""
+#| "The commands which operate on the <filename>/etc/group</filename> file "
+#| "are not able to alter corrupted or duplicated entries. <command>grpck</"
+#| "command> should be used in those circumstances to remove the offending "
+#| "entry."
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+"Команды, которые работают с файлом <filename>/etc/group</filename> не "
+"способны изменить повреждённые или дублирующиеся записи. Как раз в этом "
+"случае и нужно использовать <command>grpck</command> для удаления "
+"испорченной записи."
+
+# type: Content of: <refentry><refsect1><para>
+#: grpck.8.xml:134(para)
+#, fuzzy
+#| msgid "The options which apply to the <command>pwck</command> command are:"
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr "Параметры команды <command>pwck</command>:"
+
+#: grpck.8.xml:141(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+
+#: grpck.8.xml:151(para)
+#, fuzzy
+#| msgid ""
+#| "Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/"
+#| "shadow</filename> by UID."
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+"Отсортировать все записи в файлах <filename>/etc/passwd</filename> и "
+"<filename>/etc/shadow</filename> по числовому идентификатору пользователя."
+
+#: grpck.8.xml:160(para)
+#, fuzzy
+#| msgid ""
+#| "By default, <command>pwck</command> operates on the files <filename>/etc/"
+#| "passwd</filename> and <filename>/etc/shadow</filename>. The user may "
+#| "select alternate files with the <emphasis remap=\"I\">passwd</emphasis> "
+#| "and <emphasis remap=\"I\">shadow</emphasis> parameters."
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\"> and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+"По умолчанию, команда <command>pwck</command> работает с файлами <filename>/"
+"etc/passwd</filename> и <filename>/etc/shadow</filename>. Пользователь может "
+"указать другие файлы с помощью параметров <emphasis remap=\"I\">passwd</"
+"emphasis> и <emphasis remap=\"I\">shadow</emphasis>"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: grpck.8.xml:228(para)
+msgid "one or more bad group entries"
+msgstr "есть одна или более неправильных записей групп"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: grpck.8.xml:234(para)
+msgid "can't open group files"
+msgstr "не удалось открыть файл групп"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: grpck.8.xml:240(para)
+msgid "can't lock group files"
+msgstr "не удалось заблокировать файл групп"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: grpck.8.xml:246(para)
+msgid "can't update group files"
+msgstr "не удалось изменить файл групп"
+
+# type: Content of: <refentry><refsect1><para>
+#: grpck.8.xml:210(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Команда <command>grpck</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: grpck.8.xml:255(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gshadow</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: groups.1.xml:34(refentrytitle) groups.1.xml:39(refname)
+#: groups.1.xml:45(command)
+msgid "groups"
+msgstr "groups"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: groups.1.xml:40(refpurpose)
+msgid "display current group names"
+msgstr "показывает имена групп запустившего программу пользователя"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: groups.1.xml:47(replaceable) chfn.1.xml:58(replaceable)
+msgid "user"
+msgstr "имя"
+
+#: groups.1.xml:54(para)
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+"Команда <command>groups</command> показывает имена групп запустившего "
+"программу пользователя или их числовые идентификаторы (ID). Если для номера "
+"группы нет соответствующей записи в файле <filename>/etc/group</filename>, "
+"то отображается числовое значение. При указании необязательного параметра "
+"<emphasis remap=\"I\">имя</emphasis> выводятся группы для учётной записи с "
+"указанным <emphasis remap=\"I\">именем</emphasis>."
+
+#: groups.1.xml:66(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change their current "
+"real and effective group ID."
+msgstr ""
+"В системах, не имеющих поддержки одновременного членства в группах, "
+"используется информация из файла <filename>/etc/group</filename>. Для смены "
+"своей текущей реальной или эффективной группы пользователь должен "
+"использовать команды <command>newgrp</command> или <command>sg</command>."
+
+#: groups.1.xml:88(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: groupmod.8.xml:44(refpurpose)
+msgid "modify a group definition on the system"
+msgstr "изменяет определение группы в системе"
+
+#: groupmod.8.xml:53(replaceable)
+msgid "GROUP"
+msgstr "ГРУППА"
+
+#: groupmod.8.xml:59(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+"Команда <command>groupmod</command> изменяет определение указанной "
+"<replaceable>ГРУППЫ</replaceable>, изменяя соответствующую запись в базе "
+"данных групп."
+
+#: groupmod.8.xml:68(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr "Параметры команды <command>groupmod</command>:"
+
+#: groupmod.8.xml:74(term) groupadd.8.xml:94(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+
+#: groupmod.8.xml:78(para)
+#, fuzzy
+#| msgid ""
+#| "The name of the group will be changed from <replaceable>GROUP</"
+#| "replaceable> to <replaceable>NEW_GROUP</replaceable> name."
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+"Имя группы будет изменено с <emphasis remap=\"I\">ГРУППА</emphasis> на "
+"<emphasis remap=\"I\">НОВАЯ_ГРУППА</emphasis>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmod.8.xml:82(para)
+#, fuzzy
+#| msgid ""
+#| "The numerical value of the user's ID. This value must be unique, unless "
+#| "the <option>-o</option> option is used. The value must be non-negative. "
+#| "The default is to use the smallest ID value greater than 999 and greater "
+#| "than every other user. Values between 0 and 999 are typically reserved "
+#| "for system accounts."
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used. Values between 0 and 999 are typically reserved for system groups."
+msgstr ""
+"Числовое значение идентификатора пользователя (ID). Оно должно быть "
+"уникальным, если не используется параметр <option>-o</option>. Значение "
+"должно быть неотрицательным. По умолчанию используется наименьшее значение "
+"ID большее 999 и большее любого другого значения пользователя. Значения от 0 "
+"до 999 обычно зарезервированы для системных учётных записей."
+
+#: groupmod.8.xml:89(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+
+#: groupmod.8.xml:104(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option><replaceable>NEW_GROUP</"
+"replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--new-name</option><replaceable>НОВАЯ_ГРУППА</"
+"replaceable>"
+
+#: groupmod.8.xml:109(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+"Имя группы будет изменено с <emphasis remap=\"I\">ГРУППА</emphasis> на "
+"<emphasis remap=\"I\">НОВАЯ_ГРУППА</emphasis>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmod.8.xml:120(para)
+#, fuzzy
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+"При использовании с параметром <option>-g</option> разрешается изменять "
+"<replaceable>GID</replaceable> группы не уникальным значением."
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: groupmod.8.xml:219(para)
+msgid "group name already in use"
+msgstr "такое имя группы уже используется"
+
+# type: Content of: <refentry><refsect1><para>
+#: groupmod.8.xml:183(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Команда <command>groupmod</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: groupmod.8.xml:234(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: groupmems.8.xml:44(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr "управляет членами первичной группы пользователя"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#: groupmems.8.xml:51(replaceable) groupmems.8.xml:52(replaceable)
+msgid "user_name"
+msgstr "имя_пользователя"
+
+#: groupmems.8.xml:51(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:52(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#: groupmems.8.xml:53(replaceable)
+msgid "group_name"
+msgstr "имя_группы"
+
+#: groupmems.8.xml:53(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#: groupmems.8.xml:54(arg)
+msgid "-l"
+msgstr "-l"
+
+#: groupmems.8.xml:61(para)
+msgid ""
+"The <command>groupmems</command> command allows a user to administer his/her "
+"own group membership list without the requirement of superuser privileges. "
+"The <command>groupmems</command> utility is for systems that configure its "
+"users to be in their own name sake primary group (i.e., guest / guest)."
+msgstr ""
+"Программа <command>groupmems</command> позволяет пользователю управлять "
+"списком членов своей группы не имея привилегий суперпользователя. Программа "
+"<command>groupmems</command> работает в системах, где в качестве первичной "
+"группы пользователя является группа с именем совпадающим с именем "
+"пользователя (то есть, guest / guest)."
+
+#: groupmems.8.xml:69(para)
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+"Только суперпользователь как администратор может использовать "
+"<command>groupmems</command>, чтобы изменить список членов не своей группы."
+
+#: groupmems.8.xml:76(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr "Параметры команды <command>groupmems</command>:"
+
+#: groupmems.8.xml:82(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option><replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmems.8.xml:84(para)
+#, fuzzy
+#| msgid "Add a new user to the group membership list."
+msgid "Add an user to the group membership list."
+msgstr "Добавить нового пользователя в группу."
+
+#: groupmems.8.xml:85(para) groupmems.8.xml:101(para)
+#: groupmems.8.xml:126(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+
+#: groupmems.8.xml:93(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option><replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>ДНЕЙ</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmems.8.xml:95(para)
+msgid "Delete a user from the group membership list."
+msgstr "Удалить пользователя из группы."
+
+#: groupmems.8.xml:96(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+
+#: groupmems.8.xml:109(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+msgid ""
+"<option>-g</option>, <option>--group</option><replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmems.8.xml:111(para)
+msgid "The superuser can specify which group membership list to modify."
+msgstr ""
+"Суперпользователь может указать группу, в которой нужно изменить список "
+"членов."
+
+#: groupmems.8.xml:117(term) chage.1.xml:128(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmems.8.xml:119(para)
+msgid "List the group membership list."
+msgstr "Показать список членов группы."
+
+#: groupmems.8.xml:123(term)
+#, fuzzy
+#| msgid "<option>-e</option>, <option>--expire</option>"
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmems.8.xml:125(para)
+msgid "Purge all users from the group membership list."
+msgstr "Вычистить всех пользователей из списка членов группы."
+
+# type: Content of: <refentry><refsect1><title>
+#: groupmems.8.xml:137(title)
+msgid "SETUP"
+msgstr "НАСТРОЙКА"
+
+#: groupmems.8.xml:138(para)
+msgid ""
+"The <command>groupmems</command> executable should be in mode <literal>2770</"
+"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
+"emphasis>. The system administrator can add users to group <emphasis>groups</"
+"emphasis> to allow or disallow them using the <command>groupmems</command> "
+"utility to manage their own group membership list."
+msgstr ""
+"Исполняемый файл программы <command>groupmems</command> должен иметь права "
+"<literal>2770</literal>, принадлежать пользователю <emphasis>root</emphasis> "
+"и группе <emphasis>groups</emphasis>. Системный администратор может "
+"добавлять пользователей в группу <emphasis>groups</emphasis>, разрешая или "
+"запрещая им запускать программу <command>groupmems</command> для управления "
+"членством в своей группе."
+
+# type: Content of: <refentry><refsect1><programlisting>
+#: groupmems.8.xml:147(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2770 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+"    "
+msgstr ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2770 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+"    "
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupmems.8.xml:179(para)
+msgid "secure group account information"
+msgstr "содержит защищаемую информацию о группах"
+
+#: groupmems.8.xml:187(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: groupdel.8.xml:44(refpurpose)
+msgid "delete a group"
+msgstr "удаляет группу"
+
+#: groupdel.8.xml:58(para)
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <emphasis remap=\"I\">group</emphasis>. "
+"The named group must exist."
+msgstr ""
+"Программа <command>groupdel</command> изменяет системные файлы учётных "
+"записей, удаляя все записи, относящиеся к <emphasis remap=\"I\">группе</"
+"emphasis>. Группа с таким именем должна существовать."
+
+# type: Content of: <refentry><refsect1><para>
+#: groupdel.8.xml:66(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+"Вы не можете удалить группу, если она является первичной для существующего "
+"пользователя. Вы должны удалить пользователя перед тем как удалять группу."
+
+# type: Content of: <refentry><refsect1><para>
+#: groupdel.8.xml:70(para)
+#, fuzzy
+#| msgid ""
+#| "You must manually check all file systems to insure that no files remain "
+#| "with the named group as the file group ID."
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+"Вы должны вручную проверить все файловые системы, чтобы убедиться, что не "
+"осталось файлов, принадлежащих удалённой группе."
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: groupdel.8.xml:132(para)
+msgid "can't remove user's primary group"
+msgstr "не удалось удалить первичную пользовательскую группу"
+
+# type: Content of: <refentry><refsect1><para>
+#: groupdel.8.xml:108(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Программа <command>groupdel</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: groupdel.8.xml:147(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: groupadd.8.xml:48(refpurpose)
+msgid "create a new group"
+msgstr "создаёт новую группу"
+
+# type: Content of: <refentry><refsect1><para>
+#: groupadd.8.xml:65(para)
+#, fuzzy
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+"Программа <command>groupadd</command> создаёт новую группу, согласно "
+"указанным значениям командной строки и системным значениям по умолчанию. "
+"Новая группа будет добавлена в системные файлы."
+
+#: groupadd.8.xml:74(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr "Параметры команды <command>groupadd</command>:"
+
+#: groupadd.8.xml:84(para)
+#, fuzzy
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+"Вернуть статус успешного выполнения, если группа уже существует. Если "
+"используется вместе с параметром <option>-g</option> и указанный GID уже "
+"существует, то выбирается другой (уникальный) GID (то есть параметр <option>-"
+"g</option> игнорируется)."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupadd.8.xml:98(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than 999 and greater than "
+"every other group. Values between 0 and 999 are typically reserved for "
+"system accounts."
+msgstr ""
+"Числовое значение идентификатора группы. Значение должно быть уникальным, "
+"если не задан параметр <option>-o</option>. Значение должно быть не "
+"отрицательным. По умолчанию, берётся значение больше 999 и больше "
+"идентификатора любой другой группы. Значения от 0 и до 999 обычно "
+"зарезервированы под системные группы."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupadd.8.xml:118(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+"Изменить значения по умолчанию (GID_MIN, GID_MAX и другие), которые хранятся "
+"в файле <filename>/etc/login.defs</filename>. Можно указать несколько "
+"параметров <option>-K</option>."
+
+#: groupadd.8.xml:123(para)
+#, fuzzy
+#| msgid ""
+#| "Example: <option>-K </option><replaceable>GID_MIN</"
+#| "replaceable>=<replaceable>100</replaceable><option> -K </"
+#| "option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgid ""
+"Example: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable><option>-K </"
+"option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Пример: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable><option> -K </"
+"option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: groupadd.8.xml:127(para)
+msgid ""
+"Note: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Замечание: запись вида <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> пока не работает."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: groupadd.8.xml:139(para)
+#, fuzzy
+msgid "This option permits to add a group with a non-unique GID."
+msgstr "Разрешить добавление группы с не уникальным GID."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: groupadd.8.xml:171(para)
+#, fuzzy
+#| msgid "create a new group"
+msgid "Create a system group."
+msgstr "создаёт новую группу"
+
+#: groupadd.8.xml:174(para)
+msgid ""
+"The numeric identifiers of new system groups are choosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: groupadd.8.xml:225(para)
+#, fuzzy
+#| msgid ""
+#| "Groupnames must begin with a lower case letter or an underscore, and only "
+#| "lower case letters, underscores, dashes, and dollar signs may follow. In "
+#| "regular expression terms: [a-z_][a-z0-9_-]*[$]"
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Имена групп должны начинаться со строчной буквы или символа подчёркивания. "
+"Они могут содержать только строчные буквы, символ подчёркивания, тире и знак "
+"доллара. Это можно описать регулярным выражением: [a-z_][a-z0-9_-]*[$]"
+
+# type: Content of: <refentry><refsect1><para>
+#: groupadd.8.xml:231(para)
+#, fuzzy
+#| msgid "Groupnames may only be up to 16 characters long."
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr "Имена групп могут быть длиной не более 16 знаков."
+
+# type: Content of: <refentry><refsect1><para>
+#: groupadd.8.xml:234(para)
+#, fuzzy
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Нельзя добавить пользователя в NIS группу. Это необходимо делать на NIS "
+"сервере."
+
+# type: Content of: <refentry><refsect1><para>
+#: groupadd.8.xml:238(para)
+#, fuzzy
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+"Если имя группы уже существует во внешней базе данных групп, например в NIS, "
+"то <command>groupadd</command> не станет создавать группу."
+
+#: groupadd.8.xml:271(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr "не уникальный gid (если не задан параметр <option>-o</option>)"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: groupadd.8.xml:277(para)
+msgid "group name not unique"
+msgstr "не уникальное имя группы"
+
+# type: Content of: <refentry><refsect1><para>
+#: groupadd.8.xml:247(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Программа <command>groupadd</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#: groupadd.8.xml:292(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: gpasswd.1.xml:49(phrase)
+#, fuzzy
+#| msgid "administer the <placeholder-1/> file"
+msgid "administer <placeholder-1/>"
+msgstr "управляет файлом <placeholder-1/>"
+
+#: gpasswd.1.xml:52(phrase)
+#, fuzzy
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: gpasswd.1.xml:63(replaceable)
+#, fuzzy
+msgid "option"
+msgstr "параметры"
+
+#: gpasswd.1.xml:73(para)
+#, fuzzy
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+"Программа <command>gpasswd</command> используется для управления файлом "
+"<filename>/etc/group</filename> (а также файлом <filename>/etc/gshadow</"
+"filename>, если программа была собрана с параметром SHADOWGRP). Каждая "
+"группа может иметь администраторов, членов и пароль. Системный администратор "
+"может использовать параметр <option>-A</option>, чтобы назначить группе "
+"администратора(ов) и параметр <option>-M</option> для определения списка "
+"членов, а также имеет все права администраторов и членов группы."
+
+#: gpasswd.1.xml:81(para)
+#, fuzzy
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+"Программа <command>gpasswd</command> используется для управления файлом "
+"<filename>/etc/group</filename> (а также файлом <filename>/etc/gshadow</"
+"filename>, если программа была собрана с параметром SHADOWGRP). Каждая "
+"группа может иметь администраторов, членов и пароль. Системный администратор "
+"может использовать параметр <option>-A</option>, чтобы назначить группе "
+"администратора(ов) и параметр <option>-M</option> для определения списка "
+"членов, а также имеет все права администраторов и членов группы."
+
+#: gpasswd.1.xml:86(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:93(para)
+#, fuzzy
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+"Программа <command>gpasswd</command>, запущенная администратором группы с "
+"именем группы, служит для смены пароля группы. Если пароль не пустой,то для "
+"членов группы вызов <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> пароля не требует, а "
+"не члены группы должны ввести пароль."
+
+# type: Content of: <refentry><refsect1><refsect2><title>
+#: gpasswd.1.xml:101(title)
+msgid "Notes about group passwords"
+msgstr "Замечания о паролях групп"
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#: gpasswd.1.xml:102(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+"Пароли групп имеют врождённую проблему с безопасностью, так как пароль знает "
+"более одного человека. Однако, группы являются полезным инструментом "
+"совместной работы различных пользователей."
+
+#: gpasswd.1.xml:113(para)
+#, fuzzy
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr ""
+"Параметры <option>-r</option>, <option>-h</option> и <option>-f</option> "
+"используются только если <command>login</command> запускается "
+"суперпользователем."
+
+#: gpasswd.1.xml:117(para)
+msgid "The options cannot be combined."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: gpasswd.1.xml:120(para)
+#, fuzzy
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr "Параметры команды <command>passwd</command>:"
+
+#: gpasswd.1.xml:125(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option><replaceable>user</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#: gpasswd.1.xml:129(para)
+#, fuzzy
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+"Имя группы будет изменено с <emphasis remap=\"I\">ГРУППА</emphasis> на "
+"<emphasis remap=\"I\">НОВАЯ_ГРУППА</emphasis>."
+
+#: gpasswd.1.xml:138(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option><replaceable>user</replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>ДНЕЙ</replaceable>"
+
+#: gpasswd.1.xml:142(para)
+#, fuzzy
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+"Имя группы будет изменено с <emphasis remap=\"I\">ГРУППА</emphasis> на "
+"<emphasis remap=\"I\">НОВАЯ_ГРУППА</emphasis>."
+
+#: gpasswd.1.xml:151(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--remove</option>"
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: gpasswd.1.xml:155(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. Only "
+"group members will be allowed to use <command>newgrp</command> to join the "
+"named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:166(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: gpasswd.1.xml:170(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. Only "
+"group members will be allowed to use <command>newgrp</command> to join the "
+"named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:181(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-A</option>, <option>--administrators</option><replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-m</option>, <option>--mindays</option><replaceable>МИН_ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: gpasswd.1.xml:185(para)
+#, fuzzy
+msgid "Set the list of administrative users."
+msgstr "список администраторов группы, перечисленных через запятую"
+
+#: gpasswd.1.xml:193(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-b</option>, <option>--before</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-M</option>, <option>--members</option><replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-b</option>, <option>--before</option><replaceable>ДНЕЙ</replaceable>"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#: gpasswd.1.xml:197(para)
+#, fuzzy
+msgid "Set the list of group members."
+msgstr "список членов группы, перечисленных через запятую"
+
+#: gpasswd.1.xml:207(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+
+#: gpasswd.1.xml:252(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><citerefentry><refentrytitle>
+#: faillog.8.xml:34(refentrytitle) faillog.8.xml:39(refname)
+#: faillog.8.xml:45(command) faillog.5.xml:34(refentrytitle)
+#: faillog.5.xml:39(refname) faillog.5.xml:86(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: faillog.8.xml:40(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr ""
+"показывает записи из файла faillog или задаёт предел неудачных попыток входа "
+"в систему"
+
+#: faillog.8.xml:54(para)
+#, fuzzy
+#| msgid ""
+#| "<command>faillog</command> formats the contents of the failure log from "
+#| "<filename>/var/log/faillog</filename> database. It also can be used for "
+#| "maintains failure counters and limits. Run <command>faillog</command> "
+#| "without arguments display only list of user faillog records who have ever "
+#| "had a login failure."
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+"Программа <command>faillog</command> форматирует содержимое журнала "
+"неудачных попыток из файла базы данных<filename>/var/log/faillog</filename>. "
+"Также, она может быть использована для управления счётчиком неудачных "
+"попыток и его пределом. При запуске <command>faillog</command> без "
+"параметров выводятся записи faillog только тех пользователей, у которых "
+"имеется хотя бы одна неудачная попытка входа."
+
+# type: Content of: <refentry><refsect1><para>
+#: faillog.8.xml:65(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr "Параметры команды <command>faillog</command>:"
+
+#: faillog.8.xml:73(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+
+#: faillog.8.xml:86(term)
+msgid ""
+"<option>-l</option>, <option>--lock-time</option><replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-time</option><replaceable>СЕКУНД</"
+"replaceable>"
+
+#: faillog.8.xml:91(para)
+#, fuzzy
+#| msgid ""
+#| "Lock account to <replaceable>SEC</replaceable> seconds after failed login."
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+"Блокировать учётную запись на <replaceable>СЕКУНД</replaceable> после "
+"неудачной попытки входа."
+
+#: faillog.8.xml:95(para) faillog.8.xml:121(para) faillog.8.xml:133(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+
+#: faillog.8.xml:102(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option><replaceable>MAX</replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option><replaceable>МАКС_ЧИСЛО</"
+"replaceable>"
+
+#: faillog.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "Reset the counters of login failures or one record if used with the "
+#| "<option>-u</option><replaceable>LOGIN</replaceable> option. Write access "
+#| "to <filename>/var/log/faillog</filename> is required for this option."
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+"Обнулить счётчик неудачных попыток входа для всех записей или для одного "
+"пользователя, заданного параметром <option>-u</option> <replaceable>ИМЯ</"
+"replaceable>. Для этого требуются права на запись в файл <filename>/var/log/"
+"faillog</filename>."
+
+#: faillog.8.xml:111(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+
+#: faillog.8.xml:116(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+
+#: faillog.8.xml:128(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:130(para)
+msgid "Reset the counters of login failures."
+msgstr ""
+
+#: faillog.8.xml:144(para)
+#, fuzzy
+#| msgid ""
+#| "Display faillog records more recent than <replaceable>DAYS</replaceable>. "
+#| "The <option>-t</option> flag overrides the use of <option>-u</option>."
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+"Показать записи faillog новее чем <replaceable>ДНЕЙ</replaceable>. Параметр "
+"<option>-t</option> отменяет действие параметра <option>-u</option>."
+
+#: faillog.8.xml:156(para)
+#, fuzzy
+#| msgid ""
+#| "Display faillog record or maintains failure counters and limits (if used "
+#| "with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+#| "options) only for user with <replaceable>LOGIN</replaceable>."
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+"Показать запись faillog или изменить счётчики и пределы (если задан параметр "
+"<option>-l</option>, <option>-m</option> или <option>-r</option>) только для "
+"учётной записи с <replaceable>ИМЕНЕМ</replaceable>."
+
+#: faillog.8.xml:174(para)
+#, fuzzy
+#| msgid ""
+#| "The <option>-r</option>, <option>-h</option> and <option>-f</option> "
+#| "options are only used when <command>login</command> is invoked by root."
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+"Параметры <option>-r</option>, <option>-h</option> и <option>-f</option> "
+"используются только если <command>login</command> запускается "
+"суперпользователем."
+
+#: faillog.8.xml:179(para)
+msgid ""
+"NOTE: in display mode, only the records of users which currently exist in "
+"the system are displayed. In the other modes (when the <option>-l</option>, "
+"<option>-m</option>, or <option>-r</option> options are used), the records "
+"of the user, or the range of users, or all the users that may have an entry "
+"in the faillog database will be changed. This is useful to reset records of "
+"users that have been deleted or set a policy in advance for a range of users."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: faillog.8.xml:192(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+"Программа <command>faillog</command>выводит только записи о пользователях, "
+"последняя попытка входа которых была неудачной. Чтобы увидеть запись о "
+"пользователе, последняя попытка входа которого была удачной, вы должны "
+"специально указать имя пользователя с помощью параметра <option>-a</option>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: faillog.8.xml:205(filename) faillog.5.xml:74(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: faillog.8.xml:207(para) faillog.5.xml:76(para)
+msgid "Failure logging file."
+msgstr "содержит журнал неудавшихся попыток входа в систему"
+
+#: faillog.8.xml:215(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: faillog.5.xml:40(refpurpose)
+msgid "login failure logging file"
+msgstr "файл протокола неудачных попыток входа в систему"
+
+#: faillog.5.xml:45(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: faillog.5.xml:49(para)
+#, fuzzy
+#| msgid ""
+#| "<filename>/var/log/faillog</filename> maintains a count of login failures "
+#| "and the limits for each account. The file is fixed length record, indexed "
+#| "by numerical UID. Each record contains the count of login failures since "
+#| "the last successful login; the maximum number of failures before the "
+#| "account is disabled; the line the last login failure occurred on; the "
+#| "date the last login failure occurred; and the time in seconds how long "
+#| "the account will be locked after a failure."
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"whiche the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+"В файле <filename>/var/log/faillog</filename> хранится число неудачных "
+"попыток входа в систему и их предельное число для каждой учётной записи. "
+"Этот файл состоит из записей постоянной длины, упорядоченных по числовому "
+"идентификатору учётной записи. Каждая запись содержит число неудачных "
+"попыток входа с момента последнего успешного входа в систему, максимальное "
+"число неудачных попыток перед тем как учётная запись будет заблокирована, "
+"терминал, с которого осуществлялась последняя неудачная попытка входа, дату "
+"этого события и интервал в секундах на сколько учётная запись будет "
+"заблокирована в случае неудачной регистрации."
+
+# type: Content of: <refentry><refsect1><para>
+#: faillog.5.xml:59(para)
+msgid "The structure of the file is:"
+msgstr "Структура файла:"
+
+# type: Content of: <refentry><refsect1><programlisting>
+#: faillog.5.xml:60(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort   fail_cnt;\n"
+"\tshort   fail_max;\n"
+"\tchar    fail_line[12];\n"
+"\ttime_t  fail_time;\n"
+"\tlong    fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort   fail_cnt;\n"
+"\tshort   fail_max;\n"
+"\tchar    fail_line[12];\n"
+"\ttime_t  fail_time;\n"
+"\tlong    fail_locktime;\n"
+"};"
+
+# type: Content of: <refentry><refsect1><para><command>
+#: expiry.1.xml:41(refentrytitle) expiry.1.xml:46(refname)
+#: expiry.1.xml:52(command)
+msgid "expiry"
+msgstr "expiry"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: expiry.1.xml:47(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr "проверяет и изменяет пароль согласно срокам действия"
+
+#: expiry.1.xml:60(para)
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+"Программа <command>expiry</command> проверяет (параметр <option>-c</option>) "
+"сколько ещё времени будет работоспособен текущий пароль и вынуждает изменить "
+"его (параметр <option>-f</option>), если это требуется. Она может "
+"запускаться обычным пользователем."
+
+#: expiry.1.xml:87(para) chage.1.xml:262(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: chsh.1.xml:46(refpurpose)
+msgid "change login shell"
+msgstr "изменяет регистрационную оболочку пользователя"
+
+# type: Content of: <refentry><refsect1><para>
+#: chsh.1.xml:63(para)
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account, the superuser may change "
+"the login shell for any account."
+msgstr ""
+"Программа <command>chsh</command> изменяет регистрационную оболочку "
+"пользователя. Она определяет какая команда будет запущена после регистрации "
+"пользователя в системе. Обычный пользователь может изменять регистрационную "
+"оболочку только для своей учётной записи, суперпользователь может изменять "
+"регистрационную оболочку любой учётной записи."
+
+# type: Content of: <refentry><refsect1><para>
+#: chsh.1.xml:74(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr "Параметры команды <command>chsh</command>:"
+
+# type: Content of: <refentry><refsect1><para>
+#: chsh.1.xml:96(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Если параметр <option>-s</option> не задан, то <command>chsh</command> "
+"переходит в интерактивный режим, предлагая пользователю изменить свою "
+"регистрационную оболочку. Вводимое значение заменяет текущее значение поля; "
+"если введена пустая строка, то текущее значение остаётся неизменным. Текущее "
+"значение регистрационной оболочки указано в скобках <emphasis>[ ]</emphasis>."
+
+#: chsh.1.xml:107(para)
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+"Все допустимые имена регистрационных оболочек должны быть указаны в файле "
+"<filename>/etc/shells</filename>. На суперпользователя это ограничение не "
+"действует и поэтому ему разрешено указывать любое значение. Для учётной "
+"записи с ограниченной регистрационной оболочкой пользователь не может "
+"изменить свою регистрационную оболочку. Поэтому, команду <filename>/bin/rsh</"
+"filename> в файле <filename>/etc/shells</filename> лучше не указывать, так "
+"как, если пользователь случайно изменит свою регистрационную оболочку на эту "
+"ограниченную оболочку, то не сможет восстановить её первоначальное значение."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><filename>
+#: chsh.1.xml:142(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chsh.1.xml:144(para)
+msgid "List of valid login shells."
+msgstr "содержит список разрешённых регистрационных оболочек"
+
+#: chsh.1.xml:158(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: chpasswd.8.xml:47(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "обновляет пароли в пакетном режиме"
+
+# type: Content of: <refentry><refsect1><para>
+#: chpasswd.8.xml:61(para)
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+"Программа <command>chpasswd</command> читает список пар \"пользователь пароль"
+"\" из стандартного входного потока и обновляет информацию о существующих "
+"пользователях. Каждая строка имеет вид:"
+
+#: chpasswd.8.xml:66(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">имя_пользователя</emphasis>:<emphasis remap=\"I"
+"\">пароль</emphasis>"
+
+# type: Content of: <refentry><refsect1><para>
+#: chpasswd.8.xml:71(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"По умолчанию, передаваемый пароль должен быть в виде обычного текста. "
+"Алгоритмом шифрования по умолчанию является DES. Также, если есть срок "
+"устаревания пароля, то он будет обновлён."
+
+#: chpasswd.8.xml:76(para) chgpasswd.8.xml:75(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"ENCRYPT_METHOD variable of <filename>/etc/login.defs</filename>, and can be "
+"overwiten with the <option>-e</option>, <option>-m</option>, or <option>-c</"
+"option> options."
+msgstr ""
+
+#: chpasswd.8.xml:82(para)
+msgid ""
+"<command>chpasswd</command> first update the password in memory, and then "
+"commit all the changes to disk if no errors occured for any users."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chpasswd.8.xml:89(para)
+#, fuzzy
+#| msgid "Supplied passwords are in encrypted form."
+msgid "The supplied passwords must be in clear-text."
+msgstr "Передаваемые пароли заданы в шифрованном виде."
+
+#: chpasswd.8.xml:92(para)
+msgid ""
+"PAM is used to update the password in the system database according to the "
+"PAM chpasswd configuration."
+msgstr ""
+
+#: chpasswd.8.xml:96(para)
+msgid ""
+"When <command>chpasswd</command> fails to update a password, it continues "
+"updating the passwords of the next users, and will return an error code on "
+"exit."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: chpasswd.8.xml:102(para) chgpasswd.8.xml:81(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+"Данная команда предназначена для работы в крупных системных средах, где за "
+"один раз заводится несколько учётных записей."
+
+#: chpasswd.8.xml:110(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr "Параметры команды <command>chpasswd</command>:"
+
+#: chpasswd.8.xml:119(para) chgpasswd.8.xml:98(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr ""
+
+#: chpasswd.8.xml:129(term) chgpasswd.8.xml:108(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chpasswd.8.xml:131(para) chgpasswd.8.xml:110(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr "Передаваемые пароли заданы в шифрованном виде."
+
+#: chpasswd.8.xml:145(term) chgpasswd.8.xml:120(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chpasswd.8.xml:147(para) chgpasswd.8.xml:122(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+"Использовать алгоритм шифрования MD5 вместо DES, если пароли передаются не "
+"шифрованными."
+
+# type: Content of: <refentry><refsect1><para>
+#: chpasswd.8.xml:183(para) chgpasswd.8.xml:158(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+"Не забудьте установить права или umask, чтобы не позволить чтение "
+"нешифрованных файлов другими пользователями."
+
+# type: Content of: <refentry><refsect1><para><filename>
+#: chpasswd.8.xml:229(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/passwd"
+
+#: chpasswd.8.xml:231(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr ""
+
+#: chpasswd.8.xml:239(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: chgpasswd.8.xml:48(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr "обновляет пароли групп в пакетном режиме"
+
+# type: Content of: <refentry><refsect1><para>
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"Программа <command>chgpasswd</command> читает список пар \"группа пароль\" "
+"из стандартного входного потока и обновляет информацию о существующих "
+"группах. Каждая строка имеет вид:"
+
+#: chgpasswd.8.xml:67(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">имя_группы</emphasis>:<emphasis remap=\"I\">пароль</"
+"emphasis>"
+
+# type: Content of: <refentry><refsect1><para>
+#: chgpasswd.8.xml:71(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"По умолчанию, передаваемый пароль должен быть в виде обычного текста. "
+"Алгоритмом шифрования по умолчанию является DES."
+
+#: chgpasswd.8.xml:89(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr "Параметры команды <command>chgpasswd</command>:"
+
+#: chgpasswd.8.xml:209(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: chfn.1.xml:47(refpurpose)
+msgid "change real user name and information"
+msgstr "изменяет информацию о пользователе"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: chfn.1.xml:53(replaceable)
+msgid "full_name"
+msgstr "ФИО"
+
+#: chfn.1.xml:53(arg)
+msgid "-f <placeholder-1/>"
+msgstr "-f <placeholder-1/>"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: chfn.1.xml:54(replaceable)
+msgid "room_no"
+msgstr "номер комнаты"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: chfn.1.xml:55(replaceable)
+msgid "work_ph"
+msgstr "рабочий телефон"
+
+#: chfn.1.xml:55(arg)
+msgid "-w <placeholder-1/>"
+msgstr "-w <placeholder-1/>"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#: chfn.1.xml:56(replaceable)
+msgid "home_ph"
+msgstr "домашний телефон"
+
+# type: Content of: <refentry><refsect1><para><emphasis>
+#: chfn.1.xml:57(replaceable)
+msgid "other"
+msgstr "другое"
+
+#: chfn.1.xml:57(arg)
+msgid "-o <placeholder-1/>"
+msgstr "-o <placeholder-1/>"
+
+#: chfn.1.xml:64(para)
+msgid ""
+"The <command>chfn</command> command changes user fullname, office number, "
+"office extension, and home phone number information for a user's account. "
+"This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+"Программа <command>chfn</command> изменяет ФИО, рабочий телефон, рабочие "
+"координаты и домашний номер телефона учётной записи пользователя. Обычно, "
+"эти данные выводятся командой <citerefentry><refentrytitle>finger</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> и ей подобными "
+"программами. Обычный пользователь может изменить только определённые поля "
+"собственной учётной записи, разрешённые в файле <filename>/etc/login.defs</"
+"filename>. (Настройкой по умолчанию пользователю не разрешается менять своё "
+"имя и фамилию.) Суперпользователь может изменять любое поле любой учётной "
+"записи. Кроме того, только суперпользователь может использовать параметр "
+"<option>-o</option> для изменения нестандартизованной части поля GECOS."
+
+#: chfn.1.xml:78(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+
+# type: Content of: <refentry><refsect1><para>
+#: chfn.1.xml:87(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+"Если ни один параметр не указан, то <command>chfn</command> переходит в "
+"интерактивный режим, предлагая запустившему пользователю изменить значения "
+"полей своей учётной записи. Вводимое значение заменяет текущее значение "
+"поля; если введена пустая строка, то текущее значение остаётся неизменным. "
+"Текущее значение показано в скобках <emphasis remap=\"B\">[ ]</emphasis>. "
+"Без параметров, программа <command>chfn</command> изменяет учётную запись "
+"запустившего пользователя."
+
+#: chfn.1.xml:132(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+# type: Content of: <refentry><refsect1><para><command>
+#: chage.1.xml:34(refentrytitle) chage.1.xml:39(refname)
+#: chage.1.xml:44(command)
+msgid "chage"
+msgstr "chage"
+
+# type: Content of: <refentry><refnamediv><refpurpose>
+#: chage.1.xml:40(refpurpose)
+msgid "change user password expiry information"
+msgstr "изменяет информацию об устаревании пароля пользователя"
+
+# type: Content of: <refentry><refsect1><para>
+#: chage.1.xml:56(para)
+msgid ""
+"The <command>chage</command> command changes the number of days between "
+"password changes and the date of the last password change. This information "
+"is used by the system to determine when a user must change his/her password."
+msgstr ""
+"Программа The <command>chage</command> изменяет количество дней между датой "
+"следующей смены пароля и датой последней смены пароля. Эта информация "
+"используется системой для определения момента, когда пользователь должен "
+"сменить свой пароль."
+
+# type: Content of: <refentry><refsect1><para>
+#: chage.1.xml:66(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr "Параметры команды <command>chage</command>:"
+
+#: chage.1.xml:71(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option><replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--lastday</option><replaceable>ПОСЛ_ДЕНЬ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:75(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+"Установить число дней прошедших с 1 января 1970 года, когда была последняя "
+"смена пароля. Дата может быть также указана в виде ГГГГ-ММ-ДД (или в форме "
+"согласно региональным настройкам)."
+
+#: chage.1.xml:83(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</"
+"replaceable>"
+msgstr ""
+"<option>-E</option>, <option>--expiredate</"
+"option><replaceable>ДАТА_УСТАРЕВАНИЯ</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:87(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+"Установить дату устаревания учётной записи пользователя, которая задаётся "
+"числом дней прошедших с 1 января 1970 года. Дата может быть также задана в "
+"виде ГГГГ-ММ-ДД (или в форме согласно региональным настройкам). "
+"Пользователь, чья учётная запись была заблокирована, должен обратиться к "
+"системному администратору, если хочет в дальнейшем работать с системой."
+
+#: chage.1.xml:95(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+"Указание значения <emphasis remap=\"I\">-1</emphasis> в параметре "
+"<replaceable>ДАТА_УСТАРЕВАНИЯ</replaceable> отменяет устаревание учётной "
+"записи."
+
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-I</option>, <option>--inactive</option><replaceable>ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:113(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+"Установить число дней неактивности после устаревания пароля перед тем как "
+"учётная запись будет заблокирована. В параметре <replaceable>ДНЕЙ</"
+"replaceable> задаётся число дней неактивности. Пользователь, чья учётная "
+"запись была заблокирована, должен обратиться к системному администратору, "
+"если хочет в дальнейшем работать с системой."
+
+#: chage.1.xml:120(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+"Указание значения <emphasis remap=\"I\">-1</emphasis> в параметре "
+"<replaceable>ДНЕЙ</replaceable> отменяет неактивность учётной записи."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:132(para)
+msgid "Show account aging information."
+msgstr "Показать информацию об устаревании учётной записи."
+
+#: chage.1.xml:138(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option><replaceable>МИН_ДНЕЙ</"
+"replaceable>"
+
+#: chage.1.xml:150(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-M</option>, <option>--maxdays</option><replaceable>МАКС_ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:154(para)
+msgid ""
+"Set the maximum number of days during which a password is valid. When "
+"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
+"is less than the current day, the user will be required to change his/her "
+"password before being able to use his/her account. This occurrence can be "
+"planned for in advance by use of the <option>-W</option> option, which "
+"provides the user with advance warning."
+msgstr ""
+"Установить максимальное число дней работоспособности пароля. Если сумма "
+"значений <replaceable>МАКС_ДНЕЙ</replaceable> и <replaceable>ПОСЛ_ДЕНЬ</"
+"replaceable> раньше текущего дня, то пользователю придётся изменить свой "
+"пароль перед использованием учётной записи. Для того, чтобы это не было "
+"неожиданностью можно воспользоваться параметром <option>-W</option>, который "
+"активирует выдачу предупреждения о смене пароля пользователя заранее."
+
+#: chage.1.xml:163(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+"Указание значения <emphasis remap=\"I\">-1</emphasis> в параметре "
+"<replaceable>МАКС_ДНЕЙ</replaceable> отменяет проверку пароля."
+
+#: chage.1.xml:171(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--warndays</option><replaceable>ПРЕДУП_ДНЕЙ</"
+"replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:175(para)
+msgid ""
+"Set the number of days of warning before a password change is required. The "
+"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
+"the password expiring that a user will be warned his/her password is about "
+"to expire."
+msgstr ""
+"Установить число дней выдачи предупреждения, перед тем как потребуется смена "
+"пароля. Параметр <replaceable>ПРЕДУП_ДНЕЙ</replaceable> задаётся в днях, в "
+"течении которых пользователь будет получать предупреждение об устаревании "
+"пароля, перед тем как это случится."
+
+# type: Content of: <refentry><refsect1><para>
+#: chage.1.xml:184(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+"Если ни один параметр не указан, то <command>chage</command> переходит в "
+"интерактивный режим, предлагая запустившему пользователю изменить значения "
+"всех полей своей учётной записи. Вводимое значение заменяет текущее значение "
+"поля; если введена пустая строка, то текущее значение остаётся неизменным. "
+"Текущее значение показано в скобках <emphasis>[ ]</emphasis>."
+
+# type: Content of: <refentry><refsect1><para>
+#: chage.1.xml:194(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"Программа <command>chage</command> требует наличия файла теневых паролей."
+
+# type: Content of: <refentry><refsect1><para>
+#: chage.1.xml:198(para)
+msgid ""
+"The <command>chage</command> command is restricted to the root user, except "
+"for the <option>-l</option> option, which may be used by an unprivileged "
+"user to determine when his/her password or account is due to expire."
+msgstr ""
+"Программа <command>chage</command> работает только от суперпользователя, за "
+"исключением вызова с параметром <option>-l</option>, который может "
+"использоваться непривилегированным пользователем для определения даты "
+"устаревания своего пароля."
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><replaceable>
+#: chage.1.xml:251(replaceable)
+msgid "15"
+msgstr "15"
+
+# type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para>
+#: chage.1.xml:253(para)
+msgid "can't find the shadow password file"
+msgstr "не удалось найти файл теневых паролей"
+
+# type: Content of: <refentry><refsect1><para>
+#: chage.1.xml:229(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Программа <command>chage</command> завершая работу, возвращает следующие "
+"значения: <placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr "Yuri Kozlov <kozlov.y@gmail.com>, 2005, 2006"
+
+#, fuzzy
+#~ msgid "and <placeholder-1/> files"
+#~ msgstr "-a <placeholder-1/>"
+
+# type: Content of: <refentry><refsect1><para>
+#, fuzzy
+#~| msgid ""
+#~| "<command>usermod</command> will not allow you to change the name of a "
+#~| "user who is logged in. You must make certain that the named user is not "
+#~| "executing any processes when this command is being executed if the "
+#~| "user's numerical user ID is being changed. You must change the owner of "
+#~| "any <command>crontab</command> files manually. You must change the owner "
+#~| "of any <command>at</command> jobs manually. You must make any changes "
+#~| "involving NIS on the NIS server."
+#~ msgid ""
+#~ "<command>usermod</command> will not allow you to change the name of an "
+#~ "user who is logged in. You must make certain that the named user is not "
+#~ "executing any processes when this command is being executed if the user's "
+#~ "numerical user ID is being changed. You must change the owner of any "
+#~ "<command>crontab</command> files manually. You must change the owner of "
+#~ "any <command>at</command> jobs manually. You must make any changes "
+#~ "involving NIS on the NIS server."
+#~ msgstr ""
+#~ "Команда <command>usermod</command> не будет изменять имя пользователя, "
+#~ "если этот пользователь в данный момент работает в системе. Если требуется "
+#~ "изменить числовой идентификатор пользователя, нужно проверить, что от "
+#~ "этого пользователя нет запущенных процессов. Владельца файлов "
+#~ "<command>crontab</command> нужно изменять вручную. Владельца заданий "
+#~ "<command>at</command> нужно изменять вручную. Также вручную нужно сделать "
+#~ "все изменения связанные с NIS на сервере NIS."
+
+# type: Content of: <refentry><refsect1><para>
+#~ msgid ""
+#~ "<command>userdel</command> will not allow you to remove an account if the "
+#~ "user is currently logged in. You must kill any running processes which "
+#~ "belong to an account that you are deleting."
+#~ msgstr ""
+#~ "Команда <command>userdel</command> не будет удалять учётную запись, если "
+#~ "пользователь в данный момент работает в системе. Вы должны завершить все "
+#~ "запущенные процессы, принадлежащие учётной записи, которую нужно удалить."
+
+#~ msgid ""
+#~ "The encrypted password, as returned by "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. The default is to disable the account."
+#~ msgstr ""
+#~ "Шифрованное значение пароля, которое возвращает функция "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. По умолчанию учётная запись заблокирована."
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "encrypted password file"
+#~ msgstr "файл с защищаемой информацией о пользователях"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "comma-separated list of group administrators"
+#~ msgstr "список администраторов группы, перечисленных через запятую"
+
+#~ msgid ""
+#~ "The group name and password fields must be filled. The encrypted password "
+#~ "consists of characters from the 64-character alphabet a thru z, A thru Z, "
+#~ "0 thru 9, \\. and /. Refer to <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry> for details on how "
+#~ "this string is interpreted. If the password field contains some string "
+#~ "that is not valid result of <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, for instance ! or "
+#~ "*, the user will not be able to use a unix password to log in, subject to "
+#~ "<citerefentry><refentrytitle>pam</refentrytitle><manvolnum>7</manvolnum></"
+#~ "citerefentry>."
+#~ msgstr ""
+#~ "Поля с именем группы и пароль должны быть заполнены. Шифрованный пароль "
+#~ "состоит из разрешённых 64 символов с a по z, с A по Z, с 0 по 9, \\. и /. "
+#~ "Подробней о пароле смотрите на странице руководства "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>. Если поле пароля содержит строку, которая не "
+#~ "удовлетворяет требованиям <citerefentry><refentrytitle>crypt</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, например "
+#~ "содержит ! или *, то пользователь не сможет использовать этот unix пароль "
+#~ "для регистрации с учётом настроек <citerefentry><refentrytitle>pam</"
+#~ "refentrytitle><manvolnum>7</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#, fuzzy
+#~ msgid ""
+#~ "The group ID of the given <replaceable>GROUP</replaceable> will be "
+#~ "changed to <replaceable>GID</replaceable>. The value of <replaceable>GID</"
+#~ "replaceable> must be a non-negative decimal integer. This value must be "
+#~ "unique, unless the <option>-o</option> option is used. Values between 0 "
+#~ "and 999 are typically reserved for system groups. Any files that have the "
+#~ "old group ID and must continue to belong to <replaceable>GROUP</"
+#~ "replaceable>, must have their group ID changed manually."
+#~ msgstr ""
+#~ "Указывается новый ID группы для <replaceable>ГРУППЫ</replaceable>. "
+#~ "Числовое значение <replaceable>GID</replaceable> должно быть "
+#~ "неотрицательным десятичным числом. Оно должно быть уникальным, если не "
+#~ "задан параметр <option>-o</option>. Значения от 0 до 999 обычно "
+#~ "зарезервированы под системные группы. Изменение принадлежности всех "
+#~ "файлов старой группе необходимо выполнять вручную."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid ""
+#~ "The group name or number of the user's new initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1."
+#~ msgstr ""
+#~ "Имя или числовой идентификатор новой начальной группы пользователя. "
+#~ "Группа с таким именем должна существовать. Идентификатор группы должен "
+#~ "указывать на уже существующую группу. По умолчанию идентификатор группы "
+#~ "установлен в 1."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid ""
+#~ "The group name or number of the user's initial login group. The group "
+#~ "name must exist. A group number must refer to an already existing group. "
+#~ "The default group number is 1 or whatever is specified in <filename>/etc/"
+#~ "default/useradd</filename>."
+#~ msgstr ""
+#~ "Имя или числовой идентификатор новой начальной группы пользователя. "
+#~ "Группа с таким именем должна существовать. Идентификатор группы должен "
+#~ "указывать на уже существующую группу. Идентификатор группы по умолчанию "
+#~ "равен 1 или значению указанному в файле <filename>/etc/default/useradd</"
+#~ "filename>."
+
+# type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#~ msgid ""
+#~ "The group name or ID for a new user's initial group. The named group must "
+#~ "exist, and a numerical group ID must have an existing entry."
+#~ msgstr ""
+#~ "Имя или числовой идентификатор новой начальной группы пользователя. "
+#~ "Группа с таким именем должна существовать и для числового идентификатора "
+#~ "должна быть запись."
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "days since Jan 1, 1970 that password was last changed"
+#~ msgstr ""
+#~ "число дней с момента последнего изменения пароля, начиная с 1 января 1970 "
+#~ "года"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "days after which password must be changed"
+#~ msgstr "число дней, после которых пароль должен быть изменён"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "days before password is to expire that user is warned"
+#~ msgstr ""
+#~ "число дней, за сколько пользователя начнут предупреждать, что пароль "
+#~ "устаревает"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "days after password expires that account is disabled"
+#~ msgstr "число дней, после устаревания пароля для блокировки учётной записи"
+
+# type: Content of: <refentry><refsect1><itemizedlist><listitem><para>
+#~ msgid "days since Jan 1, 1970 that account is disabled"
+#~ msgstr ""
+#~ "дней, отсчитывая с 1 января 1970 года, когда учётная запись была "
+#~ "заблокирована"
+
+# type: Content of: <refentry><refsect1><para>
+#, fuzzy
+#~ msgid ""
+#~ "The password field must be filled. The encrypted password consists of 13 "
+#~ "to 24 characters from the 64 character alphabet a thru z, A thru Z, 0 "
+#~ "thru 9, \\. and /. Optionally it can start with a \"$\" character. This "
+#~ "means the encrypted password was generated using another (not DES) "
+#~ "algorithm. For example if it starts with \"$1$\" it means the MD5-based "
+#~ "algorithm was used."
+#~ msgstr ""
+#~ "Поле пароля должно быть заполнено. Шифрованный пароль имеет длину от 13 "
+#~ "до 24 символов и состоит из 64 символов алфавита от a до z, от A до Z, от "
+#~ "0 до 9, \\. и /. Пароль может начинаться с символа \"$\". Это означает, "
+#~ "что шифрованный пароль был сгенерирован с использованием другого (не DES) "
+#~ "алгоритма. Например, если он начинается с \"$1$\", то это означает, что "
+#~ "использовался алгоритм на основе MD5."
+
+# type: Content of: <refentry><refsect1><para>
+#~ msgid ""
+#~ "The date of the last password change is given as the number of days since "
+#~ "Jan 1, 1970. The password may not be changed again until the proper "
+#~ "number of days have passed, and must be changed after the maximum number "
+#~ "of days. If the minimum number of days required is greater than the "
+#~ "maximum number of day allowed, this password may not be changed by the "
+#~ "user."
+#~ msgstr ""
+#~ "Дата последнего изменения пароля задаётся в днях, прошедших с 1 января "
+#~ "1970 года. Пароль не может быть изменён пока не пройдёт положенное число "
+#~ "дней, и должен быть изменён после максимального числа дней. Если "
+#~ "обязательное минимальное число дней больше чем максимальное число дней, "
+#~ "то такой пароль не может быть изменён пользователем."
+
+# type: Content of: <refentry><refsect1><para>
+#~ msgid ""
+#~ "An account is considered to be inactive and is disabled if the password "
+#~ "is not changed within the specified number of days after the password "
+#~ "expires. An account will also be disabled on the specified day regardless "
+#~ "of other password expiration information."
+#~ msgstr ""
+#~ "Учётная запись считается неактивной и будет заблокирована, если пароль не "
+#~ "был изменён за заданное число дней после устаревания пароля. Учётная "
+#~ "запись также будет заблокирована в заданный день, независимо от другой "
+#~ "информации об устаревании пароля."
+
+# type: Content of: <refentry><refsect1><para>
+#~ msgid ""
+#~ "This information supersedes any password or password age information "
+#~ "present in <filename>/etc/passwd</filename>."
+#~ msgstr ""
+#~ "Информация из этого файла заменяет любой пароль или информацию об "
+#~ "устаревании, содержащуюся в файле <filename>/etc/passwd</filename>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "This field must contain the name (or number) of a group. The user will be "
+#~ "added as a member to this group. When a non-existent group name or number "
+#~ "is specified, a new group will be created. In the case of a non-existent "
+#~ "group number, both the name and the number of the new group will be this "
+#~ "number."
+#~ msgstr ""
+#~ "Это поле должно содержать имя (или номер). Пользователь будет добавлен в "
+#~ "эту группу. Если указан числовой идентификатор или имя несуществующей "
+#~ "группы, то будет создана новая группа с данным именем и номером."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid ""
+#~ "This field will be checked for existence as a directory, and a new "
+#~ "directory with this name will be created if it does not already exist. "
+#~ "The ownership of the directory will be set to be that of the user being "
+#~ "created or updated."
+#~ msgstr ""
+#~ "Будет проверено существование каталога с именем значения данного поля и "
+#~ "если такого каталога нет, то он будет создан. Владельцем каталога будет "
+#~ "назначен обновляемый или создаваемый пользователь."
+
+#, fuzzy
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#~ msgid "-a"
+#~ msgstr "-a"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#~ msgid "-d"
+#~ msgstr "-d"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><option>
+#~ msgid "-g"
+#~ msgstr "-g"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#~ msgid "GID"
+#~ msgstr "GID"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><option>
+#~ msgid "-o"
+#~ msgstr "-o"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#~ msgid "KEY"
+#~ msgstr "КЛЮЧ"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><term><replaceable>
+#~ msgid "VALUE"
+#~ msgstr "ЗНАЧЕНИЕ"
+
+#~ msgid "-K <placeholder-1/>=<placeholder-2/>"
+#~ msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><option>
+#, fuzzy
+#~ msgid "-R"
+#~ msgstr "-"
+
+#, fuzzy
+#~ msgid "<option>-A</option><replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#, fuzzy
+#~ msgid "<option>-M</option><replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid "Display faillog records for all users."
+#~ msgstr "Показать записи faillog для всех пользователей."
+
+#~ msgid ""
+#~ "Set maximum number of login failures after the account is disabled to "
+#~ "<replaceable>MAX</replaceable>. Selecting <replaceable>MAX</replaceable> "
+#~ "value of 0 has the effect of not placing a limit on the number of failed "
+#~ "logins. The maximum failure count should always be 0 for <emphasis>root</"
+#~ "emphasis> to prevent a denial of services attack against the system."
+#~ msgstr ""
+#~ "Установить максимальное число неудачных попыток входа "
+#~ "равному<replaceable>МАКС_ЧИСЛО</replaceable>, после чего учётная запись "
+#~ "блокируется. Если <replaceable>МАКС_ЧИСЛО</replaceable> равно 0, то "
+#~ "количество неудачных попыток не ограничивается. Максимальное значение "
+#~ "неудачных попыток должно быть всегда равно 0 для <emphasis>root</"
+#~ "emphasis>, для того чтобы предотвратить атаку отказа в обслуживании на "
+#~ "систему."
+
+#~ msgid ""
+#~ "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--user</option><replaceable>ИМЯ</replaceable>"
+
+#~ msgid ""
+#~ "The user's home directory will be created if it does not exist. The files "
+#~ "contained in <replaceable>SKEL_DIR</replaceable> will be copied to the "
+#~ "home directory if the <option>-k</option> option is used, otherwise the "
+#~ "files contained in <filename>/etc/skel</filename> will be used instead. "
+#~ "Any directories contained in <replaceable>SKEL_DIR</replaceable> or "
+#~ "<filename>/etc/skel</filename> will be created in the user's home "
+#~ "directory as well. The <option>-k</option> option is only valid in "
+#~ "conjunction with the <option>-m</option> option. The default is to not "
+#~ "create the directory and to not copy any files."
+#~ msgstr ""
+#~ "Если домашнего каталога пользователя не существует, то он будет создан. "
+#~ "Файлы из каталога <replaceable>КАТАЛОГ_ШАБЛОН</replaceable> будут "
+#~ "скопированы в домашний каталог, если он указан параметр <option>-k</"
+#~ "option>, иначе будут использованы файлы из каталога <filename>/etc/skel</"
+#~ "filename>. Все подкаталоги каталога <replaceable>КАТАЛОГ_ШАБЛОН</"
+#~ "replaceable> или <filename>/etc/skel</filename> будут также созданы в "
+#~ "домашнем каталоге пользователя. Параметр <option>-k</option> можно "
+#~ "использовать только вместе с параметром <option>-m</option>. По "
+#~ "умолчанию, домашний каталог не создаётся и файлы не копируются."
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#~ msgid ""
+#~ "Your password must be easily remembered so that you will not be forced to "
+#~ "write it on a piece of paper. This can be accomplished by appending two "
+#~ "small words together and separating each with a special character or "
+#~ "digit. For example, Pass%word."
+#~ msgstr ""
+#~ "Пароль должен легко запоминаться, чтобы не было необходимости записывать "
+#~ "его на бумагу. Этого можно достичь соединив два маленьких слова в одно, "
+#~ "разделив их специальным символом или цифрой. Например, Pass%word."
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#~ msgid ""
+#~ "Other methods of construction involve selecting an easily remembered "
+#~ "phrase from literature and selecting the first or last letter from each "
+#~ "word. An example of this is:"
+#~ msgstr ""
+#~ "Другим методом создания является выбор легко запоминающейся фразы из "
+#~ "литературы и взятие первой или последней буквы каждого слова. Например:"
+
+# type: Content of: <refentry><refsect1><refsect2><itemizedlist><listitem><para>
+#~ msgid "Ask not for whom the bell tolls"
+#~ msgstr "Ask not for whom the bell tolls"
+
+# type: Content of: <refentry><refsect1><refsect2><itemizedlist><listitem><para>
+#~ msgid "which produces"
+#~ msgstr "получается"
+
+# type: Content of: <refentry><refsect1><refsect2><itemizedlist><listitem><para>
+#~ msgid "An4wtbt"
+#~ msgstr "An4wtbt"
+
+# type: Content of: <refentry><refsect1><refsect2><para>
+#~ msgid ""
+#~ "You may be reasonably sure few crackers will have included this in their "
+#~ "dictionaries. You should, however, select your own methods for "
+#~ "constructing passwords and not rely exclusively on the methods given here."
+#~ msgstr ""
+#~ "Можете быть уверены, что некоторые взломщики включат этот пароль в свои "
+#~ "словари. Поэтому вы должны выбрать свои собственные методы создания "
+#~ "паролей и не полагаться на методы предложенные здесь."
+
+# type: Content of: <refentry><refsect1><para>
+#~ msgid ""
+#~ "The only restriction placed on the contents of the fields is that no "
+#~ "control characters may be present, nor any of comma, colon, or equal "
+#~ "sign. The <emphasis remap=\"I\">other</emphasis> field does not have this "
+#~ "restriction, and is used to store accounting information used by other "
+#~ "applications."
+#~ msgstr ""
+#~ "Единственным ограничением значений полей является то, что они не должны "
+#~ "содержать управляющих символов, запятых, двоеточий или знака равно. На "
+#~ "поле <emphasis remap=\"I\">другое</emphasis> не действует это "
+#~ "ограничение, и оно может использоваться для хранения информации об "
+#~ "учётной записи для любых приложений."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid ""
+#~ "Range of user IDs to choose from for the <command>useradd</command> "
+#~ "program."
+#~ msgstr ""
+#~ "Диапазон идентификаторов пользователей, используемый программой "
+#~ "<command>useradd</command>."
+
+#~ msgid ""
+#~ "The <option>-t</option> flag overrides the use of <option>-u</option>."
+#~ msgstr ""
+#~ "Параметр <option>-t</option> отменяет действие параметра <option>-u</"
+#~ "option>."
+
+#~ msgid ""
+#~ "By default, <command>grpck</command> operates on the files <filename>/etc/"
+#~ "group</filename> and <filename>/etc/gshadow</filename>. The user may "
+#~ "select alternate files with the <emphasis remap=\"I\">group</emphasis> "
+#~ "and <emphasis remap=\"I\">shadow</emphasis> parameters. Additionally, the "
+#~ "user may execute the command in read-only mode by specifying the <option>-"
+#~ "r</option> flag. This causes all questions regarding changes to be "
+#~ "answered <emphasis>no</emphasis> without user intervention. "
+#~ "<command>grpck</command> can also sort entries in <filename>/etc/group</"
+#~ "filename> and <filename>/etc/gshadow</filename> by GID. To run it in sort "
+#~ "mode pass it <option>-s</option> flag. No checks are performed then, it "
+#~ "just sorts."
+#~ msgstr ""
+#~ "По умолчанию, команда <command>grpck</command> работает с файлами "
+#~ "<filename>/etc/group</filename> и <filename>/etc/gshadow</filename>. "
+#~ "Пользователь может указать другие файлы с помощью параметров <emphasis "
+#~ "remap=\"I\">shadow</emphasis>. Также, пользователь может запустить "
+#~ "команду в режиме только для чтения, указав параметр <option>-r</option>. "
+#~ "Это приведёт к автоматическому ответу <emphasis>нет</emphasis> без "
+#~ "подтверждения пользователя. Команда <command>grpck</command> также может "
+#~ "отсортировать записи в файлах <filename>/etc/group</filename> и "
+#~ "<filename>/etc/gshadow</filename> по номеру группы. Для запуска режима "
+#~ "сортировки укажите параметр <option>-s</option>. В этом режиме проверка "
+#~ "не выполняется, производится только сортировка."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid "MAIL_DIR USERDEL_CMD"
+#~ msgstr "MAIL_DIR USERDEL_CMD"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><emphasis>
+#~ msgid "MAIL_DIR"
+#~ msgstr "MAIL_DIR"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid "CHFN_AUTH"
+#~ msgstr "CHFN_AUTH"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid "GID_MAX GID_MIN"
+#~ msgstr "GID_MAX GID_MIN"
+
+# type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para>
+#~ msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+#~ msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+
+# type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para>
+#~ msgid ""
+#~ "The name of the new user's login shell. The named program will be used "
+#~ "for all future new user accounts."
+#~ msgstr ""
+#~ "Имя новой регистрационной оболочки пользователя. Данная программа будет "
+#~ "использована для всех новых пользовательских учётных записей."
+
+#~ msgid ""
+#~ "If no options are specified, <command>useradd</command> displays the "
+#~ "current default values."
+#~ msgstr ""
+#~ "Если программа запущена без параметров, <command>useradd</command> "
+#~ "покажет текущие значения по умолчанию."
+
+#~ msgid "-R <placeholder-1/>"
+#~ msgstr "-R <placeholder-1/>"
+
+# type: Content of: <refentry><refsynopsisdiv><cmdsynopsis><arg><replaceable>
+#~ msgid "user,"
+#~ msgstr "пользователь,"
+
+#~ msgid "-A <placeholder-1/>"
+#~ msgstr "-A <placeholder-1/>"
+
+#~ msgid "-M <placeholder-1/>"
+#~ msgstr "-M <placeholder-1/>"
+
+#~ msgid ""
+#~ "Group administrator can add and delete users using <option>-a</option> "
+#~ "and <option>-d</option> options respectively. Administrators can use "
+#~ "<option>-r</option> option to remove group password. When no password is "
+#~ "set only group members can use <command>newgrp</command> to join the "
+#~ "group. Option <option>-R</option> disables access via a password to the "
+#~ "group through <command>newgrp</command> command (however members will "
+#~ "still be able to switch to this group)."
+#~ msgstr ""
+#~ "Администратор группы может добавлять и удалять пользователей с помощью "
+#~ "параметров <option>-a</option> и <option>-d</option> соответственно. "
+#~ "Администраторы могут использовать параметр <option>-r</option> для "
+#~ "удаления пароля группы. Если пароль не задан, то только члены группы с "
+#~ "помощью команды <command>newgrp</command> могут войти в группу. Указав "
+#~ "параметр <option>-R</option> можно запретить доступ в группу по паролю с "
+#~ "помощью команды <command>newgrp</command> (однако на членов группы это не "
+#~ "распространяется)."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
diff --git a/man/po/shadow-man-pages.pot b/man/po/shadow-man-pages.pot
new file mode 100644 (file)
index 0000000..932c825
--- /dev/null
@@ -0,0 +1,4424 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2009-07-24 03:03+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: vipw.8.xml:38(refentrytitle) vipw.8.xml:43(refname) vipw.8.xml:52(command) 
+msgid "vipw"
+msgstr ""
+
+#: vipw.8.xml:39(manvolnum) usermod.8.xml:40(manvolnum) userdel.8.xml:42(manvolnum) userdel.8.xml:199(replaceable) useradd.8.xml:50(manvolnum) pwconv.8.xml:43(manvolnum) pwck.8.xml:41(manvolnum) nologin.8.xml:35(manvolnum) newusers.8.xml:51(manvolnum) logoutd.8.xml:35(manvolnum) lastlog.8.xml:36(manvolnum) grpck.8.xml:39(manvolnum) groupmod.8.xml:39(manvolnum) groupmems.8.xml:39(manvolnum) groupdel.8.xml:39(manvolnum) groupdel.8.xml:130(replaceable) groupadd.8.xml:43(manvolnum) faillog.8.xml:35(manvolnum) faillog.5.xml:86(manvolnum) chpasswd.8.xml:42(manvolnum) chgpasswd.8.xml:43(manvolnum) 
+msgid "8"
+msgstr ""
+
+#: vipw.8.xml:40(refmiscinfo) usermod.8.xml:41(refmiscinfo) userdel.8.xml:43(refmiscinfo) useradd.8.xml:51(refmiscinfo) pwconv.8.xml:44(refmiscinfo) pwck.8.xml:42(refmiscinfo) nologin.8.xml:36(refmiscinfo) newusers.8.xml:52(refmiscinfo) logoutd.8.xml:36(refmiscinfo) lastlog.8.xml:37(refmiscinfo) grpck.8.xml:40(refmiscinfo) groupmod.8.xml:40(refmiscinfo) groupmems.8.xml:40(refmiscinfo) groupdel.8.xml:40(refmiscinfo) groupadd.8.xml:44(refmiscinfo) faillog.8.xml:36(refmiscinfo) chpasswd.8.xml:43(refmiscinfo) chgpasswd.8.xml:44(refmiscinfo) 
+msgid "System Management Commands"
+msgstr ""
+
+#: vipw.8.xml:44(refname) vipw.8.xml:58(command) 
+msgid "vigr"
+msgstr ""
+
+#: vipw.8.xml:45(refpurpose) 
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr ""
+
+#: vipw.8.xml:54(replaceable) vipw.8.xml:60(replaceable) usermod.8.xml:52(replaceable) userdel.8.xml:52(arg) useradd.8.xml:61(replaceable) useradd.8.xml:73(replaceable) su.1.xml:66(replaceable) passwd.1.xml:57(replaceable) newusers.8.xml:63(replaceable) lastlog.8.xml:48(replaceable) groupmod.8.xml:51(replaceable) groupadd.8.xml:55(replaceable) faillog.8.xml:47(replaceable) chsh.1.xml:53(replaceable) chpasswd.8.xml:54(replaceable) chgpasswd.8.xml:55(replaceable) chage.1.xml:46(replaceable) 
+msgid "options"
+msgstr ""
+
+#: vipw.8.xml:66(title) usermod.8.xml:59(title) userdel.8.xml:60(title) useradd.8.xml:79(title) suauth.5.xml:50(title) su.1.xml:77(title) sg.1.xml:59(title) shadow.5.xml:44(title) shadow.3.xml:93(title) shadow.3.xml:149(title) pwconv.8.xml:70(title) pwck.8.xml:83(title) porttime.5.xml:44(title) passwd.5.xml:44(title) passwd.1.xml:66(title) nologin.8.xml:50(title) newusers.8.xml:70(title) newgrp.1.xml:55(title) logoutd.8.xml:50(title) login.defs.5.xml:107(title) login.access.5.xml:45(title) login.1.xml:103(title) limits.5.xml:46(title) lastlog.8.xml:54(title) gshadow.5.xml:43(title) grpck.8.xml:69(title) groups.1.xml:53(title) groupmod.8.xml:58(title) groupmems.8.xml:60(title) groupdel.8.xml:57(title) groupadd.8.xml:64(title) gpasswd.1.xml:72(title) faillog.8.xml:53(title) faillog.5.xml:44(title) expiry.1.xml:59(title) chsh.1.xml:62(title) chpasswd.8.xml:60(title) chgpasswd.8.xml:61(title) chfn.1.xml:63(title) chage.1.xml:55(title) 
+msgid "DESCRIPTION"
+msgstr ""
+
+#: vipw.8.xml:67(para) 
+msgid "The <command>vipw</command> and <command>vigr</command> commands edits the files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, respectively. With the <option>-s</option> flag, they will edit the shadow versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/gshadow</filename>, respectively. The programs will set the appropriate locks to prevent file corruption. When looking for an editor, the programs will first try the environment variable <envar>$VISUAL</envar>, then the environment variable <envar>$EDITOR</envar>, and finally the default editor, <citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+msgstr ""
+
+#: vipw.8.xml:84(title) usermod.8.xml:67(title) userdel.8.xml:69(title) useradd.8.xml:97(title) su.1.xml:123(title) pwck.8.xml:164(title) passwd.1.xml:152(title) newusers.8.xml:239(title) login.1.xml:188(title) lastlog.8.xml:66(title) grpck.8.xml:133(title) groupmod.8.xml:67(title) groupmems.8.xml:75(title) groupadd.8.xml:73(title) gpasswd.1.xml:112(title) faillog.8.xml:64(title) chsh.1.xml:73(title) chpasswd.8.xml:109(title) chgpasswd.8.xml:88(title) chage.1.xml:65(title) 
+msgid "OPTIONS"
+msgstr ""
+
+#: vipw.8.xml:85(para) 
+msgid "The options which apply to the <command>vipw</command> and <command>vigr</command> commands are:"
+msgstr ""
+
+#: vipw.8.xml:91(term) 
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr ""
+
+#: vipw.8.xml:93(para) 
+msgid "Edit group database."
+msgstr ""
+
+#: vipw.8.xml:97(term) userdel.8.xml:99(term) useradd.8.xml:247(term) passwd.1.xml:192(term) newusers.8.xml:257(term) lastlog.8.xml:82(term) groupmod.8.xml:98(term) groupadd.8.xml:108(term) faillog.8.xml:80(term) chsh.1.xml:79(term) chpasswd.8.xml:137(term) chgpasswd.8.xml:114(term) chage.1.xml:103(term) 
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr ""
+
+#: vipw.8.xml:99(para) userdel.8.xml:101(para) useradd.8.xml:249(para) passwd.1.xml:194(para) newusers.8.xml:259(para) lastlog.8.xml:86(para) groupmod.8.xml:100(para) groupadd.8.xml:110(para) faillog.8.xml:82(para) chsh.1.xml:81(para) chpasswd.8.xml:139(para) chgpasswd.8.xml:116(para) chage.1.xml:105(para) 
+msgid "Display help message and exit."
+msgstr ""
+
+#: vipw.8.xml:103(term) 
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr ""
+
+#: vipw.8.xml:105(para) 
+msgid "Edit passwd database."
+msgstr ""
+
+#: vipw.8.xml:109(term) passwd.1.xml:259(term) 
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr ""
+
+#: vipw.8.xml:111(para) passwd.1.xml:263(para) 
+msgid "Quiet mode."
+msgstr ""
+
+#: vipw.8.xml:115(term) 
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr ""
+
+#: vipw.8.xml:117(para) 
+msgid "Edit shadow or gshadow database."
+msgstr ""
+
+#: vipw.8.xml:124(title) usermod.8.xml:372(title) userdel.8.xml:140(title) useradd.8.xml:644(title) suauth.5.xml:168(title) su.1.xml:338(title) sg.1.xml:88(title) shadow.5.xml:230(title) shadow.3.xml:201(title) pwconv.8.xml:168(title) pwck.8.xml:227(title) porttime.5.xml:105(title) passwd.5.xml:116(title) passwd.1.xml:374(title) newusers.8.xml:357(title) newgrp.1.xml:99(title) logoutd.8.xml:64(title) login.access.5.xml:96(title) login.1.xml:316(title) limits.5.xml:140(title) lastlog.8.xml:147(title) gshadow.5.xml:141(title) grpck.8.xml:185(title) groups.1.xml:75(title) groupmod.8.xml:164(title) groupmems.8.xml:168(title) groupdel.8.xml:89(title) groupadd.8.xml:200(title) gpasswd.1.xml:233(title) faillog.8.xml:202(title) faillog.5.xml:71(title) expiry.1.xml:68(title) chsh.1.xml:133(title) chpasswd.8.xml:208(title) chgpasswd.8.xml:184(title) chfn.1.xml:113(title) chage.1.xml:206(title) 
+msgid "FILES"
+msgstr ""
+
+#: vipw.8.xml:127(filename) usermod.8.xml:375(filename) userdel.8.xml:143(filename) useradd.8.xml:659(filename) sg.1.xml:103(filename) pwck.8.xml:230(filename) newusers.8.xml:372(filename) newgrp.1.xml:114(filename) gshadow.5.xml:144(filename) grpck.8.xml:188(filename) groups.1.xml:78(filename) groupmod.8.xml:167(filename) groupmems.8.xml:171(filename) groupdel.8.xml:92(filename) groupadd.8.xml:203(filename) gpasswd.1.xml:50(filename) gpasswd.1.xml:53(filename) gpasswd.1.xml:236(filename) chgpasswd.8.xml:187(filename) 
+msgid "/etc/group"
+msgstr ""
+
+#: vipw.8.xml:129(para) usermod.8.xml:377(para) userdel.8.xml:145(para) useradd.8.xml:661(para) sg.1.xml:105(para) pwck.8.xml:232(para) newusers.8.xml:374(para) newgrp.1.xml:116(para) gshadow.5.xml:146(para) grpck.8.xml:190(para) groups.1.xml:80(para) groupmod.8.xml:169(para) groupmems.8.xml:173(para) groupdel.8.xml:94(para) groupadd.8.xml:205(para) gpasswd.1.xml:238(para) chgpasswd.8.xml:189(para) 
+msgid "Group account information."
+msgstr ""
+
+#: vipw.8.xml:133(filename) usermod.8.xml:381(filename) useradd.8.xml:665(filename) sg.1.xml:109(filename) newusers.8.xml:378(filename) newgrp.1.xml:120(filename) gshadow.5.xml:150(filename) grpck.8.xml:194(filename) groupmod.8.xml:173(filename) groupmems.8.xml:177(filename) groupdel.8.xml:98(filename) groupadd.8.xml:209(filename) gpasswd.1.xml:54(filename) gpasswd.1.xml:242(filename) chgpasswd.8.xml:193(filename) 
+msgid "/etc/gshadow"
+msgstr ""
+
+#: vipw.8.xml:135(para) usermod.8.xml:383(para) useradd.8.xml:667(para) sg.1.xml:111(para) newusers.8.xml:380(para) newgrp.1.xml:122(para) gshadow.5.xml:152(para) grpck.8.xml:196(para) groupmod.8.xml:175(para) groupdel.8.xml:100(para) groupadd.8.xml:211(para) gpasswd.1.xml:244(para) chgpasswd.8.xml:195(para) 
+msgid "Secure group account information."
+msgstr ""
+
+#: vipw.8.xml:139(filename) usermod.8.xml:387(filename) userdel.8.xml:155(filename) useradd.8.xml:647(filename) su.1.xml:341(filename) sg.1.xml:91(filename) shadow.5.xml:233(filename) pwck.8.xml:236(filename) passwd.5.xml:119(filename) passwd.1.xml:377(filename) newusers.8.xml:360(filename) newgrp.1.xml:102(filename) login.1.xml:331(filename) grpck.8.xml:200(filename) expiry.1.xml:71(filename) chsh.1.xml:136(filename) chpasswd.8.xml:211(filename) chfn.1.xml:122(filename) chage.1.xml:210(filename) 
+msgid "/etc/passwd"
+msgstr ""
+
+#: vipw.8.xml:141(para) usermod.8.xml:389(para) userdel.8.xml:157(para) useradd.8.xml:649(para) su.1.xml:343(para) sg.1.xml:93(para) shadow.5.xml:235(para) pwck.8.xml:238(para) passwd.5.xml:121(para) passwd.1.xml:379(para) newusers.8.xml:362(para) newgrp.1.xml:104(para) login.1.xml:333(para) grpck.8.xml:202(para) expiry.1.xml:73(para) chsh.1.xml:138(para) chpasswd.8.xml:213(para) chfn.1.xml:124(para) chage.1.xml:213(para) 
+msgid "User account information."
+msgstr ""
+
+#: vipw.8.xml:145(filename) usermod.8.xml:393(filename) userdel.8.xml:161(filename) useradd.8.xml:653(filename) su.1.xml:347(filename) sg.1.xml:97(filename) shadow.5.xml:239(filename) shadow.3.xml:204(filename) pwck.8.xml:242(filename) passwd.5.xml:125(filename) passwd.1.xml:383(filename) newusers.8.xml:366(filename) newgrp.1.xml:108(filename) login.1.xml:337(filename) expiry.1.xml:77(filename) chpasswd.8.xml:217(filename) chage.1.xml:218(filename) 
+msgid "/etc/shadow"
+msgstr ""
+
+#: vipw.8.xml:147(para) usermod.8.xml:395(para) userdel.8.xml:163(para) useradd.8.xml:655(para) su.1.xml:349(para) sg.1.xml:99(para) shadow.5.xml:241(para) shadow.3.xml:206(para) pwck.8.xml:244(para) passwd.1.xml:385(para) newusers.8.xml:368(para) newgrp.1.xml:110(para) login.1.xml:339(para) expiry.1.xml:79(para) chpasswd.8.xml:219(para) chage.1.xml:221(para) 
+msgid "Secure user account information."
+msgstr ""
+
+#: vipw.8.xml:154(title) usermod.8.xml:402(title) userdel.8.xml:248(title) useradd.8.xml:761(title) suauth.5.xml:197(title) su.1.xml:362(title) sg.1.xml:118(title) shadow.5.xml:258(title) shadow.3.xml:213(title) pwconv.8.xml:180(title) pwck.8.xml:302(title) porttime.5.xml:117(title) passwd.5.xml:144(title) passwd.1.xml:455(title) nologin.8.xml:64(title) newusers.8.xml:399(title) newgrp.1.xml:129(title) login.defs.5.xml:471(title) login.access.5.xml:108(title) login.1.xml:376(title) limits.5.xml:150(title) gshadow.5.xml:159(title) grpck.8.xml:254(title) groups.1.xml:87(title) groupmod.8.xml:233(title) groupmems.8.xml:186(title) groupdel.8.xml:146(title) groupadd.8.xml:291(title) gpasswd.1.xml:251(title) faillog.8.xml:214(title) faillog.5.xml:83(title) expiry.1.xml:86(title) chsh.1.xml:157(title) chpasswd.8.xml:238(title) chgpasswd.8.xml:208(title) chfn.1.xml:131(title) chage.1.xml:261(title) 
+msgid "SEE ALSO"
+msgstr ""
+
+#: vipw.8.xml:155(para) 
+msgid "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></citerefentry><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: usermod.8.xml:39(refentrytitle) usermod.8.xml:44(refname) usermod.8.xml:50(command) login.defs.5.xml:443(term) 
+msgid "usermod"
+msgstr ""
+
+#: usermod.8.xml:45(refpurpose) 
+msgid "modify a user account"
+msgstr ""
+
+#: usermod.8.xml:54(replaceable) userdel.8.xml:54(replaceable) useradd.8.xml:63(replaceable) passwd.1.xml:60(replaceable) chsh.1.xml:56(replaceable) chage.1.xml:49(replaceable) 
+msgid "LOGIN"
+msgstr ""
+
+#: usermod.8.xml:60(para) 
+msgid "The <command>usermod</command> command modifies the system account files to reflect the changes that are specified on the command line."
+msgstr ""
+
+#: usermod.8.xml:68(para) 
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr ""
+
+#: usermod.8.xml:74(term) 
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr ""
+
+#: usermod.8.xml:78(para) 
+msgid "Add the user to the supplementary group(s). Use only with the <option>-G</option> option."
+msgstr ""
+
+#: usermod.8.xml:85(term) useradd.8.xml:125(term) 
+msgid "<option>-c</option>, <option>--comment</option><replaceable>COMMENT</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:90(para) 
+msgid "The new value of the user's password file comment field. It is normally modified using the <citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+
+#: usermod.8.xml:99(term) useradd.8.xml:138(term) 
+msgid "<option>-d</option>, <option>--home</option><replaceable>HOME_DIR</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:104(para) 
+msgid "The user's new login directory."
+msgstr ""
+
+#: usermod.8.xml:107(para) 
+msgid "If the <option>-m</option> option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist."
+msgstr ""
+
+#: usermod.8.xml:116(term) useradd.8.xml:165(term) useradd.8.xml:518(term) 
+msgid "<option>-e</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:121(para) useradd.8.xml:170(para) 
+msgid "The date on which the user account will be disabled. The date is specified in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+
+#: usermod.8.xml:128(term) useradd.8.xml:183(term) useradd.8.xml:531(term) 
+msgid "<option>-f</option>, <option>--inactive</option><replaceable>INACTIVE</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:133(para) 
+msgid "The number of days after a password expires until the account is permanently disabled."
+msgstr ""
+
+#: usermod.8.xml:137(para) 
+msgid "A value of 0 disables the account as soon as the password has expired, and a value of -1 disables the feature."
+msgstr ""
+
+#: usermod.8.xml:145(term) useradd.8.xml:203(term) useradd.8.xml:547(term) 
+msgid "<option>-g</option>, <option>--gid</option><replaceable>GROUP</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:150(para) 
+msgid "The group name or number of the user's new initial login group. The group must exist."
+msgstr ""
+
+#: usermod.8.xml:157(term) useradd.8.xml:231(term) 
+msgid "<option>-G</option>, <option>--groups</option><replaceable>GROUP1</replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I\">,GROUPN</emphasis>]]]"
+msgstr ""
+
+#: usermod.8.xml:162(para) 
+msgid "A list of supplementary groups which the user is also a member of. Each group is separated from the next by a comma, with no intervening whitespace. The groups are subject to the same restrictions as the group given with the <option>-g</option> option."
+msgstr ""
+
+#: usermod.8.xml:169(para) 
+msgid "If the user is currently a member of a group which is not listed, the user will be removed from the group. This behaviour can be changed via the <option>-a</option> option, which appends the user to the current supplementary group list."
+msgstr ""
+
+#: usermod.8.xml:178(term) 
+msgid "<option>-l</option>, <option>--login</option><replaceable>NEW_LOGIN</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:183(para) 
+msgid "The name of the user will be changed from <replaceable>LOGIN</replaceable> to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In particular, the user's home directory name should probably be changed manually to reflect the new login name."
+msgstr ""
+
+#: usermod.8.xml:193(term) 
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr ""
+
+#: usermod.8.xml:197(para) 
+msgid "Lock a user's password. This puts a '!' in front of the encrypted password, effectively disabling the password. You can't use this option with <option>-p</option> or <option>-U</option>."
+msgstr ""
+
+#: usermod.8.xml:203(para) 
+msgid "Note: if you wish to lock the account (not only access with a password), you should also set the <replaceable>EXPIRE_DATE</replaceable> to <replaceable>1</replaceable>."
+msgstr ""
+
+#: usermod.8.xml:212(term) 
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr ""
+
+#: usermod.8.xml:216(para) 
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+
+#: usermod.8.xml:220(para) 
+msgid "This option is only valid in combination with the <option>-d</option> (or <option>--home</option>) option."
+msgstr ""
+
+#: usermod.8.xml:227(term) useradd.8.xml:366(term) groupmod.8.xml:116(term) groupadd.8.xml:135(term) 
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr ""
+
+#: usermod.8.xml:231(para) 
+msgid "When used with the <option>-u</option> option, this option allows to change the user ID to a non-unique value."
+msgstr ""
+
+#: usermod.8.xml:238(term) useradd.8.xml:378(term) groupmod.8.xml:127(term) groupadd.8.xml:145(term) 
+msgid "<option>-p</option>, <option>--password</option><replaceable>PASSWORD</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:243(para) groupmod.8.xml:132(para) 
+msgid "The encrypted password, as returned by <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+
+#: usermod.8.xml:248(para) useradd.8.xml:388(para) groupmod.8.xml:137(para) groupadd.8.xml:155(para) 
+msgid "<emphasis role=\"bold\">Note:</emphasis> This option is not recommended because the password (or encrypted password) will be visible by users listing the processes."
+msgstr ""
+
+#: usermod.8.xml:253(para) 
+msgid "The password will be written in the local <filename>/etc/passwd</filename> or <filename>/etc/shadow</filename> file. This might differ from the password database configured in your PAM configuration."
+msgstr ""
+
+#: usermod.8.xml:259(para) useradd.8.xml:393(para) groupmod.8.xml:142(para) groupadd.8.xml:160(para) 
+msgid "You should make sure the password respects the system's password policy."
+msgstr ""
+
+#: usermod.8.xml:266(term) useradd.8.xml:427(term) useradd.8.xml:568(term) su.1.xml:157(term) chsh.1.xml:85(term) 
+msgid "<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:271(para) chsh.1.xml:89(para) 
+msgid "The name of the user's new login shell. Setting this field to blank causes the system to select the default login shell."
+msgstr ""
+
+#: usermod.8.xml:278(term) useradd.8.xml:442(term) 
+msgid "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:283(para) 
+msgid "The new numerical value of the user's ID."
+msgstr ""
+
+#: usermod.8.xml:286(para) 
+msgid "This value must be unique, unless the <option>-o</option> option is used. The value must be non-negative. Values between 0 and 999 are typically reserved for system accounts."
+msgstr ""
+
+#: usermod.8.xml:292(para) 
+msgid "The user's mailbox, and any files which the user owns and which are located in the user's home directory will have the file user ID changed automatically."
+msgstr ""
+
+#: usermod.8.xml:297(para) 
+msgid "The ownership of files outside of the user's home directory must be fixed manually."
+msgstr ""
+
+#: usermod.8.xml:304(term) 
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr ""
+
+#: usermod.8.xml:308(para) 
+msgid "Unlock a user's password. This removes the '!' in front of the encrypted password. You can't use this option with <option>-p</option> or <option>-L</option>."
+msgstr ""
+
+#: usermod.8.xml:313(para) 
+msgid "Note: if you wish to unlock the account (not only access with a password), you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+
+#: usermod.8.xml:324(term) useradd.8.xml:474(term) 
+msgid "<option>-Z</option>, <option>--selinux-user</option><replaceable>SEUSER</replaceable>"
+msgstr ""
+
+#: usermod.8.xml:329(para) 
+msgid "The SELinux user for the user's login. The default is to leave this field the blank, which causes the system to select the default SELinux user."
+msgstr ""
+
+#: usermod.8.xml:340(title) userdel.8.xml:221(title) useradd.8.xml:597(title) su.1.xml:302(title) shadow.3.xml:193(title) passwd.1.xml:338(title) newusers.8.xml:312(title) login.1.xml:238(title) lastlog.8.xml:159(title) groupdel.8.xml:65(title) groupadd.8.xml:224(title) gpasswd.1.xml:206(title) faillog.8.xml:191(title) chpasswd.8.xml:182(title) chgpasswd.8.xml:157(title) 
+msgid "CAVEATS"
+msgstr ""
+
+#: usermod.8.xml:341(para) 
+msgid "You must make certain that the named user is not executing any processes when this command is being executed if the user's numerical user ID, the user's name, or the user's home directory is being changed. <command>usermod</command> checks this on Linux, but only check if the user is logged in according to utmp on other architectures."
+msgstr ""
+
+#: usermod.8.xml:349(para) 
+msgid "You must change the owner of any <command>crontab</command> files or <command>at</command> jobs manually."
+msgstr ""
+
+#: usermod.8.xml:353(para) 
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+
+#: usermod.8.xml:359(title) userdel.8.xml:125(title) useradd.8.xml:621(title) su.1.xml:310(title) sg.1.xml:76(title) pwconv.8.xml:146(title) pwck.8.xml:213(title) passwd.1.xml:356(title) newusers.8.xml:324(title) newgrp.1.xml:87(title) login.1.xml:272(title) grpck.8.xml:173(title) groupmod.8.xml:152(title) groupmems.8.xml:156(title) groupdel.8.xml:77(title) groupadd.8.xml:186(title) gpasswd.1.xml:218(title) chsh.1.xml:120(title) chpasswd.8.xml:194(title) chgpasswd.8.xml:169(title) chfn.1.xml:99(title) 
+msgid "CONFIGURATION"
+msgstr ""
+
+#: usermod.8.xml:360(para) userdel.8.xml:126(para) useradd.8.xml:622(para) su.1.xml:311(para) sg.1.xml:77(para) pwck.8.xml:214(para) passwd.1.xml:357(para) newusers.8.xml:325(para) newgrp.1.xml:88(para) login.1.xml:273(para) grpck.8.xml:174(para) groupmod.8.xml:153(para) groupmems.8.xml:157(para) groupdel.8.xml:78(para) groupadd.8.xml:187(para) gpasswd.1.xml:219(para) chsh.1.xml:121(para) chpasswd.8.xml:195(para) chgpasswd.8.xml:170(para) chfn.1.xml:100(para) 
+msgid "The following configuration variables in <filename>/etc/login.defs</filename> change the behavior of this tool:"
+msgstr ""
+
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr ""
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "The mail spool directory. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted. If not specified, a compile-time default is used."
+msgstr ""
+
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term) su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term) 
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr ""
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para) su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para) 
+msgid "Defines the location of the users mail spool files relatively to their home directory."
+msgstr ""
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para) su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para) 
+msgid "The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are used by <command>useradd</command>, <command>usermod</command>, and <command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para) su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para) 
+msgid "If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</replaceable>, they are also used to define the <envar>MAIL</envar> environment variable."
+msgstr ""
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term) pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term) grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term) groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term) chgpasswd.8.xml:30(term) 
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para) pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para) grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para) groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para) chgpasswd.8.xml:32(para) 
+msgid "Maximum members per group entry. When the maximum is reached, a new group entry (line) is started in <filename>/etc/group</filename> (with the same name, same password, and same GID)."
+msgstr ""
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para) pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para) grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para) groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para) chgpasswd.8.xml:37(para) 
+msgid "The default value is 0, meaning that there are no limits in the number of members in a group."
+msgstr ""
+
+#. Note: on HP, split groups have the same ID, but different
+#.                names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para) pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para) grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para) groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para) chgpasswd.8.xml:43(para) 
+msgid "This feature (split group) permits to limit the length of lines in the group file. This is useful to make sure that lines for NIS groups are not larger than 1024 characters."
+msgstr ""
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para) pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para) grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para) groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para) chgpasswd.8.xml:48(para) 
+msgid "If you need to enforce such limit, you can use 25."
+msgstr ""
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para) pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para) grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para) groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para) chgpasswd.8.xml:51(para) 
+msgid "Note: split groups may not be supported by all tools (even in the Shadow toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+
+#: usermod.8.xml:403(para) 
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: userdel.8.xml:41(refentrytitle) userdel.8.xml:46(refname) userdel.8.xml:51(command) login.defs.5.xml:434(term) 
+msgid "userdel"
+msgstr ""
+
+#: userdel.8.xml:47(refpurpose) 
+msgid "delete a user account and related files"
+msgstr ""
+
+#: userdel.8.xml:61(para) 
+msgid "The <command>userdel</command> command modifies the system account files, deleting all entries that refer to the user name <emphasis remap=\"I\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+
+#: userdel.8.xml:70(para) 
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr ""
+
+#: userdel.8.xml:75(term) groupadd.8.xml:80(term) 
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr ""
+
+#: userdel.8.xml:79(para) 
+msgid "This option forces the removal of the user account, even if the user is still logged in. It also forces <command>userdel</command> to remove the user's home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user. If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</emphasis> in <filename>/etc/login.defs</filename> and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user."
+msgstr ""
+
+#: userdel.8.xml:92(para) 
+msgid "<emphasis>Note:</emphasis> This option is dangerous and may leave your system in an inconsistent state."
+msgstr ""
+
+#: userdel.8.xml:105(term) 
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr ""
+
+#: userdel.8.xml:109(para) 
+msgid "Files in the user's home directory will be removed along with the home directory itself and the user's mail spool. Files located in other file systems will have to be searched for and deleted manually."
+msgstr ""
+
+#: userdel.8.xml:115(para) 
+msgid "The mail spool is defined by the <option>MAIL_DIR</option> variable in the <filename>login.defs</filename> file."
+msgstr ""
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term) 
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr ""
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para) 
+msgid "If defined, this command is run when removing a user. It should remove any at/cron/print jobs etc. owned by the user to be removed (passed as the first argument)."
+msgstr ""
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para) 
+msgid "The return code of the script is not taken into account."
+msgstr ""
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting) 
+#, no-wrap
+msgid "\n#! /bin/sh\n\n# Check for the required argument.\nif [ $# != 1 ]; then\n\techo \"Usage: $0 username\"\n\texit 1\nfi\n\n# Remove cron jobs.\ncrontab -r -u $1\n\n# Remove at jobs.\n# Note that it will remove any jobs owned by the same UID,\n# even if it was shared by a different username.\nAT_SPOOL_DIR=/var/spool/cron/atjobs\nfind $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n\n# Remove print jobs.\nlprm $1\n\n# All done.\nexit 0\n      "
+msgstr ""
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para) 
+msgid "Here is an example script, which removes the user's cron, at and print jobs: <placeholder-1/>"
+msgstr ""
+
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr ""
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Enable setting of the umask group bits to be the same as owner bits (examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is the same as gid, and username is the same as the primary group name."
+msgstr ""
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para) 
+msgid "If set to <replaceable>yes</replaceable>, <command>userdel</command> will remove the user's group if it contains no more members, and <command>useradd</command> will create by default a group with the name of the user."
+msgstr ""
+
+#: userdel.8.xml:149(filename) useradd.8.xml:683(filename) su.1.xml:353(filename) pwconv.8.xml:171(filename) passwd.1.xml:389(filename) newusers.8.xml:384(filename) login.access.5.xml:99(filename) login.1.xml:367(filename) groupadd.8.xml:215(filename) chsh.1.xml:148(filename) chpasswd.8.xml:223(filename) chgpasswd.8.xml:199(filename) chfn.1.xml:116(filename) 
+msgid "/etc/login.defs"
+msgstr ""
+
+#: userdel.8.xml:151(para) useradd.8.xml:685(para) su.1.xml:355(para) pwconv.8.xml:173(para) passwd.1.xml:391(para) newusers.8.xml:386(para) login.access.5.xml:101(para) login.1.xml:369(para) groupadd.8.xml:217(para) chsh.1.xml:150(para) chpasswd.8.xml:225(para) chgpasswd.8.xml:201(para) chfn.1.xml:118(para) 
+msgid "Shadow password suite configuration."
+msgstr ""
+
+#: userdel.8.xml:170(title) useradd.8.xml:692(title) pwck.8.xml:251(title) passwd.1.xml:404(title) grpck.8.xml:209(title) groupmod.8.xml:182(title) groupdel.8.xml:107(title) groupadd.8.xml:246(title) chage.1.xml:228(title) 
+msgid "EXIT VALUES"
+msgstr ""
+
+#: userdel.8.xml:175(replaceable) useradd.8.xml:697(replaceable) pwck.8.xml:256(replaceable) passwd.1.xml:409(replaceable) grpck.8.xml:214(replaceable) groupmod.8.xml:187(replaceable) groupdel.8.xml:112(replaceable) groupadd.8.xml:251(replaceable) chage.1.xml:233(replaceable) 
+msgid "0"
+msgstr ""
+
+#: userdel.8.xml:177(para) useradd.8.xml:699(para) pwck.8.xml:258(para) passwd.1.xml:411(para) grpck.8.xml:216(para) groupmod.8.xml:189(para) groupdel.8.xml:114(para) groupadd.8.xml:253(para) chage.1.xml:235(para) 
+msgid "success"
+msgstr ""
+
+#: userdel.8.xml:181(replaceable) useradd.8.xml:703(replaceable) su.1.xml:55(manvolnum) sg.1.xml:39(manvolnum) pwck.8.xml:262(replaceable) passwd.1.xml:45(manvolnum) passwd.1.xml:415(replaceable) newgrp.1.xml:39(manvolnum) login.1.xml:71(manvolnum) grpck.8.xml:220(replaceable) groups.1.xml:35(manvolnum) gpasswd.1.xml:43(manvolnum) expiry.1.xml:42(manvolnum) chsh.1.xml:41(manvolnum) chfn.1.xml:42(manvolnum) chage.1.xml:35(manvolnum) chage.1.xml:239(replaceable) 
+msgid "1"
+msgstr ""
+
+#: userdel.8.xml:183(para) useradd.8.xml:705(para) 
+msgid "can't update password file"
+msgstr ""
+
+#: userdel.8.xml:187(replaceable) useradd.8.xml:709(replaceable) pwck.8.xml:268(replaceable) passwd.1.xml:421(replaceable) grpck.8.xml:226(replaceable) groupmod.8.xml:193(replaceable) groupdel.8.xml:118(replaceable) groupadd.8.xml:257(replaceable) chage.1.xml:245(replaceable) 
+msgid "2"
+msgstr ""
+
+#: userdel.8.xml:189(para) useradd.8.xml:711(para) pwck.8.xml:264(para) grpck.8.xml:222(para) groupmod.8.xml:195(para) groupdel.8.xml:120(para) groupadd.8.xml:259(para) chage.1.xml:247(para) 
+msgid "invalid command syntax"
+msgstr ""
+
+#: userdel.8.xml:193(replaceable) useradd.8.xml:727(replaceable) pwck.8.xml:292(replaceable) passwd.1.xml:445(replaceable) groupmod.8.xml:211(replaceable) groupdel.8.xml:124(replaceable) 
+msgid "6"
+msgstr ""
+
+#: userdel.8.xml:195(para) 
+msgid "specified user doesn't exist"
+msgstr ""
+
+#: userdel.8.xml:201(para) 
+msgid "user currently logged in"
+msgstr ""
+
+#: userdel.8.xml:205(replaceable) useradd.8.xml:739(replaceable) groupmod.8.xml:223(replaceable) groupdel.8.xml:136(replaceable) groupadd.8.xml:281(replaceable) 
+msgid "10"
+msgstr ""
+
+#: userdel.8.xml:207(para) useradd.8.xml:741(para) groupmod.8.xml:225(para) groupdel.8.xml:138(para) groupadd.8.xml:283(para) 
+msgid "can't update group file"
+msgstr ""
+
+#: userdel.8.xml:211(replaceable) useradd.8.xml:745(replaceable) 
+msgid "12"
+msgstr ""
+
+#: userdel.8.xml:213(para) 
+msgid "can't remove home directory"
+msgstr ""
+
+#: userdel.8.xml:171(para) 
+msgid "The <command>userdel</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: userdel.8.xml:222(para) 
+msgid "<command>userdel</command> will not allow you to remove an account if there are running processes which belong to this account. In that case, you may have to kill those processes or lock the user's password or account and remove the account later. The <option>-f</option> option can force the deletion of this account."
+msgstr ""
+
+#: userdel.8.xml:229(para) 
+msgid "You should manually check all file systems to ensure that no files remain owned by this user."
+msgstr ""
+
+#: userdel.8.xml:233(para) 
+msgid "You may not remove any NIS attributes on a NIS client. This must be performed on the NIS server."
+msgstr ""
+
+#: userdel.8.xml:236(para) 
+msgid "If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</command> will delete the group with the same name as the user. To avoid inconsistencies in the passwd and group databases, <command>userdel</command> will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise. The <option>-f</option> option can force the deletion of this group."
+msgstr ""
+
+#: userdel.8.xml:249(para) 
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: useradd.8.xml:49(refentrytitle) useradd.8.xml:54(refname) useradd.8.xml:59(command) useradd.8.xml:66(command) useradd.8.xml:70(command) login.defs.5.xml:421(term) 
+msgid "useradd"
+msgstr ""
+
+#: useradd.8.xml:55(refpurpose) 
+msgid "create a new user or update default new user information"
+msgstr ""
+
+#: useradd.8.xml:67(arg) useradd.8.xml:71(arg) 
+msgid "-D"
+msgstr ""
+
+#: useradd.8.xml:80(para) 
+msgid "When invoked without the <option>-D</option> option, the <command>useradd</command> command creates a new user account using the values specified on the command line plus the default values from the system. Depending on command line options, the <command>useradd</command> command will update system files and may also create the new user's home directory and copy initial files."
+msgstr ""
+
+#: useradd.8.xml:89(para) 
+msgid "By default, a group will also be created for the new user (see <option>-g</option>, <option>-N</option>, <option>-U</option>, and <option>USERGROUPS_ENAB</option>)."
+msgstr ""
+
+#: useradd.8.xml:98(para) 
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr ""
+
+#: useradd.8.xml:102(term) useradd.8.xml:499(term) 
+msgid "<option>-b</option>, <option>--base-dir</option><replaceable>BASE_DIR</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:107(para) 
+msgid "The default base directory for the system if <option>-d</option><replaceable>HOME_DIR</replaceable> is not specified. <replaceable>BASE_DIR</replaceable> is concatenated with the account name to define the home directory. If the <option>-m</option> option is not used, <replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+
+#: useradd.8.xml:115(para) 
+msgid "If this option is not specified, <command>useradd</command> will use the base directory specified by the <option>HOME</option> variable in <filename>/etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+
+#: useradd.8.xml:130(para) 
+msgid "Any text string. It is generally a short description of the login, and is currently used as the field for the user's full name."
+msgstr ""
+
+#: useradd.8.xml:143(para) 
+msgid "The new user will be created using <replaceable>HOME_DIR</replaceable> as the value for the user's login directory. The default is to append the <replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> and use that as the login directory name. The directory <replaceable>HOME_DIR</replaceable> does not have to exist but will not be created if it is missing."
+msgstr ""
+
+#: useradd.8.xml:155(term) 
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr ""
+
+#: useradd.8.xml:159(para) 
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr ""
+
+#: useradd.8.xml:174(para) 
+msgid "If not specified, <command>useradd</command> will use the default expiry date specified by the <option>EXPIRE</option> variable in <filename>/etc/default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+
+#: useradd.8.xml:188(para) 
+msgid "The number of days after a password expires until the account is permanently disabled. A value of 0 disables the account as soon as the password has expired, and a value of -1 disables the feature."
+msgstr ""
+
+#: useradd.8.xml:194(para) 
+msgid "If not specified, <command>useradd</command> will use the default inactivity period specified by the <option>INACTIVE</option> variable in <filename>/etc/default/useradd</filename>, or -1 by default."
+msgstr ""
+
+#: useradd.8.xml:208(para) 
+msgid "The group name or number of the user's initial login group. The group name must exist. A group number must refer to an already existing group."
+msgstr ""
+
+#: useradd.8.xml:213(para) 
+msgid "If not specified, the bahavior of <command>useradd</command> will depend on the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</filename>. If this variable is set to <replaceable>yes</replaceable> (or <option>-U/--user-group</option> is specified on the command line), a group will be created for the user, with the same name as her loginname. If the variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-group</option> is specified on the command line), useradd will set the primary group of the new user to the value specified by the <option>GROUP</option> variable in <filename>/etc/default/useradd</filename>, or 100 by default."
+msgstr ""
+
+#: useradd.8.xml:236(para) 
+msgid "A list of supplementary groups which the user is also a member of. Each group is separated from the next by a comma, with no intervening whitespace. The groups are subject to the same restrictions as the group given with the <option>-g</option> option. The default is for the user to belong only to the initial group."
+msgstr ""
+
+#: useradd.8.xml:253(term) 
+msgid "<option>-k</option>, <option>--skel</option><replaceable>SKEL_DIR</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:258(para) 
+msgid "The skeleton directory, which contains files and directories to be copied in the user's home directory, when the home directory is created by <command>useradd</command>."
+msgstr ""
+
+#: useradd.8.xml:263(para) 
+msgid "This option is only valid if the <option>-m</option> (or <option>--create-home</option>) option is specified."
+msgstr ""
+
+#: useradd.8.xml:267(para) 
+msgid "If this option is not set, the skeleton directory is defined by the <option>SKEL</option> variable in <filename>/etc/default/useradd</filename> or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+
+#: useradd.8.xml:276(term) groupadd.8.xml:114(term) 
+msgid "<option>-K</option>, <option>--key</option><replaceable>KEY</replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:281(para) 
+msgid "Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</option>, <option>UID_MAX</option>, <option>UMASK</option>, <option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: <option>-K </option><replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</replaceable> can be used when creating system account to turn off password ageing, even though system account has no password at all. Multiple <option>-K</option> options can be specified, e.g.: <option>-K </option><replaceable>UID_MIN</replaceable>=<replaceable>100</replaceable><option>-K </option><replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+
+#: useradd.8.xml:297(para) 
+msgid "Note: <option>-K </option><replaceable>UID_MIN</replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+
+#: useradd.8.xml:305(term) 
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr ""
+
+#: useradd.8.xml:307(para) 
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr ""
+
+#: useradd.8.xml:310(para) 
+msgid "By default, the user's entries in the lastlog and faillog databases are resetted to avoid reusing the entry from a previously deleted user."
+msgstr ""
+
+#: useradd.8.xml:318(term) 
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr ""
+
+#: useradd.8.xml:322(para) 
+msgid "Create the user's home directory if it does not exist. The files and directories contained in the skeleton directory (which can be defined with the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+
+#: useradd.8.xml:328(para) 
+msgid "By default, no home directories are created."
+msgstr ""
+
+#: useradd.8.xml:335(option) 
+msgid "-M"
+msgstr ""
+
+#: useradd.8.xml:338(para) 
+msgid "Do no create the user's home directory, even if the system wide setting from <filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set to <replaceable>yes</replaceable>."
+msgstr ""
+
+#: useradd.8.xml:347(term) 
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr ""
+
+#: useradd.8.xml:351(para) 
+msgid "Do not create a group with the same name as the user, but add the user to the group specified by the <option>-g</option> option or by the <option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:357(para) useradd.8.xml:465(para) 
+msgid "The default behavior (if the <option>-g</option>, <option>-N</option>, and <option>-U</option> options are not specified) is defined by the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: useradd.8.xml:370(para) 
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr ""
+
+#: useradd.8.xml:371(para) 
+msgid "This option is only valid in combination with the <option>-o</option> option."
+msgstr ""
+
+#: useradd.8.xml:383(para) groupadd.8.xml:150(para) 
+msgid "The encrypted password, as returned by <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to disable the password."
+msgstr ""
+
+#: useradd.8.xml:400(term) newusers.8.xml:263(term) groupadd.8.xml:167(term) 
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr ""
+
+#: useradd.8.xml:404(para) newusers.8.xml:267(para) 
+msgid "Create a system account."
+msgstr ""
+
+#: useradd.8.xml:407(para) 
+msgid "System users will be created with no aging information in <filename>/etc/shadow</filename>, and their numeric identifiers are choosen in the <option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in <filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-<option>UID_MAX</option> (and their <option>GID</option> counterparts for the creation of groups)."
+msgstr ""
+
+#: useradd.8.xml:416(para) 
+msgid "Note that <command>useradd</command> will not create a home directory for such an user, regardless of the default setting in <filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>). You have to specify the <option>-m</option> options if you want a home directory for a system account to be created."
+msgstr ""
+
+#: useradd.8.xml:432(para) 
+msgid "The name of the user's login shell. The default is to leave this field blank, which causes the system to select the default login shell specified by the <option>SHELL</option> variable in <filename>/etc/default/useradd</filename>, or an empty string by default."
+msgstr ""
+
+#: useradd.8.xml:447(para) 
+msgid "The numerical value of the user's ID. This value must be unique, unless the <option>-o</option> option is used. The value must be non-negative. The default is to use the smallest ID value greater than 999 and greater than every other user. Values between 0 and 999 are typically reserved for system accounts."
+msgstr ""
+
+#: useradd.8.xml:457(term) 
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr ""
+
+#: useradd.8.xml:461(para) 
+msgid "Create a group with the same name as the user, and add the user to this group."
+msgstr ""
+
+#: useradd.8.xml:479(para) 
+msgid "The SELinux user for the user's login. The default is to leave this field blank, which causes the system to select the default SELinux user."
+msgstr ""
+
+#: useradd.8.xml:489(title) 
+msgid "Changing the default values"
+msgstr ""
+
+#: useradd.8.xml:490(para) 
+msgid "When invoked with only the <option>-D</option> option, <command>useradd</command> will display the current default values. When invoked with <option>-D</option> plus other options, <command>useradd</command> will update the default values for the specified options. Valid default-changing options are:"
+msgstr ""
+
+#: useradd.8.xml:504(para) 
+msgid "The path prefix for a new user's home directory. The user's name will be affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new user's home directory name, if the <option>-d</option> option is not used when creating a new account."
+msgstr ""
+
+#: useradd.8.xml:511(para) 
+msgid "This option sets the <option>HOME</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:523(para) 
+msgid "The date on which the user account is disabled."
+msgstr ""
+
+#: useradd.8.xml:524(para) 
+msgid "This option sets the <option>EXPIRE</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:536(para) 
+msgid "The number of days after a password has expired before the account will be disabled."
+msgstr ""
+
+#: useradd.8.xml:540(para) 
+msgid "This option sets the <option>INACTIVE</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:552(para) 
+msgid "The group name or ID for a new user's initial group (when the <option>-N/--no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> variable is set to <replaceable>no</replaceable> in <filename>/etc/login.defs</filename>. The named group must exist, and a numerical group ID must have an existing entry."
+msgstr ""
+
+#: useradd.8.xml:561(para) 
+msgid "This option sets the <option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:573(para) 
+msgid "The name of a new user's login shell."
+msgstr ""
+
+#: useradd.8.xml:576(para) 
+msgid "This option sets the <option>SHELL</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:588(title) 
+msgid "NOTES"
+msgstr ""
+
+#: useradd.8.xml:589(para) 
+msgid "The system administrator is responsible for placing the default user files in the <filename>/etc/skel/</filename> directory (or any other skeleton directory specified in <filename>/etc/default/useradd</filename> or on the command line)."
+msgstr ""
+
+#: useradd.8.xml:598(para) 
+msgid "You may not add a user to a NIS or LDAP group. This must be performed on the corresponding server."
+msgstr ""
+
+#: useradd.8.xml:603(para) 
+msgid "Similarly, if the username already exists in an external user database such as NIS or LDAP, <command>useradd</command> will deny the user account creation request."
+msgstr ""
+
+#: useradd.8.xml:609(para) 
+msgid "Usernames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes. They can end with a dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+
+#: useradd.8.xml:615(para) 
+msgid "Usernames may only be up to 32 characters long."
+msgstr ""
+
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term) 
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr ""
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para) 
+msgid "Indicate if a home directory should be created by default for new users."
+msgstr ""
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para) 
+msgid "This setting does not apply to system users, and can be overriden on the command line."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term) groupadd.8.xml:32(term) 
+msgid "<option>GID_MAX</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term) groupadd.8.xml:33(term) 
+msgid "<option>GID_MIN</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para) groupadd.8.xml:35(para) 
+msgid "Range of group IDs used for the creation of regular groups by <command>useradd</command>, <command>groupadd</command>, or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term) 
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para) 
+msgid "The maximum number of days a password may be used. If the password is older than this, a password change will be forced. If not specified, -1 will be assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term) 
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para) 
+msgid "The minimum number of days allowed between password changes. Any password changes attempted sooner than this will be rejected. If not specified, -1 will be assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term) 
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para) 
+msgid "The number of days warning given before a password expires. A zero means warning is given only upon the day of expiration, a negative value means no warning is given. If not specified, no warning will be provided."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term) groupadd.8.xml:30(term) 
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term) groupadd.8.xml:31(term) 
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para) groupadd.8.xml:33(para) 
+msgid "Range of group IDs used for the creation of system groups by <command>useradd</command>, <command>groupadd</command>, or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term) 
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term) 
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para) 
+msgid "Range of user IDs used for the creation of system users by <command>useradd</command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term) 
+msgid "<option>UID_MAX</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term) 
+msgid "<option>UID_MIN</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para) 
+msgid "Range of user IDs used for the creation of regular users by <command>useradd</command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>UMASK</option> (number)"
+msgstr ""
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "The file mode creation mask is initialized to this value. If not specified, the mask will be initialized to 022."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para) 
+msgid "<command>useradd</command> and <command>newusers</command> use this mask to set the mode of the home directory they create"
+msgstr ""
+
+#: useradd.8.xml:42(para) newusers.8.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para) 
+msgid "It is also used by <command>login</command> to define users' initial umask. Note that this mask can be overriden by the user's GECOS line (if <option>QUOTAS_ENAB</option> is set) or by the specification of a limit with the <emphasis>K</emphasis> identifier in <citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: useradd.8.xml:671(filename) 
+msgid "/etc/default/useradd"
+msgstr ""
+
+#: useradd.8.xml:673(para) 
+msgid "Default values for account creation."
+msgstr ""
+
+#: useradd.8.xml:677(filename) 
+msgid "/etc/skel/"
+msgstr ""
+
+#: useradd.8.xml:679(para) 
+msgid "Directory containing default files."
+msgstr ""
+
+#: useradd.8.xml:715(replaceable) shadow.3.xml:35(manvolnum) pwck.8.xml:274(replaceable) passwd.1.xml:427(replaceable) grpck.8.xml:232(replaceable) groupmod.8.xml:199(replaceable) groupadd.8.xml:263(replaceable) 
+msgid "3"
+msgstr ""
+
+#: useradd.8.xml:717(para) passwd.1.xml:447(para) groupmod.8.xml:201(para) groupadd.8.xml:265(para) 
+msgid "invalid argument to option"
+msgstr ""
+
+#: useradd.8.xml:721(replaceable) pwck.8.xml:280(replaceable) passwd.1.xml:433(replaceable) grpck.8.xml:238(replaceable) groupmod.8.xml:205(replaceable) groupadd.8.xml:269(replaceable) 
+msgid "4"
+msgstr ""
+
+#: useradd.8.xml:723(para) 
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr ""
+
+#: useradd.8.xml:729(para) groupmod.8.xml:207(para) groupmod.8.xml:213(para) groupdel.8.xml:126(para) 
+msgid "specified group doesn't exist"
+msgstr ""
+
+#: useradd.8.xml:733(replaceable) groupmod.8.xml:217(replaceable) groupadd.8.xml:275(replaceable) 
+msgid "9"
+msgstr ""
+
+#: useradd.8.xml:735(para) 
+msgid "username already in use"
+msgstr ""
+
+#: useradd.8.xml:747(para) 
+msgid "can't create home directory"
+msgstr ""
+
+#: useradd.8.xml:751(replaceable) 
+msgid "13"
+msgstr ""
+
+#: useradd.8.xml:753(para) 
+msgid "can't create mail spool"
+msgstr ""
+
+#: useradd.8.xml:693(para) 
+msgid "The <command>useradd</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: useradd.8.xml:762(para) 
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: suauth.5.xml:34(refentrytitle) suauth.5.xml:39(refname) 
+msgid "suauth"
+msgstr ""
+
+#: suauth.5.xml:35(manvolnum) shadow.5.xml:35(manvolnum) pwck.8.xml:286(replaceable) porttime.5.xml:35(manvolnum) passwd.5.xml:35(manvolnum) passwd.1.xml:439(replaceable) login.defs.5.xml:98(manvolnum) login.access.5.xml:36(manvolnum) limits.5.xml:36(manvolnum) gshadow.5.xml:34(manvolnum) grpck.8.xml:244(replaceable) faillog.5.xml:35(manvolnum) 
+msgid "5"
+msgstr ""
+
+#: suauth.5.xml:36(refmiscinfo) shadow.5.xml:36(refmiscinfo) porttime.5.xml:36(refmiscinfo) passwd.5.xml:36(refmiscinfo) login.defs.5.xml:99(refmiscinfo) login.access.5.xml:37(refmiscinfo) limits.5.xml:37(refmiscinfo) gshadow.5.xml:35(refmiscinfo) faillog.5.xml:36(refmiscinfo) 
+msgid "File Formats and Conversions"
+msgstr ""
+
+#: suauth.5.xml:40(refpurpose) 
+msgid "detailed su control file"
+msgstr ""
+
+#: suauth.5.xml:45(command) suauth.5.xml:171(filename) 
+msgid "/etc/suauth"
+msgstr ""
+
+#: suauth.5.xml:51(para) 
+msgid "The file <filename>/etc/suauth</filename> is referenced whenever the su command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+
+#. .RS
+#: suauth.5.xml:58(literallayout) 
+#, no-wrap
+msgid "\n      1) the user su is targetting\n    "
+msgstr ""
+
+#. .fi
+#: suauth.5.xml:62(para) 
+msgid "2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+
+#: suauth.5.xml:67(para) 
+msgid "The file is formatted like this, with lines starting with a # being treated as comment lines and ignored;"
+msgstr ""
+
+#: suauth.5.xml:72(literallayout) 
+#, no-wrap
+msgid "\n      to-id:from-id:ACTION\n    "
+msgstr ""
+
+#: suauth.5.xml:76(para) 
+msgid "Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by a list of usernames delimited by \",\""
+msgstr ""
+
+#: suauth.5.xml:82(para) 
+msgid "from-id is formatted the same as to-id except the extra word <emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> appears one or more group names, delimited by \",\". It is not sufficient to have primary group id of the relevant group, an entry in <citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</manvolnum></citerefentry> is neccessary."
+msgstr ""
+
+#: suauth.5.xml:93(para) 
+msgid "Action can be one only of the following currently supported options."
+msgstr ""
+
+#: suauth.5.xml:99(emphasis) 
+msgid "DENY"
+msgstr ""
+
+#: suauth.5.xml:102(para) 
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr ""
+
+#: suauth.5.xml:109(emphasis) 
+msgid "NOPASS"
+msgstr ""
+
+#: suauth.5.xml:112(para) 
+msgid "The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+
+#: suauth.5.xml:120(emphasis) 
+msgid "OWNPASS"
+msgstr ""
+
+#: suauth.5.xml:123(para) 
+msgid "For the su command to be successful, the user must enter his or her own password. They are told this."
+msgstr ""
+
+#: suauth.5.xml:131(para) 
+msgid "Note there are three separate fields delimited by a colon. No whitespace must surround this colon. Also note that the file is examined sequentially line by line, and the first applicable rule is used without examining the file further. This makes it possible for a system administrator to exercise as fine control as he or she wishes."
+msgstr ""
+
+#: suauth.5.xml:141(title) 
+msgid "EXAMPLE"
+msgstr ""
+
+#: suauth.5.xml:142(literallayout) 
+#, no-wrap
+msgid "\n      # sample /etc/suauth file\n      #\n      # A couple of privileged usernames may\n      # su to root with their own password.\n      #\n      root:chris,birddog:OWNPASS\n      #\n      # Anyone else may not su to root unless in\n      # group wheel. This is how BSD does things.\n      #\n      root:ALL EXCEPT GROUP wheel:DENY\n      #\n      # Perhaps terry and birddog are accounts\n      # owned by the same person.\n      # Access can be arranged between them\n      # with no password.\n      #\n      terry:birddog:NOPASS\n      birddog:terry:NOPASS\n      #\n    "
+msgstr ""
+
+#: suauth.5.xml:178(title) pwconv.8.xml:135(title) login.defs.5.xml:455(title) 
+msgid "BUGS"
+msgstr ""
+
+#: suauth.5.xml:179(para) 
+msgid "There could be plenty lurking. The file parser is particularly unforgiving about syntax errors, expecting no spurious whitespace (apart from beginning and end of lines), and a specific token delimiting different things."
+msgstr ""
+
+#: suauth.5.xml:188(title) shadow.3.xml:183(title) 
+msgid "DIAGNOSTICS"
+msgstr ""
+
+#: suauth.5.xml:189(para) 
+msgid "An error parsing the file is reported using <citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+
+#: suauth.5.xml:198(para) 
+msgid "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+msgstr ""
+
+#: su.1.xml:54(refentrytitle) su.1.xml:59(refname) su.1.xml:64(command) login.defs.5.xml:395(term) 
+msgid "su"
+msgstr ""
+
+#: su.1.xml:56(refmiscinfo) sg.1.xml:40(refmiscinfo) passwd.1.xml:46(refmiscinfo) newgrp.1.xml:40(refmiscinfo) login.1.xml:72(refmiscinfo) groups.1.xml:36(refmiscinfo) gpasswd.1.xml:44(refmiscinfo) expiry.1.xml:43(refmiscinfo) chsh.1.xml:42(refmiscinfo) chfn.1.xml:43(refmiscinfo) chage.1.xml:36(refmiscinfo) 
+msgid "User Commands"
+msgstr ""
+
+#: su.1.xml:60(refpurpose) 
+msgid "change user ID or become superuser"
+msgstr ""
+
+#: su.1.xml:70(replaceable) login.1.xml:85(replaceable) login.1.xml:93(replaceable) 
+msgid "username"
+msgstr ""
+
+#: su.1.xml:78(para) 
+msgid "The <command>su</command> command is used to become another user during a login session. Invoked without a <option>username</option>, <command>su</command> defaults to becoming the superuser. The optional argument <option>-</option> may be used to provide an environment similar to what the user would expect had the user logged in directly."
+msgstr ""
+
+#: su.1.xml:87(para) 
+msgid "Additional arguments may be provided after the username, in which case they are supplied to the user's login shell. In particular, an argument of <option>-c</option> will cause the next argument to be treated as a command by most command interpreters. The command will be executed by the shell specified in <filename>/etc/passwd</filename> for the target user."
+msgstr ""
+
+#: su.1.xml:96(para) 
+msgid "You can use the <option>--</option> argument to separate <command>su</command> options from the arguments supplied to the shell."
+msgstr ""
+
+#: su.1.xml:101(para) 
+msgid "The user will be prompted for a password, if appropriate. Invalid passwords will produce an error message. All attempts, both valid and invalid, are logged to detect abuse of the system."
+msgstr ""
+
+#: su.1.xml:106(para) 
+msgid "The current environment is passed to the new shell. The value of <envar>$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the superuser. This may be changed with the <option>ENV_PATH</option> and <option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: su.1.xml:115(para) login.1.xml:166(para) 
+msgid "A subsystem login is indicated by the presence of a \"*\" as the first character of the login shell. The given home directory will be used as the root of a new file system which the user is actually logged into."
+msgstr ""
+
+#: su.1.xml:124(para) 
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr ""
+
+#: su.1.xml:128(term) 
+msgid "<option>-c</option>, <option>--command</option><replaceable>COMMAND</replaceable>"
+msgstr ""
+
+#: su.1.xml:133(para) 
+msgid "Specify a command that will be invoked by the shell using its <option>-c</option>."
+msgstr ""
+
+#: su.1.xml:140(term) 
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr ""
+
+#: su.1.xml:144(para) 
+msgid "Provide an environment similar to what the user would expect had the user logged in directly."
+msgstr ""
+
+#: su.1.xml:148(para) 
+msgid "When <option>-</option> is used, it must be specified as the last <command>su</command> option. The other forms (<option>-l</option> and <option>--login</option>) do not have this restriction."
+msgstr ""
+
+#: su.1.xml:162(para) 
+msgid "The shell that will be invoked."
+msgstr ""
+
+#: su.1.xml:170(para) 
+msgid "The shell specified with --shell."
+msgstr ""
+
+#: su.1.xml:173(para) 
+msgid "If <option>--preserve-environment</option> is used, the shell specified by the <envar>$SHELL</envar> environment variable."
+msgstr ""
+
+#: su.1.xml:180(para) 
+msgid "The shell indicated in the <filename>/etc/passwd</filename> entry for the target user."
+msgstr ""
+
+#: su.1.xml:186(para) 
+msgid "<filename>/bin/sh</filename> if a shell could not be found by any above method."
+msgstr ""
+
+#: su.1.xml:163(para) 
+msgid "The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:191(para) 
+msgid "If the target user has a restricted shell (i.e. the shell field of this user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/etc/shell</filename>), then the <option>--shell</option> option or the <envar>$SHELL</envar> environment variable won't be taken into account, unless <command>su</command> is called by root."
+msgstr ""
+
+#: su.1.xml:202(term) 
+msgid "<option>-m</option>, <option>-p</option>, <option>--preserve-environment</option>"
+msgstr ""
+
+#: su.1.xml:211(envar) 
+msgid "$PATH"
+msgstr ""
+
+#: su.1.xml:213(para) 
+msgid "reset according to the <filename>/etc/login.defs</filename> options <option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+
+#: su.1.xml:222(envar) 
+msgid "$IFS"
+msgstr ""
+
+#: su.1.xml:224(para) 
+msgid "reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was set."
+msgstr ""
+
+#: su.1.xml:207(para) 
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:233(para) 
+msgid "If the target user has a restricted shell, this option has no effect (unless <command>su</command> is called by root)."
+msgstr ""
+
+#: su.1.xml:242(para) 
+msgid "The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, <envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> environment variables are reset."
+msgstr ""
+
+#: su.1.xml:251(para) 
+msgid "If <option>--login</option> is not used, the environment is copied, except for the variables above."
+msgstr ""
+
+#: su.1.xml:258(para) 
+msgid "If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> environment variables are copied if they were set."
+msgstr ""
+
+#: su.1.xml:268(para) 
+msgid "If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</envar>, and <envar>$MAIL</envar> environment variables are set according to the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, <option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</option> (see below)."
+msgstr ""
+
+#: su.1.xml:281(para) 
+msgid "If <option>--login</option> is used, other environment variables might be set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+
+#: su.1.xml:289(para) 
+msgid "Other environment might be set by PAM modules."
+msgstr ""
+
+#: su.1.xml:237(para) 
+msgid "Note that the default behavior for the environment is the following: <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:303(para) 
+msgid "This version of <command>su</command> has many compilation options, only some of which may be in use at any particular site."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>CONSOLE</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "If defined, either full pathname of a file containing device names (one per line) or a \":\" delimited list of device names. Root logins will be allowed only upon these devices."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para) 
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para) 
+msgid "The device should be specified without the /dev/ prefix."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "List of groups to add to the user's supplementary groups set when logging in on the console (as determined by the CONSOLE setting). Default is none. <placeholder-1/> Use with caution - it is possible for users to gain permanent access to these groups, even when not logged in on the console."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Indicate if login is allowed if we can't cd to the home directory. Default in no."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para) 
+msgid "If set to <replaceable>yes</replaceable>, the user will login in the root (<filename>/</filename>) directory if it is not possible to cd to her home directory."
+msgstr ""
+
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term) 
+msgid "<option>ENV_HZ</option> (string)"
+msgstr ""
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para) 
+msgid "If set, it will be used to define the HZ environment variable when a user login. The value must be preceded by <replaceable>HZ=</replaceable>. A common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para) 
+msgid "The <envar>HZ</envar> environment variable is only set when the user (the superuser) logs in with <command>sulogin</command>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "If this file exists and is readable, login environment will be read from it. Every line should be in the form name=value."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para) 
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>ENV_PATH</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "If set, it will be used to define the PATH environment variable when a regular user login. The value can be preceded by <replaceable>PATH=</replaceable>, or a colon separated list of paths (for example <replaceable>/bin:/usr/bin</replaceable>). The default value is <replaceable>PATH=/bin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "If set, it will be used to define the PATH environment variable when the superuser login. The value can be preceded by <replaceable>PATH=</replaceable>, or a colon separated list of paths (for example <replaceable>/sbin:/bin:/usr/sbin:/usr/bin</replaceable>). The default value is <replaceable>PATH=/bin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>ENV_TZ</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "If set, it will be used to define the TZ environment variable when a user login. The value can be the name of a timezone preceded by <replaceable>TZ=</replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the full path to the file containing the timezone specification (for example <filename>/etc/tzname</filename>)."
+msgstr ""
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para) 
+msgid "If a full path is specified but the file does not exist or cannot be read, the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) chsh.1.xml:32(term) chfn.1.xml:32(term) 
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) chsh.1.xml:34(para) chfn.1.xml:34(para) 
+msgid "The string used for prompting a password. The default is to use \"Password: \", or a translation of that string. If you set this variable, the prompt will no be translated."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para) chsh.1.xml:39(para) chfn.1.xml:39(para) 
+msgid "If the string contains <replaceable>%s</replaceable>, this will be replaced by the user's name."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para) 
+msgid "You should disable it if the shell startup files already check for mail (\"mailx -e\" or equivalent)."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Enable setting of ulimit, umask, and niceness from passwd gecos field."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) 
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) 
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) 
+msgid "<option>SU_NAME</option> (string)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) 
+msgid "If defined, the command name to display when running \"su -\". For example, if this is defined as \"su\" then a \"ps\" will display the command is \"-su\". If not defined, then \"ps\" would display the name of the shell actually being run, e.g. something like \"-sh\"."
+msgstr ""
+
+#: su.1.xml:33(term) login.defs.5.xml:33(term) 
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) 
+msgid "If <replaceable>yes</replaceable>, the user must be listed as a member of the first gid 0 group in <filename>/etc/group</filename> (called <replaceable>root</replaceable> on most Linux systems) to be able to <command>su</command> to uid 0 accounts. If the group doesn't exist or is empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) 
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr ""
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) 
+msgid "Enable \"syslog\" logging of <command>su</command> activity - in addition to sulog file logging."
+msgstr ""
+
+#: su.1.xml:363(para) 
+msgid "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+msgstr ""
+
+#: sg.1.xml:38(refentrytitle) sg.1.xml:43(refname) sg.1.xml:49(command) 
+msgid "sg"
+msgstr ""
+
+#: sg.1.xml:44(refpurpose) 
+msgid "execute command as different group ID"
+msgstr ""
+
+#: sg.1.xml:50(arg) newgrp.1.xml:49(arg) 
+msgid "-"
+msgstr ""
+
+#: sg.1.xml:52(arg) expiry.1.xml:53(arg) 
+msgid "-c"
+msgstr ""
+
+#: sg.1.xml:51(arg) 
+msgid "group <placeholder-1/> command"
+msgstr ""
+
+#: sg.1.xml:60(para) 
+msgid "The <command>sg</command> command works similar to <command>newgrp</command> but accepts a command. The command will be executed with the <filename>/bin/sh</filename> shell. With most shells you may run <command>sg</command> from, you need to enclose multi-word commands in quotes. Another difference between <command>newgrp</command> and <command>sg</command> is that some shells treat <command>newgrp</command> specially, replacing themselves with a new instance of a shell that <command>newgrp</command> creates. This doesn't happen with <command>sg</command>, so upon exit from a <command>sg</command> command you are returned to your previous group ID."
+msgstr ""
+
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term) 
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr ""
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para) 
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+
+#: sg.1.xml:119(para) 
+msgid "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition=\"gshadow\">, <citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+
+#: shadow.5.xml:34(refentrytitle) shadow.5.xml:39(refname) shadow.3.xml:34(refentrytitle) shadow.3.xml:39(refname) pwck.8.xml:60(replaceable) pwck.8.xml:75(replaceable) grpck.8.xml:53(replaceable) grpck.8.xml:62(replaceable) 
+msgid "shadow"
+msgstr ""
+
+#: shadow.5.xml:40(refpurpose) 
+msgid "shadowed password file"
+msgstr ""
+
+#: shadow.5.xml:45(para) 
+msgid "<filename>shadow</filename> is a file which contains the password information for the system's accounts and optional aging information."
+msgstr ""
+
+#: shadow.5.xml:51(para) gshadow.5.xml:49(para) 
+msgid "This file must not be readable by regular users if password security is to be maintained."
+msgstr ""
+
+#: shadow.5.xml:56(para) 
+msgid "Each line of this file contains 9 fields, separated by colons (<quote>:</quote>), in the following order:"
+msgstr ""
+
+#: shadow.5.xml:63(emphasis) passwd.5.xml:53(para) 
+msgid "login name"
+msgstr ""
+
+#: shadow.5.xml:65(para) 
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+
+#: shadow.5.xml:71(emphasis) gshadow.5.xml:68(emphasis) 
+msgid "encrypted password"
+msgstr ""
+
+#: shadow.5.xml:73(para) gshadow.5.xml:70(para) 
+msgid "Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+
+#: shadow.5.xml:78(para) 
+msgid "If the password field contains some string that is not a valid result of <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>, for instance ! or *, the user will not be able to use a unix password to log in (but the user may log in the system by other means)."
+msgstr ""
+
+#: shadow.5.xml:85(para) 
+msgid "This field may be empty, in which case no passwords are required to authenticate as the specified login name. However, some applications which read the <filename>/etc/shadow</filename> file may decide not to permit any access at all if the password field is empty."
+msgstr ""
+
+#: shadow.5.xml:92(para) gshadow.5.xml:92(para) 
+msgid "A password field which starts with a exclamation mark means that the password is locked. The remaining characters on the line represent the password field before the password was locked."
+msgstr ""
+
+#: shadow.5.xml:102(emphasis) 
+msgid "date of last password change"
+msgstr ""
+
+#: shadow.5.xml:105(para) 
+msgid "The date of the last password change, expressed as the number of days since Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:109(para) 
+msgid "The value 0 has a special meaning, which is that the user should change her pasword the next time she will log in the system."
+msgstr ""
+
+#: shadow.5.xml:114(para) 
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+
+#: shadow.5.xml:121(emphasis) 
+msgid "minimum password age"
+msgstr ""
+
+#: shadow.5.xml:123(para) 
+msgid "The minimum password age is the number of days the user will have to wait before she will be allowed to change her password again."
+msgstr ""
+
+#: shadow.5.xml:128(para) 
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+
+#: shadow.5.xml:135(emphasis) 
+msgid "maximum password age"
+msgstr ""
+
+#: shadow.5.xml:137(para) 
+msgid "The maximum password age is the number of days after which the user will have to change her password."
+msgstr ""
+
+#: shadow.5.xml:141(para) 
+msgid "After this number of days is elapsed, the password may still be valid. The user should be asked to change her password the next time she will log in."
+msgstr ""
+
+#: shadow.5.xml:146(para) 
+msgid "An empty field means that there are no maximum password age, no password warning period, and no password inactivity period (see below)."
+msgstr ""
+
+#: shadow.5.xml:151(para) 
+msgid "If the maximum password age is lower than the minimum password age, the user cannot change her password."
+msgstr ""
+
+#: shadow.5.xml:159(emphasis) 
+msgid "password warning period"
+msgstr ""
+
+#: shadow.5.xml:162(para) 
+msgid "The number of days before a password is going to expire (see the maximum password age above) during which the user should be warned."
+msgstr ""
+
+#: shadow.5.xml:167(para) 
+msgid "An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+
+#: shadow.5.xml:175(emphasis) 
+msgid "password inactivity period"
+msgstr ""
+
+#: shadow.5.xml:178(para) 
+msgid "The number of days after a password has expired (see the maximum password age above) during which the password should still be accepted (and the user should update her password during the next login)."
+msgstr ""
+
+#: shadow.5.xml:184(para) 
+msgid "After expiration of the password and this expiration period is elapsed, no login is possible using the current user's password. The user should contact her administrator."
+msgstr ""
+
+#: shadow.5.xml:189(para) 
+msgid "An empty field means that there are no enforcement of an inactivity period."
+msgstr ""
+
+#: shadow.5.xml:197(emphasis) 
+msgid "account expiration date"
+msgstr ""
+
+#: shadow.5.xml:200(para) 
+msgid "The date of expiration of the account, expressed as the number of days since Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:204(para) 
+msgid "Note that an account expiration differs from a password expiration. In case of an acount expiration, the user shall not be allowed to login. In case of a password expiration, the user is not allowed to login using her password."
+msgstr ""
+
+#: shadow.5.xml:210(para) 
+msgid "An empty field means that the account will never expire."
+msgstr ""
+
+#: shadow.5.xml:213(para) 
+msgid "The value 0 should not be used as it is interpreted as either an account with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:221(emphasis) 
+msgid "reserved field"
+msgstr ""
+
+#: shadow.5.xml:223(para) 
+msgid "This field is reserved for future use."
+msgstr ""
+
+#: shadow.5.xml:245(filename) 
+msgid "/etc/shadow-"
+msgstr ""
+
+#: shadow.5.xml:247(para) 
+msgid "Backup file for /etc/shadow."
+msgstr ""
+
+#: shadow.5.xml:248(para) passwd.5.xml:134(para) 
+msgid "Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools."
+msgstr ""
+
+#: shadow.5.xml:259(para) 
+msgid "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: shadow.3.xml:36(refmiscinfo) 
+msgid "Library Calls"
+msgstr ""
+
+#: shadow.3.xml:40(refname) 
+msgid "getspnam"
+msgstr ""
+
+#: shadow.3.xml:41(refpurpose) 
+msgid "encrypted password file routines"
+msgstr ""
+
+#: shadow.3.xml:45(title) 
+msgid "SYNTAX"
+msgstr ""
+
+#: shadow.3.xml:47(emphasis) 
+msgid "#include &lt;shadow.h&gt;"
+msgstr ""
+
+#: shadow.3.xml:51(emphasis) 
+msgid "struct spwd *getspent();"
+msgstr ""
+
+#: shadow.3.xml:55(emphasis) 
+msgid "struct spwd *getspnam(char"
+msgstr ""
+
+#: shadow.3.xml:56(emphasis) 
+msgid "*name"
+msgstr ""
+
+#: shadow.3.xml:56(emphasis) shadow.3.xml:69(emphasis) shadow.3.xml:74(emphasis) shadow.3.xml:80(emphasis) 
+msgid ");"
+msgstr ""
+
+#: shadow.3.xml:60(emphasis) 
+msgid "void setspent();"
+msgstr ""
+
+#: shadow.3.xml:64(emphasis) 
+msgid "void endspent();"
+msgstr ""
+
+#: shadow.3.xml:68(emphasis) 
+msgid "struct spwd *fgetspent(FILE"
+msgstr ""
+
+#: shadow.3.xml:69(emphasis) shadow.3.xml:80(emphasis) 
+msgid "*fp"
+msgstr ""
+
+#: shadow.3.xml:73(emphasis) 
+msgid "struct spwd *sgetspent(char"
+msgstr ""
+
+#: shadow.3.xml:74(emphasis) 
+msgid "*cp"
+msgstr ""
+
+#: shadow.3.xml:78(emphasis) 
+msgid "int putspent(struct spwd"
+msgstr ""
+
+#: shadow.3.xml:79(emphasis) 
+msgid "*p,"
+msgstr ""
+
+#: shadow.3.xml:79(emphasis) 
+msgid "FILE"
+msgstr ""
+
+#: shadow.3.xml:84(emphasis) 
+msgid "int lckpwdf();"
+msgstr ""
+
+#: shadow.3.xml:88(emphasis) 
+msgid "int ulckpwdf();"
+msgstr ""
+
+#: shadow.3.xml:94(para) 
+msgid "<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the shadow password file, <filename>/etc/shadow</filename>. The structure in the <emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+
+#: shadow.3.xml:99(programlisting) 
+#, no-wrap
+msgid "struct spwd {\n      char\t\t*sp_namp; /* user login name */\n      char\t\t*sp_pwdp; /* encrypted password */\n      long int\t\tsp_lstchg; /* last password change */\n      long int\t\tsp_min; /* days until change allowed. */\n      long int\t\tsp_max; /* days before change required */\n      long int\t\tsp_warn; /* days warning for expiration */\n      long int\t\tsp_inact; /* days before account inactive */\n      long int\t\tsp_expire; /* date when account expires */\n      unsigned long int\tsp_flag; /* reserved for future use */\n}\n    "
+msgstr ""
+
+#: shadow.3.xml:111(para) 
+msgid "The meanings of each field are:"
+msgstr ""
+
+#: shadow.3.xml:114(para) 
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+
+#: shadow.3.xml:117(para) 
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+
+#: shadow.3.xml:120(para) 
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+
+#: shadow.3.xml:123(para) 
+msgid "sp_min - days before which password may not be changed"
+msgstr ""
+
+#: shadow.3.xml:126(para) 
+msgid "sp_max - days after which password must be changed"
+msgstr ""
+
+#: shadow.3.xml:129(para) 
+msgid "sp_warn - days before password is to expire that user is warned of pending password expiration"
+msgstr ""
+
+#: shadow.3.xml:134(para) 
+msgid "sp_inact - days after password expires that account is considered inactive and disabled"
+msgstr ""
+
+#: shadow.3.xml:139(para) 
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+
+#: shadow.3.xml:142(para) 
+msgid "sp_flag - reserved for future use"
+msgstr ""
+
+#: shadow.3.xml:150(para) 
+msgid "<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, <emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</emphasis> returns the next entry from the file, and <emphasis>fgetspent</emphasis> returns the next entry from the given stream, which is assumed to be a file of the proper format. <emphasis>sgetspent</emphasis> returns a pointer to a <emphasis>struct spwd</emphasis> using the provided string as input. <emphasis>getspnam</emphasis> searches from the current position in the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+
+#: shadow.3.xml:163(para) 
+msgid "<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used to begin and end, respectively, access to the shadow password file."
+msgstr ""
+
+#: shadow.3.xml:169(para) 
+msgid "The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines should be used to insure exclusive access to the <filename>/etc/shadow</filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for the remainder of the initial 15 seconds. Should either attempt fail after a total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both locks are acquired 0 is returned."
+msgstr ""
+
+#: shadow.3.xml:184(para) 
+msgid "Routines return NULL if no more entries are available or if an error occurs during processing. Routines which have <emphasis>int</emphasis> as the return value return 0 for success and -1 for failure."
+msgstr ""
+
+#: shadow.3.xml:194(para) 
+msgid "These routines may only be used by the superuser as access to the shadow password file is restricted."
+msgstr ""
+
+#: shadow.3.xml:214(para) 
+msgid "<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: pwconv.8.xml:42(refentrytitle) pwconv.8.xml:47(refname) pwconv.8.xml:56(command) login.defs.5.xml:388(term) 
+msgid "pwconv"
+msgstr ""
+
+#: pwconv.8.xml:48(refname) pwconv.8.xml:59(command) 
+msgid "pwunconv"
+msgstr ""
+
+#: pwconv.8.xml:49(refname) pwconv.8.xml:62(command) login.defs.5.xml:302(term) 
+msgid "grpconv"
+msgstr ""
+
+#: pwconv.8.xml:50(refname) pwconv.8.xml:65(command) login.defs.5.xml:308(term) 
+msgid "grpunconv"
+msgstr ""
+
+#: pwconv.8.xml:51(refpurpose) 
+msgid "convert to and from shadow passwords and groups"
+msgstr ""
+
+#: pwconv.8.xml:71(para) 
+msgid "The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:77(para) 
+msgid "The <command>pwunconv</command> command creates <emphasis remap=\"I\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and <emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:84(para) 
+msgid "The <command>grpconv</command> command creates <emphasis remap=\"I\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:90(para) 
+msgid "The <command>grpunconv</command> command creates <emphasis remap=\"I\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and <emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:97(para) 
+msgid "These four programs all operate on the normal and shadow password and group files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, <filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:104(para) 
+msgid "Each program acquires the necessary locks before conversion. <command>pwconv</command> and <command>grpconv</command> are similar. First, entries in the shadowed file which don't exist in the main file are removed. Then, shadowed entries which don't have `x' as the password in the main file are updated. Any missing shadowed entries are added. Finally, passwords in the main file are replaced with `x'. These programs can be used for initial conversion as well to update the shadowed file if the main file is edited by hand."
+msgstr ""
+
+#: pwconv.8.xml:115(para) 
+msgid "<command>pwconv</command> will use the values of <emphasis remap=\"I\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login.defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:124(para) 
+msgid "Likewise <command>pwunconv</command> and <command>grpunconv</command> are similar. Passwords in the main file are updated from the shadowed file. Entries which exist in the main file but not in the shadowed file are left alone. Finally, the shadowed file is removed. Some password aging information is lost by <command>pwunconv</command>. It will convert what it can."
+msgstr ""
+
+#: pwconv.8.xml:136(para) 
+msgid "Errors in the password or group files (such as invalid or duplicate entries) may cause these programs to loop forever or fail in other strange ways. Please run <command>pwck</command> and <command>grpck</command> to correct any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+
+#: pwconv.8.xml:147(para) 
+msgid "The following configuration variable in <filename>/etc/login.defs</filename> changes the behavior of <command>grpconv</command> and <command>grpunconv</command>:"
+msgstr ""
+
+#: pwconv.8.xml:155(para) 
+msgid "The following configuration variables in <filename>/etc/login.defs</filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+
+#: pwconv.8.xml:181(para) 
+msgid "<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: pwck.8.xml:40(refentrytitle) pwck.8.xml:45(refname) pwck.8.xml:51(command) pwck.8.xml:66(command) login.defs.5.xml:380(term) 
+msgid "pwck"
+msgstr ""
+
+#: pwck.8.xml:46(refpurpose) 
+msgid "verify integrity of password files"
+msgstr ""
+
+#: pwck.8.xml:52(arg) pwck.8.xml:67(arg) pwck.8.xml:171(option) 
+msgid "-q"
+msgstr ""
+
+#: pwck.8.xml:53(arg) pwck.8.xml:192(option) grpck.8.xml:58(arg) grpck.8.xml:149(option) 
+msgid "-s"
+msgstr ""
+
+#: pwck.8.xml:56(replaceable) pwck.8.xml:71(replaceable) passwd.5.xml:34(refentrytitle) passwd.5.xml:39(refname) passwd.1.xml:44(refentrytitle) passwd.1.xml:49(refname) passwd.1.xml:55(command) login.defs.5.xml:369(term) 
+msgid "passwd"
+msgstr ""
+
+#: pwck.8.xml:68(arg) pwck.8.xml:182(option) login.1.xml:222(option) grpck.8.xml:49(arg) grpck.8.xml:139(option) 
+msgid "-r"
+msgstr ""
+
+#: pwck.8.xml:84(para) 
+msgid "The <command>pwck</command> command verifies the integrity of the users and authentication information. It checks that all entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</filename> have the proper format and contain valid data. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors."
+msgstr ""
+
+#: pwck.8.xml:93(para) grpck.8.xml:80(para) 
+msgid "Checks are made to verify that each entry has:"
+msgstr ""
+
+#: pwck.8.xml:96(para) grpck.8.xml:84(para) 
+msgid "the correct number of fields"
+msgstr ""
+
+#: pwck.8.xml:99(para) 
+msgid "a unique and valid user name"
+msgstr ""
+
+#: pwck.8.xml:102(para) 
+msgid "a valid user and group identifier"
+msgstr ""
+
+#: pwck.8.xml:105(para) 
+msgid "a valid primary group"
+msgstr ""
+
+#: pwck.8.xml:108(para) 
+msgid "a valid home directory"
+msgstr ""
+
+#: pwck.8.xml:111(para) 
+msgid "a valid login shell"
+msgstr ""
+
+#: pwck.8.xml:115(para) 
+msgid "<filename>shadow</filename> checks are enabled when a second file parameter is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+
+#: pwck.8.xml:120(para) 
+msgid "These checks are the following:"
+msgstr ""
+
+#: pwck.8.xml:125(para) 
+msgid "every passwd entry has a matching shadow entry, and every shadow entry has a matching passwd entry"
+msgstr ""
+
+#: pwck.8.xml:131(para) 
+msgid "passwords are specified in the shadowed file"
+msgstr ""
+
+#: pwck.8.xml:134(para) 
+msgid "shadow entries have the correct number of fields"
+msgstr ""
+
+#: pwck.8.xml:137(para) 
+msgid "shadow entries are unique in shadow"
+msgstr ""
+
+#: pwck.8.xml:140(para) 
+msgid "the last password changes are not in the future"
+msgstr ""
+
+#: pwck.8.xml:144(para) 
+msgid "The checks for correct number of fields and unique user name are fatal. If the entry has the wrong number of fields, the user will be prompted to delete the entire line. If the user does not answer affirmatively, all further checks are bypassed. An entry with a duplicated user name is prompted for deletion, but the remaining checks will still be made. All other errors are warning and the user is encouraged to run the <command>usermod</command> command to correct the error."
+msgstr ""
+
+#: pwck.8.xml:155(para) 
+msgid "The commands which operate on the <filename>/etc/passwd</filename> file are not able to alter corrupted or duplicated entries. <command>pwck</command> should be used in those circumstances to remove the offending entry."
+msgstr ""
+
+#: pwck.8.xml:165(para) 
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr ""
+
+#: pwck.8.xml:174(para) 
+msgid "Report errors only. The warnings which do not require any action from the user won't be displayed."
+msgstr ""
+
+#: pwck.8.xml:185(para) 
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr ""
+
+#: pwck.8.xml:195(para) 
+msgid "Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</filename> by UID."
+msgstr ""
+
+#: pwck.8.xml:203(para) 
+msgid "By default, <command>pwck</command> operates on the files <filename>/etc/passwd</filename> and <filename>/etc/shadow</filename>. The user may select alternate files with the <emphasis remap=\"I\">passwd</emphasis> and <emphasis remap=\"I\">shadow</emphasis> parameters."
+msgstr ""
+
+#: pwck.8.xml:270(para) 
+msgid "one or more bad password entries"
+msgstr ""
+
+#: pwck.8.xml:276(para) 
+msgid "can't open password files"
+msgstr ""
+
+#: pwck.8.xml:282(para) 
+msgid "can't lock password files"
+msgstr ""
+
+#: pwck.8.xml:288(para) 
+msgid "can't update password files"
+msgstr ""
+
+#: pwck.8.xml:294(para) 
+msgid "can't sort password files"
+msgstr ""
+
+#: pwck.8.xml:252(para) 
+msgid "The <command>pwck</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: pwck.8.xml:303(para) 
+msgid "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: porttime.5.xml:34(refentrytitle) porttime.5.xml:39(refname) 
+msgid "porttime"
+msgstr ""
+
+#: porttime.5.xml:40(refpurpose) 
+msgid "port access time file"
+msgstr ""
+
+#: porttime.5.xml:45(para) 
+msgid "<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, user names, and permitted login times."
+msgstr ""
+
+#: porttime.5.xml:50(para) 
+msgid "Each entry consists of three colon separated fields. The first field is a comma separated list of tty devices, or an asterisk to indicate that all tty devices are matched by this entry. The second field is a comma separated list of user names, or an asterisk to indicated that all user names are matched by this entry. The third field is a comma separated list of permitted access times."
+msgstr ""
+
+#: porttime.5.xml:59(para) 
+msgid "Each access time entry consists of zero or more days of the week, abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+
+#: porttime.5.xml:73(title) 
+msgid "EXAMPLES"
+msgstr ""
+
+#: porttime.5.xml:74(para) 
+msgid "The following entry allows access to user <emphasis remap=\"B\">jfh</emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+
+#: porttime.5.xml:80(para) 
+msgid "*:jfh:Wk0900-1700"
+msgstr ""
+
+#: porttime.5.xml:82(para) 
+msgid "The following entries allow access only to the users <emphasis>root</emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> at any time. This illustrates how the <filename>/etc/porttime</filename> file is an ordered list of access times. Any other user would match the second entry which does not permit access at any time."
+msgstr ""
+
+#: porttime.5.xml:91(programlisting) 
+#, no-wrap
+msgid "\n      console:root,oper:Al0000-2400\n      console:*:\n    "
+msgstr ""
+
+#: porttime.5.xml:96(para) 
+msgid "The following entry allows access for the user <emphasis>games</emphasis> on any port during non-working hours."
+msgstr ""
+
+#: porttime.5.xml:101(para) 
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr ""
+
+#: porttime.5.xml:108(filename) logoutd.8.xml:67(filename) 
+msgid "/etc/porttime"
+msgstr ""
+
+#: porttime.5.xml:110(para) logoutd.8.xml:69(para) 
+msgid "File containing port access."
+msgstr ""
+
+#: porttime.5.xml:118(para) login.access.5.xml:109(para) 
+msgid "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:40(refpurpose) 
+msgid "the password file"
+msgstr ""
+
+#: passwd.5.xml:45(para) 
+msgid "<filename>/etc/passwd</filename> contains one line for each user account, with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+
+#: passwd.5.xml:56(para) 
+msgid "optional encrypted password"
+msgstr ""
+
+#: passwd.5.xml:59(para) 
+msgid "numerical user ID"
+msgstr ""
+
+#: passwd.5.xml:62(para) 
+msgid "numerical group ID"
+msgstr ""
+
+#: passwd.5.xml:65(para) 
+msgid "user name or comment field"
+msgstr ""
+
+#: passwd.5.xml:68(para) 
+msgid "user home directory"
+msgstr ""
+
+#: passwd.5.xml:71(para) 
+msgid "optional user command interpreter"
+msgstr ""
+
+#: passwd.5.xml:75(para) 
+msgid "The encrypted password field may be blank, in which case no password is required to authenticate as the specified login name. However, some applications which read the <filename>/etc/passwd</filename> file may decide not to permit <emphasis>any</emphasis> access at all if the <emphasis>password</emphasis> field is blank. If the <emphasis>password</emphasis> field is a lower-case <quote>x</quote>, then the encrypted password is actually stored in the <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry> file instead; there <emphasis>must</emphasis> be a corresponding line in the <filename>/etc/shadow</filename> file, or else the user account is invalid. If the <emphasis>password</emphasis> field is any other string, then it will be treated as an encrypted password, as specified by <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:94(para) 
+msgid "The comment field is used by various system utilities, such as <citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:100(para) 
+msgid "The home directory field provides the name of the initial working directory. The <command>login</command> program uses this information to set the value of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+
+#: passwd.5.xml:106(para) 
+msgid "The command interpreter field provides the name of the user's command language interpreter, or the name of the initial program to execute. The <command>login</command> program uses this information to set the value of the <envar>$SHELL</envar> environmental variable. If this field is empty, it defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+
+#: passwd.5.xml:127(para) 
+msgid "optional encrypted password file"
+msgstr ""
+
+#: passwd.5.xml:131(filename) 
+msgid "/etc/passwd-"
+msgstr ""
+
+#: passwd.5.xml:133(para) 
+msgid "Backup file for /etc/passwd."
+msgstr ""
+
+#: passwd.5.xml:145(para) 
+msgid "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</manvolnum></citerefentry>, <citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: passwd.1.xml:50(refpurpose) 
+msgid "change user password"
+msgstr ""
+
+#: passwd.1.xml:67(para) 
+msgid "The <command>passwd</command> command changes passwords for user accounts. A normal user may only change the password for his/her own account, while the superuser may change the password for any account. <command>passwd</command> also changes the account or associated password validity period."
+msgstr ""
+
+#: passwd.1.xml:76(title) 
+msgid "Password Changes"
+msgstr ""
+
+#: passwd.1.xml:77(para) 
+msgid "The user is first prompted for his/her old password, if one is present. This password is then encrypted and compared against the stored password. The user has only one chance to enter the correct password. The superuser is permitted to bypass this step so that forgotten passwords may be changed."
+msgstr ""
+
+#: passwd.1.xml:85(para) 
+msgid "After the password has been entered, password aging information is checked to see if the user is permitted to change the password at this time. If not, <command>passwd</command> refuses to change the password and exits."
+msgstr ""
+
+#: passwd.1.xml:92(para) 
+msgid "The user is then prompted twice for a replacement password. The second entry is compared against the first and both are required to match in order for the password to be changed."
+msgstr ""
+
+#: passwd.1.xml:98(para) 
+msgid "Then, the password is tested for complexity. As a general guideline, passwords should consist of 6 to 8 characters including one or more characters from each of the following sets:"
+msgstr ""
+
+#: passwd.1.xml:106(para) 
+msgid "lower case alphabetics"
+msgstr ""
+
+#: passwd.1.xml:109(para) 
+msgid "digits 0 thru 9"
+msgstr ""
+
+#: passwd.1.xml:112(para) 
+msgid "punctuation marks"
+msgstr ""
+
+#: passwd.1.xml:116(para) 
+msgid "Care must be taken not to include the system default erase or kill characters. <command>passwd</command> will reject any password which is not suitably complex."
+msgstr ""
+
+#: passwd.1.xml:125(title) 
+msgid "Hints for user passwords"
+msgstr ""
+
+#: passwd.1.xml:126(para) 
+msgid "The security of a password depends upon the strength of the encryption algorithm and the size of the key space. The legacy <emphasis>UNIX</emphasis> System encryption method is based on the NBS DES algorithm. More recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). The size of the key space depends upon the randomness of the password which is selected."
+msgstr ""
+
+#: passwd.1.xml:135(para) 
+msgid "Compromises in password security normally result from careless password selection or handling. For this reason, you should not select a password which appears in a dictionary or which must be written down. The password should also not be a proper name, your license number, birth date, or street address. Any of these may be used as guesses to violate system security."
+msgstr ""
+
+#: passwd.1.xml:144(para) 
+msgid "You can find advices on how to choose a strong password on http://en.wikipedia.org/wiki/Password_strength"
+msgstr ""
+
+#: passwd.1.xml:153(para) 
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr ""
+
+#: passwd.1.xml:158(term) faillog.8.xml:71(term) 
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr ""
+
+#: passwd.1.xml:162(para) 
+msgid "This option can be used only with <option>-S</option> and causes show status for all users."
+msgstr ""
+
+#: passwd.1.xml:169(term) 
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr ""
+
+#: passwd.1.xml:173(para) 
+msgid "Delete a user's password (make it empty). This is a quick way to disable a password for an account. It will set the named account passwordless."
+msgstr ""
+
+#: passwd.1.xml:181(term) 
+msgid "<option>-e</option>, <option>--expire</option>"
+msgstr ""
+
+#: passwd.1.xml:185(para) 
+msgid "Immediately expire an account's password. This in effect can force a user to change his/her password at the user's next login."
+msgstr ""
+
+#: passwd.1.xml:198(term) 
+msgid "<option>-i</option>, <option>--inactive</option><replaceable>INACTIVE</replaceable>"
+msgstr ""
+
+#: passwd.1.xml:202(para) 
+msgid "This option is used to disable an account after the password has been expired for a number of days. After a user account has had an expired password for <replaceable>INACTIVE</replaceable> days, the user may no longer sign on to the account."
+msgstr ""
+
+#: passwd.1.xml:211(term) 
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr ""
+
+#: passwd.1.xml:215(para) 
+msgid "Indicate password change should be performed only for expired authentication tokens (passwords). The user wishes to keep their non-expired tokens as before."
+msgstr ""
+
+#: passwd.1.xml:223(term) 
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr ""
+
+#: passwd.1.xml:227(para) 
+msgid "Lock the password of the named account. This option disables a password by changing it to a value which matches no possible encrypted value (it adds a ´!´ at the beginning of the password)."
+msgstr ""
+
+#: passwd.1.xml:233(para) 
+msgid "Note that this does not disable the account. The user may still be able to login using another authentication token (e.g. an SSH key). To disable the account, administrators should use <command>usermod --expiredate 1</command> (this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+
+#: passwd.1.xml:240(para) 
+msgid "Users with a locked password are not allowed to change their password."
+msgstr ""
+
+#: passwd.1.xml:247(term) 
+msgid "<option>-n</option>, <option>--mindays</option><replaceable>MIN_DAYS</replaceable>"
+msgstr ""
+
+#: passwd.1.xml:251(para) chage.1.xml:142(para) 
+msgid "Set the minimum number of days between password changes to <replaceable>MIN_DAYS</replaceable>. A value of zero for this field indicates that the user may change his/her password at any time."
+msgstr ""
+
+#: passwd.1.xml:269(term) 
+msgid "<option>-r</option>, <option>--repository</option><replaceable>REPOSITORY</replaceable>"
+msgstr ""
+
+#: passwd.1.xml:273(para) 
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr ""
+
+#: passwd.1.xml:279(term) 
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr ""
+
+#: passwd.1.xml:283(para) 
+msgid "Display account status information. The status information consists of 7 fields. The first field is the user's login name. The second field indicates if the user account has a locked password (L), has no password (NP), or has a usable password (P). The third field gives the date of the last password change. The next four fields are the minimum age, maximum age, warning period, and inactivity period for the password. These ages are expressed in days."
+msgstr ""
+
+#: passwd.1.xml:297(term) 
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr ""
+
+#: passwd.1.xml:301(para) 
+msgid "Unlock the password of the named account. This option re-enables a password by changing the password back to its previous value (to the value before using the <option>-l</option> option)."
+msgstr ""
+
+#: passwd.1.xml:310(term) 
+msgid "<option>-w</option>, <option>--warndays</option><replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+
+#: passwd.1.xml:314(para) 
+msgid "Set the number of days of warning before a password change is required. The <replaceable>WARN_DAYS</replaceable> option is the number of days prior to the password expiring that a user will be warned that his/her password is about to expire."
+msgstr ""
+
+#: passwd.1.xml:323(term) 
+msgid "<option>-x</option>, <option>--maxdays</option><replaceable>MAX_DAYS</replaceable>"
+msgstr ""
+
+#: passwd.1.xml:327(para) 
+msgid "Set the maximum number of days a password remains valid. After <replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+
+#: passwd.1.xml:339(para) 
+msgid "Password complexity checking may vary from site to site. The user is urged to select a password as complex as he or she feels comfortable with."
+msgstr ""
+
+#: passwd.1.xml:344(para) 
+msgid "Users may not be able to change their password on a system if NIS is enabled and they are not logged into the NIS server."
+msgstr ""
+
+#: passwd.1.xml:349(para) 
+msgid "<command>passwd</command> uses PAM to authenticate users and to change their passwords."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term) gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term) 
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr ""
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para) gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para) 
+msgid "This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para) gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para) 
+msgid "<replaceable>DES</replaceable> (default)"
+msgstr ""
+
+#: passwd.1.xml:43(replaceable) newusers.8.xml:43(replaceable) login.defs.5.xml:43(replaceable) gpasswd.1.xml:43(replaceable) chpasswd.8.xml:43(replaceable) chgpasswd.8.xml:43(replaceable) 
+msgid "MD5"
+msgstr ""
+
+#: passwd.1.xml:46(replaceable) newusers.8.xml:46(replaceable) login.defs.5.xml:46(replaceable) gpasswd.1.xml:46(replaceable) chpasswd.8.xml:46(replaceable) chgpasswd.8.xml:46(replaceable) 
+msgid "SHA256"
+msgstr ""
+
+#: passwd.1.xml:49(replaceable) newusers.8.xml:49(replaceable) login.defs.5.xml:49(replaceable) gpasswd.1.xml:49(replaceable) chpasswd.8.xml:49(replaceable) chgpasswd.8.xml:49(replaceable) 
+msgid "SHA512"
+msgstr ""
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para) gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para) 
+msgid "It can take one of these values: <placeholder-1/>"
+msgstr ""
+
+#: passwd.1.xml:53(para) newusers.8.xml:53(para) login.defs.5.xml:53(para) gpasswd.1.xml:53(para) chpasswd.8.xml:53(para) chgpasswd.8.xml:53(para) 
+msgid "Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+
+#: passwd.1.xml:57(para) passwd.1.xml:53(para) passwd.1.xml:62(para) newusers.8.xml:57(para) newusers.8.xml:53(para) newusers.8.xml:62(para) login.defs.5.xml:57(para) login.defs.5.xml:53(para) login.defs.5.xml:62(para) gpasswd.1.xml:57(para) gpasswd.1.xml:53(para) gpasswd.1.xml:62(para) chpasswd.8.xml:57(para) chpasswd.8.xml:53(para) chpasswd.8.xml:62(para) chgpasswd.8.xml:57(para) chgpasswd.8.xml:53(para) chgpasswd.8.xml:62(para) 
+msgid "Note: This only affect the generation of group passwords. The generation of user passwords is done by PAM and subject to the PAM configuration. It is recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term) gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term) 
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para) gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para) 
+msgid "Indicate if passwords must be encrypted using the MD5-based algorithm. If set to <replaceable>yes</replaceable>, new passwords will be encrypted using the MD5-based algorithm compatible with the one used by recent releases of FreeBSD. It supports passwords of unlimited length and longer salt strings. Set to <replaceable>no</replaceable> if you need to copy encrypted passwords to other systems which don't understand the new algorithm. Default is <replaceable>no</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para) gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para) 
+msgid "This variable is superceded by the <option>ENCRYPT_METHOD</option> variable or by any command line option used to configure the encryption algorithm."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para) gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para) 
+msgid "This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term) 
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para) 
+msgid "Enable additional checks upon password changes."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term) 
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para) 
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term) 
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para) 
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term) 
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term) 
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para) 
+msgid "Number of significant characters in the password for crypt(). <option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your crypt() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to <replaceable>yes</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term) gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term) 
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term) gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term) 
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para) gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para) 
+msgid "When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</replaceable> or <replaceable>SHA512</replaceable>, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para) gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para) 
+msgid "With a lot of rounds, it is more difficult to brute forcing the password. But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para) gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para) 
+msgid "If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para) gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para) 
+msgid "The values must be inside the 1000-999999999 range."
+msgstr ""
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para) gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para) 
+msgid "If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or <option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be used."
+msgstr ""
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para) gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para) 
+msgid "If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</option>, the highest value will be used."
+msgstr ""
+
+#: passwd.1.xml:395(filename) 
+msgid "/etc/pam.d/passwd"
+msgstr ""
+
+#: passwd.1.xml:397(para) 
+msgid "PAM configuration for <command>passwd</command>."
+msgstr ""
+
+#: passwd.1.xml:417(para) chage.1.xml:241(para) 
+msgid "permission denied"
+msgstr ""
+
+#: passwd.1.xml:423(para) 
+msgid "invalid combination of options"
+msgstr ""
+
+#: passwd.1.xml:429(para) 
+msgid "unexpected failure, nothing done"
+msgstr ""
+
+#: passwd.1.xml:435(para) 
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr ""
+
+#: passwd.1.xml:441(para) 
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr ""
+
+#: passwd.1.xml:405(para) 
+msgid "The <command>passwd</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: passwd.1.xml:456(para) 
+msgid "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition=\"no_pam\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:34(refentrytitle) nologin.8.xml:39(refname) nologin.8.xml:45(command) 
+msgid "nologin"
+msgstr ""
+
+#: nologin.8.xml:40(refpurpose) 
+msgid "politely refuse a login"
+msgstr ""
+
+#: nologin.8.xml:51(para) 
+msgid "The <command>nologin</command> command displays a message that an account is not available and exits non-zero. It is intended as a replacement shell field for accounts that have been disabled."
+msgstr ""
+
+#: nologin.8.xml:56(para) 
+msgid "To disable all logins, investigate <citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:65(para) 
+msgid "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: nologin.8.xml:76(title) 
+msgid "HISTORY"
+msgstr ""
+
+#: nologin.8.xml:77(para) 
+msgid "The <command>nologin</command> command appearred in BSD 4.4."
+msgstr ""
+
+#: newusers.8.xml:50(refentrytitle) newusers.8.xml:55(refname) newusers.8.xml:61(command) login.defs.5.xml:353(term) 
+msgid "newusers"
+msgstr ""
+
+#: newusers.8.xml:56(refpurpose) 
+msgid "update and create new users in batch"
+msgstr ""
+
+#: newusers.8.xml:64(replaceable) 
+msgid "new_users"
+msgstr ""
+
+#: newusers.8.xml:71(para) 
+msgid "The <command>newusers</command> command reads a file of user name and clear-text password pairs and uses this information to update a group of existing users or to create new users. Each line is in the same format as the standard password file (see <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the exceptions explained below:"
+msgstr ""
+
+#: newusers.8.xml:79(para) 
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr ""
+
+#: newusers.8.xml:84(emphasis) 
+msgid "pw_name"
+msgstr ""
+
+#: newusers.8.xml:87(para) 
+msgid "This is the name of the user."
+msgstr ""
+
+#: newusers.8.xml:90(para) 
+msgid "It can be the name of a new user or the name of an existing user (or an user created before by <command>newusers</command>). In case of an existing user, the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+
+#: newusers.8.xml:101(emphasis) 
+msgid "pw_passwd"
+msgstr ""
+
+#: newusers.8.xml:104(para) 
+msgid "This field will be encrypted and used as the new value of the encrypted password."
+msgstr ""
+
+#: newusers.8.xml:112(emphasis) 
+msgid "pw_uid"
+msgstr ""
+
+#: newusers.8.xml:115(para) 
+msgid "This field is used to define the UID of the user."
+msgstr ""
+
+#: newusers.8.xml:118(para) 
+msgid "If the field is empty, an new (unused) UID will be defined automatically by <command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:122(para) 
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr ""
+
+#: newusers.8.xml:126(para) 
+msgid "If this field contains the name of an existing user (or the name of an user created before by <command>newusers</command>), the UID of the specified user will be used."
+msgstr ""
+
+#: newusers.8.xml:132(para) 
+msgid "If the UID of an existing user is changed, the files ownership of the user's file should be fixed manually."
+msgstr ""
+
+#: newusers.8.xml:140(emphasis) 
+msgid "pw_gid"
+msgstr ""
+
+#: newusers.8.xml:143(para) 
+msgid "This field is used to define the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:146(para) 
+msgid "If this field contains the name of an existing group (or a group created before by <command>newusers</command>), the GID of this group will be used as the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:152(para) 
+msgid "If this field is a number, this number will be used as the primary group ID of the user. If no groups exist with this GID, a new group will be created with this GID, and the name of the user."
+msgstr ""
+
+#: newusers.8.xml:158(para) 
+msgid "If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by <command>newusers</command> to be used as the primary group ID for the user and as the GID for the new group."
+msgstr ""
+
+#: newusers.8.xml:164(para) 
+msgid "If this field contains the name of a group which does not exist (and was not created earlier wbefore by <command>newusers</command>), a new group will be created with the specified name and a GID will be automatically defined by <command>newusers</command> to be used as the primary group ID for the user and Gs the ID for the new group."
+msgstr ""
+
+#: newusers.8.xml:176(emphasis) 
+msgid "pw_gecos"
+msgstr ""
+
+#: newusers.8.xml:179(para) 
+msgid "This field is copied in the GECOS field of the user."
+msgstr ""
+
+#: newusers.8.xml:186(emphasis) 
+msgid "pw_dir"
+msgstr ""
+
+#: newusers.8.xml:189(para) 
+msgid "This field is used to define the home directory of the user."
+msgstr ""
+
+#: newusers.8.xml:192(para) 
+msgid "If this field does not specify an existing directory, the specified directory is created, with ownership set to the user being created or updated and its primary group."
+msgstr ""
+
+#: newusers.8.xml:197(para) 
+msgid "If the home directory of an existing user is changed, <command>newusers</command> does not move or copy the content of the old directory to the new location. This should be done manually."
+msgstr ""
+
+#: newusers.8.xml:207(emphasis) 
+msgid "pw_shell"
+msgstr ""
+
+#: newusers.8.xml:210(para) 
+msgid "This field defines the shell of the user. No checks are performed on this field."
+msgstr ""
+
+#: newusers.8.xml:218(para) 
+msgid "<command>newusers</command> first tries to create or change all the specified users, and then write these changes to the user or group databases. If an error occurs (except in the final writes to the databases), no changes are committed to the databases."
+msgstr ""
+
+#: newusers.8.xml:224(para) 
+msgid "During this first pass, users are created with a locked password (and passwords are not changed for the users which are not created). A second pass is used to update the passwords using PAM. Failures to update a password are reported, but will not stop the other password updates."
+msgstr ""
+
+#: newusers.8.xml:232(para) 
+msgid "This command is intended to be used in a large system environment where many accounts are updated at a single time."
+msgstr ""
+
+#: newusers.8.xml:240(para) 
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr ""
+
+#: newusers.8.xml:245(term) chpasswd.8.xml:116(term) chgpasswd.8.xml:95(term) 
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr ""
+
+#: newusers.8.xml:247(para) chpasswd.8.xml:118(para) chgpasswd.8.xml:97(para) 
+msgid "Use the specified method to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:248(para) chpasswd.8.xml:122(para) chgpasswd.8.xml:101(para) 
+msgid "The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods."
+msgstr ""
+
+#: newusers.8.xml:270(para) 
+msgid "System users will be created with no aging information in <filename>/etc/shadow</filename>, and their numeric identifiers are choosen in the <option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in <filename>login.defs</filename>, instead of <option>UID_MIN</option>-<option>UID_MAX</option> (and their <option>GID</option> counterparts for the creation of groups)."
+msgstr ""
+
+#: newusers.8.xml:284(term) chpasswd.8.xml:154(term) chgpasswd.8.xml:129(term) 
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr ""
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:156(para) chgpasswd.8.xml:131(para) 
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:289(para) chpasswd.8.xml:159(para) chgpasswd.8.xml:134(para) 
+msgid "The value 0 means that the system will choose the default number of rounds for the crypt method (5000)."
+msgstr ""
+
+#: newusers.8.xml:293(para) chpasswd.8.xml:163(para) chgpasswd.8.xml:138(para) 
+msgid "A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+
+#: newusers.8.xml:297(para) chpasswd.8.xml:167(para) chgpasswd.8.xml:142(para) 
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+
+#: newusers.8.xml:301(para) chpasswd.8.xml:171(para) chgpasswd.8.xml:146(para) 
+msgid "By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: newusers.8.xml:313(para) 
+msgid "The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+
+#: newusers.8.xml:317(para) chpasswd.8.xml:187(para) chgpasswd.8.xml:162(para) 
+msgid "You should make sure the passwords and the encryption method respect the system's password policy."
+msgstr ""
+
+#: newusers.8.xml:390(filename) 
+msgid "/etc/pam.d/newusers"
+msgstr ""
+
+#: newusers.8.xml:392(para) 
+msgid "PAM configuration for <command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:400(para) 
+msgid "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: newgrp.1.xml:38(refentrytitle) newgrp.1.xml:43(refname) newgrp.1.xml:49(command) 
+msgid "newgrp"
+msgstr ""
+
+#: newgrp.1.xml:44(refpurpose) 
+msgid "log in to a new group"
+msgstr ""
+
+#: newgrp.1.xml:50(replaceable) grpck.8.xml:51(replaceable) grpck.8.xml:60(replaceable) groupdel.8.xml:51(replaceable) groupadd.8.xml:58(replaceable) gpasswd.1.xml:66(replaceable) 
+msgid "group"
+msgstr ""
+
+#: newgrp.1.xml:56(para) 
+msgid "The <command>newgrp</command> command is used to change the current group ID during a login session. If the optional <option>-</option> flag is given, the user's environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged."
+msgstr ""
+
+#: newgrp.1.xml:64(para) 
+msgid "<command>newgrp</command> changes the current real group ID to the named group, or to the default group listed in <filename>/etc/passwd</filename> if no group name is given. <command>newgrp</command> also tries to add the group to the user groupset. If not root, the user will be prompted for a password if she does not have a password (in <filename>/etc/shadow</filename> if this user has an entry in the shadowed password file, or in <filename>/etc/passwd</filename> otherwise) and the group does, or if the user is not listed as a member and the group has a password. The user will be denied access if the group password is empty and the user is not listed as a member."
+msgstr ""
+
+#: newgrp.1.xml:78(para) 
+msgid "If there is an entry for this group in <filename>/etc/gshadow</filename>, then the list of members and the password of this group will be taken from this file, otherwise, the entry in <filename>/etc/group</filename> is considered."
+msgstr ""
+
+#: newgrp.1.xml:130(para) 
+msgid "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition=\"gshadow\">, <citerefentry condition=\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+
+#: logoutd.8.xml:34(refentrytitle) logoutd.8.xml:39(refname) logoutd.8.xml:45(command) 
+msgid "logoutd"
+msgstr ""
+
+#: logoutd.8.xml:40(refpurpose) 
+msgid "Enforce login time restrictions"
+msgstr ""
+
+#: logoutd.8.xml:51(para) 
+msgid "<command>logoutd</command> enforces the login time and port restrictions specified in <filename>/etc/porttime</filename>. <command>logoutd</command> should be started from <filename>/etc/rc</filename>. The <filename>/var/run/utmp</filename> file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time. Any login session which is violating the restrictions in <filename>/etc/porttime</filename> is terminated."
+msgstr ""
+
+#: logoutd.8.xml:73(filename) login.1.xml:319(filename) 
+msgid "/var/run/utmp"
+msgstr ""
+
+#: logoutd.8.xml:75(para) login.1.xml:321(para) 
+msgid "List of current login sessions."
+msgstr ""
+
+#: login.defs.5.xml:97(refentrytitle) login.defs.5.xml:102(refname) 
+msgid "login.defs"
+msgstr ""
+
+#: login.defs.5.xml:103(refpurpose) 
+msgid "shadow password suite configuration"
+msgstr ""
+
+#: login.defs.5.xml:108(para) 
+msgid "The <filename>/etc/login.defs</filename> file defines the site-specific configuration for the shadow password suite. This file is required. Absence of this file will not prevent system operation, but will probably result in undesirable operation."
+msgstr ""
+
+#: login.defs.5.xml:115(para) 
+msgid "This file is a readable text file, each line of the file describing one configuration parameter. The lines consist of a configuration name and value, separated by whitespace. Blank lines and comment lines are ignored. Comments are introduced with a \"#\" pound sign and the pound sign must be the first non-white character of the line."
+msgstr ""
+
+#: login.defs.5.xml:123(para) 
+msgid "Parameter values may be of four types: strings, booleans, numbers, and long numbers. A string is comprised of any printable characters. A boolean should be either the value <replaceable>yes</replaceable> or <replaceable>no</replaceable>. An undefined boolean parameter or one with a value other than these will be given a <replaceable>no</replaceable> value. Numbers (both regular and long) may be either decimal values, octal values (precede the value with <replaceable>0</replaceable>) or hexadecimal values (precede the value with <replaceable>0x</replaceable>). The maximum value of the regular and long numeric parameters is machine-dependent."
+msgstr ""
+
+#: login.defs.5.xml:138(para) 
+msgid "The following configuration items are provided:"
+msgstr ""
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term) 
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para) 
+msgid "If <replaceable>yes</replaceable>, the <command>chfn</command> program will require authentication before making any changes, unless run by the superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term) 
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para) 
+msgid "This parameter specifies which values in the <emphasis remap=\"I\">gecos</emphasis> field of the <filename>/etc/passwd</filename> file may be changed by regular users using the <command>chfn</command> program. It can be any combination of letters <replaceable>f</replaceable>, <replaceable>r</replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, for Full name, Room number, Work phone, and Home phone, respectively. For backward compatibility, <replaceable>yes</replaceable> is equivalent to <replaceable>rwh</replaceable> and <replaceable>no</replaceable> is equivalent to <replaceable>frwh</replaceable>. If not specified, only the superuser can make any changes. The most restrictive setting is better achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term) 
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para) 
+msgid "If <replaceable>yes</replaceable>, the <command>chsh</command> program will require authentication before making any changes, unless run by the superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>ERASECHAR</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Terminal ERASE character (<replaceable>010</replaceable> = backspace, <replaceable>0177</replaceable> = DEL)."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para) login.1.xml:37(para) 
+msgid "The value can be prefixed \"0\" for an octal value, or \"0x\" for an hexadecimal value."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Enable logging and display of <filename>/var/log/faillog</filename> login failure info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "If set, <command>login</command> will execute this shell instead of the users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "If defined, this file can inhibit all the usual chatter during the login sequence. If a full pathname is specified, then hushed mode will be enabled if the user's name or shell are found in the file. If not a full pathname, then hushed mode will be enabled if the file exists in the user's home directory."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>KILLCHAR</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Enable logging of successful logins."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para) 
+msgid "Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Maximum number of login retries in case of bad password."
+msgstr ""
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para) 
+msgid "This will most likely be overriden by PAM, since the default pam_unix module has it's own built in of 3 retries. However, this is a safe fallback in case you are using an authentication module that does not enforce PAM_MAXTRIES."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Max time in seconds for login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "If defined, \":\" delimited list of \"message of the day\" files to be displayed upon login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "If defined, name of file whose presence will inhibit non-root logins. The contents of this file should be a message indicating why logins are inhibited."
+msgstr ""
+
+#: login.defs.5.xml:181(para) 
+msgid "<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and <option>PASS_WARN_AGE</option> are only used at the time of account creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Enable checking of time restrictions specified in /etc/porttime."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>TTYGROUP</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:33(term) login.1.xml:33(term) 
+msgid "<option>TTYPERM</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para) 
+msgid "The terminal permissions: the login tty will be owned by the <option>TTYGROUP</option> group, and the permissions will be set to <option>TTYPERM</option>."
+msgstr ""
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para) 
+msgid "By default, the ownership of the terminal is set to the user's primary group and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para) 
+msgid "<option>TTYGROUP</option> can be either the name of a group or a numeric group identifier."
+msgstr ""
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para) 
+msgid "If you have a <command>write</command> program which is \"setgid\" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "If defined, file which maps tty line to TERM environment parameter. Each line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term) 
+msgid "<option>ULIMIT</option> (number)"
+msgstr ""
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para) 
+msgid "Default <command>ulimit</command> value."
+msgstr ""
+
+#: login.defs.5.xml:209(title) 
+msgid "CROSS REFERENCES"
+msgstr ""
+
+#: login.defs.5.xml:210(para) 
+msgid "The following cross references show which programs in the shadow password suite use which parameters."
+msgstr ""
+
+#: login.defs.5.xml:218(term) chfn.1.xml:41(refentrytitle) chfn.1.xml:46(refname) chfn.1.xml:52(command) 
+msgid "chfn"
+msgstr ""
+
+#: login.defs.5.xml:220(para) 
+msgid "<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:228(term) chgpasswd.8.xml:42(refentrytitle) chgpasswd.8.xml:47(refname) chgpasswd.8.xml:53(command) 
+msgid "chgpasswd"
+msgstr ""
+
+#: login.defs.5.xml:230(para) login.defs.5.xml:260(para) 
+msgid "ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition=\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:238(term) chpasswd.8.xml:41(refentrytitle) chpasswd.8.xml:46(refname) chpasswd.8.xml:52(command) 
+msgid "chpasswd"
+msgstr ""
+
+#: login.defs.5.xml:240(para) 
+msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB <phrase condition=\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:248(term) chsh.1.xml:40(refentrytitle) chsh.1.xml:45(refname) chsh.1.xml:51(command) 
+msgid "chsh"
+msgstr ""
+
+#: login.defs.5.xml:250(para) 
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr ""
+
+#: login.defs.5.xml:258(term) gpasswd.1.xml:42(refentrytitle) gpasswd.1.xml:47(refname) gpasswd.1.xml:61(command) 
+msgid "gpasswd"
+msgstr ""
+
+#: login.defs.5.xml:268(term) groupadd.8.xml:42(refentrytitle) groupadd.8.xml:47(refname) groupadd.8.xml:53(command) 
+msgid "groupadd"
+msgstr ""
+
+#: login.defs.5.xml:270(para) 
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr ""
+
+#: login.defs.5.xml:277(term) groupdel.8.xml:38(refentrytitle) groupdel.8.xml:43(refname) groupdel.8.xml:49(command) 
+msgid "groupdel"
+msgstr ""
+
+#: login.defs.5.xml:279(para) login.defs.5.xml:285(para) login.defs.5.xml:291(para) login.defs.5.xml:298(para) login.defs.5.xml:304(para) login.defs.5.xml:310(para) 
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:283(term) groupmems.8.xml:38(refentrytitle) groupmems.8.xml:43(refname) groupmems.8.xml:49(command) 
+msgid "groupmems"
+msgstr ""
+
+#: login.defs.5.xml:289(term) groupmod.8.xml:38(refentrytitle) groupmod.8.xml:43(refname) groupmod.8.xml:49(command) 
+msgid "groupmod"
+msgstr ""
+
+#: login.defs.5.xml:296(term) grpck.8.xml:38(refentrytitle) grpck.8.xml:43(refname) grpck.8.xml:49(command) grpck.8.xml:58(command) 
+msgid "grpck"
+msgstr ""
+
+#: login.defs.5.xml:316(term) login.1.xml:70(refentrytitle) login.1.xml:75(refname) login.1.xml:81(command) login.1.xml:89(command) login.1.xml:96(command) 
+msgid "login"
+msgstr ""
+
+#: login.defs.5.xml:318(para) 
+msgid "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME <phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR <phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</phrase> USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:345(term) 
+msgid "newgrp / sg"
+msgstr ""
+
+#: login.defs.5.xml:347(para) 
+msgid "SYSLOG_SG_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:355(para) 
+msgid "ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+
+#: login.defs.5.xml:371(para) 
+msgid "ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:382(para) login.defs.5.xml:390(para) 
+msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+msgstr ""
+
+#: login.defs.5.xml:397(para) 
+msgid "<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME <phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition=\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:412(term) 
+msgid "sulogin"
+msgstr ""
+
+#: login.defs.5.xml:414(para) 
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:423(para) 
+msgid "CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+
+#: login.defs.5.xml:436(para) 
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:445(para) 
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:456(para) 
+msgid "Much of the functionality that used to be provided by the shadow password suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is no longer used by <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by <citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, and <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the corresponding PAM configuration files instead."
+msgstr ""
+
+#: login.defs.5.xml:472(para) 
+msgid "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: login.access.5.xml:35(refentrytitle) login.access.5.xml:40(refname) 
+msgid "login.access"
+msgstr ""
+
+#: login.access.5.xml:41(refpurpose) 
+msgid "login access control table"
+msgstr ""
+
+#: login.access.5.xml:46(para) 
+msgid "The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, host) combinations and/or (user, tty) combinations for which a login will be either accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:52(para) 
+msgid "When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is scanned for the first entry that matches the (user, host) combination, or, in case of non-networked logins, the first entry that matches the (user, tty) combination. The permissions field of that table entry determines whether the login will be accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:60(para) 
+msgid "Each line of the login access control table has three fields separated by a \":\" character:"
+msgstr ""
+
+#: login.access.5.xml:65(para) 
+msgid "<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+
+#: login.access.5.xml:69(para) 
+msgid "The first field should be a \"<emphasis>+</emphasis>\" (access granted) or \"<emphasis>-</emphasis>\" (access denied) character. The second field should be a list of one or more login names, group names, or <emphasis>ALL</emphasis> (always matches). The third field should be a list of one or more tty names (for non-networked logins), host names, domain names (begin with \"<literal>.</literal>\"), host addresses, internet network numbers (end with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or <emphasis>LOCAL</emphasis> (matches any string that does not contain a \"<literal>.</literal>\" character). If you run NIS you can use @netgroupname in host or user patterns."
+msgstr ""
+
+#: login.access.5.xml:83(para) 
+msgid "The <emphasis>EXCEPT</emphasis> operator makes it possible to write very compact rules."
+msgstr ""
+
+#: login.access.5.xml:88(para) 
+msgid "The group file is searched only when a name does not match that of the logged-in user. Only groups are matched in which users are explicitly listed: the program does not look at a user's primary group id value."
+msgstr ""
+
+#: login.1.xml:76(refpurpose) 
+msgid "begin session on the system"
+msgstr ""
+
+#: login.1.xml:82(arg) login.1.xml:90(arg) login.1.xml:97(arg) login.1.xml:214(option) groupmems.8.xml:54(arg) 
+msgid "-p"
+msgstr ""
+
+#: login.1.xml:83(replaceable) login.1.xml:91(replaceable) login.1.xml:98(replaceable) 
+msgid "host"
+msgstr ""
+
+#: login.1.xml:83(arg) login.1.xml:91(arg) chfn.1.xml:56(arg) 
+msgid "-h <placeholder-1/>"
+msgstr ""
+
+#: login.1.xml:86(replaceable) 
+msgid "ENV=VAR"
+msgstr ""
+
+#: login.1.xml:92(arg) login.1.xml:192(option) expiry.1.xml:54(arg) 
+msgid "-f"
+msgstr ""
+
+#: login.1.xml:98(arg) chfn.1.xml:54(arg) 
+msgid "-r <placeholder-1/>"
+msgstr ""
+
+#: login.1.xml:104(para) 
+msgid "The <command>login</command> program is used to establish a new session with the system. It is normally invoked automatically by responding to the <emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. <command>login</command> may be special to the shell and may not be invoked as a sub-process. When called from a shell, <command>login</command> should be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller). Attempting to execute <command>login</command> from any shell but the login shell will produce an error message."
+msgstr ""
+
+#: login.1.xml:118(para) 
+msgid "The user is then prompted for a password, where appropriate. Echoing is disabled to prevent revealing the password. Only a small number of password failures are permitted before <command>login</command> exits and the communications link is severed."
+msgstr ""
+
+#: login.1.xml:125(para) 
+msgid "If password aging has been enabled for your account, you may be prompted for a new password before proceeding. You will be forced to provide your old password and the new password before continuing. Please refer to <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry> for more information."
+msgstr ""
+
+#: login.1.xml:134(para) 
+msgid "After a successful login, you will be informed of any system messages and the presence of mail. You may turn off the printing of the system message file, <filename>/etc/motd</filename>, by creating a zero-length file <filename>.hushlogin</filename> in your login directory. The mail message will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to the condition of your mailbox."
+msgstr ""
+
+#: login.1.xml:145(para) 
+msgid "Your user and group ID will be set according to their values in the <filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and <envar>$MAIL</envar> are set according to the appropriate fields in the password entry. Ulimit, umask and nice values may also be set according to entries in the GECOS field."
+msgstr ""
+
+#: login.1.xml:154(para) 
+msgid "On some installations, the environmental variable <envar>$TERM</envar> will be initialized to the terminal type on your tty line, as specified in <filename>/etc/ttytype</filename>."
+msgstr ""
+
+#: login.1.xml:160(para) 
+msgid "An initialization script for your command interpreter may also be executed. Please see the appropriate manual section for more information on this function."
+msgstr ""
+
+#: login.1.xml:172(para) login.1.xml:248(para) 
+msgid "The <command>login</command> program is NOT responsible for removing users from the utmp file. It is the responsibility of <citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></citerefentry> and <citerefentry><refentrytitle>init</refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent ownership of a terminal session. If you use <command>login</command> from the shell prompt without <command>exec</command>, the user you use will continue to appear to be logged in even after you log out of the \"subsession\"."
+msgstr ""
+
+#: login.1.xml:195(para) 
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr ""
+
+#: login.1.xml:198(para) 
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+
+#: login.1.xml:206(option) 
+msgid "-h"
+msgstr ""
+
+#: login.1.xml:209(para) 
+msgid "Name of the remote host for this login."
+msgstr ""
+
+#: login.1.xml:217(para) 
+msgid "Preserve environment."
+msgstr ""
+
+#: login.1.xml:225(para) 
+msgid "Perform autologin protocol for rlogin."
+msgstr ""
+
+#: login.1.xml:230(para) 
+msgid "The <option>-r</option>, <option>-h</option> and <option>-f</option> options are only used when <command>login</command> is invoked by root."
+msgstr ""
+
+#: login.1.xml:239(para) 
+msgid "This version of <command>login</command> has many compilation options, only some of which may be in use at any particular site."
+msgstr ""
+
+#: login.1.xml:244(para) 
+msgid "The location of files is subject to differences in system configuration."
+msgstr ""
+
+#: login.1.xml:260(para) 
+msgid "As with any program, <command>login</command>'s appearance can be faked. If non-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack."
+msgstr ""
+
+#: login.1.xml:325(filename) 
+msgid "/var/log/wtmp"
+msgstr ""
+
+#: login.1.xml:327(para) 
+msgid "List of previous login sessions."
+msgstr ""
+
+#: login.1.xml:343(filename) 
+msgid "/etc/motd"
+msgstr ""
+
+#: login.1.xml:345(para) 
+msgid "System message of the day file."
+msgstr ""
+
+#: login.1.xml:349(filename) 
+msgid "/etc/nologin"
+msgstr ""
+
+#: login.1.xml:351(para) 
+msgid "Prevent non-root users from logging in."
+msgstr ""
+
+#: login.1.xml:355(filename) 
+msgid "/etc/ttytype"
+msgstr ""
+
+#: login.1.xml:357(para) 
+msgid "List of terminal types."
+msgstr ""
+
+#: login.1.xml:361(filename) 
+msgid "$HOME/.hushlogin"
+msgstr ""
+
+#: login.1.xml:363(para) 
+msgid "Suppress printing of system messages."
+msgstr ""
+
+#: login.1.xml:377(para) 
+msgid "<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:35(refentrytitle) limits.5.xml:40(refname) 
+msgid "limits"
+msgstr ""
+
+#: limits.5.xml:41(refpurpose) 
+msgid "resource limits definition"
+msgstr ""
+
+#: limits.5.xml:47(para) 
+msgid "The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</filename> by default or LIMITS_FILE defined <filename>config.h</filename>) describes the resource limits you wish to impose. It should be owned by root and readable by root account only."
+msgstr ""
+
+#: limits.5.xml:55(para) 
+msgid "By default no quota is imposed on 'root'. In fact, there is no way to impose limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+
+#: limits.5.xml:61(para) 
+msgid "Each line describes a limit for a user in the form:"
+msgstr ""
+
+#: limits.5.xml:64(emphasis) 
+msgid "user LIMITS_STRING"
+msgstr ""
+
+#: limits.5.xml:67(para) 
+msgid "The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of resource limits. Each limit consists of a letter identifier followed by a numerical limit."
+msgstr ""
+
+#: limits.5.xml:73(para) 
+msgid "The valid identifiers are:"
+msgstr ""
+
+#: limits.5.xml:76(para) 
+msgid "A: max address space (KB)"
+msgstr ""
+
+#: limits.5.xml:77(para) 
+msgid "C: max core file size (KB)"
+msgstr ""
+
+#: limits.5.xml:78(para) 
+msgid "D: max data size (KB)"
+msgstr ""
+
+#: limits.5.xml:79(para) 
+msgid "F: maximum filesize (KB)"
+msgstr ""
+
+#: limits.5.xml:80(para) 
+msgid "M: max locked-in-memory address space (KB)"
+msgstr ""
+
+#: limits.5.xml:81(para) 
+msgid "N: max number of open files"
+msgstr ""
+
+#: limits.5.xml:82(para) 
+msgid "R: max resident set size (KB)"
+msgstr ""
+
+#: limits.5.xml:83(para) 
+msgid "S: max stack size (KB)"
+msgstr ""
+
+#: limits.5.xml:84(para) 
+msgid "T: max CPU time (MIN)"
+msgstr ""
+
+#: limits.5.xml:85(para) 
+msgid "U: max number of processes"
+msgstr ""
+
+#: limits.5.xml:86(para) 
+msgid "K: file creation mask, set by <citerefentry><refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:91(para) 
+msgid "L: max number of logins for this user"
+msgstr ""
+
+#: limits.5.xml:92(para) 
+msgid "P: process priority, set by <citerefentry><refentrytitle>setpriority</refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:97(para) 
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+
+#: limits.5.xml:99(para) 
+msgid "O: max real time priority"
+msgstr ""
+
+#: limits.5.xml:102(para) 
+msgid "For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid <emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following entries are equivalent:"
+msgstr ""
+
+#: limits.5.xml:108(programlisting) 
+#, no-wrap
+msgid "\n      username L2D2048N5\n      username L2 D2048 N5\n    "
+msgstr ""
+
+#: limits.5.xml:113(para) 
+msgid "Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of the line is considered a limit string, thus comments are not allowed. A invalid limits string will be rejected (not considered) by the <command>login</command> program."
+msgstr ""
+
+#: limits.5.xml:120(para) 
+msgid "The default entry is denoted by username \"<emphasis>*</emphasis>\". If you have multiple <emphasis remap=\"I\">default</emphasis> entries in your <emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the default entry."
+msgstr ""
+
+#: limits.5.xml:127(para) 
+msgid "To completely disable limits for a user, a single dash \"<emphasis>-</emphasis>\" will do."
+msgstr ""
+
+#: limits.5.xml:132(para) 
+msgid "Also, please note that all limit settings are set PER LOGIN. They are not global, nor are they permanent. Perhaps global limits will come, but for now this will have to do ;)"
+msgstr ""
+
+#: limits.5.xml:143(filename) 
+msgid "/etc/limits"
+msgstr ""
+
+#: limits.5.xml:151(para) 
+msgid "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>setpriority</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: lastlog.8.xml:35(refentrytitle) lastlog.8.xml:40(refname) lastlog.8.xml:46(command) 
+msgid "lastlog"
+msgstr ""
+
+#: lastlog.8.xml:41(refpurpose) 
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+
+#: lastlog.8.xml:55(para) 
+msgid "<command>lastlog</command> formats and prints the contents of the last login log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</emphasis> will be printed. The default (no flags) causes lastlog entries to be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: lastlog.8.xml:67(para) 
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr ""
+
+#: lastlog.8.xml:72(term) 
+msgid "<option>-b</option>, <option>--before</option><replaceable>DAYS</replaceable>"
+msgstr ""
+
+#: lastlog.8.xml:76(para) 
+msgid "Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+
+#: lastlog.8.xml:90(term) faillog.8.xml:140(term) 
+msgid "<option>-t</option>, <option>--time</option><replaceable>DAYS</replaceable>"
+msgstr ""
+
+#: lastlog.8.xml:95(para) 
+msgid "Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+
+#: lastlog.8.xml:102(term) faillog.8.xml:151(term) 
+msgid "<option>-u</option>, <option>--user</option><replaceable>LOGIN</replaceable>|<replaceable>RANGE</replaceable>"
+msgstr ""
+
+#: lastlog.8.xml:107(para) 
+msgid "Print the lastlog record of the specified user(s)."
+msgstr ""
+
+#: lastlog.8.xml:110(para) faillog.8.xml:161(para) 
+msgid "The users can be specified by a login name, a numerical user ID, or a <replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</replaceable> of users can be specified with a min and max values (<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+
+#: lastlog.8.xml:122(para) 
+msgid "If the user has never logged in the message <emphasis>** Never logged in**</emphasis> will be displayed instead of the port and time."
+msgstr ""
+
+#: lastlog.8.xml:127(para) 
+msgid "Only the entries for the current users of the system will be displayed. Other entries may exist for users that were deleted previously."
+msgstr ""
+
+#: lastlog.8.xml:135(title) groups.1.xml:65(title) chsh.1.xml:106(title) chage.1.xml:193(title) 
+msgid "NOTE"
+msgstr ""
+
+#: lastlog.8.xml:136(para) 
+msgid "The <filename>lastlog</filename> file is a database which contains info on the last login of each user. You should not rotate it. It is a sparse file, so its size on the disk is usually much smaller than the one shown by \"<command>ls -l</command>\" (which can indicate a really big file if you have in <filename>passwd</filename> users with a high UID). You can display its real size with \"<command>ls -s</command>\"."
+msgstr ""
+
+#: lastlog.8.xml:150(filename) 
+msgid "/var/log/lastlog"
+msgstr ""
+
+#: lastlog.8.xml:152(para) 
+msgid "Database times of previous user logins."
+msgstr ""
+
+#: lastlog.8.xml:160(para) 
+msgid "Large gaps in UID numbers will cause the lastlog program to run longer with no output to the screen (i.e. if in lastlog database there is no entries for users with UID between 170 and 800 lastlog will appear to hang as it processes entries with UIDs 171-799)."
+msgstr ""
+
+#: gshadow.5.xml:33(refentrytitle) gshadow.5.xml:38(refname) 
+msgid "gshadow"
+msgstr ""
+
+#: gshadow.5.xml:39(refpurpose) 
+msgid "shadowed group file"
+msgstr ""
+
+#: gshadow.5.xml:44(para) 
+msgid "<filename>/etc/gshadow</filename> contains the shadowed information for group accounts."
+msgstr ""
+
+#: gshadow.5.xml:54(para) 
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+
+#: gshadow.5.xml:60(emphasis) 
+msgid "group name"
+msgstr ""
+
+#: gshadow.5.xml:62(para) 
+msgid "It must be a valid group name, which exist on the system."
+msgstr ""
+
+#: gshadow.5.xml:75(para) 
+msgid "If the password field contains some string that is not a valid result of <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></citerefentry>, for instance ! or *, users will not be able to use a unix password to access the group (but group members do not need the password)."
+msgstr ""
+
+#: gshadow.5.xml:82(para) 
+msgid "The password is used when an user who is not a member of the group wants to gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+
+#: gshadow.5.xml:88(para) 
+msgid "This field may be empty, in which case only the group members can gain the group permissions."
+msgstr ""
+
+#: gshadow.5.xml:98(para) 
+msgid "This password supersedes any password specified in <filename>/etc/group</filename>."
+msgstr ""
+
+#: gshadow.5.xml:106(emphasis) 
+msgid "administrators"
+msgstr ""
+
+#: gshadow.5.xml:108(para) gshadow.5.xml:124(para) 
+msgid "It must be a comma-separated list of user names."
+msgstr ""
+
+#: gshadow.5.xml:111(para) 
+msgid "Administrators can change the password or the members of the group."
+msgstr ""
+
+#: gshadow.5.xml:115(para) 
+msgid "Administrators also have the same permissions as the members (see below)."
+msgstr ""
+
+#: gshadow.5.xml:122(emphasis) 
+msgid "members"
+msgstr ""
+
+#: gshadow.5.xml:127(para) 
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+
+#: gshadow.5.xml:131(para) 
+msgid "You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+
+#: gshadow.5.xml:160(para) 
+msgid "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>grpconv</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+msgstr ""
+
+#: grpck.8.xml:44(refpurpose) 
+msgid "verify integrity of group files"
+msgstr ""
+
+#: grpck.8.xml:70(para) 
+msgid "The <command>grpck</command> command verifies the integrity of the groups information. It checks that all entries in <filename>/etc/group</filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</filename></phrase> have the proper format and contain valid data. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors."
+msgstr ""
+
+#: grpck.8.xml:87(para) 
+msgid "a unique and valid group name"
+msgstr ""
+
+#: grpck.8.xml:90(para) 
+msgid "a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/group</filename> only)</phrase>"
+msgstr ""
+
+#: grpck.8.xml:97(para) 
+msgid "a valid list of members <phrase condition=\"gshadow\"> and administrators</phrase>"
+msgstr ""
+
+#: grpck.8.xml:103(para) 
+msgid "a corresponding entry in the <filename>/etc/gshadow</filename> file (respectively <filename>/etc/group</filename> for the <filename>gshadow</filename> checks)"
+msgstr ""
+
+#: grpck.8.xml:111(para) 
+msgid "The checks for correct number of fields and unique group name are fatal. If an entry has the wrong number of fields, the user will be prompted to delete the entire line. If the user does not answer affirmatively, all further checks are bypassed. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made. All other errors are warnings and the user is encouraged to run the <command>groupmod</command> command to correct the error."
+msgstr ""
+
+#: grpck.8.xml:122(para) 
+msgid "The commands which operate on the <filename>/etc/group</filename><phrase condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and <filename>/etc/gshadow</filename> files</phrase> are not able to alter corrupted or duplicated entries. <command>grpck</command> should be used in those circumstances to remove the offending entries."
+msgstr ""
+
+#: grpck.8.xml:134(para) 
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr ""
+
+#: grpck.8.xml:141(para) 
+msgid "Execute the <command>grpck</command> command in read-only mode. This causes all questions regarding changes to be answered <emphasis>no</emphasis> without user intervention."
+msgstr ""
+
+#: grpck.8.xml:151(para) 
+msgid "Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+
+#: grpck.8.xml:160(para) 
+msgid "By default, <command>grpck</command> operates on <filename>/etc/group</filename><phrase condition=\"gshadow\"> and <filename>/etc/gshadow</filename></phrase>. The user may select alternate files with the <emphasis remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</emphasis> parameters.</phrase>"
+msgstr ""
+
+#: grpck.8.xml:228(para) 
+msgid "one or more bad group entries"
+msgstr ""
+
+#: grpck.8.xml:234(para) 
+msgid "can't open group files"
+msgstr ""
+
+#: grpck.8.xml:240(para) 
+msgid "can't lock group files"
+msgstr ""
+
+#: grpck.8.xml:246(para) 
+msgid "can't update group files"
+msgstr ""
+
+#: grpck.8.xml:210(para) 
+msgid "The <command>grpck</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: grpck.8.xml:255(para) 
+msgid "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition=\"gshadow\"><citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: groups.1.xml:34(refentrytitle) groups.1.xml:39(refname) groups.1.xml:45(command) 
+msgid "groups"
+msgstr ""
+
+#: groups.1.xml:40(refpurpose) 
+msgid "display current group names"
+msgstr ""
+
+#: groups.1.xml:47(replaceable) chfn.1.xml:58(replaceable) 
+msgid "user"
+msgstr ""
+
+#: groups.1.xml:54(para) 
+msgid "The <command>groups</command> command displays the current group names or ID values. If the value does not have a corresponding entry in <filename>/etc/group</filename>, the value will be displayed as the numerical group value. The optional <emphasis remap=\"I\">user</emphasis> parameter will display the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+
+#: groups.1.xml:66(para) 
+msgid "Systems which do not support concurrent group sets will have the information from <filename>/etc/group</filename> reported. The user must use <command>newgrp</command> or <command>sg</command> to change their current real and effective group ID."
+msgstr ""
+
+#: groups.1.xml:88(para) 
+msgid "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>getgid</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: groupmod.8.xml:44(refpurpose) 
+msgid "modify a group definition on the system"
+msgstr ""
+
+#: groupmod.8.xml:53(replaceable) 
+msgid "GROUP"
+msgstr ""
+
+#: groupmod.8.xml:59(para) 
+msgid "The <command>groupmod</command> command modifies the definition of the specified <replaceable>GROUP</replaceable> by modifying the appropriate entry in the group database."
+msgstr ""
+
+#: groupmod.8.xml:68(para) 
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr ""
+
+#: groupmod.8.xml:74(term) groupadd.8.xml:94(term) 
+msgid "<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+msgstr ""
+
+#: groupmod.8.xml:78(para) 
+msgid "The group ID of the given <replaceable>GROUP</replaceable> will be changed to <replaceable>GID</replaceable>."
+msgstr ""
+
+#: groupmod.8.xml:82(para) 
+msgid "The value of <replaceable>GID</replaceable> must be a non-negative decimal integer. This value must be unique, unless the <option>-o</option> option is used. Values between 0 and 999 are typically reserved for system groups."
+msgstr ""
+
+#: groupmod.8.xml:89(para) 
+msgid "Any files that have the old group ID and must continue to belong to <replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+
+#: groupmod.8.xml:104(term) 
+msgid "<option>-n</option>, <option>--new-name</option><replaceable>NEW_GROUP</replaceable>"
+msgstr ""
+
+#: groupmod.8.xml:109(para) 
+msgid "The name of the group will be changed from <replaceable>GROUP</replaceable> to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+
+#: groupmod.8.xml:120(para) 
+msgid "When used with the <option>-g</option> option, allow to change the group <replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+
+#: groupmod.8.xml:219(para) 
+msgid "group name already in use"
+msgstr ""
+
+#: groupmod.8.xml:183(para) 
+msgid "The <command>groupmod</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: groupmod.8.xml:234(para) 
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: groupmems.8.xml:44(refpurpose) 
+msgid "administer members of a user's primary group"
+msgstr ""
+
+#: groupmems.8.xml:51(replaceable) groupmems.8.xml:52(replaceable) 
+msgid "user_name"
+msgstr ""
+
+#: groupmems.8.xml:51(arg) 
+msgid "-a <placeholder-1/>"
+msgstr ""
+
+#: groupmems.8.xml:52(arg) 
+msgid "-d <placeholder-1/>"
+msgstr ""
+
+#: groupmems.8.xml:53(replaceable) 
+msgid "group_name"
+msgstr ""
+
+#: groupmems.8.xml:53(arg) 
+msgid "-g <placeholder-1/>"
+msgstr ""
+
+#: groupmems.8.xml:54(arg) 
+msgid "-l"
+msgstr ""
+
+#: groupmems.8.xml:61(para) 
+msgid "The <command>groupmems</command> command allows a user to administer his/her own group membership list without the requirement of superuser privileges. The <command>groupmems</command> utility is for systems that configure its users to be in their own name sake primary group (i.e., guest / guest)."
+msgstr ""
+
+#: groupmems.8.xml:69(para) 
+msgid "Only the superuser, as administrator, can use <command>groupmems</command> to alter the memberships of other groups."
+msgstr ""
+
+#: groupmems.8.xml:76(para) 
+msgid "The options which apply to the <command>groupmems</command> command are:"
+msgstr ""
+
+#: groupmems.8.xml:82(term) 
+msgid "<option>-a</option>, <option>--add</option><replaceable>user_name</replaceable>"
+msgstr ""
+
+#: groupmems.8.xml:84(para) 
+msgid "Add an user to the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:85(para) groupmems.8.xml:101(para) groupmems.8.xml:126(para) 
+msgid "If the <filename>/etc/gshadow</filename> file exist, and the group has no entry in the <filename>/etc/gshadow</filename> file, a new entry will be created."
+msgstr ""
+
+#: groupmems.8.xml:93(term) 
+msgid "<option>-d</option>, <option>--delete</option><replaceable>user_name</replaceable>"
+msgstr ""
+
+#: groupmems.8.xml:95(para) 
+msgid "Delete a user from the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:96(para) 
+msgid "If the <filename>/etc/gshadow</filename> file exist, the user will be removed from the list of members and administrators of the group."
+msgstr ""
+
+#: groupmems.8.xml:109(term) 
+msgid "<option>-g</option>, <option>--group</option><replaceable>group_name</replaceable>"
+msgstr ""
+
+#: groupmems.8.xml:111(para) 
+msgid "The superuser can specify which group membership list to modify."
+msgstr ""
+
+#: groupmems.8.xml:117(term) chage.1.xml:128(term) 
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr ""
+
+#: groupmems.8.xml:119(para) 
+msgid "List the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:123(term) 
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr ""
+
+#: groupmems.8.xml:125(para) 
+msgid "Purge all users from the group membership list."
+msgstr ""
+
+#: groupmems.8.xml:137(title) 
+msgid "SETUP"
+msgstr ""
+
+#: groupmems.8.xml:138(para) 
+msgid "The <command>groupmems</command> executable should be in mode <literal>2770</literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</emphasis>. The system administrator can add users to group <emphasis>groups</emphasis> to allow or disallow them using the <command>groupmems</command> utility to manage their own group membership list."
+msgstr ""
+
+#: groupmems.8.xml:147(programlisting) 
+#, no-wrap
+msgid "\n\t$ groupadd -r groups\n\t$ chmod 2770 groupmems\n\t$ chown root.groups groupmems\n\t$ groupmems -g groups -a gk4\n    "
+msgstr ""
+
+#: groupmems.8.xml:179(para) 
+msgid "secure group account information"
+msgstr ""
+
+#: groupmems.8.xml:187(para) 
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: groupdel.8.xml:44(refpurpose) 
+msgid "delete a group"
+msgstr ""
+
+#: groupdel.8.xml:58(para) 
+msgid "The <command>groupdel</command> command modifies the system account files, deleting all entries that refer to <emphasis remap=\"I\">group</emphasis>. The named group must exist."
+msgstr ""
+
+#: groupdel.8.xml:66(para) 
+msgid "You may not remove the primary group of any existing user. You must remove the user before you remove the group."
+msgstr ""
+
+#: groupdel.8.xml:70(para) 
+msgid "You should manually check all file systems to ensure that no files remain owned by this group."
+msgstr ""
+
+#: groupdel.8.xml:132(para) 
+msgid "can't remove user's primary group"
+msgstr ""
+
+#: groupdel.8.xml:108(para) 
+msgid "The <command>groupdel</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: groupdel.8.xml:147(para) 
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>"
+msgstr ""
+
+#: groupadd.8.xml:48(refpurpose) 
+msgid "create a new group"
+msgstr ""
+
+#: groupadd.8.xml:65(para) 
+msgid "The <command>groupadd</command> command creates a new group account using the values specified on the command line plus the default values from the system. The new group will be entered into the system files as needed."
+msgstr ""
+
+#: groupadd.8.xml:74(para) 
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr ""
+
+#: groupadd.8.xml:84(para) 
+msgid "This option causes the command to simply exit with success status if the specified group already exists. When used with <option>-g</option>, and the specified GID already exists, another (unique) GID is chosen (i.e. <option>-g</option> is turned off)."
+msgstr ""
+
+#: groupadd.8.xml:98(para) 
+msgid "The numerical value of the group's ID. This value must be unique, unless the <option>-o</option> option is used. The value must be non-negative. The default is to use the smallest ID value greater than 999 and greater than every other group. Values between 0 and 999 are typically reserved for system accounts."
+msgstr ""
+
+#: groupadd.8.xml:118(para) 
+msgid "Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+
+#: groupadd.8.xml:123(para) 
+msgid "Example: <option>-K </option><replaceable>GID_MIN</replaceable>=<replaceable>100</replaceable><option>-K </option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+
+#: groupadd.8.xml:127(para) 
+msgid "Note: <option>-K </option><replaceable>GID_MIN</replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+
+#: groupadd.8.xml:139(para) 
+msgid "This option permits to add a group with a non-unique GID."
+msgstr ""
+
+#: groupadd.8.xml:171(para) 
+msgid "Create a system group."
+msgstr ""
+
+#: groupadd.8.xml:174(para) 
+msgid "The numeric identifiers of new system groups are choosen in the <option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in <filename>login.defs</filename>, instead of <option>GID_MIN</option>-<option>GID_MAX</option>."
+msgstr ""
+
+#: groupadd.8.xml:225(para) 
+msgid "Groupnames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes. They can end with a dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+
+#: groupadd.8.xml:231(para) 
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr ""
+
+#: groupadd.8.xml:234(para) 
+msgid "You may not add a NIS or LDAP group. This must be performed on the corresponding server."
+msgstr ""
+
+#: groupadd.8.xml:238(para) 
+msgid "If the groupname already exists in an external group database such as NIS or LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+
+#: groupadd.8.xml:271(para) 
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr ""
+
+#: groupadd.8.xml:277(para) 
+msgid "group name not unique"
+msgstr ""
+
+#: groupadd.8.xml:247(para) 
+msgid "The <command>groupadd</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#: groupadd.8.xml:292(para) 
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: gpasswd.1.xml:49(phrase) 
+msgid "administer <placeholder-1/>"
+msgstr ""
+
+#: gpasswd.1.xml:52(phrase) 
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr ""
+
+#: gpasswd.1.xml:63(replaceable) 
+msgid "option"
+msgstr ""
+
+#: gpasswd.1.xml:73(para) 
+msgid "The <command>gpasswd</command> command is used to administer <filename>/etc/group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</filename></phrase>. Every group can have <phrase condition=\"gshadow\">administrators,</phrase> members and a password."
+msgstr ""
+
+#: gpasswd.1.xml:81(para) 
+msgid "System administrators can use the <option>-A</option> option to define group administrator(s) and the <option>-M</option> option to define members. They have all rights of group administrators and members."
+msgstr ""
+
+#: gpasswd.1.xml:86(para) 
+msgid "<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group administrator</phrase><phrase condition=\"no_gshadow\">a system administrator</phrase> with a group name only prompts for the new password of the <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:93(para) 
+msgid "If a password is set the members can still use <citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+
+#: gpasswd.1.xml:101(title) 
+msgid "Notes about group passwords"
+msgstr ""
+
+#: gpasswd.1.xml:102(para) 
+msgid "Group passwords are an inherent security problem since more than one person is permitted to know the password. However, groups are a useful tool for permitting co-operation between different users."
+msgstr ""
+
+#: gpasswd.1.xml:113(para) 
+msgid "Except for the <option>-A</option> and <option>-M</option> options, the options cannot be combined."
+msgstr ""
+
+#: gpasswd.1.xml:117(para) 
+msgid "The options cannot be combined."
+msgstr ""
+
+#: gpasswd.1.xml:120(para) 
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr ""
+
+#: gpasswd.1.xml:125(term) 
+msgid "<option>-a</option>, <option>--add</option><replaceable>user</replaceable>"
+msgstr ""
+
+#: gpasswd.1.xml:129(para) 
+msgid "Add the <replaceable>user</replaceable> to the named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:138(term) 
+msgid "<option>-d</option>, <option>--delete</option><replaceable>user</replaceable>"
+msgstr ""
+
+#: gpasswd.1.xml:142(para) 
+msgid "Remove the <replaceable>user</replaceable> from the named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:151(term) 
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr ""
+
+#: gpasswd.1.xml:155(para) 
+msgid "Remove the password from the named <replaceable>group</replaceable>. Only group members will be allowed to use <command>newgrp</command> to join the named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:166(term) 
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr ""
+
+#: gpasswd.1.xml:170(para) 
+msgid "Restrict the access to the named <replaceable>group</replaceable>. Only group members will be allowed to use <command>newgrp</command> to join the named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:181(term) 
+msgid "<option>-A</option>, <option>--administrators</option><replaceable>user</replaceable>,..."
+msgstr ""
+
+#: gpasswd.1.xml:185(para) 
+msgid "Set the list of administrative users."
+msgstr ""
+
+#: gpasswd.1.xml:193(term) 
+msgid "<option>-M</option>, <option>--members</option><replaceable>user</replaceable>,..."
+msgstr ""
+
+#: gpasswd.1.xml:197(para) 
+msgid "Set the list of group members."
+msgstr ""
+
+#: gpasswd.1.xml:207(para) 
+msgid "This tool only operates on the <filename>/etc/group</filename><phrase condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot change any NIS or LDAP group. This must be performed on the corresponding server."
+msgstr ""
+
+#: gpasswd.1.xml:252(para) 
+msgid "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition=\"gshadow\">, <citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+
+#: faillog.8.xml:34(refentrytitle) faillog.8.xml:39(refname) faillog.8.xml:45(command) faillog.5.xml:34(refentrytitle) faillog.5.xml:39(refname) faillog.5.xml:86(refentrytitle) 
+msgid "faillog"
+msgstr ""
+
+#: faillog.8.xml:40(refpurpose) 
+msgid "display faillog records or set login failure limits"
+msgstr ""
+
+#: faillog.8.xml:54(para) 
+msgid "<command>faillog</command> displays the contents of the failure log database (<filename>/var/log/faillog</filename>). It can also set the failure counters and limits. When <command>faillog</command> is run without arguments, it only displays the faillog records of the users who had a login failure."
+msgstr ""
+
+#: faillog.8.xml:65(para) 
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr ""
+
+#: faillog.8.xml:73(para) 
+msgid "Display (or act on) faillog records for all users having an entry in the <filename>faillog</filename> database."
+msgstr ""
+
+#: faillog.8.xml:86(term) 
+msgid "<option>-l</option>, <option>--lock-time</option><replaceable>SEC</replaceable>"
+msgstr ""
+
+#: faillog.8.xml:91(para) 
+msgid "Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+
+#: faillog.8.xml:95(para) faillog.8.xml:121(para) faillog.8.xml:133(para) 
+msgid "Write access to <filename>/var/log/faillog</filename> is required for this option."
+msgstr ""
+
+#: faillog.8.xml:102(term) 
+msgid "<option>-m</option>, <option>--maximum</option><replaceable>MAX</replaceable>"
+msgstr ""
+
+#: faillog.8.xml:107(para) 
+msgid "Set the maximum number of login failures after the account is disabled to <replaceable>MAX</replaceable>."
+msgstr ""
+
+#: faillog.8.xml:111(para) 
+msgid "Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not placing a limit on the number of failed logins."
+msgstr ""
+
+#: faillog.8.xml:116(para) 
+msgid "The maximum failure count should always be 0 for <emphasis>root</emphasis> to prevent a denial of services attack against the system."
+msgstr ""
+
+#: faillog.8.xml:128(term) 
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr ""
+
+#: faillog.8.xml:130(para) 
+msgid "Reset the counters of login failures."
+msgstr ""
+
+#: faillog.8.xml:144(para) 
+msgid "Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+
+#: faillog.8.xml:156(para) 
+msgid "Display faillog record or maintains failure counters and limits (if used with <option>-l</option>, <option>-m</option> or <option>-r</option> options) only for the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:174(para) 
+msgid "When none of the <option>-l</option>, <option>-m</option>, or <option>-r</option> options are used, <command>faillog</command> displays the faillog record of the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:179(para) 
+msgid "NOTE: in display mode, only the records of users which currently exist in the system are displayed. In the other modes (when the <option>-l</option>, <option>-m</option>, or <option>-r</option> options are used), the records of the user, or the range of users, or all the users that may have an entry in the faillog database will be changed. This is useful to reset records of users that have been deleted or set a policy in advance for a range of users."
+msgstr ""
+
+#: faillog.8.xml:192(para) 
+msgid "<command>faillog</command> only prints out users with no successful login since the last failure. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the <option>-u</option> flag, or print out all users with the <option>-a</option> flag."
+msgstr ""
+
+#: faillog.8.xml:205(filename) faillog.5.xml:74(filename) 
+msgid "/var/log/faillog"
+msgstr ""
+
+#: faillog.8.xml:207(para) faillog.5.xml:76(para) 
+msgid "Failure logging file."
+msgstr ""
+
+#: faillog.8.xml:215(para) 
+msgid "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>faillog</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: faillog.5.xml:40(refpurpose) 
+msgid "login failure logging file"
+msgstr ""
+
+#: faillog.5.xml:45(para) 
+msgid "<filename>/var/log/faillog</filename> maintains a count of login failures and the limits for each account."
+msgstr ""
+
+#: faillog.5.xml:49(para) 
+msgid "The file contains fixed length records, indexed by numerical UID. Each record contains the count of login failures since the last successful login; the maximum number of failures before the account is disabled; the line on whiche the last login failure occurred; the date of the last login failure; and the duration (in seconds) during which the account will be locked after a failure."
+msgstr ""
+
+#: faillog.5.xml:59(para) 
+msgid "The structure of the file is:"
+msgstr ""
+
+#: faillog.5.xml:60(programlisting) 
+#, no-wrap
+msgid "\nstruct\tfaillog {\n\tshort   fail_cnt;\n\tshort   fail_max;\n\tchar    fail_line[12];\n\ttime_t  fail_time;\n\tlong    fail_locktime;\n};"
+msgstr ""
+
+#: expiry.1.xml:41(refentrytitle) expiry.1.xml:46(refname) expiry.1.xml:52(command) 
+msgid "expiry"
+msgstr ""
+
+#: expiry.1.xml:47(refpurpose) 
+msgid "check and enforce password expiration policy"
+msgstr ""
+
+#: expiry.1.xml:60(para) 
+msgid "The <command>expiry</command> command checks (<option>-c</option>) the current password expiration and forces (<option>-f</option>) changes when required. It is callable as a normal user command."
+msgstr ""
+
+#: expiry.1.xml:87(para) chage.1.xml:262(para) 
+msgid "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: chsh.1.xml:46(refpurpose) 
+msgid "change login shell"
+msgstr ""
+
+#: chsh.1.xml:63(para) 
+msgid "The <command>chsh</command> command changes the user login shell. This determines the name of the user's initial login command. A normal user may only change the login shell for her own account, the superuser may change the login shell for any account."
+msgstr ""
+
+#: chsh.1.xml:74(para) 
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr ""
+
+#: chsh.1.xml:96(para) 
+msgid "If the <option>-s</option> option is not selected, <command>chsh</command> operates in an interactive fashion, prompting the user with the current login shell. Enter the new value to change the shell, or leave the line blank to use the current one. The current shell is displayed between a pair of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+
+#: chsh.1.xml:107(para) 
+msgid "The only restriction placed on the login shell is that the command name must be listed in <filename>/etc/shells</filename>, unless the invoker is the superuser, and then any value may be added. An account with a restricted login shell may not change her login shell. For this reason, placing <filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value."
+msgstr ""
+
+#: chsh.1.xml:142(filename) 
+msgid "/etc/shells"
+msgstr ""
+
+#: chsh.1.xml:144(para) 
+msgid "List of valid login shells."
+msgstr ""
+
+#: chsh.1.xml:158(para) 
+msgid "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: chpasswd.8.xml:47(refpurpose) 
+msgid "update passwords in batch mode"
+msgstr ""
+
+#: chpasswd.8.xml:61(para) 
+msgid "The <command>chpasswd</command> command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users. Each line is of the format:"
+msgstr ""
+
+#: chpasswd.8.xml:66(para) 
+msgid "<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</emphasis>"
+msgstr ""
+
+#: chpasswd.8.xml:71(para) 
+msgid "By default the supplied password must be in clear-text, and is encrypted by <command>chpasswd</command>. Also the password age will be updated, if present."
+msgstr ""
+
+#: chpasswd.8.xml:76(para) chgpasswd.8.xml:75(para) 
+msgid "The default encryption algorithm can be defined for the system with the ENCRYPT_METHOD variable of <filename>/etc/login.defs</filename>, and can be overwiten with the <option>-e</option>, <option>-m</option>, or <option>-c</option> options."
+msgstr ""
+
+#: chpasswd.8.xml:82(para) 
+msgid "<command>chpasswd</command> first update the password in memory, and then commit all the changes to disk if no errors occured for any users."
+msgstr ""
+
+#: chpasswd.8.xml:89(para) 
+msgid "The supplied passwords must be in clear-text."
+msgstr ""
+
+#: chpasswd.8.xml:92(para) 
+msgid "PAM is used to update the password in the system database according to the PAM chpasswd configuration."
+msgstr ""
+
+#: chpasswd.8.xml:96(para) 
+msgid "When <command>chpasswd</command> fails to update a password, it continues updating the passwords of the next users, and will return an error code on exit."
+msgstr ""
+
+#: chpasswd.8.xml:102(para) chgpasswd.8.xml:81(para) 
+msgid "This command is intended to be used in a large system environment where many accounts are created at a single time."
+msgstr ""
+
+#: chpasswd.8.xml:110(para) 
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr ""
+
+#: chpasswd.8.xml:119(para) chgpasswd.8.xml:98(para) 
+msgid "The available methods are DES, MD5, and NONE."
+msgstr ""
+
+#: chpasswd.8.xml:129(term) chgpasswd.8.xml:108(term) 
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr ""
+
+#: chpasswd.8.xml:131(para) chgpasswd.8.xml:110(para) 
+msgid "Supplied passwords are in encrypted form."
+msgstr ""
+
+#: chpasswd.8.xml:145(term) chgpasswd.8.xml:120(term) 
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr ""
+
+#: chpasswd.8.xml:147(para) chgpasswd.8.xml:122(para) 
+msgid "Use MD5 encryption instead of DES when the supplied passwords are not encrypted."
+msgstr ""
+
+#: chpasswd.8.xml:183(para) chgpasswd.8.xml:158(para) 
+msgid "Remember to set permissions or umask to prevent readability of unencrypted files by other users."
+msgstr ""
+
+#: chpasswd.8.xml:229(filename) 
+msgid "/etc/pam.d/chpasswd"
+msgstr ""
+
+#: chpasswd.8.xml:231(para) 
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr ""
+
+#: chpasswd.8.xml:239(para) 
+msgid "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition=\"no_pam\"><citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, </phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+
+#: chgpasswd.8.xml:48(refpurpose) 
+msgid "update group passwords in batch mode"
+msgstr ""
+
+#: chgpasswd.8.xml:62(para) 
+msgid "The <command>chgpasswd</command> command reads a list of group name and password pairs from standard input and uses this information to update a set of existing groups. Each line is of the format:"
+msgstr ""
+
+#: chgpasswd.8.xml:67(para) 
+msgid "<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</emphasis>"
+msgstr ""
+
+#: chgpasswd.8.xml:71(para) 
+msgid "By default the supplied password must be in clear-text, and is encrypted by <command>chgpasswd</command>."
+msgstr ""
+
+#: chgpasswd.8.xml:89(para) 
+msgid "The options which apply to the <command>chgpasswd</command> command are:"
+msgstr ""
+
+#: chgpasswd.8.xml:209(para) 
+msgid "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: chfn.1.xml:47(refpurpose) 
+msgid "change real user name and information"
+msgstr ""
+
+#: chfn.1.xml:53(replaceable) 
+msgid "full_name"
+msgstr ""
+
+#: chfn.1.xml:53(arg) 
+msgid "-f <placeholder-1/>"
+msgstr ""
+
+#: chfn.1.xml:54(replaceable) 
+msgid "room_no"
+msgstr ""
+
+#: chfn.1.xml:55(replaceable) 
+msgid "work_ph"
+msgstr ""
+
+#: chfn.1.xml:55(arg) 
+msgid "-w <placeholder-1/>"
+msgstr ""
+
+#: chfn.1.xml:56(replaceable) 
+msgid "home_ph"
+msgstr ""
+
+#: chfn.1.xml:57(replaceable) 
+msgid "other"
+msgstr ""
+
+#: chfn.1.xml:57(arg) 
+msgid "-o <placeholder-1/>"
+msgstr ""
+
+#: chfn.1.xml:64(para) 
+msgid "The <command>chfn</command> command changes user fullname, office number, office extension, and home phone number information for a user's account. This information is typically printed by <citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></citerefentry> and similar programs. A normal user may only change the fields for her own account, subject to the restrictions in <filename>/etc/login.defs</filename>. (The default configuration is to prevent users from changing their fullname.) The superuser may change any field for any account. Additionally, only the superuser may use the <option>-o</option> option to change the undefined portions of the GECOS field."
+msgstr ""
+
+#: chfn.1.xml:78(para) 
+msgid "These fields must not contain any colons. Except for the <emphasis remap=\"I\">other</emphasis> field, they should not contain any comma or equal sign. It is also recommended to avoid non-US-ASCII characters, but this is only enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> field is used to store accounting information used by other applications."
+msgstr ""
+
+#: chfn.1.xml:87(para) 
+msgid "If none of the options are selected, <command>chfn</command> operates in an interactive fashion, prompting the user with the current values for all of the fields. Enter the new value to change the field, or leave the line blank to use the current value. The current value is displayed between a pair of <emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</command> prompts for the current user account."
+msgstr ""
+
+#: chfn.1.xml:132(para) 
+msgid "<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+
+#: chage.1.xml:34(refentrytitle) chage.1.xml:39(refname) chage.1.xml:44(command) 
+msgid "chage"
+msgstr ""
+
+#: chage.1.xml:40(refpurpose) 
+msgid "change user password expiry information"
+msgstr ""
+
+#: chage.1.xml:56(para) 
+msgid "The <command>chage</command> command changes the number of days between password changes and the date of the last password change. This information is used by the system to determine when a user must change his/her password."
+msgstr ""
+
+#: chage.1.xml:66(para) 
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr ""
+
+#: chage.1.xml:71(term) 
+msgid "<option>-d</option>, <option>--lastday</option><replaceable>LAST_DAY</replaceable>"
+msgstr ""
+
+#: chage.1.xml:75(para) 
+msgid "Set the number of days since January 1st, 1970 when the password was last changed. The date may also be expressed in the format YYYY-MM-DD (or the format more commonly used in your area)."
+msgstr ""
+
+#: chage.1.xml:83(term) 
+msgid "<option>-E</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</replaceable>"
+msgstr ""
+
+#: chage.1.xml:87(para) 
+msgid "Set the date or number of days since January 1, 1970 on which the user's account will no longer be accessible. The date may also be expressed in the format YYYY-MM-DD (or the format more commonly used in your area). A user whose account is locked must contact the system administrator before being able to use the system again."
+msgstr ""
+
+#: chage.1.xml:95(para) 
+msgid "Passing the number <emphasis remap=\"I\">-1</emphasis> as the <replaceable>EXPIRE_DATE</replaceable> will remove an account expiration date."
+msgstr ""
+
+#: chage.1.xml:109(term) 
+msgid "<option>-I</option>, <option>--inactive</option><replaceable>INACTIVE</replaceable>"
+msgstr ""
+
+#: chage.1.xml:113(para) 
+msgid "Set the number of days of inactivity after a password has expired before the account is locked. The <replaceable>INACTIVE</replaceable> option is the number of days of inactivity. A user whose account is locked must contact the system administrator before being able to use the system again."
+msgstr ""
+
+#: chage.1.xml:120(para) 
+msgid "Passing the number <emphasis remap=\"I\">-1</emphasis> as the <replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+
+#: chage.1.xml:132(para) 
+msgid "Show account aging information."
+msgstr ""
+
+#: chage.1.xml:138(term) 
+msgid "<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</replaceable>"
+msgstr ""
+
+#: chage.1.xml:150(term) 
+msgid "<option>-M</option>, <option>--maxdays</option><replaceable>MAX_DAYS</replaceable>"
+msgstr ""
+
+#: chage.1.xml:154(para) 
+msgid "Set the maximum number of days during which a password is valid. When <replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> is less than the current day, the user will be required to change his/her password before being able to use his/her account. This occurrence can be planned for in advance by use of the <option>-W</option> option, which provides the user with advance warning."
+msgstr ""
+
+#: chage.1.xml:163(para) 
+msgid "Passing the number <emphasis remap=\"I\">-1</emphasis> as <replaceable>MAX_DAYS</replaceable> will remove checking a password's validity."
+msgstr ""
+
+#: chage.1.xml:171(term) 
+msgid "<option>-W</option>, <option>--warndays</option><replaceable>WARN_DAYS</replaceable>"
+msgstr ""
+
+#: chage.1.xml:175(para) 
+msgid "Set the number of days of warning before a password change is required. The <replaceable>WARN_DAYS</replaceable> option is the number of days prior to the password expiring that a user will be warned his/her password is about to expire."
+msgstr ""
+
+#: chage.1.xml:184(para) 
+msgid "If none of the options are selected, <command>chage</command> operates in an interactive fashion, prompting the user with the current values for all of the fields. Enter the new value to change the field, or leave the line blank to use the current value. The current value is displayed between a pair of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+
+#: chage.1.xml:194(para) 
+msgid "The <command>chage</command> program requires a shadow password file to be available."
+msgstr ""
+
+#: chage.1.xml:198(para) 
+msgid "The <command>chage</command> command is restricted to the root user, except for the <option>-l</option> option, which may be used by an unprivileged user to determine when his/her password or account is due to expire."
+msgstr ""
+
+#: chage.1.xml:251(replaceable) 
+msgid "15"
+msgstr ""
+
+#: chage.1.xml:253(para) 
+msgid "can't find the shadow password file"
+msgstr ""
+
+#: chage.1.xml:229(para) 
+msgid "The <command>chage</command> command exits with the following values: <placeholder-1/>"
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: chage.1.xml:0(None) 
+msgid "translator-credits"
+msgstr ""
+
diff --git a/man/po/stamp-po b/man/po/stamp-po
new file mode 100644 (file)
index 0000000..9788f70
--- /dev/null
@@ -0,0 +1 @@
+timestamp
diff --git a/man/po/sv.po b/man/po/sv.po
new file mode 100644 (file)
index 0000000..27459a5
--- /dev/null
@@ -0,0 +1,8163 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: man pages for shadow 4.0.18\n"
+"POT-Creation-Date: 2009-07-24 03:03+0200\n"
+"PO-Revision-Date: 2006-12-15 18:09+0100\n"
+"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
+"Language-Team: Swedish <debian-l10n-swedish@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+# Swedish translation of shadow manpage.
+# Copyright (C) 2006 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the shadow package.
+# Daniel Nylander <po@danielnylander.se>, 2006.
+#
+#: vipw.8.xml:38(refentrytitle) vipw.8.xml:43(refname) vipw.8.xml:52(command)
+msgid "vipw"
+msgstr "vipw"
+
+#: vipw.8.xml:39(manvolnum) usermod.8.xml:40(manvolnum)
+#: userdel.8.xml:42(manvolnum) userdel.8.xml:199(replaceable)
+#: useradd.8.xml:50(manvolnum) pwconv.8.xml:43(manvolnum)
+#: pwck.8.xml:41(manvolnum) nologin.8.xml:35(manvolnum)
+#: newusers.8.xml:51(manvolnum) logoutd.8.xml:35(manvolnum)
+#: lastlog.8.xml:36(manvolnum) grpck.8.xml:39(manvolnum)
+#: groupmod.8.xml:39(manvolnum) groupmems.8.xml:39(manvolnum)
+#: groupdel.8.xml:39(manvolnum) groupdel.8.xml:130(replaceable)
+#: groupadd.8.xml:43(manvolnum) faillog.8.xml:35(manvolnum)
+#: faillog.5.xml:86(manvolnum) chpasswd.8.xml:42(manvolnum)
+#: chgpasswd.8.xml:43(manvolnum)
+msgid "8"
+msgstr "8"
+
+#: vipw.8.xml:40(refmiscinfo) usermod.8.xml:41(refmiscinfo)
+#: userdel.8.xml:43(refmiscinfo) useradd.8.xml:51(refmiscinfo)
+#: pwconv.8.xml:44(refmiscinfo) pwck.8.xml:42(refmiscinfo)
+#: nologin.8.xml:36(refmiscinfo) newusers.8.xml:52(refmiscinfo)
+#: logoutd.8.xml:36(refmiscinfo) lastlog.8.xml:37(refmiscinfo)
+#: grpck.8.xml:40(refmiscinfo) groupmod.8.xml:40(refmiscinfo)
+#: groupmems.8.xml:40(refmiscinfo) groupdel.8.xml:40(refmiscinfo)
+#: groupadd.8.xml:44(refmiscinfo) faillog.8.xml:36(refmiscinfo)
+#: chpasswd.8.xml:43(refmiscinfo) chgpasswd.8.xml:44(refmiscinfo)
+msgid "System Management Commands"
+msgstr "Systemhanteringskommandon"
+
+#: vipw.8.xml:44(refname) vipw.8.xml:58(command)
+msgid "vigr"
+msgstr "vigr"
+
+#: vipw.8.xml:45(refpurpose)
+msgid "edit the password, group, shadow-password or shadow-group file"
+msgstr "redigera lösenordet, grupp, skugglösenord eller skuggruppfil"
+
+#: vipw.8.xml:54(replaceable) vipw.8.xml:60(replaceable)
+#: usermod.8.xml:52(replaceable) userdel.8.xml:52(arg)
+#: useradd.8.xml:61(replaceable) useradd.8.xml:73(replaceable)
+#: su.1.xml:66(replaceable) passwd.1.xml:57(replaceable)
+#: newusers.8.xml:63(replaceable) lastlog.8.xml:48(replaceable)
+#: groupmod.8.xml:51(replaceable) groupadd.8.xml:55(replaceable)
+#: faillog.8.xml:47(replaceable) chsh.1.xml:53(replaceable)
+#: chpasswd.8.xml:54(replaceable) chgpasswd.8.xml:55(replaceable)
+#: chage.1.xml:46(replaceable)
+msgid "options"
+msgstr "flaggor"
+
+#: vipw.8.xml:66(title) usermod.8.xml:59(title) userdel.8.xml:60(title)
+#: useradd.8.xml:79(title) suauth.5.xml:50(title) su.1.xml:77(title)
+#: sg.1.xml:59(title) shadow.5.xml:44(title) shadow.3.xml:93(title)
+#: shadow.3.xml:149(title) pwconv.8.xml:70(title) pwck.8.xml:83(title)
+#: porttime.5.xml:44(title) passwd.5.xml:44(title) passwd.1.xml:66(title)
+#: nologin.8.xml:50(title) newusers.8.xml:70(title) newgrp.1.xml:55(title)
+#: logoutd.8.xml:50(title) login.defs.5.xml:107(title)
+#: login.access.5.xml:45(title) login.1.xml:103(title) limits.5.xml:46(title)
+#: lastlog.8.xml:54(title) gshadow.5.xml:43(title) grpck.8.xml:69(title)
+#: groups.1.xml:53(title) groupmod.8.xml:58(title) groupmems.8.xml:60(title)
+#: groupdel.8.xml:57(title) groupadd.8.xml:64(title) gpasswd.1.xml:72(title)
+#: faillog.8.xml:53(title) faillog.5.xml:44(title) expiry.1.xml:59(title)
+#: chsh.1.xml:62(title) chpasswd.8.xml:60(title) chgpasswd.8.xml:61(title)
+#: chfn.1.xml:63(title) chage.1.xml:55(title)
+msgid "DESCRIPTION"
+msgstr "BESKRIVNING"
+
+#: vipw.8.xml:67(para)
+#, fuzzy
+msgid ""
+"The <command>vipw</command> and <command>vigr</command> commands edits the "
+"files <filename>/etc/passwd</filename> and <filename>/etc/group</filename>, "
+"respectively. With the <option>-s</option> flag, they will edit the shadow "
+"versions of those files, <filename>/etc/shadow</filename> and <filename>/etc/"
+"gshadow</filename>, respectively. The programs will set the appropriate "
+"locks to prevent file corruption. When looking for an editor, the programs "
+"will first try the environment variable <envar>$VISUAL</envar>, then the "
+"environment variable <envar>$EDITOR</envar>, and finally the default editor, "
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<command>vipw</command> and <command>vigr</command> redigerar filerna "
+"<filename>/etc/passwd</filename> och <filename>/etc/group</filename>, "
+"respektive. Med flaggan <option>-s</option>, kommer de att redigera "
+"skuggversionerna av dessa filer, <filename>/etc/shadow</filename> och "
+"<filename>/etc/gshadow</filename>, respektive. Programmen kommer att ställa "
+"in de lämpliga lås som behövs för att förhindra att filerna skadas. När de "
+"letar efter en redigerare kommer programmen att första försöka med "
+"miljövariabeln <envar>$VISUAL</envar>, sedan miljövariabeln <envar>$EDITOR</"
+"envar> och till sist standardredigeraren, <citerefentry><refentrytitle>vi</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: vipw.8.xml:84(title) usermod.8.xml:67(title) userdel.8.xml:69(title)
+#: useradd.8.xml:97(title) su.1.xml:123(title) pwck.8.xml:164(title)
+#: passwd.1.xml:152(title) newusers.8.xml:239(title) login.1.xml:188(title)
+#: lastlog.8.xml:66(title) grpck.8.xml:133(title) groupmod.8.xml:67(title)
+#: groupmems.8.xml:75(title) groupadd.8.xml:73(title) gpasswd.1.xml:112(title)
+#: faillog.8.xml:64(title) chsh.1.xml:73(title) chpasswd.8.xml:109(title)
+#: chgpasswd.8.xml:88(title) chage.1.xml:65(title)
+msgid "OPTIONS"
+msgstr "FLAGGOR"
+
+#: vipw.8.xml:85(para)
+msgid ""
+"The options which apply to the <command>vipw</command> and <command>vigr</"
+"command> commands are:"
+msgstr ""
+"Flaggorna som gäller för kommandona <command>vipw</command> och "
+"<command>vigr</command> är:"
+
+#: vipw.8.xml:91(term)
+msgid "<option>-g</option>, <option>--group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: vipw.8.xml:93(para)
+msgid "Edit group database."
+msgstr "Redigera gruppdatabasen."
+
+#: vipw.8.xml:97(term) userdel.8.xml:99(term) useradd.8.xml:247(term)
+#: passwd.1.xml:192(term) newusers.8.xml:257(term) lastlog.8.xml:82(term)
+#: groupmod.8.xml:98(term) groupadd.8.xml:108(term) faillog.8.xml:80(term)
+#: chsh.1.xml:79(term) chpasswd.8.xml:137(term) chgpasswd.8.xml:114(term)
+#: chage.1.xml:103(term)
+msgid "<option>-h</option>, <option>--help</option>"
+msgstr "<option>-h</option>, <option>--help</option>"
+
+#: vipw.8.xml:99(para) userdel.8.xml:101(para) useradd.8.xml:249(para)
+#: passwd.1.xml:194(para) newusers.8.xml:259(para) lastlog.8.xml:86(para)
+#: groupmod.8.xml:100(para) groupadd.8.xml:110(para) faillog.8.xml:82(para)
+#: chsh.1.xml:81(para) chpasswd.8.xml:139(para) chgpasswd.8.xml:116(para)
+#: chage.1.xml:105(para)
+msgid "Display help message and exit."
+msgstr "Visa hjälpmeddelande och avsluta."
+
+#: vipw.8.xml:103(term)
+msgid "<option>-p</option>, <option>--passwd</option>"
+msgstr "<option>-p</option>, <option>--passwd</option>"
+
+#: vipw.8.xml:105(para)
+msgid "Edit passwd database."
+msgstr "Redigera lösenordsdatabasen."
+
+#: vipw.8.xml:109(term) passwd.1.xml:259(term)
+msgid "<option>-q</option>, <option>--quiet</option>"
+msgstr "<option>-q</option>, <option>--quiet</option>"
+
+#: vipw.8.xml:111(para) passwd.1.xml:263(para)
+msgid "Quiet mode."
+msgstr "Tyst läge."
+
+#: vipw.8.xml:115(term)
+msgid "<option>-s</option>, <option>--shadow</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: vipw.8.xml:117(para)
+msgid "Edit shadow or gshadow database."
+msgstr "Redigera shadow- eller gshadow-databasen."
+
+#: vipw.8.xml:124(title) usermod.8.xml:372(title) userdel.8.xml:140(title)
+#: useradd.8.xml:644(title) suauth.5.xml:168(title) su.1.xml:338(title)
+#: sg.1.xml:88(title) shadow.5.xml:230(title) shadow.3.xml:201(title)
+#: pwconv.8.xml:168(title) pwck.8.xml:227(title) porttime.5.xml:105(title)
+#: passwd.5.xml:116(title) passwd.1.xml:374(title) newusers.8.xml:357(title)
+#: newgrp.1.xml:99(title) logoutd.8.xml:64(title) login.access.5.xml:96(title)
+#: login.1.xml:316(title) limits.5.xml:140(title) lastlog.8.xml:147(title)
+#: gshadow.5.xml:141(title) grpck.8.xml:185(title) groups.1.xml:75(title)
+#: groupmod.8.xml:164(title) groupmems.8.xml:168(title)
+#: groupdel.8.xml:89(title) groupadd.8.xml:200(title) gpasswd.1.xml:233(title)
+#: faillog.8.xml:202(title) faillog.5.xml:71(title) expiry.1.xml:68(title)
+#: chsh.1.xml:133(title) chpasswd.8.xml:208(title) chgpasswd.8.xml:184(title)
+#: chfn.1.xml:113(title) chage.1.xml:206(title)
+msgid "FILES"
+msgstr "FILER"
+
+#: vipw.8.xml:127(filename) usermod.8.xml:375(filename)
+#: userdel.8.xml:143(filename) useradd.8.xml:659(filename)
+#: sg.1.xml:103(filename) pwck.8.xml:230(filename)
+#: newusers.8.xml:372(filename) newgrp.1.xml:114(filename)
+#: gshadow.5.xml:144(filename) grpck.8.xml:188(filename)
+#: groups.1.xml:78(filename) groupmod.8.xml:167(filename)
+#: groupmems.8.xml:171(filename) groupdel.8.xml:92(filename)
+#: groupadd.8.xml:203(filename) gpasswd.1.xml:50(filename)
+#: gpasswd.1.xml:53(filename) gpasswd.1.xml:236(filename)
+#: chgpasswd.8.xml:187(filename)
+msgid "/etc/group"
+msgstr "/etc/group"
+
+#: vipw.8.xml:129(para) usermod.8.xml:377(para) userdel.8.xml:145(para)
+#: useradd.8.xml:661(para) sg.1.xml:105(para) pwck.8.xml:232(para)
+#: newusers.8.xml:374(para) newgrp.1.xml:116(para) gshadow.5.xml:146(para)
+#: grpck.8.xml:190(para) groups.1.xml:80(para) groupmod.8.xml:169(para)
+#: groupmems.8.xml:173(para) groupdel.8.xml:94(para) groupadd.8.xml:205(para)
+#: gpasswd.1.xml:238(para) chgpasswd.8.xml:189(para)
+msgid "Group account information."
+msgstr "Gruppkontoinformation."
+
+#: vipw.8.xml:133(filename) usermod.8.xml:381(filename)
+#: useradd.8.xml:665(filename) sg.1.xml:109(filename)
+#: newusers.8.xml:378(filename) newgrp.1.xml:120(filename)
+#: gshadow.5.xml:150(filename) grpck.8.xml:194(filename)
+#: groupmod.8.xml:173(filename) groupmems.8.xml:177(filename)
+#: groupdel.8.xml:98(filename) groupadd.8.xml:209(filename)
+#: gpasswd.1.xml:54(filename) gpasswd.1.xml:242(filename)
+#: chgpasswd.8.xml:193(filename)
+msgid "/etc/gshadow"
+msgstr "/etc/gshadow"
+
+#: vipw.8.xml:135(para) usermod.8.xml:383(para) useradd.8.xml:667(para)
+#: sg.1.xml:111(para) newusers.8.xml:380(para) newgrp.1.xml:122(para)
+#: gshadow.5.xml:152(para) grpck.8.xml:196(para) groupmod.8.xml:175(para)
+#: groupdel.8.xml:100(para) groupadd.8.xml:211(para) gpasswd.1.xml:244(para)
+#: chgpasswd.8.xml:195(para)
+msgid "Secure group account information."
+msgstr "Säker gruppkontoinformation."
+
+#: vipw.8.xml:139(filename) usermod.8.xml:387(filename)
+#: userdel.8.xml:155(filename) useradd.8.xml:647(filename)
+#: su.1.xml:341(filename) sg.1.xml:91(filename) shadow.5.xml:233(filename)
+#: pwck.8.xml:236(filename) passwd.5.xml:119(filename)
+#: passwd.1.xml:377(filename) newusers.8.xml:360(filename)
+#: newgrp.1.xml:102(filename) login.1.xml:331(filename)
+#: grpck.8.xml:200(filename) expiry.1.xml:71(filename)
+#: chsh.1.xml:136(filename) chpasswd.8.xml:211(filename)
+#: chfn.1.xml:122(filename) chage.1.xml:210(filename)
+msgid "/etc/passwd"
+msgstr "/etc/passwd"
+
+#: vipw.8.xml:141(para) usermod.8.xml:389(para) userdel.8.xml:157(para)
+#: useradd.8.xml:649(para) su.1.xml:343(para) sg.1.xml:93(para)
+#: shadow.5.xml:235(para) pwck.8.xml:238(para) passwd.5.xml:121(para)
+#: passwd.1.xml:379(para) newusers.8.xml:362(para) newgrp.1.xml:104(para)
+#: login.1.xml:333(para) grpck.8.xml:202(para) expiry.1.xml:73(para)
+#: chsh.1.xml:138(para) chpasswd.8.xml:213(para) chfn.1.xml:124(para)
+#: chage.1.xml:213(para)
+msgid "User account information."
+msgstr "Användarkontoinformation."
+
+#: vipw.8.xml:145(filename) usermod.8.xml:393(filename)
+#: userdel.8.xml:161(filename) useradd.8.xml:653(filename)
+#: su.1.xml:347(filename) sg.1.xml:97(filename) shadow.5.xml:239(filename)
+#: shadow.3.xml:204(filename) pwck.8.xml:242(filename)
+#: passwd.5.xml:125(filename) passwd.1.xml:383(filename)
+#: newusers.8.xml:366(filename) newgrp.1.xml:108(filename)
+#: login.1.xml:337(filename) expiry.1.xml:77(filename)
+#: chpasswd.8.xml:217(filename) chage.1.xml:218(filename)
+msgid "/etc/shadow"
+msgstr "/etc/shadow"
+
+#: vipw.8.xml:147(para) usermod.8.xml:395(para) userdel.8.xml:163(para)
+#: useradd.8.xml:655(para) su.1.xml:349(para) sg.1.xml:99(para)
+#: shadow.5.xml:241(para) shadow.3.xml:206(para) pwck.8.xml:244(para)
+#: passwd.1.xml:385(para) newusers.8.xml:368(para) newgrp.1.xml:110(para)
+#: login.1.xml:339(para) expiry.1.xml:79(para) chpasswd.8.xml:219(para)
+#: chage.1.xml:221(para)
+msgid "Secure user account information."
+msgstr "Säker användarkontoinformation."
+
+#: vipw.8.xml:154(title) usermod.8.xml:402(title) userdel.8.xml:248(title)
+#: useradd.8.xml:761(title) suauth.5.xml:197(title) su.1.xml:362(title)
+#: sg.1.xml:118(title) shadow.5.xml:258(title) shadow.3.xml:213(title)
+#: pwconv.8.xml:180(title) pwck.8.xml:302(title) porttime.5.xml:117(title)
+#: passwd.5.xml:144(title) passwd.1.xml:455(title) nologin.8.xml:64(title)
+#: newusers.8.xml:399(title) newgrp.1.xml:129(title)
+#: login.defs.5.xml:471(title) login.access.5.xml:108(title)
+#: login.1.xml:376(title) limits.5.xml:150(title) gshadow.5.xml:159(title)
+#: grpck.8.xml:254(title) groups.1.xml:87(title) groupmod.8.xml:233(title)
+#: groupmems.8.xml:186(title) groupdel.8.xml:146(title)
+#: groupadd.8.xml:291(title) gpasswd.1.xml:251(title) faillog.8.xml:214(title)
+#: faillog.5.xml:83(title) expiry.1.xml:86(title) chsh.1.xml:157(title)
+#: chpasswd.8.xml:238(title) chgpasswd.8.xml:208(title) chfn.1.xml:131(title)
+#: chage.1.xml:261(title)
+msgid "SEE ALSO"
+msgstr "SE OCKSÅ"
+
+#: vipw.8.xml:155(para)
+msgid ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: usermod.8.xml:39(refentrytitle) usermod.8.xml:44(refname)
+#: usermod.8.xml:50(command) login.defs.5.xml:443(term)
+msgid "usermod"
+msgstr "usermod"
+
+#: usermod.8.xml:45(refpurpose)
+msgid "modify a user account"
+msgstr "ändra ett användarkonto"
+
+#: usermod.8.xml:54(replaceable) userdel.8.xml:54(replaceable)
+#: useradd.8.xml:63(replaceable) passwd.1.xml:60(replaceable)
+#: chsh.1.xml:56(replaceable) chage.1.xml:49(replaceable)
+msgid "LOGIN"
+msgstr "INLOGGNINGSNAMN"
+
+#: usermod.8.xml:60(para)
+msgid ""
+"The <command>usermod</command> command modifies the system account files to "
+"reflect the changes that are specified on the command line."
+msgstr ""
+"Kommandot <command>usermod</command> ändrar systemkontofiler enligt det som "
+"anges på kommandoraden."
+
+#: usermod.8.xml:68(para)
+msgid "The options which apply to the <command>usermod</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>usermod</command> är:"
+
+#: usermod.8.xml:74(term)
+msgid "<option>-a</option>, <option>--append</option>"
+msgstr "<option>-a</option>, <option>--append</option>"
+
+#: usermod.8.xml:78(para)
+#, fuzzy
+#| msgid ""
+#| "Add the user to the supplemental group(s). Use only with <option>-G</"
+#| "option> option."
+msgid ""
+"Add the user to the supplementary group(s). Use only with the <option>-G</"
+"option> option."
+msgstr ""
+"Lägg till användaren till tilläggsgrupp(er). Använd endast med flaggan "
+"<option>-G</option>."
+
+#: usermod.8.xml:85(term) useradd.8.xml:125(term)
+msgid ""
+"<option>-c</option>, <option>--comment</option><replaceable>COMMENT</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option><replaceable>KOMMENTAR</"
+"replaceable>"
+
+#: usermod.8.xml:90(para)
+msgid ""
+"The new value of the user's password file comment field. It is normally "
+"modified using the <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgstr ""
+"Det nya värdet för användarens kommentarsfält i lösenordsfilen. Vanligtvis "
+"ändras det med verktyget <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: usermod.8.xml:99(term) useradd.8.xml:138(term)
+msgid ""
+"<option>-d</option>, <option>--home</option><replaceable>HOME_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--home</option><replaceable>HEM_KAT</"
+"replaceable>"
+
+#: usermod.8.xml:104(para)
+#, fuzzy
+#| msgid "user home directory"
+msgid "The user's new login directory."
+msgstr "användarens hemkatalog"
+
+#: usermod.8.xml:107(para)
+msgid ""
+"If the <option>-m</option> option is given, the contents of the current home "
+"directory will be moved to the new home directory, which is created if it "
+"does not already exist."
+msgstr ""
+
+#: usermod.8.xml:116(term) useradd.8.xml:165(term) useradd.8.xml:518(term)
+msgid ""
+"<option>-e</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</"
+"replaceable>"
+msgstr ""
+"<option>-e</option>, <option>--expiredate</option><replaceable>UTGÅNGSDATUM</"
+"replaceable>"
+
+#: usermod.8.xml:121(para) useradd.8.xml:170(para)
+msgid ""
+"The date on which the user account will be disabled. The date is specified "
+"in the format <emphasis remap=\"I\">YYYY-MM-DD</emphasis>."
+msgstr ""
+
+#: usermod.8.xml:128(term) useradd.8.xml:183(term) useradd.8.xml:531(term)
+msgid ""
+"<option>-f</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-f</option>, <option>--inactive</option><replaceable>INAKTIV</"
+"replaceable>"
+
+#: usermod.8.xml:133(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password has expired before the account will "
+#| "be disabled."
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled."
+msgstr ""
+"Antalet dagar efter att ett lösenord har gått ut innan kontot kommer att "
+"inaktiveras."
+
+#: usermod.8.xml:137(para)
+msgid ""
+"A value of 0 disables the account as soon as the password has expired, and a "
+"value of -1 disables the feature."
+msgstr ""
+
+#: usermod.8.xml:145(term) useradd.8.xml:203(term) useradd.8.xml:547(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option><replaceable>GROUP</replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>GRUPP</replaceable>"
+
+#: usermod.8.xml:150(para)
+msgid ""
+"The group name or number of the user's new initial login group. The group "
+"must exist."
+msgstr ""
+
+#: usermod.8.xml:157(term) useradd.8.xml:231(term)
+msgid ""
+"<option>-G</option>, <option>--groups</option><replaceable>GROUP1</"
+"replaceable>[<emphasis remap=\"I\">,GROUP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GROUPN</emphasis>]]]"
+msgstr ""
+"<option>-G</option>, <option>--groups</option><replaceable>GRUPP1</"
+"replaceable>[<emphasis remap=\"I\">,GRUPP2,...</emphasis>[<emphasis remap=\"I"
+"\">,GRUPPN</emphasis>]]]"
+
+#: usermod.8.xml:162(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option."
+msgstr ""
+
+#: usermod.8.xml:169(para)
+msgid ""
+"If the user is currently a member of a group which is not listed, the user "
+"will be removed from the group. This behaviour can be changed via the "
+"<option>-a</option> option, which appends the user to the current "
+"supplementary group list."
+msgstr ""
+
+#: usermod.8.xml:178(term)
+msgid ""
+"<option>-l</option>, <option>--login</option><replaceable>NEW_LOGIN</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--login</"
+"option><replaceable>NYTT_INLOGGNINGSNAMN</replaceable>"
+
+#: usermod.8.xml:183(para)
+msgid ""
+"The name of the user will be changed from <replaceable>LOGIN</replaceable> "
+"to <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In "
+"particular, the user's home directory name should probably be changed "
+"manually to reflect the new login name."
+msgstr ""
+
+#: usermod.8.xml:193(term)
+msgid "<option>-L</option>, <option>--lock</option>"
+msgstr "<option>-L</option>, <option>--lock</option>"
+
+#: usermod.8.xml:197(para)
+msgid ""
+"Lock a user's password. This puts a '!' in front of the encrypted password, "
+"effectively disabling the password. You can't use this option with <option>-"
+"p</option> or <option>-U</option>."
+msgstr ""
+"Lås en användares lösenord. Detta sätter ett \"!\" i början av det "
+"krypterade lösenordet som effektivt inaktiverar lösenordet. Du kan inte "
+"använda denna flagga med <option>-p</option> eller <option>-U</option>."
+
+#: usermod.8.xml:203(para)
+msgid ""
+"Note: if you wish to lock the account (not only access with a password), you "
+"should also set the <replaceable>EXPIRE_DATE</replaceable> to "
+"<replaceable>1</replaceable>."
+msgstr ""
+
+#: usermod.8.xml:212(term)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid "<option>-m</option>, <option>--move-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:216(para)
+msgid "Move the content of the user's home directory to the new location."
+msgstr ""
+
+#: usermod.8.xml:220(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-d</option> (or "
+"<option>--home</option>) option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: usermod.8.xml:227(term) useradd.8.xml:366(term) groupmod.8.xml:116(term)
+#: groupadd.8.xml:135(term)
+msgid "<option>-o</option>, <option>--non-unique</option>"
+msgstr "<option>-o</option>, <option>--non-unique</option>"
+
+#: usermod.8.xml:231(para)
+msgid ""
+"When used with the <option>-u</option> option, this option allows to change "
+"the user ID to a non-unique value."
+msgstr ""
+
+#: usermod.8.xml:238(term) useradd.8.xml:378(term) groupmod.8.xml:127(term)
+#: groupadd.8.xml:145(term)
+msgid ""
+"<option>-p</option>, <option>--password</option><replaceable>PASSWORD</"
+"replaceable>"
+msgstr ""
+"<option>-p</option>, <option>--password</option><replaceable>LÖSENORD</"
+"replaceable>"
+
+#: usermod.8.xml:243(para) groupmod.8.xml:132(para)
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>."
+msgstr ""
+"Det krypterade lösenordet, som returneras av "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+
+#: usermod.8.xml:248(para) useradd.8.xml:388(para) groupmod.8.xml:137(para)
+#: groupadd.8.xml:155(para)
+msgid ""
+"<emphasis role=\"bold\">Note:</emphasis> This option is not recommended "
+"because the password (or encrypted password) will be visible by users "
+"listing the processes."
+msgstr ""
+
+#: usermod.8.xml:253(para)
+msgid ""
+"The password will be written in the local <filename>/etc/passwd</filename> "
+"or <filename>/etc/shadow</filename> file. This might differ from the "
+"password database configured in your PAM configuration."
+msgstr ""
+
+#: usermod.8.xml:259(para) useradd.8.xml:393(para) groupmod.8.xml:142(para)
+#: groupadd.8.xml:160(para)
+msgid ""
+"You should make sure the password respects the system's password policy."
+msgstr ""
+
+#: usermod.8.xml:266(term) useradd.8.xml:427(term) useradd.8.xml:568(term)
+#: su.1.xml:157(term) chsh.1.xml:85(term)
+msgid ""
+"<option>-s</option>, <option>--shell</option><replaceable>SHELL</replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option><replaceable>SKAL</replaceable>"
+
+#: usermod.8.xml:271(para) chsh.1.xml:89(para)
+msgid ""
+"The name of the user's new login shell. Setting this field to blank causes "
+"the system to select the default login shell."
+msgstr ""
+
+#: usermod.8.xml:278(term) useradd.8.xml:442(term)
+msgid ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#: usermod.8.xml:283(para)
+msgid "The new numerical value of the user's ID."
+msgstr ""
+
+#: usermod.8.xml:286(para)
+msgid ""
+"This value must be unique, unless the <option>-o</option> option is used. "
+"The value must be non-negative. Values between 0 and 999 are typically "
+"reserved for system accounts."
+msgstr ""
+
+#: usermod.8.xml:292(para)
+msgid ""
+"The user's mailbox, and any files which the user owns and which are located "
+"in the user's home directory will have the file user ID changed "
+"automatically."
+msgstr ""
+
+#: usermod.8.xml:297(para)
+msgid ""
+"The ownership of files outside of the user's home directory must be fixed "
+"manually."
+msgstr ""
+
+#: usermod.8.xml:304(term)
+msgid "<option>-U</option>, <option>--unlock</option>"
+msgstr "<option>-U</option>, <option>--unlock</option>"
+
+#: usermod.8.xml:308(para)
+msgid ""
+"Unlock a user's password. This removes the '!' in front of the encrypted "
+"password. You can't use this option with <option>-p</option> or <option>-L</"
+"option>."
+msgstr ""
+"Låser upp en användares lösenord. Detta tar bort det inledande \"!\" i det "
+"krypterade lösenordet. Du kan inte använda denna flagga med <option>-p</"
+"option> eller <option>-L</option>."
+
+#: usermod.8.xml:313(para)
+msgid ""
+"Note: if you wish to unlock the account (not only access with a password), "
+"you should also set the <replaceable>EXPIRE_DATE</replaceable> (for example "
+"to <replaceable>99999</replaceable>, or to the <option>EXPIRE</option> value "
+"from <filename>/etc/default/useradd</filename>)."
+msgstr ""
+
+#: usermod.8.xml:324(term) useradd.8.xml:474(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-s</option>, <option>--shell</option><replaceable>SHELL</"
+#| "replaceable>"
+msgid ""
+"<option>-Z</option>, <option>--selinux-user</option><replaceable>SEUSER</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option><replaceable>SKAL</replaceable>"
+
+#: usermod.8.xml:329(para)
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"the blank, which causes the system to select the default SELinux user."
+msgstr ""
+
+#: usermod.8.xml:340(title) userdel.8.xml:221(title) useradd.8.xml:597(title)
+#: su.1.xml:302(title) shadow.3.xml:193(title) passwd.1.xml:338(title)
+#: newusers.8.xml:312(title) login.1.xml:238(title) lastlog.8.xml:159(title)
+#: groupdel.8.xml:65(title) groupadd.8.xml:224(title) gpasswd.1.xml:206(title)
+#: faillog.8.xml:191(title) chpasswd.8.xml:182(title)
+#: chgpasswd.8.xml:157(title)
+msgid "CAVEATS"
+msgstr "TÄNK PÅ"
+
+#: usermod.8.xml:341(para)
+msgid ""
+"You must make certain that the named user is not executing any processes "
+"when this command is being executed if the user's numerical user ID, the "
+"user's name, or the user's home directory is being changed. "
+"<command>usermod</command> checks this on Linux, but only check if the user "
+"is logged in according to utmp on other architectures."
+msgstr ""
+
+#: usermod.8.xml:349(para)
+msgid ""
+"You must change the owner of any <command>crontab</command> files or "
+"<command>at</command> jobs manually."
+msgstr ""
+
+#: usermod.8.xml:353(para)
+msgid "You must make any changes involving NIS on the NIS server."
+msgstr ""
+
+#: usermod.8.xml:359(title) userdel.8.xml:125(title) useradd.8.xml:621(title)
+#: su.1.xml:310(title) sg.1.xml:76(title) pwconv.8.xml:146(title)
+#: pwck.8.xml:213(title) passwd.1.xml:356(title) newusers.8.xml:324(title)
+#: newgrp.1.xml:87(title) login.1.xml:272(title) grpck.8.xml:173(title)
+#: groupmod.8.xml:152(title) groupmems.8.xml:156(title)
+#: groupdel.8.xml:77(title) groupadd.8.xml:186(title) gpasswd.1.xml:218(title)
+#: chsh.1.xml:120(title) chpasswd.8.xml:194(title) chgpasswd.8.xml:169(title)
+#: chfn.1.xml:99(title)
+msgid "CONFIGURATION"
+msgstr ""
+
+#: usermod.8.xml:360(para) userdel.8.xml:126(para) useradd.8.xml:622(para)
+#: su.1.xml:311(para) sg.1.xml:77(para) pwck.8.xml:214(para)
+#: passwd.1.xml:357(para) newusers.8.xml:325(para) newgrp.1.xml:88(para)
+#: login.1.xml:273(para) grpck.8.xml:174(para) groupmod.8.xml:153(para)
+#: groupmems.8.xml:157(para) groupdel.8.xml:78(para) groupadd.8.xml:187(para)
+#: gpasswd.1.xml:219(para) chsh.1.xml:121(para) chpasswd.8.xml:195(para)
+#: chgpasswd.8.xml:170(para) chfn.1.xml:100(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of this tool:"
+msgstr ""
+
+#: usermod.8.xml:32(term) userdel.8.xml:32(term) useradd.8.xml:32(term)
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_DIR</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: usermod.8.xml:34(para) userdel.8.xml:34(para) useradd.8.xml:34(para)
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"The mail spool directory. This is needed to manipulate the mailbox when its "
+"corresponding user account is modified or deleted. If not specified, a "
+"compile-time default is used."
+msgstr ""
+
+#: usermod.8.xml:41(term) userdel.8.xml:41(term) useradd.8.xml:41(term)
+#: su.1.xml:41(term) login.defs.5.xml:41(term) login.1.xml:41(term)
+#, fuzzy
+msgid "<option>MAIL_FILE</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"Defines the location of the users mail spool files relatively to their home "
+"directory."
+msgstr ""
+
+#. FIXME: MAIL_FILE not used in useradd
+#: usermod.8.xml:50(para) userdel.8.xml:50(para) useradd.8.xml:50(para)
+#: su.1.xml:50(para) login.defs.5.xml:50(para) login.1.xml:50(para)
+msgid ""
+"The <option>MAIL_DIR</option> and <option>MAIL_FILE</option> variables are "
+"used by <command>useradd</command>, <command>usermod</command>, and "
+"<command>userdel</command> to create, move, or delete the user's mail spool."
+msgstr ""
+
+#: usermod.8.xml:56(para) userdel.8.xml:56(para) useradd.8.xml:56(para)
+#: su.1.xml:56(para) login.defs.5.xml:56(para) login.1.xml:56(para)
+#, fuzzy
+msgid ""
+"If <option>MAIL_CHECK_ENAB</option> is set to <replaceable>yes</"
+"replaceable>, they are also used to define the <envar>MAIL</envar> "
+"environment variable."
+msgstr ""
+"Om <option>--preserve-environment</option> används, anges skalet med "
+"miljövariabeln <envar>$SHELL</envar>."
+
+#: usermod.8.xml:30(term) userdel.8.xml:30(term) useradd.8.xml:30(term)
+#: pwconv.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: grpck.8.xml:30(term) groupmod.8.xml:30(term) groupmems.8.xml:30(term)
+#: groupdel.8.xml:30(term) groupadd.8.xml:30(term) gpasswd.1.xml:30(term)
+#: chgpasswd.8.xml:30(term)
+msgid "<option>MAX_MEMBERS_PER_GROUP</option> (number)"
+msgstr ""
+
+#: usermod.8.xml:32(para) userdel.8.xml:32(para) useradd.8.xml:32(para)
+#: pwconv.8.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: grpck.8.xml:32(para) groupmod.8.xml:32(para) groupmems.8.xml:32(para)
+#: groupdel.8.xml:32(para) groupadd.8.xml:32(para) gpasswd.1.xml:32(para)
+#: chgpasswd.8.xml:32(para)
+msgid ""
+"Maximum members per group entry. When the maximum is reached, a new group "
+"entry (line) is started in <filename>/etc/group</filename> (with the same "
+"name, same password, and same GID)."
+msgstr ""
+
+#: usermod.8.xml:37(para) userdel.8.xml:37(para) useradd.8.xml:37(para)
+#: pwconv.8.xml:37(para) newusers.8.xml:37(para) login.defs.5.xml:37(para)
+#: grpck.8.xml:37(para) groupmod.8.xml:37(para) groupmems.8.xml:37(para)
+#: groupdel.8.xml:37(para) groupadd.8.xml:37(para) gpasswd.1.xml:37(para)
+#: chgpasswd.8.xml:37(para)
+msgid ""
+"The default value is 0, meaning that there are no limits in the number of "
+"members in a group."
+msgstr ""
+
+#. Note: on HP, split groups have the same ID, but different
+#.                names.
+#: usermod.8.xml:43(para) userdel.8.xml:43(para) useradd.8.xml:43(para)
+#: pwconv.8.xml:43(para) newusers.8.xml:43(para) login.defs.5.xml:43(para)
+#: grpck.8.xml:43(para) groupmod.8.xml:43(para) groupmems.8.xml:43(para)
+#: groupdel.8.xml:43(para) groupadd.8.xml:43(para) gpasswd.1.xml:43(para)
+#: chgpasswd.8.xml:43(para)
+msgid ""
+"This feature (split group) permits to limit the length of lines in the group "
+"file. This is useful to make sure that lines for NIS groups are not larger "
+"than 1024 characters."
+msgstr ""
+
+#: usermod.8.xml:48(para) userdel.8.xml:48(para) useradd.8.xml:48(para)
+#: pwconv.8.xml:48(para) newusers.8.xml:48(para) login.defs.5.xml:48(para)
+#: grpck.8.xml:48(para) groupmod.8.xml:48(para) groupmems.8.xml:48(para)
+#: groupdel.8.xml:48(para) groupadd.8.xml:48(para) gpasswd.1.xml:48(para)
+#: chgpasswd.8.xml:48(para)
+msgid "If you need to enforce such limit, you can use 25."
+msgstr ""
+
+#: usermod.8.xml:51(para) userdel.8.xml:51(para) useradd.8.xml:51(para)
+#: pwconv.8.xml:51(para) newusers.8.xml:51(para) login.defs.5.xml:51(para)
+#: grpck.8.xml:51(para) groupmod.8.xml:51(para) groupmems.8.xml:51(para)
+#: groupdel.8.xml:51(para) groupadd.8.xml:51(para) gpasswd.1.xml:51(para)
+#: chgpasswd.8.xml:51(para)
+msgid ""
+"Note: split groups may not be supported by all tools (even in the Shadow "
+"toolsuite). You should not use this variable unless you really need it."
+msgstr ""
+
+#: usermod.8.xml:403(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: userdel.8.xml:41(refentrytitle) userdel.8.xml:46(refname)
+#: userdel.8.xml:51(command) login.defs.5.xml:434(term)
+msgid "userdel"
+msgstr "userdel"
+
+#: userdel.8.xml:47(refpurpose)
+msgid "delete a user account and related files"
+msgstr "ta bort ett användarkonto och relaterade filer"
+
+#: userdel.8.xml:61(para)
+#, fuzzy
+msgid ""
+"The <command>userdel</command> command modifies the system account files, "
+"deleting all entries that refer to the user name <emphasis remap=\"I"
+"\">LOGIN</emphasis>. The named user must exist."
+msgstr ""
+"Kommandot <command>userdel</command> ändrar i systemkontofilerna, tar bort "
+"alla poster som refererar till <emphasis remap=\"I\">login_name</emphasis>. "
+"Den angivna användaren måste finnas."
+
+#: userdel.8.xml:70(para)
+msgid "The options which apply to the <command>userdel</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>userdel</command> är:"
+
+#: userdel.8.xml:75(term) groupadd.8.xml:80(term)
+msgid "<option>-f</option>, <option>--force</option>"
+msgstr "<option>-f</option>, <option>--force</option>"
+
+#: userdel.8.xml:79(para)
+msgid ""
+"This option forces the removal of the user account, even if the user is "
+"still logged in. It also forces <command>userdel</command> to remove the "
+"user's home directory and mail spool, even if another user uses the same "
+"home directory or if the mail spool is not owned by the specified user. If "
+"<option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename> and if a group exists with "
+"the same name as the deleted user, then this group will be removed, even if "
+"it is still the primary group of another user."
+msgstr ""
+
+#: userdel.8.xml:92(para)
+msgid ""
+"<emphasis>Note:</emphasis> This option is dangerous and may leave your "
+"system in an inconsistent state."
+msgstr ""
+"<emphasis>Notera:</emphasis> Denna flagga är farlig och kan göra att ditt "
+"system försätts i ett inkonsistent tillstånd."
+
+#: userdel.8.xml:105(term)
+msgid "<option>-r</option>, <option>--remove</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: userdel.8.xml:109(para)
+msgid ""
+"Files in the user's home directory will be removed along with the home "
+"directory itself and the user's mail spool. Files located in other file "
+"systems will have to be searched for and deleted manually."
+msgstr ""
+
+#: userdel.8.xml:115(para)
+msgid ""
+"The mail spool is defined by the <option>MAIL_DIR</option> variable in the "
+"<filename>login.defs</filename> file."
+msgstr ""
+
+#: userdel.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>USERDEL_CMD</option> (string)"
+msgstr "USERDEL_CMD (sträng)"
+
+#: userdel.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If defined, this command is run when removing a user. It should remove any "
+"at/cron/print jobs etc. owned by the user to be removed (passed as the first "
+"argument)."
+msgstr ""
+
+#: userdel.8.xml:40(para) login.defs.5.xml:40(para)
+msgid "The return code of the script is not taken into account."
+msgstr ""
+
+#: userdel.8.xml:46(programlisting) login.defs.5.xml:46(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"#! /bin/sh\n"
+"\n"
+"# Check for the required argument.\n"
+"if [ $# != 1 ]; then\n"
+"\techo \"Usage: $0 username\"\n"
+"\texit 1\n"
+"fi\n"
+"\n"
+"# Remove cron jobs.\n"
+"crontab -r -u $1\n"
+"\n"
+"# Remove at jobs.\n"
+"# Note that it will remove any jobs owned by the same UID,\n"
+"# even if it was shared by a different username.\n"
+"AT_SPOOL_DIR=/var/spool/cron/atjobs\n"
+"find $AT_SPOOL_DIR -name \"[^.]*\" -type f -user $1 -delete \\;\n"
+"\n"
+"# Remove print jobs.\n"
+"lprm $1\n"
+"\n"
+"# All done.\n"
+"exit 0\n"
+"      "
+msgstr ""
+
+#: userdel.8.xml:43(para) login.defs.5.xml:43(para)
+msgid ""
+"Here is an example script, which removes the user's cron, at and print jobs: "
+"<placeholder-1/>"
+msgstr ""
+
+#: userdel.8.xml:32(term) useradd.8.xml:32(term) su.1.xml:32(term)
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>USERGROUPS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: userdel.8.xml:34(para) useradd.8.xml:34(para) su.1.xml:34(para)
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable setting of the umask group bits to be the same as owner bits "
+"(examples: 022 -&gt; 002, 077 -&gt; 007) for non-root users, if the uid is "
+"the same as gid, and username is the same as the primary group name."
+msgstr ""
+
+#: userdel.8.xml:39(para) useradd.8.xml:39(para) su.1.xml:39(para)
+#: login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, <command>userdel</command> will "
+"remove the user's group if it contains no more members, and "
+"<command>useradd</command> will create by default a group with the name of "
+"the user."
+msgstr ""
+
+#: userdel.8.xml:149(filename) useradd.8.xml:683(filename)
+#: su.1.xml:353(filename) pwconv.8.xml:171(filename)
+#: passwd.1.xml:389(filename) newusers.8.xml:384(filename)
+#: login.access.5.xml:99(filename) login.1.xml:367(filename)
+#: groupadd.8.xml:215(filename) chsh.1.xml:148(filename)
+#: chpasswd.8.xml:223(filename) chgpasswd.8.xml:199(filename)
+#: chfn.1.xml:116(filename)
+msgid "/etc/login.defs"
+msgstr "/etc/login.defs"
+
+#: userdel.8.xml:151(para) useradd.8.xml:685(para) su.1.xml:355(para)
+#: pwconv.8.xml:173(para) passwd.1.xml:391(para) newusers.8.xml:386(para)
+#: login.access.5.xml:101(para) login.1.xml:369(para) groupadd.8.xml:217(para)
+#: chsh.1.xml:150(para) chpasswd.8.xml:225(para) chgpasswd.8.xml:201(para)
+#: chfn.1.xml:118(para)
+msgid "Shadow password suite configuration."
+msgstr ""
+
+#: userdel.8.xml:170(title) useradd.8.xml:692(title) pwck.8.xml:251(title)
+#: passwd.1.xml:404(title) grpck.8.xml:209(title) groupmod.8.xml:182(title)
+#: groupdel.8.xml:107(title) groupadd.8.xml:246(title) chage.1.xml:228(title)
+msgid "EXIT VALUES"
+msgstr "AVSLUTNINGSVÄRDEN"
+
+#: userdel.8.xml:175(replaceable) useradd.8.xml:697(replaceable)
+#: pwck.8.xml:256(replaceable) passwd.1.xml:409(replaceable)
+#: grpck.8.xml:214(replaceable) groupmod.8.xml:187(replaceable)
+#: groupdel.8.xml:112(replaceable) groupadd.8.xml:251(replaceable)
+#: chage.1.xml:233(replaceable)
+msgid "0"
+msgstr "0"
+
+#: userdel.8.xml:177(para) useradd.8.xml:699(para) pwck.8.xml:258(para)
+#: passwd.1.xml:411(para) grpck.8.xml:216(para) groupmod.8.xml:189(para)
+#: groupdel.8.xml:114(para) groupadd.8.xml:253(para) chage.1.xml:235(para)
+msgid "success"
+msgstr "lyckad"
+
+#: userdel.8.xml:181(replaceable) useradd.8.xml:703(replaceable)
+#: su.1.xml:55(manvolnum) sg.1.xml:39(manvolnum) pwck.8.xml:262(replaceable)
+#: passwd.1.xml:45(manvolnum) passwd.1.xml:415(replaceable)
+#: newgrp.1.xml:39(manvolnum) login.1.xml:71(manvolnum)
+#: grpck.8.xml:220(replaceable) groups.1.xml:35(manvolnum)
+#: gpasswd.1.xml:43(manvolnum) expiry.1.xml:42(manvolnum)
+#: chsh.1.xml:41(manvolnum) chfn.1.xml:42(manvolnum) chage.1.xml:35(manvolnum)
+#: chage.1.xml:239(replaceable)
+msgid "1"
+msgstr "1"
+
+#: userdel.8.xml:183(para) useradd.8.xml:705(para)
+msgid "can't update password file"
+msgstr "kan inte uppdatera lösenordsfilen"
+
+#: userdel.8.xml:187(replaceable) useradd.8.xml:709(replaceable)
+#: pwck.8.xml:268(replaceable) passwd.1.xml:421(replaceable)
+#: grpck.8.xml:226(replaceable) groupmod.8.xml:193(replaceable)
+#: groupdel.8.xml:118(replaceable) groupadd.8.xml:257(replaceable)
+#: chage.1.xml:245(replaceable)
+msgid "2"
+msgstr "2"
+
+#: userdel.8.xml:189(para) useradd.8.xml:711(para) pwck.8.xml:264(para)
+#: grpck.8.xml:222(para) groupmod.8.xml:195(para) groupdel.8.xml:120(para)
+#: groupadd.8.xml:259(para) chage.1.xml:247(para)
+msgid "invalid command syntax"
+msgstr "ogiltig kommandosyntax"
+
+#: userdel.8.xml:193(replaceable) useradd.8.xml:727(replaceable)
+#: pwck.8.xml:292(replaceable) passwd.1.xml:445(replaceable)
+#: groupmod.8.xml:211(replaceable) groupdel.8.xml:124(replaceable)
+msgid "6"
+msgstr "6"
+
+#: userdel.8.xml:195(para)
+msgid "specified user doesn't exist"
+msgstr "angiven användare finns inte"
+
+#: userdel.8.xml:201(para)
+msgid "user currently logged in"
+msgstr "användaren är för närvarande inloggad"
+
+#: userdel.8.xml:205(replaceable) useradd.8.xml:739(replaceable)
+#: groupmod.8.xml:223(replaceable) groupdel.8.xml:136(replaceable)
+#: groupadd.8.xml:281(replaceable)
+msgid "10"
+msgstr "10"
+
+#: userdel.8.xml:207(para) useradd.8.xml:741(para) groupmod.8.xml:225(para)
+#: groupdel.8.xml:138(para) groupadd.8.xml:283(para)
+msgid "can't update group file"
+msgstr "kan inte uppdatera gruppfilen"
+
+#: userdel.8.xml:211(replaceable) useradd.8.xml:745(replaceable)
+msgid "12"
+msgstr "12"
+
+#: userdel.8.xml:213(para)
+msgid "can't remove home directory"
+msgstr "kan inte ta bort hemkatalogen"
+
+#: userdel.8.xml:171(para)
+msgid ""
+"The <command>userdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>userdel</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: userdel.8.xml:222(para)
+msgid ""
+"<command>userdel</command> will not allow you to remove an account if there "
+"are running processes which belong to this account. In that case, you may "
+"have to kill those processes or lock the user's password or account and "
+"remove the account later. The <option>-f</option> option can force the "
+"deletion of this account."
+msgstr ""
+
+#: userdel.8.xml:229(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this user."
+msgstr ""
+
+#: userdel.8.xml:233(para)
+msgid ""
+"You may not remove any NIS attributes on a NIS client. This must be "
+"performed on the NIS server."
+msgstr ""
+"Du får inte ta bort några NIS-attribut på en NIS-klient. Detta måste "
+"genomföras på NIS-servern."
+
+#: userdel.8.xml:236(para)
+msgid ""
+"If <option>USERGROUPS_ENAB</option> is defined to <emphasis remap=\"I\">yes</"
+"emphasis> in <filename>/etc/login.defs</filename>, <command>userdel</"
+"command> will delete the group with the same name as the user. To avoid "
+"inconsistencies in the passwd and group databases, <command>userdel</"
+"command> will check that this group is not used as a primary group for "
+"another user, and will just warn without deleting the group otherwise. The "
+"<option>-f</option> option can force the deletion of this group."
+msgstr ""
+
+#: userdel.8.xml:249(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: useradd.8.xml:49(refentrytitle) useradd.8.xml:54(refname)
+#: useradd.8.xml:59(command) useradd.8.xml:66(command)
+#: useradd.8.xml:70(command) login.defs.5.xml:421(term)
+msgid "useradd"
+msgstr "useradd"
+
+#: useradd.8.xml:55(refpurpose)
+msgid "create a new user or update default new user information"
+msgstr ""
+"skapa en ny användare eller uppdatera standardinformation för nya användare"
+
+#: useradd.8.xml:67(arg) useradd.8.xml:71(arg)
+msgid "-D"
+msgstr "-D"
+
+#: useradd.8.xml:80(para)
+msgid ""
+"When invoked without the <option>-D</option> option, the <command>useradd</"
+"command> command creates a new user account using the values specified on "
+"the command line plus the default values from the system. Depending on "
+"command line options, the <command>useradd</command> command will update "
+"system files and may also create the new user's home directory and copy "
+"initial files."
+msgstr ""
+
+#: useradd.8.xml:89(para)
+msgid ""
+"By default, a group will also be created for the new user (see <option>-g</"
+"option>, <option>-N</option>, <option>-U</option>, and "
+"<option>USERGROUPS_ENAB</option>)."
+msgstr ""
+
+#: useradd.8.xml:98(para)
+msgid "The options which apply to the <command>useradd</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>useradd</command> är:"
+
+#: useradd.8.xml:102(term) useradd.8.xml:499(term)
+msgid ""
+"<option>-b</option>, <option>--base-dir</option><replaceable>BASE_DIR</"
+"replaceable>"
+msgstr ""
+
+#: useradd.8.xml:107(para)
+msgid ""
+"The default base directory for the system if <option>-d</"
+"option><replaceable>HOME_DIR</replaceable> is not specified. "
+"<replaceable>BASE_DIR</replaceable> is concatenated with the account name to "
+"define the home directory. If the <option>-m</option> option is not used, "
+"<replaceable>BASE_DIR</replaceable> must exist."
+msgstr ""
+
+#: useradd.8.xml:115(para)
+msgid ""
+"If this option is not specified, <command>useradd</command> will use the "
+"base directory specified by the <option>HOME</option> variable in <filename>/"
+"etc/default/useradd</filename>, or <filename>/home</filename> by default."
+msgstr ""
+
+#: useradd.8.xml:130(para)
+msgid ""
+"Any text string. It is generally a short description of the login, and is "
+"currently used as the field for the user's full name."
+msgstr ""
+
+#: useradd.8.xml:143(para)
+msgid ""
+"The new user will be created using <replaceable>HOME_DIR</replaceable> as "
+"the value for the user's login directory. The default is to append the "
+"<replaceable>LOGIN</replaceable> name to <replaceable>BASE_DIR</replaceable> "
+"and use that as the login directory name. The directory "
+"<replaceable>HOME_DIR</replaceable> does not have to exist but will not be "
+"created if it is missing."
+msgstr ""
+
+#: useradd.8.xml:155(term)
+#, fuzzy
+#| msgid "<option>-d</option>, <option>--delete</option>"
+msgid "<option>-D</option>, <option>--defaults</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: useradd.8.xml:159(para)
+#, fuzzy
+msgid "See below, the subsection \"Changing the default values\"."
+msgstr "Ändrar standardvärden"
+
+#: useradd.8.xml:174(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default expiry "
+"date specified by the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or an empty string (no expiry) by default."
+msgstr ""
+
+#: useradd.8.xml:188(para)
+msgid ""
+"The number of days after a password expires until the account is permanently "
+"disabled. A value of 0 disables the account as soon as the password has "
+"expired, and a value of -1 disables the feature."
+msgstr ""
+
+#: useradd.8.xml:194(para)
+msgid ""
+"If not specified, <command>useradd</command> will use the default inactivity "
+"period specified by the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>, or -1 by default."
+msgstr ""
+
+#: useradd.8.xml:208(para)
+msgid ""
+"The group name or number of the user's initial login group. The group name "
+"must exist. A group number must refer to an already existing group."
+msgstr ""
+
+#: useradd.8.xml:213(para)
+msgid ""
+"If not specified, the bahavior of <command>useradd</command> will depend on "
+"the <option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>. If this variable is set to <replaceable>yes</replaceable> (or "
+"<option>-U/--user-group</option> is specified on the command line), a group "
+"will be created for the user, with the same name as her loginname. If the "
+"variable is set to <replaceable>no</replaceable> (or <option>-N/--no-user-"
+"group</option> is specified on the command line), useradd will set the "
+"primary group of the new user to the value specified by the <option>GROUP</"
+"option> variable in <filename>/etc/default/useradd</filename>, or 100 by "
+"default."
+msgstr ""
+
+#: useradd.8.xml:236(para)
+msgid ""
+"A list of supplementary groups which the user is also a member of. Each "
+"group is separated from the next by a comma, with no intervening whitespace. "
+"The groups are subject to the same restrictions as the group given with the "
+"<option>-g</option> option. The default is for the user to belong only to "
+"the initial group."
+msgstr ""
+
+#: useradd.8.xml:253(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-s</option>, <option>--shell</option><replaceable>SHELL</"
+#| "replaceable>"
+msgid ""
+"<option>-k</option>, <option>--skel</option><replaceable>SKEL_DIR</"
+"replaceable>"
+msgstr ""
+"<option>-s</option>, <option>--shell</option><replaceable>SKAL</replaceable>"
+
+#: useradd.8.xml:258(para)
+msgid ""
+"The skeleton directory, which contains files and directories to be copied in "
+"the user's home directory, when the home directory is created by "
+"<command>useradd</command>."
+msgstr ""
+
+#: useradd.8.xml:263(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid if the <option>-m</option> (or <option>--create-"
+"home</option>) option is specified."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:267(para)
+msgid ""
+"If this option is not set, the skeleton directory is defined by the "
+"<option>SKEL</option> variable in <filename>/etc/default/useradd</filename> "
+"or, by default, <filename>/etc/skel</filename>."
+msgstr ""
+
+#: useradd.8.xml:276(term) groupadd.8.xml:114(term)
+msgid ""
+"<option>-K</option>, <option>--key</option><replaceable>KEY</"
+"replaceable>=<replaceable>VALUE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option><replaceable>NYCKEL</"
+"replaceable>=<replaceable>VÄRDE</replaceable>"
+
+#: useradd.8.xml:281(para)
+#, fuzzy
+#| msgid ""
+#| "Overrides /etc/login.defs defaults (UID_MIN, UID_MAX, UMASK, "
+#| "PASS_MAX_DAYS and others). <placeholder-1/> Example: <option>-K </"
+#| "option><replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</"
+#| "replaceable> can be used when creating system account to turn off "
+#| "password ageing, even though system account has no password at all. "
+#| "Multiple <option>-K</option> options can be specified, e.g.: <option>-K </"
+#| "option><replaceable>UID_MIN</replaceable>=<replaceable>100</"
+#| "replaceable><option> -K </option><replaceable>UID_MAX</"
+#| "replaceable>=<replaceable>499</replaceable>"
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (<option>UID_MIN</"
+"option>, <option>UID_MAX</option>, <option>UMASK</option>, "
+"<option>PASS_MAX_DAYS</option> and others). <placeholder-1/> Example: "
+"<option>-K </option><replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-"
+"1</replaceable> can be used when creating system account to turn off "
+"password ageing, even though system account has no password at all. Multiple "
+"<option>-K</option> options can be specified, e.g.: <option>-K </"
+"option><replaceable>UID_MIN</replaceable>=<replaceable>100</"
+"replaceable><option>-K </option><replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Åsidosätter standardvärden för /etc/login.defs (UID_MIN, UID_MAX, UMASK, "
+"PASS_MAX_DAYS och others). <placeholder-1/> Exempel: <option>-K </"
+"option><replaceable>LÖSEN_MAX_DAGAR</replaceable>=<replaceable>-1</"
+"replaceable> kan användas när systemkonton skapas för att stänga av "
+"lösenordsåldring, även om systemkontot inte har något lösenord alls. Flera "
+"av flaggan <option>-K</option> kan anges, t.ex.: <option>-K </"
+"option><replaceable>UID_MIN</replaceable>=<replaceable>100</"
+"replaceable><option> -K </option><replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable>"
+
+#: useradd.8.xml:297(para)
+msgid ""
+"Note: <option>-K </option><replaceable>UID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Notera: <option>-K </option><replaceable>UID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</"
+"replaceable>=<replaceable>499</replaceable> fungerar ännu inte."
+
+#: useradd.8.xml:305(term)
+#, fuzzy
+#| msgid "<option>-l</option>, <option>--list</option>"
+msgid "<option>-l</option>, <option>--no-log-init</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: useradd.8.xml:307(para)
+msgid "Do not add the user to the lastlog and faillog databases."
+msgstr ""
+
+#: useradd.8.xml:310(para)
+msgid ""
+"By default, the user's entries in the lastlog and faillog databases are "
+"resetted to avoid reusing the entry from a previously deleted user."
+msgstr ""
+
+#: useradd.8.xml:318(term)
+msgid "<option>-m</option>, <option>--create-home</option>"
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:322(para)
+msgid ""
+"Create the user's home directory if it does not exist. The files and "
+"directories contained in the skeleton directory (which can be defined with "
+"the <option>-k</option> option) will be copied to the home directory."
+msgstr ""
+
+#: useradd.8.xml:328(para)
+msgid "By default, no home directories are created."
+msgstr ""
+
+#: useradd.8.xml:335(option)
+#, fuzzy
+#| msgid "-"
+msgid "-M"
+msgstr "-"
+
+#: useradd.8.xml:338(para)
+msgid ""
+"Do no create the user's home directory, even if the system wide setting from "
+"<filename>/etc/login.defs</filename> (<option>CREATE_HOME</option>) is set "
+"to <replaceable>yes</replaceable>."
+msgstr ""
+
+#: useradd.8.xml:347(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-N</option>, <option>--no-user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:351(para)
+msgid ""
+"Do not create a group with the same name as the user, but add the user to "
+"the group specified by the <option>-g</option> option or by the "
+"<option>GROUP</option> variable in <filename>/etc/default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:357(para) useradd.8.xml:465(para)
+msgid ""
+"The default behavior (if the <option>-g</option>, <option>-N</option>, and "
+"<option>-U</option> options are not specified) is defined by the "
+"<option>USERGROUPS_ENAB</option> variable in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: useradd.8.xml:370(para)
+msgid "Allow the creation of a user account with a duplicate (non-unique) UID."
+msgstr ""
+
+#: useradd.8.xml:371(para)
+#, fuzzy
+#| msgid "<option>-m</option>, <option>--create-home</option>"
+msgid ""
+"This option is only valid in combination with the <option>-o</option> option."
+msgstr "<option>-m</option>, <option>--create-home</option>"
+
+#: useradd.8.xml:383(para) groupadd.8.xml:150(para)
+#, fuzzy
+#| msgid ""
+#| "The encrypted password, as returned by "
+#| "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"The encrypted password, as returned by <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>. The default is to "
+"disable the password."
+msgstr ""
+"Det krypterade lösenordet, som returneras av "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+
+#: useradd.8.xml:400(term) newusers.8.xml:263(term) groupadd.8.xml:167(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-r</option>, <option>--system</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: useradd.8.xml:404(para) newusers.8.xml:267(para)
+msgid "Create a system account."
+msgstr ""
+
+#: useradd.8.xml:407(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are choosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>/etc/login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: useradd.8.xml:416(para)
+msgid ""
+"Note that <command>useradd</command> will not create a home directory for "
+"such an user, regardless of the default setting in <filename>/etc/login."
+"defs</filename> (<option>CREATE_HOME</option>). You have to specify the "
+"<option>-m</option> options if you want a home directory for a system "
+"account to be created."
+msgstr ""
+
+#: useradd.8.xml:432(para)
+msgid ""
+"The name of the user's login shell. The default is to leave this field "
+"blank, which causes the system to select the default login shell specified "
+"by the <option>SHELL</option> variable in <filename>/etc/default/useradd</"
+"filename>, or an empty string by default."
+msgstr ""
+
+#: useradd.8.xml:447(para)
+msgid ""
+"The numerical value of the user's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than 999 and greater than "
+"every other user. Values between 0 and 999 are typically reserved for system "
+"accounts."
+msgstr ""
+
+#: useradd.8.xml:457(term)
+#, fuzzy
+#| msgid "<option>-g</option>, <option>--group</option>"
+msgid "<option>-U</option>, <option>--user-group</option>"
+msgstr "<option>-g</option>, <option>--group</option>"
+
+#: useradd.8.xml:461(para)
+msgid ""
+"Create a group with the same name as the user, and add the user to this "
+"group."
+msgstr ""
+
+#: useradd.8.xml:479(para)
+msgid ""
+"The SELinux user for the user's login. The default is to leave this field "
+"blank, which causes the system to select the default SELinux user."
+msgstr ""
+
+#: useradd.8.xml:489(title)
+msgid "Changing the default values"
+msgstr "Ändrar standardvärden"
+
+#: useradd.8.xml:490(para)
+msgid ""
+"When invoked with only the <option>-D</option> option, <command>useradd</"
+"command> will display the current default values. When invoked with <option>-"
+"D</option> plus other options, <command>useradd</command> will update the "
+"default values for the specified options. Valid default-changing options are:"
+msgstr ""
+
+#: useradd.8.xml:504(para)
+msgid ""
+"The path prefix for a new user's home directory. The user's name will be "
+"affixed to the end of <replaceable>BASE_DIR</replaceable> to form the new "
+"user's home directory name, if the <option>-d</option> option is not used "
+"when creating a new account."
+msgstr ""
+
+#: useradd.8.xml:511(para)
+msgid ""
+"This option sets the <option>HOME</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:523(para)
+msgid "The date on which the user account is disabled."
+msgstr "Datumet när användarkontot blir inaktiverat."
+
+#: useradd.8.xml:524(para)
+msgid ""
+"This option sets the <option>EXPIRE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:536(para)
+msgid ""
+"The number of days after a password has expired before the account will be "
+"disabled."
+msgstr ""
+"Antalet dagar efter att ett lösenord har gått ut innan kontot kommer att "
+"inaktiveras."
+
+#: useradd.8.xml:540(para)
+msgid ""
+"This option sets the <option>INACTIVE</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:552(para)
+msgid ""
+"The group name or ID for a new user's initial group (when the <option>-N/--"
+"no-user-group</option> is used or when the <option>USERGROUPS_ENAB</option> "
+"variable is set to <replaceable>no</replaceable> in <filename>/etc/login."
+"defs</filename>. The named group must exist, and a numerical group ID must "
+"have an existing entry."
+msgstr ""
+
+#: useradd.8.xml:561(para)
+msgid ""
+"This option sets the <option>GROUP</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:573(para)
+msgid "The name of a new user's login shell."
+msgstr ""
+
+#: useradd.8.xml:576(para)
+msgid ""
+"This option sets the <option>SHELL</option> variable in <filename>/etc/"
+"default/useradd</filename>."
+msgstr ""
+
+#: useradd.8.xml:588(title)
+msgid "NOTES"
+msgstr "NOTERINGAR"
+
+#: useradd.8.xml:589(para)
+#, fuzzy
+#| msgid ""
+#| "The system administrator is responsible for placing the default user "
+#| "files in the <filename>/etc/skel/</filename> directory."
+msgid ""
+"The system administrator is responsible for placing the default user files "
+"in the <filename>/etc/skel/</filename> directory (or any other skeleton "
+"directory specified in <filename>/etc/default/useradd</filename> or on the "
+"command line)."
+msgstr ""
+"Systemadministratören är ansvarig för att placera standardanvändarfiler i "
+"katalogen <filename>/etc/skel/</filename>."
+
+#: useradd.8.xml:598(para)
+#, fuzzy
+msgid ""
+"You may not add a user to a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Du får inte lägga till en användare till en NIS-grupp. Detta måste "
+"genomföras på NIS-servern."
+
+#: useradd.8.xml:603(para)
+msgid ""
+"Similarly, if the username already exists in an external user database such "
+"as NIS or LDAP, <command>useradd</command> will deny the user account "
+"creation request."
+msgstr ""
+
+#: useradd.8.xml:609(para)
+#, fuzzy
+#| msgid ""
+#| "Usernames must begin with a lower case letter or an underscore, and only "
+#| "lower case letters, underscores, dashes, and dollar signs may follow. In "
+#| "regular expression terms: [a-z_][a-z0-9_-]*[$]"
+msgid ""
+"Usernames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Användarnamn måste börja med en gemen bokstav eller ett understreck och får "
+"endast innehålla gemener, understreck, minustecken och på slutet ett dollar-"
+"tecken. I reguljära uttryckstermer: [a-z_][a-z0-9_-]*[$]"
+
+#: useradd.8.xml:615(para)
+msgid "Usernames may only be up to 32 characters long."
+msgstr ""
+
+#: useradd.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>CREATE_HOME</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: useradd.8.xml:32(para) login.defs.5.xml:32(para)
+msgid ""
+"Indicate if a home directory should be created by default for new users."
+msgstr ""
+
+#: useradd.8.xml:36(para) login.defs.5.xml:36(para)
+msgid ""
+"This setting does not apply to system users, and can be overriden on the "
+"command line."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: groupadd.8.xml:32(term)
+#, fuzzy
+msgid "<option>GID_MAX</option> (number)"
+msgstr "GID_MAX (nummer)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#: groupadd.8.xml:33(term)
+#, fuzzy
+msgid "<option>GID_MIN</option> (number)"
+msgstr "GID_MIN (nummer)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+#: groupadd.8.xml:35(para)
+msgid ""
+"Range of group IDs used for the creation of regular groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_DAYS</option> (number)"
+msgstr "PASS_MAX_DAYS (nummer)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The maximum number of days a password may be used. If the password is older "
+"than this, a password change will be forced. If not specified, -1 will be "
+"assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MIN_DAYS</option> (number)"
+msgstr "PASS_MIN_DAYS (nummer)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The minimum number of days allowed between password changes. Any password "
+"changes attempted sooner than this will be rejected. If not specified, -1 "
+"will be assumed (which disables the restriction)."
+msgstr ""
+
+#: useradd.8.xml:32(term) pwconv.8.xml:32(term) pwck.8.xml:32(term)
+#: newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_WARN_AGE</option> (number)"
+msgstr "PASS_WARN_AGE (nummer)"
+
+#: useradd.8.xml:34(para) pwconv.8.xml:34(para) pwck.8.xml:34(para)
+#: newusers.8.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"The number of days warning given before a password expires. A zero means "
+"warning is given only upon the day of expiration, a negative value means no "
+"warning is given. If not specified, no warning will be provided."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: groupadd.8.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_GID_MAX</option> (number)"
+msgstr "GID_MAX (nummer)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: groupadd.8.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_GID_MIN</option> (number)"
+msgstr "GID_MIN (nummer)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: groupadd.8.xml:33(para)
+msgid ""
+"Range of group IDs used for the creation of system groups by "
+"<command>useradd</command>, <command>groupadd</command>, or "
+"<command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#, fuzzy
+msgid "<option>SYS_UID_MAX</option> (number)"
+msgstr "UID_MAX (nummer)"
+
+#: useradd.8.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#, fuzzy
+msgid "<option>SYS_UID_MIN</option> (number)"
+msgstr "UID_MIN (nummer)"
+
+#: useradd.8.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+msgid ""
+"Range of user IDs used for the creation of system users by <command>useradd</"
+"command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>UID_MAX</option> (number)"
+msgstr "UID_MAX (nummer)"
+
+#: useradd.8.xml:33(term) newusers.8.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>UID_MIN</option> (number)"
+msgstr "UID_MIN (nummer)"
+
+#: useradd.8.xml:35(para) newusers.8.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Range of user IDs used for the creation of regular users by "
+"<command>useradd</command> or <command>newusers</command>."
+msgstr ""
+
+#: useradd.8.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: login.1.xml:32(term)
+#, fuzzy
+msgid "<option>UMASK</option> (number)"
+msgstr "UMASK (nummer)"
+
+#: useradd.8.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: login.1.xml:34(para)
+msgid ""
+"The file mode creation mask is initialized to this value. If not specified, "
+"the mask will be initialized to 022."
+msgstr ""
+
+#: useradd.8.xml:38(para) newusers.8.xml:38(para) login.defs.5.xml:38(para)
+#: login.1.xml:38(para)
+msgid ""
+"<command>useradd</command> and <command>newusers</command> use this mask to "
+"set the mode of the home directory they create"
+msgstr ""
+
+#: useradd.8.xml:42(para) newusers.8.xml:42(para) login.defs.5.xml:42(para)
+#: login.1.xml:42(para)
+msgid ""
+"It is also used by <command>login</command> to define users' initial umask. "
+"Note that this mask can be overriden by the user's GECOS line (if "
+"<option>QUOTAS_ENAB</option> is set) or by the specification of a limit with "
+"the <emphasis>K</emphasis> identifier in "
+"<citerefentry><refentrytitle>limits</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: useradd.8.xml:671(filename)
+msgid "/etc/default/useradd"
+msgstr "/etc/default/useradd"
+
+#: useradd.8.xml:673(para)
+msgid "Default values for account creation."
+msgstr "Standardvärden för skapande av konto."
+
+#: useradd.8.xml:677(filename)
+msgid "/etc/skel/"
+msgstr "/etc/skel/"
+
+#: useradd.8.xml:679(para)
+msgid "Directory containing default files."
+msgstr "Katalog som innehåller standardfiler."
+
+#: useradd.8.xml:715(replaceable) shadow.3.xml:35(manvolnum)
+#: pwck.8.xml:274(replaceable) passwd.1.xml:427(replaceable)
+#: grpck.8.xml:232(replaceable) groupmod.8.xml:199(replaceable)
+#: groupadd.8.xml:263(replaceable)
+msgid "3"
+msgstr "3"
+
+#: useradd.8.xml:717(para) passwd.1.xml:447(para) groupmod.8.xml:201(para)
+#: groupadd.8.xml:265(para)
+msgid "invalid argument to option"
+msgstr "ogiltigt argument till flagga"
+
+#: useradd.8.xml:721(replaceable) pwck.8.xml:280(replaceable)
+#: passwd.1.xml:433(replaceable) grpck.8.xml:238(replaceable)
+#: groupmod.8.xml:205(replaceable) groupadd.8.xml:269(replaceable)
+msgid "4"
+msgstr "4"
+
+#: useradd.8.xml:723(para)
+msgid "UID already in use (and no <option>-o</option>)"
+msgstr "UID används redan (och inget <option>-o</option>)"
+
+#: useradd.8.xml:729(para) groupmod.8.xml:207(para) groupmod.8.xml:213(para)
+#: groupdel.8.xml:126(para)
+msgid "specified group doesn't exist"
+msgstr "angiven grupp finns inte"
+
+#: useradd.8.xml:733(replaceable) groupmod.8.xml:217(replaceable)
+#: groupadd.8.xml:275(replaceable)
+msgid "9"
+msgstr "9"
+
+#: useradd.8.xml:735(para)
+msgid "username already in use"
+msgstr "användarnamnet används redan"
+
+#: useradd.8.xml:747(para)
+msgid "can't create home directory"
+msgstr "kan inte skapa hemkatalog"
+
+#: useradd.8.xml:751(replaceable)
+msgid "13"
+msgstr "13"
+
+#: useradd.8.xml:753(para)
+msgid "can't create mail spool"
+msgstr "kan inte skapa postkö"
+
+#: useradd.8.xml:693(para)
+msgid ""
+"The <command>useradd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>useradd</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: useradd.8.xml:762(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newusers</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: suauth.5.xml:34(refentrytitle) suauth.5.xml:39(refname)
+msgid "suauth"
+msgstr "suauth"
+
+#: suauth.5.xml:35(manvolnum) shadow.5.xml:35(manvolnum)
+#: pwck.8.xml:286(replaceable) porttime.5.xml:35(manvolnum)
+#: passwd.5.xml:35(manvolnum) passwd.1.xml:439(replaceable)
+#: login.defs.5.xml:98(manvolnum) login.access.5.xml:36(manvolnum)
+#: limits.5.xml:36(manvolnum) gshadow.5.xml:34(manvolnum)
+#: grpck.8.xml:244(replaceable) faillog.5.xml:35(manvolnum)
+msgid "5"
+msgstr "5"
+
+#: suauth.5.xml:36(refmiscinfo) shadow.5.xml:36(refmiscinfo)
+#: porttime.5.xml:36(refmiscinfo) passwd.5.xml:36(refmiscinfo)
+#: login.defs.5.xml:99(refmiscinfo) login.access.5.xml:37(refmiscinfo)
+#: limits.5.xml:37(refmiscinfo) gshadow.5.xml:35(refmiscinfo)
+#: faillog.5.xml:36(refmiscinfo)
+msgid "File Formats and Conversions"
+msgstr "Filformat och konversioner"
+
+#: suauth.5.xml:40(refpurpose)
+msgid "detailed su control file"
+msgstr "detaljerad kontrollfil för su"
+
+#: suauth.5.xml:45(command) suauth.5.xml:171(filename)
+msgid "/etc/suauth"
+msgstr "/etc/suauth"
+
+#: suauth.5.xml:51(para)
+msgid ""
+"The file <filename>/etc/suauth</filename> is referenced whenever the su "
+"command is called. It can change the behaviour of the su command, based upon:"
+msgstr ""
+
+#. .RS
+#: suauth.5.xml:58(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      1) the user su is targetting\n"
+"    "
+msgstr ""
+
+#. .fi
+#: suauth.5.xml:62(para)
+msgid ""
+"2) the user executing the su command (or any groups he might be a member of)"
+msgstr ""
+
+#: suauth.5.xml:67(para)
+msgid ""
+"The file is formatted like this, with lines starting with a # being treated "
+"as comment lines and ignored;"
+msgstr ""
+"Filen är i följande format, med de rader som inleds med # behandlas som "
+"kommentarsrader och ignoreras;"
+
+#: suauth.5.xml:72(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      to-id:from-id:ACTION\n"
+"    "
+msgstr ""
+"\n"
+"      till-id:från-id:ÅTGÄRD\n"
+"    "
+
+#: suauth.5.xml:76(para)
+msgid ""
+"Where to-id is either the word <emphasis>ALL</emphasis>, a list of usernames "
+"delimited by \",\" or the words <emphasis>ALL EXCEPT</emphasis> followed by "
+"a list of usernames delimited by \",\""
+msgstr ""
+"Där till-id är antingen ordet <emphasis>ALL</emphasis>, en lista med "
+"användarnamn separerade med \",\" eller orden <emphasis>ALL EXCEPT</"
+"emphasis> följt av en lista med användarnamn separerade med \",\""
+
+#: suauth.5.xml:82(para)
+msgid ""
+"from-id is formatted the same as to-id except the extra word "
+"<emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT GROUP</"
+"emphasis> is perfectly valid too. Following <emphasis>GROUP</emphasis> "
+"appears one or more group names, delimited by \",\". It is not sufficient to "
+"have primary group id of the relevant group, an entry in "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> is neccessary."
+msgstr ""
+"från-id är formaterad på samma sätt som till-id förutom att det extra ordet "
+"<emphasis>GROUP</emphasis> känns igen. <emphasis>ALL EXCEPT GROUP</emphasis> "
+"är helt giltigt också. Efterföljande till <emphasis>GROUP</emphasis> kan "
+"vara ett eller flera gruppnamn, separerade med \",\". Det är inte "
+"tillräckligt att ha primärt grupp-id för den relevanta gruppen, en post i "
+"<citerefentry><refentrytitle>/etc/group</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry> är nödvändigt."
+
+#: suauth.5.xml:93(para)
+msgid "Action can be one only of the following currently supported options."
+msgstr "Åtgärden kan endast vara en av följande för närvarande stödda flaggor."
+
+#: suauth.5.xml:99(emphasis)
+msgid "DENY"
+msgstr "DENY"
+
+#: suauth.5.xml:102(para)
+msgid "The attempt to su is stopped before a password is even asked for."
+msgstr "Försöket att använda su stoppades före ett lösenord har efterfrågats."
+
+#: suauth.5.xml:109(emphasis)
+msgid "NOPASS"
+msgstr "NOPASS"
+
+#: suauth.5.xml:112(para)
+msgid ""
+"The attempt to su is automatically successful; no password is asked for."
+msgstr ""
+"Försöket att använda su lyckades helt automatiskt; inget lösenord har "
+"efterfrågats."
+
+#: suauth.5.xml:120(emphasis)
+msgid "OWNPASS"
+msgstr "OWNPASS"
+
+#: suauth.5.xml:123(para)
+msgid ""
+"For the su command to be successful, the user must enter his or her own "
+"password. They are told this."
+msgstr ""
+"För att su-kommandot ska lyckas måste användaren mata in sitt egna lösenord. "
+"De blir frågade att göra detta."
+
+#: suauth.5.xml:131(para)
+msgid ""
+"Note there are three separate fields delimited by a colon. No whitespace "
+"must surround this colon. Also note that the file is examined sequentially "
+"line by line, and the first applicable rule is used without examining the "
+"file further. This makes it possible for a system administrator to exercise "
+"as fine control as he or she wishes."
+msgstr ""
+
+#: suauth.5.xml:141(title)
+msgid "EXAMPLE"
+msgstr "EXEMPEL"
+
+#: suauth.5.xml:142(literallayout)
+#, no-wrap
+msgid ""
+"\n"
+"      # sample /etc/suauth file\n"
+"      #\n"
+"      # A couple of privileged usernames may\n"
+"      # su to root with their own password.\n"
+"      #\n"
+"      root:chris,birddog:OWNPASS\n"
+"      #\n"
+"      # Anyone else may not su to root unless in\n"
+"      # group wheel. This is how BSD does things.\n"
+"      #\n"
+"      root:ALL EXCEPT GROUP wheel:DENY\n"
+"      #\n"
+"      # Perhaps terry and birddog are accounts\n"
+"      # owned by the same person.\n"
+"      # Access can be arranged between them\n"
+"      # with no password.\n"
+"      #\n"
+"      terry:birddog:NOPASS\n"
+"      birddog:terry:NOPASS\n"
+"      #\n"
+"    "
+msgstr ""
+"\n"
+"      # exempelfil för /etc/suauth\n"
+"      #\n"
+"      # Ett par priviligerade användarnamn som \n"
+"      # kan su till root med sina egna lösenord.\n"
+"      #\n"
+"      root:bosse,birddog:OWNPASS\n"
+"      #\n"
+"      # Alla andra kan inte su till root om de inte finns\n"
+"      # gruppen wheel. Det är så BSD gör saker.\n"
+"      #\n"
+"      root:ALL EXCEPT GROUP wheel:DENY\n"
+"      #\n"
+"      # Kanske terry och birddog är konton som\n"
+"      # ägs av samma person.\n"
+"      # Tillgång kan ges mellan dem utan\n"
+"      # lösenord.\n"
+"      #\n"
+"      terry:birddog:NOPASS\n"
+"      birddog:terry:NOPASS\n"
+"      #\n"
+"    "
+
+#: suauth.5.xml:178(title) pwconv.8.xml:135(title) login.defs.5.xml:455(title)
+msgid "BUGS"
+msgstr "FEL"
+
+#: suauth.5.xml:179(para)
+msgid ""
+"There could be plenty lurking. The file parser is particularly unforgiving "
+"about syntax errors, expecting no spurious whitespace (apart from beginning "
+"and end of lines), and a specific token delimiting different things."
+msgstr ""
+
+#: suauth.5.xml:188(title) shadow.3.xml:183(title)
+msgid "DIAGNOSTICS"
+msgstr "DIAGNOSTIK"
+
+#: suauth.5.xml:189(para)
+msgid ""
+"An error parsing the file is reported using "
+"<citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry> as level ERR on facility AUTH."
+msgstr ""
+
+#: suauth.5.xml:198(para)
+msgid ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: su.1.xml:54(refentrytitle) su.1.xml:59(refname) su.1.xml:64(command)
+#: login.defs.5.xml:395(term)
+msgid "su"
+msgstr "su"
+
+#: su.1.xml:56(refmiscinfo) sg.1.xml:40(refmiscinfo)
+#: passwd.1.xml:46(refmiscinfo) newgrp.1.xml:40(refmiscinfo)
+#: login.1.xml:72(refmiscinfo) groups.1.xml:36(refmiscinfo)
+#: gpasswd.1.xml:44(refmiscinfo) expiry.1.xml:43(refmiscinfo)
+#: chsh.1.xml:42(refmiscinfo) chfn.1.xml:43(refmiscinfo)
+#: chage.1.xml:36(refmiscinfo)
+msgid "User Commands"
+msgstr "Användarkommandon"
+
+#: su.1.xml:60(refpurpose)
+#, fuzzy
+msgid "change user ID or become superuser"
+msgstr "ändra användar-id eller bli superanvändare"
+
+#: su.1.xml:70(replaceable) login.1.xml:85(replaceable)
+#: login.1.xml:93(replaceable)
+msgid "username"
+msgstr "användarnamn"
+
+#: su.1.xml:78(para)
+#, fuzzy
+msgid ""
+"The <command>su</command> command is used to become another user during a "
+"login session. Invoked without a <option>username</option>, <command>su</"
+"command> defaults to becoming the superuser. The optional argument <option>-"
+"</option> may be used to provide an environment similar to what the user "
+"would expect had the user logged in directly."
+msgstr ""
+"<command>su</command> används för att bli en annan användare under en "
+"inloggningssession. Om det startas utan <option>användarnamn</option>, "
+"väljer <command>su</command> superanvändaren. Det valfria argumentet "
+"<option>-</option> kan användas för att tillhandahålla en miljö som liknar "
+"den som användaren skulle förvänta sig om användaren hade loggat in direkt."
+
+#: su.1.xml:87(para)
+msgid ""
+"Additional arguments may be provided after the username, in which case they "
+"are supplied to the user's login shell. In particular, an argument of "
+"<option>-c</option> will cause the next argument to be treated as a command "
+"by most command interpreters. The command will be executed by the shell "
+"specified in <filename>/etc/passwd</filename> for the target user."
+msgstr ""
+
+#: su.1.xml:96(para)
+msgid ""
+"You can use the <option>--</option> argument to separate <command>su</"
+"command> options from the arguments supplied to the shell."
+msgstr ""
+"Du kan använda argumentet <option>--</option> för att separera flaggorna "
+"till <command>su</command> från de argument som skickas till skalet."
+
+#: su.1.xml:101(para)
+msgid ""
+"The user will be prompted for a password, if appropriate. Invalid passwords "
+"will produce an error message. All attempts, both valid and invalid, are "
+"logged to detect abuse of the system."
+msgstr ""
+"Användaren kommer att frågas efter ett lösenord, om det är lämpligt. "
+"Ogiltiga lösenord kommer att ge ett felmeddelande. Alla försök, både giltiga "
+"och ogiltiga, loggas för att detektera misskötsel av systemet."
+
+#: su.1.xml:106(para)
+msgid ""
+"The current environment is passed to the new shell. The value of <envar>"
+"$PATH</envar> is reset to <filename>/bin:/usr/bin</filename> for normal "
+"users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename> for the "
+"superuser. This may be changed with the <option>ENV_PATH</option> and "
+"<option>ENV_SUPATH</option> definitions in <filename>/etc/login.defs</"
+"filename>."
+msgstr ""
+
+#: su.1.xml:115(para) login.1.xml:166(para)
+msgid ""
+"A subsystem login is indicated by the presence of a \"*\" as the first "
+"character of the login shell. The given home directory will be used as the "
+"root of a new file system which the user is actually logged into."
+msgstr ""
+
+#: su.1.xml:124(para)
+msgid "The options which apply to the <command>su</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>su</command> är:"
+
+#: su.1.xml:128(term)
+#, fuzzy
+msgid ""
+"<option>-c</option>, <option>--command</option><replaceable>COMMAND</"
+"replaceable>"
+msgstr ""
+"<option>-c</option>, <option>--comment</option><replaceable>KOMMENTAR</"
+"replaceable>"
+
+#: su.1.xml:133(para)
+msgid ""
+"Specify a command that will be invoked by the shell using its <option>-c</"
+"option>."
+msgstr "Ange ett kommando som ska startas av skalet med <option>-c</option>."
+
+#: su.1.xml:140(term)
+msgid "<option>-</option>, <option>-l</option>, <option>--login</option>"
+msgstr "<option>-</option>, <option>-l</option>, <option>--login</option>"
+
+#: su.1.xml:144(para)
+msgid ""
+"Provide an environment similar to what the user would expect had the user "
+"logged in directly."
+msgstr ""
+"Tillhandahåll en miljö som liknar den som användaren skulle förvänta sig om "
+"användaren loggat in direkt."
+
+#: su.1.xml:148(para)
+msgid ""
+"When <option>-</option> is used, it must be specified as the last "
+"<command>su</command> option. The other forms (<option>-l</option> and "
+"<option>--login</option>) do not have this restriction."
+msgstr ""
+"När <option>-</option> används måste den anges som den sista flaggan för "
+"<command>su</command>. De andra formerna (<option>-l</option> och <option>--"
+"login</option>) har inte denna restriktion."
+
+#: su.1.xml:162(para)
+msgid "The shell that will be invoked."
+msgstr "Skalet som ska startas."
+
+#: su.1.xml:170(para)
+msgid "The shell specified with --shell."
+msgstr "Skalet angivet med --shell."
+
+#: su.1.xml:173(para)
+msgid ""
+"If <option>--preserve-environment</option> is used, the shell specified by "
+"the <envar>$SHELL</envar> environment variable."
+msgstr ""
+"Om <option>--preserve-environment</option> används, anges skalet med "
+"miljövariabeln <envar>$SHELL</envar>."
+
+#: su.1.xml:180(para)
+msgid ""
+"The shell indicated in the <filename>/etc/passwd</filename> entry for the "
+"target user."
+msgstr ""
+
+#: su.1.xml:186(para)
+msgid ""
+"<filename>/bin/sh</filename> if a shell could not be found by any above "
+"method."
+msgstr ""
+"<filename>/bin/sh</filename> om ett skal inte kunde hittas med någon "
+"ovanstående metod."
+
+#: su.1.xml:163(para)
+msgid ""
+"The invoked shell is chosen from (highest priority first): <placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:191(para)
+msgid ""
+"If the target user has a restricted shell (i.e. the shell field of this "
+"user's entry in <filename>/etc/passwd</filename> is not listed in <filename>/"
+"etc/shell</filename>), then the <option>--shell</option> option or the "
+"<envar>$SHELL</envar> environment variable won't be taken into account, "
+"unless <command>su</command> is called by root."
+msgstr ""
+
+#: su.1.xml:202(term)
+msgid ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+msgstr ""
+"<option>-m</option>, <option>-p</option>, <option>--preserve-environment</"
+"option>"
+
+#: su.1.xml:211(envar)
+msgid "$PATH"
+msgstr ""
+
+#: su.1.xml:213(para)
+msgid ""
+"reset according to the <filename>/etc/login.defs</filename> options "
+"<option>ENV_PATH</option> or <option>ENV_SUPATH</option> (see below);"
+msgstr ""
+
+#: su.1.xml:222(envar)
+msgid "$IFS"
+msgstr ""
+
+#: su.1.xml:224(para)
+msgid ""
+"reset to <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>, if it was "
+"set."
+msgstr ""
+
+#: su.1.xml:207(para)
+#, fuzzy
+#| msgid "Preserve the current environment."
+msgid "Preserve the current environment, except for: <placeholder-1/>"
+msgstr "Behåll den aktuella miljön."
+
+#: su.1.xml:233(para)
+msgid ""
+"If the target user has a restricted shell, this option has no effect (unless "
+"<command>su</command> is called by root)."
+msgstr ""
+"Om målanvändaren har ett begränsat skal har denna flagga ingen effekt "
+"(såvida inte <command>su</command> har startats av root)."
+
+#: su.1.xml:242(para)
+msgid ""
+"The <envar>$HOME</envar>, <envar>$SHELL</envar>, <envar>$USER</envar>, "
+"<envar>$LOGNAME</envar>, <envar>$PATH</envar>, and <envar>$IFS</envar> "
+"environment variables are reset."
+msgstr ""
+
+#: su.1.xml:251(para)
+msgid ""
+"If <option>--login</option> is not used, the environment is copied, except "
+"for the variables above."
+msgstr ""
+
+#: su.1.xml:258(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TERM</envar>, <envar>"
+"$COLORTERM</envar>, <envar>$DISPLAY</envar>, and <envar>$XAUTHORITY</envar> "
+"environment variables are copied if they were set."
+msgstr ""
+
+#: su.1.xml:268(para)
+msgid ""
+"If <option>--login</option> is used, the <envar>$TZ</envar>, <envar>$HZ</"
+"envar>, and <envar>$MAIL</envar> environment variables are set according to "
+"the <filename>/etc/login.defs</filename> options <option>ENV_TZ</option>, "
+"<option>ENV_HZ</option>, <option>MAIL_DIR</option>, and <option>MAIL_FILE</"
+"option> (see below)."
+msgstr ""
+
+#: su.1.xml:281(para)
+msgid ""
+"If <option>--login</option> is used, other environment variables might be "
+"set by the <option>ENVIRON_FILE</option> file (see below)."
+msgstr ""
+
+#: su.1.xml:289(para)
+msgid "Other environment might be set by PAM modules."
+msgstr ""
+
+#: su.1.xml:237(para)
+msgid ""
+"Note that the default behavior for the environment is the following: "
+"<placeholder-1/>"
+msgstr ""
+
+#: su.1.xml:303(para)
+msgid ""
+"This version of <command>su</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+"Denna version av <command>su</command> har många kompileringsflaggor, kanske "
+"bara några används på specifika system."
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, either full pathname of a file containing device names (one per "
+"line) or a \":\" delimited list of device names. Root logins will be allowed "
+"only upon these devices."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+msgid "If not defined, root will be allowed on any device."
+msgstr ""
+
+#: su.1.xml:42(para) login.defs.5.xml:42(para) login.1.xml:42(para)
+msgid "The device should be specified without the /dev/ prefix."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>CONSOLE_GROUPS</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"List of groups to add to the user's supplementary groups set when logging in "
+"on the console (as determined by the CONSOLE setting). Default is none. "
+"<placeholder-1/> Use with caution - it is possible for users to gain "
+"permanent access to these groups, even when not logged in on the console."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>DEFAULT_HOME</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Indicate if login is allowed if we can't cd to the home directory. Default "
+"in no."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"If set to <replaceable>yes</replaceable>, the user will login in the root "
+"(<filename>/</filename>) directory if it is not possible to cd to her home "
+"directory."
+msgstr ""
+
+#. XXX: When compiled with PAM support, only sulogin uses ENV_HZ
+#: su.1.xml:33(term) login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>ENV_HZ</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"If set, it will be used to define the HZ environment variable when a user "
+"login. The value must be preceded by <replaceable>HZ=</replaceable>. A "
+"common value on Linux is <replaceable>HZ=100</replaceable>."
+msgstr ""
+
+#: su.1.xml:41(para) login.defs.5.xml:41(para) login.1.xml:41(para)
+msgid ""
+"The <envar>HZ</envar> environment variable is only set when the user (the "
+"superuser) logs in with <command>sulogin</command>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENVIRON_FILE</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If this file exists and is readable, login environment will be read from it. "
+"Every line should be in the form name=value."
+msgstr ""
+
+#: su.1.xml:38(para) login.defs.5.xml:38(para) login.1.xml:38(para)
+#, fuzzy
+#| msgid ""
+#| "The file is formatted like this, with lines starting with a # being "
+#| "treated as comment lines and ignored;"
+msgid "Lines starting with a # are treated as comment lines and ignored."
+msgstr ""
+"Filen är i följande format, med de rader som inleds med # behandlas som "
+"kommentarsrader och ignoreras;"
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_PATH</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when a "
+"regular user login. The value can be preceded by <replaceable>PATH=</"
+"replaceable>, or a colon separated list of paths (for example <replaceable>/"
+"bin:/usr/bin</replaceable>). The default value is <replaceable>PATH=/bin:/"
+"usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_SUPATH</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the PATH environment variable when the "
+"superuser login. The value can be preceded by <replaceable>PATH=</"
+"replaceable>, or a colon separated list of paths (for example <replaceable>/"
+"sbin:/bin:/usr/sbin:/usr/bin</replaceable>). The default value is "
+"<replaceable>PATH=/bin:/usr/bin</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ENV_TZ</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, it will be used to define the TZ environment variable when a user "
+"login. The value can be the name of a timezone preceded by <replaceable>TZ=</"
+"replaceable> (for example <replaceable>TZ=CST6CDT</replaceable>), or the "
+"full path to the file containing the timezone specification (for example "
+"<filename>/etc/tzname</filename>)."
+msgstr ""
+
+#. TODO: it can in fact be used to set any other variable
+#: su.1.xml:43(para) login.defs.5.xml:43(para) login.1.xml:43(para)
+msgid ""
+"If a full path is specified but the file does not exist or cannot be read, "
+"the default is to use <replaceable>TZ=CST6CDT</replaceable>."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#: chsh.1.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_STRING</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+#: chsh.1.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"The string used for prompting a password. The default is to use \"Password: "
+"\", or a translation of that string. If you set this variable, the prompt "
+"will no be translated."
+msgstr ""
+
+#: su.1.xml:39(para) login.defs.5.xml:39(para) login.1.xml:39(para)
+#: chsh.1.xml:39(para) chfn.1.xml:39(para)
+msgid ""
+"If the string contains <replaceable>%s</replaceable>, this will be replaced "
+"by the user's name."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MAIL_CHECK_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking and display of mailbox status upon login."
+msgstr ""
+
+#: su.1.xml:37(para) login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"You should disable it if the shell startup files already check for mail "
+"(\"mailx -e\" or equivalent)."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>QUOTAS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable setting of ulimit, umask, and niceness from passwd gecos field."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SULOG_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "If defined, all su activity is logged to this file."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SU_NAME</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"If defined, the command name to display when running \"su -\". For example, "
+"if this is defined as \"su\" then a \"ps\" will display the command is \"-su"
+"\". If not defined, then \"ps\" would display the name of the shell actually "
+"being run, e.g. something like \"-sh\"."
+msgstr ""
+
+#: su.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>SU_WHEEL_ONLY</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: su.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the user must be listed as a member of "
+"the first gid 0 group in <filename>/etc/group</filename> (called "
+"<replaceable>root</replaceable> on most Linux systems) to be able to "
+"<command>su</command> to uid 0 accounts. If the group doesn't exist or is "
+"empty, no one will be able to <command>su</command> to uid 0."
+msgstr ""
+
+#: su.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SU_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: su.1.xml:34(para) login.defs.5.xml:34(para)
+msgid ""
+"Enable \"syslog\" logging of <command>su</command> activity - in addition to "
+"sulog file logging."
+msgstr ""
+
+#: su.1.xml:363(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>sh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>"
+
+#: sg.1.xml:38(refentrytitle) sg.1.xml:43(refname) sg.1.xml:49(command)
+msgid "sg"
+msgstr "sg"
+
+#: sg.1.xml:44(refpurpose)
+msgid "execute command as different group ID"
+msgstr "kör kommando med annat grupp-id"
+
+#: sg.1.xml:50(arg) newgrp.1.xml:49(arg)
+msgid "-"
+msgstr "-"
+
+#: sg.1.xml:52(arg) expiry.1.xml:53(arg)
+msgid "-c"
+msgstr "-c"
+
+#: sg.1.xml:51(arg)
+msgid "group <placeholder-1/> command"
+msgstr "grupp <placeholder-1/> kommando"
+
+#: sg.1.xml:60(para)
+msgid ""
+"The <command>sg</command> command works similar to <command>newgrp</command> "
+"but accepts a command. The command will be executed with the <filename>/bin/"
+"sh</filename> shell. With most shells you may run <command>sg</command> "
+"from, you need to enclose multi-word commands in quotes. Another difference "
+"between <command>newgrp</command> and <command>sg</command> is that some "
+"shells treat <command>newgrp</command> specially, replacing themselves with "
+"a new instance of a shell that <command>newgrp</command> creates. This "
+"doesn't happen with <command>sg</command>, so upon exit from a <command>sg</"
+"command> command you are returned to your previous group ID."
+msgstr ""
+
+#: sg.1.xml:32(term) newgrp.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>SYSLOG_SG_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: sg.1.xml:34(para) newgrp.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable \"syslog\" logging of <command>sg</command> activity."
+msgstr ""
+
+#: sg.1.xml:119(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>login</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: shadow.5.xml:34(refentrytitle) shadow.5.xml:39(refname)
+#: shadow.3.xml:34(refentrytitle) shadow.3.xml:39(refname)
+#: pwck.8.xml:60(replaceable) pwck.8.xml:75(replaceable)
+#: grpck.8.xml:53(replaceable) grpck.8.xml:62(replaceable)
+msgid "shadow"
+msgstr "shadow"
+
+#: shadow.5.xml:40(refpurpose)
+#, fuzzy
+#| msgid "the password file"
+msgid "shadowed password file"
+msgstr "lösenordsfilen"
+
+#: shadow.5.xml:45(para)
+#, fuzzy
+#| msgid ""
+#| "<filename>/etc/gshadow</filename> contains the shadowed information for "
+#| "group accounts. It contains lines with the following colon-separated "
+#| "fields:"
+msgid ""
+"<filename>shadow</filename> is a file which contains the password "
+"information for the system's accounts and optional aging information."
+msgstr ""
+"<filename>/etc/gshadow</filename> innehåller skuggad gruppkontoinformation. "
+"Den innehåller rader med följande kolonseparerade fält:"
+
+#: shadow.5.xml:51(para) gshadow.5.xml:49(para)
+msgid ""
+"This file must not be readable by regular users if password security is to "
+"be maintained."
+msgstr ""
+"Denna fil får inte vara läsbar av vanliga användare om lösenordssäkerheten "
+"ska upprätthållas."
+
+#: shadow.5.xml:56(para)
+msgid ""
+"Each line of this file contains 9 fields, separated by colons (<quote>:</"
+"quote>), in the following order:"
+msgstr ""
+
+#: shadow.5.xml:63(emphasis) passwd.5.xml:53(para)
+msgid "login name"
+msgstr "inloggningsnamn"
+
+#: shadow.5.xml:65(para)
+msgid "It must be a valid account name, which exist on the system."
+msgstr ""
+
+#: shadow.5.xml:71(emphasis) gshadow.5.xml:68(emphasis)
+msgid "encrypted password"
+msgstr "krypterat lösenord"
+
+#: shadow.5.xml:73(para) gshadow.5.xml:70(para)
+msgid ""
+"Refer to <citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry> for details on how this string is interpreted."
+msgstr ""
+"Referera till <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> för detaljer om hur "
+"denna sträng tolkas."
+
+#: shadow.5.xml:78(para)
+#, fuzzy
+msgid ""
+"If the password field contains some string that is not a valid result of "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, for instance ! or *, the user will not be able to use a unix "
+"password to log in (but the user may log in the system by other means)."
+msgstr ""
+"Referera till <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> för detaljer om hur "
+"denna sträng tolkas."
+
+#: shadow.5.xml:85(para)
+msgid ""
+"This field may be empty, in which case no passwords are required to "
+"authenticate as the specified login name. However, some applications which "
+"read the <filename>/etc/shadow</filename> file may decide not to permit any "
+"access at all if the password field is empty."
+msgstr ""
+
+#: shadow.5.xml:92(para) gshadow.5.xml:92(para)
+msgid ""
+"A password field which starts with a exclamation mark means that the "
+"password is locked. The remaining characters on the line represent the "
+"password field before the password was locked."
+msgstr ""
+
+#: shadow.5.xml:102(emphasis)
+#, fuzzy
+#| msgid "days before password may be changed"
+msgid "date of last password change"
+msgstr "dagar innan lösenordet får ändras"
+
+#: shadow.5.xml:105(para)
+msgid ""
+"The date of the last password change, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:109(para)
+msgid ""
+"The value 0 has a special meaning, which is that the user should change her "
+"pasword the next time she will log in the system."
+msgstr ""
+
+#: shadow.5.xml:114(para)
+msgid "An empty field means that password aging features are disabled."
+msgstr ""
+
+#: shadow.5.xml:121(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "minimum password age"
+msgstr "Lösenordsändringar"
+
+#: shadow.5.xml:123(para)
+msgid ""
+"The minimum password age is the number of days the user will have to wait "
+"before she will be allowed to change her password again."
+msgstr ""
+
+#: shadow.5.xml:128(para)
+msgid "An empty field and value 0 mean that there are no minimum password age."
+msgstr ""
+
+#: shadow.5.xml:135(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "maximum password age"
+msgstr "Lösenordsändringar"
+
+#: shadow.5.xml:137(para)
+msgid ""
+"The maximum password age is the number of days after which the user will "
+"have to change her password."
+msgstr ""
+
+#: shadow.5.xml:141(para)
+msgid ""
+"After this number of days is elapsed, the password may still be valid. The "
+"user should be asked to change her password the next time she will log in."
+msgstr ""
+
+#: shadow.5.xml:146(para)
+msgid ""
+"An empty field means that there are no maximum password age, no password "
+"warning period, and no password inactivity period (see below)."
+msgstr ""
+
+#: shadow.5.xml:151(para)
+msgid ""
+"If the maximum password age is lower than the minimum password age, the user "
+"cannot change her password."
+msgstr ""
+
+#: shadow.5.xml:159(emphasis)
+#, fuzzy
+#| msgid "Password Changes"
+msgid "password warning period"
+msgstr "Lösenordsändringar"
+
+#: shadow.5.xml:162(para)
+#, fuzzy
+#| msgid ""
+#| "The number of days after a password has expired before the account will "
+#| "be disabled."
+msgid ""
+"The number of days before a password is going to expire (see the maximum "
+"password age above) during which the user should be warned."
+msgstr ""
+"Antalet dagar efter att ett lösenord har gått ut innan kontot kommer att "
+"inaktiveras."
+
+#: shadow.5.xml:167(para)
+msgid ""
+"An empty field and value 0 mean that there are no password warning period."
+msgstr ""
+
+#: shadow.5.xml:175(emphasis)
+msgid "password inactivity period"
+msgstr ""
+
+#: shadow.5.xml:178(para)
+msgid ""
+"The number of days after a password has expired (see the maximum password "
+"age above) during which the password should still be accepted (and the user "
+"should update her password during the next login)."
+msgstr ""
+
+#: shadow.5.xml:184(para)
+msgid ""
+"After expiration of the password and this expiration period is elapsed, no "
+"login is possible using the current user's password. The user should contact "
+"her administrator."
+msgstr ""
+
+#: shadow.5.xml:189(para)
+msgid ""
+"An empty field means that there are no enforcement of an inactivity period."
+msgstr ""
+
+#: shadow.5.xml:197(emphasis)
+#, fuzzy
+#| msgid "User account information."
+msgid "account expiration date"
+msgstr "Användarkontoinformation."
+
+#: shadow.5.xml:200(para)
+msgid ""
+"The date of expiration of the account, expressed as the number of days since "
+"Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:204(para)
+msgid ""
+"Note that an account expiration differs from a password expiration. In case "
+"of an acount expiration, the user shall not be allowed to login. In case of "
+"a password expiration, the user is not allowed to login using her password."
+msgstr ""
+
+#: shadow.5.xml:210(para)
+msgid "An empty field means that the account will never expire."
+msgstr ""
+
+#: shadow.5.xml:213(para)
+msgid ""
+"The value 0 should not be used as it is interpreted as either an account "
+"with no expiration, or as an expiration on Jan 1, 1970."
+msgstr ""
+
+#: shadow.5.xml:221(emphasis)
+#, fuzzy
+#| msgid "a reserved field"
+msgid "reserved field"
+msgstr "ett reserverat fält"
+
+#: shadow.5.xml:223(para)
+#, fuzzy
+#| msgid "sp_flag - reserved for future use"
+msgid "This field is reserved for future use."
+msgstr "sp_flag - reserverat för framtida användning"
+
+#: shadow.5.xml:245(filename)
+#, fuzzy
+#| msgid "/etc/shadow"
+msgid "/etc/shadow-"
+msgstr "/etc/shadow"
+
+#: shadow.5.xml:247(para)
+msgid "Backup file for /etc/shadow."
+msgstr ""
+
+#: shadow.5.xml:248(para) passwd.5.xml:134(para)
+msgid ""
+"Note that this file is used by the tools of the shadow toolsuite, but not by "
+"all user and password management tools."
+msgstr ""
+
+#: shadow.5.xml:259(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>"
+msgid ""
+"<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sulogin</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: shadow.3.xml:36(refmiscinfo)
+msgid "Library Calls"
+msgstr "Biblioteksanrop"
+
+#: shadow.3.xml:40(refname)
+msgid "getspnam"
+msgstr "getspnam"
+
+#: shadow.3.xml:41(refpurpose)
+msgid "encrypted password file routines"
+msgstr ""
+
+#: shadow.3.xml:45(title)
+msgid "SYNTAX"
+msgstr "SYNTAX"
+
+#: shadow.3.xml:47(emphasis)
+msgid "#include &lt;shadow.h&gt;"
+msgstr "#include &lt;shadow.h&gt;"
+
+#: shadow.3.xml:51(emphasis)
+msgid "struct spwd *getspent();"
+msgstr "struct spwd *getspent();"
+
+#: shadow.3.xml:55(emphasis)
+msgid "struct spwd *getspnam(char"
+msgstr "struct spwd *getspnam(char"
+
+#: shadow.3.xml:56(emphasis)
+msgid "*name"
+msgstr "*name"
+
+#: shadow.3.xml:56(emphasis) shadow.3.xml:69(emphasis)
+#: shadow.3.xml:74(emphasis) shadow.3.xml:80(emphasis)
+msgid ");"
+msgstr ");"
+
+#: shadow.3.xml:60(emphasis)
+msgid "void setspent();"
+msgstr "void setspent();"
+
+#: shadow.3.xml:64(emphasis)
+msgid "void endspent();"
+msgstr "void endspent();"
+
+#: shadow.3.xml:68(emphasis)
+msgid "struct spwd *fgetspent(FILE"
+msgstr "struct spwd *fgetspent(FILE"
+
+#: shadow.3.xml:69(emphasis) shadow.3.xml:80(emphasis)
+msgid "*fp"
+msgstr "*fp"
+
+#: shadow.3.xml:73(emphasis)
+msgid "struct spwd *sgetspent(char"
+msgstr "struct spwd *sgetspent(char"
+
+#: shadow.3.xml:74(emphasis)
+msgid "*cp"
+msgstr "*cp"
+
+#: shadow.3.xml:78(emphasis)
+msgid "int putspent(struct spwd"
+msgstr "int putspent(struct spwd"
+
+#: shadow.3.xml:79(emphasis)
+msgid "*p,"
+msgstr "*p,"
+
+#: shadow.3.xml:79(emphasis)
+msgid "FILE"
+msgstr "FIL"
+
+#: shadow.3.xml:84(emphasis)
+msgid "int lckpwdf();"
+msgstr "int lckpwdf();"
+
+#: shadow.3.xml:88(emphasis)
+msgid "int ulckpwdf();"
+msgstr "int ulckpwdf();"
+
+#: shadow.3.xml:94(para)
+msgid ""
+"<emphasis remap=\"I\">shadow</emphasis> manipulates the contents of the "
+"shadow password file, <filename>/etc/shadow</filename>. The structure in the "
+"<emphasis remap=\"I\">#include</emphasis> file is:"
+msgstr ""
+
+#: shadow.3.xml:99(programlisting)
+#, no-wrap
+msgid ""
+"struct spwd {\n"
+"      char\t\t*sp_namp; /* user login name */\n"
+"      char\t\t*sp_pwdp; /* encrypted password */\n"
+"      long int\t\tsp_lstchg; /* last password change */\n"
+"      long int\t\tsp_min; /* days until change allowed. */\n"
+"      long int\t\tsp_max; /* days before change required */\n"
+"      long int\t\tsp_warn; /* days warning for expiration */\n"
+"      long int\t\tsp_inact; /* days before account inactive */\n"
+"      long int\t\tsp_expire; /* date when account expires */\n"
+"      unsigned long int\tsp_flag; /* reserved for future use */\n"
+"}\n"
+"    "
+msgstr ""
+
+#: shadow.3.xml:111(para)
+msgid "The meanings of each field are:"
+msgstr "Betydelsen av varje fält är:"
+
+#: shadow.3.xml:114(para)
+msgid "sp_namp - pointer to null-terminated user name"
+msgstr ""
+
+#: shadow.3.xml:117(para)
+msgid "sp_pwdp - pointer to null-terminated password"
+msgstr ""
+
+#: shadow.3.xml:120(para)
+msgid "sp_lstchg - days since Jan 1, 1970 password was last changed"
+msgstr ""
+
+#: shadow.3.xml:123(para)
+msgid "sp_min - days before which password may not be changed"
+msgstr ""
+
+#: shadow.3.xml:126(para)
+msgid "sp_max - days after which password must be changed"
+msgstr ""
+
+#: shadow.3.xml:129(para)
+msgid ""
+"sp_warn - days before password is to expire that user is warned of pending "
+"password expiration"
+msgstr ""
+
+#: shadow.3.xml:134(para)
+msgid ""
+"sp_inact - days after password expires that account is considered inactive "
+"and disabled"
+msgstr ""
+
+#: shadow.3.xml:139(para)
+msgid "sp_expire - days since Jan 1, 1970 when account will be disabled"
+msgstr ""
+
+#: shadow.3.xml:142(para)
+msgid "sp_flag - reserved for future use"
+msgstr "sp_flag - reserverat för framtida användning"
+
+#: shadow.3.xml:150(para)
+msgid ""
+"<emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>, "
+"<emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis> each "
+"return a pointer to a <emphasis>struct spwd</emphasis>. <emphasis>getspent</"
+"emphasis> returns the next entry from the file, and <emphasis>fgetspent</"
+"emphasis> returns the next entry from the given stream, which is assumed to "
+"be a file of the proper format. <emphasis>sgetspent</emphasis> returns a "
+"pointer to a <emphasis>struct spwd</emphasis> using the provided string as "
+"input. <emphasis>getspnam</emphasis> searches from the current position in "
+"the file for an entry matching <emphasis>name</emphasis>."
+msgstr ""
+
+#: shadow.3.xml:163(para)
+msgid ""
+"<emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be used "
+"to begin and end, respectively, access to the shadow password file."
+msgstr ""
+
+#: shadow.3.xml:169(para)
+msgid ""
+"The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis> routines "
+"should be used to insure exclusive access to the <filename>/etc/shadow</"
+"filename> file. <emphasis>lckpwdf</emphasis> attempts to acquire a lock "
+"using <emphasis>pw_lock</emphasis> for up to 15 seconds. It continues by "
+"attempting to acquire a second lock using <emphasis>spw_lock</emphasis> for "
+"the remainder of the initial 15 seconds. Should either attempt fail after a "
+"total of 15 seconds, <emphasis>lckpwdf</emphasis> returns -1. When both "
+"locks are acquired 0 is returned."
+msgstr ""
+
+#: shadow.3.xml:184(para)
+msgid ""
+"Routines return NULL if no more entries are available or if an error occurs "
+"during processing. Routines which have <emphasis>int</emphasis> as the "
+"return value return 0 for success and -1 for failure."
+msgstr ""
+
+#: shadow.3.xml:194(para)
+msgid ""
+"These routines may only be used by the superuser as access to the shadow "
+"password file is restricted."
+msgstr ""
+
+#: shadow.3.xml:214(para)
+msgid ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>getpwent</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: pwconv.8.xml:42(refentrytitle) pwconv.8.xml:47(refname)
+#: pwconv.8.xml:56(command) login.defs.5.xml:388(term)
+msgid "pwconv"
+msgstr "pwconv"
+
+#: pwconv.8.xml:48(refname) pwconv.8.xml:59(command)
+msgid "pwunconv"
+msgstr "pwunconv"
+
+#: pwconv.8.xml:49(refname) pwconv.8.xml:62(command)
+#: login.defs.5.xml:302(term)
+msgid "grpconv"
+msgstr "grpconv"
+
+#: pwconv.8.xml:50(refname) pwconv.8.xml:65(command)
+#: login.defs.5.xml:308(term)
+msgid "grpunconv"
+msgstr "grpunconv"
+
+#: pwconv.8.xml:51(refpurpose)
+msgid "convert to and from shadow passwords and groups"
+msgstr "konvertera till och från skugglösenord och grupper"
+
+#: pwconv.8.xml:71(para)
+msgid ""
+"The <command>pwconv</command> command creates <emphasis remap=\"I\">shadow</"
+"emphasis> from <emphasis remap=\"I\">passwd</emphasis> and an optionally "
+"existing <emphasis remap=\"I\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:77(para)
+msgid ""
+"The <command>pwunconv</command> command creates <emphasis remap=\"I"
+"\">passwd</emphasis> from <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> and then removes <emphasis remap=\"I"
+"\">shadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:84(para)
+msgid ""
+"The <command>grpconv</command> command creates <emphasis remap=\"I"
+"\">gshadow</emphasis> from <emphasis remap=\"I\">group</emphasis> and an "
+"optionally existing <emphasis remap=\"I\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:90(para)
+msgid ""
+"The <command>grpunconv</command> command creates <emphasis remap=\"I"
+"\">group</emphasis> from <emphasis remap=\"I\">group</emphasis> and "
+"<emphasis remap=\"I\">gshadow</emphasis> and then removes <emphasis remap=\"I"
+"\">gshadow</emphasis>."
+msgstr ""
+
+#: pwconv.8.xml:97(para)
+msgid ""
+"These four programs all operate on the normal and shadow password and group "
+"files: <filename>/etc/passwd</filename>, <filename>/etc/group</filename>, "
+"<filename>/etc/shadow</filename>, and <filename>/etc/gshadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:104(para)
+msgid ""
+"Each program acquires the necessary locks before conversion. "
+"<command>pwconv</command> and <command>grpconv</command> are similar. First, "
+"entries in the shadowed file which don't exist in the main file are removed. "
+"Then, shadowed entries which don't have `x' as the password in the main file "
+"are updated. Any missing shadowed entries are added. Finally, passwords in "
+"the main file are replaced with `x'. These programs can be used for initial "
+"conversion as well to update the shadowed file if the main file is edited by "
+"hand."
+msgstr ""
+
+#: pwconv.8.xml:115(para)
+msgid ""
+"<command>pwconv</command> will use the values of <emphasis remap=\"I"
+"\">PASS_MIN_DAYS</emphasis>, <emphasis remap=\"I\">PASS_MAX_DAYS</emphasis>, "
+"and <emphasis remap=\"I\">PASS_WARN_AGE</emphasis> from <filename>/etc/login."
+"defs</filename> when adding new entries to <filename>/etc/shadow</filename>."
+msgstr ""
+
+#: pwconv.8.xml:124(para)
+msgid ""
+"Likewise <command>pwunconv</command> and <command>grpunconv</command> are "
+"similar. Passwords in the main file are updated from the shadowed file. "
+"Entries which exist in the main file but not in the shadowed file are left "
+"alone. Finally, the shadowed file is removed. Some password aging "
+"information is lost by <command>pwunconv</command>. It will convert what it "
+"can."
+msgstr ""
+
+#: pwconv.8.xml:136(para)
+msgid ""
+"Errors in the password or group files (such as invalid or duplicate entries) "
+"may cause these programs to loop forever or fail in other strange ways. "
+"Please run <command>pwck</command> and <command>grpck</command> to correct "
+"any such errors before converting to or from shadow passwords or groups."
+msgstr ""
+
+#: pwconv.8.xml:147(para)
+msgid ""
+"The following configuration variable in <filename>/etc/login.defs</filename> "
+"changes the behavior of <command>grpconv</command> and <command>grpunconv</"
+"command>:"
+msgstr ""
+
+#: pwconv.8.xml:155(para)
+msgid ""
+"The following configuration variables in <filename>/etc/login.defs</"
+"filename> change the behavior of <command>pwconv</command>:"
+msgstr ""
+
+#: pwconv.8.xml:181(para)
+msgid ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>."
+
+#: pwck.8.xml:40(refentrytitle) pwck.8.xml:45(refname) pwck.8.xml:51(command)
+#: pwck.8.xml:66(command) login.defs.5.xml:380(term)
+msgid "pwck"
+msgstr "pwck"
+
+#: pwck.8.xml:46(refpurpose)
+msgid "verify integrity of password files"
+msgstr "validera integriteten för lösenordsfiler"
+
+#: pwck.8.xml:52(arg) pwck.8.xml:67(arg) pwck.8.xml:171(option)
+msgid "-q"
+msgstr "-q"
+
+#: pwck.8.xml:53(arg) pwck.8.xml:192(option) grpck.8.xml:58(arg)
+#: grpck.8.xml:149(option)
+msgid "-s"
+msgstr "-s"
+
+#: pwck.8.xml:56(replaceable) pwck.8.xml:71(replaceable)
+#: passwd.5.xml:34(refentrytitle) passwd.5.xml:39(refname)
+#: passwd.1.xml:44(refentrytitle) passwd.1.xml:49(refname)
+#: passwd.1.xml:55(command) login.defs.5.xml:369(term)
+msgid "passwd"
+msgstr "passwd"
+
+#: pwck.8.xml:68(arg) pwck.8.xml:182(option) login.1.xml:222(option)
+#: grpck.8.xml:49(arg) grpck.8.xml:139(option)
+msgid "-r"
+msgstr "-r"
+
+#: pwck.8.xml:84(para)
+msgid ""
+"The <command>pwck</command> command verifies the integrity of the users and "
+"authentication information. It checks that all entries in <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename> have the proper "
+"format and contain valid data. The user is prompted to delete entries that "
+"are improperly formatted or which have other uncorrectable errors."
+msgstr ""
+
+#: pwck.8.xml:93(para) grpck.8.xml:80(para)
+msgid "Checks are made to verify that each entry has:"
+msgstr "Kontroller görs för att validera att varje post har:"
+
+#: pwck.8.xml:96(para) grpck.8.xml:84(para)
+msgid "the correct number of fields"
+msgstr "korrekt antal fält"
+
+#: pwck.8.xml:99(para)
+#, fuzzy
+#| msgid "a unique user name"
+msgid "a unique and valid user name"
+msgstr "ett unikt användarnamn"
+
+#: pwck.8.xml:102(para)
+msgid "a valid user and group identifier"
+msgstr "en giltig identifierare för användare och grupp"
+
+#: pwck.8.xml:105(para)
+msgid "a valid primary group"
+msgstr "en giltig primär grupp"
+
+#: pwck.8.xml:108(para)
+msgid "a valid home directory"
+msgstr "en giltig hemkatalog"
+
+#: pwck.8.xml:111(para)
+msgid "a valid login shell"
+msgstr "ett giltigt inloggningsskal"
+
+#: pwck.8.xml:115(para)
+msgid ""
+"<filename>shadow</filename> checks are enabled when a second file parameter "
+"is specified or when <filename>/etc/shadow</filename> exists on the system."
+msgstr ""
+
+#: pwck.8.xml:120(para)
+msgid "These checks are the following:"
+msgstr ""
+
+#: pwck.8.xml:125(para)
+msgid ""
+"every passwd entry has a matching shadow entry, and every shadow entry has a "
+"matching passwd entry"
+msgstr ""
+
+#: pwck.8.xml:131(para)
+msgid "passwords are specified in the shadowed file"
+msgstr ""
+
+#: pwck.8.xml:134(para)
+#, fuzzy
+#| msgid "the correct number of fields"
+msgid "shadow entries have the correct number of fields"
+msgstr "korrekt antal fält"
+
+#: pwck.8.xml:137(para)
+msgid "shadow entries are unique in shadow"
+msgstr ""
+
+#: pwck.8.xml:140(para)
+#, fuzzy
+#| msgid "days before password may be changed"
+msgid "the last password changes are not in the future"
+msgstr "dagar innan lösenordet får ändras"
+
+#: pwck.8.xml:144(para)
+msgid ""
+"The checks for correct number of fields and unique user name are fatal. If "
+"the entry has the wrong number of fields, the user will be prompted to "
+"delete the entire line. If the user does not answer affirmatively, all "
+"further checks are bypassed. An entry with a duplicated user name is "
+"prompted for deletion, but the remaining checks will still be made. All "
+"other errors are warning and the user is encouraged to run the "
+"<command>usermod</command> command to correct the error."
+msgstr ""
+
+#: pwck.8.xml:155(para)
+msgid ""
+"The commands which operate on the <filename>/etc/passwd</filename> file are "
+"not able to alter corrupted or duplicated entries. <command>pwck</command> "
+"should be used in those circumstances to remove the offending entry."
+msgstr ""
+
+#: pwck.8.xml:165(para)
+msgid "The options which apply to the <command>pwck</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>pwck</command> är:"
+
+#: pwck.8.xml:174(para)
+msgid ""
+"Report errors only. The warnings which do not require any action from the "
+"user won't be displayed."
+msgstr ""
+
+#: pwck.8.xml:185(para)
+msgid "Execute the <command>pwck</command> command in read-only mode."
+msgstr "Starta kommandot <command>pwck</command> i skrivskyddat läge."
+
+#: pwck.8.xml:195(para)
+msgid ""
+"Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/shadow</"
+"filename> by UID."
+msgstr ""
+"Sorterar poster i <filename>/etc/passwd</filename> och <filename>/etc/"
+"shadow</filename> efter UID."
+
+#: pwck.8.xml:203(para)
+msgid ""
+"By default, <command>pwck</command> operates on the files <filename>/etc/"
+"passwd</filename> and <filename>/etc/shadow</filename>. The user may select "
+"alternate files with the <emphasis remap=\"I\">passwd</emphasis> and "
+"<emphasis remap=\"I\">shadow</emphasis> parameters."
+msgstr ""
+
+#: pwck.8.xml:270(para)
+msgid "one or more bad password entries"
+msgstr "en eller flera felaktiga lösenordsposter"
+
+#: pwck.8.xml:276(para)
+msgid "can't open password files"
+msgstr "kan inte öppna lösenordsfiler"
+
+#: pwck.8.xml:282(para)
+msgid "can't lock password files"
+msgstr "kan inte låsa lösenordsfiler"
+
+#: pwck.8.xml:288(para)
+msgid "can't update password files"
+msgstr "kan inte uppdatera lösenordsfiler"
+
+#: pwck.8.xml:294(para)
+#, fuzzy
+#| msgid "can't open password files"
+msgid "can't sort password files"
+msgstr "kan inte öppna lösenordsfiler"
+
+#: pwck.8.xml:252(para)
+msgid ""
+"The <command>pwck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>pwck</command> avslutas med följande värden: <placeholder-"
+"1/>"
+
+#: pwck.8.xml:303(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: porttime.5.xml:34(refentrytitle) porttime.5.xml:39(refname)
+msgid "porttime"
+msgstr "porttime"
+
+#: porttime.5.xml:40(refpurpose)
+msgid "port access time file"
+msgstr ""
+
+#: porttime.5.xml:45(para)
+msgid ""
+"<emphasis remap=\"I\">porttime</emphasis> contains a list of tty devices, "
+"user names, and permitted login times."
+msgstr ""
+"<emphasis remap=\"I\">porttime</emphasis> innehåller en lista av tty-"
+"enheter, användarnamn och tillåtna inloggningstider."
+
+#: porttime.5.xml:50(para)
+msgid ""
+"Each entry consists of three colon separated fields. The first field is a "
+"comma separated list of tty devices, or an asterisk to indicate that all tty "
+"devices are matched by this entry. The second field is a comma separated "
+"list of user names, or an asterisk to indicated that all user names are "
+"matched by this entry. The third field is a comma separated list of "
+"permitted access times."
+msgstr ""
+
+#: porttime.5.xml:59(para)
+msgid ""
+"Each access time entry consists of zero or more days of the week, "
+"abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>, <emphasis>Tu</"
+"emphasis>, <emphasis>We</emphasis>, <emphasis>Th</emphasis>, <emphasis>Fr</"
+"emphasis>, and <emphasis>Sa</emphasis>, followed by a pair of times "
+"separated by a hyphen. The abbreviation <emphasis>Wk</emphasis> may be used "
+"to represent Monday thru Friday, and <emphasis>Al</emphasis> may be used to "
+"indicate every day. If no days are given, <emphasis>Al</emphasis> is assumed."
+msgstr ""
+
+#: porttime.5.xml:73(title)
+msgid "EXAMPLES"
+msgstr "EXEMPEL"
+
+#: porttime.5.xml:74(para)
+msgid ""
+"The following entry allows access to user <emphasis remap=\"B\">jfh</"
+"emphasis> on every port during weekdays from 9am to 5pm."
+msgstr ""
+"Följande post tillåter åtkomst för användaren <emphasis remap=\"B\">jfh</"
+"emphasis> på varje port under veckodagar från 09.00 till 17.00."
+
+#: porttime.5.xml:80(para)
+msgid "*:jfh:Wk0900-1700"
+msgstr "*:jfh:Wk0900-1700"
+
+#: porttime.5.xml:82(para)
+msgid ""
+"The following entries allow access only to the users <emphasis>root</"
+"emphasis> and <emphasis>oper</emphasis> on <filename>/dev/console</filename> "
+"at any time. This illustrates how the <filename>/etc/porttime</filename> "
+"file is an ordered list of access times. Any other user would match the "
+"second entry which does not permit access at any time."
+msgstr ""
+"De följande posterna tillåter åtkomst endast till användarna <emphasis>root</"
+"emphasis> och <emphasis>oper</emphasis> på <filename>/dev/console</filename> "
+"när som helst. Detta illustrerar hur filen <filename>/etc/porttime</"
+"filename> är en ordnad lista för åtkomsttider. Alla andra användare skulle "
+"matcha den andra poster, vilken inte tillåter någon åtkomst oavsett tid."
+
+#: porttime.5.xml:91(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"      console:root,oper:Al0000-2400\n"
+"      console:*:\n"
+"    "
+msgstr ""
+"\n"
+"      console:root,oper:Al0000-2400\n"
+"      console:*:\n"
+"    "
+
+#: porttime.5.xml:96(para)
+msgid ""
+"The following entry allows access for the user <emphasis>games</emphasis> on "
+"any port during non-working hours."
+msgstr ""
+"Fölajnde post tillåter åtkomst för användaren <emphasis>games</emphasis> på "
+"valfri port men inte under arbetstid."
+
+#: porttime.5.xml:101(para)
+msgid "*:games:Wk1700-0900,SaSu0000-2400"
+msgstr "*:games:Wk1700-0900,SaSu0000-2400"
+
+#: porttime.5.xml:108(filename) logoutd.8.xml:67(filename)
+msgid "/etc/porttime"
+msgstr "/etc/porttime"
+
+#: porttime.5.xml:110(para) logoutd.8.xml:69(para)
+msgid "File containing port access."
+msgstr "Fil som innehåller portåtkomst"
+
+#: porttime.5.xml:118(para) login.access.5.xml:109(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+
+#: passwd.5.xml:40(refpurpose)
+msgid "the password file"
+msgstr "lösenordsfilen"
+
+#: passwd.5.xml:45(para)
+msgid ""
+"<filename>/etc/passwd</filename> contains one line for each user account, "
+"with seven fields delimited by colons (<quote>:</quote>). These fields are:"
+msgstr ""
+"<filename>/etc/passwd</filename> innehåller en rad för varje användarkonto "
+"men sju fält separerade med kolontecken (<quote>:</quote>). Dessa fält är:"
+
+#: passwd.5.xml:56(para)
+msgid "optional encrypted password"
+msgstr "valfritt krypterat lösenord"
+
+#: passwd.5.xml:59(para)
+msgid "numerical user ID"
+msgstr "numeriskt användar-id"
+
+#: passwd.5.xml:62(para)
+msgid "numerical group ID"
+msgstr "numeriskt grupp-id"
+
+#: passwd.5.xml:65(para)
+msgid "user name or comment field"
+msgstr "användarnamn eller kommentarsfält"
+
+#: passwd.5.xml:68(para)
+msgid "user home directory"
+msgstr "användarens hemkatalog"
+
+#: passwd.5.xml:71(para)
+msgid "optional user command interpreter"
+msgstr ""
+
+#: passwd.5.xml:75(para)
+msgid ""
+"The encrypted password field may be blank, in which case no password is "
+"required to authenticate as the specified login name. However, some "
+"applications which read the <filename>/etc/passwd</filename> file may decide "
+"not to permit <emphasis>any</emphasis> access at all if the "
+"<emphasis>password</emphasis> field is blank. If the <emphasis>password</"
+"emphasis> field is a lower-case <quote>x</quote>, then the encrypted "
+"password is actually stored in the <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry> file instead; there "
+"<emphasis>must</emphasis> be a corresponding line in the <filename>/etc/"
+"shadow</filename> file, or else the user account is invalid. If the "
+"<emphasis>password</emphasis> field is any other string, then it will be "
+"treated as an encrypted password, as specified by "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:94(para)
+msgid ""
+"The comment field is used by various system utilities, such as "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+
+#: passwd.5.xml:100(para)
+msgid ""
+"The home directory field provides the name of the initial working directory. "
+"The <command>login</command> program uses this information to set the value "
+"of the <envar>$HOME</envar> environmental variable."
+msgstr ""
+
+#: passwd.5.xml:106(para)
+msgid ""
+"The command interpreter field provides the name of the user's command "
+"language interpreter, or the name of the initial program to execute. The "
+"<command>login</command> program uses this information to set the value of "
+"the <envar>$SHELL</envar> environmental variable. If this field is empty, it "
+"defaults to the value <filename>/bin/sh</filename>."
+msgstr ""
+
+#: passwd.5.xml:127(para)
+msgid "optional encrypted password file"
+msgstr ""
+
+#: passwd.5.xml:131(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/passwd-"
+msgstr "/etc/passwd"
+
+#: passwd.5.xml:133(para)
+msgid "Backup file for /etc/passwd."
+msgstr ""
+
+#: passwd.5.xml:145(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>chsh</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>crypt</"
+#| "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getent</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pwunconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: passwd.1.xml:50(refpurpose)
+msgid "change user password"
+msgstr "ändra användarlösenord"
+
+#: passwd.1.xml:67(para)
+#, fuzzy
+msgid ""
+"The <command>passwd</command> command changes passwords for user accounts. A "
+"normal user may only change the password for his/her own account, while the "
+"superuser may change the password for any account. <command>passwd</command> "
+"also changes the account or associated password validity period."
+msgstr ""
+"<command>passwd</command> ändrar lösenord för användarkonton. En vanlig "
+"användare kan endast ändra lösenordet för sitt egna konto men "
+"superanvändaren kan ändra lösenord för alla konton. <command>passwd</"
+"command> ändrar även kontoinformation, såsom det fullständiga namnet för "
+"användaren, användarens inloggningsskal eller hans/hennes utgångsdatum för "
+"lösenordet och intervall."
+
+#: passwd.1.xml:76(title)
+msgid "Password Changes"
+msgstr "Lösenordsändringar"
+
+#: passwd.1.xml:77(para)
+#, fuzzy
+msgid ""
+"The user is first prompted for his/her old password, if one is present. This "
+"password is then encrypted and compared against the stored password. The "
+"user has only one chance to enter the correct password. The superuser is "
+"permitted to bypass this step so that forgotten passwords may be changed."
+msgstr ""
+"Användaren frågas först efter hans/hennes gamla lösenord, om det finns "
+"något. Detta lösenord krypteras sedan och jämförs mot det lagrade "
+"lösenordet. Användaren har endast en chans att ange det korrekta lösenordet. "
+"Superanvändaren tillåts kringgå detta steg så att bortglömda lösenord kan "
+"ändras."
+
+#: passwd.1.xml:85(para)
+msgid ""
+"After the password has been entered, password aging information is checked "
+"to see if the user is permitted to change the password at this time. If not, "
+"<command>passwd</command> refuses to change the password and exits."
+msgstr ""
+"Efter att lösenordet har matats in kontrolleras lösenordets "
+"åldringsinformation för att se om användaren tillåts att ändra lösenord för "
+"tillfället. Om inte, nekar <command>passwd</command> att ändra lösenordet "
+"och avslutas."
+
+#: passwd.1.xml:92(para)
+msgid ""
+"The user is then prompted twice for a replacement password. The second entry "
+"is compared against the first and both are required to match in order for "
+"the password to be changed."
+msgstr ""
+"Användaren frågas sedan två gånger efter ett ersättande lösenord. Den andra "
+"inmatningen jämförs mot den första och båda måste stämma överens för att "
+"lösenordet ska ändras."
+
+#: passwd.1.xml:98(para)
+msgid ""
+"Then, the password is tested for complexity. As a general guideline, "
+"passwords should consist of 6 to 8 characters including one or more "
+"characters from each of the following sets:"
+msgstr ""
+"Sedan testas lösenordet för sin komplexitet. Som en allmän riktlinje bör "
+"lösenord innehålla 6 till 8 tecken och inkluderas ett eller flera tecken "
+"från var och en av följande punkter:"
+
+#: passwd.1.xml:106(para)
+msgid "lower case alphabetics"
+msgstr "gemena bokstäver ur alfabetet"
+
+#: passwd.1.xml:109(para)
+msgid "digits 0 thru 9"
+msgstr "siffrorna 0 till 9"
+
+#: passwd.1.xml:112(para)
+msgid "punctuation marks"
+msgstr "skiljetecken"
+
+#: passwd.1.xml:116(para)
+msgid ""
+"Care must be taken not to include the system default erase or kill "
+"characters. <command>passwd</command> will reject any password which is not "
+"suitably complex."
+msgstr ""
+"Tänk på att inte inkludera systemets standardtecken för radering eller döda. "
+"<command>passwd</command> kommer att neka alla lösenord som inte har lämplig "
+"komplexitet."
+
+#: passwd.1.xml:125(title)
+msgid "Hints for user passwords"
+msgstr "Tips för användarlösenord"
+
+#: passwd.1.xml:126(para)
+#, fuzzy
+#| msgid ""
+#| "The security of a password depends upon the strength of the encryption "
+#| "algorithm and the size of the key space. The <emphasis>UNIX</emphasis> "
+#| "System encryption method is based on the NBS DES algorithm and is very "
+#| "secure. The size of the key space depends upon the randomness of the "
+#| "password which is selected."
+msgid ""
+"The security of a password depends upon the strength of the encryption "
+"algorithm and the size of the key space. The legacy <emphasis>UNIX</"
+"emphasis> System encryption method is based on the NBS DES algorithm. More "
+"recent methods are now recommended (see <option>ENCRYPT_METHOD</option>). "
+"The size of the key space depends upon the randomness of the password which "
+"is selected."
+msgstr ""
+"Säkerhet i ett lösenord beror på styrkan på krypteringsalgoritmen och "
+"nyckellängden. Krypteringsmetoden för <emphasis>UNIX-system</emphasis> är "
+"baserad på NBS DES-algoritmen och är mycket säker. Längden på nyckeln är "
+"beroende på slumpmässigheten för det valda lösenordet."
+
+#: passwd.1.xml:135(para)
+msgid ""
+"Compromises in password security normally result from careless password "
+"selection or handling. For this reason, you should not select a password "
+"which appears in a dictionary or which must be written down. The password "
+"should also not be a proper name, your license number, birth date, or street "
+"address. Any of these may be used as guesses to violate system security."
+msgstr ""
+"Problem i lösenordssäkerheten brukar normalt komma från slarvigt valda "
+"lösenord eller hantering. Av denna anledning bör du inte välja ett lösenord "
+"som finns i en ordbok eller som måste skrivas ner. Lösenordet bör heller "
+"inte vara ett korrekt namn, ditt personnummer, födelsedatum eller "
+"gatuadress. Dessa kan användas som gissningar för att ta sig in i systemet."
+
+#: passwd.1.xml:144(para)
+msgid ""
+"You can find advices on how to choose a strong password on http://en."
+"wikipedia.org/wiki/Password_strength"
+msgstr ""
+
+#: passwd.1.xml:153(para)
+msgid "The options which apply to the <command>passwd</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>passwd</command> är:"
+
+#: passwd.1.xml:158(term) faillog.8.xml:71(term)
+msgid "<option>-a</option>, <option>--all</option>"
+msgstr "<option>-a</option>, <option>--all</option>"
+
+#: passwd.1.xml:162(para)
+msgid ""
+"This option can be used only with <option>-S</option> and causes show status "
+"for all users."
+msgstr ""
+"Denna flagga kan endast användas med <option>-S</option> och gör att status "
+"visas för alla användare."
+
+#: passwd.1.xml:169(term)
+msgid "<option>-d</option>, <option>--delete</option>"
+msgstr "<option>-d</option>, <option>--delete</option>"
+
+#: passwd.1.xml:173(para)
+msgid ""
+"Delete a user's password (make it empty). This is a quick way to disable a "
+"password for an account. It will set the named account passwordless."
+msgstr ""
+"Ta bort en användares lösenord (gör det blankt). Detta är ett snabbt sätt "
+"att inaktivera ett lösenord för ett konto. Det kommer att ta bort det "
+"angivna kontots lösenord."
+
+#: passwd.1.xml:181(term)
+msgid "<option>-e</option>, <option>--expire</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+#: passwd.1.xml:185(para)
+msgid ""
+"Immediately expire an account's password. This in effect can force a user to "
+"change his/her password at the user's next login."
+msgstr ""
+"Lösenordet för ett konto sätts omedelbart som utgånget. Detta kan tvinga en "
+"användare att ändra sitt lösenord vid nästa inloggningsförsök."
+
+#: passwd.1.xml:198(term)
+msgid ""
+"<option>-i</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-i</option>, <option>--inactive</option><replaceable>INAKTIV</"
+"replaceable>"
+
+#: passwd.1.xml:202(para)
+msgid ""
+"This option is used to disable an account after the password has been "
+"expired for a number of days. After a user account has had an expired "
+"password for <replaceable>INACTIVE</replaceable> days, the user may no "
+"longer sign on to the account."
+msgstr ""
+"Denna flagga används för att inaktivera ett konto efter att lösenordet har "
+"varit utgånget i ett antal dagar. Efter att ett användarkonto har haft ett "
+"utgånget lösenord i <replaceable>INAKTIV</replaceable> dagar får användaren "
+"inte längre logga in med detta konto."
+
+#: passwd.1.xml:211(term)
+msgid "<option>-k</option>, <option>--keep-tokens</option>"
+msgstr "<option>-k</option>, <option>--keep-tokens</option>"
+
+#: passwd.1.xml:215(para)
+#, fuzzy
+msgid ""
+"Indicate password change should be performed only for expired authentication "
+"tokens (passwords). The user wishes to keep their non-expired tokens as "
+"before."
+msgstr ""
+"Indikera lösenordsändring bör endast genomföras för utgångna "
+"autentiseringslösenord. Användaren önskar behålla sitt icke-utgångna "
+"lösenord som tidigare."
+
+#: passwd.1.xml:223(term)
+msgid "<option>-l</option>, <option>--lock</option>"
+msgstr "<option>-l</option>, <option>--lock</option>"
+
+#: passwd.1.xml:227(para)
+#, fuzzy
+msgid ""
+"Lock the password of the named account. This option disables a password by "
+"changing it to a value which matches no possible encrypted value (it adds a "
+"´!´ at the beginning of the password)."
+msgstr ""
+"Lås angivet konto. Denna flagga inaktiverar ett konto genom att ändra "
+"lösenordet till ett värde som inte matchar något möjligt krypterat värde."
+
+#: passwd.1.xml:233(para)
+msgid ""
+"Note that this does not disable the account. The user may still be able to "
+"login using another authentication token (e.g. an SSH key). To disable the "
+"account, administrators should use <command>usermod --expiredate 1</command> "
+"(this set the account's expire date to Jan 2, 1970)."
+msgstr ""
+
+#: passwd.1.xml:240(para)
+msgid "Users with a locked password are not allowed to change their password."
+msgstr ""
+
+#: passwd.1.xml:247(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-n</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAGAR</"
+"replaceable>"
+
+#: passwd.1.xml:251(para) chage.1.xml:142(para)
+msgid ""
+"Set the minimum number of days between password changes to "
+"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
+"indicates that the user may change his/her password at any time."
+msgstr ""
+"Sätter minimalt antal dagar mellan lösenordsändringar till "
+"<replaceable>MIN_DAGAR</replaceable>. Ett nollvärde för detta fält betyder "
+"att användaren kan ändra sitt lösenord när som helst."
+
+#: passwd.1.xml:269(term)
+msgid ""
+"<option>-r</option>, <option>--repository</option><replaceable>REPOSITORY</"
+"replaceable>"
+msgstr ""
+"<option>-r</option>, <option>--repository</option><replaceable>FÖRRÅD</"
+"replaceable>"
+
+#: passwd.1.xml:273(para)
+#, fuzzy
+msgid "change password in <replaceable>REPOSITORY</replaceable> repository"
+msgstr "ändra lösenord i förrådet <replaceable>FÖRRÅD</replaceable>"
+
+#: passwd.1.xml:279(term)
+msgid "<option>-S</option>, <option>--status</option>"
+msgstr "<option>-S</option>, <option>--status</option>"
+
+#: passwd.1.xml:283(para)
+#, fuzzy
+#| msgid ""
+#| "Display account status information. The status information consists of 7 "
+#| "fields. The first field is the user's login name. The second field "
+#| "indicates if the user account is locked (L), has no password (NP), or has "
+#| "a usable password (P). The third field gives the date of the last "
+#| "password change. The next four fields are the minimum age, maximum age, "
+#| "warning period, and inactivity period for the password. These ages are "
+#| "expressed in days."
+msgid ""
+"Display account status information. The status information consists of 7 "
+"fields. The first field is the user's login name. The second field indicates "
+"if the user account has a locked password (L), has no password (NP), or has "
+"a usable password (P). The third field gives the date of the last password "
+"change. The next four fields are the minimum age, maximum age, warning "
+"period, and inactivity period for the password. These ages are expressed in "
+"days."
+msgstr ""
+"Visa statusinformation för konto. Statusinformationen innehåller 7 fält. "
+"Första fältet är användarens inloggningsnamn. Det andra fältet indikerar om "
+"användarkontot är låst (L), saknar lösenord (NP) eller har ett användbart "
+"lösenord (P). Det tredje fältet anger datumet för senaste "
+"lösenordsändringen. De nästa fyra fälten är minimal ålder, maximal ålder, "
+"varningsperiod och inaktivitetsperiod för lösenordet. Dessa åldrar anges i "
+"dagar."
+
+#: passwd.1.xml:297(term)
+msgid "<option>-u</option>, <option>--unlock</option>"
+msgstr "<option>-u</option>, <option>--unlock</option>"
+
+#: passwd.1.xml:301(para)
+#, fuzzy
+msgid ""
+"Unlock the password of the named account. This option re-enables a password "
+"by changing the password back to its previous value (to the value before "
+"using the <option>-l</option> option)."
+msgstr ""
+"Lås upp angivet konto. Denna flagga återaktiverar ett konto genom att ändra "
+"tillbaka lösenordet till dess tidigare värde (till värdet före användning av "
+"flaggan <option>-l</option>)."
+
+#: passwd.1.xml:310(term)
+msgid ""
+"<option>-w</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-w</option>, <option>--warndays</option><replaceable>VARN_DAGAR</"
+"replaceable>"
+
+#: passwd.1.xml:314(para)
+msgid ""
+"Set the number of days of warning before a password change is required. The "
+"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
+"the password expiring that a user will be warned that his/her password is "
+"about to expire."
+msgstr ""
+"Sätter antalet dagar för varning före ett lösenord behöver ändras. Flaggan "
+"<replaceable>VARN_DAGAR</replaceable> är antalet dagar före användaren "
+"varnas om att lösenordet är på väg att bli utgånget."
+
+#: passwd.1.xml:323(term)
+msgid ""
+"<option>-x</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-x</option>, <option>--maxdays</option><replaceable>MAX_DAGAR</"
+"replaceable>"
+
+#: passwd.1.xml:327(para)
+msgid ""
+"Set the maximum number of days a password remains valid. After "
+"<replaceable>MAX_DAYS</replaceable>, the password is required to be changed."
+msgstr ""
+"Sätter maximalt antal dagar som ett lösenord ska vara giltigt. Efter "
+"<replaceable>MAX_DAGAR</replaceable> krävs det att lösenordet ändras."
+
+#: passwd.1.xml:339(para)
+#, fuzzy
+#| msgid ""
+#| "Not all options may be supported. Password complexity checking may vary "
+#| "from site to site. The user is urged to select a password as complex as "
+#| "he or she feels comfortable with. Users may not be able to change their "
+#| "password on a system if NIS is enabled and they are not logged into the "
+#| "NIS server."
+msgid ""
+"Password complexity checking may vary from site to site. The user is urged "
+"to select a password as complex as he or she feels comfortable with."
+msgstr ""
+"Inte alla flaggor kanske stöds. Kontroll av lösenordskomplexiteten kan "
+"variera mellan olika system. Användare rekommenderas att välja ett lösenord "
+"som är så komplext som han eller hon känner sig komfortabel med. Användare "
+"kanske inte kan ändra sina lösenord på ett system om NIS är aktiverat och de "
+"inte är inloggade mot NIS-servern."
+
+#: passwd.1.xml:344(para)
+msgid ""
+"Users may not be able to change their password on a system if NIS is enabled "
+"and they are not logged into the NIS server."
+msgstr ""
+
+#: passwd.1.xml:349(para)
+msgid ""
+"<command>passwd</command> uses PAM to authenticate users and to change their "
+"passwords."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>ENCRYPT_METHOD</option> (string)"
+msgstr ""
+
+#: passwd.1.xml:32(para) newusers.8.xml:32(para) login.defs.5.xml:32(para)
+#: gpasswd.1.xml:32(para) chpasswd.8.xml:32(para) chgpasswd.8.xml:32(para)
+msgid ""
+"This defines the system default encryption algorithm for encrypting "
+"passwords (if no algorithm are specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid "<replaceable>DES</replaceable> (default)"
+msgstr ""
+
+#: passwd.1.xml:43(replaceable) newusers.8.xml:43(replaceable)
+#: login.defs.5.xml:43(replaceable) gpasswd.1.xml:43(replaceable)
+#: chpasswd.8.xml:43(replaceable) chgpasswd.8.xml:43(replaceable)
+msgid "MD5"
+msgstr ""
+
+#: passwd.1.xml:46(replaceable) newusers.8.xml:46(replaceable)
+#: login.defs.5.xml:46(replaceable) gpasswd.1.xml:46(replaceable)
+#: chpasswd.8.xml:46(replaceable) chgpasswd.8.xml:46(replaceable)
+msgid "SHA256"
+msgstr ""
+
+#: passwd.1.xml:49(replaceable) newusers.8.xml:49(replaceable)
+#: login.defs.5.xml:49(replaceable) gpasswd.1.xml:49(replaceable)
+#: chpasswd.8.xml:49(replaceable) chgpasswd.8.xml:49(replaceable)
+msgid "SHA512"
+msgstr ""
+
+#: passwd.1.xml:36(para) newusers.8.xml:36(para) login.defs.5.xml:36(para)
+#: gpasswd.1.xml:36(para) chpasswd.8.xml:36(para) chgpasswd.8.xml:36(para)
+msgid "It can take one of these values: <placeholder-1/>"
+msgstr ""
+
+#: passwd.1.xml:53(para) newusers.8.xml:53(para) login.defs.5.xml:53(para)
+#: gpasswd.1.xml:53(para) chpasswd.8.xml:53(para) chgpasswd.8.xml:53(para)
+msgid ""
+"Note: this parameter overrides the <option>MD5_CRYPT_ENAB</option> variable."
+msgstr ""
+
+#: passwd.1.xml:57(para) passwd.1.xml:53(para) passwd.1.xml:62(para)
+#: newusers.8.xml:57(para) newusers.8.xml:53(para) newusers.8.xml:62(para)
+#: login.defs.5.xml:57(para) login.defs.5.xml:53(para)
+#: login.defs.5.xml:62(para) gpasswd.1.xml:57(para) gpasswd.1.xml:53(para)
+#: gpasswd.1.xml:62(para) chpasswd.8.xml:57(para) chpasswd.8.xml:53(para)
+#: chpasswd.8.xml:62(para) chgpasswd.8.xml:57(para) chgpasswd.8.xml:53(para)
+#: chgpasswd.8.xml:62(para)
+msgid ""
+"Note: This only affect the generation of group passwords. The generation of "
+"user passwords is done by PAM and subject to the PAM configuration. It is "
+"recommended to set this variable consistently with the PAM configuration."
+msgstr ""
+
+#: passwd.1.xml:32(term) newusers.8.xml:32(term) login.defs.5.xml:32(term)
+#: gpasswd.1.xml:32(term) chpasswd.8.xml:32(term) chgpasswd.8.xml:32(term)
+msgid "<option>MD5_CRYPT_ENAB</option> (boolean)"
+msgstr ""
+
+#: passwd.1.xml:34(para) newusers.8.xml:34(para) login.defs.5.xml:34(para)
+#: gpasswd.1.xml:34(para) chpasswd.8.xml:34(para) chgpasswd.8.xml:34(para)
+msgid ""
+"Indicate if passwords must be encrypted using the MD5-based algorithm. If "
+"set to <replaceable>yes</replaceable>, new passwords will be encrypted using "
+"the MD5-based algorithm compatible with the one used by recent releases of "
+"FreeBSD. It supports passwords of unlimited length and longer salt strings. "
+"Set to <replaceable>no</replaceable> if you need to copy encrypted passwords "
+"to other systems which don't understand the new algorithm. Default is "
+"<replaceable>no</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:44(para) newusers.8.xml:44(para) login.defs.5.xml:44(para)
+#: gpasswd.1.xml:44(para) chpasswd.8.xml:44(para) chgpasswd.8.xml:44(para)
+msgid ""
+"This variable is superceded by the <option>ENCRYPT_METHOD</option> variable "
+"or by any command line option used to configure the encryption algorithm."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid ""
+"This variable is deprecated. You should use <option>ENCRYPT_METHOD</option>."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>OBSCURE_CHECKS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Enable additional checks upon password changes."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_ALWAYS_WARN</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Warn about weak passwords (but still allow them) if you are root."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_CHANGE_TRIES</option> (number)"
+msgstr "PASS_WARN_AGE (nummer)"
+
+#: passwd.1.xml:34(para) login.defs.5.xml:34(para)
+msgid "Maximum number of attempts to change password if rejected (too easy)."
+msgstr ""
+
+#: passwd.1.xml:32(term) login.defs.5.xml:32(term)
+#, fuzzy
+msgid "<option>PASS_MAX_LEN</option> (number)"
+msgstr "PASS_MAX_DAYS (nummer)"
+
+#: passwd.1.xml:33(term) login.defs.5.xml:33(term)
+#, fuzzy
+msgid "<option>PASS_MIN_LEN</option> (number)"
+msgstr "PASS_MIN_DAYS (nummer)"
+
+#: passwd.1.xml:35(para) login.defs.5.xml:35(para)
+msgid ""
+"Number of significant characters in the password for crypt(). "
+"<option>PASS_MAX_LEN</option> is 8 by default. Don't change unless your crypt"
+"() is better. This is ignored if <option>MD5_CRYPT_ENAB</option> set to "
+"<replaceable>yes</replaceable>."
+msgstr ""
+
+#: passwd.1.xml:30(term) newusers.8.xml:30(term) login.defs.5.xml:30(term)
+#: gpasswd.1.xml:30(term) chpasswd.8.xml:30(term) chgpasswd.8.xml:30(term)
+msgid "<option>SHA_CRYPT_MIN_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:31(term) newusers.8.xml:31(term) login.defs.5.xml:31(term)
+#: gpasswd.1.xml:31(term) chpasswd.8.xml:31(term) chgpasswd.8.xml:31(term)
+msgid "<option>SHA_CRYPT_MAX_ROUNDS</option> (number)"
+msgstr ""
+
+#: passwd.1.xml:33(para) newusers.8.xml:33(para) login.defs.5.xml:33(para)
+#: gpasswd.1.xml:33(para) chpasswd.8.xml:33(para) chgpasswd.8.xml:33(para)
+msgid ""
+"When <option>ENCRYPT_METHOD</option> is set to <replaceable>SHA256</"
+"replaceable> or <replaceable>SHA512</replaceable>, this defines the number "
+"of SHA rounds used by the encryption algorithm by default (when the number "
+"of rounds is not specified on the command line)."
+msgstr ""
+
+#: passwd.1.xml:40(para) newusers.8.xml:40(para) login.defs.5.xml:40(para)
+#: gpasswd.1.xml:40(para) chpasswd.8.xml:40(para) chgpasswd.8.xml:40(para)
+msgid ""
+"With a lot of rounds, it is more difficult to brute forcing the password. "
+"But note also that more CPU resources will be needed to authenticate users."
+msgstr ""
+
+#: passwd.1.xml:45(para) newusers.8.xml:45(para) login.defs.5.xml:45(para)
+#: gpasswd.1.xml:45(para) chpasswd.8.xml:45(para) chgpasswd.8.xml:45(para)
+msgid ""
+"If not specified, the libc will choose the default number of rounds (5000)."
+msgstr ""
+
+#: passwd.1.xml:49(para) newusers.8.xml:49(para) login.defs.5.xml:49(para)
+#: gpasswd.1.xml:49(para) chpasswd.8.xml:49(para) chgpasswd.8.xml:49(para)
+msgid "The values must be inside the 1000-999999999 range."
+msgstr ""
+
+#: passwd.1.xml:52(para) newusers.8.xml:52(para) login.defs.5.xml:52(para)
+#: gpasswd.1.xml:52(para) chpasswd.8.xml:52(para) chgpasswd.8.xml:52(para)
+msgid ""
+"If only one of the <option>SHA_CRYPT_MIN_ROUNDS</option> or "
+"<option>SHA_CRYPT_MAX_ROUNDS</option> values is set, then this value will be "
+"used."
+msgstr ""
+
+#: passwd.1.xml:57(para) newusers.8.xml:57(para) login.defs.5.xml:57(para)
+#: gpasswd.1.xml:57(para) chpasswd.8.xml:57(para) chgpasswd.8.xml:57(para)
+msgid ""
+"If <option>SHA_CRYPT_MIN_ROUNDS</option> &gt; <option>SHA_CRYPT_MAX_ROUNDS</"
+"option>, the highest value will be used."
+msgstr ""
+
+#: passwd.1.xml:395(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/passwd"
+msgstr "/etc/passwd"
+
+#: passwd.1.xml:397(para)
+msgid "PAM configuration for <command>passwd</command>."
+msgstr ""
+
+#: passwd.1.xml:417(para) chage.1.xml:241(para)
+msgid "permission denied"
+msgstr "åtkomst nekad"
+
+#: passwd.1.xml:423(para)
+msgid "invalid combination of options"
+msgstr "ogiltig kombination av flaggor"
+
+#: passwd.1.xml:429(para)
+msgid "unexpected failure, nothing done"
+msgstr "oväntat fel, ingenting har genomförts"
+
+#: passwd.1.xml:435(para)
+msgid "unexpected failure, <filename>passwd</filename> file missing"
+msgstr "oväntat fel, filen <filename>passwd</filename> saknas"
+
+#: passwd.1.xml:441(para)
+msgid "<filename>passwd</filename> file busy, try again"
+msgstr "Filen <filename>passwd</filename> är upptagen, försök igen"
+
+#: passwd.1.xml:405(para)
+msgid ""
+"The <command>passwd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>passwd</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: passwd.1.xml:456(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, <phrase condition="
+"\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: nologin.8.xml:34(refentrytitle) nologin.8.xml:39(refname)
+#: nologin.8.xml:45(command)
+msgid "nologin"
+msgstr "nologin"
+
+#: nologin.8.xml:40(refpurpose)
+msgid "politely refuse a login"
+msgstr "vägra snällt en inloggning"
+
+#: nologin.8.xml:51(para)
+#, fuzzy
+msgid ""
+"The <command>nologin</command> command displays a message that an account is "
+"not available and exits non-zero. It is intended as a replacement shell "
+"field for accounts that have been disabled."
+msgstr ""
+"<command>nologin</command> visar ett meddelande om att kontot inte är "
+"tillgängligt och avslutas med icke-noll-status. Det är tänkt som ett "
+"ersättande skalfält för konton som har inaktiverats."
+
+#: nologin.8.xml:56(para)
+msgid ""
+"To disable all logins, investigate <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"För att inaktivera alla inloggningar, undersök "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+
+#: nologin.8.xml:65(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>nologin</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: nologin.8.xml:76(title)
+#, fuzzy
+#| msgid "HYSTORY"
+msgid "HISTORY"
+msgstr "HISTORIK"
+
+#: nologin.8.xml:77(para)
+#, fuzzy
+#| msgid "The <command>nologin</command> command appeared in BSD 4.4."
+msgid "The <command>nologin</command> command appearred in BSD 4.4."
+msgstr "Kommandot <command>nologin</command> dök upp i BSD 4.4."
+
+#: newusers.8.xml:50(refentrytitle) newusers.8.xml:55(refname)
+#: newusers.8.xml:61(command) login.defs.5.xml:353(term)
+msgid "newusers"
+msgstr "newusers"
+
+#: newusers.8.xml:56(refpurpose)
+msgid "update and create new users in batch"
+msgstr "uppdatera och skapa nya användare satsvis"
+
+#: newusers.8.xml:64(replaceable)
+msgid "new_users"
+msgstr "nya_användare"
+
+#: newusers.8.xml:71(para)
+msgid ""
+"The <command>newusers</command> command reads a file of user name and clear-"
+"text password pairs and uses this information to update a group of existing "
+"users or to create new users. Each line is in the same format as the "
+"standard password file (see <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>) with the exceptions "
+"explained below:"
+msgstr ""
+
+#: newusers.8.xml:79(para)
+msgid "pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell"
+msgstr ""
+
+#: newusers.8.xml:84(emphasis)
+#, fuzzy
+#| msgid "group_name"
+msgid "pw_name"
+msgstr "gruppnamn"
+
+#: newusers.8.xml:87(para)
+msgid "This is the name of the user."
+msgstr ""
+
+#: newusers.8.xml:90(para)
+msgid ""
+"It can be the name of a new user or the name of an existing user (or an user "
+"created before by <command>newusers</command>). In case of an existing user, "
+"the user's information will be changed, otherwise a new user will be created."
+msgstr ""
+
+#: newusers.8.xml:101(emphasis)
+msgid "pw_passwd"
+msgstr "pw_passwd"
+
+#: newusers.8.xml:104(para)
+msgid ""
+"This field will be encrypted and used as the new value of the encrypted "
+"password."
+msgstr ""
+"Detta fält kommer att krypteras och användas som det nya värdet för det "
+"krypterade lösenordet."
+
+#: newusers.8.xml:112(emphasis)
+#, fuzzy
+#| msgid "pw_gid"
+msgid "pw_uid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:115(para)
+msgid "This field is used to define the UID of the user."
+msgstr ""
+
+#: newusers.8.xml:118(para)
+msgid ""
+"If the field is empty, an new (unused) UID will be defined automatically by "
+"<command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:122(para)
+msgid "If this field contains a number, this number will be used as the UID."
+msgstr ""
+
+#: newusers.8.xml:126(para)
+msgid ""
+"If this field contains the name of an existing user (or the name of an user "
+"created before by <command>newusers</command>), the UID of the specified "
+"user will be used."
+msgstr ""
+
+#: newusers.8.xml:132(para)
+msgid ""
+"If the UID of an existing user is changed, the files ownership of the user's "
+"file should be fixed manually."
+msgstr ""
+
+#: newusers.8.xml:140(emphasis)
+msgid "pw_gid"
+msgstr "pw_gid"
+
+#: newusers.8.xml:143(para)
+msgid "This field is used to define the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:146(para)
+msgid ""
+"If this field contains the name of an existing group (or a group created "
+"before by <command>newusers</command>), the GID of this group will be used "
+"as the primary group ID for the user."
+msgstr ""
+
+#: newusers.8.xml:152(para)
+msgid ""
+"If this field is a number, this number will be used as the primary group ID "
+"of the user. If no groups exist with this GID, a new group will be created "
+"with this GID, and the name of the user."
+msgstr ""
+
+#: newusers.8.xml:158(para)
+msgid ""
+"If this field is empty, a new group will be created with the name of the "
+"user and a GID will be automatically defined by <command>newusers</command> "
+"to be used as the primary group ID for the user and as the GID for the new "
+"group."
+msgstr ""
+
+#: newusers.8.xml:164(para)
+msgid ""
+"If this field contains the name of a group which does not exist (and was not "
+"created earlier wbefore by <command>newusers</command>), a new group will be "
+"created with the specified name and a GID will be automatically defined by "
+"<command>newusers</command> to be used as the primary group ID for the user "
+"and Gs the ID for the new group."
+msgstr ""
+
+#: newusers.8.xml:176(emphasis)
+msgid "pw_gecos"
+msgstr ""
+
+#: newusers.8.xml:179(para)
+msgid "This field is copied in the GECOS field of the user."
+msgstr ""
+
+#: newusers.8.xml:186(emphasis)
+msgid "pw_dir"
+msgstr "pw_dir"
+
+#: newusers.8.xml:189(para)
+msgid "This field is used to define the home directory of the user."
+msgstr ""
+
+#: newusers.8.xml:192(para)
+msgid ""
+"If this field does not specify an existing directory, the specified "
+"directory is created, with ownership set to the user being created or "
+"updated and its primary group."
+msgstr ""
+
+#: newusers.8.xml:197(para)
+msgid ""
+"If the home directory of an existing user is changed, <command>newusers</"
+"command> does not move or copy the content of the old directory to the new "
+"location. This should be done manually."
+msgstr ""
+
+#: newusers.8.xml:207(emphasis)
+msgid "pw_shell"
+msgstr ""
+
+#: newusers.8.xml:210(para)
+msgid ""
+"This field defines the shell of the user. No checks are performed on this "
+"field."
+msgstr ""
+
+#: newusers.8.xml:218(para)
+msgid ""
+"<command>newusers</command> first tries to create or change all the "
+"specified users, and then write these changes to the user or group "
+"databases. If an error occurs (except in the final writes to the databases), "
+"no changes are committed to the databases."
+msgstr ""
+
+#: newusers.8.xml:224(para)
+msgid ""
+"During this first pass, users are created with a locked password (and "
+"passwords are not changed for the users which are not created). A second "
+"pass is used to update the passwords using PAM. Failures to update a "
+"password are reported, but will not stop the other password updates."
+msgstr ""
+
+#: newusers.8.xml:232(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are updated at a single time."
+msgstr ""
+"Detta kommando är tänkt att användas i större systemmiljöer där många konton "
+"uppdateras på samma gång."
+
+#: newusers.8.xml:240(para)
+#, fuzzy
+#| msgid ""
+#| "The options which apply to the <command>usermod</command> command are:"
+msgid "The options which apply to the <command>newusers</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>usermod</command> är:"
+
+#: newusers.8.xml:245(term) chpasswd.8.xml:116(term) chgpasswd.8.xml:95(term)
+#, fuzzy
+msgid "<option>-c</option>, <option>--crypt-method</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: newusers.8.xml:247(para) chpasswd.8.xml:118(para) chgpasswd.8.xml:97(para)
+msgid "Use the specified method to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:248(para) chpasswd.8.xml:122(para) chgpasswd.8.xml:101(para)
+msgid ""
+"The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc "
+"support these methods."
+msgstr ""
+
+#: newusers.8.xml:270(para)
+msgid ""
+"System users will be created with no aging information in <filename>/etc/"
+"shadow</filename>, and their numeric identifiers are choosen in the "
+"<option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>UID_MIN</option>-"
+"<option>UID_MAX</option> (and their <option>GID</option> counterparts for "
+"the creation of groups)."
+msgstr ""
+
+#: newusers.8.xml:284(term) chpasswd.8.xml:154(term) chgpasswd.8.xml:129(term)
+#, fuzzy
+msgid "<option>-s</option>, <option>--sha-rounds</option>"
+msgstr "<option>-s</option>, <option>--shadow</option>"
+
+#: newusers.8.xml:286(para) chpasswd.8.xml:156(para) chgpasswd.8.xml:131(para)
+msgid "Use the specified number of rounds to encrypt the passwords."
+msgstr ""
+
+#: newusers.8.xml:289(para) chpasswd.8.xml:159(para) chgpasswd.8.xml:134(para)
+msgid ""
+"The value 0 means that the system will choose the default number of rounds "
+"for the crypt method (5000)."
+msgstr ""
+
+#: newusers.8.xml:293(para) chpasswd.8.xml:163(para) chgpasswd.8.xml:138(para)
+msgid ""
+"A minimal value of 1000 and a maximal value of 999,999,999 will be enforced."
+msgstr ""
+
+#: newusers.8.xml:297(para) chpasswd.8.xml:167(para) chgpasswd.8.xml:142(para)
+msgid "You can only use this option with the SHA256 or SHA512 crypt method."
+msgstr ""
+
+#: newusers.8.xml:301(para) chpasswd.8.xml:171(para) chgpasswd.8.xml:146(para)
+msgid ""
+"By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and "
+"SHA_CRYPT_MAX_ROUNDS variables in <filename>/etc/login.defs</filename>."
+msgstr ""
+
+#: newusers.8.xml:313(para)
+msgid ""
+"The input file must be protected since it contains unencrypted passwords."
+msgstr ""
+"Inmatningsfilen måste skyddas eftersom den innehåller okrypterade lösenord."
+
+#: newusers.8.xml:317(para) chpasswd.8.xml:187(para) chgpasswd.8.xml:162(para)
+msgid ""
+"You should make sure the passwords and the encryption method respect the "
+"system's password policy."
+msgstr ""
+
+#: newusers.8.xml:390(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/newusers"
+msgstr "/etc/passwd"
+
+#: newusers.8.xml:392(para)
+msgid "PAM configuration for <command>newusers</command>."
+msgstr ""
+
+#: newusers.8.xml:400(para)
+msgid ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: newgrp.1.xml:38(refentrytitle) newgrp.1.xml:43(refname)
+#: newgrp.1.xml:49(command)
+msgid "newgrp"
+msgstr "newgrp"
+
+#: newgrp.1.xml:44(refpurpose)
+msgid "log in to a new group"
+msgstr "logga in i en ny grupp"
+
+#: newgrp.1.xml:50(replaceable) grpck.8.xml:51(replaceable)
+#: grpck.8.xml:60(replaceable) groupdel.8.xml:51(replaceable)
+#: groupadd.8.xml:58(replaceable) gpasswd.1.xml:66(replaceable)
+msgid "group"
+msgstr "grupp"
+
+#: newgrp.1.xml:56(para)
+msgid ""
+"The <command>newgrp</command> command is used to change the current group ID "
+"during a login session. If the optional <option>-</option> flag is given, "
+"the user's environment will be reinitialized as though the user had logged "
+"in, otherwise the current environment, including current working directory, "
+"remains unchanged."
+msgstr ""
+
+#: newgrp.1.xml:64(para)
+msgid ""
+"<command>newgrp</command> changes the current real group ID to the named "
+"group, or to the default group listed in <filename>/etc/passwd</filename> if "
+"no group name is given. <command>newgrp</command> also tries to add the "
+"group to the user groupset. If not root, the user will be prompted for a "
+"password if she does not have a password (in <filename>/etc/shadow</"
+"filename> if this user has an entry in the shadowed password file, or in "
+"<filename>/etc/passwd</filename> otherwise) and the group does, or if the "
+"user is not listed as a member and the group has a password. The user will "
+"be denied access if the group password is empty and the user is not listed "
+"as a member."
+msgstr ""
+
+#: newgrp.1.xml:78(para)
+msgid ""
+"If there is an entry for this group in <filename>/etc/gshadow</filename>, "
+"then the list of members and the password of this group will be taken from "
+"this file, otherwise, the entry in <filename>/etc/group</filename> is "
+"considered."
+msgstr ""
+
+#: newgrp.1.xml:130(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>sg</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry><phrase condition=\"gshadow\">, <citerefentry condition="
+"\"gshadow\"><refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>id</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>"
+
+#: logoutd.8.xml:34(refentrytitle) logoutd.8.xml:39(refname)
+#: logoutd.8.xml:45(command)
+msgid "logoutd"
+msgstr "logoutd"
+
+#: logoutd.8.xml:40(refpurpose)
+msgid "Enforce login time restrictions"
+msgstr "Upprätthåll tidsbegränsningar för inloggningar"
+
+#: logoutd.8.xml:51(para)
+msgid ""
+"<command>logoutd</command> enforces the login time and port restrictions "
+"specified in <filename>/etc/porttime</filename>. <command>logoutd</command> "
+"should be started from <filename>/etc/rc</filename>. The <filename>/var/run/"
+"utmp</filename> file is scanned periodically and each user name is checked "
+"to see if the named user is permitted on the named port at the current time. "
+"Any login session which is violating the restrictions in <filename>/etc/"
+"porttime</filename> is terminated."
+msgstr ""
+
+#: logoutd.8.xml:73(filename) login.1.xml:319(filename)
+msgid "/var/run/utmp"
+msgstr "/var/run/utmp"
+
+#: logoutd.8.xml:75(para) login.1.xml:321(para)
+msgid "List of current login sessions."
+msgstr "Lista på aktuella inloggningssessioner."
+
+#: login.defs.5.xml:97(refentrytitle) login.defs.5.xml:102(refname)
+msgid "login.defs"
+msgstr "login.defs"
+
+#: login.defs.5.xml:103(refpurpose)
+msgid "shadow password suite configuration"
+msgstr ""
+
+#: login.defs.5.xml:108(para)
+msgid ""
+"The <filename>/etc/login.defs</filename> file defines the site-specific "
+"configuration for the shadow password suite. This file is required. Absence "
+"of this file will not prevent system operation, but will probably result in "
+"undesirable operation."
+msgstr ""
+
+#: login.defs.5.xml:115(para)
+msgid ""
+"This file is a readable text file, each line of the file describing one "
+"configuration parameter. The lines consist of a configuration name and "
+"value, separated by whitespace. Blank lines and comment lines are ignored. "
+"Comments are introduced with a \"#\" pound sign and the pound sign must be "
+"the first non-white character of the line."
+msgstr ""
+
+#: login.defs.5.xml:123(para)
+msgid ""
+"Parameter values may be of four types: strings, booleans, numbers, and long "
+"numbers. A string is comprised of any printable characters. A boolean should "
+"be either the value <replaceable>yes</replaceable> or <replaceable>no</"
+"replaceable>. An undefined boolean parameter or one with a value other than "
+"these will be given a <replaceable>no</replaceable> value. Numbers (both "
+"regular and long) may be either decimal values, octal values (precede the "
+"value with <replaceable>0</replaceable>) or hexadecimal values (precede the "
+"value with <replaceable>0x</replaceable>). The maximum value of the regular "
+"and long numeric parameters is machine-dependent."
+msgstr ""
+
+#: login.defs.5.xml:138(para)
+msgid "The following configuration items are provided:"
+msgstr "Följande konfigurationsposter tillhandahålls:"
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHFN_AUTH</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chfn</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chfn.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHFN_RESTRICT</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: login.defs.5.xml:34(para) chfn.1.xml:34(para)
+msgid ""
+"This parameter specifies which values in the <emphasis remap=\"I\">gecos</"
+"emphasis> field of the <filename>/etc/passwd</filename> file may be changed "
+"by regular users using the <command>chfn</command> program. It can be any "
+"combination of letters <replaceable>f</replaceable>, <replaceable>r</"
+"replaceable>, <replaceable>w</replaceable>, <replaceable>h</replaceable>, "
+"for Full name, Room number, Work phone, and Home phone, respectively. For "
+"backward compatibility, <replaceable>yes</replaceable> is equivalent to "
+"<replaceable>rwh</replaceable> and <replaceable>no</replaceable> is "
+"equivalent to <replaceable>frwh</replaceable>. If not specified, only the "
+"superuser can make any changes. The most restrictive setting is better "
+"achieved by not installing <command>chfn</command> SUID."
+msgstr ""
+
+#: login.defs.5.xml:32(term) chsh.1.xml:32(term)
+#, fuzzy
+msgid "<option>CHSH_AUTH</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) chsh.1.xml:34(para)
+msgid ""
+"If <replaceable>yes</replaceable>, the <command>chsh</command> program will "
+"require authentication before making any changes, unless run by the "
+"superuser."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ERASECHAR</option> (number)"
+msgstr "UMASK (nummer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Terminal ERASE character (<replaceable>010</replaceable> = backspace, "
+"<replaceable>0177</replaceable> = DEL)."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.defs.5.xml:37(para) login.1.xml:38(para)
+#: login.1.xml:37(para)
+msgid ""
+"The value can be prefixed \"0\" for an octal value, or \"0x\" for an "
+"hexadecimal value."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAIL_DELAY</option> (number)"
+msgstr "PASS_MIN_DAYS (nummer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Delay in seconds before being allowed another attempt after a login failure."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAILLOG_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"Enable logging and display of <filename>/var/log/faillog</filename> login "
+"failure info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FAKE_SHELL</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If set, <command>login</command> will execute this shell instead of the "
+"users' shell specified in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>FTMP_FILE</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, login failures will be logged in this file in a utmp format."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>HUSHLOGIN_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, this file can inhibit all the usual chatter during the login "
+"sequence. If a full pathname is specified, then hushed mode will be enabled "
+"if the user's name or shell are found in the file. If not a full pathname, "
+"then hushed mode will be enabled if the file exists in the user's home "
+"directory."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ISSUE_FILE</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "If defined, this file will be displayed before each login prompt."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>KILLCHAR</option> (number)"
+msgstr "GID_MAX (nummer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Terminal KILL character (<replaceable>025</replaceable> = CTRL/U)."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LASTLOG_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging and display of /var/log/lastlog login time info."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_OK_LOGINS</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable logging of successful logins."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOG_UNKFAIL_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable display of unknown usernames when login failures are recorded."
+msgstr ""
+
+#: login.defs.5.xml:38(para) login.1.xml:38(para)
+msgid ""
+"Note: logging unknown usernames may be a security issue if an user enter her "
+"password instead of her login name."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_RETRIES</option> (number)"
+msgstr "GID_MIN (nummer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Maximum number of login retries in case of bad password."
+msgstr ""
+
+#: login.defs.5.xml:37(para) login.1.xml:37(para)
+msgid ""
+"This will most likely be overriden by PAM, since the default pam_unix module "
+"has it's own built in of 3 retries. However, this is a safe fallback in case "
+"you are using an authentication module that does not enforce PAM_MAXTRIES."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>LOGIN_TIMEOUT</option> (number)"
+msgstr "GID_MAX (nummer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Max time in seconds for login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>MOTD_FILE</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, \":\" delimited list of \"message of the day\" files to be "
+"displayed upon login."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>NOLOGINS_FILE</option> (string)"
+msgstr "CHFN_RESTRICT (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, name of file whose presence will inhibit non-root logins. The "
+"contents of this file should be a message indicating why logins are "
+"inhibited."
+msgstr ""
+
+#: login.defs.5.xml:181(para)
+#, fuzzy
+msgid ""
+"<option>PASS_MAX_DAYS</option>, <option>PASS_MIN_DAYS</option> and "
+"<option>PASS_WARN_AGE</option> are only used at the time of account "
+"creation. Any changes to these settings won't affect existing accounts."
+msgstr ""
+"PASS_MAX_DAYS, PASS_MIN_DAYS och PASS_WARN_AGE används endast när kontot "
+"skapas. Alla ändringar av dessa inställningar påverkar inte existerande "
+"konton."
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>PORTTIME_CHECKS_ENAB</option> (boolean)"
+msgstr "CHFN_AUTH (boolesk)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Enable checking of time restrictions specified in /etc/porttime."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYGROUP</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: login.defs.5.xml:33(term) login.1.xml:33(term)
+#, fuzzy
+msgid "<option>TTYPERM</option> (string)"
+msgstr "USERDEL_CMD (sträng)"
+
+#: login.defs.5.xml:35(para) login.1.xml:35(para)
+msgid ""
+"The terminal permissions: the login tty will be owned by the "
+"<option>TTYGROUP</option> group, and the permissions will be set to "
+"<option>TTYPERM</option>."
+msgstr ""
+
+#: login.defs.5.xml:40(para) login.1.xml:40(para)
+msgid ""
+"By default, the ownership of the terminal is set to the user's primary group "
+"and the permissions are set to <replaceable>0600</replaceable>."
+msgstr ""
+
+#: login.defs.5.xml:45(para) login.1.xml:45(para)
+msgid ""
+"<option>TTYGROUP</option> can be either the name of a group or a numeric "
+"group identifier."
+msgstr ""
+
+#: login.defs.5.xml:49(para) login.1.xml:49(para)
+msgid ""
+"If you have a <command>write</command> program which is \"setgid\" to a "
+"special group which owns the terminals, define TTYGROUP to the group number "
+"and TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign "
+"TTYPERM to either 622 or 600."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>TTYTYPE_FILE</option> (string)"
+msgstr "MAIL_DIR (sträng)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid ""
+"If defined, file which maps tty line to TERM environment parameter. Each "
+"line of the file is in a format something like \"vt100 tty01\"."
+msgstr ""
+
+#: login.defs.5.xml:32(term) login.1.xml:32(term)
+#, fuzzy
+msgid "<option>ULIMIT</option> (number)"
+msgstr "UID_MIN (nummer)"
+
+#: login.defs.5.xml:34(para) login.1.xml:34(para)
+msgid "Default <command>ulimit</command> value."
+msgstr ""
+
+#: login.defs.5.xml:209(title)
+msgid "CROSS REFERENCES"
+msgstr ""
+
+#: login.defs.5.xml:210(para)
+msgid ""
+"The following cross references show which programs in the shadow password "
+"suite use which parameters."
+msgstr ""
+
+#: login.defs.5.xml:218(term) chfn.1.xml:41(refentrytitle)
+#: chfn.1.xml:46(refname) chfn.1.xml:52(command)
+msgid "chfn"
+msgstr "chfn"
+
+#: login.defs.5.xml:220(para)
+msgid ""
+"<phrase condition=\"no_pam\">CHFN_AUTH</phrase> CHFN_RESTRICT <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:228(term) chgpasswd.8.xml:42(refentrytitle)
+#: chgpasswd.8.xml:47(refname) chgpasswd.8.xml:53(command)
+msgid "chgpasswd"
+msgstr "chgpasswd"
+
+#: login.defs.5.xml:230(para) login.defs.5.xml:260(para)
+msgid ""
+"ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB <phrase condition="
+"\"sha_crypt\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:238(term) chpasswd.8.xml:41(refentrytitle)
+#: chpasswd.8.xml:46(refname) chpasswd.8.xml:52(command)
+msgid "chpasswd"
+msgstr "chpasswd"
+
+#: login.defs.5.xml:240(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:248(term) chsh.1.xml:40(refentrytitle)
+#: chsh.1.xml:45(refname) chsh.1.xml:51(command)
+msgid "chsh"
+msgstr "chsh"
+
+#: login.defs.5.xml:250(para)
+#, fuzzy
+msgid "CHSH_AUTH LOGIN_STRING"
+msgstr "CHFN_AUTH CHFN_RESTRICT"
+
+#: login.defs.5.xml:258(term) gpasswd.1.xml:42(refentrytitle)
+#: gpasswd.1.xml:47(refname) gpasswd.1.xml:61(command)
+msgid "gpasswd"
+msgstr "gpasswd"
+
+#: login.defs.5.xml:268(term) groupadd.8.xml:42(refentrytitle)
+#: groupadd.8.xml:47(refname) groupadd.8.xml:53(command)
+msgid "groupadd"
+msgstr "groupadd"
+
+#: login.defs.5.xml:270(para)
+#, fuzzy
+msgid "GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:277(term) groupdel.8.xml:38(refentrytitle)
+#: groupdel.8.xml:43(refname) groupdel.8.xml:49(command)
+msgid "groupdel"
+msgstr "groupdel"
+
+#: login.defs.5.xml:279(para) login.defs.5.xml:285(para)
+#: login.defs.5.xml:291(para) login.defs.5.xml:298(para)
+#: login.defs.5.xml:304(para) login.defs.5.xml:310(para)
+msgid "MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:283(term) groupmems.8.xml:38(refentrytitle)
+#: groupmems.8.xml:43(refname) groupmems.8.xml:49(command)
+msgid "groupmems"
+msgstr "groupmems"
+
+#: login.defs.5.xml:289(term) groupmod.8.xml:38(refentrytitle)
+#: groupmod.8.xml:43(refname) groupmod.8.xml:49(command)
+msgid "groupmod"
+msgstr "groupmod"
+
+#: login.defs.5.xml:296(term) grpck.8.xml:38(refentrytitle)
+#: grpck.8.xml:43(refname) grpck.8.xml:49(command) grpck.8.xml:58(command)
+msgid "grpck"
+msgstr "grpck"
+
+#: login.defs.5.xml:316(term) login.1.xml:70(refentrytitle)
+#: login.1.xml:75(refname) login.1.xml:81(command) login.1.xml:89(command)
+#: login.1.xml:96(command)
+msgid "login"
+msgstr "login"
+
+#: login.defs.5.xml:318(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE</"
+"phrase> ERASECHAR FAIL_DELAY <phrase condition=\"no_pam\">FAILLOG_ENAB</"
+"phrase> FAKE_SHELL <phrase condition=\"no_pam\">FTMP_FILE</phrase> "
+"HUSHLOGIN_FILE <phrase condition=\"no_pam\">ISSUE_FILE</phrase> KILLCHAR "
+"<phrase condition=\"no_pam\">LASTLOG_ENAB</phrase> LOGIN_RETRIES <phrase "
+"condition=\"no_pam\">LOGIN_STRING</phrase> LOGIN_TIMEOUT LOG_OK_LOGINS "
+"LOG_UNKFAIL_ENAB <phrase condition=\"no_pam\">MAIL_CHECK_ENAB MAIL_DIR "
+"MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB</phrase> "
+"TTYGROUP TTYPERM TTYTYPE_FILE <phrase condition=\"no_pam\">ULIMIT UMASK</"
+"phrase> USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:345(term)
+#, fuzzy
+#| msgid "newgrp"
+msgid "newgrp / sg"
+msgstr "newgrp"
+
+#: login.defs.5.xml:347(para)
+msgid "SYSLOG_SG_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:355(para)
+#, fuzzy
+msgid ""
+"ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB "
+"PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase> SYS_GID_MAX "
+"SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:371(para)
+msgid ""
+"ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN "
+"PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN <phrase condition=\"sha_crypt"
+"\">SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:382(para) login.defs.5.xml:390(para)
+msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE"
+
+#: login.defs.5.xml:397(para)
+msgid ""
+"<phrase condition=\"no_pam\">CONSOLE</phrase> CONSOLE_GROUPS DEFAULT_HOME "
+"<phrase condition=\"no_pam\">ENV_HZ ENVIRON_FILE</phrase> ENV_PATH "
+"ENV_SUPATH <phrase condition=\"no_pam\">ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB "
+"MAIL_DIR MAIL_FILE QUOTAS_ENAB</phrase> SULOG_FILE SU_NAME <phrase condition="
+"\"no_pam\">SU_WHEEL_ONLY</phrase> SYSLOG_SU_ENAB <phrase condition=\"no_pam"
+"\">USERGROUPS_ENAB</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:412(term)
+#, fuzzy
+msgid "sulogin"
+msgstr "login"
+
+#: login.defs.5.xml:414(para)
+msgid "ENV_HZ <phrase condition=\"no_pam\">ENV_TZ</phrase>"
+msgstr ""
+
+#: login.defs.5.xml:423(para)
+#, fuzzy
+msgid ""
+"CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS "
+"PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN "
+"UID_MAX UID_MIN UMASK"
+msgstr ""
+"GID_MAX GID_MIN PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UID_MAX UID_MIN "
+"UMASK"
+
+#: login.defs.5.xml:436(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB"
+msgstr ""
+
+#: login.defs.5.xml:445(para)
+msgid "MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP"
+msgstr ""
+
+#: login.defs.5.xml:456(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+#| "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgid ""
+"Much of the functionality that used to be provided by the shadow password "
+"suite is now handled by PAM. Thus, <filename>/etc/login.defs</filename> is "
+"no longer used by <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, or less used by "
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, and <citerefentry><refentrytitle>su</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>. Please refer to the "
+"corresponding PAM configuration files instead."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: login.defs.5.xml:472(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: login.access.5.xml:35(refentrytitle) login.access.5.xml:40(refname)
+msgid "login.access"
+msgstr "login.access"
+
+#: login.access.5.xml:41(refpurpose)
+msgid "login access control table"
+msgstr ""
+
+#: login.access.5.xml:46(para)
+msgid ""
+"The <emphasis remap=\"I\">login.access</emphasis> file specifies (user, "
+"host) combinations and/or (user, tty) combinations for which a login will be "
+"either accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:52(para)
+msgid ""
+"When someone logs in, the <emphasis remap=\"I\">login.access</emphasis> is "
+"scanned for the first entry that matches the (user, host) combination, or, "
+"in case of non-networked logins, the first entry that matches the (user, "
+"tty) combination. The permissions field of that table entry determines "
+"whether the login will be accepted or refused."
+msgstr ""
+
+#: login.access.5.xml:60(para)
+msgid ""
+"Each line of the login access control table has three fields separated by a "
+"\":\" character:"
+msgstr ""
+
+#: login.access.5.xml:65(para)
+msgid ""
+"<emphasis remap=\"I\">permission</emphasis>:<emphasis remap=\"I\">users</"
+"emphasis>:<emphasis remap=\"I\">origins</emphasis>"
+msgstr ""
+
+#: login.access.5.xml:69(para)
+msgid ""
+"The first field should be a \"<emphasis>+</emphasis>\" (access granted) or "
+"\"<emphasis>-</emphasis>\" (access denied) character. The second field "
+"should be a list of one or more login names, group names, or <emphasis>ALL</"
+"emphasis> (always matches). The third field should be a list of one or more "
+"tty names (for non-networked logins), host names, domain names (begin with "
+"\"<literal>.</literal>\"), host addresses, internet network numbers (end "
+"with \"<literal>.</literal>\"), <emphasis>ALL</emphasis> (always matches) or "
+"<emphasis>LOCAL</emphasis> (matches any string that does not contain a "
+"\"<literal>.</literal>\" character). If you run NIS you can use "
+"@netgroupname in host or user patterns."
+msgstr ""
+
+#: login.access.5.xml:83(para)
+msgid ""
+"The <emphasis>EXCEPT</emphasis> operator makes it possible to write very "
+"compact rules."
+msgstr ""
+
+#: login.access.5.xml:88(para)
+msgid ""
+"The group file is searched only when a name does not match that of the "
+"logged-in user. Only groups are matched in which users are explicitly "
+"listed: the program does not look at a user's primary group id value."
+msgstr ""
+
+#: login.1.xml:76(refpurpose)
+msgid "begin session on the system"
+msgstr ""
+
+#: login.1.xml:82(arg) login.1.xml:90(arg) login.1.xml:97(arg)
+#: login.1.xml:214(option) groupmems.8.xml:54(arg)
+msgid "-p"
+msgstr "-p"
+
+#: login.1.xml:83(replaceable) login.1.xml:91(replaceable)
+#: login.1.xml:98(replaceable)
+msgid "host"
+msgstr "värd"
+
+#: login.1.xml:83(arg) login.1.xml:91(arg) chfn.1.xml:56(arg)
+msgid "-h <placeholder-1/>"
+msgstr "-h <placeholder-1/>"
+
+#: login.1.xml:86(replaceable)
+msgid "ENV=VAR"
+msgstr ""
+
+#: login.1.xml:92(arg) login.1.xml:192(option) expiry.1.xml:54(arg)
+msgid "-f"
+msgstr "-f"
+
+#: login.1.xml:98(arg) chfn.1.xml:54(arg)
+msgid "-r <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: login.1.xml:104(para)
+msgid ""
+"The <command>login</command> program is used to establish a new session with "
+"the system. It is normally invoked automatically by responding to the "
+"<emphasis remap=\"I\">login:</emphasis> prompt on the user's terminal. "
+"<command>login</command> may be special to the shell and may not be invoked "
+"as a sub-process. When called from a shell, <command>login</command> should "
+"be executed as <emphasis remap=\"B\">exec login</emphasis> which will cause "
+"the user to exit from the current shell (and thus will prevent the new "
+"logged in user to return to the session of the caller). Attempting to "
+"execute <command>login</command> from any shell but the login shell will "
+"produce an error message."
+msgstr ""
+
+#: login.1.xml:118(para)
+msgid ""
+"The user is then prompted for a password, where appropriate. Echoing is "
+"disabled to prevent revealing the password. Only a small number of password "
+"failures are permitted before <command>login</command> exits and the "
+"communications link is severed."
+msgstr ""
+
+#: login.1.xml:125(para)
+msgid ""
+"If password aging has been enabled for your account, you may be prompted for "
+"a new password before proceeding. You will be forced to provide your old "
+"password and the new password before continuing. Please refer to "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> for more information."
+msgstr ""
+
+#: login.1.xml:134(para)
+msgid ""
+"After a successful login, you will be informed of any system messages and "
+"the presence of mail. You may turn off the printing of the system message "
+"file, <filename>/etc/motd</filename>, by creating a zero-length file "
+"<filename>.hushlogin</filename> in your login directory. The mail message "
+"will be one of \"<emphasis>You have new mail.</emphasis>\", \"<emphasis>You "
+"have mail.</emphasis>\", or \"<emphasis>No Mail.</emphasis>\" according to "
+"the condition of your mailbox."
+msgstr ""
+
+#: login.1.xml:145(para)
+msgid ""
+"Your user and group ID will be set according to their values in the "
+"<filename>/etc/passwd</filename> file. The value for <envar>$HOME</envar>, "
+"<envar>$SHELL</envar>, <envar>$PATH</envar>, <envar>$LOGNAME</envar>, and "
+"<envar>$MAIL</envar> are set according to the appropriate fields in the "
+"password entry. Ulimit, umask and nice values may also be set according to "
+"entries in the GECOS field."
+msgstr ""
+
+#: login.1.xml:154(para)
+msgid ""
+"On some installations, the environmental variable <envar>$TERM</envar> will "
+"be initialized to the terminal type on your tty line, as specified in "
+"<filename>/etc/ttytype</filename>."
+msgstr ""
+
+#: login.1.xml:160(para)
+msgid ""
+"An initialization script for your command interpreter may also be executed. "
+"Please see the appropriate manual section for more information on this "
+"function."
+msgstr ""
+
+#: login.1.xml:172(para) login.1.xml:248(para)
+msgid ""
+"The <command>login</command> program is NOT responsible for removing users "
+"from the utmp file. It is the responsibility of "
+"<citerefentry><refentrytitle>getty</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry> and <citerefentry><refentrytitle>init</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry> to clean up apparent "
+"ownership of a terminal session. If you use <command>login</command> from "
+"the shell prompt without <command>exec</command>, the user you use will "
+"continue to appear to be logged in even after you log out of the \"subsession"
+"\"."
+msgstr ""
+
+#: login.1.xml:195(para)
+msgid "Do not perform authentication, user is preauthenticated."
+msgstr "Genomför inte autentisering, användaren är förautentiserad."
+
+#: login.1.xml:198(para)
+msgid "Note: In that case, <replaceable>username</replaceable> is mandatory."
+msgstr ""
+
+#: login.1.xml:206(option)
+msgid "-h"
+msgstr "-h"
+
+#: login.1.xml:209(para)
+msgid "Name of the remote host for this login."
+msgstr "Namnet på fjärrvärden för denna inloggning."
+
+#: login.1.xml:217(para)
+msgid "Preserve environment."
+msgstr "Behåll miljö."
+
+#: login.1.xml:225(para)
+msgid "Perform autologin protocol for rlogin."
+msgstr "Genomför automatiskt inloggningsprotokoll för rlogin."
+
+#: login.1.xml:230(para)
+msgid ""
+"The <option>-r</option>, <option>-h</option> and <option>-f</option> options "
+"are only used when <command>login</command> is invoked by root."
+msgstr ""
+"Flaggorna <option>-r</option>, <option>-h</option> och <option>-f</option> "
+"används endast när <command>login</command> har startats av root."
+
+#: login.1.xml:239(para)
+msgid ""
+"This version of <command>login</command> has many compilation options, only "
+"some of which may be in use at any particular site."
+msgstr ""
+
+#: login.1.xml:244(para)
+msgid ""
+"The location of files is subject to differences in system configuration."
+msgstr ""
+
+#: login.1.xml:260(para)
+msgid ""
+"As with any program, <command>login</command>'s appearance can be faked. If "
+"non-trusted users have physical access to a machine, an attacker could use "
+"this to obtain the password of the next person coming to sit in front of the "
+"machine. Under Linux, the SAK mechanism can be used by users to initiate a "
+"trusted path and prevent this kind of attack."
+msgstr ""
+
+#: login.1.xml:325(filename)
+msgid "/var/log/wtmp"
+msgstr "/var/log/wtmp"
+
+#: login.1.xml:327(para)
+msgid "List of previous login sessions."
+msgstr "Lista på tidigare inloggningssessioner."
+
+#: login.1.xml:343(filename)
+msgid "/etc/motd"
+msgstr "/etc/motd"
+
+#: login.1.xml:345(para)
+msgid "System message of the day file."
+msgstr "Fil för dagens systemmeddelande."
+
+#: login.1.xml:349(filename)
+msgid "/etc/nologin"
+msgstr "/etc/nologin"
+
+#: login.1.xml:351(para)
+msgid "Prevent non-root users from logging in."
+msgstr "Förhindra icke-rootanvändare från att logga in."
+
+#: login.1.xml:355(filename)
+msgid "/etc/ttytype"
+msgstr "/etc/ttytype"
+
+#: login.1.xml:357(para)
+msgid "List of terminal types."
+msgstr "Lista på terminaltyper."
+
+#: login.1.xml:361(filename)
+msgid "$HOME/.hushlogin"
+msgstr "$HOME/.hushlogin"
+
+#: login.1.xml:363(para)
+msgid "Suppress printing of system messages."
+msgstr "Tysta ner utskrift av systemmeddelanden."
+
+#: login.1.xml:377(para)
+msgid ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>mail</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>securetty</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getty</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: limits.5.xml:35(refentrytitle) limits.5.xml:40(refname)
+msgid "limits"
+msgstr "limits"
+
+#: limits.5.xml:41(refpurpose)
+msgid "resource limits definition"
+msgstr "definition av resursbegränsningar"
+
+#: limits.5.xml:47(para)
+msgid ""
+"The <emphasis remap=\"I\">limits</emphasis> file (<filename>/etc/limits</"
+"filename> by default or LIMITS_FILE defined <filename>config.h</filename>) "
+"describes the resource limits you wish to impose. It should be owned by root "
+"and readable by root account only."
+msgstr ""
+
+#: limits.5.xml:55(para)
+msgid ""
+"By default no quota is imposed on 'root'. In fact, there is no way to impose "
+"limits via this procedure to root-equiv accounts (accounts with UID 0)."
+msgstr ""
+
+#: limits.5.xml:61(para)
+msgid "Each line describes a limit for a user in the form:"
+msgstr "Varje rad beskriver en begränsning för användaren i formatet:"
+
+#: limits.5.xml:64(emphasis)
+msgid "user LIMITS_STRING"
+msgstr "user LIMITS_STRING"
+
+#: limits.5.xml:67(para)
+msgid ""
+"The <emphasis>LIMITS_STRING</emphasis> is a string of a concatenated list of "
+"resource limits. Each limit consists of a letter identifier followed by a "
+"numerical limit."
+msgstr ""
+
+#: limits.5.xml:73(para)
+msgid "The valid identifiers are:"
+msgstr "De giltiga identifierarna är:"
+
+#: limits.5.xml:76(para)
+msgid "A: max address space (KB)"
+msgstr "A: maximal adressrymd (KB)"
+
+#: limits.5.xml:77(para)
+msgid "C: max core file size (KB)"
+msgstr ""
+
+#: limits.5.xml:78(para)
+msgid "D: max data size (KB)"
+msgstr "D: maximal datastorlek (KB)"
+
+#: limits.5.xml:79(para)
+msgid "F: maximum filesize (KB)"
+msgstr "F: maximal filstorlek (KB)"
+
+#: limits.5.xml:80(para)
+msgid "M: max locked-in-memory address space (KB)"
+msgstr ""
+
+#: limits.5.xml:81(para)
+msgid "N: max number of open files"
+msgstr "N: maximalt antal öppna filer"
+
+#: limits.5.xml:82(para)
+msgid "R: max resident set size (KB)"
+msgstr ""
+
+#: limits.5.xml:83(para)
+msgid "S: max stack size (KB)"
+msgstr "S: maximal stackstorlek (KB)"
+
+#: limits.5.xml:84(para)
+msgid "T: max CPU time (MIN)"
+msgstr "T: maximal processortid (MIN)"
+
+#: limits.5.xml:85(para)
+msgid "U: max number of processes"
+msgstr "U: maximalt antal processer"
+
+#: limits.5.xml:86(para)
+msgid ""
+"K: file creation mask, set by <citerefentry><refentrytitle>umask</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+
+#: limits.5.xml:91(para)
+msgid "L: max number of logins for this user"
+msgstr "L: maximalt antal inloggningar för denna användare"
+
+#: limits.5.xml:92(para)
+msgid ""
+"P: process priority, set by <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"P: processprioritet, inställd av <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+#: limits.5.xml:97(para)
+msgid "I: max nice value (0..39 which translates to 20..-19)"
+msgstr ""
+
+#: limits.5.xml:99(para)
+msgid "O: max real time priority"
+msgstr ""
+
+#: limits.5.xml:102(para)
+msgid ""
+"For example, <emphasis remap=\"I\">L2D2048N5</emphasis> is a valid "
+"<emphasis>LIMITS_STRING</emphasis>. For reading convenience, the following "
+"entries are equivalent:"
+msgstr ""
+
+#: limits.5.xml:108(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"      username L2D2048N5\n"
+"      username L2 D2048 N5\n"
+"    "
+msgstr ""
+"\n"
+"      username L2D2048N5\n"
+"      username L2 D2048 N5\n"
+"    "
+
+#: limits.5.xml:113(para)
+msgid ""
+"Be aware that after <emphasis remap=\"I\">username</emphasis> the rest of "
+"the line is considered a limit string, thus comments are not allowed. A "
+"invalid limits string will be rejected (not considered) by the "
+"<command>login</command> program."
+msgstr ""
+
+#: limits.5.xml:120(para)
+msgid ""
+"The default entry is denoted by username \"<emphasis>*</emphasis>\". If you "
+"have multiple <emphasis remap=\"I\">default</emphasis> entries in your "
+"<emphasis>LIMITS_FILE</emphasis>, then the last one will be used as the "
+"default entry."
+msgstr ""
+
+#: limits.5.xml:127(para)
+msgid ""
+"To completely disable limits for a user, a single dash \"<emphasis>-</"
+"emphasis>\" will do."
+msgstr ""
+
+#: limits.5.xml:132(para)
+msgid ""
+"Also, please note that all limit settings are set PER LOGIN. They are not "
+"global, nor are they permanent. Perhaps global limits will come, but for now "
+"this will have to do ;)"
+msgstr ""
+
+#: limits.5.xml:143(filename)
+msgid "/etc/limits"
+msgstr "/etc/limits"
+
+#: limits.5.xml:151(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>setpriority</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>."
+
+#: lastlog.8.xml:35(refentrytitle) lastlog.8.xml:40(refname)
+#: lastlog.8.xml:46(command)
+msgid "lastlog"
+msgstr "lastlog"
+
+#: lastlog.8.xml:41(refpurpose)
+msgid "reports the most recent login of all users or of a given user"
+msgstr ""
+
+#: lastlog.8.xml:55(para)
+msgid ""
+"<command>lastlog</command> formats and prints the contents of the last login "
+"log <filename>/var/log/lastlog</filename> file. The <emphasis>login-name</"
+"emphasis>, <emphasis>port</emphasis>, and <emphasis>last login time</"
+"emphasis> will be printed. The default (no flags) causes lastlog entries to "
+"be printed, sorted by their order in <filename>/etc/passwd</filename>."
+msgstr ""
+
+#: lastlog.8.xml:67(para)
+msgid "The options which apply to the <command>lastlog</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>lastlog</command> är:"
+
+#: lastlog.8.xml:72(term)
+msgid ""
+"<option>-b</option>, <option>--before</option><replaceable>DAYS</replaceable>"
+msgstr ""
+"<option>-b</option>, <option>--before</option><replaceable>DAGAR</"
+"replaceable>"
+
+#: lastlog.8.xml:76(para)
+msgid ""
+"Print only lastlog records older than <emphasis remap=\"I\">DAYS</emphasis>."
+msgstr ""
+
+#: lastlog.8.xml:90(term) faillog.8.xml:140(term)
+msgid ""
+"<option>-t</option>, <option>--time</option><replaceable>DAYS</replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>DAGAR</replaceable>"
+
+#: lastlog.8.xml:95(para)
+msgid ""
+"Print the lastlog records more recent than <emphasis remap=\"I\">DAYS</"
+"emphasis>."
+msgstr ""
+
+#: lastlog.8.xml:102(term) faillog.8.xml:151(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-K</option>, <option>--key</option><replaceable>KEY</"
+#| "replaceable>=<replaceable>VALUE</replaceable>"
+msgid ""
+"<option>-u</option>, <option>--user</option><replaceable>LOGIN</replaceable>|"
+"<replaceable>RANGE</replaceable>"
+msgstr ""
+"<option>-K</option>, <option>--key</option><replaceable>NYCKEL</"
+"replaceable>=<replaceable>VÄRDE</replaceable>"
+
+#: lastlog.8.xml:107(para)
+msgid "Print the lastlog record of the specified user(s)."
+msgstr ""
+
+#: lastlog.8.xml:110(para) faillog.8.xml:161(para)
+msgid ""
+"The users can be specified by a login name, a numerical user ID, or a "
+"<replaceable>RANGE</replaceable> of users. This <replaceable>RANGE</"
+"replaceable> of users can be specified with a min and max values "
+"(<replaceable>UID_MIN-UID_MAX</replaceable>), a max value (<replaceable>-"
+"UID_MAX</replaceable>), or a min value (<replaceable>UID_MIN-</replaceable>)."
+msgstr ""
+
+#: lastlog.8.xml:122(para)
+msgid ""
+"If the user has never logged in the message <emphasis>** Never logged in**</"
+"emphasis> will be displayed instead of the port and time."
+msgstr ""
+
+#: lastlog.8.xml:127(para)
+msgid ""
+"Only the entries for the current users of the system will be displayed. "
+"Other entries may exist for users that were deleted previously."
+msgstr ""
+
+#: lastlog.8.xml:135(title) groups.1.xml:65(title) chsh.1.xml:106(title)
+#: chage.1.xml:193(title)
+msgid "NOTE"
+msgstr "NOTERA"
+
+#: lastlog.8.xml:136(para)
+msgid ""
+"The <filename>lastlog</filename> file is a database which contains info on "
+"the last login of each user. You should not rotate it. It is a sparse file, "
+"so its size on the disk is usually much smaller than the one shown by "
+"\"<command>ls -l</command>\" (which can indicate a really big file if you "
+"have in <filename>passwd</filename> users with a high UID). You can display "
+"its real size with \"<command>ls -s</command>\"."
+msgstr ""
+
+#: lastlog.8.xml:150(filename)
+msgid "/var/log/lastlog"
+msgstr "/var/log/lastlog"
+
+#: lastlog.8.xml:152(para)
+msgid "Database times of previous user logins."
+msgstr "Databastider för tidigare användarinloggningar."
+
+#: lastlog.8.xml:160(para)
+msgid ""
+"Large gaps in UID numbers will cause the lastlog program to run longer with "
+"no output to the screen (i.e. if in lastlog database there is no entries for "
+"users with UID between 170 and 800 lastlog will appear to hang as it "
+"processes entries with UIDs 171-799)."
+msgstr ""
+
+#: gshadow.5.xml:33(refentrytitle) gshadow.5.xml:38(refname)
+msgid "gshadow"
+msgstr "gshadow"
+
+#: gshadow.5.xml:39(refpurpose)
+msgid "shadowed group file"
+msgstr "skuggad gruppfil"
+
+#: gshadow.5.xml:44(para)
+#, fuzzy
+#| msgid ""
+#| "<filename>/etc/gshadow</filename> contains the shadowed information for "
+#| "group accounts. It contains lines with the following colon-separated "
+#| "fields:"
+msgid ""
+"<filename>/etc/gshadow</filename> contains the shadowed information for "
+"group accounts."
+msgstr ""
+"<filename>/etc/gshadow</filename> innehåller skuggad gruppkontoinformation. "
+"Den innehåller rader med följande kolonseparerade fält:"
+
+#: gshadow.5.xml:54(para)
+msgid "Each line of this file contains the following colon-separated fields:"
+msgstr ""
+
+#: gshadow.5.xml:60(emphasis)
+msgid "group name"
+msgstr "gruppnamn"
+
+#: gshadow.5.xml:62(para)
+msgid "It must be a valid group name, which exist on the system."
+msgstr ""
+
+#: gshadow.5.xml:75(para)
+#, fuzzy
+msgid ""
+"If the password field contains some string that is not a valid result of "
+"<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum></"
+"citerefentry>, for instance ! or *, users will not be able to use a unix "
+"password to access the group (but group members do not need the password)."
+msgstr ""
+"Referera till <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> för detaljer om hur "
+"denna sträng tolkas."
+
+#: gshadow.5.xml:82(para)
+#, fuzzy
+#| msgid ""
+#| "The new value of the user's password file comment field. It is normally "
+#| "modified using the <citerefentry><refentrytitle>chfn</"
+#| "refentrytitle><manvolnum>1</manvolnum></citerefentry> utility."
+msgid ""
+"The password is used when an user who is not a member of the group wants to "
+"gain the permissions of this group (see <citerefentry><refentrytitle>newgrp</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>)."
+msgstr ""
+"Det nya värdet för användarens kommentarsfält i lösenordsfilen. Vanligtvis "
+"ändras det med verktyget <citerefentry><refentrytitle>chfn</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>."
+
+#: gshadow.5.xml:88(para)
+msgid ""
+"This field may be empty, in which case only the group members can gain the "
+"group permissions."
+msgstr ""
+
+#: gshadow.5.xml:98(para)
+msgid ""
+"This password supersedes any password specified in <filename>/etc/group</"
+"filename>."
+msgstr ""
+
+#: gshadow.5.xml:106(emphasis)
+msgid "administrators"
+msgstr ""
+
+#: gshadow.5.xml:108(para) gshadow.5.xml:124(para)
+#, fuzzy
+#| msgid "comma-separated list of group members"
+msgid "It must be a comma-separated list of user names."
+msgstr "kommaseparerad lista med gruppmedlemmar"
+
+#: gshadow.5.xml:111(para)
+msgid "Administrators can change the password or the members of the group."
+msgstr ""
+
+#: gshadow.5.xml:115(para)
+msgid ""
+"Administrators also have the same permissions as the members (see below)."
+msgstr ""
+
+#: gshadow.5.xml:122(emphasis)
+msgid "members"
+msgstr ""
+
+#: gshadow.5.xml:127(para)
+msgid "Members can access the group without being prompted for a password."
+msgstr ""
+
+#: gshadow.5.xml:131(para)
+msgid ""
+"You should use the same list of users as in <filename>/etc/group</filename>."
+msgstr ""
+
+#: gshadow.5.xml:160(para)
+#, fuzzy
+#| msgid ""
+#| "<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+#| "citerefentry>, <citerefentry><refentrytitle>group</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+#| "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#| "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#| "manvolnum></citerefentry>."
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>grpconv</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>gshadow</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry><citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: grpck.8.xml:44(refpurpose)
+msgid "verify integrity of group files"
+msgstr "validera integriteten för gruppfiler"
+
+#: grpck.8.xml:70(para)
+msgid ""
+"The <command>grpck</command> command verifies the integrity of the groups "
+"information. It checks that all entries in <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\">and <filename>/etc/gshadow</"
+"filename></phrase> have the proper format and contain valid data. The user "
+"is prompted to delete entries that are improperly formatted or which have "
+"other uncorrectable errors."
+msgstr ""
+
+#: grpck.8.xml:87(para)
+#, fuzzy
+#| msgid "a unique group name"
+msgid "a unique and valid group name"
+msgstr "ett unikt gruppnamn"
+
+#: grpck.8.xml:90(para)
+#, fuzzy
+#| msgid ""
+#| "Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/"
+#| "shadow</filename> by UID."
+msgid ""
+"a valid group identifier <phrase condition=\"gshadow\"> (<filename>/etc/"
+"group</filename> only)</phrase>"
+msgstr ""
+"Sorterar poster i <filename>/etc/passwd</filename> och <filename>/etc/"
+"shadow</filename> efter UID."
+
+#: grpck.8.xml:97(para)
+#, fuzzy
+#| msgid "a valid list of members and administrators"
+msgid ""
+"a valid list of members <phrase condition=\"gshadow\"> and administrators</"
+"phrase>"
+msgstr "en giltig lista med medlemmar och administratörer"
+
+#: grpck.8.xml:103(para)
+msgid ""
+"a corresponding entry in the <filename>/etc/gshadow</filename> file "
+"(respectively <filename>/etc/group</filename> for the <filename>gshadow</"
+"filename> checks)"
+msgstr ""
+
+#: grpck.8.xml:111(para)
+msgid ""
+"The checks for correct number of fields and unique group name are fatal. If "
+"an entry has the wrong number of fields, the user will be prompted to delete "
+"the entire line. If the user does not answer affirmatively, all further "
+"checks are bypassed. An entry with a duplicated group name is prompted for "
+"deletion, but the remaining checks will still be made. All other errors are "
+"warnings and the user is encouraged to run the <command>groupmod</command> "
+"command to correct the error."
+msgstr ""
+
+#: grpck.8.xml:122(para)
+msgid ""
+"The commands which operate on the <filename>/etc/group</filename><phrase "
+"condition=\"no_gshadow\">file</phrase><phrase condition=\"gshadow\">and "
+"<filename>/etc/gshadow</filename> files</phrase> are not able to alter "
+"corrupted or duplicated entries. <command>grpck</command> should be used in "
+"those circumstances to remove the offending entries."
+msgstr ""
+
+#: grpck.8.xml:134(para)
+#, fuzzy
+#| msgid "The options which apply to the <command>pwck</command> command are:"
+msgid "The options which apply to the <command>grpck</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>pwck</command> är:"
+
+#: grpck.8.xml:141(para)
+msgid ""
+"Execute the <command>grpck</command> command in read-only mode. This causes "
+"all questions regarding changes to be answered <emphasis>no</emphasis> "
+"without user intervention."
+msgstr ""
+
+#: grpck.8.xml:151(para)
+#, fuzzy
+#| msgid ""
+#| "Sort entries in <filename>/etc/passwd</filename> and <filename>/etc/"
+#| "shadow</filename> by UID."
+msgid ""
+"Sort entries in <filename>/etc/group</filename><phrase condition=\"gshadow"
+"\">and <filename>/etc/gshadow</filename></phrase> by GID."
+msgstr ""
+"Sorterar poster i <filename>/etc/passwd</filename> och <filename>/etc/"
+"shadow</filename> efter UID."
+
+#: grpck.8.xml:160(para)
+msgid ""
+"By default, <command>grpck</command> operates on <filename>/etc/group</"
+"filename><phrase condition=\"gshadow\"> and <filename>/etc/gshadow</"
+"filename></phrase>. The user may select alternate files with the <emphasis "
+"remap=\"I\">group</emphasis><phrase condition=\"no_gshadow\">parameter.</"
+"phrase><phrase condition=\"gshadow\">and <emphasis remap=\"I\">shadow</"
+"emphasis> parameters.</phrase>"
+msgstr ""
+
+#: grpck.8.xml:228(para)
+msgid "one or more bad group entries"
+msgstr "en eller flera felaktiga grupposter"
+
+#: grpck.8.xml:234(para)
+msgid "can't open group files"
+msgstr "kan inte öppna gruppfiler"
+
+#: grpck.8.xml:240(para)
+msgid "can't lock group files"
+msgstr "kan inte låsa gruppfiler"
+
+#: grpck.8.xml:246(para)
+msgid "can't update group files"
+msgstr "kan inte uppdatera gruppfiler"
+
+#: grpck.8.xml:210(para)
+msgid ""
+"The <command>grpck</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>grpck</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: grpck.8.xml:255(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"gshadow\"><citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum>, </citerefentry>, </"
+"phrase><citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>pwck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: groups.1.xml:34(refentrytitle) groups.1.xml:39(refname)
+#: groups.1.xml:45(command)
+msgid "groups"
+msgstr "groups"
+
+#: groups.1.xml:40(refpurpose)
+msgid "display current group names"
+msgstr "visa aktuella gruppnamn"
+
+#: groups.1.xml:47(replaceable) chfn.1.xml:58(replaceable)
+msgid "user"
+msgstr "användare"
+
+#: groups.1.xml:54(para)
+msgid ""
+"The <command>groups</command> command displays the current group names or ID "
+"values. If the value does not have a corresponding entry in <filename>/etc/"
+"group</filename>, the value will be displayed as the numerical group value. "
+"The optional <emphasis remap=\"I\">user</emphasis> parameter will display "
+"the groups for the named <emphasis remap=\"I\">user</emphasis>."
+msgstr ""
+
+#: groups.1.xml:66(para)
+msgid ""
+"Systems which do not support concurrent group sets will have the information "
+"from <filename>/etc/group</filename> reported. The user must use "
+"<command>newgrp</command> or <command>sg</command> to change their current "
+"real and effective group ID."
+msgstr ""
+
+#: groups.1.xml:88(para)
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>getgid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>getgroups</refentrytitle><manvolnum>2</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>getuid</"
+"refentrytitle><manvolnum>2</manvolnum></citerefentry>."
+
+#: groupmod.8.xml:44(refpurpose)
+msgid "modify a group definition on the system"
+msgstr "ändra en gruppdefinition på systemet"
+
+#: groupmod.8.xml:53(replaceable)
+msgid "GROUP"
+msgstr "GRUPP"
+
+#: groupmod.8.xml:59(para)
+msgid ""
+"The <command>groupmod</command> command modifies the definition of the "
+"specified <replaceable>GROUP</replaceable> by modifying the appropriate "
+"entry in the group database."
+msgstr ""
+
+#: groupmod.8.xml:68(para)
+msgid "The options which apply to the <command>groupmod</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>groupmod</command> är:"
+
+#: groupmod.8.xml:74(term) groupadd.8.xml:94(term)
+msgid ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+
+#: groupmod.8.xml:78(para)
+msgid ""
+"The group ID of the given <replaceable>GROUP</replaceable> will be changed "
+"to <replaceable>GID</replaceable>."
+msgstr ""
+
+#: groupmod.8.xml:82(para)
+msgid ""
+"The value of <replaceable>GID</replaceable> must be a non-negative decimal "
+"integer. This value must be unique, unless the <option>-o</option> option is "
+"used. Values between 0 and 999 are typically reserved for system groups."
+msgstr ""
+
+#: groupmod.8.xml:89(para)
+msgid ""
+"Any files that have the old group ID and must continue to belong to "
+"<replaceable>GROUP</replaceable>, must have their group ID changed manually."
+msgstr ""
+
+#: groupmod.8.xml:104(term)
+msgid ""
+"<option>-n</option>, <option>--new-name</option><replaceable>NEW_GROUP</"
+"replaceable>"
+msgstr ""
+"<option>-n</option>, <option>--new-name</option><replaceable>NY_GRUPP</"
+"replaceable>"
+
+#: groupmod.8.xml:109(para)
+msgid ""
+"The name of the group will be changed from <replaceable>GROUP</replaceable> "
+"to <replaceable>NEW_GROUP</replaceable> name."
+msgstr ""
+
+#: groupmod.8.xml:120(para)
+#, fuzzy
+msgid ""
+"When used with the <option>-g</option> option, allow to change the group "
+"<replaceable>GID</replaceable> to a non-unique value."
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+
+#: groupmod.8.xml:219(para)
+msgid "group name already in use"
+msgstr "gruppnamnet används redan"
+
+#: groupmod.8.xml:183(para)
+msgid ""
+"The <command>groupmod</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>groupmod</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: groupmod.8.xml:234(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+
+#: groupmems.8.xml:44(refpurpose)
+msgid "administer members of a user's primary group"
+msgstr "administrera medlemmar av en användares primära grupp"
+
+#: groupmems.8.xml:51(replaceable) groupmems.8.xml:52(replaceable)
+msgid "user_name"
+msgstr "användarnamn"
+
+#: groupmems.8.xml:51(arg)
+msgid "-a <placeholder-1/>"
+msgstr "-a <placeholder-1/>"
+
+#: groupmems.8.xml:52(arg)
+msgid "-d <placeholder-1/>"
+msgstr "-d <placeholder-1/>"
+
+#: groupmems.8.xml:53(replaceable)
+msgid "group_name"
+msgstr "gruppnamn"
+
+#: groupmems.8.xml:53(arg)
+msgid "-g <placeholder-1/>"
+msgstr "-g <placeholder-1/>"
+
+#: groupmems.8.xml:54(arg)
+msgid "-l"
+msgstr "-l"
+
+#: groupmems.8.xml:61(para)
+msgid ""
+"The <command>groupmems</command> command allows a user to administer his/her "
+"own group membership list without the requirement of superuser privileges. "
+"The <command>groupmems</command> utility is for systems that configure its "
+"users to be in their own name sake primary group (i.e., guest / guest)."
+msgstr ""
+
+#: groupmems.8.xml:69(para)
+#, fuzzy
+msgid ""
+"Only the superuser, as administrator, can use <command>groupmems</command> "
+"to alter the memberships of other groups."
+msgstr ""
+"Endast superanvändaren, som administratör, kan använda <command>groupmems</"
+"command> för att göra ändringar i medlemskap för andra grupper."
+
+#: groupmems.8.xml:76(para)
+msgid ""
+"The options which apply to the <command>groupmems</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>groupmems</command> är:"
+
+#: groupmems.8.xml:82(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option><replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#: groupmems.8.xml:84(para)
+#, fuzzy
+#| msgid "Add a new user to the group membership list."
+msgid "Add an user to the group membership list."
+msgstr "Lägg till en ny användare till gruppens medlemslista."
+
+#: groupmems.8.xml:85(para) groupmems.8.xml:101(para)
+#: groupmems.8.xml:126(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, and the group has no "
+"entry in the <filename>/etc/gshadow</filename> file, a new entry will be "
+"created."
+msgstr ""
+
+#: groupmems.8.xml:93(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option><replaceable>user_name</"
+"replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>DAGAR</replaceable>"
+
+#: groupmems.8.xml:95(para)
+msgid "Delete a user from the group membership list."
+msgstr "Ta bort en användare från gruppen medlemslista."
+
+#: groupmems.8.xml:96(para)
+msgid ""
+"If the <filename>/etc/gshadow</filename> file exist, the user will be "
+"removed from the list of members and administrators of the group."
+msgstr ""
+
+#: groupmems.8.xml:109(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+msgid ""
+"<option>-g</option>, <option>--group</option><replaceable>group_name</"
+"replaceable>"
+msgstr ""
+"<option>-g</option>, <option>--gid</option><replaceable>GID</replaceable>"
+
+#: groupmems.8.xml:111(para)
+#, fuzzy
+msgid "The superuser can specify which group membership list to modify."
+msgstr "Superanvändaren kan ange vilken grupps medlemslista som ska ändras."
+
+#: groupmems.8.xml:117(term) chage.1.xml:128(term)
+msgid "<option>-l</option>, <option>--list</option>"
+msgstr "<option>-l</option>, <option>--list</option>"
+
+#: groupmems.8.xml:119(para)
+msgid "List the group membership list."
+msgstr "Lista gruppens medlemslista."
+
+#: groupmems.8.xml:123(term)
+#, fuzzy
+#| msgid "<option>-e</option>, <option>--expire</option>"
+msgid "<option>-p</option>, <option>--purge</option>"
+msgstr "<option>-e</option>, <option>--expire</option>"
+
+#: groupmems.8.xml:125(para)
+msgid "Purge all users from the group membership list."
+msgstr "Rensa alla användare från gruppens medlemslista."
+
+#: groupmems.8.xml:137(title)
+msgid "SETUP"
+msgstr ""
+
+#: groupmems.8.xml:138(para)
+msgid ""
+"The <command>groupmems</command> executable should be in mode <literal>2770</"
+"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
+"emphasis>. The system administrator can add users to group <emphasis>groups</"
+"emphasis> to allow or disallow them using the <command>groupmems</command> "
+"utility to manage their own group membership list."
+msgstr ""
+
+#: groupmems.8.xml:147(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2770 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+"    "
+msgstr ""
+"\n"
+"\t$ groupadd -r groups\n"
+"\t$ chmod 2770 groupmems\n"
+"\t$ chown root.groups groupmems\n"
+"\t$ groupmems -g groups -a gk4\n"
+"    "
+
+#: groupmems.8.xml:179(para)
+msgid "secure group account information"
+msgstr "säker gruppkontoinformation"
+
+#: groupmems.8.xml:187(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: groupdel.8.xml:44(refpurpose)
+msgid "delete a group"
+msgstr "ta bort en grupp"
+
+#: groupdel.8.xml:58(para)
+msgid ""
+"The <command>groupdel</command> command modifies the system account files, "
+"deleting all entries that refer to <emphasis remap=\"I\">group</emphasis>. "
+"The named group must exist."
+msgstr ""
+
+#: groupdel.8.xml:66(para)
+msgid ""
+"You may not remove the primary group of any existing user. You must remove "
+"the user before you remove the group."
+msgstr ""
+"Du får inte ta bort den primära gruppen för någon existerande användare. Du "
+"måste ta bort användaren innan du tar bort gruppen."
+
+#: groupdel.8.xml:70(para)
+msgid ""
+"You should manually check all file systems to ensure that no files remain "
+"owned by this group."
+msgstr ""
+
+#: groupdel.8.xml:132(para)
+msgid "can't remove user's primary group"
+msgstr "kan inte ta bort användarens primära grupp"
+
+#: groupdel.8.xml:108(para)
+msgid ""
+"The <command>groupdel</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>groupdel</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: groupdel.8.xml:147(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>userdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>usermod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>"
+
+#: groupadd.8.xml:48(refpurpose)
+msgid "create a new group"
+msgstr "skapa en ny grupp"
+
+#: groupadd.8.xml:65(para)
+msgid ""
+"The <command>groupadd</command> command creates a new group account using "
+"the values specified on the command line plus the default values from the "
+"system. The new group will be entered into the system files as needed."
+msgstr ""
+
+#: groupadd.8.xml:74(para)
+msgid "The options which apply to the <command>groupadd</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>groupadd</command> är:"
+
+#: groupadd.8.xml:84(para)
+msgid ""
+"This option causes the command to simply exit with success status if the "
+"specified group already exists. When used with <option>-g</option>, and the "
+"specified GID already exists, another (unique) GID is chosen (i.e. <option>-"
+"g</option> is turned off)."
+msgstr ""
+
+#: groupadd.8.xml:98(para)
+msgid ""
+"The numerical value of the group's ID. This value must be unique, unless the "
+"<option>-o</option> option is used. The value must be non-negative. The "
+"default is to use the smallest ID value greater than 999 and greater than "
+"every other group. Values between 0 and 999 are typically reserved for "
+"system accounts."
+msgstr ""
+
+#: groupadd.8.xml:118(para)
+msgid ""
+"Overrides <filename>/etc/login.defs</filename> defaults (GID_MIN, GID_MAX "
+"and others). Multiple <option>-K</option> options can be specified."
+msgstr ""
+"Åsidosätter standardvärden i <filename>/etc/login.defs</filename> (GID_MIN, "
+"GID_MAX och andra). Flera flaggor av <option>-K</option> kan anges."
+
+#: groupadd.8.xml:123(para)
+#, fuzzy
+#| msgid ""
+#| "Example: <option>-K </option><replaceable>GID_MIN</"
+#| "replaceable>=<replaceable>100</replaceable><option> -K </"
+#| "option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgid ""
+"Example: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable><option>-K </"
+"option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+msgstr ""
+"Exempel: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>100</replaceable><option> -K </"
+"option><replaceable>GID_MAX</replaceable>=<replaceable>499</replaceable>"
+
+#: groupadd.8.xml:127(para)
+msgid ""
+"Note: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> doesn't work yet."
+msgstr ""
+"Notera: <option>-K </option><replaceable>GID_MIN</"
+"replaceable>=<replaceable>10</replaceable>,<replaceable>GID_MAX</"
+"replaceable>=<replaceable>499</replaceable> fungerar ännu inte."
+
+#: groupadd.8.xml:139(para)
+#, fuzzy
+msgid "This option permits to add a group with a non-unique GID."
+msgstr "Denna flagga tillåter att en grupp med ett icke-unikt GID läggs till."
+
+#: groupadd.8.xml:171(para)
+#, fuzzy
+#| msgid "create a new group"
+msgid "Create a system group."
+msgstr "skapa en ny grupp"
+
+#: groupadd.8.xml:174(para)
+msgid ""
+"The numeric identifiers of new system groups are choosen in the "
+"<option>SYS_GID_MIN</option>-<option>SYS_GID_MAX</option> range, defined in "
+"<filename>login.defs</filename>, instead of <option>GID_MIN</option>-"
+"<option>GID_MAX</option>."
+msgstr ""
+
+#: groupadd.8.xml:225(para)
+#, fuzzy
+#| msgid ""
+#| "Usernames must begin with a lower case letter or an underscore, and only "
+#| "lower case letters, underscores, dashes, and dollar signs may follow. In "
+#| "regular expression terms: [a-z_][a-z0-9_-]*[$]"
+msgid ""
+"Groupnames must start with a lower case letter or an underscore, followed by "
+"lower case letters, digits, underscores, or dashes. They can end with a "
+"dollar sign. In regular expression terms: [a-z_][a-z0-9_-]*[$]?"
+msgstr ""
+"Användarnamn måste börja med en gemen bokstav eller ett understreck och får "
+"endast innehålla gemener, understreck, minustecken och på slutet ett dollar-"
+"tecken. I reguljära uttryckstermer: [a-z_][a-z0-9_-]*[$]"
+
+#: groupadd.8.xml:231(para)
+msgid "Groupnames may only be up to &GROUP_NAME_MAX_LENGTH; characters long."
+msgstr ""
+
+#: groupadd.8.xml:234(para)
+#, fuzzy
+msgid ""
+"You may not add a NIS or LDAP group. This must be performed on the "
+"corresponding server."
+msgstr ""
+"Du får inte lägga till en användare till en NIS-grupp. Detta måste "
+"genomföras på NIS-servern."
+
+#: groupadd.8.xml:238(para)
+msgid ""
+"If the groupname already exists in an external group database such as NIS or "
+"LDAP, <command>groupadd</command> will deny the group creation request."
+msgstr ""
+
+#: groupadd.8.xml:271(para)
+msgid "GID not unique (when <option>-o</option> not used)"
+msgstr "GID inte unikt (när <option>-o</option> inte används)"
+
+#: groupadd.8.xml:277(para)
+msgid "group name not unique"
+msgstr "gruppnamn inte unikt"
+
+#: groupadd.8.xml:247(para)
+msgid ""
+"The <command>groupadd</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>groupadd</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#: groupadd.8.xml:292(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>chsh</"
+"refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>useradd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>userdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: gpasswd.1.xml:49(phrase)
+#, fuzzy
+#| msgid "-r <placeholder-1/>"
+msgid "administer <placeholder-1/>"
+msgstr "-r <placeholder-1/>"
+
+#: gpasswd.1.xml:52(phrase)
+#, fuzzy
+msgid "administer <placeholder-1/> and <placeholder-2/>"
+msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#: gpasswd.1.xml:63(replaceable)
+#, fuzzy
+msgid "option"
+msgstr "flaggor"
+
+#: gpasswd.1.xml:73(para)
+msgid ""
+"The <command>gpasswd</command> command is used to administer <filename>/etc/"
+"group</filename><phrase condition=\"gshadow\">, and <filename>/etc/gshadow</"
+"filename></phrase>. Every group can have <phrase condition=\"gshadow"
+"\">administrators,</phrase> members and a password."
+msgstr ""
+
+#: gpasswd.1.xml:81(para)
+msgid ""
+"System administrators can use the <option>-A</option> option to define group "
+"administrator(s) and the <option>-M</option> option to define members. They "
+"have all rights of group administrators and members."
+msgstr ""
+
+#: gpasswd.1.xml:86(para)
+msgid ""
+"<command>gpasswd</command> called by <phrase condition=\"gshadow\">a group "
+"administrator</phrase><phrase condition=\"no_gshadow\">a system "
+"administrator</phrase> with a group name only prompts for the new password "
+"of the <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:93(para)
+#, fuzzy
+msgid ""
+"If a password is set the members can still use "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> without a password, and non-members must supply the password."
+msgstr ""
+"Referera till <citerefentry><refentrytitle>crypt</"
+"refentrytitle><manvolnum>3</manvolnum></citerefentry> för detaljer om hur "
+"denna sträng tolkas."
+
+#: gpasswd.1.xml:101(title)
+msgid "Notes about group passwords"
+msgstr "Noteringar angående grupplösenord"
+
+#: gpasswd.1.xml:102(para)
+msgid ""
+"Group passwords are an inherent security problem since more than one person "
+"is permitted to know the password. However, groups are a useful tool for "
+"permitting co-operation between different users."
+msgstr ""
+
+#: gpasswd.1.xml:113(para)
+#, fuzzy
+msgid ""
+"Except for the <option>-A</option> and <option>-M</option> options, the "
+"options cannot be combined."
+msgstr ""
+"Flaggorna <option>-r</option>, <option>-h</option> och <option>-f</option> "
+"används endast när <command>login</command> har startats av root."
+
+#: gpasswd.1.xml:117(para)
+msgid "The options cannot be combined."
+msgstr ""
+
+#: gpasswd.1.xml:120(para)
+#, fuzzy
+msgid "The options which apply to the <command>gpasswd</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>passwd</command> är:"
+
+#: gpasswd.1.xml:125(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+msgid ""
+"<option>-a</option>, <option>--add</option><replaceable>user</replaceable>"
+msgstr ""
+"<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#: gpasswd.1.xml:129(para)
+msgid ""
+"Add the <replaceable>user</replaceable> to the named <replaceable>group</"
+"replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:138(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-t</option>, <option>--time</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-d</option>, <option>--delete</option><replaceable>user</replaceable>"
+msgstr ""
+"<option>-t</option>, <option>--time</option><replaceable>DAGAR</replaceable>"
+
+#: gpasswd.1.xml:142(para)
+msgid ""
+"Remove the <replaceable>user</replaceable> from the named "
+"<replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:151(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--remove</option>"
+msgid "<option>-r</option>, <option>--remove-password</option>"
+msgstr "<option>-r</option>, <option>--remove</option>"
+
+#: gpasswd.1.xml:155(para)
+msgid ""
+"Remove the password from the named <replaceable>group</replaceable>. Only "
+"group members will be allowed to use <command>newgrp</command> to join the "
+"named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:166(term)
+#, fuzzy
+#| msgid "<option>-r</option>, <option>--reset</option>"
+msgid "<option>-R</option>, <option>--restrict</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: gpasswd.1.xml:170(para)
+msgid ""
+"Restrict the access to the named <replaceable>group</replaceable>. Only "
+"group members will be allowed to use <command>newgrp</command> to join the "
+"named <replaceable>group</replaceable>."
+msgstr ""
+
+#: gpasswd.1.xml:181(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-A</option>, <option>--administrators</option><replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAGAR</"
+"replaceable>"
+
+#: gpasswd.1.xml:185(para)
+#, fuzzy
+msgid "Set the list of administrative users."
+msgstr "kommaseparerad lista med gruppadministratörer"
+
+#: gpasswd.1.xml:193(term)
+#, fuzzy
+#| msgid ""
+#| "<option>-b</option>, <option>--before</option><replaceable>DAYS</"
+#| "replaceable>"
+msgid ""
+"<option>-M</option>, <option>--members</option><replaceable>user</"
+"replaceable>,..."
+msgstr ""
+"<option>-b</option>, <option>--before</option><replaceable>DAGAR</"
+"replaceable>"
+
+#: gpasswd.1.xml:197(para)
+#, fuzzy
+msgid "Set the list of group members."
+msgstr "kommaseparerad lista med gruppmedlemmar"
+
+#: gpasswd.1.xml:207(para)
+msgid ""
+"This tool only operates on the <filename>/etc/group</filename><phrase "
+"condition=\"gshadow\"> and <filename>/etc/gshadow</filename> files.</"
+"phrase><phrase condition=\"no_gshadow\">file.</phrase> Thus you cannot "
+"change any NIS or LDAP group. This must be performed on the corresponding "
+"server."
+msgstr ""
+
+#: gpasswd.1.xml:252(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupdel</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>group</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry><phrase condition="
+"\"gshadow\">, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry></phrase>."
+msgstr ""
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gshadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupadd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupdel</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>groupmod</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>grpck</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: faillog.8.xml:34(refentrytitle) faillog.8.xml:39(refname)
+#: faillog.8.xml:45(command) faillog.5.xml:34(refentrytitle)
+#: faillog.5.xml:39(refname) faillog.5.xml:86(refentrytitle)
+msgid "faillog"
+msgstr "faillog"
+
+#: faillog.8.xml:40(refpurpose)
+msgid "display faillog records or set login failure limits"
+msgstr ""
+
+#: faillog.8.xml:54(para)
+msgid ""
+"<command>faillog</command> displays the contents of the failure log database "
+"(<filename>/var/log/faillog</filename>). It can also set the failure "
+"counters and limits. When <command>faillog</command> is run without "
+"arguments, it only displays the faillog records of the users who had a login "
+"failure."
+msgstr ""
+
+#: faillog.8.xml:65(para)
+msgid "The options which apply to the <command>faillog</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>faillog</command> är:"
+
+#: faillog.8.xml:73(para)
+msgid ""
+"Display (or act on) faillog records for all users having an entry in the "
+"<filename>faillog</filename> database."
+msgstr ""
+
+#: faillog.8.xml:86(term)
+msgid ""
+"<option>-l</option>, <option>--lock-time</option><replaceable>SEC</"
+"replaceable>"
+msgstr ""
+"<option>-l</option>, <option>--lock-time</option><replaceable>SEK</"
+"replaceable>"
+
+#: faillog.8.xml:91(para)
+#, fuzzy
+#| msgid ""
+#| "Lock account to <replaceable>SEC</replaceable> seconds after failed login."
+msgid ""
+"Lock account for <replaceable>SEC</replaceable> seconds after failed login."
+msgstr ""
+"Lås kontot <replaceable>SEK</replaceable> sekunder efter misslyckad "
+"inloggning."
+
+#: faillog.8.xml:95(para) faillog.8.xml:121(para) faillog.8.xml:133(para)
+msgid ""
+"Write access to <filename>/var/log/faillog</filename> is required for this "
+"option."
+msgstr ""
+
+#: faillog.8.xml:102(term)
+msgid ""
+"<option>-m</option>, <option>--maximum</option><replaceable>MAX</replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--maximum</option><replaceable>MAX</replaceable>"
+
+#: faillog.8.xml:107(para)
+#, fuzzy
+#| msgid ""
+#| "Set the maximum number of days a password remains valid. After "
+#| "<replaceable>MAX_DAYS</replaceable>, the password is required to be "
+#| "changed."
+msgid ""
+"Set the maximum number of login failures after the account is disabled to "
+"<replaceable>MAX</replaceable>."
+msgstr ""
+"Sätter maximalt antal dagar som ett lösenord ska vara giltigt. Efter "
+"<replaceable>MAX_DAGAR</replaceable> krävs det att lösenordet ändras."
+
+#: faillog.8.xml:111(para)
+msgid ""
+"Selecting a <replaceable>MAX</replaceable> value of 0 has the effect of not "
+"placing a limit on the number of failed logins."
+msgstr ""
+
+#: faillog.8.xml:116(para)
+msgid ""
+"The maximum failure count should always be 0 for <emphasis>root</emphasis> "
+"to prevent a denial of services attack against the system."
+msgstr ""
+
+#: faillog.8.xml:128(term)
+msgid "<option>-r</option>, <option>--reset</option>"
+msgstr "<option>-r</option>, <option>--reset</option>"
+
+#: faillog.8.xml:130(para)
+msgid "Reset the counters of login failures."
+msgstr ""
+
+#: faillog.8.xml:144(para)
+msgid ""
+"Display faillog records more recent than <replaceable>DAYS</replaceable>."
+msgstr ""
+
+#: faillog.8.xml:156(para)
+msgid ""
+"Display faillog record or maintains failure counters and limits (if used "
+"with <option>-l</option>, <option>-m</option> or <option>-r</option> "
+"options) only for the specified user(s)."
+msgstr ""
+
+#: faillog.8.xml:174(para)
+#, fuzzy
+#| msgid ""
+#| "The <option>-r</option>, <option>-h</option> and <option>-f</option> "
+#| "options are only used when <command>login</command> is invoked by root."
+msgid ""
+"When none of the <option>-l</option>, <option>-m</option>, or <option>-r</"
+"option> options are used, <command>faillog</command> displays the faillog "
+"record of the specified user(s)."
+msgstr ""
+"Flaggorna <option>-r</option>, <option>-h</option> och <option>-f</option> "
+"används endast när <command>login</command> har startats av root."
+
+#: faillog.8.xml:179(para)
+msgid ""
+"NOTE: in display mode, only the records of users which currently exist in "
+"the system are displayed. In the other modes (when the <option>-l</option>, "
+"<option>-m</option>, or <option>-r</option> options are used), the records "
+"of the user, or the range of users, or all the users that may have an entry "
+"in the faillog database will be changed. This is useful to reset records of "
+"users that have been deleted or set a policy in advance for a range of users."
+msgstr ""
+
+#: faillog.8.xml:192(para)
+msgid ""
+"<command>faillog</command> only prints out users with no successful login "
+"since the last failure. To print out a user who has had a successful login "
+"since their last failure, you must explicitly request the user with the "
+"<option>-u</option> flag, or print out all users with the <option>-a</"
+"option> flag."
+msgstr ""
+
+#: faillog.8.xml:205(filename) faillog.5.xml:74(filename)
+msgid "/var/log/faillog"
+msgstr "/var/log/faillog"
+
+#: faillog.8.xml:207(para) faillog.5.xml:76(para)
+msgid "Failure logging file."
+msgstr ""
+
+#: faillog.8.xml:215(para)
+msgid ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>faillog</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: faillog.5.xml:40(refpurpose)
+msgid "login failure logging file"
+msgstr ""
+
+#: faillog.5.xml:45(para)
+msgid ""
+"<filename>/var/log/faillog</filename> maintains a count of login failures "
+"and the limits for each account."
+msgstr ""
+
+#: faillog.5.xml:49(para)
+msgid ""
+"The file contains fixed length records, indexed by numerical UID. Each "
+"record contains the count of login failures since the last successful login; "
+"the maximum number of failures before the account is disabled; the line on "
+"whiche the last login failure occurred; the date of the last login failure; "
+"and the duration (in seconds) during which the account will be locked after "
+"a failure."
+msgstr ""
+
+#: faillog.5.xml:59(para)
+msgid "The structure of the file is:"
+msgstr "Strukturen för filen är:"
+
+#: faillog.5.xml:60(programlisting)
+#, no-wrap
+msgid ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort   fail_cnt;\n"
+"\tshort   fail_max;\n"
+"\tchar    fail_line[12];\n"
+"\ttime_t  fail_time;\n"
+"\tlong    fail_locktime;\n"
+"};"
+msgstr ""
+"\n"
+"struct\tfaillog {\n"
+"\tshort   fail_cnt;\n"
+"\tshort   fail_max;\n"
+"\tchar    fail_line[12];\n"
+"\ttime_t  fail_time;\n"
+"\tlong    fail_locktime;\n"
+"};"
+
+#: expiry.1.xml:41(refentrytitle) expiry.1.xml:46(refname)
+#: expiry.1.xml:52(command)
+msgid "expiry"
+msgstr "expiry"
+
+#: expiry.1.xml:47(refpurpose)
+msgid "check and enforce password expiration policy"
+msgstr "kontrollera och upprätthåll policy för lösenordsutgång"
+
+#: expiry.1.xml:60(para)
+msgid ""
+"The <command>expiry</command> command checks (<option>-c</option>) the "
+"current password expiration and forces (<option>-f</option>) changes when "
+"required. It is callable as a normal user command."
+msgstr ""
+
+#: expiry.1.xml:87(para) chage.1.xml:262(para)
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>shadow</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>."
+
+#: chsh.1.xml:46(refpurpose)
+msgid "change login shell"
+msgstr "ändra inloggningsskal"
+
+#: chsh.1.xml:63(para)
+msgid ""
+"The <command>chsh</command> command changes the user login shell. This "
+"determines the name of the user's initial login command. A normal user may "
+"only change the login shell for her own account, the superuser may change "
+"the login shell for any account."
+msgstr ""
+
+#: chsh.1.xml:74(para)
+msgid "The options which apply to the <command>chsh</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>chsh</command> är:"
+
+#: chsh.1.xml:96(para)
+msgid ""
+"If the <option>-s</option> option is not selected, <command>chsh</command> "
+"operates in an interactive fashion, prompting the user with the current "
+"login shell. Enter the new value to change the shell, or leave the line "
+"blank to use the current one. The current shell is displayed between a pair "
+"of <emphasis>[ ]</emphasis> marks."
+msgstr ""
+
+#: chsh.1.xml:107(para)
+msgid ""
+"The only restriction placed on the login shell is that the command name must "
+"be listed in <filename>/etc/shells</filename>, unless the invoker is the "
+"superuser, and then any value may be added. An account with a restricted "
+"login shell may not change her login shell. For this reason, placing "
+"<filename>/bin/rsh</filename> in <filename>/etc/shells</filename> is "
+"discouraged since accidentally changing to a restricted shell would prevent "
+"the user from ever changing her login shell back to its original value."
+msgstr ""
+
+#: chsh.1.xml:142(filename)
+msgid "/etc/shells"
+msgstr "/etc/shells"
+
+#: chsh.1.xml:144(para)
+msgid "List of valid login shells."
+msgstr "Lista på giltiga inloggningsskal."
+
+#: chsh.1.xml:158(para)
+msgid ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chpasswd.8.xml:47(refpurpose)
+msgid "update passwords in batch mode"
+msgstr "uppdatera lösenord i satsläge"
+
+#: chpasswd.8.xml:61(para)
+#, fuzzy
+msgid ""
+"The <command>chpasswd</command> command reads a list of user name and "
+"password pairs from standard input and uses this information to update a "
+"group of existing users. Each line is of the format:"
+msgstr ""
+"<command>chgpasswd</command> läser en lista på gruppnamn och lösenordspar "
+"från standard in och använder denna information för att uppdatera en "
+"uppsättning redan existerande grupper. Varje rad är i formatet:"
+
+#: chpasswd.8.xml:66(para)
+msgid ""
+"<emphasis remap=\"I\">user_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">användarnamn</emphasis>:<emphasis remap=\"I"
+"\">lösenord</emphasis>"
+
+#: chpasswd.8.xml:71(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chpasswd</command>. Also the password age will be updated, if "
+"present."
+msgstr ""
+"Som standard måste det insända lösenordet vara i klartext. "
+"Standardkrypteringsalgoritmen är DES."
+
+#: chpasswd.8.xml:76(para) chgpasswd.8.xml:75(para)
+msgid ""
+"The default encryption algorithm can be defined for the system with the "
+"ENCRYPT_METHOD variable of <filename>/etc/login.defs</filename>, and can be "
+"overwiten with the <option>-e</option>, <option>-m</option>, or <option>-c</"
+"option> options."
+msgstr ""
+
+#: chpasswd.8.xml:82(para)
+msgid ""
+"<command>chpasswd</command> first update the password in memory, and then "
+"commit all the changes to disk if no errors occured for any users."
+msgstr ""
+
+#: chpasswd.8.xml:89(para)
+#, fuzzy
+#| msgid "Supplied passwords are in encrypted form."
+msgid "The supplied passwords must be in clear-text."
+msgstr "Insända lösenord är i ett krypterat format."
+
+#: chpasswd.8.xml:92(para)
+msgid ""
+"PAM is used to update the password in the system database according to the "
+"PAM chpasswd configuration."
+msgstr ""
+
+#: chpasswd.8.xml:96(para)
+msgid ""
+"When <command>chpasswd</command> fails to update a password, it continues "
+"updating the passwords of the next users, and will return an error code on "
+"exit."
+msgstr ""
+
+#: chpasswd.8.xml:102(para) chgpasswd.8.xml:81(para)
+msgid ""
+"This command is intended to be used in a large system environment where many "
+"accounts are created at a single time."
+msgstr ""
+
+#: chpasswd.8.xml:110(para)
+msgid "The options which apply to the <command>chpasswd</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>chpasswd</command> är:"
+
+#: chpasswd.8.xml:119(para) chgpasswd.8.xml:98(para)
+msgid "The available methods are DES, MD5, and NONE."
+msgstr ""
+
+#: chpasswd.8.xml:129(term) chgpasswd.8.xml:108(term)
+msgid "<option>-e</option>, <option>--encrypted</option>"
+msgstr "<option>-e</option>, <option>--encrypted</option>"
+
+#: chpasswd.8.xml:131(para) chgpasswd.8.xml:110(para)
+msgid "Supplied passwords are in encrypted form."
+msgstr "Insända lösenord är i ett krypterat format."
+
+#: chpasswd.8.xml:145(term) chgpasswd.8.xml:120(term)
+msgid "<option>-m</option>, <option>--md5</option>"
+msgstr "<option>-m</option>, <option>--md5</option>"
+
+#: chpasswd.8.xml:147(para) chgpasswd.8.xml:122(para)
+msgid ""
+"Use MD5 encryption instead of DES when the supplied passwords are not "
+"encrypted."
+msgstr ""
+"Använd MD5-kryptering istället för DES när insända lösenord inte är "
+"krypterade."
+
+#: chpasswd.8.xml:183(para) chgpasswd.8.xml:158(para)
+msgid ""
+"Remember to set permissions or umask to prevent readability of unencrypted "
+"files by other users."
+msgstr ""
+"Kom ihåg att ställa in rättigheter eller umask för att förhindra läsning av "
+"okrypterade filer för andra användare."
+
+#: chpasswd.8.xml:229(filename)
+#, fuzzy
+#| msgid "/etc/passwd"
+msgid "/etc/pam.d/chpasswd"
+msgstr "/etc/passwd"
+
+#: chpasswd.8.xml:231(para)
+msgid "PAM configuration for <command>chpasswd</command>."
+msgstr ""
+
+#: chpasswd.8.xml:239(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>newusers</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, <phrase condition="
+"\"no_pam\"><citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, </"
+"phrase><citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>passwd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>usermod</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#: chgpasswd.8.xml:48(refpurpose)
+msgid "update group passwords in batch mode"
+msgstr "uppdatera grupplösenord i satsläge"
+
+#: chgpasswd.8.xml:62(para)
+#, fuzzy
+msgid ""
+"The <command>chgpasswd</command> command reads a list of group name and "
+"password pairs from standard input and uses this information to update a set "
+"of existing groups. Each line is of the format:"
+msgstr ""
+"<command>chgpasswd</command> läser en lista på gruppnamn och lösenordspar "
+"från standard in och använder denna information för att uppdatera en "
+"uppsättning redan existerande grupper. Varje rad är i formatet:"
+
+#: chgpasswd.8.xml:67(para)
+msgid ""
+"<emphasis remap=\"I\">group_name</emphasis>:<emphasis remap=\"I\">password</"
+"emphasis>"
+msgstr ""
+"<emphasis remap=\"I\">gruppnamn</emphasis>:<emphasis remap=\"I\">lösenord</"
+"emphasis>"
+
+#: chgpasswd.8.xml:71(para)
+#, fuzzy
+msgid ""
+"By default the supplied password must be in clear-text, and is encrypted by "
+"<command>chgpasswd</command>."
+msgstr ""
+"Som standard måste det insända lösenordet vara i klartext. "
+"Standardkrypteringsalgoritmen är DES."
+
+#: chgpasswd.8.xml:89(para)
+msgid ""
+"The options which apply to the <command>chgpasswd</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>chgpasswd</command> är:"
+
+#: chgpasswd.8.xml:209(para)
+#, fuzzy
+msgid ""
+"<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+"manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+"refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>login.defs</refentrytitle><manvolnum>5</"
+"manvolnum></citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chfn.1.xml:47(refpurpose)
+msgid "change real user name and information"
+msgstr "ändra verkligt användarnamn och information"
+
+#: chfn.1.xml:53(replaceable)
+msgid "full_name"
+msgstr "fullständigt_namn"
+
+#: chfn.1.xml:53(arg)
+msgid "-f <placeholder-1/>"
+msgstr "-f <placeholder-1/>"
+
+#: chfn.1.xml:54(replaceable)
+msgid "room_no"
+msgstr "rumsnummer"
+
+#: chfn.1.xml:55(replaceable)
+msgid "work_ph"
+msgstr "arbetstelefon"
+
+#: chfn.1.xml:55(arg)
+msgid "-w <placeholder-1/>"
+msgstr "-w <placeholder-1/>"
+
+#: chfn.1.xml:56(replaceable)
+msgid "home_ph"
+msgstr "hemtelefon"
+
+#: chfn.1.xml:57(replaceable)
+msgid "other"
+msgstr "övrigt"
+
+#: chfn.1.xml:57(arg)
+msgid "-o <placeholder-1/>"
+msgstr "-o <placeholder-1/>"
+
+#: chfn.1.xml:64(para)
+msgid ""
+"The <command>chfn</command> command changes user fullname, office number, "
+"office extension, and home phone number information for a user's account. "
+"This information is typically printed by "
+"<citerefentry><refentrytitle>finger</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry> and similar programs. A normal user may only change the fields "
+"for her own account, subject to the restrictions in <filename>/etc/login."
+"defs</filename>. (The default configuration is to prevent users from "
+"changing their fullname.) The superuser may change any field for any "
+"account. Additionally, only the superuser may use the <option>-o</option> "
+"option to change the undefined portions of the GECOS field."
+msgstr ""
+
+#: chfn.1.xml:78(para)
+msgid ""
+"These fields must not contain any colons. Except for the <emphasis remap=\"I"
+"\">other</emphasis> field, they should not contain any comma or equal sign. "
+"It is also recommended to avoid non-US-ASCII characters, but this is only "
+"enforced for the phone numbers. The <emphasis remap=\"I\">other</emphasis> "
+"field is used to store accounting information used by other applications."
+msgstr ""
+
+#: chfn.1.xml:87(para)
+msgid ""
+"If none of the options are selected, <command>chfn</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis remap=\"B\">[ ]</emphasis> marks. Without options, <command>chfn</"
+"command> prompts for the current user account."
+msgstr ""
+
+#: chfn.1.xml:132(para)
+msgid ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+msgstr ""
+"<citerefentry><refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum></"
+"citerefentry>, <citerefentry><refentrytitle>login.defs</"
+"refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+"<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></"
+"citerefentry>."
+
+#: chage.1.xml:34(refentrytitle) chage.1.xml:39(refname)
+#: chage.1.xml:44(command)
+msgid "chage"
+msgstr "chage"
+
+#: chage.1.xml:40(refpurpose)
+msgid "change user password expiry information"
+msgstr "ändra åldringsinformation för användarlösenord"
+
+#: chage.1.xml:56(para)
+msgid ""
+"The <command>chage</command> command changes the number of days between "
+"password changes and the date of the last password change. This information "
+"is used by the system to determine when a user must change his/her password."
+msgstr ""
+
+#: chage.1.xml:66(para)
+msgid "The options which apply to the <command>chage</command> command are:"
+msgstr "Flaggorna som gäller för kommandot <command>chage</command> är:"
+
+#: chage.1.xml:71(term)
+msgid ""
+"<option>-d</option>, <option>--lastday</option><replaceable>LAST_DAY</"
+"replaceable>"
+msgstr ""
+"<option>-d</option>, <option>--lastday</option><replaceable>SISTA_DAG</"
+"replaceable>"
+
+#: chage.1.xml:75(para)
+msgid ""
+"Set the number of days since January 1st, 1970 when the password was last "
+"changed. The date may also be expressed in the format YYYY-MM-DD (or the "
+"format more commonly used in your area)."
+msgstr ""
+
+#: chage.1.xml:83(term)
+msgid ""
+"<option>-E</option>, <option>--expiredate</option><replaceable>EXPIRE_DATE</"
+"replaceable>"
+msgstr ""
+"<option>-E</option>, <option>--expiredate</option><replaceable>UTGÅNGSDATUM</"
+"replaceable>"
+
+#: chage.1.xml:87(para)
+msgid ""
+"Set the date or number of days since January 1, 1970 on which the user's "
+"account will no longer be accessible. The date may also be expressed in the "
+"format YYYY-MM-DD (or the format more commonly used in your area). A user "
+"whose account is locked must contact the system administrator before being "
+"able to use the system again."
+msgstr ""
+
+#: chage.1.xml:95(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>EXPIRE_DATE</replaceable> will remove an account expiration "
+"date."
+msgstr ""
+
+#: chage.1.xml:109(term)
+msgid ""
+"<option>-I</option>, <option>--inactive</option><replaceable>INACTIVE</"
+"replaceable>"
+msgstr ""
+"<option>-I</option>, <option>--inactive</option><replaceable>INAKTIV</"
+"replaceable>"
+
+#: chage.1.xml:113(para)
+msgid ""
+"Set the number of days of inactivity after a password has expired before the "
+"account is locked. The <replaceable>INACTIVE</replaceable> option is the "
+"number of days of inactivity. A user whose account is locked must contact "
+"the system administrator before being able to use the system again."
+msgstr ""
+
+#: chage.1.xml:120(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as the "
+"<replaceable>INACTIVE</replaceable> will remove an account's inactivity."
+msgstr ""
+
+#: chage.1.xml:132(para)
+msgid "Show account aging information."
+msgstr "Visa kontots åldringsinformation"
+
+#: chage.1.xml:138(term)
+msgid ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-m</option>, <option>--mindays</option><replaceable>MIN_DAGAR</"
+"replaceable>"
+
+#: chage.1.xml:150(term)
+msgid ""
+"<option>-M</option>, <option>--maxdays</option><replaceable>MAX_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-M</option>, <option>--maxdays</option><replaceable>MAX_DAGAR</"
+"replaceable>"
+
+#: chage.1.xml:154(para)
+msgid ""
+"Set the maximum number of days during which a password is valid. When "
+"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
+"is less than the current day, the user will be required to change his/her "
+"password before being able to use his/her account. This occurrence can be "
+"planned for in advance by use of the <option>-W</option> option, which "
+"provides the user with advance warning."
+msgstr ""
+
+#: chage.1.xml:163(para)
+msgid ""
+"Passing the number <emphasis remap=\"I\">-1</emphasis> as "
+"<replaceable>MAX_DAYS</replaceable> will remove checking a password's "
+"validity."
+msgstr ""
+
+#: chage.1.xml:171(term)
+msgid ""
+"<option>-W</option>, <option>--warndays</option><replaceable>WARN_DAYS</"
+"replaceable>"
+msgstr ""
+"<option>-W</option>, <option>--warndays</option><replaceable>VARN_DAGAR</"
+"replaceable>"
+
+#: chage.1.xml:175(para)
+msgid ""
+"Set the number of days of warning before a password change is required. The "
+"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
+"the password expiring that a user will be warned his/her password is about "
+"to expire."
+msgstr ""
+
+#: chage.1.xml:184(para)
+msgid ""
+"If none of the options are selected, <command>chage</command> operates in an "
+"interactive fashion, prompting the user with the current values for all of "
+"the fields. Enter the new value to change the field, or leave the line blank "
+"to use the current value. The current value is displayed between a pair of "
+"<emphasis>[ ]</emphasis> marks."
+msgstr ""
+
+#: chage.1.xml:194(para)
+msgid ""
+"The <command>chage</command> program requires a shadow password file to be "
+"available."
+msgstr ""
+"Programmet <command>chage</command> kräver att en skugglösenordsfil finns "
+"tillgänglig."
+
+#: chage.1.xml:198(para)
+msgid ""
+"The <command>chage</command> command is restricted to the root user, except "
+"for the <option>-l</option> option, which may be used by an unprivileged "
+"user to determine when his/her password or account is due to expire."
+msgstr ""
+
+#: chage.1.xml:251(replaceable)
+msgid "15"
+msgstr "15"
+
+#: chage.1.xml:253(para)
+msgid "can't find the shadow password file"
+msgstr "kan inte hitta skugglösenordsfilen"
+
+#: chage.1.xml:229(para)
+msgid ""
+"The <command>chage</command> command exits with the following values: "
+"<placeholder-1/>"
+msgstr ""
+"Kommandot <command>chage</command> avslutas med följande värden: "
+"<placeholder-1/>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: chage.1.xml:0(None)
+msgid "translator-credits"
+msgstr "Daniel Nylander <po@danielnylander.se>, 2006."
+
+#, fuzzy
+#~ msgid "and <placeholder-1/> files"
+#~ msgstr "-a <placeholder-1/>"
+
+#~ msgid "encrypted password file"
+#~ msgstr "krypterad lösenordsfil"
+
+#~ msgid "comma-separated list of group administrators"
+#~ msgstr "kommaseparerad lista med gruppadministratörer"
+
+#~ msgid "days since Jan 1, 1970 that password was last changed"
+#~ msgstr "dagar sedan 1:a januari, 1970 som lösenordet senast ändrades"
+
+#~ msgid "days after which password must be changed"
+#~ msgstr "dagar efter vilket lösenordet måste ändras"
+
+#~ msgid "days before password is to expire that user is warned"
+#~ msgstr "dagar innan lösenordet går ut som användaren varnas"
+
+#~ msgid "days after password expires that account is disabled"
+#~ msgstr "dagar efter att lösenordet gått ut och kontot inaktiveras"
+
+#~ msgid "days since Jan 1, 1970 that account is disabled"
+#~ msgstr "dagar sedan 1:a januari 1970 som kontot är inaktiverat"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>chage</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></"
+#~ "citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>getent</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>login</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>su</"
+#~ "refentrytitle><manvolnum>1</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>crypt</refentrytitle><manvolnum>3</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>getpwnam</"
+#~ "refentrytitle><manvolnum>3</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>pwconv</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>pwunconv</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>sulogin</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#, fuzzy
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>gpasswd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>newgrp</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid "-a"
+#~ msgstr "-a"
+
+#~ msgid "-d"
+#~ msgstr "-d"
+
+#~ msgid "-g"
+#~ msgstr "-g"
+
+#~ msgid "GID"
+#~ msgstr "GID"
+
+#~ msgid "-o"
+#~ msgstr "-o"
+
+#~ msgid "KEY"
+#~ msgstr "NYCKEL"
+
+#~ msgid "VALUE"
+#~ msgstr "VÄRDE"
+
+#~ msgid "-K <placeholder-1/>=<placeholder-2/>"
+#~ msgstr "-K <placeholder-1/>=<placeholder-2/>"
+
+#, fuzzy
+#~ msgid "-R"
+#~ msgstr "-"
+
+#, fuzzy
+#~ msgid "<option>-A</option><replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#, fuzzy
+#~ msgid "<option>-M</option><replaceable>user</replaceable>,..."
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--uid</option><replaceable>UID</replaceable>"
+
+#~ msgid ""
+#~ "<option>-u</option>, <option>--user</option><replaceable>LOGIN</"
+#~ "replaceable>"
+#~ msgstr ""
+#~ "<option>-u</option>, <option>--user</option><replaceable>INLOGGNINGSNAMN</"
+#~ "replaceable>"
+
+#~ msgid ""
+#~ "Your password must be easily remembered so that you will not be forced to "
+#~ "write it on a piece of paper. This can be accomplished by appending two "
+#~ "small words together and separating each with a special character or "
+#~ "digit. For example, Pass%word."
+#~ msgstr ""
+#~ "Ditt lösenord måste vara lätt att komma ihåg så att du inte behöver "
+#~ "skriva ner det på en papperslapp. Detta kan göras genom att lägga till "
+#~ "två små ord tillsammans och separera dem med ett specialtecken eller "
+#~ "siffra. Till exempel, Pass%word."
+
+#~ msgid ""
+#~ "Other methods of construction involve selecting an easily remembered "
+#~ "phrase from literature and selecting the first or last letter from each "
+#~ "word. An example of this is:"
+#~ msgstr ""
+#~ "Andra metoder för att konstruera lösenord är att välja en literär fras "
+#~ "som är lätt att komma ihåg och välja den första eller sista bokstaven "
+#~ "från varje ord. Ett exempel på detta är:"
+
+#~ msgid "Ask not for whom the bell tolls"
+#~ msgstr "Fråga inte för vem klockorna ringer klockan 3"
+
+#~ msgid "which produces"
+#~ msgstr "som blir"
+
+#~ msgid "An4wtbt"
+#~ msgstr "Fifvkrk3"
+
+#~ msgid ""
+#~ "You may be reasonably sure few crackers will have included this in their "
+#~ "dictionaries. You should, however, select your own methods for "
+#~ "constructing passwords and not rely exclusively on the methods given here."
+#~ msgstr ""
+#~ "Du kan vara hyffsat säker på att få hackare har inkluderat detta i sina "
+#~ "ordböcker. Du bör dock välja dina egna metoder för att konstruera "
+#~ "lösenord och inte enbart förlita dig på de metoder som anges här."
+
+#~ msgid ""
+#~ "The <option>-t</option> flag overrides the use of <option>-u</option>."
+#~ msgstr ""
+#~ "Flaggan <option>-t</option> åsidosätter användningen av <option>-u</"
+#~ "option>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>group</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>passwd</"
+#~ "refentrytitle><manvolnum>5</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>shadow</refentrytitle><manvolnum>5</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupmod</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "MAIL_DIR USERDEL_CMD"
+#~ msgstr "MAIL_DIR USERDEL_CMD"
+
+#~ msgid "MAIL_DIR"
+#~ msgstr "MAIL_DIR"
+
+#~ msgid "CHFN_AUTH"
+#~ msgstr "CHFN_AUTH"
+
+#~ msgid "GID_MAX GID_MIN"
+#~ msgstr "GID_MAX GID_MIN"
+
+#~ msgid "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+#~ msgstr "PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE UMASK"
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>passwd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>newusers</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>, "
+#~ "<citerefentry><refentrytitle>useradd</refentrytitle><manvolnum>8</"
+#~ "manvolnum></citerefentry>."
+
+#~ msgid ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+#~ msgstr ""
+#~ "<citerefentry><refentrytitle>gpasswd</refentrytitle><manvolnum>1</"
+#~ "manvolnum></citerefentry>, <citerefentry><refentrytitle>groupadd</"
+#~ "refentrytitle><manvolnum>8</manvolnum></citerefentry>."
+
+#~ msgid "-R <placeholder-1/>"
+#~ msgstr "-R <placeholder-1/>"
+
+#~ msgid "user,"
+#~ msgstr "användare,"
+
+#~ msgid "-A <placeholder-1/>"
+#~ msgstr "-A <placeholder-1/>"
+
+#~ msgid "-M <placeholder-1/>"
+#~ msgstr "-M <placeholder-1/>"
diff --git a/man/porttime.5 b/man/porttime.5
new file mode 100644 (file)
index 0000000..8e5a7db
--- /dev/null
@@ -0,0 +1,89 @@
+'\" t
+.\"     Title: porttime
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: English
+.\"
+.TH "PORTTIME" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+porttime \- port access time file
+.SH "DESCRIPTION"
+.PP
+
+\fIporttime\fR
+contains a list of tty devices, user names, and permitted login times\&.
+.PP
+Each entry consists of three colon separated fields\&. The first field is a comma separated list of tty devices, or an asterisk to indicate that all tty devices are matched by this entry\&. The second field is a comma separated list of user names, or an asterisk to indicated that all user names are matched by this entry\&. The third field is a comma separated list of permitted access times\&.
+.PP
+Each access time entry consists of zero or more days of the week, abbreviated
+\fISu\fR,
+\fIMo\fR,
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR, and
+\fISa\fR, followed by a pair of times separated by a hyphen\&. The abbreviation
+\fIWk\fR
+may be used to represent Monday thru Friday, and
+\fIAl\fR
+may be used to indicate every day\&. If no days are given,
+\fIAl\fR
+is assumed\&.
+.SH "EXAMPLES"
+.PP
+The following entry allows access to user
+\fBjfh\fR
+on every port during weekdays from 9am to 5pm\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+The following entries allow access only to the users
+\fIroot\fR
+and
+\fIoper\fR
+on
+/dev/console
+at any time\&. This illustrates how the
+/etc/porttime
+file is an ordered list of access times\&. Any other user would match the second entry which does not permit access at any time\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      console:root,oper:Al0000\-2400
+      console:*:
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The following entry allows access for the user
+\fIgames\fR
+on any port during non\-working hours\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "FILES"
+.PP
+/etc/porttime
+.RS 4
+File containing port access\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBlogin\fR(1)\&.
diff --git a/man/porttime.5.xml b/man/porttime.5.xml
new file mode 100644 (file)
index 0000000..95c19c9
--- /dev/null
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1989 - 1990, Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='porttime.5'>
+  <!--  $Id: porttime.5.xml 2435 2008-10-11 11:44:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>porttime</refentrytitle>
+    <manvolnum>5</manvolnum>
+    <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>porttime</refname>
+    <refpurpose>port access time file</refpurpose>
+  </refnamediv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      <emphasis remap='I'>porttime</emphasis> contains a list of tty
+      devices, user names, and permitted login times.
+    </para>
+
+    <para>
+      Each entry consists of three colon separated fields. The first field
+      is a comma separated list of tty devices, or an asterisk to indicate
+      that all tty devices are matched by this entry. The second field is a
+      comma separated list of user names, or an asterisk to indicated that
+      all user names are matched by this entry. The third field is a comma
+      separated list of permitted access times.
+    </para>
+
+    <para>
+      Each access time entry consists of zero or more days of the week,
+      abbreviated <emphasis>Su</emphasis>, <emphasis>Mo</emphasis>,
+      <emphasis>Tu</emphasis>, <emphasis>We</emphasis>,
+      <emphasis>Th</emphasis>, <emphasis>Fr</emphasis>, and
+      <emphasis>Sa</emphasis>, followed by a pair of times separated by a
+      hyphen. The abbreviation <emphasis>Wk</emphasis> may be used to
+      represent Monday thru Friday, and <emphasis>Al</emphasis> may be used
+      to indicate every day. If no days are given, <emphasis>Al</emphasis>
+      is assumed.
+    </para>
+  </refsect1>
+
+  <refsect1 id='examples'>
+    <title>EXAMPLES</title>
+    <para>
+      The following entry allows access to user <emphasis
+      remap='B'>jfh</emphasis> on every port during weekdays from 9am to
+      5pm.
+    </para>
+
+    <para>     *:jfh:Wk0900-1700</para>
+
+    <para>
+      The following entries allow access only to the users
+      <emphasis>root</emphasis> and <emphasis>oper</emphasis> on
+      <filename>/dev/console</filename> at any time. This illustrates how
+      the <filename>/etc/porttime</filename> file is an ordered list of
+      access times. Any other user would match the second entry which does
+      not permit access at any time.
+    </para>
+
+    <programlisting>
+      console:root,oper:Al0000-2400
+      console:*:
+    </programlisting>
+
+    <para>
+      The following entry allows access for the user
+      <emphasis>games</emphasis> on any port during non-working hours. 
+    </para>
+
+    <para>     *:games:Wk1700-0900,SaSu0000-2400</para>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/porttime</filename></term>
+       <listitem>
+         <para>File containing port access.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/pt_BR/Makefile.am b/man/pt_BR/Makefile.am
new file mode 100644 (file)
index 0000000..3ad9574
--- /dev/null
@@ -0,0 +1,12 @@
+
+mandir = @mandir@/pt_BR
+
+man_MANS = \
+       gpasswd.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       passwd.5 \
+       shadow.5
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/pt_BR/Makefile.in b/man/pt_BR/Makefile.in
new file mode 100644 (file)
index 0000000..16f5f3c
--- /dev/null
@@ -0,0 +1,515 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/pt_BR
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+       "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/pt_BR
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+       gpasswd.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       passwd.5 \
+       shadow.5
+
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/pt_BR/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/pt_BR/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man5 install-man8 install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/pt_BR/gpasswd.1 b/man/pt_BR/gpasswd.1
new file mode 100644 (file)
index 0000000..3b02203
--- /dev/null
@@ -0,0 +1,93 @@
+.\" Copyright 1996, Rafal Maszkowski, rzm@pdi.net
+.\"
+.\" É permitida a confecção e distribuição deste manual, devidamente
+.\" acompanhado dos avisos de direitos autorais e desta permissão
+.\" em todas as cópias.
+.\"
+.\" É permitida a cópia e distribuição de versões modificadas deste manual
+.\" sob as condições acima, e que todo o trabalho derivado seja distribuido
+.\"  sob  as mesmas condições deste manual.
+.\" 
+.\" Uma vez que o kernel do Linux e suas bibliotecas estão constantemente
+.\" mudando, esta página de manual poderá estar incorreta ou desatualizada.
+.\" O(s) autor(es) não assumem responsabilidade por erros ou omissões, 
+.\"  ou por danos resultantes do uso das informações aqui contidas. 
+.\"
+.\" Versões formatadas ou processadas deste manual, desacompanhadas dos
+.\" fontes, devem conter a autorização e os direitos autorais dos autores do
+.\" trabalho.
+.\"
+.\" Você deve receber uma cópia da Licença Pública GNU
+.\" junto com este manual; caso contrário, escreva para a Free Software
+.\" Foundation, Inc., 675 mass Ave, Cambridge, MA 02139 USA ou
+.\" em português na Conectiva Informática \- http://www.conectiva.com.br
+.\"
+.\"    $Id: gpasswd.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH GPASSWD 1
+.SH NOME
+gpasswd \- administra o arquivo \fI/etc/group\fR
+.br
+.SH SINOPSE
+\fBgpasswd\fR \fIgrupo\fR
+.br
+\fBgpasswd \-a\fR \fIusuário\fR \fIgrupo\fR
+.br
+\fBgpasswd \-d\fR \fIusuário\fR \fIgrupo\fR
+.br
+\fBgpasswd \-R\fR \fIgrupo\fR
+.br
+.B gpasswd
+.B \-r
+\fIgrupo\fR
+.br
+.B gpasswd
+.RB [ \-A
+\fIusuário\fR,...]
+.RB [ \-M
+\fIusuário\fR,...]
+\fIgrupo\fR
+.br
+.SH DESCRIÇÃO
+O
+.B gpasswd
+é utilizado para administrar o arquivo \fI/etc/group\fR (e o arquivo
+\fI/etc/gshadow\fR, caso compilado com SHADOWGRP).
+Todos os grupos podem ter administradores, membros e uma senha. O
+administrador do sistema pode usar a opção \fB\-A\fR para definir o
+administrador do grupo e \fB\-M\fR para definir os membros e todos os seus
+direitos assim como os do administrador.
+.PP
+Administradores de grupos podem adicionar e excluir usuários utilizando as
+opções \fB\-a\fR e \fB\-d\fR respectivamente. Administradores podem usar a opção
+\fB\-r\fR  para remover a senha de um grupo. Quando não há senhas definidas
+para um grupo, somente os membros do grupo podem usar o comando
+.BR newgrp (1) 
+para adicionar novos usuários ao grupo . A opção  \fB\-R\fR 
+desabilita o acesso ao grupo através do comando 
+.BR newgrp (1)
+.
+.PP
+O
+.B gpasswd
+executado pelo administrador do grupo seguido pelo nome 
+solicitará a senha do grupo. Caso o comando 
+.BR newgrp (1)
+esteja habilitado para outros usuários do grupo sem o uso de senha, não
+membros podem também executar o comando, informando porém a senha do grupo.
+.SH ARQUIVOS
+\fI/etc/group\fR       \- informações do grupo
+.br
+\fI/etc/gshadow\fR     \- informações do grupo em arquivo shadow
+.SH VEJA TAMBÉM
+.BR newgrp (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR grpck (8)
+.SH TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
+Sandro Nunes Henrique <sandro@conectiva.com.br> (tradução)
+.br
+Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br> (revisão)
+.br
+Guilherme de S. Pastore <gpastore@colband.com.br> (revisão)
diff --git a/man/pt_BR/groupadd.8 b/man/pt_BR/groupadd.8
new file mode 100644 (file)
index 0000000..0df502e
--- /dev/null
@@ -0,0 +1,83 @@
+.\" Copyright 1991, Julianne Frances Haugh
+.\" Todos os direitos reservados.
+.\"
+.\" É permitida a confecção e distribuição deste manual, devidamente
+.\" acompanhado dos avisos de direitos autorais e desta permissão
+.\" em todas as cópias.
+.\"
+.\" É permitida a cópia e distribuição de versões modificadas deste manual
+.\" sob as condições acima, e que todo o trabalho derivado seja distribuído
+.\" sob  as mesmas condições deste manual.
+.\" 
+.\" Uma vez que o kernel do Linux e suas bibliotecas estão constantemente
+.\" mudando, esta página de manual poderá estar incorreta ou desatualizada.
+.\" O(s) autor(es) não assumem responsabilidade por erros ou omissões, 
+.\" ou por danos resultantes do uso das informações aqui contidas. 
+.\"
+.\" Versões formatadas ou processadas deste manual, desacompanhadas dos
+.\" fontes, devem conter a autorização e os direitos autorais dos autores do
+.\" trabalho.
+.\"
+.\" Você deve receber uma cópia da Licença Pública GNU
+.\" junto com este manual; caso contrário, escreva para a Free Software
+.\" Foundation, Inc., 675 mass Ave, Cambridge, MA 02139 USA ou
+.\" em português na Conectiva Informática Ltda. \- http://www.conectiva.com.br
+.\"
+.\"
+.\"
+.\"    $Id: groupadd.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH GROUPADD 8
+.SH NOME
+groupadd \- Criar um novo grupo
+.SH SINOPSE
+\fBgroupadd\fR [\fB\-g\fR \fIgid\fR [\fB\-o\fR]] [\fB\-f\fR] \fIgrupo\fR
+.SH DESCRIÇÃO
+O comando \fBgroupadd\fR cria um novo grupo usando valores especificados na
+linha de comando e os valores padrões do sistema. O novo grupo será criado
+nos arquivos do sistema, conforme o requerido. As opções que aplicam\-se ao
+comando \fBgroupadd\fR são
+.IP \fB\-f\fR
+Este é o indicador \fIforce\fR . Ele não irá parar o processamento do
+\fBgroupadd\fR e não finalizará o programa, caso um grupo que esteja sendo
+criado já exista no sistema. Neste caso, o grupo não será alterado(ou
+adicionado novamente).
+.IP "\fB\-g \fIgid\fR"
+A identificação numérica do grupo é denominada ID. Este valor deve ser
+único, a menos que a opção \fB\-o\fR seja usada. O valor deve ser não
+negativo, e o padrão é o menor valor maior que 500 e o maior que qualquer
+outro grupo. Valores entre 0 e 999 são tipicamente reservados para \fIcontas
+do sistema\fR.
+.IP \fB\-r\fR
+Este indicador instrui \fBgroupadd\fR a adicionar uma  \fIconta do sistema
+\fR. A primeira identificação de grupo \fI(gid)\fR menor que 999 será
+automaticamente selecionada a menos que a opção \fB\-g\fR seja informada
+também.
+.BR
+Esta é uma informação disponibilizada pela Red Hat Software.
+.BR
+Esta opção também modifica o modo como a opção \fB\-g\fR funciona. Ao
+solicitar um \fIgid\fR que não seja único e ao não informar a opção
+\fB\-o\fR, a criação do grupo , a criação terá o comportamento padrão
+(adicionando um grupo como se as opções \fB\-g\fR ou \fB\-o\fR \fBnão\fR
+fossem especificadas).
+.BR
+.SH ARQUIVOS
+\fI/etc/group\fR \- informações sobre o grupo
+.br
+\fI/etc/gshadow\fR \- informações seguras sobre o grupo
+.br
+.SH VEJA TAMBÉM
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH AUTOR
+Julianne Frances Haugh (jfh@tab.com)
+.SH TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
+Sandro Nunes Henrique <sandro@conectiva.com.br> (tradução)
+Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br> (revisão)
diff --git a/man/pt_BR/groupdel.8 b/man/pt_BR/groupdel.8
new file mode 100644 (file)
index 0000000..62db9e2
--- /dev/null
@@ -0,0 +1,59 @@
+.\" Copyright 1991 \- 1993, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Todos os direitos reservados.
+.\"
+.\" É permitida a confecção e distribuição deste manual, devidamente
+.\" acompanhado dos avisos de direitos autorais e desta permissão
+.\" em todas as cópias.
+.\"
+.\" É permitida a cópia e distribuição de versões modificadas deste manual
+.\" sob as condições acima, e que todo o trabalho derivado seja distribuído
+.\" sob  as mesmas condições deste manual.
+.\" 
+.\" Uma vez que o kernel do Linux e suas bibliotecas estão constantemente
+.\" mudando, esta página de manual poderá estar incorreta ou desatualizada.
+.\" O(s) autor(es) não assumem responsabilidade por erros ou omissões, 
+.\" ou por danos resultantes do uso das informações aqui contidas. 
+.\"
+.\" Versões formatadas ou processadas deste manual, desacompanhadas dos
+.\" fontes, devem conter a autorização e os direitos autorais dos autores do
+.\" trabalho.
+.\"
+.\" Você deve receber uma cópia da Licença Pública GNU
+.\" junto com este manual; caso contrário, escreva para a Free Software
+.\" Foundation, Inc., 675 mass Ave, Cambridge, MA 02139 USA ou
+.\" em português na Conectiva Informática Ltda. \- http://www.conectiva.com.br.\"
+.\"
+.\"    $Id: groupdel.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH GROUPDEL 8
+.SH NOME
+groupdel \- Apaga um grupo
+.SH SINOPSE
+.B groupdel
+.I grupo
+.SH DESCRIÇÃO
+O comando \fBgroupdel\fR modifica os arquivos de contas do sistema, apagando todas as referências ao \fIgrupo\fR. O grupo a ser apagado deve existir.
+.PP
+Deve\-se manualmente checar os sistemas de arquivos para garantir que nenhum dos arquivos permanece com o grupo ou com a sua identificação.
+.SH DICAS
+Não se deve remover o grupo primário de um grupo existente. Deve\-se remover os usuários, antes de se remover o grupo.
+.SH ARQUIVOS
+\fI/etc/group\fR \- informações do grupo
+.br
+\fI/etc/gshadow\fR \- informações seguras do grupo
+.SH VEJA TAMBÉM
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupmod (8),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH AUTOR
+Julianne Frances Haugh (jfh@tab.com)
+.SH TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
+Sandro Nunes Henrique <sandro@conectiva.com.br> (tradução)
+Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br> (revisão)
diff --git a/man/pt_BR/groupmod.8 b/man/pt_BR/groupmod.8
new file mode 100644 (file)
index 0000000..980f550
--- /dev/null
@@ -0,0 +1,61 @@
+.\"    $Id: groupmod.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991, Julianne Frances Haugh
+.\" Todos os direitos reservados.
+.\"
+.\" É permitida a confecção e distribuição deste manual, devidamente
+.\" acompanhado dos avisos de direitos autorais e desta permissão
+.\" em todas as cópias.
+.\"
+.\" É permitida a cópia e distribuição de versões modificadas deste manual
+.\" sob as condições acima, e que todo o trabalho derivado seja distribuído
+.\" sob  as mesmas condições deste manual.
+.\" 
+.\" Uma vez que o kernel do Linux e suas bibliotecas estão constantemente
+.\" mudando, esta página de manual poderá estar incorreta ou desatualizada.
+.\" O(s) autor(es) não assumem responsabilidade por erros ou omissões, 
+.\" ou por danos resultantes do uso das informações aqui contidas. 
+.\"
+.\" Versões formatadas ou processadas deste manual, desacompanhadas dos
+.\" fontes, devem conter a autorização e os direitos autorais dos autores do
+.\" trabalho.
+.\"
+.\" Você deve receber uma cópia da Licença Pública GNU
+.\" junto com este manual; caso contrário, escreva para a Free Software
+.\" Foundation, Inc., 675 mass Ave, Cambridge, MA 02139 USA ou
+.\" em português na Conectiva Informática Ltda. \- http://www.conectiva.com.br
+.TH GROUPMOD 8
+.SH NOME
+groupmod \- Modifica um grupo
+.SH SINOPSE
+\fBgroupmod\fR [\fB\-g\fR \fIgid\fR [\fB\-o\fR]] [\fB\-n\fR \fInome_grupo\fR] \fIgrupo\fR
+.SH DESCRIÇÃO
+O comando \fBgroupmod\fR modifica os arquivos de contas do sistema para as
+novas configuraXXes informadas na linha de comando. As opXXes que aplicam\-se
+ao comando \fIgroupmod\fR sXo:
+.IP "\fB\-g\fR \fIgid\fR"
+O valor numXrico de identificaXXo do grupo X denominada GID. Este valor deve
+ser Xnico, a menos que a opXXo \fB\-o\fR seja usada. O valor dever ser nXo
+negativo. Valores entre 0 e 999 sXo tipicamente reservados para grupos do
+sistema. Quaisquer arquivos com uma identificaXXo antiga de grupo devem ter
+o ID mudado manualmente.
+.IP "\fB\-n\fR \fInome_grupo\fR"
+O nome do grupo irá ser alterado de \fIgroup\fR para
+\fInome_grupo\fR.
+.SH ARQUIVOS
+\fI/etc/group\fR       \- Informações do grupo
+.br
+\fI/etc/gshadow\fR     \- informações seguras do grupo
+.SH VEJA TAMBÉM
+.BR chfn (1),
+.BR chsh (1),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8)
+.SH AUTOR
+Julianne Frances Haugh (jfh@tab.com)
+.SH TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
+Sandro Nunes Henrique <sandro@conectiva.com.br> (tradução)
+Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br> (revisão)
diff --git a/man/pt_BR/passwd.5 b/man/pt_BR/passwd.5
new file mode 100644 (file)
index 0000000..211c789
--- /dev/null
@@ -0,0 +1,133 @@
+.\" -*- nroff -*-
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de), Fri Apr  2 11:32:09 MET DST 1993
+.\"
+.\" This is free documentation; 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.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
+.\" USA.
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.\" Modified Mon Jan  5 20:24:40 MET 1998 by Michael Haardt
+.\"  (michael@cantor.informatik.rwth-aachen.de)
+.TH PASSWD 5 "5/01/1998" "" "Formatos de Arquivo"
+.SH NOME
+passwd \- arquivo de senhas
+.SH DESCRIÇÃO
+.B Passwd
+é um arquivo texto, que contém a lista de contas do sistema,
+fornecendo para cada conta qualquer informação útil como identificação numérica do usuário,
+identificação numérica do grupo, diretório do usuário, interpretador de comandos, etc.
+Freqüentemente ele contém as senhas criptografadas para cada conta.
+Ele deveria ter permissão total de leitura (muitos utilitários, como
+.BR ls (1)
+usa-o para mapear as identificações dos usuários para nome de usuários), mas
+a permissão de escrita é apenas para o superusuário.
+.PP
+Nos bons e velhos dias não havia grandes problemas com esta permissão total
+de leitura. Todos podiam ler as senhas criptografadas, mas o hardware era 
+muito lento para quebrar as senhas bem escolhidas, e além disso, a suposição fundamental
+usada era que toda comunidade de usuários era amigável. Atualmente muitas 
+pessoas executam alguma versão da suite shadow password, onde
+.I /etc/passwd
+tem *'s ao invéz de senhas criptografadas, e as senhas criptorafadas estão em
+.I /etc/shadow
+o qual é legível apenas para o superusuário.
+.PP
+Apesar de que senhas shadow serem usadas, muitos administradores de 
+sistemas usam
+estrelas no campo de senhas criptografadas para ter certeza que este usuário
+autentique-se a si mesmo(a) usando uma senha. (Mas veja as Notas abaixo.)
+.PP
+Se você cria um nova conta, primeiro coloque asteriscos no campo de 
+senhas, então use
+.BR passwd (1)
+para seleciona-lá.
+.PP
+Há apenas um lançamento por linha, e cada linha tem o formato:
+.sp
+.RS
+account:password:UID:GID:GECOS:directory:shell
+.RE
+.sp
+As descrições dos campos são:
+.sp
+.RS
+.TP 1.0in
+.I account
+o nome dos usuários do sistema. Ele não deveria conter letras maiúsculas.
+.TP
+.I password
+a senha criptografada do usuários ou asteriscos.
+.TP
+.I UID
+a identificação numérica do usuário.
+.TP
+.I GID
+a identificação do grupo primário para este usuário.
+.TP
+.I GECOS
+Este campo é opcional e somente usado para propósitos informativos.
+Usualmente, ele contém o nome completo do usuário. GECOS significa General Electric
+Comprehensive Operating System, que foi renomeado para GCOS quando
+a divissão de grandes sistemas da GE foi vendida para Honeywell. Dennis Ritchie havia
+relatado: "Algumas vezes nós mandamos uma saída para a impressora ou trabalhos em lote
+para um máquina GCOS. O campo gcos no arquivo de senhas estava no lugar 
+para esconder a informação para o $IDENTcard. Não elegante."
+.TP
+.I directory
+o diretório do usuário ($HOME).
+.TP
+.I shell
+o interpretador de comando usados depois do login (se vazio, usa o
+.BR /bin/sh ).
+Se selecionado um executável que não existe, o usuário ficará incapaz de
+logar através de
+.BR login (1).
+.RE
+.SH NOTAS
+Se você quiser criar grupos de usuários, as GIDs devem ser iguais e devem
+ter um lançamento no \fI/etc/group\fP, ou o grupo não existe.
+.PP
+Se a senha criptografada é selecionada como asteriscos, o usuário ficará
+apto para logar usando
+.BR login (1),
+mas talvez logar usando
+.BR rlogin (1),
+executar processos existentes e iniciar novos através de
+.BR rsh (1)
+ou
+.BR cron (1)
+ou
+.BR at (1)
+ou filtros de correio, etc. Tentativa para fechar um conta por simples 
+mudança do campo
+shell produz o mesmo resultado e adicionalmente permite o uso de
+.BR su (1).
+.SH ARQUIVOS
+.I /etc/passwd
+.SH "VEJA TAMBÉM"
+.BR passwd (1),
+.BR login (1),
+.BR su (1),
+.BR group (5),
+.BR shadow (5)
+.SH TRADUZIDO POR LDP-BR em 21/08/2000.
+\&\fR\&\f(CWAndré L. Fassone Canova <lonelywolf@blv.com.br> (tradução)\fR
+\&\fR\&\f(CWRoberto Selbach Teixeira <robteix@zaz.com.br> (revisão)\fR
diff --git a/man/pt_BR/shadow.5 b/man/pt_BR/shadow.5
new file mode 100644 (file)
index 0000000..4a0c482
--- /dev/null
@@ -0,0 +1,81 @@
+.\" $Id: shadow.5 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1989 \- 1990, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.TH SHADOW 5
+.SH NOME
+shadow \- arquivo de senhas criptografadas
+.SH DESCRIÇÃO
+.I shadow
+contém as informações de senhas criptografadas  das contas dos usuários e opcionalmente a informação de idade da senha.
+Contém:
+.IP "" .5i
+Nome de acesso.
+.IP "" .5i
+Senha criptografada.
+.IP "" .5i
+Dias decorridos entre 1 de janeiro de 1970 e a última alteração da senha.
+.IP "" .5i
+Número de dias até que a senha deva ser alterada.
+.IP "" .5i
+Número de dias após o qual a senha deve ser alterada.
+.IP "" .5i
+Número de dias antes da expiração da senha no qual o usuário será avisado.
+.IP "" .5i
+Número de dias após a expiração da senha que a conta deve ser desabilitada.
+.IP "" .5i
+Dias decorridos entre 1 de janeiro de 1970 e a data em que a conta foi desabilitada.
+.IP "" .5i
+Campo reservado.
+.PP
+O campo senha deve ser preenchido. A senha criptografada consiste de 13 a 24 caracteres entre os 64 caracteres alfabéticos \- de a até z e de A até Z, além de 0 a 9, \. e /. Verifique em \fBcrypt\fR(3) por maiores detalhes de como esta cadeia de caracteres é interpretada.
+.PP
+A data da última mudança da senha é dada pelo número de dias desde 1 de janeiro de 1970. A senha não pode ser alterada novamente até que um determinado número de dias tenha se passado, e deve ser alterada após um número máximo de dias. Se o número mínimo de dias for maior que o número máximo, a senha não pode ser alterada pelo usuário.
+.PP
+uma conta é considerada inativa e desabilitada se a senha não foi alterada dentro de um determinado número de dias após a expiração das senhas. Uma conta poderá ser desabilitada ainda no dia especificado, independentemente de qualquer informação de expiração da senha.
+.PP
+Esta informação sobrepõe\-se a qualquer senha ou idade de senha presente no arquivo.
+.PP
+Este arquivo não poderá ser acessado por usuários comuns, caso deseje manter a segurança das senhas.
+.SH ARQUIVOS
+\fI/etc/passwd\fR      \- informações das contas de usuários
+.br
+\fI/etc/shadow\fR      \- senhas de usuários criptografadas
+.SH VEJA TAMBÉM
+.BR chage (1),
+.BR login (1),
+.BR passwd (1),
+.BR su (1),
+.BR shadow (3),
+.BR passwd (5),
+.BR pwconv (8),
+.BR pwunconv (8),
+.BR sulogin (8)
+.SH AUTOR
+Julianne Frances Haugh (jfh@tab.com)
+.SH TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
+Sandro Nunes Henrique <sandro@conectiva.com.br> (tradução)
+Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br> (revisão)
diff --git a/man/pwck.8 b/man/pwck.8
new file mode 100644 (file)
index 0000000..7ec1f72
--- /dev/null
@@ -0,0 +1,298 @@
+'\" t
+.\"     Title: pwck
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "PWCK" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+pwck \- verify integrity of password files
+.SH "SYNOPSIS"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [\-q] [\-s] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [\-q] [\-r] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "DESCRIPTION"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Checks are made to verify that each entry has:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid user and group identifier
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid primary group
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid home directory
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid login shell
+.RE
+.PP
+
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+These checks are the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+every passwd entry has a matching shadow entry, and every shadow entry has a matching passwd entry
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+passwords are specified in the shadowed file
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries have the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries are unique in shadow
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the last password changes are not in the future
+.RE
+.PP
+The checks for correct number of fields and unique user name are fatal\&. If the entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated user name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warning and the user is encouraged to run the
+\fBusermod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/passwd
+file are not able to alter corrupted or duplicated entries\&.
+\fBpwck\fR
+should be used in those circumstances to remove the offending entry\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBpwck\fR
+command are:
+.PP
+\fB\-q\fR
+.RS 4
+Report errors only\&. The warnings which do not require any action from the user won\'t be displayed\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Execute the
+\fBpwck\fR
+command in read\-only mode\&.
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+Sort entries in
+/etc/passwd
+and
+/etc/shadow
+by UID\&.
+.RE
+.PP
+By default,
+\fBpwck\fR
+operates on the files
+/etc/passwd
+and
+/etc/shadow\&. The user may select alternate files with the
+\fIpasswd\fR
+and
+\fIshadow\fR
+parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBpwck\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+one or more bad password entries
+.RE
+.PP
+\fI3\fR
+.RS 4
+can\'t open password files
+.RE
+.PP
+\fI4\fR
+.RS 4
+can\'t lock password files
+.RE
+.PP
+\fI5\fR
+.RS 4
+can\'t update password files
+.RE
+.PP
+\fI6\fR
+.RS 4
+can\'t sort password files
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/pwck.8.xml b/man/pwck.8.xml
new file mode 100644 (file)
index 0000000..f00c29d
--- /dev/null
@@ -0,0 +1,321 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1992       , Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY PASS_MAX_DAYS         SYSTEM "login.defs.d/PASS_MAX_DAYS.xml">
+<!ENTITY PASS_MIN_DAYS         SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
+<!ENTITY PASS_WARN_AGE         SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
+]>
+<refentry id='pwck.8'>
+  <!-- $Id: pwck.8.xml 3023 2009-06-20 13:02:33Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>pwck</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>pwck</refname>
+    <refpurpose>verify integrity of password files</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>pwck</command>
+      <arg choice='opt'>-q </arg>
+      <arg choice='opt'>-s </arg>
+      <arg choice='opt'>
+       <arg choice='plain'>
+         <replaceable>passwd</replaceable>
+       </arg>
+       <arg choice='opt'>
+         <arg choice='plain'>
+           <replaceable>shadow</replaceable>
+         </arg>
+       </arg>
+      </arg>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>pwck</command>
+      <arg choice='opt'>-q </arg>
+      <arg choice='opt'>-r </arg>
+      <arg choice='opt'>
+       <arg choice='plain'>
+         <replaceable>passwd</replaceable>
+       </arg>
+       <arg choice='opt'>
+       <arg choice='plain'>
+         <replaceable>shadow</replaceable>
+       </arg>
+       </arg>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>pwck</command> command verifies the integrity of the
+      users and authentication information. It checks that all entries in
+      <filename>/etc/passwd</filename> and <filename>/etc/shadow</filename>
+      have the proper format and contain valid data.
+      The user is prompted to delete entries that are
+      improperly formatted or which have other uncorrectable errors.
+    </para>
+
+    <para>Checks are made to verify that each entry has:</para>
+    <itemizedlist mark='bullet'>
+      <listitem>
+       <para>the correct number of fields</para>
+      </listitem>
+      <listitem>
+       <para>a unique and valid user name</para>
+      </listitem>
+      <listitem>
+       <para>a valid user and group identifier</para>
+      </listitem>
+      <listitem>
+       <para>a valid primary group</para>
+      </listitem>
+      <listitem>
+       <para> a valid home directory</para>
+      </listitem>
+      <listitem>
+       <para>a valid login shell</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>
+      <filename>shadow</filename> checks are enabled when a second file
+      parameter is specified or when <filename>/etc/shadow</filename>
+      exists on the system.
+    </para>
+    <para>
+      These checks are the following:
+    </para>
+    <itemizedlist mark='bullet'>
+      <listitem>
+       <para>
+         every passwd entry has a matching shadow entry, and every shadow
+         entry has a matching passwd entry
+       </para>
+      </listitem>
+      <listitem>
+       <para>passwords are specified in the shadowed file</para>
+      </listitem>
+      <listitem>
+       <para>shadow entries have the correct number of fields</para>
+      </listitem>
+      <listitem>
+       <para>shadow entries are unique in shadow</para>
+      </listitem>
+      <listitem>
+       <para>the last password changes are not in the future</para>
+      </listitem>
+    </itemizedlist>
+
+    <para>
+      The checks for correct number of fields and unique user name are
+      fatal. If the entry has the wrong number of fields, the user will be
+      prompted to delete the entire line. If the user does not answer
+      affirmatively, all further checks are bypassed. An entry with a
+      duplicated user name is prompted for deletion, but the remaining
+      checks will still be made. All other errors are warning and the user
+      is encouraged to run the <command>usermod</command> command to correct
+      the error.
+    </para>
+
+    <para>
+      The commands which operate on the <filename>/etc/passwd</filename>
+      file are not able to alter corrupted or duplicated entries.
+      <command>pwck</command> should be used in those circumstances to
+      remove the offending entry.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>pwck</command> command are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-q</option>
+       </term>
+       <listitem>
+         <para>
+           Report errors only. The warnings which do not require any
+           action from the user won't be displayed.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-r</option>
+       </term>
+       <listitem>
+         <para>
+           Execute the <command>pwck</command> command in read-only mode.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-s</option>
+       </term>
+       <listitem>
+         <para>
+           Sort entries in <filename>/etc/passwd</filename> and
+           <filename>/etc/shadow</filename> by UID.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>
+      By default, <command>pwck</command> operates on the files
+      <filename>/etc/passwd</filename> and <filename>/etc/shadow</filename>.
+      The user may select alternate files with the <emphasis
+      remap='I'>passwd</emphasis> and <emphasis remap='I'>shadow</emphasis>
+      parameters.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &PASS_MAX_DAYS;
+      &PASS_MIN_DAYS;
+      &PASS_WARN_AGE;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='exit_values'>
+    <title>EXIT VALUES</title>
+    <para>
+      The <command>pwck</command> command exits with the following values:
+      <variablelist>
+       <varlistentry>
+         <term><replaceable>0</replaceable></term>
+         <listitem>
+           <para>success</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>1</replaceable></term>
+         <listitem>
+           <para>invalid command syntax</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>2</replaceable></term>
+         <listitem>
+           <para>one or more bad password entries</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>3</replaceable></term>
+         <listitem>
+           <para>can't open password files</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>4</replaceable></term>
+         <listitem>
+           <para>can't lock password files</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>5</replaceable></term>
+         <listitem>
+           <para>can't update password files</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>6</replaceable></term>
+         <listitem>
+           <para>can't sort password files</para>
+         </listitem>
+       </varlistentry>
+      </variablelist>
+    </para>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/pwconv.8 b/man/pwconv.8
new file mode 100644 (file)
index 0000000..75e2c4a
--- /dev/null
@@ -0,0 +1,164 @@
+'\" t
+.\"     Title: pwconv
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "PWCONV" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+pwconv, pwunconv, grpconv, grpunconv \- convert to and from shadow passwords and groups
+.SH "SYNOPSIS"
+.HP \w'\fBpwconv\fR\ 'u
+\fBpwconv\fR
+.HP \w'\fBpwunconv\fR\ 'u
+\fBpwunconv\fR
+.HP \w'\fBgrpconv\fR\ 'u
+\fBgrpconv\fR
+.HP \w'\fBgrpunconv\fR\ 'u
+\fBgrpunconv\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBpwconv\fR
+command creates
+\fIshadow\fR
+from
+\fIpasswd\fR
+and an optionally existing
+\fIshadow\fR\&.
+.PP
+The
+\fBpwunconv\fR
+command creates
+\fIpasswd\fR
+from
+\fIpasswd\fR
+and
+\fIshadow\fR
+and then removes
+\fIshadow\fR\&.
+.PP
+The
+\fBgrpconv\fR
+command creates
+\fIgshadow\fR
+from
+\fIgroup\fR
+and an optionally existing
+\fIgshadow\fR\&.
+.PP
+The
+\fBgrpunconv\fR
+command creates
+\fIgroup\fR
+from
+\fIgroup\fR
+and
+\fIgshadow\fR
+and then removes
+\fIgshadow\fR\&.
+.PP
+These four programs all operate on the normal and shadow password and group files:
+/etc/passwd,
+/etc/group,
+/etc/shadow, and
+/etc/gshadow\&.
+.PP
+Each program acquires the necessary locks before conversion\&.
+\fBpwconv\fR
+and
+\fBgrpconv\fR
+are similar\&. First, entries in the shadowed file which don\'t exist in the main file are removed\&. Then, shadowed entries which don\'t have `x\' as the password in the main file are updated\&. Any missing shadowed entries are added\&. Finally, passwords in the main file are replaced with `x\'\&. These programs can be used for initial conversion as well to update the shadowed file if the main file is edited by hand\&.
+.PP
+
+\fBpwconv\fR
+will use the values of
+\fIPASS_MIN_DAYS\fR,
+\fIPASS_MAX_DAYS\fR, and
+\fIPASS_WARN_AGE\fR
+from
+/etc/login\&.defs
+when adding new entries to
+/etc/shadow\&.
+.PP
+Likewise
+\fBpwunconv\fR
+and
+\fBgrpunconv\fR
+are similar\&. Passwords in the main file are updated from the shadowed file\&. Entries which exist in the main file but not in the shadowed file are left alone\&. Finally, the shadowed file is removed\&. Some password aging information is lost by
+\fBpwunconv\fR\&. It will convert what it can\&.
+.SH "BUGS"
+.PP
+Errors in the password or group files (such as invalid or duplicate entries) may cause these programs to loop forever or fail in other strange ways\&. Please run
+\fBpwck\fR
+and
+\fBgrpck\fR
+to correct any such errors before converting to or from shadow passwords or groups\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variable in
+/etc/login\&.defs
+changes the behavior of
+\fBgrpconv\fR
+and
+\fBgrpunconv\fR:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of
+\fBpwconv\fR:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.SH "FILES"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBgrpck\fR(8),
+\fBlogin.defs\fR(5),
+\fBpwck\fR(8)\&.
diff --git a/man/pwconv.8.xml b/man/pwconv.8.xml
new file mode 100644 (file)
index 0000000..2aae581
--- /dev/null
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1996 - 1998, Marek Michałkiewicz
+   Copyright (c) 2000 - 2006, Tomasz Kłoczko
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!ENTITY PASS_MAX_DAYS         SYSTEM "login.defs.d/PASS_MAX_DAYS.xml">
+<!ENTITY PASS_MIN_DAYS         SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
+<!ENTITY PASS_WARN_AGE         SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
+]>
+<refentry id='pwconv.8'>
+  <!-- $Id: pwconv.8.xml 2435 2008-10-11 11:44:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>pwconv</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>pwconv</refname>
+    <refname>pwunconv</refname>
+    <refname>grpconv</refname>
+    <refname>grpunconv</refname>
+    <refpurpose>convert to and from shadow passwords and groups</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>pwconv</command>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>pwunconv</command>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>grpconv</command>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>grpunconv</command>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>pwconv</command> command creates <emphasis
+      remap='I'>shadow</emphasis> from <emphasis remap='I'>passwd</emphasis>
+      and an optionally existing <emphasis remap='I'>shadow</emphasis>.
+    </para>
+
+    <para>
+      The <command>pwunconv</command> command creates <emphasis
+      remap='I'>passwd</emphasis> from <emphasis remap='I'>passwd</emphasis>
+      and <emphasis remap='I'>shadow</emphasis> and then removes <emphasis
+      remap='I'>shadow</emphasis>.
+    </para>
+
+    <para>
+      The <command>grpconv</command> command creates <emphasis
+      remap='I'>gshadow</emphasis> from <emphasis remap='I'>group</emphasis>
+      and an optionally existing <emphasis remap='I'>gshadow</emphasis>.
+    </para>
+
+    <para>
+      The <command>grpunconv</command> command creates <emphasis
+      remap='I'>group</emphasis> from <emphasis remap='I'>group</emphasis>
+      and <emphasis remap='I'>gshadow</emphasis> and then removes <emphasis
+      remap='I'>gshadow</emphasis>.
+    </para>
+
+    <para>
+      These four programs all operate on the normal and shadow password and
+      group files: <filename>/etc/passwd</filename>,
+      <filename>/etc/group</filename>, <filename>/etc/shadow</filename>, and
+      <filename>/etc/gshadow</filename>.
+    </para>
+
+    <para>
+      Each program acquires the necessary locks before conversion. 
+      <command>pwconv</command> and <command>grpconv</command> are similar. 
+      First, entries in the shadowed file which don't exist in the main file
+      are removed. Then, shadowed entries which don't have `x' as the
+      password in the main file are updated. Any missing shadowed entries
+      are added. Finally, passwords in the main file are replaced with `x'. 
+      These programs can be used for initial conversion as well to update
+      the shadowed file if the main file is edited by hand.
+    </para>
+
+    <para>
+      <command>pwconv</command> will use the values of <emphasis
+      remap='I'>PASS_MIN_DAYS</emphasis>, <emphasis
+      remap='I'>PASS_MAX_DAYS</emphasis>, and <emphasis
+      remap='I'>PASS_WARN_AGE</emphasis> from
+      <filename>/etc/login.defs</filename> when adding new entries to
+      <filename>/etc/shadow</filename>.
+    </para>
+
+    <para>
+      Likewise <command>pwunconv</command> and <command>grpunconv</command>
+      are similar. Passwords in the main file are updated from the shadowed
+      file. Entries which exist in the main file but not in the shadowed
+      file are left alone. Finally, the shadowed file is removed. Some
+      password aging information is lost by <command>pwunconv</command>. It
+      will convert what it can.
+    </para>
+  </refsect1>
+
+  <refsect1 id='bugs'>
+    <title>BUGS</title>
+    <para>
+      Errors in the password or group files (such as invalid or duplicate
+      entries) may cause these programs to loop forever or fail in other
+      strange ways. Please run <command>pwck</command> and
+      <command>grpck</command> to correct any such errors before converting
+      to or from shadow passwords or groups.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variable in
+      <filename>/etc/login.defs</filename> changes the behavior of
+      <command>grpconv</command> and <command>grpunconv</command>:
+    </para>
+    <variablelist>
+      &MAX_MEMBERS_PER_GROUP;
+    </variablelist>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of
+      <command>pwconv</command>:
+    </para>
+    <variablelist>
+      &PASS_MAX_DAYS;
+      &PASS_MIN_DAYS;
+      &PASS_WARN_AGE;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>grpck</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/pwunconv.8 b/man/pwunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ru/Makefile.am b/man/ru/Makefile.am
new file mode 100644 (file)
index 0000000..9e9d445
--- /dev/null
@@ -0,0 +1,63 @@
+mandir = @mandir@/ru
+
+man_MANS = \
+       $(man_nopam) \
+       chage.1 \
+       chfn.1 \
+       chgpasswd.8 \
+       chpasswd.8 \
+       chsh.1 \
+       expiry.1 \
+       faillog.5 \
+       faillog.8 \
+       getspnam.3 \
+       gpasswd.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmems.8 \
+       groupmod.8 \
+       groups.1 \
+       grpck.8 \
+       grpconv.8 \
+       grpunconv.8 \
+       gshadow.5 \
+       lastlog.8 \
+       login.1 \
+       login.defs.5 \
+       logoutd.8 \
+       newgrp.1 \
+       newusers.8 \
+       nologin.8 \
+       passwd.1 \
+       passwd.5 \
+       pwck.8 \
+       pwconv.8 \
+       pwunconv.8 \
+       sg.1 \
+       shadow.3 \
+       shadow.5 \
+       su.1 \
+       suauth.5 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8 \
+       vigr.8 \
+       vipw.8
+
+man_nopam = \
+       limits.5 \
+       login.access.5 \
+       porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_nopam) \
+       id.1 \
+       sulogin.8
+
+include ../generate_translations.mak
+
diff --git a/man/ru/Makefile.in b/man/ru/Makefile.in
new file mode 100644 (file)
index 0000000..f831bf4
--- /dev/null
@@ -0,0 +1,605 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+DIST_COMMON = $(srcdir)/../generate_mans.mak \
+       $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+subdir = man/ru
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+       "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/ru
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = $(man_nopam) chage.1 chfn.1 chgpasswd.8 chpasswd.8 chsh.1 \
+       expiry.1 faillog.5 faillog.8 getspnam.3 gpasswd.1 groupadd.8 \
+       groupdel.8 groupmems.8 groupmod.8 groups.1 grpck.8 grpconv.8 \
+       grpunconv.8 gshadow.5 lastlog.8 login.1 login.defs.5 logoutd.8 \
+       newgrp.1 newusers.8 nologin.8 passwd.1 passwd.5 pwck.8 \
+       pwconv.8 pwunconv.8 sg.1 shadow.3 shadow.5 su.1 suauth.5 \
+       useradd.8 userdel.8 usermod.8 vigr.8 vipw.8 $(am__append_1)
+man_nopam = \
+       limits.5 \
+       login.access.5 \
+       porttime.5
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_nopam) \
+       id.1 \
+       sulogin.8
+
+@ENABLE_REGENERATE_MAN_TRUE@LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@CLEANFILES = .xml2po.mo $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST))
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/ru/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/ru/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man3: $(man3_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)"
+       @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.3*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           3*) ;; \
+           *) ext='3' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst"; \
+       done
+uninstall-man3:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.3*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           3*) ;; \
+           *) ext='3' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man3dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+       uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man3 install-man5 install-man8 install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man3 uninstall-man5 \
+       uninstall-man8
+
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@   [ ! -f ../config.xml ] || mv ../config.xml ../config.xml.bak
+@ENABLE_REGENERATE_MAN_TRUE@   xml2po --expand-all-entities -l $(LANG) -p ../po/$(LANG).po -o $@ ../$@
+@ENABLE_REGENERATE_MAN_TRUE@   sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+@ENABLE_REGENERATE_MAN_TRUE@   [ ! -f ../config.xml.bak ] || mv ../config.xml.bak ../config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   sed -i 's/config SYSTEM "config.xml">/config SYSTEM "config.xml">\%config;/' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@   make -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%: %.xml Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(SHA_CRYPT_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@               -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@grpconv.8 grpunconv.8 pwunconv.8: pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@getspnam.3: shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@vigr.8: vipw.8
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/ru/chage.1 b/man/ru/chage.1
new file mode 100644 (file)
index 0000000..30a99e9
--- /dev/null
@@ -0,0 +1,158 @@
+'\" t
+.\"     Title: chage
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Пользовательские команды
+.\"    Source: Пользовательские команды
+.\"  Language: Russian
+.\"
+.TH "chage" "1" "07/24/2009" "Пользовательские команды" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+chage \- изменяет информацию об устаревании пароля пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIпараметры\fR] [\fILOGIN\fR]
+.SH "ОПИСАНИЕ"
+.PP
+Программа The
+\fBchage\fR
+изменяет количество дней между датой следующей смены пароля и датой последней смены пароля\&. Эта информация используется системой для определения момента, когда пользователь должен сменить свой пароль\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBchage\fR:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR\fIПОСЛ_ДЕНЬ\fR
+.RS 4
+Установить число дней прошедших с 1 января 1970 года, когда была последняя смена пароля\&. Дата может быть также указана в виде ГГГГ\-ММ\-ДД (или в форме согласно региональным настройкам)\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR\fIДАТА_УСТАРЕВАНИЯ\fR
+.RS 4
+Установить дату устаревания учётной записи пользователя, которая задаётся числом дней прошедших с 1 января 1970 года\&. Дата может быть также задана в виде ГГГГ\-ММ\-ДД (или в форме согласно региональным настройкам)\&. Пользователь, чья учётная запись была заблокирована, должен обратиться к системному администратору, если хочет в дальнейшем работать с системой\&.
+.sp
+Указание значения
+\fI\-1\fR
+в параметре
+\fIДАТА_УСТАРЕВАНИЯ\fR
+отменяет устаревание учётной записи\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR\fIДНЕЙ\fR
+.RS 4
+Установить число дней неактивности после устаревания пароля перед тем как учётная запись будет заблокирована\&. В параметре
+\fIДНЕЙ\fR
+задаётся число дней неактивности\&. Пользователь, чья учётная запись была заблокирована, должен обратиться к системному администратору, если хочет в дальнейшем работать с системой\&.
+.sp
+Указание значения
+\fI\-1\fR
+в параметре
+\fIДНЕЙ\fR
+отменяет неактивность учётной записи\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Показать информацию об устаревании учётной записи\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR\fIМИН_ДНЕЙ\fR
+.RS 4
+Задать
+\fIминимальное количество дней\fR
+между сменой пароля\&. Нулевое значение этого поля указывает на то, что пользователь может менять свой пароль когда захочет\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR\fIМАКС_ДНЕЙ\fR
+.RS 4
+Установить максимальное число дней работоспособности пароля\&. Если сумма значений
+\fIМАКС_ДНЕЙ\fR
+\fIПОСЛ_ДЕНЬ\fR
+раньше текущего дня, то пользователю придётся изменить свой пароль перед использованием учётной записи\&. Для того, чтобы это не было неожиданностью можно воспользоваться параметром
+\fB\-W\fR, который активирует выдачу предупреждения о смене пароля пользователя заранее\&.
+.sp
+Указание значения
+\fI\-1\fR
+в параметре
+\fIМАКС_ДНЕЙ\fR
+отменяет проверку пароля\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR\fIПРЕДУП_ДНЕЙ\fR
+.RS 4
+Установить число дней выдачи предупреждения, перед тем как потребуется смена пароля\&. Параметр
+\fIПРЕДУП_ДНЕЙ\fR
+задаётся в днях, в течении которых пользователь будет получать предупреждение об устаревании пароля, перед тем как это случится\&.
+.RE
+.PP
+Если ни один параметр не указан, то
+\fBchage\fR
+переходит в интерактивный режим, предлагая запустившему пользователю изменить значения всех полей своей учётной записи\&. Вводимое значение заменяет текущее значение поля; если введена пустая строка, то текущее значение остаётся неизменным\&. Текущее значение показано в скобках
+\fI[ ]\fR\&.
+.SH "ЗАМЕЧАНИЕ"
+.PP
+Программа
+\fBchage\fR
+требует наличия файла теневых паролей\&.
+.PP
+Программа
+\fBchage\fR
+работает только от суперпользователя, за исключением вызова с параметром
+\fB\-l\fR, который может использоваться непривилегированным пользователем для определения даты устаревания своего пароля\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+Программа
+\fBchage\fR
+завершая работу, возвращает следующие значения:
+.PP
+\fI0\fR
+.RS 4
+успешное выполнение
+.RE
+.PP
+\fI1\fR
+.RS 4
+доступ запрещён
+.RE
+.PP
+\fI2\fR
+.RS 4
+ошибка в параметрах команды
+.RE
+.PP
+\fI15\fR
+.RS 4
+не удалось найти файл теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/ru/chfn.1 b/man/ru/chfn.1
new file mode 100644 (file)
index 0000000..70ba9f6
--- /dev/null
@@ -0,0 +1,109 @@
+'\" t
+.\"     Title: chfn
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Пользовательские команды
+.\"    Source: Пользовательские команды
+.\"  Language: Russian
+.\"
+.TH "chfn" "1" "07/24/2009" "Пользовательские команды" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+chfn \- изменяет информацию о пользователе
+.SH "СИНТАКСИС"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\-f\ \fIФИО\fR] [\-r\ \fIномер\ комнаты\fR] [\-w\ \fIрабочий\ телефон\fR] [\-h\ \fIдомашний\ телефон\fR] [\-o\ \fIдругое\fR] [\fIимя\fR]
+.SH "ОПИСАНИЕ"
+.PP
+Программа
+\fBchfn\fR
+изменяет ФИО, рабочий телефон, рабочие координаты и домашний номер телефона учётной записи пользователя\&. Обычно, эти данные выводятся командой
+\fBfinger\fR(1)
+и ей подобными программами\&. Обычный пользователь может изменить только определённые поля собственной учётной записи, разрешённые в файле
+/etc/login\&.defs\&. (Настройкой по умолчанию пользователю не разрешается менять своё имя и фамилию\&.) Суперпользователь может изменять любое поле любой учётной записи\&. Кроме того, только суперпользователь может использовать параметр
+\fB\-o\fR
+для изменения нестандартизованной части поля GECOS\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.PP
+Если ни один параметр не указан, то
+\fBchfn\fR
+переходит в интерактивный режим, предлагая запустившему пользователю изменить значения полей своей учётной записи\&. Вводимое значение заменяет текущее значение поля; если введена пустая строка, то текущее значение остаётся неизменным\&. Текущее значение показано в скобках
+\fB[ ]\fR\&. Без параметров, программа
+\fBchfn\fR
+изменяет учётную запись запустившего пользователя\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/ru/chgpasswd.8 b/man/ru/chgpasswd.8
new file mode 100644 (file)
index 0000000..712900c
--- /dev/null
@@ -0,0 +1,231 @@
+'\" t
+.\"     Title: chgpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "chgpasswd" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+chgpasswd \- обновляет пароли групп в пакетном режиме
+.SH "СИНТАКСИС"
+.HP \w'\fBchgpasswd\fR\ 'u
+\fBchgpasswd\fR [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+Программа
+\fBchgpasswd\fR
+читает список пар "группа пароль" из стандартного входного потока и обновляет информацию о существующих группах\&. Каждая строка имеет вид:
+.PP
+\fIимя_группы\fR:\fIпароль\fR
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchgpasswd\fR\&.
+.PP
+The default encryption algorithm can be defined for the system with the ENCRYPT_METHOD variable of
+/etc/login\&.defs, and can be overwiten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+Данная команда предназначена для работы в крупных системных средах, где за один раз заводится несколько учётных записей\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBchgpasswd\fR:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Передаваемые пароли заданы в шифрованном виде\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Использовать алгоритм шифрования MD5 вместо DES, если пароли передаются не шифрованными\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Не забудьте установить права или umask, чтобы не позволить чтение нешифрованных файлов другими пользователями\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBgpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBlogin.defs\fR(5)\&.
diff --git a/man/ru/chpasswd.8 b/man/ru/chpasswd.8
new file mode 100644 (file)
index 0000000..9318ee9
--- /dev/null
@@ -0,0 +1,222 @@
+'\" t
+.\"     Title: chpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "chpasswd" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+chpasswd \- обновляет пароли в пакетном режиме
+.SH "СИНТАКСИС"
+.HP \w'\fBchpasswd\fR\ 'u
+\fBchpasswd\fR [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+Программа
+\fBchpasswd\fR
+читает список пар "пользователь пароль" из стандартного входного потока и обновляет информацию о существующих пользователях\&. Каждая строка имеет вид:
+.PP
+\fIимя_пользователя\fR:\fIпароль\fR
+.SS ""
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchpasswd\fR\&. Also the password age will be updated, if present\&.
+.PP
+The default encryption algorithm can be defined for the system with the ENCRYPT_METHOD variable of
+/etc/login\&.defs, and can be overwiten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+
+\fBchpasswd\fR
+first update the password in memory, and then commit all the changes to disk if no errors occured for any users\&.
+.PP
+Данная команда предназначена для работы в крупных системных средах, где за один раз заводится несколько учётных записей\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBchpasswd\fR:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Передаваемые пароли заданы в шифрованном виде\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Использовать алгоритм шифрования MD5 вместо DES, если пароли передаются не шифрованными\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Не забудьте установить права или umask, чтобы не позволить чтение нешифрованных файлов другими пользователями\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBpasswd\fR(1),
+\fBnewusers\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/ru/chsh.1 b/man/ru/chsh.1
new file mode 100644 (file)
index 0000000..3d98f27
--- /dev/null
@@ -0,0 +1,101 @@
+'\" t
+.\"     Title: chsh
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Пользовательские команды
+.\"    Source: Пользовательские команды
+.\"  Language: Russian
+.\"
+.TH "chsh" "1" "07/24/2009" "Пользовательские команды" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+chsh \- изменяет регистрационную оболочку пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIпараметры\fR] [\fILOGIN\fR]
+.SH "ОПИСАНИЕ"
+.PP
+Программа
+\fBchsh\fR
+изменяет регистрационную оболочку пользователя\&. Она определяет какая команда будет запущена после регистрации пользователя в системе\&. Обычный пользователь может изменять регистрационную оболочку только для своей учётной записи, суперпользователь может изменять регистрационную оболочку любой учётной записи\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBchsh\fR:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fIОБОЛОЧКА\fR
+.RS 4
+Имя новой регистрационной оболочки пользователя\&. Если задать пустое значение, то будет использована регистрационная оболочка по умолчанию\&.
+.RE
+.PP
+Если параметр
+\fB\-s\fR
+не задан, то
+\fBchsh\fR
+переходит в интерактивный режим, предлагая пользователю изменить свою регистрационную оболочку\&. Вводимое значение заменяет текущее значение поля; если введена пустая строка, то текущее значение остаётся неизменным\&. Текущее значение регистрационной оболочки указано в скобках
+\fI[ ]\fR\&.
+.SH "ЗАМЕЧАНИЕ"
+.PP
+Все допустимые имена регистрационных оболочек должны быть указаны в файле
+/etc/shells\&. На суперпользователя это ограничение не действует и поэтому ему разрешено указывать любое значение\&. Для учётной записи с ограниченной регистрационной оболочкой пользователь не может изменить свою регистрационную оболочку\&. Поэтому, команду
+/bin/rsh
+в файле
+/etc/shells
+лучше не указывать, так как, если пользователь случайно изменит свою регистрационную оболочку на эту ограниченную оболочку, то не сможет восстановить её первоначальное значение\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shells
+.RS 4
+содержит список разрешённых регистрационных оболочек
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/ru/expiry.1 b/man/ru/expiry.1
new file mode 100644 (file)
index 0000000..fc66295
--- /dev/null
@@ -0,0 +1,47 @@
+'\" t
+.\"     Title: expiry
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Пользовательские команды
+.\"    Source: Пользовательские команды
+.\"  Language: Russian
+.\"
+.TH "expiry" "1" "07/24/2009" "Пользовательские команды" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+expiry \- проверяет и изменяет пароль согласно срокам действия
+.SH "СИНТАКСИС"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR [\-c] [\-f]
+.SH "ОПИСАНИЕ"
+.PP
+Программа
+\fBexpiry\fR
+проверяет (параметр
+\fB\-c\fR) сколько ещё времени будет работоспособен текущий пароль и вынуждает изменить его (параметр
+\fB\-f\fR), если это требуется\&. Она может запускаться обычным пользователем\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/ru/faillog.5 b/man/ru/faillog.5
new file mode 100644 (file)
index 0000000..48ed4e6
--- /dev/null
@@ -0,0 +1,57 @@
+'\" t
+.\"     Title: faillog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Форматы файлов
+.\"    Source: Форматы файлов
+.\"  Language: Russian
+.\"
+.TH "faillog" "5" "07/24/2009" "Форматы файлов" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+faillog \- файл протокола неудачных попыток входа в систему
+.SH "ОПИСАНИЕ"
+.PP
+
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+The file contains fixed length records, indexed by numerical UID\&. Each record contains the count of login failures since the last successful login; the maximum number of failures before the account is disabled; the line on whiche the last login failure occurred; the date of the last login failure; and the duration (in seconds) during which the account will be locked after a failure\&.
+.PP
+Структура файла:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+       short   fail_cnt;
+       short   fail_max;
+       char    fail_line[12];
+       time_t  fail_time;
+       long    fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "ФАЙЛЫ"
+.PP
+/var/log/faillog
+.RS 4
+содержит журнал неудавшихся попыток входа в систему
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBfaillog\fR(8)
diff --git a/man/ru/faillog.8 b/man/ru/faillog.8
new file mode 100644 (file)
index 0000000..344d9ca
--- /dev/null
@@ -0,0 +1,137 @@
+'\" t
+.\"     Title: faillog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "faillog" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+faillog \- показывает записи из файла faillog или задаёт предел неудачных попыток входа в систему
+.SH "СИНТАКСИС"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBfaillog\fR:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-time\fR\fIСЕКУНД\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR\fIМАКС_ЧИСЛО\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+Reset the counters of login failures\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\fIДНЕЙ\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR \fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.PP
+NOTE: in display mode, only the records of users which currently exist in the system are displayed\&. In the other modes (when the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used), the records of the user, or the range of users, or all the users that may have an entry in the faillog database will be changed\&. This is useful to reset records of users that have been deleted or set a policy in advance for a range of users\&.
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Программа
+\fBfaillog\fRвыводит только записи о пользователях, последняя попытка входа которых была неудачной\&. Чтобы увидеть запись о пользователе, последняя попытка входа которого была удачной, вы должны специально указать имя пользователя с помощью параметра
+\fB\-a\fR\&.
+.SH "ФАЙЛЫ"
+.PP
+/var/log/faillog
+.RS 4
+содержит журнал неудавшихся попыток входа в систему
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/ru/getspnam.3 b/man/ru/getspnam.3
new file mode 100644 (file)
index 0000000..cd473da
--- /dev/null
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/ru/gpasswd.1 b/man/ru/gpasswd.1
new file mode 100644 (file)
index 0000000..a608ed0
--- /dev/null
@@ -0,0 +1,254 @@
+'\" t
+.\"     Title: gpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Пользовательские команды
+.\"    Source: Пользовательские команды
+.\"  Language: Russian
+.\"
+.TH "gpasswd" "1" "07/24/2009" "Пользовательские команды" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+gpasswd \- administer /etc/group and /etc/gshadow
+.SH "СИНТАКСИС"
+.HP \w'\fBgpasswd\fR\ 'u
+\fBgpasswd\fR [\fIoption\fR] \fIгруппа\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBgpasswd\fR
+command is used to administer
+/etc/group, and /etc/gshadow\&. Every group can have
+administrators,
+members and a password\&.
+.PP
+System administrators can use the
+\fB\-A\fR
+option to define group administrator(s) and the
+\fB\-M\fR
+option to define members\&. They have all rights of group administrators and members\&.
+.PP
+
+\fBgpasswd\fR
+called by
+a group administrator
+with a group name only prompts for the new password of the
+\fIgroup\fR\&.
+.PP
+If a password is set the members can still use
+\fBnewgrp\fR(1)
+without a password, and non\-members must supply the password\&.
+.SS "Замечания о паролях групп"
+.PP
+Пароли групп имеют врождённую проблему с безопасностью, так как пароль знает более одного человека\&. Однако, группы являются полезным инструментом совместной работы различных пользователей\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Except for the
+\fB\-A\fR
+and
+\fB\-M\fR
+options, the options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR \fIuser\fR
+.RS 4
+Add the
+\fIuser\fR
+to the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR \fIuser\fR
+.RS 4
+Remove the
+\fIuser\fR
+from the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\-password\fR
+.RS 4
+Remove the password from the named
+\fIgroup\fR\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-restrict\fR
+.RS 4
+Restrict the access to the named
+\fIgroup\fR\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-A\fR, \fB\-\-administrators\fR \fIuser\fR,\&.\&.\&.
+.RS 4
+Set the list of administrative users\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-members\fR \fIuser\fR,\&.\&.\&.
+.RS 4
+Set the list of group members\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+This tool only operates on the
+/etc/group
+and /etc/gshadow files\&.
+Thus you cannot change any NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBnewgrp\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/ru/groupadd.8 b/man/ru/groupadd.8
new file mode 100644 (file)
index 0000000..42e8710
--- /dev/null
@@ -0,0 +1,207 @@
+'\" t
+.\"     Title: groupadd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "groupadd" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+groupadd \- создаёт новую группу
+.SH "СИНТАКСИС"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIпараметры\fR] \fIгруппа\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBgroupadd\fR:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIGID\fR
+.RS 4
+Числовое значение идентификатора группы\&. Значение должно быть уникальным, если не задан параметр
+\fB\-o\fR\&. Значение должно быть не отрицательным\&. По умолчанию, берётся значение больше 999 и больше идентификатора любой другой группы\&. Значения от 0 и до 999 обычно зарезервированы под системные группы\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\fIКЛЮЧ\fR=\fIЗНАЧЕНИЕ\fR
+.RS 4
+Изменить значения по умолчанию (GID_MIN, GID_MAX и другие), которые хранятся в файле
+/etc/login\&.defs\&. Можно указать несколько параметров
+\fB\-K\fR\&.
+.sp
+Example:
+\fB\-K \fR\fIGID_MIN\fR=\fI100\fR
+\fB\-K \fR\fIGID_MAX\fR=\fI499\fR
+.sp
+Замечание: запись вида
+\fB\-K \fR\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+пока не работает\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+This option permits to add a group with a non\-unique GID\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\fIПАРОЛЬ\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system group\&.
+.sp
+The numeric identifiers of new system groups are choosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Groupnames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+You may not add a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+Программа
+\fBgroupadd\fR
+завершая работу, возвращает следующие значения:
+.PP
+\fI0\fR
+.RS 4
+успешное выполнение
+.RE
+.PP
+\fI2\fR
+.RS 4
+ошибка в параметрах команды
+.RE
+.PP
+\fI3\fR
+.RS 4
+недопустимое значение параметра
+.RE
+.PP
+\fI4\fR
+.RS 4
+не уникальный gid (если не задан параметр
+\fB\-o\fR)
+.RE
+.PP
+\fI9\fR
+.RS 4
+не уникальное имя группы
+.RE
+.PP
+\fI10\fR
+.RS 4
+не удалось изменить файл групп
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/groupdel.8 b/man/ru/groupdel.8
new file mode 100644 (file)
index 0000000..abffc60
--- /dev/null
@@ -0,0 +1,108 @@
+'\" t
+.\"     Title: groupdel
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "groupdel" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+groupdel \- удаляет группу
+.SH "СИНТАКСИС"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR \fIгруппа\fR
+.SH "ОПИСАНИЕ"
+.PP
+Программа
+\fBgroupdel\fR
+изменяет системные файлы учётных записей, удаляя все записи, относящиеся к
+\fIгруппе\fR\&. Группа с таким именем должна существовать\&.
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Вы не можете удалить группу, если она является первичной для существующего пользователя\&. Вы должны удалить пользователя перед тем как удалять группу\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this group\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+Программа
+\fBgroupdel\fR
+завершая работу, возвращает следующие значения:
+.PP
+\fI0\fR
+.RS 4
+успешное выполнение
+.RE
+.PP
+\fI2\fR
+.RS 4
+ошибка в параметрах команды
+.RE
+.PP
+\fI6\fR
+.RS 4
+указанная группа не существует
+.RE
+.PP
+\fI8\fR
+.RS 4
+не удалось удалить первичную пользовательскую группу
+.RE
+.PP
+\fI10\fR
+.RS 4
+не удалось изменить файл групп
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)
diff --git a/man/ru/groupmems.8 b/man/ru/groupmems.8
new file mode 100644 (file)
index 0000000..0226ef3
--- /dev/null
@@ -0,0 +1,153 @@
+'\" t
+.\"     Title: groupmems
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "groupmems" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+groupmems \- управляет членами первичной группы пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBgroupmems\fR\ 'u
+\fBgroupmems\fR \-a\ \fIимя_пользователя\fR | \-d\ \fIимя_пользователя\fR | [\-g\ \fIимя_группы\fR] | \-l | \-p 
+.SH "ОПИСАНИЕ"
+.PP
+Программа
+\fBgroupmems\fR
+позволяет пользователю управлять списком членов своей группы не имея привилегий суперпользователя\&. Программа
+\fBgroupmems\fR
+работает в системах, где в качестве первичной группы пользователя является группа с именем совпадающим с именем пользователя (то есть, guest / guest)\&.
+.PP
+Только суперпользователь как администратор может использовать
+\fBgroupmems\fR, чтобы изменить список членов не своей группы\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBgroupmems\fR:
+.PP
+\fB\-a\fR, \fB\-\-add\fR \fIuser_name\fR
+.RS 4
+Add an user to the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR \fIuser_name\fR
+.RS 4
+Удалить пользователя из группы\&.
+.sp
+If the
+/etc/gshadow
+file exist, the user will be removed from the list of members and administrators of the group\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-group\fR \fIgroup_name\fR
+.RS 4
+Суперпользователь может указать группу, в которой нужно изменить список членов\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Показать список членов группы\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-purge\fR
+.RS 4
+Вычистить всех пользователей из списка членов группы\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.SH "НАСТРОЙКА"
+.PP
+Исполняемый файл программы
+\fBgroupmems\fR
+должен иметь права
+2770, принадлежать пользователю
+\fIroot\fR
+и группе
+\fIgroups\fR\&. Системный администратор может добавлять пользователей в группу
+\fIgroups\fR, разрешая или запрещая им запускать программу
+\fBgroupmems\fR
+для управления членством в своей группе\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+       $ groupadd \-r groups
+       $ chmod 2770 groupmems
+       $ chown root\&.groups groupmems
+       $ groupmems \-g groups \-a gk4
+    
+.fi
+.if n \{\
+.RE
+.\}
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/groupmod.8 b/man/ru/groupmod.8
new file mode 100644 (file)
index 0000000..34fc59b
--- /dev/null
@@ -0,0 +1,168 @@
+'\" t
+.\"     Title: groupmod
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "groupmod" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+groupmod \- изменяет определение группы в системе
+.SH "СИНТАКСИС"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIпараметры\fR] \fIГРУППА\fR
+.SH "ОПИСАНИЕ"
+.PP
+Команда
+\fBgroupmod\fR
+изменяет определение указанной
+\fIГРУППЫ\fR, изменяя соответствующую запись в базе данных групп\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBgroupmod\fR:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. Values between 0 and 999 are typically reserved for system groups\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR\fIНОВАЯ_ГРУППА\fR
+.RS 4
+Имя группы будет изменено с
+\fIГРУППА\fR
+на
+\fIНОВАЯ_ГРУППА\fR\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\fIПАРОЛЬ\fR
+.RS 4
+Шифрованное значение пароля, которое возвращает функция
+\fBcrypt\fR(3)\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+Команда
+\fBgroupmod\fR
+завершая работу, возвращает следующие значения:
+.PP
+\fI0\fR
+.RS 4
+успешное выполнение
+.RE
+.PP
+\fI2\fR
+.RS 4
+ошибка в параметрах команды
+.RE
+.PP
+\fI3\fR
+.RS 4
+недопустимое значение параметра
+.RE
+.PP
+\fI4\fR
+.RS 4
+указанная группа не существует
+.RE
+.PP
+\fI6\fR
+.RS 4
+указанная группа не существует
+.RE
+.PP
+\fI9\fR
+.RS 4
+такое имя группы уже используется
+.RE
+.PP
+\fI10\fR
+.RS 4
+не удалось изменить файл групп
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/groups.1 b/man/ru/groups.1
new file mode 100644 (file)
index 0000000..91e5c71
--- /dev/null
@@ -0,0 +1,53 @@
+'\" t
+.\"     Title: groups
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Пользовательские команды
+.\"    Source: Пользовательские команды
+.\"  Language: Russian
+.\"
+.TH "groups" "1" "07/24/2009" "Пользовательские команды" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+groups \- показывает имена групп запустившего программу пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIимя\fR]
+.SH "ОПИСАНИЕ"
+.PP
+Команда
+\fBgroups\fR
+показывает имена групп запустившего программу пользователя или их числовые идентификаторы (ID)\&. Если для номера группы нет соответствующей записи в файле
+/etc/group, то отображается числовое значение\&. При указании необязательного параметра
+\fIимя\fR
+выводятся группы для учётной записи с указанным
+\fIименем\fR\&.
+.SH "ЗАМЕЧАНИЕ"
+.PP
+В системах, не имеющих поддержки одновременного членства в группах, используется информация из файла
+/etc/group\&. Для смены своей текущей реальной или эффективной группы пользователь должен использовать команды
+\fBnewgrp\fR
+или
+\fBsg\fR\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/ru/grpck.8 b/man/ru/grpck.8
new file mode 100644 (file)
index 0000000..a17a623
--- /dev/null
@@ -0,0 +1,220 @@
+'\" t
+.\"     Title: grpck
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "grpck" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+grpck \- проверяет корректность файлов групп
+.SH "СИНТАКСИС"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [\-r] [\fIгруппа\fR\ [\ \fIshadow\fR\ ]]
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [\-s] [\fIгруппа\fR\ [\ \fIshadow\fR\ ]]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Выполняются следующие проверки:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+правильное количество полей
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid group name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-r\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/groupand /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+Команда
+\fBgrpck\fR
+завершая работу, возвращает следующие значения:
+.PP
+\fI0\fR
+.RS 4
+успешное выполнение
+.RE
+.PP
+\fI1\fR
+.RS 4
+ошибка в параметрах команды
+.RE
+.PP
+\fI2\fR
+.RS 4
+есть одна или более неправильных записей групп
+.RE
+.PP
+\fI3\fR
+.RS 4
+не удалось открыть файл групп
+.RE
+.PP
+\fI4\fR
+.RS 4
+не удалось заблокировать файл групп
+.RE
+.PP
+\fI5\fR
+.RS 4
+не удалось изменить файл групп
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/ru/grpconv.8 b/man/ru/grpconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ru/grpunconv.8 b/man/ru/grpunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ru/gshadow.5 b/man/ru/gshadow.5
new file mode 100644 (file)
index 0000000..f396e11
--- /dev/null
@@ -0,0 +1,93 @@
+'\" t
+.\"     Title: gshadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Форматы файлов
+.\"    Source: Форматы файлов
+.\"  Language: Russian
+.\"
+.TH "gshadow" "5" "07/24/2009" "Форматы файлов" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+gshadow \- файл с защищаемой информацией о группах
+.SH "ОПИСАНИЕ"
+.PP
+
+/etc/gshadow
+contains the shadowed information for group accounts\&.
+.PP
+Этот файл должен быть недоступен обычному пользователю, если нужно обеспечить безопасность паролей\&.
+.PP
+Each line of this file contains the following colon\-separated fields:
+.PP
+\fBимя группы\fR
+.RS 4
+It must be a valid group name, which exist on the system\&.
+.RE
+.PP
+\fBшифрованный пароль\fR
+.RS 4
+Подробней о пароле смотрите на странице руководства
+\fBcrypt\fR(3)\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, users will not be able to use a unix password to access the group (but group members do not need the password)\&.
+.sp
+The password is used when an user who is not a member of the group wants to gain the permissions of this group (see
+\fBnewgrp\fR(1))\&.
+.sp
+This field may be empty, in which case only the group members can gain the group permissions\&.
+.sp
+A password field which starts with a exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+This password supersedes any password specified in
+/etc/group\&.
+.RE
+.PP
+\fBadministrators\fR
+.RS 4
+It must be a comma\-separated list of user names\&.
+.sp
+Administrators can change the password or the members of the group\&.
+.sp
+Administrators also have the same permissions as the members (see below)\&.
+.RE
+.PP
+\fBmembers\fR
+.RS 4
+It must be a comma\-separated list of user names\&.
+.sp
+Members can access the group without being prompted for a password\&.
+.sp
+You should use the same list of users as in
+/etc/group\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBgpasswd\fR(5),
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBgrpconv\fR(8),
+\fBnewgrp\fR(1)\&.
diff --git a/man/ru/id.1 b/man/ru/id.1
new file mode 100644 (file)
index 0000000..70bcc8d
--- /dev/null
@@ -0,0 +1,52 @@
+'\" t
+.\"     Title: id
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Пользовательские команды
+.\"    Source: Пользовательские команды
+.\"  Language: Russian
+.\"
+.TH "id" "1" "07/24/2009" "Пользовательские команды" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+id \- display current user and group ID names
+.SH "СИНТАКСИС"
+.HP \w'\fBid\fR\ 'u
+\fBid\fR [\-a]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBid\fR
+command displays the current real and effective user and group ID names or values\&. If the value does not have a corresponding entry in
+/etc/passwd
+or
+/etc/group, the value will be displayed without the corresponding name\&. The optional
+\fB\-a\fR
+flag will display the group set on systems which support multiple concurrent group membership\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)
diff --git a/man/ru/lastlog.8 b/man/ru/lastlog.8
new file mode 100644 (file)
index 0000000..e24befb
--- /dev/null
@@ -0,0 +1,88 @@
+'\" t
+.\"     Title: lastlog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "lastlog" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+lastlog \- выводит отчёт о последней регистрации в системе всех или указанного пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+Программа
+\fBlastlog\fR
+упорядочивает и выводит содержимое файла
+/var/log/lastlog, который содержит даты последнего входа пользователей систему\&. Выводятся
+\fIимя пользователя\fR,
+\fIпорт\fR
+\fIдата последнего входа в систему\fR\&. По умолчанию (вызов без параметров) показываются записи файла lastlog, отсортированные согласно расположению пользователей в файле
+/etc/passwd\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBlastlog\fR:
+.PP
+\fB\-b\fR, \fB\-\-before\fR\fIДНЕЙ\fR
+.RS 4
+Показать записи lastlog за последние
+\fIДНЕЙ\fR\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\fIДНЕЙ\fR
+.RS 4
+Показать записи lastlog новее чем
+\fIДНЕЙ\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR \fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Print the lastlog record of the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+Если пользователь никогда не регистрировался в системе, то будет показано сообщение
+\fI** Никогда не входил в систему**\fR
+вместо названия порта и даты\&.
+.PP
+Only the entries for the current users of the system will be displayed\&. Other entries may exist for users that were deleted previously\&.
+.SH "ЗАМЕЧАНИЕ"
+.PP
+Файл
+lastlog
+содержит информацию о последней регистрации в системе каждого пользователя\&. Вы не должны применять к нему ротацию журнальных файлов\&. Этот файл является разреженным, поэтому его размер на диске гораздо меньше, чем показывает команда "\fBls \-l\fR" (которая может показывать, что это очень большой файл, если значения идентификаторов пользователей в системе достигают больших значений)\&. Чтобы увидеть реальный размер введите "\fBls \-s\fR"\&.
+.SH "ФАЙЛЫ"
+.PP
+/var/log/lastlog
+.RS 4
+содержит список завершённых сеансов работы с системой
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Большие промежутки в значениях идентификаторов пользователей приводят к тому, что программа некоторое время ничего не выводит на экран (то есть, если в базе данных lastlog нет пользователей с идентификаторами с 170 по 800, то во время обработки UID с 171 по 799 программа кажется повисшей)\&.
diff --git a/man/ru/limits.5 b/man/ru/limits.5
new file mode 100644 (file)
index 0000000..97b8382
--- /dev/null
@@ -0,0 +1,250 @@
+'\" t
+.\"     Title: limits
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Форматы файлов
+.\"    Source: Форматы файлов
+.\"  Language: Russian
+.\"
+.TH "limits" "5" "07/24/2009" "Форматы файлов" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+limits \- файл контроля ресурсов
+.SH "ОПИСАНИЕ"
+.PP
+В файле
+\fIlimits\fR
+(по умолчанию
+/etc/limits
+или определяется значением LIMITS_FILE в файле
+config\&.h) описываются ограничения, которые можно изменять\&. Этот файл должен принадлежать суперпользователю и право на чтение должно быть только у суперпользователя\&.
+.PP
+По умолчанию учётная запись \'root\' ничем не ограничена\&. Фактически, никак нельзя установить ограничения с помощью этой процедуры на учётные записи, имеющие права суперпользователя (учётные записи с UID равным 0)\&.
+.PP
+Каждая строка описывает ограничение для одного пользователя имеет вид:
+.PP
+
+\fIuser СТРОКА_ОГРАНИЧЕНИЙ\fR
+.PP
+\fIСТРОКА_ОГРАНИЧЕНИЙ\fR
+.PP
+Допустимые идентификаторы:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+A: максимальное адресное пространство (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+C: максимальный размер файла core (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+D: максимальный размер данных (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+F: максимальный размер файла (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+M: максимальное синхронизируемое адресное пространство памяти (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+N: максимальное число открытых файлов
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+R: максимальный размер резидентного сегмента (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+S: максимальный размер стека (КБ)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+T: максимальное время использования процессора (минут)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+U: максимальное число процессов
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+K: маска создаваемых файлов, устанавливается с помощью вызова
+\fBumask\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+L: максимальное число возможных регистраций в системе этого пользователя
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+P: приоритет процесса, устанавливается с помощью вызова
+\fBsetpriority\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+I: max nice value (0\&.\&.39 which translates to 20\&.\&.\-19)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+O: max real time priority
+.RE
+.PP
+For example,
+\fIL2D2048N5\fR
+is a valid
+\fILIMITS_STRING\fR\&. For reading convenience, the following entries are equivalent:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      username L2D2048N5
+      username L2 D2048 N5
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Заметим, что после
+\fIusername\fR
+оставшаяся часть строки считается строкой ограничений, поэтому комментарии недопустимы\&. Неправильная строка ограничений будет отброшена (не учтена) программой
+\fBlogin\fR\&.
+.PP
+Запись по умолчанию выглядит как username"\fI*\fR"\&. Если у вас есть несколько записей
+\fIпо умолчанию\fR
+в файле
+\fILIMITS_FILE\fR, то будет использоваться последняя\&.
+.PP
+Чтобы полностью снять ограничения с пользователя, используется одиночное тире "\fI\-\fR
+"\&.
+.PP
+Также заметьте, что все настройки ограничений делаются ДЛЯ КОНКРЕТНОЙ УЧЁТНОЙ ЗАПИСИ\&. Они не являются глобальными и не постоянны\&. Возможно глобальные ограничения и появятся, но пока это только в планах ;)
+.SH "ФАЙЛЫ"
+.PP
+/etc/limits
+.RS 4
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1),
+\fBsetpriority\fR(2),
+\fBsetrlimit\fR(2)\&.
diff --git a/man/ru/login.1 b/man/ru/login.1
new file mode 100644 (file)
index 0000000..72332a0
--- /dev/null
@@ -0,0 +1,473 @@
+'\" t
+.\"     Title: login
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Пользовательские команды
+.\"    Source: Пользовательские команды
+.\"  Language: Russian
+.\"
+.TH "login" "1" "07/24/2009" "Пользовательские команды" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+login \- начинает сеанс в системе
+.SH "СИНТАКСИС"
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIхост\fR] [\fIимя_пользователя\fR] [\fIПЕРЕМЕННАЯ_СРЕДЫ=ЗНАЧЕНИЕ\fR...]
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIхост\fR] \-f \fIимя_пользователя\fR
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] \-r\ \fIхост\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBlogin\fR
+program is used to establish a new session with the system\&. It is normally invoked automatically by responding to the
+\fIlogin:\fR
+prompt on the user\'s terminal\&.
+\fBlogin\fR
+may be special to the shell and may not be invoked as a sub\-process\&. When called from a shell,
+\fBlogin\fR
+should be executed as
+\fBexec login\fR
+which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller)\&. Attempting to execute
+\fBlogin\fR
+from any shell but the login shell will produce an error message\&.
+.PP
+В какой\-то момент пользователя попросят ввести свой пароль\&. Чтобы недопустить раскрытия, символы при вводе пароля не отображаются\&. Разрешено очень маленькое число попыток ввода неправильного пароля, перед тем как
+\fBlogin\fR
+закончит работу и прервёт подключение\&.
+.PP
+Если включён механизм устаревания пароля учётной записи, то перед входом в систему может потребоваться смена пароля\&. Для этого нужно ввести старый пароль и новый пароль\&. Подробней об этом написано в
+\fBpasswd\fR(1)\&.
+.PP
+После успешного входа в систему, будут показаны сообщения от системы и о наличии почты\&. Можно отключить вывод файла системных сообщений из файла
+/etc/motd, создав в домашнем каталоге файл нулевой длины с именем
+\&.hushlogin\&. Сообщение о наличии почты может быть одним из: "\fIУ вас есть новая почта\&.\fR", "\fIУ вас есть почта\&.\fR" или "\fIУ вас нет почты\&.\fR", в зависимости от наполненности почтового ящика\&.
+.PP
+Значения идентификатора учётной записи и группы будет взято из файла
+/etc/passwd\&. Значения переменных
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$PATH\fR,
+\fB$LOGNAME\fR
+\fB$MAIL\fR
+устанавливаются согласно соответствующим полям учётной записи пользователя\&. Также могут быть установлены значения ulimit, umask и nice из поля GECOS\&.
+.PP
+В некоторых системах переменной среды
+\fB$TERM\fR
+будет присвоен тип терминала линии tty, согласно данным из файла
+/etc/ttytype\&.
+.PP
+Также может быть выполнен сценарий инициализации пользовательского интерпретатора команд\&. Подробней об этой функции смотрите соответствующую страницу руководства\&.
+.PP
+Субсистемный вход в систему можно распознать по наличию символа "*" в начале регистрационной оболочки\&. Заданный домашний каталог будет использован как корень новой файловой системы, в которой регистрируется пользователь\&.
+.PP
+Программа
+\fBlogin\fR
+НЕ удаляет записи о пользователях из файла utmp\&. Эта задача программ
+\fBgetty\fR(8)
+\fBinit\fR(8)
+удалять записи о владельце терминального сеанса\&. Если
+\fBlogin\fR
+запускается из командной строки без
+\fBexec\fR, то пользователь продолжает находиться в системе даже после завершения работы в "порождённом сеансе"\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+\fB\-f\fR
+.RS 4
+Не выполнять аутентификацию, пользователь уже прошёл проверку\&.
+.sp
+Note: In that case,
+\fIusername\fR
+is mandatory\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+Имя удалённого хоста, на который нужно войти\&.
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+Сохранить среду\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Выполнить протокол autologin для rlogin\&.
+.RE
+.PP
+Параметры
+\fB\-r\fR,
+\fB\-h\fR
+\fB\-f\fR
+используются только если
+\fBlogin\fR
+запускается суперпользователем\&.
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Данная версия
+\fBlogin\fR
+может быть собрана с разными параметрами и только некоторые из них смогут быть использованы на любой машине\&.
+.PP
+Расположение файлов может отличаться на разных системах\&.
+.PP
+Программа
+\fBlogin\fR
+НЕ удаляет записи о пользователях из файла utmp\&. Эта задача программ
+\fBgetty\fR(8)
+\fBinit\fR(8)
+удалять записи о владельце терминального сеанса\&. Если
+\fBlogin\fR
+запускается из командной строки без
+\fBexec\fR, то пользователь продолжает находиться в системе даже после завершения работы в "порождённом сеансе"\&.
+.PP
+As with any program,
+\fBlogin\fR\'s appearance can be faked\&. If non\-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine\&. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Delay in seconds before being allowed another attempt after a login failure\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\' shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+If defined, login failures will be logged in this file in a utmp format\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\'s name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\'s home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+If defined, this file will be displayed before each login prompt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of /var/log/lastlog login time info\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Maximum number of login retries in case of bad password\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Max time in seconds for login\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Enable logging of successful logins\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Enable display of unknown usernames when login failures are recorded\&.
+.sp
+Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Почтовый каталог\&. Данный параметр нужен для управления почтовым ящиком при изменении или удалении учётной записи пользователя\&. Если параметр не задан, то используется значение указанное при сборке\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in /etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\'s primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/var/run/utmp
+.RS 4
+содержит список работающих сеансов в системе
+.RE
+.PP
+/var/log/wtmp
+.RS 4
+содержит список завершённых сеансов работы с системой
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/motd
+.RS 4
+содержит системные сообщения за день
+.RE
+.PP
+/etc/nologin
+.RS 4
+при существовании файла блокируется доступ в систему обычным пользователям
+.RE
+.PP
+/etc/ttytype
+.RS 4
+содержит список типов терминалов
+.RE
+.PP
+$HOME/\&.hushlogin
+.RS 4
+при существовании файла системные сообщения при входе в систему не выводятся
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBmail\fR(1),
+\fBpasswd\fR(1),
+\fBsh\fR(1),
+\fBsu\fR(1),
+\fBlogin.defs\fR(5),
+\fBnologin\fR(5),
+\fBpasswd\fR(5),
+\fBsecuretty\fR(5),
+\fBgetty\fR(8)\&.
diff --git a/man/ru/login.access.5 b/man/ru/login.access.5
new file mode 100644 (file)
index 0000000..fa95203
--- /dev/null
@@ -0,0 +1,58 @@
+'\" t
+.\"     Title: login.access
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Форматы файлов
+.\"    Source: Форматы файлов
+.\"  Language: Russian
+.\"
+.TH "login\&.access" "5" "07/24/2009" "Форматы файлов" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+login.access \- файл контроля доступа в систему
+.SH "ОПИСАНИЕ"
+.PP
+В файле
+\fIlogin\&.access\fR
+определяются комбинации (пользователь, хост) и/или (пользователь, терминал), которым будет разрешён или запрещён вход в систему\&.
+.PP
+Когда кто\-то пытается войти в систему выполняется сканирование файла
+\fIlogin\&.access\fR
+в поисках первой совпадающей записи (пользователь, хост), или в случае не сетевого входа, первой совпадающей записи (пользователь, терминал)\&. Из найденной записи выбирается поле прав доступа, по которому определяется разрешать ли данной учётной записи вход в систему или нет\&.
+.PP
+Каждая строка таблицы контроля доступа в систему состоит из трёх полей разделённых символом ":" и выглядит так:
+.PP
+\fIправа_доступа\fR:\fIпользователи\fR:\fIисточники\fR
+.PP
+Первое поле должно содержать символ "\fI+\fR" (доступ разрешён) или "\fI\-\fR" (доступ запрещён)\&. Второе поле должно содержать имя одной или более учётных записей, имена групп или
+\fIALL\fR
+(всегда совпадает)\&. Третье поле должно содержать одно или нескольких имён терминалов (для доступа не из сети), имена хостов, доменных имён (начинаются с "\&."), адреса хостов, адреса подсетей (заканчиваются на "\&."),
+\fIALL\fR
+(всегда совпадает) или
+\fILOCAL\fR
+(любая строка, не содержащая символа "\&.")\&. Если используется NIS, то также можно использовать @имя_сетевой_группы в шаблонах хостов или именах пользователей\&.
+.PP
+Оператор
+\fIEXCEPT\fR
+помогает в написании компактных правил\&.
+.PP
+Поиск в файле групп производится только когда имя не совпадает с регистрирующимся пользователем\&. Рассматриваются группы только с явно прописанными в них пользователями: программа не принимает во внимание значение первичной группы пользователя\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/ru/login.defs.5 b/man/ru/login.defs.5
new file mode 100644 (file)
index 0000000..991cbfd
--- /dev/null
@@ -0,0 +1,795 @@
+'\" t
+.\"     Title: login.defs
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Форматы файлов
+.\"    Source: Форматы файлов
+.\"  Language: Russian
+.\"
+.TH "login\&.defs" "5" "07/24/2009" "Форматы файлов" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+login.defs \- содержит конфигурацию подсистемы теневых паролей
+.SH "ОПИСАНИЕ"
+.PP
+Файл
+/etc/login\&.defs
+содержит настройки подсистемы теневых паролей (shadow password suite)\&. Этот файл является обязательным\&. Отсутствие данного файла не повлияет на работу системы, но, вероятно, приведёт к выполнению нежелаемых операций\&.
+.PP
+Файл представляет собой обычный текстовый файл; каждая строка описывает один параметр конфигурации\&. Строки состоят из названия параметра и его значения, которые разделяются пробельным символом\&. Пустые строки и комментарии игнорируются\&. Комментарии начинаются со знака фунта "#", который должен быть первым непробельным символом в строке\&.
+.PP
+Parameter values may be of four types: strings, booleans, numbers, and long numbers\&. A string is comprised of any printable characters\&. A boolean should be either the value
+\fIyes\fR
+or
+\fIno\fR\&. An undefined boolean parameter or one with a value other than these will be given a
+\fIno\fR
+value\&. Numbers (both regular and long) may be either decimal values, octal values (precede the value with
+\fI0\fR) or hexadecimal values (precede the value with
+\fI0x\fR)\&. The maximum value of the regular and long numeric parameters is machine\-dependent\&.
+.PP
+Возможны следующие параметры конфигурации:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indicate if a home directory should be created by default for new users\&.
+.sp
+This setting does not apply to system users, and can be overriden on the command line\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Delay in seconds before being allowed another attempt after a login failure\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\' shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+If defined, login failures will be logged in this file in a utmp format\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\'s name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\'s home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+If defined, this file will be displayed before each login prompt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of /var/log/lastlog login time info\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Enable logging of successful logins\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Enable display of unknown usernames when login failures are recorded\&.
+.sp
+Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Maximum number of login retries in case of bad password\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Max time in seconds for login\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Почтовый каталог\&. Данный параметр нужен для управления почтовым ящиком при изменении или удалении учётной записи пользователя\&. Если параметр не задан, то используется значение указанное при сборке\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Максимальное число дней использования пароля\&. Если пароль старее этого числа, то будет запущена процедура смены пароля\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Максимальное число дней между изменениями пароля\&. Любая смена пароля ранее заданного срока выполнена не будет\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Число дней за которое начнёт выдаваться предупреждение об устаревании пароля\&. Нулевое значение означает, что предупреждение выдаётся в день устаревания, при отрицательном значении предупреждение выдаваться не будет\&. Если значение не задано, выдача предупреждения отключается\&.
+.RE
+.PP
+
+\fBPASS_MAX_DAYS\fR,
+\fBPASS_MIN_DAYS\fR
+and
+\fBPASS_WARN_AGE\fR
+are only used at the time of account creation\&. Any changes to these settings won\'t affect existing accounts\&.
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\'t change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in /etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+If defined, all su activity is logged to this file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\'t exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\'s primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+Определяет программу, которая будет запущена при удалении пользователя\&. Она должна удалять любые задания at/cron/печати удаляемого пользователя (передаётся в качестве первого аргумента)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\'s cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+       echo "Usage: $0 username"
+       exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+      
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "CROSS REFERENCES"
+.PP
+The following cross references show which programs in the shadow password suite use which parameters\&.
+.PP
+chfn
+.RS 4
+
+CHFN_AUTH
+CHFN_RESTRICT
+LOGIN_STRING
+.RE
+.PP
+chgpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chpasswd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chsh
+.RS 4
+CHSH_AUTH LOGIN_STRING
+.RE
+.PP
+gpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+groupadd
+.RS 4
+GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN
+.RE
+.PP
+groupdel
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmems
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmod
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpck
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpunconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+login
+.RS 4
+
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE
+ERASECHAR FAIL_DELAY
+FAILLOG_ENAB
+FAKE_SHELL
+FTMP_FILE
+HUSHLOGIN_FILE
+ISSUE_FILE
+KILLCHAR
+LASTLOG_ENAB
+LOGIN_RETRIES
+LOGIN_STRING
+LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
+MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB
+TTYGROUP TTYPERM TTYTYPE_FILE
+ULIMIT UMASK
+USERGROUPS_ENAB
+.RE
+.PP
+newgrp / sg
+.RS 4
+SYSLOG_SG_ENAB
+.RE
+.PP
+newusers
+.RS 4
+ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+passwd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+pwck
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+pwconv
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+su
+.RS 4
+
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENVIRON_FILE
+ENV_PATH ENV_SUPATH
+ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB
+SULOG_FILE SU_NAME
+SU_WHEEL_ONLY
+SYSLOG_SU_ENAB
+USERGROUPS_ENAB
+.RE
+.PP
+sulogin
+.RS 4
+ENV_HZ
+ENV_TZ
+.RE
+.PP
+useradd
+.RS 4
+CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+userdel
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB
+.RE
+.PP
+usermod
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBpam\fR(8)\&.
diff --git a/man/ru/logoutd.8 b/man/ru/logoutd.8
new file mode 100644 (file)
index 0000000..1118abb
--- /dev/null
@@ -0,0 +1,48 @@
+'\" t
+.\"     Title: logoutd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "logoutd" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+logoutd \- контролирует временные интервалы работы в системе
+.SH "СИНТАКСИС"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "ОПИСАНИЕ"
+.PP
+Программа
+\fBlogoutd\fR
+контролирует временные ограничения работы в системе и порты, заданные в файле
+/etc/porttime\&. Программа
+\fBlogoutd\fR
+должен запускаться из сценария
+/etc/rc\&. Файл
+/var/run/utmp
+периодически сканируется и для каждого имени пользователя проверяется, разрешено ли данному пользователю работать в настоящий момент на данном порту\&. Любая сессия, которая нарушает ограничения, описанные в файле
+/etc/porttime, будет завершена\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/porttime
+.RS 4
+содержит разрешённое время работы определённых пользователей с определённых портов
+.RE
+.PP
+/var/run/utmp
+.RS 4
+содержит список работающих сеансов в системе
+.RE
diff --git a/man/ru/newgrp.1 b/man/ru/newgrp.1
new file mode 100644 (file)
index 0000000..17612a6
--- /dev/null
@@ -0,0 +1,86 @@
+'\" t
+.\"     Title: newgrp
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Пользовательские команды
+.\"    Source: Пользовательские команды
+.\"  Language: Russian
+.\"
+.TH "newgrp" "1" "07/24/2009" "Пользовательские команды" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+newgrp \- выполняет регистрацию пользователя в новой группе
+.SH "СИНТАКСИС"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIгруппа\fR]
+.SH "ОПИСАНИЕ"
+.PP
+Программа
+\fBnewgrp\fR
+используется для изменения ID текущей группы в работающем сеансе\&. Если указан необязательный параметр
+\fB\-\fR, то рабочая среда пользователя будет реиницилизирована, как если бы пользователь заново вошёл в систему, иначе имеющаяся среда, включая текущий рабочий каталог, изменены не будут\&.
+.PP
+Программа
+\fBnewgrp\fR
+изменяет идентификатор текущей реальной группы на заданный или на группу по умолчанию, указанную в файле
+/etc/passwd, в случае если имя группы не указано\&. Программа
+\fBnewgrp\fR
+также пытается добавить группу в список групп пользователя\&. Если пользователь не является суперпользователем, то его попросят ввести пароль, даже если он его не имеет (в файле
+/etc/shadow, если для этого пользователя имеется запись в файле теневых паролей, иначе используется файл
+/etc/passwd), а группа имеет, или если пользователь не является членом группы, а группа имеет пароль\&. Если пользователь не является членом группы, а у группы пустой пароль, то пользователю будет отказано в доступе\&.
+.PP
+Если есть запись для этой группы в файле
+/etc/gshadow,то список членов и пароль этой группы будут взяты из этого файла, иначе используется запись из файла
+/etc/group\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/ru/newusers.8 b/man/ru/newusers.8
new file mode 100644 (file)
index 0000000..8d70684
--- /dev/null
@@ -0,0 +1,376 @@
+'\" t
+.\"     Title: newusers
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "newusers" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+newusers \- обновляет и создаёт новые учётные записи пользователей в пакетном режиме
+.SH "СИНТАКСИС"
+.HP \w'\fBnewusers\fR\ 'u
+\fBnewusers\fR [\fIпараметры\fR\ \fInew_users\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBnewusers\fR
+command reads a file of user name and clear\-text password pairs and uses this information to update a group of existing users or to create new users\&. Each line is in the same format as the standard password file (see
+\fBpasswd\fR(5)) with the exceptions explained below:
+.PP
+pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
+.PP
+\fIpw_name\fR
+.RS 4
+This is the name of the user\&.
+.sp
+It can be the name of a new user or the name of an existing user (or an user created before by
+\fBnewusers\fR)\&. In case of an existing user, the user\'s information will be changed, otherwise a new user will be created\&.
+.RE
+.PP
+\fIpw_passwd\fR
+.RS 4
+Это поле будет зашифровано и использовано как новое значение шифрованного пароля\&.
+.RE
+.PP
+\fIpw_uid\fR
+.RS 4
+This field is used to define the UID of the user\&.
+.sp
+If the field is empty, an new (unused) UID will be defined automatically by
+\fBnewusers\fR\&.
+.sp
+If this field contains a number, this number will be used as the UID\&.
+.sp
+If this field contains the name of an existing user (or the name of an user created before by
+\fBnewusers\fR), the UID of the specified user will be used\&.
+.sp
+If the UID of an existing user is changed, the files ownership of the user\'s file should be fixed manually\&.
+.RE
+.PP
+\fIpw_gid\fR
+.RS 4
+This field is used to define the primary group ID for the user\&.
+.sp
+If this field contains the name of an existing group (or a group created before by
+\fBnewusers\fR), the GID of this group will be used as the primary group ID for the user\&.
+.sp
+If this field is a number, this number will be used as the primary group ID of the user\&. If no groups exist with this GID, a new group will be created with this GID, and the name of the user\&.
+.sp
+If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and as the GID for the new group\&.
+.sp
+If this field contains the name of a group which does not exist (and was not created earlier wbefore by
+\fBnewusers\fR), a new group will be created with the specified name and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and Gs the ID for the new group\&.
+.RE
+.PP
+\fIpw_gecos\fR
+.RS 4
+This field is copied in the GECOS field of the user\&.
+.RE
+.PP
+\fIpw_dir\fR
+.RS 4
+This field is used to define the home directory of the user\&.
+.sp
+If this field does not specify an existing directory, the specified directory is created, with ownership set to the user being created or updated and its primary group\&.
+.sp
+If the home directory of an existing user is changed,
+\fBnewusers\fR
+does not move or copy the content of the old directory to the new location\&. This should be done manually\&.
+.RE
+.PP
+\fIpw_shell\fR
+.RS 4
+This field defines the shell of the user\&. No checks are performed on this field\&.
+.RE
+.PP
+
+\fBnewusers\fR
+first tries to create or change all the specified users, and then write these changes to the user or group databases\&. If an error occurs (except in the final writes to the databases), no changes are committed to the databases\&.
+.PP
+Данная команда предназначена для работы в крупных системных средах, где за один раз заводится несколько учётных записей\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+The options which apply to the
+\fBnewusers\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system account\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are choosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Файл с входными данными должен быть защищён, так как в нём содержатся не шифрованные пароли\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Максимальное число дней использования пароля\&. Если пароль старее этого числа, то будет запущена процедура смены пароля\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Максимальное число дней между изменениями пароля\&. Любая смена пароля ранее заданного срока выполнена не будет\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Число дней за которое начнёт выдаваться предупреждение об устаревании пароля\&. Нулевое значение означает, что предупреждение выдаётся в день устаревания, при отрицательном значении предупреждение выдаваться не будет\&. Если значение не задано, выдача предупреждения отключается\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(1),
+\fBuseradd\fR(8)\&.
diff --git a/man/ru/nologin.8 b/man/ru/nologin.8
new file mode 100644 (file)
index 0000000..6240554
--- /dev/null
@@ -0,0 +1,42 @@
+'\" t
+.\"     Title: nologin
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "nologin" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+nologin \- вежливо отказывает во входе в систему
+.SH "СИНТАКСИС"
+.HP \w'\fBnologin\fR\ 'u
+\fBnologin\fR
+.SH "ОПИСАНИЕ"
+.PP
+Программа
+\fBnologin\fR
+выдаёт сообщение, что учётная запись недоступна и завершает работу с ненулевым кодом возврата\&. Она предназначена для замены оболочки командной строки в поле оболочки у заблокированных учётных записей\&.
+.PP
+Чтобы заблокировать все учётные записи посмотрите страницу руководства
+\fBnologin\fR(5)\&.
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1),
+\fBnologin\fR(5)\&.
+.SH "HISTORY"
+.PP
+The
+\fBnologin\fR
+command appearred in BSD 4\&.4\&.
diff --git a/man/ru/passwd.1 b/man/ru/passwd.1
new file mode 100644 (file)
index 0000000..ee26a3e
--- /dev/null
@@ -0,0 +1,383 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Пользовательские команды
+.\"    Source: Пользовательские команды
+.\"  Language: Russian
+.\"
+.TH "passwd" "1" "07/24/2009" "Пользовательские команды" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+passwd \- изменяет пароль пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIпараметры\fR] [\fILOGIN\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBpasswd\fR
+command changes passwords for user accounts\&. A normal user may only change the password for his/her own account, while the superuser may change the password for any account\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "Изменение пароля"
+.PP
+Сначала пользователя попросят ввести старый пароль, если он был\&. Этот пароль зашифровывается и сравнивается с имеющимся\&. У пользователя есть только одна попытка ввести правильный пароль\&. Для суперпользователя этот шаг пропускается, для того чтобы можно было изменить забытый пароль\&.
+.PP
+После ввода пароля проверяется информация об устаревании пароля, чтобы убедиться, что пользователю разрешено изменять пароль в настоящий момент\&. Если нет, то
+\fBpasswd\fR
+не производит изменение пароля и завершает работу\&.
+.PP
+Затем пользователю предложат дважды ввести новый пароль\&. Значение второго ввода сравнивается с первым и для изменения пароли из обеих попыток должны совпасть\&.
+.PP
+Затем пароль тестируется на сложность подбора\&. Согласно общим принципам, пароли должны быть длиной от 6 до 8 символов и включать один или более символов каждого типа:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+строчные буквы
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+цифры от 0 до 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+знаки пунктуации
+.RE
+.PP
+Не включайте системные символы стирания и удаления\&. Программа
+\fBpasswd\fR
+не примет пароль, который не имеет достаточной сложности\&.
+.SS "Выбор пароля"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+Компромиссом в безопасности пароля является небрежный выбор пароля и сложность работы с ним\&. По этой причине, вы не должны использовать пароль, который является словом из словаря или который придётся записать из\-за его сложности\&. Также, пароль не должен быть названием чего\-либо, номером вашей лицензии, днём рождения и домашним адресом\&. Обо всём этом легко догадаться, что приведёт к нарушению безопасности системы\&.
+.PP
+You can find advices on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBpasswd\fR:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Этот параметр можно использовать только вместе с
+\fB\-S\fR
+для вывода статуса всех пользователей\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+Удалить пароль пользователя (сделать его пустым)\&. Это быстрый способ заблокировать пароль учётной записи\&. Это делает указанную учётную запись беспарольной\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+Немедленно сделать пароль устаревшим\&. В результате это заставит пользователя изменить пароль при следующем входе в систему\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR\fIДНЕЙ\fR
+.RS 4
+Этот параметр используется для блокировки учётной записи по прошествии заданного числа дней после устаревания пароля\&. То есть, если пароль устарел и прошло более указанных
+\fIДНЕЙ\fR, то пользователь больше не сможет использовать данную учётную запись\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Указывает, что изменение пароля нужно выполнить только для устаревших ключей аутентификации (паролей)\&. Пользователи хотят оставить свои непросроченные ключи нетронутыми\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Lock the password of the named account\&. This option disables a password by changing it to a value which matches no possible encrypted value (it adds a \(aa!\(aa at the beginning of the password)\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\'s expire date to Jan 2, 1970)\&.
+.sp
+Users with a locked password are not allowed to change their password\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR \fIMIN_DAYS\fR
+.RS 4
+Задать
+\fIминимальное количество дней\fR
+между сменой пароля\&. Нулевое значение этого поля указывает на то, что пользователь может менять свой пароль когда захочет\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Не выводить сообщений при работе\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR\fIРЕПОЗИТОРИЙ\fR
+.RS 4
+Изменить пароль в
+\fIРЕПОЗИТОРИИ\fR\&.
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Display account status information\&. The status information consists of 7 fields\&. The first field is the user\'s login name\&. The second field indicates if the user account has a locked password (L), has no password (NP), or has a usable password (P)\&. The third field gives the date of the last password change\&. The next four fields are the minimum age, maximum age, warning period, and inactivity period for the password\&. These ages are expressed in days\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR\fIПРЕД_ДНЕЙ\fR
+.RS 4
+Установить число дней выдачи предупреждения, перед тем как потребуется смена пароля\&. В параметре
+\fIПРЕД_ДНЕЙ\fR
+указывается число дней перед тем как пароль устареет, в течении которых пользователю будут напоминать, что пароль скоро устареет\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR\fIМАКС_ДНЕЙ\fR
+.RS 4
+Установить максимальное количество дней, в течении которых пароль остаётся рабочим\&. После
+\fIМАКС_ДНЕЙ\fR
+пароль нужно изменить\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Password complexity checking may vary from site to site\&. The user is urged to select a password as complex as he or she feels comfortable with\&.
+.PP
+Users may not be able to change their password on a system if NIS is enabled and they are not logged into the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\'t change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+Программа
+\fBpasswd\fR
+завершая работу, возвращает следующие значения:
+.PP
+\fI0\fR
+.RS 4
+успешное выполнение
+.RE
+.PP
+\fI1\fR
+.RS 4
+доступ запрещён
+.RE
+.PP
+\fI2\fR
+.RS 4
+недопустимая комбинация параметров
+.RE
+.PP
+\fI3\fR
+.RS 4
+неожиданная ошибка при работе, ничего не сделано
+.RE
+.PP
+\fI4\fR
+.RS 4
+неожиданная ошибка при работе, отсутствует файл
+passwd
+.RE
+.PP
+\fI5\fR
+.RS 4
+файл
+passwd
+занят другой программой, попробуйте ещё раз
+.RE
+.PP
+\fI6\fR
+.RS 4
+недопустимое значение параметра
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/passwd.5 b/man/ru/passwd.5
new file mode 100644 (file)
index 0000000..a496c42
--- /dev/null
@@ -0,0 +1,167 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Форматы файлов
+.\"    Source: Форматы файлов
+.\"  Language: Russian
+.\"
+.TH "passwd" "5" "07/24/2009" "Форматы файлов" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+passwd \- файл паролей
+.SH "ОПИСАНИЕ"
+.PP
+Файл
+/etc/passwd
+содержит учётные записи пользователей, по одной в каждой строке\&. Строка состоит из семи полей, разделённых двоеточиями (\(Fo:\(Fc)\&. Поля:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+имя пользователя для входа в систему
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+необязательный зашифрованный пароль
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+числовой идентификатор пользователя
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+числовой идентификатор группы
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ФИО пользователя или поле комментария
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+домашний каталог пользователя
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+необязательный интерпретатор командной строки пользователя
+.RE
+.PP
+Поле с зашифрованным паролем может быть пустым, и тогда для входа под этой учётной записью пароль не требуется\&. Однако, некоторые приложения, которые читают файл
+/etc/passwd, могут решить не позволять
+\fIлюбой\fR
+доступ, если поле
+\fIпароль\fR
+пустое\&. Если поле
+\fIпароль\fR
+содержит строчную
+\(Fox\(Fc, то шифрованный пароль хранится в файле
+\fBshadow\fR(5)
+\fIдолжна\fR
+быть соответствующая строка в файле
+shadow, иначе учётная запись считается недействительной\&. Если в поле
+\fIпароль\fR
+содержится какая\-то другая строка, то она воспринимается как шифрованный пароль, как определено в
+\fBcrypt\fR(3)\&.
+.PP
+Поле комментария используется различными системными утилитами, такими как
+\fBfinger\fR(1)\&.
+.PP
+В поле домашнего каталога хранится начальный рабочий каталог\&. Программа
+\fBlogin\fR
+использует эту информацию для установки значения переменной среды
+\fB$HOME\fR\&.
+.PP
+В поле интерпретатора командной строки хранится название интерпретатора командной строки пользователя или программы, которая будет запущена первой\&. Программа
+\fBlogin\fR
+использует эту информацию для установки значения переменной среды
+\fB$SHELL\fR\&. Если это поле пустое, то используется значение по умолчанию
+/bin/sh\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+необязательный файл с шифрованными паролями
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+Backup file for /etc/passwd\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/ru/porttime.5 b/man/ru/porttime.5
new file mode 100644 (file)
index 0000000..3924f72
--- /dev/null
@@ -0,0 +1,89 @@
+'\" t
+.\"     Title: porttime
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Форматы файлов
+.\"    Source: Форматы файлов
+.\"  Language: Russian
+.\"
+.TH "porttime" "5" "07/24/2009" "Форматы файлов" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+porttime \- файл с временами доступа к портам
+.SH "ОПИСАНИЕ"
+.PP
+Файл
+\fIporttime\fR
+содержит список устройств tty, имена пользователей и разрешённое время входа\&.
+.PP
+Каждая запись состоит из трёх полей, разделённых двоеточиями\&. В первом поле содержится список устройств tty (перечисленных через запятую) или звёздочка, указывающая, что все устройства tty попадают под правило этой записи\&. Во втором поле содержится список имён пользователей (перечисленных через запятую) или звёздочка, указывающая, что все имена пользователей попадают под правило этой записи\&. В третьем поле содержится список (через запятую) допустимого времени работы\&.
+.PP
+Каждая запись времени доступа состоит из нуля или более дней недели, обозначенных как
+\fISu\fR,
+\fIMo\fR,
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR
+\fISa\fR, а также временем начала и конца, записанного через дефис\&. Сокращение
+\fIWk\fR
+можно использовать для обозначения периода с понедельника по пятницу, а
+\fIAl\fR
+обозначает каждый день\&. Если день не задан, то предполагается
+\fIAl\fR
+в качестве значения по умолчанию\&.
+.SH "ПРИМЕРЫ"
+.PP
+Следующая запись разрешает доступ пользователю
+\fBjfh\fR
+с любого порта по будням с 9:00 до 17:00\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+Следующие записи разрешают доступ только пользователям
+\fIroot\fR
+\fIoper\fR
+/dev/console
+в любое время\&. Это показывает, что файл
+/etc/porttime
+обрабатывается в порядке появления записей в файле\&. Любой другой пользователь попадёт под правило второй записи, которая не разрешает доступ в любое время\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      console:root,oper:Al0000\-2400
+      console:*:
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Следующая запись разрешает доступ пользователю
+\fIgames\fR
+с любого порта в нерабочие часы\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "ФАЙЛЫ"
+.PP
+/etc/porttime
+.RS 4
+содержит разрешённое время работы определённых пользователей с определённых портов
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/ru/pwck.8 b/man/ru/pwck.8
new file mode 100644 (file)
index 0000000..bb305c1
--- /dev/null
@@ -0,0 +1,295 @@
+'\" t
+.\"     Title: pwck
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "pwck" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+pwck \- проверяет целостность файлов паролей
+.SH "СИНТАКСИС"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [\-q] [\-s] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [\-q] [\-r] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Выполняются следующие проверки:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+правильное количество полей
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+допустимость идентификатора пользователя и группы
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+допустимость первичной группы
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+допустимость домашнего каталога
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+допустимость регистрационной оболочки
+.RE
+.PP
+
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+These checks are the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+every passwd entry has a matching shadow entry, and every shadow entry has a matching passwd entry
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+passwords are specified in the shadowed file
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries have the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries are unique in shadow
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the last password changes are not in the future
+.RE
+.PP
+Ошибки в количестве полей и уникальности имён пользователей невосстановимы\&. Если запись содержит неверное число полей, пользователя попросят подтвердить удаление всей записи\&. Если пользователь ответит отрицательно, дальнейшая проверка выполняться не будет\&. При ошибке повторения имени пользователя также возникает запрос на удаление, но в случае отказа проверка будет продолжена\&. Обо всех остальных ошибках выводится предупреждение и пользователю предлагается запустить команду
+\fBusermod\fR, чтобы исправить ошибку\&.
+.PP
+Команды, которые работают с файлом
+/etc/passwd
+не могут изменять повреждённые или дублирующиеся записи\&. Как раз в этом случае и нужно использовать
+\fBpwck\fR
+для удаления испорченной записи\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBpwck\fR:
+.PP
+\fB\-q\fR
+.RS 4
+Сообщать только об ошибках\&. Предупреждения, которые не требуют от пользователя никаких действий, показаны не будут\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Выполнять команду
+\fBpwck\fR
+в режиме "только чтение"\&.
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+Отсортировать все записи в файлах
+/etc/passwd
+/etc/shadow
+по числовому идентификатору пользователя\&.
+.RE
+.PP
+По умолчанию, команда
+\fBpwck\fR
+работает с файлами
+/etc/passwd
+/etc/shadow\&. Пользователь может указать другие файлы с помощью параметров
+\fIpasswd\fR
+\fIshadow\fR
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Максимальное число дней использования пароля\&. Если пароль старее этого числа, то будет запущена процедура смены пароля\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Максимальное число дней между изменениями пароля\&. Любая смена пароля ранее заданного срока выполнена не будет\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Число дней за которое начнёт выдаваться предупреждение об устаревании пароля\&. Нулевое значение означает, что предупреждение выдаётся в день устаревания, при отрицательном значении предупреждение выдаваться не будет\&. Если значение не задано, выдача предупреждения отключается\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+Команда
+\fBpwck\fR
+завершая работу, возвращает следующие значения:
+.PP
+\fI0\fR
+.RS 4
+успешное выполнение
+.RE
+.PP
+\fI1\fR
+.RS 4
+ошибка в параметрах команды
+.RE
+.PP
+\fI2\fR
+.RS 4
+есть одна или более записей с недопустимыми паролями
+.RE
+.PP
+\fI3\fR
+.RS 4
+не удалось открыть файл паролей
+.RE
+.PP
+\fI4\fR
+.RS 4
+не удалось заблокировать файл паролей
+.RE
+.PP
+\fI5\fR
+.RS 4
+не удалось изменить файл паролей
+.RE
+.PP
+\fI6\fR
+.RS 4
+can\'t sort password files
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/pwconv.8 b/man/ru/pwconv.8
new file mode 100644 (file)
index 0000000..2fb5e18
--- /dev/null
@@ -0,0 +1,162 @@
+'\" t
+.\"     Title: pwconv
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "pwconv" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+pwconv, pwunconv, grpconv, grpunconv \- преобразует пароли пользователей и групп в/из защищённую форму
+.SH "СИНТАКСИС"
+.HP \w'\fBpwconv\fR\ 'u
+\fBpwconv\fR
+.HP \w'\fBpwunconv\fR\ 'u
+\fBpwunconv\fR
+.HP \w'\fBgrpconv\fR\ 'u
+\fBgrpconv\fR
+.HP \w'\fBgrpunconv\fR\ 'u
+\fBgrpunconv\fR
+.SH "ОПИСАНИЕ"
+.PP
+Команда
+\fBpwconv\fR
+создаёт файл
+\fIshadow\fR
+из файла
+\fIpasswd\fR
+и необязательно существующего файла
+\fIshadow\fR\&.
+.PP
+Команда
+\fBpwunconv\fR
+создаёт файл
+\fIpasswd\fR
+из файлов
+\fIpasswd\fR
+\fIshadow\fR, а затем удаляет файл
+\fIshadow\fR\&.
+.PP
+Команда
+\fBgrpconv\fR
+создаёт файл
+\fIgshadow\fR
+из файла
+\fIgroup\fR
+и необязательно существующего файла
+\fIgshadow\fR\&.
+.PP
+Команда
+\fBgrpunconv\fR
+создаёт файл
+\fIgroup\fR
+из файлов
+\fIgroup\fR
+\fIgshadow\fR, а затем удаляет файл
+\fIgshadow\fR\&.
+.PP
+Эти четыре программы работают с файлами обычных или теневых паролей пользователей и групп:
+/etc/passwd,
+/etc/group,
+/etc/shadow
+/etc/gshadow\&.
+.PP
+Каждая программа выполняет необходимые блокировки перед преобразованиями\&. Команды
+\fBpwconv\fR
+\fBgrpconv\fR
+выполняют схожий порядок действий\&. Сначала удаляются записи из теневого файла которых нет в главном файле\&. Затем обновляются записи в теневом файле которые не содержат `x\' вместо пароля в главном файле\&. Далее добавляются отсутствующие теневые записи\&. Наконец, пароли в главном файле заменяются символом `x\'\&. Данные программы можно использовать как для первоначального преобразования, так и для обновления теневого файла, если главный файл редактировался вручную\&.
+.PP
+Команда
+\fBpwconv\fR
+использует значения переменных
+\fIPASS_MIN_DAYS\fR,
+\fIPASS_MAX_DAYS\fR
+\fIPASS_WARN_AGE\fR
+из файла
+/etc/login\&.defs
+при добавлении новых записей в файл
+/etc/shadow\&.
+.PP
+Программы
+\fBpwunconv\fR
+\fBgrpunconv\fR
+также выполняют схожий порядок действий\&. Пароли в главном файле обновляются из теневого файла\&. Записи, которые существуют в главном файле, но не существуют в теневом файле оставляются как есть\&. По окончании, теневой файл удаляется\&. Информация об устаревании пароля не учитывается программой
+\fBpwunconv\fR\&. Конвертируется только возможное\&.
+.SH "ОШИБКИ РЕАЛИЗАЦИИ"
+.PP
+Ошибки в файлах паролей или групп (типа неверных или дублирующихся записей) могут зациклить программу или произойдут какие\-то другие странные вещи\&. Перед конвертацией запустите
+\fBpwck\fR
+\fBgrpck\fR, чтобы исправить возможные ошибки\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variable in
+/etc/login\&.defs
+changes the behavior of
+\fBgrpconv\fR
+and
+\fBgrpunconv\fR:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of
+\fBpwconv\fR:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Максимальное число дней использования пароля\&. Если пароль старее этого числа, то будет запущена процедура смены пароля\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Максимальное число дней между изменениями пароля\&. Любая смена пароля ранее заданного срока выполнена не будет\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Число дней за которое начнёт выдаваться предупреждение об устаревании пароля\&. Нулевое значение означает, что предупреждение выдаётся в день устаревания, при отрицательном значении предупреждение выдаваться не будет\&. Если значение не задано, выдача предупреждения отключается\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBgrpck\fR(8),
+\fBlogin.defs\fR(5),
+\fBpwck\fR(8)\&.
diff --git a/man/ru/pwunconv.8 b/man/ru/pwunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/ru/sg.1 b/man/ru/sg.1
new file mode 100644 (file)
index 0000000..7deb555
--- /dev/null
@@ -0,0 +1,85 @@
+'\" t
+.\"     Title: sg
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Пользовательские команды
+.\"    Source: Пользовательские команды
+.\"  Language: Russian
+.\"
+.TH "sg" "1" "07/24/2009" "Пользовательские команды" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+sg \- выполняет команду с правами другой группы
+.SH "СИНТАКСИС"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [группа\ [\-c]\ команда]
+.SH "ОПИСАНИЕ"
+.PP
+Команда
+\fBsg\fR
+работает подобно команде
+\fBnewgrp\fR, но в качестве параметра ожидает команду\&. Команда будет выполнена оболочкой
+/bin/sh\&. В большинстве оболочек, откуда может запускаться
+\fBsg\fR, команду из нескольких слов нужно заключать в кавычки\&. Другим отличием между
+\fBnewgrp\fR
+\fBsg\fR
+является то, что некоторые оболочки воспринимают
+\fBnewgrp\fR
+особенным образом, заменяя себя новым экземпляром оболочки, которую создаёт
+\fBnewgrp\fR\&. Этого не происходит с командой
+\fBsg\fR, поэтому после завершения работы
+\fBsg\fR
+вы возвращаетесь в предыдущую группу\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/ru/shadow.3 b/man/ru/shadow.3
new file mode 100644 (file)
index 0000000..9ce0c73
--- /dev/null
@@ -0,0 +1,243 @@
+'\" t
+.\"     Title: shadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Библиотечные функции
+.\"    Source: Библиотечные функции
+.\"  Language: Russian
+.\"
+.TH "shadow" "3" "07/24/2009" "Библиотечные функции" "Библиотечные функции"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+shadow, getspnam \- процедуры для работы с файлом шифрованных паролей
+.SH "СИНТАКСИС"
+.PP
+
+\fI#include <shadow\&.h>\fR
+.PP
+
+\fIstruct spwd *getspent();\fR
+.PP
+
+\fIstruct spwd *getspnam(char\fR
+\fI*name\fR\fI);\fR
+.PP
+
+\fIvoid setspent();\fR
+.PP
+
+\fIvoid endspent();\fR
+.PP
+
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIФАЙЛ\fR
+\fI*fp\fR\fI);\fR
+.PP
+
+\fIint lckpwdf();\fR
+.PP
+
+\fIint ulckpwdf();\fR
+.SH "ОПИСАНИЕ"
+.PP
+\fIshadow\fR
+управляет содержимым файла теневых паролей,
+/etc/shadow\&. Структура в файле
+\fI#include\fR:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+      char                     *sp_namp;  /* имя пользователя */
+      char                     *sp_pwdp;  /* шифрованный пароль */
+      long int                 sp_lstchg; /* дата последней смены пароля */
+      long int                 sp_min;    /* дней должно пройти между сменами пароля\&. */
+      long int                 sp_max;    /* дней перед необходимостью смены пароля */
+      long int                 sp_warn;   /* дней вывода предупреждения об устаревании */
+      long int                 sp_inact;  /* дней перед тем как учётная запись заблокируется */
+      long int                 sp_expire; /* дата устаревания учётной записи */
+      unsigned long int        sp_flag;   /* зарезервировано */
+}
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Значение каждого поля:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- указатель на строку с именем пользователя, завершающуюся нулевым символом
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- указатель на строку с паролем, завершающуюся нулевым символом
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- количество дней, когда был изменён пароль последний раз, начиная с 1 января 1970 года
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- количество дней, когда можно не менять пароль
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- количество дней, которое должно пройти, чтобы нужно было поменять пароль
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- количество дней, когда будет выдаваться предупреждение о скором устаревании пароля перед тем как пароль устареет
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- количество дней, которые должны пройти после устаревания пароля, когда начинать считать, что учётная запись неактивна и заблокирована
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- дней, после которых учётная запись будет заблокирована, начиная с 1 января 1970 года
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- зарезервировано
+.RE
+.SH "ОПИСАНИЕ"
+.PP
+Функции
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR
+\fIsgetspent\fR
+возвращают указатель на структуру
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+возвращает следующую запись из файла, а
+\fIfgetspent\fR
+возвращает следующую запись из заданного канала, предполагая, что это файл правильного формата\&.\fIsgetspent\fR
+возвращает указатель на
+\fIstruct spwd\fR, используя предоставленную строку в качестве входящих данных\&.
+\fIgetspnam\fR
+ищет начиная с текущей позиции в файле запись по имени
+\fIname\fR\&.
+.PP
+Функции
+\fIsetspent\fR
+\fIendspent\fR
+можно использовать для перемещения в начало и конец файла теневых паролей соответственно\&.
+.PP
+Функции
+\fIlckpwdf\fR
+\fIulckpwdf\fR
+используются для получения монопольного доступа к файлу
+/etc/shadow\&.
+\fIlckpwdf\fR
+пытается выполнить блокировку с помощью
+\fIpw_lock\fR
+в течении 15 секунд\&. Далее выполняется попытка получить вторую блокировку с помощью
+\fIspw_lock\fR
+в течении времени оставшегося от первоначальных 15 секунд\&. При неудаче в любой из блокировок в течении 15 секунд, функция
+\fIlckpwdf\fR
+возвращает \-1\&. Если обе блокировки прошли успешно возвращается 0\&.
+.SH "ДИАГНОСТИКА"
+.PP
+Функции возвращают NULL, если все записи кончились или произошла ошибка во время работы\&. Функции, возвращающие
+\fIint\fR, возвращают 0 при успешном выполнении и \-1 в случае неудачи\&.
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Данные функции могут использоваться только суперпользователем, так как доступ к файлу теневых паролей ограничен\&.
+.SH "ФАЙЛЫ"
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/ru/shadow.5 b/man/ru/shadow.5
new file mode 100644 (file)
index 0000000..100299f
--- /dev/null
@@ -0,0 +1,140 @@
+'\" t
+.\"     Title: shadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Форматы файлов
+.\"    Source: Форматы файлов
+.\"  Language: Russian
+.\"
+.TH "shadow" "5" "07/24/2009" "Форматы файлов" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+shadow \- shadowed password file
+.SH "ОПИСАНИЕ"
+.PP
+
+shadow
+is a file which contains the password information for the system\'s accounts and optional aging information\&.
+.PP
+Этот файл должен быть недоступен обычному пользователю, если нужно обеспечить безопасность паролей\&.
+.PP
+Each line of this file contains 9 fields, separated by colons (\(Fo:\(Fc), in the following order:
+.PP
+\fBимя пользователя для входа в систему\fR
+.RS 4
+It must be a valid account name, which exist on the system\&.
+.RE
+.PP
+\fBшифрованный пароль\fR
+.RS 4
+Подробней о пароле смотрите на странице руководства
+\fBcrypt\fR(3)\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, the user will not be able to use a unix password to log in (but the user may log in the system by other means)\&.
+.sp
+This field may be empty, in which case no passwords are required to authenticate as the specified login name\&. However, some applications which read the
+/etc/shadow
+file may decide not to permit any access at all if the password field is empty\&.
+.sp
+A password field which starts with a exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.RE
+.PP
+\fBdate of last password change\fR
+.RS 4
+The date of the last password change, expressed as the number of days since Jan 1, 1970\&.
+.sp
+The value 0 has a special meaning, which is that the user should change her pasword the next time she will log in the system\&.
+.sp
+An empty field means that password aging features are disabled\&.
+.RE
+.PP
+\fBminimum password age\fR
+.RS 4
+The minimum password age is the number of days the user will have to wait before she will be allowed to change her password again\&.
+.sp
+An empty field and value 0 mean that there are no minimum password age\&.
+.RE
+.PP
+\fBmaximum password age\fR
+.RS 4
+The maximum password age is the number of days after which the user will have to change her password\&.
+.sp
+After this number of days is elapsed, the password may still be valid\&. The user should be asked to change her password the next time she will log in\&.
+.sp
+An empty field means that there are no maximum password age, no password warning period, and no password inactivity period (see below)\&.
+.sp
+If the maximum password age is lower than the minimum password age, the user cannot change her password\&.
+.RE
+.PP
+\fBpassword warning period\fR
+.RS 4
+The number of days before a password is going to expire (see the maximum password age above) during which the user should be warned\&.
+.sp
+An empty field and value 0 mean that there are no password warning period\&.
+.RE
+.PP
+\fBpassword inactivity period\fR
+.RS 4
+The number of days after a password has expired (see the maximum password age above) during which the password should still be accepted (and the user should update her password during the next login)\&.
+.sp
+After expiration of the password and this expiration period is elapsed, no login is possible using the current user\'s password\&. The user should contact her administrator\&.
+.sp
+An empty field means that there are no enforcement of an inactivity period\&.
+.RE
+.PP
+\fBaccount expiration date\fR
+.RS 4
+The date of expiration of the account, expressed as the number of days since Jan 1, 1970\&.
+.sp
+Note that an account expiration differs from a password expiration\&. In case of an acount expiration, the user shall not be allowed to login\&. In case of a password expiration, the user is not allowed to login using her password\&.
+.sp
+An empty field means that the account will never expire\&.
+.sp
+The value 0 should not be used as it is interpreted as either an account with no expiration, or as an expiration on Jan 1, 1970\&.
+.RE
+.PP
+\fBreserved field\fR
+.RS 4
+This field is reserved for future use\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/shadow\-
+.RS 4
+Backup file for /etc/shadow\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/ru/su.1 b/man/ru/su.1
new file mode 100644 (file)
index 0000000..c56f4af
--- /dev/null
@@ -0,0 +1,392 @@
+'\" t
+.\"     Title: su
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Пользовательские команды
+.\"    Source: Пользовательские команды
+.\"  Language: Russian
+.\"
+.TH "su" "1" "07/24/2009" "Пользовательские команды" "Пользовательские команды"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+su \- изменяет ID пользователя или делает его суперпользователем
+.SH "СИНТАКСИС"
+.HP \w'\fBsu\fR\ 'u
+\fBsu\fR [\fIпараметры\fR] [\fIимя_пользователя\fR]
+.SH "ОПИСАНИЕ"
+.PP
+Программа
+\fBsu\fR
+используется для того, чтобы пользователь мог стать другим пользователем в текущей сессии\&. Если
+\fBsu\fR
+вызывается без
+\fBимени_пользователя\fR, то это по умолчанию делает пользователя суперпользователем\&. Необязательный параметр
+\fB\-\fR
+можно использовать для воссоздания рабочей среды, такой же как если бы настоящий пользователь выполнял вход в систему\&.
+.PP
+После имени пользователя можно указать дополнительные аргументы, которые будут переданы регистрационной оболочке пользователя\&. В частности, аргумент
+\fB\-c\fR
+заставит большинство оболочек считать следующий аргумент как команду\&. Команда будет выполнена оболочкой, указанной в файле
+/etc/passwd, которая является регистрационной для указываемого пользователя\&.
+.PP
+Вы можете использовать параметр
+\fB\-\-\fR
+чтобы отделить параметры
+\fBsu\fR
+от параметров передаваемых оболочке\&.
+.PP
+Пользователю предложат ввести пароль, если он задан\&. При неверном пароле возникает сообщение об ошибке\&. Все попытки, удачные и неудачные, протоколируются системой с целью обнаружения злоупотреблений\&.
+.PP
+The current environment is passed to the new shell\&. The value of
+\fB$PATH\fR
+is reset to
+/bin:/usr/bin
+for normal users, or
+/sbin:/bin:/usr/sbin:/usr/bin
+for the superuser\&. This may be changed with the
+\fBENV_PATH\fR
+and
+\fBENV_SUPATH\fR
+definitions in
+/etc/login\&.defs\&.
+.PP
+Субсистемный вход в систему можно распознать по наличию символа "*" в начале регистрационной оболочки\&. Заданный домашний каталог будет использован как корень новой файловой системы, в которой регистрируется пользователь\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBsu\fR:
+.PP
+\fB\-c\fR, \fB\-\-command\fR\fIКОМАНДА\fR
+.RS 4
+Указать команду, которая будет запущена оболочкой в виде параметра для
+\fB\-c\fR\&.
+.RE
+.PP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+.RS 4
+Предоставляет среду, как если бы пользователь непосредственно регистрировался в системе\&.
+.sp
+Если используется
+\fB\-\fR, то он должен быть задан последним параметром
+\fBsu\fR\&. Другие формы (\fB\-l\fR
+\fB\-\-login\fR) не имеют этого ограничения\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fIОБОЛОЧКА\fR
+.RS 4
+Оболочка, которая будет запущена\&.
+.sp
+Запущенная оболочка выбирается из (в порядке убывания приоритета):
+.PP
+.RS 4
+Оболочка указанная в параметре \-\-shell\&.
+.RE
+.PP
+.RS 4
+Если используется
+\fB\-\-preserve\-environment\fR, то оболочка задаётся переменной среды
+\fB$SHELL\fR\&.
+.RE
+.PP
+.RS 4
+Оболочка, указанная в записи файла
+/etc/passwd
+для заданного пользователя\&.
+.RE
+.PP
+.RS 4
+/bin/sh, если ни одной оболочке не было найдено с помощью методов, указанных выше\&.
+.RE
+.sp
+Если заданный пользователь имеет ограниченную оболочку (то есть оболочка в поле пользовательской записи в файле
+/etc/passwd
+не прописана в файле
+/etc/shell), то параметр
+\fB\-\-shell\fR
+или переменная среды
+\fB$SHELL\fR
+не будет взята в учётную запись, если
+\fBsu\fR
+не была запущена суперпользователем\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+.RS 4
+Preserve the current environment, except for:
+.PP
+\fB$PATH\fR
+.RS 4
+reset according to the
+/etc/login\&.defs
+options
+\fBENV_PATH\fR
+or
+\fBENV_SUPATH\fR
+(see below);
+.RE
+.PP
+\fB$IFS\fR
+.RS 4
+reset to
+\(Fo<space><tab><newline>\(Fc, if it was set\&.
+.RE
+.sp
+Если заданный пользователь имеет ограниченную оболочку, то этот параметр не сработает (если
+\fBsu\fR
+не запускается суперпользователем)\&.
+.sp
+Note that the default behavior for the environment is the following:
+.PP
+.RS 4
+The
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$USER\fR,
+\fB$LOGNAME\fR,
+\fB$PATH\fR, and
+\fB$IFS\fR
+environment variables are reset\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is not used, the environment is copied, except for the variables above\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TERM\fR,
+\fB$COLORTERM\fR,
+\fB$DISPLAY\fR, and
+\fB$XAUTHORITY\fR
+environment variables are copied if they were set\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TZ\fR,
+\fB$HZ\fR, and
+\fB$MAIL\fR
+environment variables are set according to the
+/etc/login\&.defs
+options
+\fBENV_TZ\fR,
+\fBENV_HZ\fR,
+\fBMAIL_DIR\fR, and
+\fBMAIL_FILE\fR
+(see below)\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, other environment variables might be set by the
+\fBENVIRON_FILE\fR
+file (see below)\&.
+.RE
+.sp
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+Данная версия программы
+\fBsu\fR
+может быть собрана с разными параметрами и только некоторые из них смогут быть использованы на любой машине\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Почтовый каталог\&. Данный параметр нужен для управления почтовым ящиком при изменении или удалении учётной записи пользователя\&. Если параметр не задан, то используется значение указанное при сборке\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+If defined, all su activity is logged to this file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\'t exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsg\fR(1),
+\fBsh\fR(1)\&.
diff --git a/man/ru/suauth.5 b/man/ru/suauth.5
new file mode 100644 (file)
index 0000000..65f9c17
--- /dev/null
@@ -0,0 +1,134 @@
+'\" t
+.\"     Title: suauth
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Форматы файлов
+.\"    Source: Форматы файлов
+.\"  Language: Russian
+.\"
+.TH "suauth" "5" "07/24/2009" "Форматы файлов" "Форматы файлов"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+suauth \- файл управления командой su
+.SH "СИНТАКСИС"
+.HP \w'\fB/etc/suauth\fR\ 'u
+\fB/etc/suauth\fR
+.SH "ОПИСАНИЕ"
+.PP
+Файл
+/etc/suauth
+проверяется каждый раз при запуске команды su\&. Он влияет на поведение команды su, в зависимости от:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      1) пользователя, права которого нужно получить с помощью su
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+2) пользователя, запустившего команду su (или группы, членом которой он может быть)
+.PP
+Формат файла показан ниже, строки начинающиеся с # считаются комментарием и игнорируются;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      желаемый\-id:желающий\-id:ДЕЙСТВИЕ
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Где желаемый\-id может быть словом
+\fIALL\fR, списком имён пользователей, перечисленных через запятую "," или фразы
+\fIALL EXCEPT\fR
+, после которой идёт список имён пользователей перечисленных через ","
+.PP
+желающий\-id может содержать то же, что и желательный\-id, плюс новое слово\fIGROUP\fR\&.
+\fIALL EXCEPT GROUP\fR
+тоже допустимо\&. После
+\fIGROUP\fR
+указывается одна или более названий групп, разделённых ","\&. Недостаточно иметь id первичной группы соответствующей группы, необходимо иметь запись в файле
+\fB/etc/group\fR(5)\&.
+.PP
+В поле ДЕЙСТВИЕ может быть только одно из следующих значений:
+.PP
+\fIDENY\fR
+.RS 4
+Команда su останавливает выполнение, даже не спрашивая пароль\&.
+.RE
+.PP
+\fINOPASS\fR
+.RS 4
+Команда su выполняется без запроса пароля\&.
+.RE
+.PP
+\fIOWNPASS\fR
+.RS 4
+Чтобы успешно выполнить команду su, пользователь должен ввести свой собственный пароль\&.
+.RE
+.PP
+Заметим, что тут используются три поля, разделённых двоеточиями\&. Никаких пробелов не допускается около двоеточий\&. Также заметим, что файл просматривается строка за строкой, и первое подходящее правило будет использовано без проверки оставшихся правил\&. Это позволяет системному администратору осуществлять любой контроль, какой он пожелает\&.
+.SH "ПРИМЕР"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      # пример файла /etc/suauth
+      #
+      # Пара привилегированных имён пользователей
+      # могут выполнить su, чтобы получить права суперпользователя введя свой пароль\&.
+      #
+      root:chris,birddog:OWNPASS
+      #
+      # Все остальные не могут выполнить su для получения root, если они 
+      # не члены группы wheel\&. Так настроено в BSD\&.
+      #
+      root:ALL EXCEPT GROUP wheel:DENY
+      #
+      # Возможно учётными записями terry и birddog
+      # владеет один человек\&.
+      # Переход из одной записи в другую
+      # можно сделать без запроса пароля\&.
+      #
+      terry:birddog:NOPASS
+      birddog:terry:NOPASS
+      #
+    
+.fi
+.if n \{\
+.RE
+.\}
+.SH "ФАЙЛЫ"
+.PP
+/etc/suauth
+.RS 4
+.RE
+.SH "ОШИБКИ РЕАЛИЗАЦИИ"
+.PP
+Может быть несколько кривостей\&. Анализатор файла, в частности, не прощает синтаксических ошибок, ожидая, что не будет недопустимых пробелов (кроме как в начале и конце строк) и специальных слов, разделяющих различные вещи\&.
+.SH "ДИАГНОСТИКА"
+.PP
+Ошибки при анализе файла выводятся с помощью
+\fBsyslogd\fR(8)
+с уровнем ERR средства AUTH\&.
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBsu\fR(1)\&.
diff --git a/man/ru/sulogin.8 b/man/ru/sulogin.8
new file mode 100644 (file)
index 0000000..a1d2473
--- /dev/null
@@ -0,0 +1,107 @@
+'\" t
+.\"     Title: sulogin
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "sulogin" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+sulogin \- Single\-user login
+.SH "СИНТАКСИС"
+.PP
+\fBsulogin\fR
+[\fItty\-device\fR]
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBsulogin\fR
+command is invoked by
+\fBinit\fR
+prior to allowing the user access to the system when in single user mode\&. This feature may only be available on certain systems where
+\fBinit\fR
+has been modified accordingly, or where the
+/etc/inittab
+has an entry for a single user login\&.
+.PP
+The user is prompted
+.PP
+Type control\-d to proceed with normal startup, (or give root password for system maintenance):
+.PP
+Input and output will be performed with the standard file descriptors unless the optional device name argument is provided\&.
+.PP
+If the user enters the correct root password, a login session is initiated\&. When
+\fIEOF\fR
+is pressed instead, the system enters multi\-user mode\&.
+.PP
+After the user exits the single\-user shell, or presses
+\fIEOF\fR, the system begins the initialization process required to enter multi\-user mode\&.
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+This command can only be used if
+\fBinit\fR
+has been modified to call
+\fBsulogin\fR
+instead of
+/bin/sh, or if the user has set the
+\fIinittab\fR
+to support a single user login\&. For example, the line:
+.PP
+co:s:respawn:/etc/sulogin /dev/console
+.PP
+should execute the sulogin command in single user mode\&.
+.PP
+As complete an environment as possible is created\&. However, various devices may be unmounted or uninitialized and many of the user commands may be unavailable or nonfunctional as a result\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+
+\fBlogin\fR(1),
+\fBsh\fR(1),
+\fBinit\fR(8)\&.
diff --git a/man/ru/useradd.8 b/man/ru/useradd.8
new file mode 100644 (file)
index 0000000..b1249e2
--- /dev/null
@@ -0,0 +1,644 @@
+'\" t
+.\"     Title: useradd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "useradd" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+useradd \- регистрирует нового пользователя или изменяет информацию по умолчанию о новых пользователях
+.SH "СИНТАКСИС"
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR [\fIпараметры\fR] \fILOGIN\fR
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+When invoked without the
+\fB\-D\fR
+option, the
+\fBuseradd\fR
+command creates a new user account using the values specified on the command line plus the default values from the system\&. Depending on command line options, the
+\fBuseradd\fR
+command will update system files and may also create the new user\'s home directory and copy initial files\&.
+.PP
+By default, a group will also be created for the new user (see
+\fB\-g\fR,
+\fB\-N\fR,
+\fB\-U\fR, and
+\fBUSERGROUPS_ENAB\fR)\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBuseradd\fR:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\fIБАЗОВЫЙ_КАТАЛОГ\fR
+.RS 4
+The default base directory for the system if
+\fB\-d\fR
+\fIHOME_DIR\fR
+is not specified\&.
+\fIBASE_DIR\fR
+is concatenated with the account name to define the home directory\&. If the
+\fB\-m\fR
+option is not used,
+\fIBASE_DIR\fR
+must exist\&.
+.sp
+If this option is not specified,
+\fBuseradd\fR
+will use the base directory specified by the
+\fBHOME\fR
+variable in
+/etc/default/useradd, or
+/home
+by default\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\fIКОММЕНТАРИЙ\fR
+.RS 4
+Любая текстовая строка\&. Обычно, здесь коротко описывается учётная запись, и в настоящее время используется как поле для имени и фамилии пользователя\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\fIДОМАШНИЙ_КАТАЛОГ\fR
+.RS 4
+Для создаваемого пользователя будет использован каталог
+\fIБАЗОВЫЙ_КАТАЛОГ\fR
+в качестве начального каталога\&. По умолчанию, это значение получается объединением
+\fIИМЕНИ\fR
+пользователя с
+\fIБАЗОВЫМ_КАТАЛОГОМ\fR
+и используется как имя домашнего каталога\&. Каталог
+\fIБАЗОВЫЙ_КАТАЛОГ\fR
+необязательно должен существовать и не будет создан, если его нет\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-defaults\fR
+.RS 4
+See below, the subsection "Changing the default values"\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\fIДАТА_УСТАРЕВАНИЯ\fR
+.RS 4
+Дата, когда учётная запись пользователя будет заблокирована\&. Дата задаётся в формате
+\fIГГГГ\-ММ\-ДД\fR\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default expiry date specified by the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd, or an empty string (no expiry) by default\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\fIДНЕЙ\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&. A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default inactivity period specified by the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd, or \-1 by default\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIГРУППА\fR
+.RS 4
+The group name or number of the user\'s initial login group\&. The group name must exist\&. A group number must refer to an already existing group\&.
+.sp
+If not specified, the bahavior of
+\fBuseradd\fR
+will depend on the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&. If this variable is set to
+\fIyes\fR
+(or
+\fB\-U/\-\-user\-group\fR
+is specified on the command line), a group will be created for the user, with the same name as her loginname\&. If the variable is set to
+\fIno\fR
+(or
+\fB\-N/\-\-no\-user\-group\fR
+is specified on the command line), useradd will set the primary group of the new user to the value specified by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd, or 100 by default\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\fIГРУППА1\fR[\fI,ГРУППА2,\&.\&.\&.\fR[\fI,ГРУППАN\fR]]]
+.RS 4
+Список дополнительных групп, в которых числится пользователь\&. Перечисление групп осуществляется через запятую, без промежуточных пробелов\&. На указанные группы действуют те же ограничения, что и для группы указанной в параметре
+\fB\-g\fR\&. По умолчанию пользователь входит только в начальную группу\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-skel\fR \fISKEL_DIR\fR
+.RS 4
+The skeleton directory, which contains files and directories to be copied in the user\'s home directory, when the home directory is created by
+\fBuseradd\fR\&.
+.sp
+This option is only valid if the
+\fB\-m\fR
+(or
+\fB\-\-create\-home\fR) option is specified\&.
+.sp
+If this option is not set, the skeleton directory is defined by the
+\fBSKEL\fR
+variable in
+/etc/default/useradd
+or, by default,
+/etc/skel\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\fIКЛЮЧ\fR=\fIЗНАЧЕНИЕ\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBUMASK\fR,
+\fBPASS_MAX_DAYS\fR
+and others)\&.
+
+Example:
+\fB\-K \fR\fIPASS_MAX_DAYS\fR=\fI\-1\fR
+can be used when creating system account to turn off password ageing, even though system account has no password at all\&. Multiple
+\fB\-K\fR
+options can be specified, e\&.g\&.:
+\fB\-K \fR
+\fIUID_MIN\fR=\fI100\fR
+\fB\-K \fR
+\fIUID_MAX\fR=\fI499\fR
+.sp
+Замечание: запись вида
+\fB\-K \fR\fIUID_MIN\fR=\fI10\fR,\fIUID_MAX\fR=\fI499\fR
+пока не работает\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-no\-log\-init\fR
+.RS 4
+Do not add the user to the lastlog and faillog databases\&.
+.sp
+By default, the user\'s entries in the lastlog and faillog databases are resetted to avoid reusing the entry from a previously deleted user\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-create\-home\fR
+.RS 4
+Create the user\'s home directory if it does not exist\&. The files and directories contained in the skeleton directory (which can be defined with the
+\fB\-k\fR
+option) will be copied to the home directory\&.
+.sp
+By default, no home directories are created\&.
+.RE
+.PP
+\fB\-M\fR
+.RS 4
+Do no create the user\'s home directory, even if the system wide setting from
+/etc/login\&.defs
+(\fBCREATE_HOME\fR) is set to
+\fIyes\fR\&.
+.RE
+.PP
+\fB\-N\fR, \fB\-\-no\-user\-group\fR
+.RS 4
+Do not create a group with the same name as the user, but add the user to the group specified by the
+\fB\-g\fR
+option or by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Позволяет создать учётную запись с уже имеющимся (не уникальным) UID\&.
+.sp
+This option is only valid in combination with the
+\fB\-o\fR
+option\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\fIПАРОЛЬ\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system account\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are choosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+/etc/login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.sp
+Note that
+\fBuseradd\fR
+will not create a home directory for such an user, regardless of the default setting in
+/etc/login\&.defs
+(\fBCREATE_HOME\fR)\&. You have to specify the
+\fB\-m\fR
+options if you want a home directory for a system account to be created\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fIОБОЛОЧКА\fR
+.RS 4
+The name of the user\'s login shell\&. The default is to leave this field blank, which causes the system to select the default login shell specified by the
+\fBSHELL\fR
+variable in
+/etc/default/useradd, or an empty string by default\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\fIUID\fR
+.RS 4
+Числовое значение идентификатора пользователя (ID)\&. Оно должно быть уникальным, если не используется параметр
+\fB\-o\fR\&. Значение должно быть неотрицательным\&. По умолчанию используется наименьшее значение ID большее 999 и большее любого другого значения пользователя\&. Значения от 0 до 999 обычно зарезервированы для системных учётных записей\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-user\-group\fR
+.RS 4
+Create a group with the same name as the user, and add the user to this group\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR \fISEUSER\fR
+.RS 4
+The SELinux user for the user\'s login\&. The default is to leave this field blank, which causes the system to select the default SELinux user\&.
+.RE
+.SS "Изменение значений по умолчанию"
+.PP
+When invoked with only the
+\fB\-D\fR
+option,
+\fBuseradd\fR
+will display the current default values\&. When invoked with
+\fB\-D\fR
+plus other options,
+\fBuseradd\fR
+will update the default values for the specified options\&. Valid default\-changing options are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR\fIБАЗОВЫЙ_КАТАЛОГ\fR
+.RS 4
+The path prefix for a new user\'s home directory\&. The user\'s name will be affixed to the end of
+\fIBASE_DIR\fR
+to form the new user\'s home directory name, if the
+\fB\-d\fR
+option is not used when creating a new account\&.
+.sp
+This option sets the
+\fBHOME\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\fIДАТА_УСТАРЕВАНИЯ\fR
+.RS 4
+Дата, когда учётная запись пользователя заблокирована\&.
+.sp
+This option sets the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\fIДНЕЙ\fR
+.RS 4
+Число дней, которые должны пройти после устаревания пароля, перед тем как учётная запись будет заблокирована\&.
+.sp
+This option sets the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIГРУППА\fR
+.RS 4
+The group name or ID for a new user\'s initial group (when the
+\fB\-N/\-\-no\-user\-group\fR
+is used or when the
+\fBUSERGROUPS_ENAB\fR
+variable is set to
+\fIno\fR
+in
+/etc/login\&.defs\&. The named group must exist, and a numerical group ID must have an existing entry\&.
+.sp
+This option sets the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fIОБОЛОЧКА\fR
+.RS 4
+The name of a new user\'s login shell\&.
+.sp
+This option sets the
+\fBSHELL\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.SH "ЗАМЕЧАНИЯ"
+.PP
+The system administrator is responsible for placing the default user files in the
+/etc/skel/
+directory (or any other skeleton directory specified in
+/etc/default/useradd
+or on the command line)\&.
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+You may not add a user to a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+Similarly, if the username already exists in an external user database such as NIS or LDAP,
+\fBuseradd\fR
+will deny the user account creation request\&.
+.PP
+Usernames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Usernames may only be up to 32 characters long\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indicate if a home directory should be created by default for new users\&.
+.sp
+This setting does not apply to system users, and can be overriden on the command line\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Почтовый каталог\&. Данный параметр нужен для управления почтовым ящиком при изменении или удалении учётной записи пользователя\&. Если параметр не задан, то используется значение указанное при сборке\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+Максимальное число дней использования пароля\&. Если пароль старее этого числа, то будет запущена процедура смены пароля\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+Максимальное число дней между изменениями пароля\&. Любая смена пароля ранее заданного срока выполнена не будет\&. Если значение не задано, то предполагается значение \-1 (то есть возможность ограничения не используется)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+Число дней за которое начнёт выдаваться предупреждение об устаревании пароля\&. Нулевое значение означает, что предупреждение выдаётся в день устаревания, при отрицательном значении предупреждение выдаваться не будет\&. Если значение не задано, выдача предупреждения отключается\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/default/useradd
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.PP
+/etc/skel/
+.RS 4
+каталог, содержащий пользовательские файлы по умолчанию
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+Команда
+\fBuseradd\fR
+завершая работу, возвращает следующие значения:
+.PP
+\fI0\fR
+.RS 4
+успешное выполнение
+.RE
+.PP
+\fI1\fR
+.RS 4
+не удалось изменить файл паролей
+.RE
+.PP
+\fI2\fR
+.RS 4
+ошибка в параметрах команды
+.RE
+.PP
+\fI3\fR
+.RS 4
+недопустимое значение параметра
+.RE
+.PP
+\fI4\fR
+.RS 4
+такой UID уже существует (и не задан параметр
+\fB\-o\fR)
+.RE
+.PP
+\fI6\fR
+.RS 4
+указанная группа не существует
+.RE
+.PP
+\fI9\fR
+.RS 4
+имя пользователя уже существует
+.RE
+.PP
+\fI10\fR
+.RS 4
+не удалось изменить файл групп
+.RE
+.PP
+\fI12\fR
+.RS 4
+не удалось создать домашний каталог
+.RE
+.PP
+\fI13\fR
+.RS 4
+не удалось создать почтовый ящик
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/userdel.8 b/man/ru/userdel.8
new file mode 100644 (file)
index 0000000..9817d51
--- /dev/null
@@ -0,0 +1,265 @@
+'\" t
+.\"     Title: userdel
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "userdel" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+userdel \- удаляет учётную запись и файлы пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [параметры] \fILOGIN\fR
+.SH "ОПИСАНИЕ"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBuserdel\fR:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\'s home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+\fIПримечание:\fR
+Этот параметр опасно использовать; он может привести систему в нерабочее состояние\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+Файлы в домашнем каталоге пользователя будут удалены вместе с самим домашним каталогом и почтовым ящиком\&. Пользовательские файлы, расположенные в других файловых системах, нужно искать и удалять вручную\&.
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Почтовый каталог\&. Данный параметр нужен для управления почтовым ящиком при изменении или удалении учётной записи пользователя\&. Если параметр не задан, то используется значение указанное при сборке\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+Определяет программу, которая будет запущена при удалении пользователя\&. Она должна удалять любые задания at/cron/печати удаляемого пользователя (передаётся в качестве первого аргумента)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\'s cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+       echo "Usage: $0 username"
+       exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+      
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+содержит конфигурацию подсистемы теневых паролей
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ"
+.PP
+Команда
+\fBuserdel\fR
+завершая работу, возвращает следующие значения:
+.PP
+\fI0\fR
+.RS 4
+успешное выполнение
+.RE
+.PP
+\fI1\fR
+.RS 4
+не удалось изменить файл паролей
+.RE
+.PP
+\fI2\fR
+.RS 4
+ошибка в параметрах команды
+.RE
+.PP
+\fI6\fR
+.RS 4
+указанный пользователь не существует
+.RE
+.PP
+\fI8\fR
+.RS 4
+пользователь сейчас работает в системе
+.RE
+.PP
+\fI10\fR
+.RS 4
+не удалось изменить файл групп
+.RE
+.PP
+\fI12\fR
+.RS 4
+не удалось удалить домашний каталог
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\'s password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this user\&.
+.PP
+Нельзя удалить NIS атрибуты клиента NIS\&. Это необходимо сделать на NIS сервере\&.
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/ru/usermod.8 b/man/ru/usermod.8
new file mode 100644 (file)
index 0000000..a9325e5
--- /dev/null
@@ -0,0 +1,267 @@
+'\" t
+.\"     Title: usermod
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "usermod" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+usermod \- изменяет учётную запись пользователя
+.SH "СИНТАКСИС"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fIпараметры\fR] \fILOGIN\fR
+.SH "ОПИСАНИЕ"
+.PP
+Команда
+\fBusermod\fR
+изменяет системные файлы учётных записей согласно переданным в командной строке параметрам\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команды
+\fBusermod\fR:
+.PP
+\fB\-a\fR, \fB\-\-append\fR
+.RS 4
+Add the user to the supplementary group(s)\&. Use only with the
+\fB\-G\fR
+option\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\fIКОММЕНТАРИЙ\fR
+.RS 4
+Новое значение поля комментария в файле пользовательских паролей\&. Обычно его изменяют с помощью программы
+\fBchfn\fR(1)\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\fIДОМАШНИЙ_КАТАЛОГ\fR
+.RS 4
+The user\'s new login directory\&.
+.sp
+If the
+\fB\-m\fR
+option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\fIДАТА_УСТАРЕВАНИЯ\fR
+.RS 4
+Дата, когда учётная запись пользователя будет заблокирована\&. Дата задаётся в формате
+\fIГГГГ\-ММ\-ДД\fR\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\fIДНЕЙ\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&.
+.sp
+A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIГРУППА\fR
+.RS 4
+The group name or number of the user\'s new initial login group\&. The group must exist\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\fIГРУППА1\fR[\fI,ГРУППА2,\&.\&.\&.\fR[\fI,ГРУППАN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&.
+.sp
+If the user is currently a member of a group which is not listed, the user will be removed from the group\&. This behaviour can be changed via the
+\fB\-a\fR
+option, which appends the user to the current supplementary group list\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR\fIНОВОЕ_ИМЯ\fR
+.RS 4
+The name of the user will be changed from
+\fILOGIN\fR
+to
+\fINEW_LOGIN\fR\&. Nothing else is changed\&. In particular, the user\'s home directory name should probably be changed manually to reflect the new login name\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+Заблокировать пароль пользователя\&. Это делается помещением символа \'!\' в начало шифрованного пароля, чтобы приводит к блокировке пароля\&. Не используйте этот параметр вместе с
+\fB\-p\fR
+или
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+Move the content of the user\'s home directory to the new location\&.
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+При использовании с параметром
+\fB\-u\fR, этот параметр позволяет указывать не уникальный числовой идентификатор пользователя\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\fIПАРОЛЬ\fR
+.RS 4
+Шифрованное значение пароля, которое возвращает функция
+\fBcrypt\fR(3)\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fIОБОЛОЧКА\fR
+.RS 4
+Имя новой регистрационной оболочки пользователя\&. Если задать пустое значение, то будет использована регистрационная оболочка по умолчанию\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\fIUID\fR
+.RS 4
+The new numerical value of the user\'s ID\&.
+.sp
+This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. Values between 0 and 999 are typically reserved for system accounts\&.
+.sp
+The user\'s mailbox, and any files which the user owns and which are located in the user\'s home directory will have the file user ID changed automatically\&.
+.sp
+The ownership of files outside of the user\'s home directory must be fixed manually\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+Разблокировать пароль пользователя\&. Это выполняется удалением символа \'!\' из начала шифрованного пароля\&. Не используйте этот параметр вместе с
+\fB\-p\fR
+или
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR \fISEUSER\fR
+.RS 4
+The SELinux user for the user\'s login\&. The default is to leave this field the blank, which causes the system to select the default SELinux user\&.
+.RE
+.SH "ПРЕДОСТЕРЕЖЕНИЯ"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\'s numerical user ID, the user\'s name, or the user\'s home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux, but only check if the user is logged in according to utmp on other architectures\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+You must make any changes involving NIS on the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+Почтовый каталог\&. Данный параметр нужен для управления почтовым ящиком при изменении или удалении учётной записи пользователя\&. Если параметр не задан, то используется значение указанное при сборке\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/ru/vigr.8 b/man/ru/vigr.8
new file mode 100644 (file)
index 0000000..ff72d7a
--- /dev/null
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/ru/vipw.8 b/man/ru/vipw.8
new file mode 100644 (file)
index 0000000..a069600
--- /dev/null
@@ -0,0 +1,101 @@
+'\" t
+.\"     Title: vipw
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Команды управления системой
+.\"    Source: Команды управления системой
+.\"  Language: Russian
+.\"
+.TH "vipw" "8" "07/24/2009" "Команды управления системой" "Команды управления системой"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "НАЗВАНИЕ"
+vipw, vigr \- служат для редактирования файлов паролей, групп, теневых паролей пользователей или групп\&.
+.SH "СИНТАКСИС"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIпараметры\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIпараметры\fR]
+.SH "ОПИСАНИЕ"
+.PP
+\fBvipw\fR
+\fBvigr\fR
+редактируют файлы
+/etc/passwd
+/etc/group, соответственно\&. Если указан параметр
+\fB\-s\fR, то будут редактироваться теневые версии этих файлов,
+/etc/shadow
+/etc/gshadow, соответственно\&. На время работы программы устанавливают блокировку для предотвращения повреждения файла\&. При выборе редактора программы сначала проверяют переменную среды
+\fB$VISUAL\fR, затем
+\fB$EDITOR\fR, и если ничего не найдено, запускают стандартный редактор
+\fBvi\fR(1)\&.
+.SH "ПАРАМЕТРЫ"
+.PP
+Параметры команд
+\fBvipw\fR
+\fBvigr\fR:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+Редактирует базу данных групп\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Показать краткую справку и закончить работу\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+Редактировать базу данных passwd\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Не выводить сообщений при работе\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+Редактировать базу данных shadow или gshadow\&.
+.RE
+.SH "ФАЙЛЫ"
+.PP
+/etc/group
+.RS 4
+содержит информацию о группах
+.RE
+.PP
+/etc/gshadow
+.RS 4
+содержит защищаемую информацию о группах
+.RE
+.PP
+/etc/passwd
+.RS 4
+содержит информацию о пользователях
+.RE
+.PP
+/etc/shadow
+.RS 4
+содержит защищаемую информацию о пользователях
+.RE
+.SH "СМОТРИТЕ ТАКЖЕ"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/sg.1 b/man/sg.1
new file mode 100644 (file)
index 0000000..eccf34c
--- /dev/null
+++ b/man/sg.1
@@ -0,0 +1,89 @@
+'\" t
+.\"     Title: sg
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: English
+.\"
+.TH "SG" "1" "07/24/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sg \- execute command as different group ID
+.SH "SYNOPSIS"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [group\ [\-c\ ]\ command]
+.SH "DESCRIPTION"
+.PP
+The
+\fBsg\fR
+command works similar to
+\fBnewgrp\fR
+but accepts a command\&. The command will be executed with the
+/bin/sh
+shell\&. With most shells you may run
+\fBsg\fR
+from, you need to enclose multi\-word commands in quotes\&. Another difference between
+\fBnewgrp\fR
+and
+\fBsg\fR
+is that some shells treat
+\fBnewgrp\fR
+specially, replacing themselves with a new instance of a shell that
+\fBnewgrp\fR
+creates\&. This doesn\'t happen with
+\fBsg\fR, so upon exit from a
+\fBsg\fR
+command you are returned to your previous group ID\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/sg.1.xml b/man/sg.1.xml
new file mode 100644 (file)
index 0000000..d21882f
--- /dev/null
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+   Copyright (c) 1991       , Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY SYSLOG_SG_ENAB        SYSTEM "login.defs.d/SYSLOG_SG_ENAB.xml">
+]>
+<refentry id='sg.1'>
+  <!-- $Id: sg.1.xml 3005 2009-05-25 19:41:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>sg</refentrytitle>
+    <manvolnum>1</manvolnum>
+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>sg</refname>
+    <refpurpose>execute command as different group ID</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>sg</command>
+      <arg choice='opt'>- </arg>
+      <arg choice='opt'>group
+       <arg choice='opt'>-c </arg>
+       command
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+  <title>DESCRIPTION</title>
+    <para>
+      The <command>sg</command> command works similar to
+      <command>newgrp</command> but accepts a command. The command will be
+      executed with the <filename>/bin/sh</filename> shell. With most shells
+      you may run <command>sg</command> from, you need to enclose multi-word
+      commands in quotes. Another difference between
+      <command>newgrp</command> and <command>sg</command> is that some
+      shells treat <command>newgrp</command> specially, replacing themselves
+      with a new instance of a shell that <command>newgrp</command> creates.
+      This doesn't happen with <command>sg</command>, so upon exit from a
+      <command>sg</command> command you are returned to your previous group
+      ID.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &SYSLOG_SG_ENAB;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry condition="gshadow">
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>id</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>newgrp</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>gpasswd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry><phrase condition="gshadow">,
+       <citerefentry>
+         <refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum>
+       </citerefentry>
+      </phrase>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/shadow.3 b/man/shadow.3
new file mode 100644 (file)
index 0000000..c86ccd3
--- /dev/null
@@ -0,0 +1,250 @@
+'\" t
+.\"     Title: shadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: Library Calls
+.\"    Source: Library Calls
+.\"  Language: English
+.\"
+.TH "SHADOW" "3" "07/24/2009" "Library Calls" "Library Calls"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+shadow, getspnam \- encrypted password file routines
+.SH "SYNTAX"
+.PP
+
+\fI#include <shadow\&.h>\fR
+.PP
+
+\fIstruct spwd *getspent();\fR
+.PP
+
+\fIstruct spwd *getspnam(char\fR
+\fI*name\fR\fI);\fR
+.PP
+
+\fIvoid setspent();\fR
+.PP
+
+\fIvoid endspent();\fR
+.PP
+
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIFILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+
+\fIint lckpwdf();\fR
+.PP
+
+\fIint ulckpwdf();\fR
+.SH "DESCRIPTION"
+.PP
+
+\fIshadow\fR
+manipulates the contents of the shadow password file,
+/etc/shadow\&. The structure in the
+\fI#include\fR
+file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+      char             *sp_namp; /* user login name */
+      char             *sp_pwdp; /* encrypted password */
+      long int         sp_lstchg; /* last password change */
+      long int         sp_min; /* days until change allowed\&. */
+      long int         sp_max; /* days before change required */
+      long int         sp_warn; /* days warning for expiration */
+      long int         sp_inact; /* days before account inactive */
+      long int         sp_expire; /* date when account expires */
+      unsigned long int        sp_flag; /* reserved for future use */
+}
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+The meanings of each field are:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- pointer to null\-terminated user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- pointer to null\-terminated password
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- days since Jan 1, 1970 password was last changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- days before which password may not be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- days after which password must be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- days before password is to expire that user is warned of pending password expiration
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- days after password expires that account is considered inactive and disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- days since Jan 1, 1970 when account will be disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- reserved for future use
+.RE
+.SH "DESCRIPTION"
+.PP
+
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, and
+\fIsgetspent\fR
+each return a pointer to a
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+returns the next entry from the file, and
+\fIfgetspent\fR
+returns the next entry from the given stream, which is assumed to be a file of the proper format\&.
+\fIsgetspent\fR
+returns a pointer to a
+\fIstruct spwd\fR
+using the provided string as input\&.
+\fIgetspnam\fR
+searches from the current position in the file for an entry matching
+\fIname\fR\&.
+.PP
+
+\fIsetspent\fR
+and
+\fIendspent\fR
+may be used to begin and end, respectively, access to the shadow password file\&.
+.PP
+The
+\fIlckpwdf\fR
+and
+\fIulckpwdf\fR
+routines should be used to insure exclusive access to the
+/etc/shadow
+file\&.
+\fIlckpwdf\fR
+attempts to acquire a lock using
+\fIpw_lock\fR
+for up to 15 seconds\&. It continues by attempting to acquire a second lock using
+\fIspw_lock\fR
+for the remainder of the initial 15 seconds\&. Should either attempt fail after a total of 15 seconds,
+\fIlckpwdf\fR
+returns \-1\&. When both locks are acquired 0 is returned\&.
+.SH "DIAGNOSTICS"
+.PP
+Routines return NULL if no more entries are available or if an error occurs during processing\&. Routines which have
+\fIint\fR
+as the return value return 0 for success and \-1 for failure\&.
+.SH "CAVEATS"
+.PP
+These routines may only be used by the superuser as access to the shadow password file is restricted\&.
+.SH "FILES"
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/shadow.3.xml b/man/shadow.3.xml
new file mode 100644 (file)
index 0000000..155f715
--- /dev/null
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1989 - 1993, Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='shadow.3'>
+  <!--  $Id: shadow.3.xml 2435 2008-10-11 11:44:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>shadow</refentrytitle>
+    <manvolnum>3</manvolnum>
+    <refmiscinfo class="sectdesc">Library Calls</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>shadow</refname>
+    <refname>getspnam</refname>
+    <refpurpose>encrypted password file routines</refpurpose>
+  </refnamediv>
+
+  <refsect1 id='syntax'>
+    <title>SYNTAX</title>
+    <para>
+      <emphasis>#include &lt;shadow.h&gt;</emphasis>
+    </para>
+
+    <para>
+      <emphasis>struct spwd *getspent();</emphasis>
+    </para>
+
+    <para>
+      <emphasis>struct spwd *getspnam(char</emphasis> <emphasis
+      remap='I'>*name</emphasis><emphasis>);</emphasis>
+    </para>
+
+    <para>
+      <emphasis>void setspent();</emphasis>
+    </para>
+
+    <para>
+      <emphasis>void endspent();</emphasis>
+    </para>
+
+    <para>
+      <emphasis>struct spwd *fgetspent(FILE</emphasis> <emphasis
+      remap='I'>*fp</emphasis><emphasis>);</emphasis>
+    </para>
+
+    <para>
+      <emphasis>struct spwd *sgetspent(char</emphasis> <emphasis
+      remap='I'>*cp</emphasis><emphasis>);</emphasis>
+    </para>
+
+    <para>
+      <emphasis>int putspent(struct spwd</emphasis> <emphasis
+      remap='I'>*p,</emphasis> <emphasis>FILE</emphasis> <emphasis
+      remap='I'>*fp</emphasis><emphasis>);</emphasis>
+    </para>
+
+    <para>
+      <emphasis>int lckpwdf();</emphasis>
+    </para>
+
+    <para>
+      <emphasis>int ulckpwdf();</emphasis>
+    </para>
+  </refsect1>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      <emphasis remap='I'>shadow</emphasis> manipulates the contents of the
+      shadow password file, <filename>/etc/shadow</filename>. The structure
+      in the <emphasis remap='I'>#include</emphasis> file is:
+    </para>
+    <programlisting>struct spwd {
+      char             *sp_namp; /* user login name */
+      char             *sp_pwdp; /* encrypted password */
+      long int         sp_lstchg; /* last password change */
+      long int         sp_min; /* days until change allowed. */
+      long int         sp_max; /* days before change required */
+      long int         sp_warn; /* days warning for expiration */
+      long int         sp_inact; /* days before account inactive */
+      long int         sp_expire; /* date when account expires */
+      unsigned long int        sp_flag; /* reserved for future use */
+}
+    </programlisting>
+    <para>The meanings of each field are:</para>
+    <itemizedlist mark='bullet'>
+      <listitem>
+       <para>sp_namp - pointer to null-terminated user name</para>
+      </listitem>
+      <listitem>
+       <para>sp_pwdp - pointer to null-terminated password</para>
+      </listitem>
+      <listitem>
+       <para>sp_lstchg - days since Jan 1, 1970 password was last changed</para>
+      </listitem>
+      <listitem>
+       <para>sp_min - days before which password may not be changed</para>
+      </listitem>
+      <listitem>
+       <para>sp_max - days after which password must be changed</para>
+      </listitem>
+      <listitem>
+        <para>sp_warn - days before password is to expire that user is warned of
+          pending password expiration
+        </para>
+      </listitem>
+      <listitem>
+       <para>sp_inact - days after password expires that account is considered
+         inactive and disabled
+       </para>
+      </listitem>
+      <listitem>
+       <para>sp_expire - days since Jan 1, 1970 when account will be disabled</para>
+      </listitem>
+      <listitem>
+       <para>sp_flag - reserved for future use</para>
+      </listitem>
+    </itemizedlist>
+
+  </refsect1>
+
+  <refsect1 id='description2'>
+    <title>DESCRIPTION</title>
+    <para>
+      <emphasis>getspent</emphasis>, <emphasis>getspname</emphasis>,
+      <emphasis>fgetspent</emphasis>, and <emphasis>sgetspent</emphasis>
+      each return a pointer to a <emphasis>struct spwd</emphasis>.
+      <emphasis>getspent</emphasis> returns the next entry from the file,
+      and <emphasis>fgetspent</emphasis> returns the next entry from the
+      given stream, which is assumed to be a file of the proper format.
+      <emphasis>sgetspent</emphasis> returns a pointer to a <emphasis>struct
+      spwd</emphasis> using the provided string as input.
+      <emphasis>getspnam</emphasis> searches from the current position in
+      the file for an entry matching <emphasis>name</emphasis>.
+    </para>
+
+    <para>
+      <emphasis>setspent</emphasis> and <emphasis>endspent</emphasis> may be
+      used to begin and end, respectively, access to the shadow password
+      file.
+    </para>
+    
+    <para>
+      The <emphasis>lckpwdf</emphasis> and <emphasis>ulckpwdf</emphasis>
+      routines should be used to insure exclusive access to the
+      <filename>/etc/shadow</filename> file.  <emphasis>lckpwdf</emphasis>
+      attempts to acquire a lock using <emphasis>pw_lock</emphasis> for up
+      to 15 seconds. It continues by attempting to acquire a second lock
+      using <emphasis>spw_lock</emphasis> for the remainder of the initial
+      15 seconds. Should either attempt fail after a total of 15 seconds,
+      <emphasis>lckpwdf</emphasis> returns -1. When both locks are acquired
+      0 is returned.
+    </para>
+  </refsect1>
+
+  <refsect1 id='diagnostics'>
+    <title>DIAGNOSTICS</title>
+    <para>
+      Routines return NULL if no more entries are available or if an error
+      occurs during processing. Routines which have <emphasis>int</emphasis>
+      as the return value return 0 for success and
+      -1 for failure.
+    </para>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      These routines may only be used by the superuser as access to the
+      shadow password file is restricted.
+    </para>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>getpwent</refentrytitle><manvolnum>3</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/shadow.5 b/man/shadow.5
new file mode 100644 (file)
index 0000000..d44508d
--- /dev/null
@@ -0,0 +1,141 @@
+'\" t
+.\"     Title: shadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: English
+.\"
+.TH "SHADOW" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+shadow \- shadowed password file
+.SH "DESCRIPTION"
+.PP
+
+shadow
+is a file which contains the password information for the system\'s accounts and optional aging information\&.
+.PP
+This file must not be readable by regular users if password security is to be maintained\&.
+.PP
+Each line of this file contains 9 fields, separated by colons (\(lq:\(rq), in the following order:
+.PP
+\fBlogin name\fR
+.RS 4
+It must be a valid account name, which exist on the system\&.
+.RE
+.PP
+\fBencrypted password\fR
+.RS 4
+Refer to
+\fBcrypt\fR(3)
+for details on how this string is interpreted\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, the user will not be able to use a unix password to log in (but the user may log in the system by other means)\&.
+.sp
+This field may be empty, in which case no passwords are required to authenticate as the specified login name\&. However, some applications which read the
+/etc/shadow
+file may decide not to permit any access at all if the password field is empty\&.
+.sp
+A password field which starts with a exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.RE
+.PP
+\fBdate of last password change\fR
+.RS 4
+The date of the last password change, expressed as the number of days since Jan 1, 1970\&.
+.sp
+The value 0 has a special meaning, which is that the user should change her pasword the next time she will log in the system\&.
+.sp
+An empty field means that password aging features are disabled\&.
+.RE
+.PP
+\fBminimum password age\fR
+.RS 4
+The minimum password age is the number of days the user will have to wait before she will be allowed to change her password again\&.
+.sp
+An empty field and value 0 mean that there are no minimum password age\&.
+.RE
+.PP
+\fBmaximum password age\fR
+.RS 4
+The maximum password age is the number of days after which the user will have to change her password\&.
+.sp
+After this number of days is elapsed, the password may still be valid\&. The user should be asked to change her password the next time she will log in\&.
+.sp
+An empty field means that there are no maximum password age, no password warning period, and no password inactivity period (see below)\&.
+.sp
+If the maximum password age is lower than the minimum password age, the user cannot change her password\&.
+.RE
+.PP
+\fBpassword warning period\fR
+.RS 4
+The number of days before a password is going to expire (see the maximum password age above) during which the user should be warned\&.
+.sp
+An empty field and value 0 mean that there are no password warning period\&.
+.RE
+.PP
+\fBpassword inactivity period\fR
+.RS 4
+The number of days after a password has expired (see the maximum password age above) during which the password should still be accepted (and the user should update her password during the next login)\&.
+.sp
+After expiration of the password and this expiration period is elapsed, no login is possible using the current user\'s password\&. The user should contact her administrator\&.
+.sp
+An empty field means that there are no enforcement of an inactivity period\&.
+.RE
+.PP
+\fBaccount expiration date\fR
+.RS 4
+The date of expiration of the account, expressed as the number of days since Jan 1, 1970\&.
+.sp
+Note that an account expiration differs from a password expiration\&. In case of an acount expiration, the user shall not be allowed to login\&. In case of a password expiration, the user is not allowed to login using her password\&.
+.sp
+An empty field means that the account will never expire\&.
+.sp
+The value 0 should not be used as it is interpreted as either an account with no expiration, or as an expiration on Jan 1, 1970\&.
+.RE
+.PP
+\fBreserved field\fR
+.RS 4
+This field is reserved for future use\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/shadow\-
+.RS 4
+Backup file for /etc/shadow\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/shadow.5.xml b/man/shadow.5.xml
new file mode 100644 (file)
index 0000000..c4759f5
--- /dev/null
@@ -0,0 +1,289 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1989 - 1990, Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='shadow.5'>
+  <!-- $Id: shadow.5.xml 3017 2009-06-06 11:21:15Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>shadow</refentrytitle>
+    <manvolnum>5</manvolnum>
+    <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>shadow</refname>
+    <refpurpose>shadowed password file</refpurpose>
+  </refnamediv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      <filename>shadow</filename> is a file which contains the password
+      information for the system's accounts and optional aging
+      information.
+    </para>
+
+    <para>
+      This file must not be readable by regular users if password security
+      is to be maintained.
+    </para>
+
+    <para>
+      Each line of this file contains 9 fields, separated by colons
+      (<quote>:</quote>), in the following order:
+    </para>
+
+    <variablelist>
+      <varlistentry>
+       <term><emphasis role="bold">login name</emphasis></term>
+       <listitem>
+         <para>
+           It must be a valid account name, which exist on the system.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><emphasis role="bold">encrypted password</emphasis></term>
+       <listitem>
+         <para>
+           Refer to <citerefentry><refentrytitle>crypt</refentrytitle>
+           <manvolnum>3</manvolnum></citerefentry> for details on how
+           this string is interpreted.
+         </para>
+         <para>
+           If the password field contains some string that is not a valid
+           result of <citerefentry><refentrytitle>crypt</refentrytitle>
+           <manvolnum>3</manvolnum></citerefentry>, for instance ! or *,
+           the user will not be able to use a unix password to log in
+           (but the user may log in the system by other means).
+         </para>
+         <para>
+           This field may be empty, in which case no passwords are
+           required to authenticate as the specified login name.
+           However, some applications which read the
+           <filename>/etc/shadow</filename> file may decide not to permit
+           any access at all if the password field is empty.
+         </para>
+         <para>
+           A password field which starts with a exclamation mark means
+           that the password is locked.  The remaining characters on the
+           line represent the password field before the password was
+           locked.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <emphasis role="bold">date of last password change</emphasis>
+       </term>
+       <listitem>
+         <para>
+           The date of the last password change, expressed as the number
+           of days since Jan 1, 1970.
+         </para>
+         <para>
+           The value 0 has a special meaning, which is that the user
+           should change her pasword the next time she will log in the
+           system.
+         </para>
+         <para>
+           An empty field means that password aging features are
+           disabled.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><emphasis role="bold">minimum password age</emphasis></term>
+       <listitem>
+         <para>
+           The minimum password age is the number of days the user will
+           have to wait before she will be allowed to change her password
+           again.
+         </para>
+         <para>
+           An empty field and value 0 mean that there are no minimum
+           password age.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><emphasis role="bold">maximum password age</emphasis></term>
+       <listitem>
+         <para>
+           The maximum password age is the number of days after which the
+           user will have to change her password.
+         </para>
+         <para>
+           After this number of days is elapsed, the password may still
+           be valid.  The user should be asked to change her password the
+           next time she will log in.
+         </para>
+         <para>
+           An empty field means that there are no maximum password age,
+           no password warning period, and no password inactivity period
+           (see below).
+         </para>
+         <para>
+           If the maximum password age is lower than the minimum password
+           age, the user cannot change her password.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <emphasis role="bold">password warning period</emphasis>
+       </term>
+       <listitem>
+         <para>
+           The number of days before a password is going to expire (see
+           the maximum password age above) during which the user should
+           be warned.
+         </para>
+         <para>
+           An empty field and value 0 mean that there are no password
+           warning period.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <emphasis role="bold">password inactivity period</emphasis>
+       </term>
+       <listitem>
+         <para>
+           The number of days after a password has expired (see the
+           maximum password age above) during which the password should
+           still be accepted (and the user should update her password
+           during the next login).
+         </para>
+         <para>
+           After expiration of the password and this expiration period is
+           elapsed, no login is possible using the current user's
+           password.  The user should contact her administrator.
+         </para>
+         <para>
+           An empty field means that there are no enforcement of an
+           inactivity period.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <emphasis role="bold">account expiration date</emphasis>
+       </term>
+       <listitem>
+         <para>
+           The date of expiration of the account, expressed as the number
+           of days since Jan 1, 1970.
+         </para>
+         <para>
+           Note that an account expiration differs from a password
+           expiration.  In case of an acount expiration, the user shall
+           not be allowed to login.  In case of a password expiration,
+           the user is not allowed to login using her password.
+         </para>
+         <para>
+           An empty field means that the account will never expire.
+         </para>
+         <para>
+           The value 0 should not be used as it is interpreted as either
+           an account with no expiration, or as an expiration on Jan 1,
+           1970.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><emphasis role="bold">reserved field</emphasis></term>
+       <listitem>
+         <para>This field is reserved for future use.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow-</filename></term>
+       <listitem>
+         <para>Backup file for /etc/shadow.</para>
+         <para>
+           Note that this file is used by the tools of the shadow
+           toolsuite, but not by all user and password management tools.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>chage</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>pwck</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>pwconv</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>pwunconv</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>sulogin</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/su.1 b/man/su.1
new file mode 100644 (file)
index 0000000..ed7451b
--- /dev/null
+++ b/man/su.1
@@ -0,0 +1,399 @@
+'\" t
+.\"     Title: su
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: User Commands
+.\"    Source: User Commands
+.\"  Language: English
+.\"
+.TH "SU" "1" "07/24/2009" "User Commands" "User Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+su \- change user ID or become superuser
+.SH "SYNOPSIS"
+.HP \w'\fBsu\fR\ 'u
+\fBsu\fR [\fIoptions\fR] [\fIusername\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBsu\fR
+command is used to become another user during a login session\&. Invoked without a
+\fBusername\fR,
+\fBsu\fR
+defaults to becoming the superuser\&. The optional argument
+\fB\-\fR
+may be used to provide an environment similar to what the user would expect had the user logged in directly\&.
+.PP
+Additional arguments may be provided after the username, in which case they are supplied to the user\'s login shell\&. In particular, an argument of
+\fB\-c\fR
+will cause the next argument to be treated as a command by most command interpreters\&. The command will be executed by the shell specified in
+/etc/passwd
+for the target user\&.
+.PP
+You can use the
+\fB\-\-\fR
+argument to separate
+\fBsu\fR
+options from the arguments supplied to the shell\&.
+.PP
+The user will be prompted for a password, if appropriate\&. Invalid passwords will produce an error message\&. All attempts, both valid and invalid, are logged to detect abuse of the system\&.
+.PP
+The current environment is passed to the new shell\&. The value of
+\fB$PATH\fR
+is reset to
+/bin:/usr/bin
+for normal users, or
+/sbin:/bin:/usr/sbin:/usr/bin
+for the superuser\&. This may be changed with the
+\fBENV_PATH\fR
+and
+\fBENV_SUPATH\fR
+definitions in
+/etc/login\&.defs\&.
+.PP
+A subsystem login is indicated by the presence of a "*" as the first character of the login shell\&. The given home directory will be used as the root of a new file system which the user is actually logged into\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBsu\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-command\fR \fICOMMAND\fR
+.RS 4
+Specify a command that will be invoked by the shell using its
+\fB\-c\fR\&.
+.RE
+.PP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+.RS 4
+Provide an environment similar to what the user would expect had the user logged in directly\&.
+.sp
+When
+\fB\-\fR
+is used, it must be specified as the last
+\fBsu\fR
+option\&. The other forms (\fB\-l\fR
+and
+\fB\-\-login\fR) do not have this restriction\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fISHELL\fR
+.RS 4
+The shell that will be invoked\&.
+.sp
+The invoked shell is chosen from (highest priority first):
+.PP
+.RS 4
+The shell specified with \-\-shell\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-preserve\-environment\fR
+is used, the shell specified by the
+\fB$SHELL\fR
+environment variable\&.
+.RE
+.PP
+.RS 4
+The shell indicated in the
+/etc/passwd
+entry for the target user\&.
+.RE
+.PP
+.RS 4
+/bin/sh
+if a shell could not be found by any above method\&.
+.RE
+.sp
+If the target user has a restricted shell (i\&.e\&. the shell field of this user\'s entry in
+/etc/passwd
+is not listed in
+/etc/shell), then the
+\fB\-\-shell\fR
+option or the
+\fB$SHELL\fR
+environment variable won\'t be taken into account, unless
+\fBsu\fR
+is called by root\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+.RS 4
+Preserve the current environment, except for:
+.PP
+\fB$PATH\fR
+.RS 4
+reset according to the
+/etc/login\&.defs
+options
+\fBENV_PATH\fR
+or
+\fBENV_SUPATH\fR
+(see below);
+.RE
+.PP
+\fB$IFS\fR
+.RS 4
+reset to
+\(lq<space><tab><newline>\(rq, if it was set\&.
+.RE
+.sp
+If the target user has a restricted shell, this option has no effect (unless
+\fBsu\fR
+is called by root)\&.
+.sp
+Note that the default behavior for the environment is the following:
+.PP
+.RS 4
+The
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$USER\fR,
+\fB$LOGNAME\fR,
+\fB$PATH\fR, and
+\fB$IFS\fR
+environment variables are reset\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is not used, the environment is copied, except for the variables above\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TERM\fR,
+\fB$COLORTERM\fR,
+\fB$DISPLAY\fR, and
+\fB$XAUTHORITY\fR
+environment variables are copied if they were set\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TZ\fR,
+\fB$HZ\fR, and
+\fB$MAIL\fR
+environment variables are set according to the
+/etc/login\&.defs
+options
+\fBENV_TZ\fR,
+\fBENV_HZ\fR,
+\fBMAIL_DIR\fR, and
+\fBMAIL_FILE\fR
+(see below)\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, other environment variables might be set by the
+\fBENVIRON_FILE\fR
+file (see below)\&.
+.RE
+.sp
+.RE
+.SH "CAVEATS"
+.PP
+This version of
+\fBsu\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+If defined, all su activity is logged to this file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\'t exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SEE ALSO"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsg\fR(1),
+\fBsh\fR(1)\&.
diff --git a/man/su.1.xml b/man/su.1.xml
new file mode 100644 (file)
index 0000000..f1962d5
--- /dev/null
@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1989 - 1990, Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY CONSOLE               SYSTEM "login.defs.d/CONSOLE.xml">
+<!ENTITY CONSOLE_GROUPS        SYSTEM "login.defs.d/CONSOLE_GROUPS.xml">
+<!ENTITY DEFAULT_HOME          SYSTEM "login.defs.d/DEFAULT_HOME.xml">
+<!ENTITY ENV_HZ                SYSTEM "login.defs.d/ENV_HZ.xml">
+<!ENTITY ENVIRON_FILE          SYSTEM "login.defs.d/ENVIRON_FILE.xml">
+<!ENTITY ENV_PATH              SYSTEM "login.defs.d/ENV_PATH.xml">
+<!ENTITY ENV_SUPATH            SYSTEM "login.defs.d/ENV_SUPATH.xml">
+<!ENTITY ENV_TZ                SYSTEM "login.defs.d/ENV_TZ.xml">
+<!ENTITY LOGIN_STRING          SYSTEM "login.defs.d/LOGIN_STRING.xml">
+<!ENTITY MAIL_CHECK_ENAB       SYSTEM "login.defs.d/MAIL_CHECK_ENAB.xml">
+<!ENTITY MAIL_DIR              SYSTEM "login.defs.d/MAIL_DIR.xml">
+<!ENTITY QUOTAS_ENAB           SYSTEM "login.defs.d/QUOTAS_ENAB.xml">
+<!ENTITY SULOG_FILE            SYSTEM "login.defs.d/SULOG_FILE.xml">
+<!ENTITY SU_NAME               SYSTEM "login.defs.d/SU_NAME.xml">
+<!ENTITY SU_WHEEL_ONLY         SYSTEM "login.defs.d/SU_WHEEL_ONLY.xml">
+<!ENTITY SYSLOG_SU_ENAB        SYSTEM "login.defs.d/SYSLOG_SU_ENAB.xml">
+<!ENTITY USERGROUPS_ENAB       SYSTEM "login.defs.d/USERGROUPS_ENAB.xml">
+]>
+<refentry id='su.1'>
+  <!--  $Id: su.1.xml 3018 2009-06-11 20:01:21Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>su</refentrytitle>
+    <manvolnum>1</manvolnum>
+    <refmiscinfo class="sectdesc">User Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>su</refname>
+    <refpurpose>change user ID or become superuser</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>su</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+      </arg>
+      <arg choice='opt'>
+       <arg choice='plain'>
+         <replaceable>username</replaceable>
+       </arg>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>su</command> command is used to become another user during
+      a login session. Invoked without a <option>username</option>, 
+      <command>su</command> defaults to
+      becoming the superuser. The optional argument <option>-</option> may
+      be used to provide an environment similar to what the user would
+      expect had the user logged in directly.
+    </para>
+
+    <para>
+      Additional arguments may be provided after the username, in which case
+      they are supplied to the user's login shell. In particular, an
+      argument of <option>-c</option> will cause the next argument to be
+      treated as a command by most command interpreters. The command will be
+      executed by the shell specified in <filename>/etc/passwd</filename>
+      for the target user.
+    </para>
+
+    <para>
+      You can use the <option>--</option> argument to separate
+      <command>su</command> options from the arguments supplied to the shell.
+    </para>
+
+    <para>The user will be prompted for a password, if appropriate. Invalid
+      passwords will produce an error message. All attempts, both valid and
+      invalid, are logged to detect abuse of the system.
+    </para>
+
+    <para>
+      The current environment is passed to the new shell. The value of
+      <envar>$PATH</envar> is reset to <filename>/bin:/usr/bin</filename>
+      for normal users, or <filename>/sbin:/bin:/usr/sbin:/usr/bin</filename>
+      for the superuser. This may be changed with the
+      <option>ENV_PATH</option> and <option>ENV_SUPATH</option>
+      definitions in <filename>/etc/login.defs</filename>.
+    </para>
+
+    <para>
+      A subsystem login is indicated by the presence of a "*" as the first
+      character of the login shell. The given home directory will be used as
+      the root of a new file system which the user is actually logged into.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>The options which apply to the <command>su</command> command are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-c</option>, <option>--command</option>
+         <replaceable>COMMAND</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Specify a command that will be invoked by the shell using its
+           <option>-c</option>.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-</option>, <option>-l</option>, <option>--login</option>
+       </term>
+       <listitem>
+         <para>
+           Provide an environment similar to what the user would expect had
+           the user logged in directly.
+         </para>
+         <para>
+           When <option>-</option> is used, it must be specified as the last
+           <command>su</command> option.
+           The other forms (<option>-l</option> and <option>--login</option>)
+           do not have this restriction.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-s</option>, <option>--shell</option>
+         <replaceable>SHELL</replaceable>
+       </term>
+       <listitem>
+         <para>The shell that will be invoked.</para>
+         <para>
+           The invoked shell is chosen from (highest priority first):
+           <!--This should be an orderedlist, but lists inside another
+               list does not work well with current docbook.
+               - nekral - 2009.06.03 -->
+           <variablelist>
+             <varlistentry><term></term><listitem>
+               <para>The shell specified with --shell.</para>
+             </listitem></varlistentry>
+             <varlistentry><term></term><listitem>
+               <para>
+                 If <option>--preserve-environment</option> is used, the
+                 shell specified by the <envar>$SHELL</envar> environment
+                 variable.
+               </para>
+             </listitem></varlistentry>
+             <varlistentry><term></term><listitem>
+               <para>
+                 The shell indicated in the <filename>/etc/passwd</filename>
+                 entry for the target user.
+               </para>
+             </listitem></varlistentry>
+             <varlistentry><term></term><listitem>
+               <para><filename>/bin/sh</filename> if a shell could not be
+               found by any above method.</para>
+             </listitem></varlistentry>
+           </variablelist>
+         </para>
+         <para>
+           If the target user has a restricted shell (i.e. the shell field of
+           this user's entry in <filename>/etc/passwd</filename> is not
+           listed in <filename>/etc/shell</filename>), then the
+           <option>--shell</option> option or the <envar>$SHELL</envar>
+           environment variable won't be taken into account, unless
+           <command>su</command> is called by root.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-m</option>, <option>-p</option>,
+         <option>--preserve-environment</option>
+       </term>
+       <listitem>
+         <para>
+           Preserve the current environment, except for:
+           <variablelist>
+             <varlistentry>
+               <term><envar>$PATH</envar></term>
+               <listitem>
+                 <para>
+                   reset according to the
+                   <filename>/etc/login.defs</filename> options
+                   <option>ENV_PATH</option> or
+                   <option>ENV_SUPATH</option> (see below);
+                 </para>
+               </listitem>
+             </varlistentry>
+             <varlistentry>
+               <term><envar>$IFS</envar></term>
+               <listitem>
+                 <para>
+                   reset to
+                   <quote>&lt;space&gt;&lt;tab&gt;&lt;newline&gt;</quote>,
+                   if it was set.
+                 </para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </para>
+         <para>
+           If the target user has a restricted shell, this option has no
+           effect (unless <command>su</command> is called by root).
+         </para>
+         <para>
+           Note that the default behavior for the environment is the
+           following:
+           <variablelist>
+             <varlistentry><term></term><listitem>
+                 <para>
+                   The <envar>$HOME</envar>, <envar>$SHELL</envar>,
+                   <envar>$USER</envar>, <envar>$LOGNAME</envar>,
+                   <envar>$PATH</envar>, and <envar>$IFS</envar>
+                   environment variables are reset.
+                 </para>
+               </listitem>
+             </varlistentry>
+             <varlistentry><term></term><listitem>
+                 <para>
+                   If <option>--login</option> is not used, the
+                   environment is copied, except for the variables above.
+                 </para>
+               </listitem>
+             </varlistentry>
+             <varlistentry><term></term><listitem>
+                 <para>
+                   If <option>--login</option> is used, the
+                   <envar>$TERM</envar>, <envar>$COLORTERM</envar>,
+                   <envar>$DISPLAY</envar>, and
+                   <envar>$XAUTHORITY</envar> environment variables are
+                   copied if they were set.
+                 </para>
+               </listitem>
+             </varlistentry>
+             <varlistentry condition="no_pam"><term></term><listitem>
+                 <para>
+                   If <option>--login</option> is used, the
+                   <envar>$TZ</envar>, <envar>$HZ</envar>, and
+                   <envar>$MAIL</envar> environment
+                   variables are set according to the 
+                   <filename>/etc/login.defs</filename>
+                   options <option>ENV_TZ</option>,
+                   <option>ENV_HZ</option>, <option>MAIL_DIR</option>, and
+                   <option>MAIL_FILE</option> (see below).
+                 </para>
+               </listitem>
+             </varlistentry>
+             <varlistentry condition="no_pam"><term></term><listitem>
+                 <para>
+                   If <option>--login</option> is used, other environment
+                   variables might be set by the
+                   <option>ENVIRON_FILE</option> file (see below).
+                 </para>
+               </listitem>
+             </varlistentry>
+             <varlistentry condition="pam"><term></term><listitem>
+                 <para>
+                   Other environment might be set by PAM modules.
+                 </para>
+               </listitem>
+             </varlistentry>
+           </variablelist>
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      This version of <command>su</command> has many compilation options,
+      only some of which may be in use at any particular site.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &CONSOLE;
+      &CONSOLE_GROUPS;
+      &DEFAULT_HOME;
+      <phrase condition="no_pam">&ENV_HZ;</phrase>
+      &ENVIRON_FILE;
+      &ENV_PATH;
+      &ENV_SUPATH;
+      &ENV_TZ;
+      <phrase condition="no_pam">&LOGIN_STRING;</phrase>
+      &MAIL_CHECK_ENAB;
+      <phrase condition="no_pam">&MAIL_DIR;</phrase>
+      &QUOTAS_ENAB;
+      &SULOG_FILE;
+      &SU_NAME;
+      &SU_WHEEL_ONLY;
+      &SYSLOG_SU_ENAB;
+      <phrase condition="no_pam">&USERGROUPS_ENAB;</phrase>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para><citerefentry>
+       <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>sg</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/suauth.5 b/man/suauth.5
new file mode 100644 (file)
index 0000000..8721b86
--- /dev/null
@@ -0,0 +1,138 @@
+'\" t
+.\"     Title: suauth
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: File Formats and Conversions
+.\"    Source: File Formats and Conversions
+.\"  Language: English
+.\"
+.TH "SUAUTH" "5" "07/24/2009" "File Formats and Conversions" "File Formats and Conversions"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+suauth \- detailed su control file
+.SH "SYNOPSIS"
+.HP \w'\fB/etc/suauth\fR\ 'u
+\fB/etc/suauth\fR
+.SH "DESCRIPTION"
+.PP
+The file
+/etc/suauth
+is referenced whenever the su command is called\&. It can change the behaviour of the su command, based upon:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      1) the user su is targetting
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+2) the user executing the su command (or any groups he might be a member of)
+.PP
+The file is formatted like this, with lines starting with a # being treated as comment lines and ignored;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      to\-id:from\-id:ACTION
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Where to\-id is either the word
+\fIALL\fR, a list of usernames delimited by "," or the words
+\fIALL EXCEPT\fR
+followed by a list of usernames delimited by ","
+.PP
+from\-id is formatted the same as to\-id except the extra word
+\fIGROUP\fR
+is recognised\&.
+\fIALL EXCEPT GROUP\fR
+is perfectly valid too\&. Following
+\fIGROUP\fR
+appears one or more group names, delimited by ","\&. It is not sufficient to have primary group id of the relevant group, an entry in
+\fB/etc/group\fR(5)
+is neccessary\&.
+.PP
+Action can be one only of the following currently supported options\&.
+.PP
+\fIDENY\fR
+.RS 4
+The attempt to su is stopped before a password is even asked for\&.
+.RE
+.PP
+\fINOPASS\fR
+.RS 4
+The attempt to su is automatically successful; no password is asked for\&.
+.RE
+.PP
+\fIOWNPASS\fR
+.RS 4
+For the su command to be successful, the user must enter his or her own password\&. They are told this\&.
+.RE
+.PP
+Note there are three separate fields delimited by a colon\&. No whitespace must surround this colon\&. Also note that the file is examined sequentially line by line, and the first applicable rule is used without examining the file further\&. This makes it possible for a system administrator to exercise as fine control as he or she wishes\&.
+.SH "EXAMPLE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      # sample /etc/suauth file
+      #
+      # A couple of privileged usernames may
+      # su to root with their own password\&.
+      #
+      root:chris,birddog:OWNPASS
+      #
+      # Anyone else may not su to root unless in
+      # group wheel\&. This is how BSD does things\&.
+      #
+      root:ALL EXCEPT GROUP wheel:DENY
+      #
+      # Perhaps terry and birddog are accounts
+      # owned by the same person\&.
+      # Access can be arranged between them
+      # with no password\&.
+      #
+      terry:birddog:NOPASS
+      birddog:terry:NOPASS
+      #
+    
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FILES"
+.PP
+/etc/suauth
+.RS 4
+.RE
+.SH "BUGS"
+.PP
+There could be plenty lurking\&. The file parser is particularly unforgiving about syntax errors, expecting no spurious whitespace (apart from beginning and end of lines), and a specific token delimiting different things\&.
+.SH "DIAGNOSTICS"
+.PP
+An error parsing the file is reported using
+\fBsyslogd\fR(8)
+as level ERR on facility AUTH\&.
+.SH "SEE ALSO"
+.PP
+
+\fBsu\fR(1)\&.
diff --git a/man/suauth.5.xml b/man/suauth.5.xml
new file mode 100644 (file)
index 0000000..dd5f6e6
--- /dev/null
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1996       , Marek Michałkiewicz
+   Copyright (c) 2001 - 2006, Tomasz Kłoczko
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<refentry id='suauth.5'>
+  <!-- $Id: suauth.5.xml 2435 2008-10-11 11:44:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>suauth</refentrytitle>
+    <manvolnum>5</manvolnum>
+    <refmiscinfo class="sectdesc">File Formats and Conversions</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>suauth</refname>
+    <refpurpose>detailed su control file</refpurpose>
+  </refnamediv>
+  <!-- body begins here -->
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>/etc/suauth</command>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The file <filename>/etc/suauth</filename> is referenced whenever the
+      su command is called. It can change the behaviour of the su command,
+      based upon:
+    </para>
+
+    <!-- .RS -->
+    <literallayout remap='.nf'>
+      1) the user su is targetting
+    </literallayout>
+    <!-- .fi -->
+    <para>
+      2) the user executing the su command (or any groups he might be
+      a member of)
+    </para>
+
+    <para>
+      The file is formatted like this, with lines starting with a # being
+      treated as comment lines and ignored;
+    </para>
+
+    <literallayout remap='RS'>
+      to-id:from-id:ACTION
+    </literallayout>
+
+    <para>
+      Where to-id is either the word <emphasis>ALL</emphasis>, a list of
+      usernames delimited by "," or the words <emphasis>ALL
+      EXCEPT</emphasis> followed by a list of usernames delimited by ","
+    </para>
+
+    <para>
+      from-id is formatted the same as to-id except the extra word
+      <emphasis>GROUP</emphasis> is recognised. <emphasis>ALL EXCEPT
+      GROUP</emphasis> is perfectly valid too. Following
+      <emphasis>GROUP</emphasis> appears one or more group names, delimited
+      by ",". It is not sufficient to have primary group id of the relevant
+      group, an entry in
+      <citerefentry><refentrytitle>/etc/group</refentrytitle>
+      <manvolnum>5</manvolnum></citerefentry> is neccessary.
+    </para>
+
+    <para> 
+      Action can be one only of the following currently supported options.
+    </para>
+    <variablelist remap='TP'>
+      <varlistentry>
+       <term>
+         <emphasis>DENY</emphasis>
+       </term>
+       <listitem>
+         <para>The attempt to su is stopped before a password is
+           even asked for.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <emphasis>NOPASS</emphasis>
+       </term>
+       <listitem>
+         <para>
+           The attempt to su is automatically successful; no password is
+           asked for.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <emphasis>OWNPASS</emphasis>
+       </term>
+       <listitem>
+         <para>
+           For the su command to be successful, the user must enter his or
+           her own password. They are told this.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+
+    <para>
+      Note there are three separate fields delimited by a colon. No
+      whitespace must surround this colon. Also note that the file is
+      examined sequentially line by line, and the first applicable rule is
+      used without examining the file further. This makes it possible for a
+      system administrator to exercise as fine control as he or she wishes.
+    </para>
+  </refsect1>
+
+  <refsect1 id='example'>
+    <title>EXAMPLE</title>
+    <literallayout remap='.nf'>
+      # sample /etc/suauth file
+      #
+      # A couple of privileged usernames may
+      # su to root with their own password.
+      #
+      root:chris,birddog:OWNPASS
+      #
+      # Anyone else may not su to root unless in
+      # group wheel. This is how BSD does things.
+      #
+      root:ALL EXCEPT GROUP wheel:DENY
+      #
+      # Perhaps terry and birddog are accounts
+      # owned by the same person.
+      # Access can be arranged between them
+      # with no password.
+      #
+      terry:birddog:NOPASS
+      birddog:terry:NOPASS
+      #
+    </literallayout>
+    <!-- .fi -->
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/suauth</filename></term>
+       <listitem><para></para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='bugs'>
+    <title>BUGS</title>
+    <para>
+      There could be plenty lurking. The file parser is particularly
+      unforgiving about syntax errors, expecting no spurious whitespace
+      (apart from beginning and end of lines), and a specific token
+      delimiting different things.
+    </para>
+  </refsect1>
+
+  <refsect1 id='diagnostics'>
+    <title>DIAGNOSTICS</title>
+    <para>
+      An error parsing the file is reported using
+      <citerefentry><refentrytitle>syslogd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+      as level ERR on facility AUTH.
+    </para>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>su</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/sulogin.8 b/man/sulogin.8
new file mode 100644 (file)
index 0000000..7602761
--- /dev/null
@@ -0,0 +1,108 @@
+'\" t
+.\"     Title: sulogin
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "SULOGIN" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+sulogin \- Single\-user login
+.SH "SYNTAX"
+.PP
+\fBsulogin\fR
+[\fItty\-device\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBsulogin\fR
+command is invoked by
+\fBinit\fR
+prior to allowing the user access to the system when in single user mode\&. This feature may only be available on certain systems where
+\fBinit\fR
+has been modified accordingly, or where the
+/etc/inittab
+has an entry for a single user login\&.
+.PP
+The user is prompted
+.PP
+Type control\-d to proceed with normal startup,
+(or give root password for system maintenance):
+.PP
+Input and output will be performed with the standard file descriptors unless the optional device name argument is provided\&.
+.PP
+If the user enters the correct root password, a login session is initiated\&. When
+\fIEOF\fR
+is pressed instead, the system enters multi\-user mode\&.
+.PP
+After the user exits the single\-user shell, or presses
+\fIEOF\fR, the system begins the initialization process required to enter multi\-user mode\&.
+.SH "CAVEATS"
+.PP
+This command can only be used if
+\fBinit\fR
+has been modified to call
+\fBsulogin\fR
+instead of
+/bin/sh, or if the user has set the
+\fIinittab\fR
+to support a single user login\&. For example, the line:
+.PP
+co:s:respawn:/etc/sulogin /dev/console
+.PP
+should execute the sulogin command in single user mode\&.
+.PP
+As complete an environment as possible is created\&. However, various devices may be unmounted or uninitialized and many of the user commands may be unavailable or nonfunctional as a result\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBlogin\fR(1),
+\fBsh\fR(1),
+\fBinit\fR(8)\&.
diff --git a/man/sulogin.8.xml b/man/sulogin.8.xml
new file mode 100644 (file)
index 0000000..c9acead
--- /dev/null
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1989 - 1992, Julianne Frances Haugh
+   Copyright (c) 2007 - 2008, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY ENV_HZ                SYSTEM "login.defs.d/ENV_HZ.xml">
+<!ENTITY ENV_TZ                SYSTEM "login.defs.d/ENV_TZ.xml">
+]>
+<refentry id='sulogin.8'>
+  <!--  $Id: sulogin.8.xml 2435 2008-10-11 11:44:43Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>sulogin</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>sulogin</refname>
+    <refpurpose>Single-user login</refpurpose>
+  </refnamediv>
+
+  <refsect1 id='syntax'>
+    <title>SYNTAX</title>
+    <para><command>sulogin</command> [<emphasis remap='I'>tty-device</emphasis>]
+    </para>
+  </refsect1>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>sulogin</command> command is invoked by <command>init</command>
+      prior to allowing the user access to the system when in single user mode.
+      This feature may only be available on certain systems where
+      <command>init</command> has been modified accordingly, or where the
+      <filename>/etc/inittab</filename> has an entry for a single user
+      login.
+    </para>
+
+    <para>The user is prompted</para>
+
+    <para>Type control-d to proceed with normal startup,
+      <!-- .br -->
+      (or give root password for system maintenance):
+    </para>
+
+    <para>
+      Input and output will be performed with the standard file descriptors
+      unless the optional device name argument is provided.
+    </para>
+
+    <para>
+      If the user enters the correct root password, a login session is
+      initiated. When <emphasis>EOF</emphasis> is pressed instead, the
+      system enters multi-user mode.
+    </para>
+
+    <para>
+      After the user exits the single-user shell, or presses
+      <emphasis>EOF</emphasis>, the system begins the initialization process
+      required to enter multi-user mode.
+    </para>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      This command can only be used if <command>init</command> has been
+      modified to call <command>sulogin</command> instead of
+      <filename>/bin/sh</filename>, or if the user has set the <emphasis
+      remap='I'>inittab</emphasis> to support a single user login. For
+      example, the line:
+    </para>
+
+    <para>co:s:respawn:/etc/sulogin /dev/console</para>
+
+    <para>should execute the sulogin command in single user mode.</para>
+
+    <para>
+      As complete an environment as possible is created. However, various
+      devices may be unmounted or uninitialized and many of the user
+      commands may be unavailable or nonfunctional as a result.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &ENV_HZ;
+      &ENV_TZ;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>login</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>sh</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>init</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/sv/Makefile.am b/man/sv/Makefile.am
new file mode 100644 (file)
index 0000000..cc69383
--- /dev/null
@@ -0,0 +1,60 @@
+mandir = @mandir@/sv
+
+man_MANS = \
+       chage.1 \
+       chfn.1 \
+       chgpasswd.8 \
+       chpasswd.8 \
+       chsh.1 \
+       expiry.1 \
+       faillog.5 \
+       faillog.8 \
+       getspnam.3 \
+       gpasswd.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmems.8 \
+       groupmod.8 \
+       groups.1 \
+       grpck.8 \
+       grpconv.8 \
+       grpunconv.8 \
+       gshadow.5 \
+       lastlog.8 \
+       login.1 \
+       login.defs.5 \
+       logoutd.8 \
+       newgrp.1 \
+       newusers.8 \
+       nologin.8 \
+       passwd.1 \
+       passwd.5 \
+       pwck.8 \
+       pwconv.8 \
+       pwunconv.8 \
+       sg.1 \
+       shadow.3 \
+       shadow.5 \
+       su.1 \
+       suauth.5 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8 \
+       vigr.8 \
+       vipw.8
+
+man_nopam = \
+       limits.5 \
+       login.access.5 \
+       porttime.5
+
+if !USE_PAM
+man_MANS += $(man_nopam)
+endif
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_nopam)
+
+include ../generate_translations.mak
+
diff --git a/man/sv/Makefile.in b/man/sv/Makefile.in
new file mode 100644 (file)
index 0000000..5ee199a
--- /dev/null
@@ -0,0 +1,603 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_PAM_FALSE@am__append_1 = $(man_nopam)
+DIST_COMMON = $(srcdir)/../generate_mans.mak \
+       $(srcdir)/../generate_translations.mak $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+subdir = man/sv
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \
+       "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"
+man3dir = $(mandir)/man3
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/sv
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = chage.1 chfn.1 chgpasswd.8 chpasswd.8 chsh.1 expiry.1 \
+       faillog.5 faillog.8 getspnam.3 gpasswd.1 groupadd.8 groupdel.8 \
+       groupmems.8 groupmod.8 groups.1 grpck.8 grpconv.8 grpunconv.8 \
+       gshadow.5 lastlog.8 login.1 login.defs.5 logoutd.8 newgrp.1 \
+       newusers.8 nologin.8 passwd.1 passwd.5 pwck.8 pwconv.8 \
+       pwunconv.8 sg.1 shadow.3 shadow.5 su.1 suauth.5 useradd.8 \
+       userdel.8 usermod.8 vigr.8 vipw.8 $(am__append_1)
+man_nopam = \
+       limits.5 \
+       login.access.5 \
+       porttime.5
+
+EXTRA_DIST = \
+       $(man_MANS) \
+       $(man_nopam)
+
+@ENABLE_REGENERATE_MAN_TRUE@LANG = $(notdir $(CURDIR))
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_FALSE@PAM_COND = no_pam
+@ENABLE_REGENERATE_MAN_TRUE@@USE_PAM_TRUE@PAM_COND = pam
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_FALSE@SHADOWGRP_COND = no_gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@SHADOWGRP_TRUE@SHADOWGRP_COND = gshadow
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_FALSE@SHA_CRYPT_COND = no_sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@@USE_SHA_CRYPT_TRUE@SHA_CRYPT_COND = sha_crypt
+@ENABLE_REGENERATE_MAN_TRUE@CLEANFILES = .xml2po.mo $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST))
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../generate_translations.mak $(srcdir)/../generate_mans.mak $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/sv/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/sv/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man3: $(man3_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)"
+       @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.3*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           3*) ;; \
+           *) ext='3' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst"; \
+       done
+uninstall-man3:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.3*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           3*) ;; \
+           *) ext='3' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man3dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man3 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3 uninstall-man5 \
+       uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man3 install-man5 install-man8 install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man3 uninstall-man5 \
+       uninstall-man8
+
+
+@ENABLE_REGENERATE_MAN_TRUE@%.xml: ../%.xml ../po/$(LANG).po
+@ENABLE_REGENERATE_MAN_TRUE@   [ ! -f ../config.xml ] || mv ../config.xml ../config.xml.bak
+@ENABLE_REGENERATE_MAN_TRUE@   xml2po --expand-all-entities -l $(LANG) -p ../po/$(LANG).po -o $@ ../$@
+@ENABLE_REGENERATE_MAN_TRUE@   sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
+@ENABLE_REGENERATE_MAN_TRUE@   [ ! -f ../config.xml.bak ] || mv ../config.xml.bak ../config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   sed -i 's/config SYSTEM "config.xml">/config SYSTEM "config.xml">\%config;/' $@
+
+@ENABLE_REGENERATE_MAN_TRUE@config.xml: ../config.xml.in
+@ENABLE_REGENERATE_MAN_TRUE@   make -C .. config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   cp ../config.xml $@
+
+@ENABLE_REGENERATE_MAN_TRUE@%: %.xml Makefile config.xml
+@ENABLE_REGENERATE_MAN_TRUE@   $(XSLTPROC) --stringparam profile.condition "$(PAM_COND);$(SHADOWGRP_COND);$(SHA_CRYPT_COND)" \
+@ENABLE_REGENERATE_MAN_TRUE@               -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
+
+@ENABLE_REGENERATE_MAN_TRUE@grpconv.8 grpunconv.8 pwunconv.8: pwconv.8
+
+@ENABLE_REGENERATE_MAN_TRUE@getspnam.3: shadow.3
+
+@ENABLE_REGENERATE_MAN_TRUE@vigr.8: vipw.8
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/sv/chage.1 b/man/sv/chage.1
new file mode 100644 (file)
index 0000000..a6855bb
--- /dev/null
@@ -0,0 +1,161 @@
+'\" t
+.\"     Title: chage
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Anv\(:andarkommandon
+.\"    Source: Anv\(:andarkommandon
+.\"  Language: Swedish
+.\"
+.TH "CHAGE" "1" "24-07-2009" "Anv\(:andarkommandon" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+chage \- \(:andra \(oaldringsinformation f\(:or anv\(:andarl\(:osenord
+.SH "SYNOPSIS"
+.HP \w'\fBchage\fR\ 'u
+\fBchage\fR [\fIflaggor\fR] [\fIINLOGGNINGSNAMN\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBchage\fR
+command changes the number of days between password changes and the date of the last password change\&. This information is used by the system to determine when a user must change his/her password\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBchage\fR
+\(:ar:
+.PP
+\fB\-d\fR, \fB\-\-lastday\fR\fISISTA_DAG\fR
+.RS 4
+Set the number of days since January 1st, 1970 when the password was last changed\&. The date may also be expressed in the format YYYY\-MM\-DD (or the format more commonly used in your area)\&.
+.RE
+.PP
+\fB\-E\fR, \fB\-\-expiredate\fR\fIUTG\(oANGSDATUM\fR
+.RS 4
+Set the date or number of days since January 1, 1970 on which the user\'s account will no longer be accessible\&. The date may also be expressed in the format YYYY\-MM\-DD (or the format more commonly used in your area)\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIEXPIRE_DATE\fR
+will remove an account expiration date\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-I\fR, \fB\-\-inactive\fR\fIINAKTIV\fR
+.RS 4
+Set the number of days of inactivity after a password has expired before the account is locked\&. The
+\fIINACTIVE\fR
+option is the number of days of inactivity\&. A user whose account is locked must contact the system administrator before being able to use the system again\&.
+.sp
+Passing the number
+\fI\-1\fR
+as the
+\fIINACTIVE\fR
+will remove an account\'s inactivity\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Visa kontots \(oaldringsinformation
+.RE
+.PP
+\fB\-m\fR, \fB\-\-mindays\fR\fIMIN_DAGAR\fR
+.RS 4
+S\(:atter minimalt antal dagar mellan l\(:osenords\(:andringar till
+\fIMIN_DAGAR\fR\&. Ett nollv\(:arde f\(:or detta f\(:alt betyder att anv\(:andaren kan \(:andra sitt l\(:osenord n\(:ar som helst\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-maxdays\fR\fIMAX_DAGAR\fR
+.RS 4
+Set the maximum number of days during which a password is valid\&. When
+\fIMAX_DAYS\fR
+plus
+\fILAST_DAY\fR
+is less than the current day, the user will be required to change his/her password before being able to use his/her account\&. This occurrence can be planned for in advance by use of the
+\fB\-W\fR
+option, which provides the user with advance warning\&.
+.sp
+Passing the number
+\fI\-1\fR
+as
+\fIMAX_DAYS\fR
+will remove checking a password\'s validity\&.
+.RE
+.PP
+\fB\-W\fR, \fB\-\-warndays\fR\fIVARN_DAGAR\fR
+.RS 4
+Set the number of days of warning before a password change is required\&. The
+\fIWARN_DAYS\fR
+option is the number of days prior to the password expiring that a user will be warned his/her password is about to expire\&.
+.RE
+.PP
+If none of the options are selected,
+\fBchage\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTERA"
+.PP
+Programmet
+\fBchage\fR
+kr\(:aver att en skuggl\(:osenordsfil finns tillg\(:anglig\&.
+.PP
+The
+\fBchage\fR
+command is restricted to the root user, except for the
+\fB\-l\fR
+option, which may be used by an unprivileged user to determine when his/her password or account is due to expire\&.
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+Kommandot
+\fBchage\fR
+avslutas med f\(:oljande v\(:arden:
+.PP
+\fI0\fR
+.RS 4
+lyckad
+.RE
+.PP
+\fI1\fR
+.RS 4
+\(oatkomst nekad
+.RE
+.PP
+\fI2\fR
+.RS 4
+ogiltig kommandosyntax
+.RE
+.PP
+\fI15\fR
+.RS 4
+kan inte hitta skuggl\(:osenordsfilen
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/sv/chfn.1 b/man/sv/chfn.1
new file mode 100644 (file)
index 0000000..f034c73
--- /dev/null
@@ -0,0 +1,110 @@
+'\" t
+.\"     Title: chfn
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Anv\(:andarkommandon
+.\"    Source: Anv\(:andarkommandon
+.\"  Language: Swedish
+.\"
+.TH "CHFN" "1" "24-07-2009" "Anv\(:andarkommandon" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+chfn \- \(:andra verkligt anv\(:andarnamn och information
+.SH "SYNOPSIS"
+.HP \w'\fBchfn\fR\ 'u
+\fBchfn\fR [\-f\ \fIfullst\(:andigt_namn\fR] [\-r\ \fIrumsnummer\fR] [\-w\ \fIarbetstelefon\fR] [\-h\ \fIhemtelefon\fR] [\-o\ \fI\(:ovrigt\fR] [\fIanv\(:andare\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBchfn\fR
+command changes user fullname, office number, office extension, and home phone number information for a user\'s account\&. This information is typically printed by
+\fBfinger\fR(1)
+and similar programs\&. A normal user may only change the fields for her own account, subject to the restrictions in
+/etc/login\&.defs\&. (The default configuration is to prevent users from changing their fullname\&.) The superuser may change any field for any account\&. Additionally, only the superuser may use the
+\fB\-o\fR
+option to change the undefined portions of the GECOS field\&.
+.PP
+These fields must not contain any colons\&. Except for the
+\fIother\fR
+field, they should not contain any comma or equal sign\&. It is also recommended to avoid non\-US\-ASCII characters, but this is only enforced for the phone numbers\&. The
+\fIother\fR
+field is used to store accounting information used by other applications\&.
+.PP
+If none of the options are selected,
+\fBchfn\fR
+operates in an interactive fashion, prompting the user with the current values for all of the fields\&. Enter the new value to change the field, or leave the line blank to use the current value\&. The current value is displayed between a pair of
+\fB[ ]\fR
+marks\&. Without options,
+\fBchfn\fR
+prompts for the current user account\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.SH "FILER"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchsh\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/sv/chgpasswd.8 b/man/sv/chgpasswd.8
new file mode 100644 (file)
index 0000000..2772da5
--- /dev/null
@@ -0,0 +1,232 @@
+'\" t
+.\"     Title: chgpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "CHGPASSWD" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+chgpasswd \- uppdatera gruppl\(:osenord i satsl\(:age
+.SH "SYNOPSIS"
+.HP \w'\fBchgpasswd\fR\ 'u
+\fBchgpasswd\fR [\fIflaggor\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBchgpasswd\fR
+command reads a list of group name and password pairs from standard input and uses this information to update a set of existing groups\&. Each line is of the format:
+.PP
+\fIgruppnamn\fR:\fIl\(:osenord\fR
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchgpasswd\fR\&.
+.PP
+The default encryption algorithm can be defined for the system with the ENCRYPT_METHOD variable of
+/etc/login\&.defs, and can be overwiten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+This command is intended to be used in a large system environment where many accounts are created at a single time\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBchgpasswd\fR
+\(:ar:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Ins\(:anda l\(:osenord \(:ar i ett krypterat format\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Anv\(:and MD5\-kryptering ist\(:allet f\(:or DES n\(:ar ins\(:anda l\(:osenord inte \(:ar krypterade\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+Kom ih\(oag att st\(:alla in r\(:attigheter eller umask f\(:or att f\(:orhindra l\(:asning av okrypterade filer f\(:or andra anv\(:andare\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+
+\fBgpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBlogin.defs\fR(5)\&.
diff --git a/man/sv/chpasswd.8 b/man/sv/chpasswd.8
new file mode 100644 (file)
index 0000000..83157ad
--- /dev/null
@@ -0,0 +1,223 @@
+'\" t
+.\"     Title: chpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "CHPASSWD" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+chpasswd \- uppdatera l\(:osenord i satsl\(:age
+.SH "SYNOPSIS"
+.HP \w'\fBchpasswd\fR\ 'u
+\fBchpasswd\fR [\fIflaggor\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBchpasswd\fR
+command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users\&. Each line is of the format:
+.PP
+\fIanv\(:andarnamn\fR:\fIl\(:osenord\fR
+.SS ""
+.PP
+By default the supplied password must be in clear\-text, and is encrypted by
+\fBchpasswd\fR\&. Also the password age will be updated, if present\&.
+.PP
+The default encryption algorithm can be defined for the system with the ENCRYPT_METHOD variable of
+/etc/login\&.defs, and can be overwiten with the
+\fB\-e\fR,
+\fB\-m\fR, or
+\fB\-c\fR
+options\&.
+.PP
+
+\fBchpasswd\fR
+first update the password in memory, and then commit all the changes to disk if no errors occured for any users\&.
+.PP
+This command is intended to be used in a large system environment where many accounts are created at a single time\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBchpasswd\fR
+\(:ar:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-encrypted\fR
+.RS 4
+Ins\(:anda l\(:osenord \(:ar i ett krypterat format\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-md5\fR
+.RS 4
+Anv\(:and MD5\-kryptering ist\(:allet f\(:or DES n\(:ar ins\(:anda l\(:osenord inte \(:ar krypterade\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+Kom ih\(oag att st\(:alla in r\(:attigheter eller umask f\(:or att f\(:orhindra l\(:asning av okrypterade filer f\(:or andra anv\(:andare\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+
+\fBpasswd\fR(1),
+\fBnewusers\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8)\&.
diff --git a/man/sv/chsh.1 b/man/sv/chsh.1
new file mode 100644 (file)
index 0000000..f1701a2
--- /dev/null
@@ -0,0 +1,103 @@
+'\" t
+.\"     Title: chsh
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Anv\(:andarkommandon
+.\"    Source: Anv\(:andarkommandon
+.\"  Language: Swedish
+.\"
+.TH "CHSH" "1" "24-07-2009" "Anv\(:andarkommandon" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+chsh \- \(:andra inloggningsskal
+.SH "SYNOPSIS"
+.HP \w'\fBchsh\fR\ 'u
+\fBchsh\fR [\fIflaggor\fR] [\fIINLOGGNINGSNAMN\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBchsh\fR
+command changes the user login shell\&. This determines the name of the user\'s initial login command\&. A normal user may only change the login shell for her own account, the superuser may change the login shell for any account\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBchsh\fR
+\(:ar:
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fISKAL\fR
+.RS 4
+The name of the user\'s new login shell\&. Setting this field to blank causes the system to select the default login shell\&.
+.RE
+.PP
+If the
+\fB\-s\fR
+option is not selected,
+\fBchsh\fR
+operates in an interactive fashion, prompting the user with the current login shell\&. Enter the new value to change the shell, or leave the line blank to use the current one\&. The current shell is displayed between a pair of
+\fI[ ]\fR
+marks\&.
+.SH "NOTERA"
+.PP
+The only restriction placed on the login shell is that the command name must be listed in
+/etc/shells, unless the invoker is the superuser, and then any value may be added\&. An account with a restricted login shell may not change her login shell\&. For this reason, placing
+/bin/rsh
+in
+/etc/shells
+is discouraged since accidentally changing to a restricted shell would prevent the user from ever changing her login shell back to its original value\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shells
+.RS 4
+Lista p\(oa giltiga inloggningsskal\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(5)\&.
diff --git a/man/sv/expiry.1 b/man/sv/expiry.1
new file mode 100644 (file)
index 0000000..ead7476
--- /dev/null
@@ -0,0 +1,45 @@
+'\" t
+.\"     Title: expiry
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Anv\(:andarkommandon
+.\"    Source: Anv\(:andarkommandon
+.\"  Language: Swedish
+.\"
+.TH "EXPIRY" "1" "24-07-2009" "Anv\(:andarkommandon" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+expiry \- kontrollera och uppr\(:atth\(oall policy f\(:or l\(:osenordsutg\(oang
+.SH "SYNOPSIS"
+.HP \w'\fBexpiry\fR\ 'u
+\fBexpiry\fR [\-c] [\-f]
+.SH "BESKRIVNING"
+.PP
+The
+\fBexpiry\fR
+command checks (\fB\-c\fR) the current password expiration and forces (\fB\-f\fR) changes when required\&. It is callable as a normal user command\&.
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/sv/faillog.5 b/man/sv/faillog.5
new file mode 100644 (file)
index 0000000..852519a
--- /dev/null
@@ -0,0 +1,57 @@
+'\" t
+.\"     Title: faillog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Filformat och konversioner
+.\"    Source: Filformat och konversioner
+.\"  Language: Swedish
+.\"
+.TH "FAILLOG" "5" "24-07-2009" "Filformat och konversioner" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+faillog \- login failure logging file
+.SH "BESKRIVNING"
+.PP
+
+/var/log/faillog
+maintains a count of login failures and the limits for each account\&.
+.PP
+The file contains fixed length records, indexed by numerical UID\&. Each record contains the count of login failures since the last successful login; the maximum number of failures before the account is disabled; the line on whiche the last login failure occurred; the date of the last login failure; and the duration (in seconds) during which the account will be locked after a failure\&.
+.PP
+Strukturen f\(:or filen \(:ar:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct faillog {
+       short   fail_cnt;
+       short   fail_max;
+       char    fail_line[12];
+       time_t  fail_time;
+       long    fail_locktime;
+};
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FILER"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+
+\fBfaillog\fR(8)
diff --git a/man/sv/faillog.8 b/man/sv/faillog.8
new file mode 100644 (file)
index 0000000..3ec0520
--- /dev/null
@@ -0,0 +1,142 @@
+'\" t
+.\"     Title: faillog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "FAILLOG" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+faillog \- display faillog records or set login failure limits
+.SH "SYNOPSIS"
+.HP \w'\fBfaillog\fR\ 'u
+\fBfaillog\fR [\fIflaggor\fR]
+.SH "BESKRIVNING"
+.PP
+
+\fBfaillog\fR
+displays the contents of the failure log database (/var/log/faillog)\&. It can also set the failure counters and limits\&. When
+\fBfaillog\fR
+is run without arguments, it only displays the faillog records of the users who had a login failure\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBfaillog\fR
+\(:ar:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Display (or act on) faillog records for all users having an entry in the
+faillog
+database\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\-time\fR\fISEK\fR
+.RS 4
+Lock account for
+\fISEC\fR
+seconds after failed login\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-maximum\fR\fIMAX\fR
+.RS 4
+Set the maximum number of login failures after the account is disabled to
+\fIMAX\fR\&.
+.sp
+Selecting a
+\fIMAX\fR
+value of 0 has the effect of not placing a limit on the number of failed logins\&.
+.sp
+The maximum failure count should always be 0 for
+\fIroot\fR
+to prevent a denial of services attack against the system\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-reset\fR
+.RS 4
+Reset the counters of login failures\&.
+.sp
+Write access to
+/var/log/faillog
+is required for this option\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\fIDAGAR\fR
+.RS 4
+Display faillog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR \fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Display faillog record or maintains failure counters and limits (if used with
+\fB\-l\fR,
+\fB\-m\fR
+or
+\fB\-r\fR
+options) only for the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+When none of the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used,
+\fBfaillog\fR
+displays the faillog record of the specified user(s)\&.
+.PP
+NOTE: in display mode, only the records of users which currently exist in the system are displayed\&. In the other modes (when the
+\fB\-l\fR,
+\fB\-m\fR, or
+\fB\-r\fR
+options are used), the records of the user, or the range of users, or all the users that may have an entry in the faillog database will be changed\&. This is useful to reset records of users that have been deleted or set a policy in advance for a range of users\&.
+.SH "T\(:ANK P\(oA"
+.PP
+
+\fBfaillog\fR
+only prints out users with no successful login since the last failure\&. To print out a user who has had a successful login since their last failure, you must explicitly request the user with the
+\fB\-u\fR
+flag, or print out all users with the
+\fB\-a\fR
+flag\&.
+.SH "FILER"
+.PP
+/var/log/faillog
+.RS 4
+Failure logging file\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBlogin\fR(1),
+\fBfaillog\fR(5)\&.
diff --git a/man/sv/getspnam.3 b/man/sv/getspnam.3
new file mode 100644 (file)
index 0000000..cd473da
--- /dev/null
@@ -0,0 +1 @@
+.so man3/shadow.3
diff --git a/man/sv/gpasswd.1 b/man/sv/gpasswd.1
new file mode 100644 (file)
index 0000000..8931773
--- /dev/null
@@ -0,0 +1,254 @@
+'\" t
+.\"     Title: gpasswd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Anv\(:andarkommandon
+.\"    Source: Anv\(:andarkommandon
+.\"  Language: Swedish
+.\"
+.TH "GPASSWD" "1" "24-07-2009" "Anv\(:andarkommandon" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+gpasswd \- administer /etc/group and /etc/gshadow
+.SH "SYNOPSIS"
+.HP \w'\fBgpasswd\fR\ 'u
+\fBgpasswd\fR [\fIoption\fR] \fIgrupp\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBgpasswd\fR
+command is used to administer
+/etc/group, and /etc/gshadow\&. Every group can have
+administrators,
+members and a password\&.
+.PP
+System administrators can use the
+\fB\-A\fR
+option to define group administrator(s) and the
+\fB\-M\fR
+option to define members\&. They have all rights of group administrators and members\&.
+.PP
+
+\fBgpasswd\fR
+called by
+a group administrator
+with a group name only prompts for the new password of the
+\fIgroup\fR\&.
+.PP
+If a password is set the members can still use
+\fBnewgrp\fR(1)
+without a password, and non\-members must supply the password\&.
+.SS "Noteringar ang\(oaende gruppl\(:osenord"
+.PP
+Group passwords are an inherent security problem since more than one person is permitted to know the password\&. However, groups are a useful tool for permitting co\-operation between different users\&.
+.SH "FLAGGOR"
+.PP
+Except for the
+\fB\-A\fR
+and
+\fB\-M\fR
+options, the options cannot be combined\&.
+.PP
+The options which apply to the
+\fBgpasswd\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-add\fR \fIuser\fR
+.RS 4
+Add the
+\fIuser\fR
+to the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR \fIuser\fR
+.RS 4
+Remove the
+\fIuser\fR
+from the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\-password\fR
+.RS 4
+Remove the password from the named
+\fIgroup\fR\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-R\fR, \fB\-\-restrict\fR
+.RS 4
+Restrict the access to the named
+\fIgroup\fR\&. Only group members will be allowed to use
+\fBnewgrp\fR
+to join the named
+\fIgroup\fR\&.
+.RE
+.PP
+\fB\-A\fR, \fB\-\-administrators\fR \fIuser\fR,\&.\&.\&.
+.RS 4
+Set the list of administrative users\&.
+.RE
+.PP
+\fB\-M\fR, \fB\-\-members\fR \fIuser\fR,\&.\&.\&.
+.RS 4
+Set the list of group members\&.
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+This tool only operates on the
+/etc/group
+and /etc/gshadow files\&.
+Thus you cannot change any NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+
+\fBnewgrp\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBgrpck\fR(8),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/sv/groupadd.8 b/man/sv/groupadd.8
new file mode 100644 (file)
index 0000000..8ee109f
--- /dev/null
@@ -0,0 +1,212 @@
+'\" t
+.\"     Title: groupadd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "GROUPADD" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+groupadd \- skapa en ny grupp
+.SH "SYNOPSIS"
+.HP \w'\fBgroupadd\fR\ 'u
+\fBgroupadd\fR [\fIflaggor\fR] \fIgrupp\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBgroupadd\fR
+command creates a new group account using the values specified on the command line plus the default values from the system\&. The new group will be entered into the system files as needed\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBgroupadd\fR
+\(:ar:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option causes the command to simply exit with success status if the specified group already exists\&. When used with
+\fB\-g\fR, and the specified GID already exists, another (unique) GID is chosen (i\&.e\&.
+\fB\-g\fR
+is turned off)\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIGID\fR
+.RS 4
+The numerical value of the group\'s ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than 999 and greater than every other group\&. Values between 0 and 999 are typically reserved for system accounts\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\fINYCKEL\fR=\fIV\(:ARDE\fR
+.RS 4
+\(oAsidos\(:atter standardv\(:arden i
+/etc/login\&.defs
+(GID_MIN, GID_MAX och andra)\&. Flera flaggor av
+\fB\-K\fR
+kan anges\&.
+.sp
+Example:
+\fB\-K \fR\fIGID_MIN\fR=\fI100\fR
+\fB\-K \fR\fIGID_MAX\fR=\fI499\fR
+.sp
+Notera:
+\fB\-K \fR\fIGID_MIN\fR=\fI10\fR,\fIGID_MAX\fR=\fI499\fR
+fungerar \(:annu inte\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+This option permits to add a group with a non\-unique GID\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\fIL\(:OSENORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system group\&.
+.sp
+The numeric identifiers of new system groups are choosen in the
+\fBSYS_GID_MIN\fR\-\fBSYS_GID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBGID_MIN\fR\-\fBGID_MAX\fR\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+Groupnames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Groupnames may only be up to 16 characters long\&.
+.PP
+You may not add a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+If the groupname already exists in an external group database such as NIS or LDAP,
+\fBgroupadd\fR
+will deny the group creation request\&.
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+Kommandot
+\fBgroupadd\fR
+avslutas med f\(:oljande v\(:arden:
+.PP
+\fI0\fR
+.RS 4
+lyckad
+.RE
+.PP
+\fI2\fR
+.RS 4
+ogiltig kommandosyntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+ogiltigt argument till flagga
+.RE
+.PP
+\fI4\fR
+.RS 4
+GID inte unikt (n\(:ar
+\fB\-o\fR
+inte anv\(:ands)
+.RE
+.PP
+\fI9\fR
+.RS 4
+gruppnamn inte unikt
+.RE
+.PP
+\fI10\fR
+.RS 4
+kan inte uppdatera gruppfilen
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/groupdel.8 b/man/sv/groupdel.8
new file mode 100644 (file)
index 0000000..4976db0
--- /dev/null
@@ -0,0 +1,108 @@
+'\" t
+.\"     Title: groupdel
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "GROUPDEL" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+groupdel \- ta bort en grupp
+.SH "SYNOPSIS"
+.HP \w'\fBgroupdel\fR\ 'u
+\fBgroupdel\fR \fIgrupp\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBgroupdel\fR
+command modifies the system account files, deleting all entries that refer to
+\fIgroup\fR\&. The named group must exist\&.
+.SH "T\(:ANK P\(oA"
+.PP
+Du f\(oar inte ta bort den prim\(:ara gruppen f\(:or n\(oagon existerande anv\(:andare\&. Du m\(oaste ta bort anv\(:andaren innan du tar bort gruppen\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this group\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+Kommandot
+\fBgroupdel\fR
+avslutas med f\(:oljande v\(:arden:
+.PP
+\fI0\fR
+.RS 4
+lyckad
+.RE
+.PP
+\fI2\fR
+.RS 4
+ogiltig kommandosyntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+angiven grupp finns inte
+.RE
+.PP
+\fI8\fR
+.RS 4
+kan inte ta bort anv\(:andarens prim\(:ara grupp
+.RE
+.PP
+\fI10\fR
+.RS 4
+kan inte uppdatera gruppfilen
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)
diff --git a/man/sv/groupmems.8 b/man/sv/groupmems.8
new file mode 100644 (file)
index 0000000..3dabf59
--- /dev/null
@@ -0,0 +1,157 @@
+'\" t
+.\"     Title: groupmems
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "GROUPMEMS" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+groupmems \- administrera medlemmar av en anv\(:andares prim\(:ara grupp
+.SH "SYNOPSIS"
+.HP \w'\fBgroupmems\fR\ 'u
+\fBgroupmems\fR \-a\ \fIanv\(:andarnamn\fR | \-d\ \fIanv\(:andarnamn\fR | [\-g\ \fIgruppnamn\fR] | \-l | \-p 
+.SH "BESKRIVNING"
+.PP
+The
+\fBgroupmems\fR
+command allows a user to administer his/her own group membership list without the requirement of superuser privileges\&. The
+\fBgroupmems\fR
+utility is for systems that configure its users to be in their own name sake primary group (i\&.e\&., guest / guest)\&.
+.PP
+Only the superuser, as administrator, can use
+\fBgroupmems\fR
+to alter the memberships of other groups\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBgroupmems\fR
+\(:ar:
+.PP
+\fB\-a\fR, \fB\-\-add\fR \fIuser_name\fR
+.RS 4
+Add an user to the group membership list\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR \fIuser_name\fR
+.RS 4
+Ta bort en anv\(:andare fr\(oan gruppen medlemslista\&.
+.sp
+If the
+/etc/gshadow
+file exist, the user will be removed from the list of members and administrators of the group\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-group\fR \fIgroup_name\fR
+.RS 4
+The superuser can specify which group membership list to modify\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-list\fR
+.RS 4
+Lista gruppens medlemslista\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-purge\fR
+.RS 4
+Rensa alla anv\(:andare fr\(oan gruppens medlemslista\&.
+.sp
+If the
+/etc/gshadow
+file exist, and the group has no entry in the
+/etc/gshadow
+file, a new entry will be created\&.
+.RE
+.SH "SETUP"
+.PP
+The
+\fBgroupmems\fR
+executable should be in mode
+2770
+as user
+\fIroot\fR
+and in group
+\fIgroups\fR\&. The system administrator can add users to group
+\fIgroups\fR
+to allow or disallow them using the
+\fBgroupmems\fR
+utility to manage their own group membership list\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+       $ groupadd \-r groups
+       $ chmod 2770 groupmems
+       $ chown root\&.groups groupmems
+       $ groupmems \-g groups \-a gk4
+    
+.fi
+.if n \{\
+.RE
+.\}
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+s\(:aker gruppkontoinformation
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/groupmod.8 b/man/sv/groupmod.8
new file mode 100644 (file)
index 0000000..6bb9b1c
--- /dev/null
@@ -0,0 +1,171 @@
+'\" t
+.\"     Title: groupmod
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "GROUPMOD" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+groupmod \- \(:andra en gruppdefinition p\(oa systemet
+.SH "SYNOPSIS"
+.HP \w'\fBgroupmod\fR\ 'u
+\fBgroupmod\fR [\fIflaggor\fR] \fIGRUPP\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBgroupmod\fR
+command modifies the definition of the specified
+\fIGROUP\fR
+by modifying the appropriate entry in the group database\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBgroupmod\fR
+\(:ar:
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIGID\fR
+.RS 4
+The group ID of the given
+\fIGROUP\fR
+will be changed to
+\fIGID\fR\&.
+.sp
+The value of
+\fIGID\fR
+must be a non\-negative decimal integer\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. Values between 0 and 999 are typically reserved for system groups\&.
+.sp
+Any files that have the old group ID and must continue to belong to
+\fIGROUP\fR, must have their group ID changed manually\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-new\-name\fR\fINY_GRUPP\fR
+.RS 4
+The name of the group will be changed from
+\fIGROUP\fR
+to
+\fINEW_GROUP\fR
+name\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-g\fR
+option, allow to change the group
+\fIGID\fR
+to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\fIL\(:OSENORD\fR
+.RS 4
+Det krypterade l\(:osenordet, som returneras av
+\fBcrypt\fR(3)\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+Kommandot
+\fBgroupmod\fR
+avslutas med f\(:oljande v\(:arden:
+.PP
+\fI0\fR
+.RS 4
+lyckad
+.RE
+.PP
+\fI2\fR
+.RS 4
+ogiltig kommandosyntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+ogiltigt argument till flagga
+.RE
+.PP
+\fI4\fR
+.RS 4
+angiven grupp finns inte
+.RE
+.PP
+\fI6\fR
+.RS 4
+angiven grupp finns inte
+.RE
+.PP
+\fI9\fR
+.RS 4
+gruppnamnet anv\(:ands redan
+.RE
+.PP
+\fI10\fR
+.RS 4
+kan inte uppdatera gruppfilen
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/groups.1 b/man/sv/groups.1
new file mode 100644 (file)
index 0000000..b66df2a
--- /dev/null
@@ -0,0 +1,55 @@
+'\" t
+.\"     Title: groups
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Anv\(:andarkommandon
+.\"    Source: Anv\(:andarkommandon
+.\"  Language: Swedish
+.\"
+.TH "GROUPS" "1" "24-07-2009" "Anv\(:andarkommandon" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+groups \- visa aktuella gruppnamn
+.SH "SYNOPSIS"
+.HP \w'\fBgroups\fR\ 'u
+\fBgroups\fR [\fIanv\(:andare\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBgroups\fR
+command displays the current group names or ID values\&. If the value does not have a corresponding entry in
+/etc/group, the value will be displayed as the numerical group value\&. The optional
+\fIuser\fR
+parameter will display the groups for the named
+\fIuser\fR\&.
+.SH "NOTERA"
+.PP
+Systems which do not support concurrent group sets will have the information from
+/etc/group
+reported\&. The user must use
+\fBnewgrp\fR
+or
+\fBsg\fR
+to change their current real and effective group ID\&.
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBnewgrp\fR(1),
+\fBgetgid\fR(2),
+\fBgetgroups\fR(2),
+\fBgetuid\fR(2)\&.
diff --git a/man/sv/grpck.8 b/man/sv/grpck.8
new file mode 100644 (file)
index 0000000..3920eba
--- /dev/null
@@ -0,0 +1,220 @@
+'\" t
+.\"     Title: grpck
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "GRPCK" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+grpck \- validera integriteten f\(:or gruppfiler
+.SH "SYNOPSIS"
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [\-r] [\fIgrupp\fR\ [\ \fIshadow\fR\ ]]
+.HP \w'\fBgrpck\fR\ 'u
+\fBgrpck\fR [\-s] [\fIgrupp\fR\ [\ \fIshadow\fR\ ]]
+.SH "BESKRIVNING"
+.PP
+The
+\fBgrpck\fR
+command verifies the integrity of the groups information\&. It checks that all entries in
+/etc/group
+and /etc/gshadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Kontroller g\(:ors f\(:or att validera att varje post har:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+korrekt antal f\(:alt
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid group name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid group identifier
+(/etc/group only)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a valid list of members
+and administrators
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a corresponding entry in the
+/etc/gshadow
+file (respectively
+/etc/group
+for the
+gshadow
+checks)
+.RE
+.PP
+The checks for correct number of fields and unique group name are fatal\&. If an entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated group name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warnings and the user is encouraged to run the
+\fBgroupmod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/group
+and /etc/gshadow files
+are not able to alter corrupted or duplicated entries\&.
+\fBgrpck\fR
+should be used in those circumstances to remove the offending entries\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBgrpck\fR
+command are:
+.PP
+\fB\-r\fR
+.RS 4
+Execute the
+\fBgrpck\fR
+command in read\-only mode\&. This causes all questions regarding changes to be answered
+\fIno\fR
+without user intervention\&.
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+Sort entries in
+/etc/group
+and /etc/gshadow
+by GID\&.
+.RE
+.PP
+By default,
+\fBgrpck\fR
+operates on
+/etc/groupand /etc/gshadow\&. The user may select alternate files with the
+\fIgroup\fR
+and \fIshadow\fR parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+Kommandot
+\fBgrpck\fR
+avslutas med f\(:oljande v\(:arden:
+.PP
+\fI0\fR
+.RS 4
+lyckad
+.RE
+.PP
+\fI1\fR
+.RS 4
+ogiltig kommandosyntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+en eller flera felaktiga grupposter
+.RE
+.PP
+\fI3\fR
+.RS 4
+kan inte \(:oppna gruppfiler
+.RE
+.PP
+\fI4\fR
+.RS 4
+kan inte l\(oasa gruppfiler
+.RE
+.PP
+\fI5\fR
+.RS 4
+kan inte uppdatera gruppfiler
+.RE
+.SH "SE OCKS\(oA"
+.PP
+
+\fBgroup\fR(5),
+\fBgroupmod\fR(8),
+\fBgshadow\fR(5),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBshadow\fR(5)\&.
diff --git a/man/sv/grpconv.8 b/man/sv/grpconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/sv/grpunconv.8 b/man/sv/grpunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/sv/gshadow.5 b/man/sv/gshadow.5
new file mode 100644 (file)
index 0000000..801b12a
--- /dev/null
@@ -0,0 +1,94 @@
+'\" t
+.\"     Title: gshadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Filformat och konversioner
+.\"    Source: Filformat och konversioner
+.\"  Language: Swedish
+.\"
+.TH "GSHADOW" "5" "24-07-2009" "Filformat och konversioner" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+gshadow \- skuggad gruppfil
+.SH "BESKRIVNING"
+.PP
+
+/etc/gshadow
+contains the shadowed information for group accounts\&.
+.PP
+Denna fil f\(oar inte vara l\(:asbar av vanliga anv\(:andare om l\(:osenordss\(:akerheten ska uppr\(:atth\(oallas\&.
+.PP
+Each line of this file contains the following colon\-separated fields:
+.PP
+\fBgruppnamn\fR
+.RS 4
+It must be a valid group name, which exist on the system\&.
+.RE
+.PP
+\fBkrypterat l\(:osenord\fR
+.RS 4
+Referera till
+\fBcrypt\fR(3)
+f\(:or detaljer om hur denna str\(:ang tolkas\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, users will not be able to use a unix password to access the group (but group members do not need the password)\&.
+.sp
+The password is used when an user who is not a member of the group wants to gain the permissions of this group (see
+\fBnewgrp\fR(1))\&.
+.sp
+This field may be empty, in which case only the group members can gain the group permissions\&.
+.sp
+A password field which starts with a exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.sp
+This password supersedes any password specified in
+/etc/group\&.
+.RE
+.PP
+\fBadministrators\fR
+.RS 4
+It must be a comma\-separated list of user names\&.
+.sp
+Administrators can change the password or the members of the group\&.
+.sp
+Administrators also have the same permissions as the members (see below)\&.
+.RE
+.PP
+\fBmembers\fR
+.RS 4
+It must be a comma\-separated list of user names\&.
+.sp
+Members can access the group without being prompted for a password\&.
+.sp
+You should use the same list of users as in
+/etc/group\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+
+\fBgpasswd\fR(5),
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBgrpconv\fR(8),
+\fBnewgrp\fR(1)\&.
diff --git a/man/sv/lastlog.8 b/man/sv/lastlog.8
new file mode 100644 (file)
index 0000000..66f6d61
--- /dev/null
@@ -0,0 +1,92 @@
+'\" t
+.\"     Title: lastlog
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "LASTLOG" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+lastlog \- reports the most recent login of all users or of a given user
+.SH "SYNOPSIS"
+.HP \w'\fBlastlog\fR\ 'u
+\fBlastlog\fR [\fIflaggor\fR]
+.SH "BESKRIVNING"
+.PP
+
+\fBlastlog\fR
+formats and prints the contents of the last login log
+/var/log/lastlog
+file\&. The
+\fIlogin\-name\fR,
+\fIport\fR, and
+\fIlast login time\fR
+will be printed\&. The default (no flags) causes lastlog entries to be printed, sorted by their order in
+/etc/passwd\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBlastlog\fR
+\(:ar:
+.PP
+\fB\-b\fR, \fB\-\-before\fR\fIDAGAR\fR
+.RS 4
+Print only lastlog records older than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-t\fR, \fB\-\-time\fR\fIDAGAR\fR
+.RS 4
+Print the lastlog records more recent than
+\fIDAYS\fR\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-user\fR \fILOGIN\fR|\fIRANGE\fR
+.RS 4
+Print the lastlog record of the specified user(s)\&.
+.sp
+The users can be specified by a login name, a numerical user ID, or a
+\fIRANGE\fR
+of users\&. This
+\fIRANGE\fR
+of users can be specified with a min and max values (\fIUID_MIN\-UID_MAX\fR), a max value (\fI\-UID_MAX\fR), or a min value (\fIUID_MIN\-\fR)\&.
+.RE
+.PP
+If the user has never logged in the message
+\fI** Never logged in**\fR
+will be displayed instead of the port and time\&.
+.PP
+Only the entries for the current users of the system will be displayed\&. Other entries may exist for users that were deleted previously\&.
+.SH "NOTERA"
+.PP
+The
+lastlog
+file is a database which contains info on the last login of each user\&. You should not rotate it\&. It is a sparse file, so its size on the disk is usually much smaller than the one shown by "\fBls \-l\fR" (which can indicate a really big file if you have in
+passwd
+users with a high UID)\&. You can display its real size with "\fBls \-s\fR"\&.
+.SH "FILER"
+.PP
+/var/log/lastlog
+.RS 4
+Databastider f\(:or tidigare anv\(:andarinloggningar\&.
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+Large gaps in UID numbers will cause the lastlog program to run longer with no output to the screen (i\&.e\&. if in lastlog database there is no entries for users with UID between 170 and 800 lastlog will appear to hang as it processes entries with UIDs 171\-799)\&.
diff --git a/man/sv/limits.5 b/man/sv/limits.5
new file mode 100644 (file)
index 0000000..8181535
--- /dev/null
@@ -0,0 +1,251 @@
+'\" t
+.\"     Title: limits
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Filformat och konversioner
+.\"    Source: Filformat och konversioner
+.\"  Language: Swedish
+.\"
+.TH "LIMITS" "5" "24-07-2009" "Filformat och konversioner" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+limits \- definition av resursbegr\(:ansningar
+.SH "BESKRIVNING"
+.PP
+The
+\fIlimits\fR
+file (/etc/limits
+by default or LIMITS_FILE defined
+config\&.h) describes the resource limits you wish to impose\&. It should be owned by root and readable by root account only\&.
+.PP
+By default no quota is imposed on \'root\'\&. In fact, there is no way to impose limits via this procedure to root\-equiv accounts (accounts with UID 0)\&.
+.PP
+Varje rad beskriver en begr\(:ansning f\(:or anv\(:andaren i formatet:
+.PP
+
+\fIuser LIMITS_STRING\fR
+.PP
+The
+\fILIMITS_STRING\fR
+is a string of a concatenated list of resource limits\&. Each limit consists of a letter identifier followed by a numerical limit\&.
+.PP
+De giltiga identifierarna \(:ar:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+A: maximal adressrymd (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+C: max core file size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+D: maximal datastorlek (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+F: maximal filstorlek (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+M: max locked\-in\-memory address space (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+N: maximalt antal \(:oppna filer
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+R: max resident set size (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+S: maximal stackstorlek (KB)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+T: maximal processortid (MIN)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+U: maximalt antal processer
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+K: file creation mask, set by
+\fBumask\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+L: maximalt antal inloggningar f\(:or denna anv\(:andare
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+P: processprioritet, inst\(:alld av
+\fBsetpriority\fR(2)\&.
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+I: max nice value (0\&.\&.39 which translates to 20\&.\&.\-19)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+O: max real time priority
+.RE
+.PP
+For example,
+\fIL2D2048N5\fR
+is a valid
+\fILIMITS_STRING\fR\&. For reading convenience, the following entries are equivalent:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      username L2D2048N5
+      username L2 D2048 N5
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Be aware that after
+\fIusername\fR
+the rest of the line is considered a limit string, thus comments are not allowed\&. A invalid limits string will be rejected (not considered) by the
+\fBlogin\fR
+program\&.
+.PP
+The default entry is denoted by username "\fI*\fR"\&. If you have multiple
+\fIdefault\fR
+entries in your
+\fILIMITS_FILE\fR, then the last one will be used as the default entry\&.
+.PP
+To completely disable limits for a user, a single dash "\fI\-\fR" will do\&.
+.PP
+Also, please note that all limit settings are set PER LOGIN\&. They are not global, nor are they permanent\&. Perhaps global limits will come, but for now this will have to do ;)
+.SH "FILER"
+.PP
+/etc/limits
+.RS 4
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBlogin\fR(1),
+\fBsetpriority\fR(2),
+\fBsetrlimit\fR(2)\&.
diff --git a/man/sv/login.1 b/man/sv/login.1
new file mode 100644 (file)
index 0000000..65309c1
--- /dev/null
@@ -0,0 +1,475 @@
+'\" t
+.\"     Title: login
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Anv\(:andarkommandon
+.\"    Source: Anv\(:andarkommandon
+.\"  Language: Swedish
+.\"
+.TH "LOGIN" "1" "24-07-2009" "Anv\(:andarkommandon" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+login \- begin session on the system
+.SH "SYNOPSIS"
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIv\(:ard\fR] [\fIanv\(:andarnamn\fR] [\fIENV=VAR\fR...]
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] [\-h\ \fIv\(:ard\fR] \-f \fIanv\(:andarnamn\fR
+.HP \w'\fBlogin\fR\ 'u
+\fBlogin\fR [\-p] \-r\ \fIv\(:ard\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBlogin\fR
+program is used to establish a new session with the system\&. It is normally invoked automatically by responding to the
+\fIlogin:\fR
+prompt on the user\'s terminal\&.
+\fBlogin\fR
+may be special to the shell and may not be invoked as a sub\-process\&. When called from a shell,
+\fBlogin\fR
+should be executed as
+\fBexec login\fR
+which will cause the user to exit from the current shell (and thus will prevent the new logged in user to return to the session of the caller)\&. Attempting to execute
+\fBlogin\fR
+from any shell but the login shell will produce an error message\&.
+.PP
+The user is then prompted for a password, where appropriate\&. Echoing is disabled to prevent revealing the password\&. Only a small number of password failures are permitted before
+\fBlogin\fR
+exits and the communications link is severed\&.
+.PP
+If password aging has been enabled for your account, you may be prompted for a new password before proceeding\&. You will be forced to provide your old password and the new password before continuing\&. Please refer to
+\fBpasswd\fR(1)
+for more information\&.
+.PP
+After a successful login, you will be informed of any system messages and the presence of mail\&. You may turn off the printing of the system message file,
+/etc/motd, by creating a zero\-length file
+\&.hushlogin
+in your login directory\&. The mail message will be one of "\fIYou have new mail\&.\fR", "\fIYou have mail\&.\fR", or "\fINo Mail\&.\fR" according to the condition of your mailbox\&.
+.PP
+Your user and group ID will be set according to their values in the
+/etc/passwd
+file\&. The value for
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$PATH\fR,
+\fB$LOGNAME\fR, and
+\fB$MAIL\fR
+are set according to the appropriate fields in the password entry\&. Ulimit, umask and nice values may also be set according to entries in the GECOS field\&.
+.PP
+On some installations, the environmental variable
+\fB$TERM\fR
+will be initialized to the terminal type on your tty line, as specified in
+/etc/ttytype\&.
+.PP
+An initialization script for your command interpreter may also be executed\&. Please see the appropriate manual section for more information on this function\&.
+.PP
+A subsystem login is indicated by the presence of a "*" as the first character of the login shell\&. The given home directory will be used as the root of a new file system which the user is actually logged into\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.SH "FLAGGOR"
+.PP
+\fB\-f\fR
+.RS 4
+Genomf\(:or inte autentisering, anv\(:andaren \(:ar f\(:orautentiserad\&.
+.sp
+Note: In that case,
+\fIusername\fR
+is mandatory\&.
+.RE
+.PP
+\fB\-h\fR
+.RS 4
+Namnet p\(oa fj\(:arrv\(:arden f\(:or denna inloggning\&.
+.RE
+.PP
+\fB\-p\fR
+.RS 4
+Beh\(oall milj\(:o\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Genomf\(:or automatiskt inloggningsprotokoll f\(:or rlogin\&.
+.RE
+.PP
+Flaggorna
+\fB\-r\fR,
+\fB\-h\fR
+och
+\fB\-f\fR
+anv\(:ands endast n\(:ar
+\fBlogin\fR
+har startats av root\&.
+.SH "T\(:ANK P\(oA"
+.PP
+This version of
+\fBlogin\fR
+has many compilation options, only some of which may be in use at any particular site\&.
+.PP
+The location of files is subject to differences in system configuration\&.
+.PP
+The
+\fBlogin\fR
+program is NOT responsible for removing users from the utmp file\&. It is the responsibility of
+\fBgetty\fR(8)
+and
+\fBinit\fR(8)
+to clean up apparent ownership of a terminal session\&. If you use
+\fBlogin\fR
+from the shell prompt without
+\fBexec\fR, the user you use will continue to appear to be logged in even after you log out of the "subsession"\&.
+.PP
+As with any program,
+\fBlogin\fR\'s appearance can be faked\&. If non\-trusted users have physical access to a machine, an attacker could use this to obtain the password of the next person coming to sit in front of the machine\&. Under Linux, the SAK mechanism can be used by users to initiate a trusted path and prevent this kind of attack\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Delay in seconds before being allowed another attempt after a login failure\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\' shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+If defined, login failures will be logged in this file in a utmp format\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\'s name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\'s home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+If defined, this file will be displayed before each login prompt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of /var/log/lastlog login time info\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Maximum number of login retries in case of bad password\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Max time in seconds for login\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Enable logging of successful logins\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Enable display of unknown usernames when login failures are recorded\&.
+.sp
+Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in /etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\'s primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILER"
+.PP
+/var/run/utmp
+.RS 4
+Lista p\(oa aktuella inloggningssessioner\&.
+.RE
+.PP
+/var/log/wtmp
+.RS 4
+Lista p\(oa tidigare inloggningssessioner\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/motd
+.RS 4
+Fil f\(:or dagens systemmeddelande\&.
+.RE
+.PP
+/etc/nologin
+.RS 4
+F\(:orhindra icke\-rootanv\(:andare fr\(oan att logga in\&.
+.RE
+.PP
+/etc/ttytype
+.RS 4
+Lista p\(oa terminaltyper\&.
+.RE
+.PP
+$HOME/\&.hushlogin
+.RS 4
+Tysta ner utskrift av systemmeddelanden\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBmail\fR(1),
+\fBpasswd\fR(1),
+\fBsh\fR(1),
+\fBsu\fR(1),
+\fBlogin.defs\fR(5),
+\fBnologin\fR(5),
+\fBpasswd\fR(5),
+\fBsecuretty\fR(5),
+\fBgetty\fR(8)\&.
diff --git a/man/sv/login.access.5 b/man/sv/login.access.5
new file mode 100644 (file)
index 0000000..7896b0c
--- /dev/null
@@ -0,0 +1,59 @@
+'\" t
+.\"     Title: login.access
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Filformat och konversioner
+.\"    Source: Filformat och konversioner
+.\"  Language: Swedish
+.\"
+.TH "LOGIN\&.ACCESS" "5" "24-07-2009" "Filformat och konversioner" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+login.access \- login access control table
+.SH "BESKRIVNING"
+.PP
+The
+\fIlogin\&.access\fR
+file specifies (user, host) combinations and/or (user, tty) combinations for which a login will be either accepted or refused\&.
+.PP
+When someone logs in, the
+\fIlogin\&.access\fR
+is scanned for the first entry that matches the (user, host) combination, or, in case of non\-networked logins, the first entry that matches the (user, tty) combination\&. The permissions field of that table entry determines whether the login will be accepted or refused\&.
+.PP
+Each line of the login access control table has three fields separated by a ":" character:
+.PP
+
+\fIpermission\fR:\fIusers\fR:\fIorigins\fR
+.PP
+The first field should be a "\fI+\fR" (access granted) or "\fI\-\fR" (access denied) character\&. The second field should be a list of one or more login names, group names, or
+\fIALL\fR
+(always matches)\&. The third field should be a list of one or more tty names (for non\-networked logins), host names, domain names (begin with "\&."), host addresses, internet network numbers (end with "\&."),
+\fIALL\fR
+(always matches) or
+\fILOCAL\fR
+(matches any string that does not contain a "\&." character)\&. If you run NIS you can use @netgroupname in host or user patterns\&.
+.PP
+The
+\fIEXCEPT\fR
+operator makes it possible to write very compact rules\&.
+.PP
+The group file is searched only when a name does not match that of the logged\-in user\&. Only groups are matched in which users are explicitly listed: the program does not look at a user\'s primary group id value\&.
+.SH "FILER"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/sv/login.defs.5 b/man/sv/login.defs.5
new file mode 100644 (file)
index 0000000..b9b2c61
--- /dev/null
@@ -0,0 +1,795 @@
+'\" t
+.\"     Title: login.defs
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Filformat och konversioner
+.\"    Source: Filformat och konversioner
+.\"  Language: Swedish
+.\"
+.TH "LOGIN\&.DEFS" "5" "24-07-2009" "Filformat och konversioner" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+login.defs \- shadow password suite configuration
+.SH "BESKRIVNING"
+.PP
+The
+/etc/login\&.defs
+file defines the site\-specific configuration for the shadow password suite\&. This file is required\&. Absence of this file will not prevent system operation, but will probably result in undesirable operation\&.
+.PP
+This file is a readable text file, each line of the file describing one configuration parameter\&. The lines consist of a configuration name and value, separated by whitespace\&. Blank lines and comment lines are ignored\&. Comments are introduced with a "#" pound sign and the pound sign must be the first non\-white character of the line\&.
+.PP
+Parameter values may be of four types: strings, booleans, numbers, and long numbers\&. A string is comprised of any printable characters\&. A boolean should be either the value
+\fIyes\fR
+or
+\fIno\fR\&. An undefined boolean parameter or one with a value other than these will be given a
+\fIno\fR
+value\&. Numbers (both regular and long) may be either decimal values, octal values (precede the value with
+\fI0\fR) or hexadecimal values (precede the value with
+\fI0x\fR)\&. The maximum value of the regular and long numeric parameters is machine\-dependent\&.
+.PP
+F\(:oljande konfigurationsposter tillhandah\(oalls:
+.PP
+\fBCHFN_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchfn\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCHFN_RESTRICT\fR (string)
+.RS 4
+This parameter specifies which values in the
+\fIgecos\fR
+field of the
+/etc/passwd
+file may be changed by regular users using the
+\fBchfn\fR
+program\&. It can be any combination of letters
+\fIf\fR,
+\fIr\fR,
+\fIw\fR,
+\fIh\fR, for Full name, Room number, Work phone, and Home phone, respectively\&. For backward compatibility,
+\fIyes\fR
+is equivalent to
+\fIrwh\fR
+and
+\fIno\fR
+is equivalent to
+\fIfrwh\fR\&. If not specified, only the superuser can make any changes\&. The most restrictive setting is better achieved by not installing
+\fBchfn\fR
+SUID\&.
+.RE
+.PP
+\fBCHSH_AUTH\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the
+\fBchsh\fR
+program will require authentication before making any changes, unless run by the superuser\&.
+.RE
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indicate if a home directory should be created by default for new users\&.
+.sp
+This setting does not apply to system users, and can be overriden on the command line\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBERASECHAR\fR (number)
+.RS 4
+Terminal ERASE character (\fI010\fR
+= backspace,
+\fI0177\fR
+= DEL)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBFAIL_DELAY\fR (number)
+.RS 4
+Delay in seconds before being allowed another attempt after a login failure\&.
+.RE
+.PP
+\fBFAILLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of
+/var/log/faillog
+login failure info\&.
+.RE
+.PP
+\fBFAKE_SHELL\fR (string)
+.RS 4
+If set,
+\fBlogin\fR
+will execute this shell instead of the users\' shell specified in
+/etc/passwd\&.
+.RE
+.PP
+\fBFTMP_FILE\fR (string)
+.RS 4
+If defined, login failures will be logged in this file in a utmp format\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBHUSHLOGIN_FILE\fR (string)
+.RS 4
+If defined, this file can inhibit all the usual chatter during the login sequence\&. If a full pathname is specified, then hushed mode will be enabled if the user\'s name or shell are found in the file\&. If not a full pathname, then hushed mode will be enabled if the file exists in the user\'s home directory\&.
+.RE
+.PP
+\fBISSUE_FILE\fR (string)
+.RS 4
+If defined, this file will be displayed before each login prompt\&.
+.RE
+.PP
+\fBKILLCHAR\fR (number)
+.RS 4
+Terminal KILL character (\fI025\fR
+= CTRL/U)\&.
+.sp
+The value can be prefixed "0" for an octal value, or "0x" for an hexadecimal value\&.
+.RE
+.PP
+\fBLASTLOG_ENAB\fR (boolean)
+.RS 4
+Enable logging and display of /var/log/lastlog login time info\&.
+.RE
+.PP
+\fBLOG_OK_LOGINS\fR (boolean)
+.RS 4
+Enable logging of successful logins\&.
+.RE
+.PP
+\fBLOG_UNKFAIL_ENAB\fR (boolean)
+.RS 4
+Enable display of unknown usernames when login failures are recorded\&.
+.sp
+Note: logging unknown usernames may be a security issue if an user enter her password instead of her login name\&.
+.RE
+.PP
+\fBLOGIN_RETRIES\fR (number)
+.RS 4
+Maximum number of login retries in case of bad password\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBLOGIN_TIMEOUT\fR (number)
+.RS 4
+Max time in seconds for login\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBMOTD_FILE\fR (string)
+.RS 4
+If defined, ":" delimited list of "message of the day" files to be displayed upon login\&.
+.RE
+.PP
+\fBNOLOGINS_FILE\fR (string)
+.RS 4
+If defined, name of file whose presence will inhibit non\-root logins\&. The contents of this file should be a message indicating why logins are inhibited\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+
+\fBPASS_MAX_DAYS\fR,
+\fBPASS_MIN_DAYS\fR
+and
+\fBPASS_WARN_AGE\fR
+are only used at the time of account creation\&. Any changes to these settings won\'t affect existing accounts\&.
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\'t change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBPORTTIME_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable checking of time restrictions specified in /etc/porttime\&.
+.RE
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+If defined, all su activity is logged to this file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\'t exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBTTYGROUP\fR (string), \fBTTYPERM\fR (string)
+.RS 4
+The terminal permissions: the login tty will be owned by the
+\fBTTYGROUP\fR
+group, and the permissions will be set to
+\fBTTYPERM\fR\&.
+.sp
+By default, the ownership of the terminal is set to the user\'s primary group and the permissions are set to
+\fI0600\fR\&.
+.sp
+
+\fBTTYGROUP\fR
+can be either the name of a group or a numeric group identifier\&.
+.sp
+If you have a
+\fBwrite\fR
+program which is "setgid" to a special group which owns the terminals, define TTYGROUP to the group number and TTYPERM to 0620\&. Otherwise leave TTYGROUP commented out and assign TTYPERM to either 622 or 600\&.
+.RE
+.PP
+\fBTTYTYPE_FILE\fR (string)
+.RS 4
+If defined, file which maps tty line to TERM environment parameter\&. Each line of the file is in a format something like "vt100 tty01"\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBULIMIT\fR (number)
+.RS 4
+Default
+\fBulimit\fR
+value\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+If defined, this command is run when removing a user\&. It should remove any at/cron/print jobs etc\&. owned by the user to be removed (passed as the first argument)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\'s cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+       echo "Usage: $0 username"
+       exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+      
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "CROSS REFERENCES"
+.PP
+The following cross references show which programs in the shadow password suite use which parameters\&.
+.PP
+chfn
+.RS 4
+
+CHFN_AUTH
+CHFN_RESTRICT
+LOGIN_STRING
+.RE
+.PP
+chgpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chpasswd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+chsh
+.RS 4
+CHSH_AUTH LOGIN_STRING
+.RE
+.PP
+gpasswd
+.RS 4
+ENCRYPT_METHOD MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+groupadd
+.RS 4
+GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP SYS_GID_MAX SYS_GID_MIN
+.RE
+.PP
+groupdel
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmems
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+groupmod
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpck
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+grpunconv
+.RS 4
+MAX_MEMBERS_PER_GROUP
+.RE
+.PP
+login
+.RS 4
+
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENV_PATH ENV_SUPATH ENV_TZ ENVIRON_FILE
+ERASECHAR FAIL_DELAY
+FAILLOG_ENAB
+FAKE_SHELL
+FTMP_FILE
+HUSHLOGIN_FILE
+ISSUE_FILE
+KILLCHAR
+LASTLOG_ENAB
+LOGIN_RETRIES
+LOGIN_STRING
+LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
+MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE MOTD_FILE NOLOGINS_FILE PORTTIME_CHECKS_ENAB QUOTAS_ENAB
+TTYGROUP TTYPERM TTYTYPE_FILE
+ULIMIT UMASK
+USERGROUPS_ENAB
+.RE
+.PP
+newgrp / sg
+.RS 4
+SYSLOG_SG_ENAB
+.RE
+.PP
+newusers
+.RS 4
+ENCRYPT_METHOD GID_MAX GID_MIN MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+passwd
+.RS 4
+ENCRYPT_METHOD MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB PASS_ALWAYS_WARN PASS_CHANGE_TRIES PASS_MAX_LEN PASS_MIN_LEN
+SHA_CRYPT_MAX_ROUNDS SHA_CRYPT_MIN_ROUNDS
+.RE
+.PP
+pwck
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+pwconv
+.RS 4
+PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
+.RE
+.PP
+su
+.RS 4
+
+CONSOLE
+CONSOLE_GROUPS DEFAULT_HOME
+ENV_HZ ENVIRON_FILE
+ENV_PATH ENV_SUPATH
+ENV_TZ LOGIN_STRING MAIL_CHECK_ENAB MAIL_DIR MAIL_FILE QUOTAS_ENAB
+SULOG_FILE SU_NAME
+SU_WHEEL_ONLY
+SYSLOG_SU_ENAB
+USERGROUPS_ENAB
+.RE
+.PP
+sulogin
+.RS 4
+ENV_HZ
+ENV_TZ
+.RE
+.PP
+useradd
+.RS 4
+CREATE_HOME GID_MAX GID_MIN MAIL_DIR MAX_MEMBERS_PER_GROUP PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE SYS_GID_MAX SYS_GID_MIN SYS_UID_MAX SYS_UID_MIN UID_MAX UID_MIN UMASK
+.RE
+.PP
+userdel
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP USERDEL_CMD USERGROUPS_ENAB
+.RE
+.PP
+usermod
+.RS 4
+MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBpam\fR(8)\&.
diff --git a/man/sv/logoutd.8 b/man/sv/logoutd.8
new file mode 100644 (file)
index 0000000..e8a60ed
--- /dev/null
@@ -0,0 +1,49 @@
+'\" t
+.\"     Title: logoutd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "LOGOUTD" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+logoutd \- Uppr\(:atth\(oall tidsbegr\(:ansningar f\(:or inloggningar
+.SH "SYNOPSIS"
+.HP \w'\fBlogoutd\fR\ 'u
+\fBlogoutd\fR
+.SH "BESKRIVNING"
+.PP
+
+\fBlogoutd\fR
+enforces the login time and port restrictions specified in
+/etc/porttime\&.
+\fBlogoutd\fR
+should be started from
+/etc/rc\&. The
+/var/run/utmp
+file is scanned periodically and each user name is checked to see if the named user is permitted on the named port at the current time\&. Any login session which is violating the restrictions in
+/etc/porttime
+is terminated\&.
+.SH "FILER"
+.PP
+/etc/porttime
+.RS 4
+Fil som inneh\(oaller port\(oatkomst
+.RE
+.PP
+/var/run/utmp
+.RS 4
+Lista p\(oa aktuella inloggningssessioner\&.
+.RE
diff --git a/man/sv/newgrp.1 b/man/sv/newgrp.1
new file mode 100644 (file)
index 0000000..378ed39
--- /dev/null
@@ -0,0 +1,91 @@
+'\" t
+.\"     Title: newgrp
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Anv\(:andarkommandon
+.\"    Source: Anv\(:andarkommandon
+.\"  Language: Swedish
+.\"
+.TH "NEWGRP" "1" "24-07-2009" "Anv\(:andarkommandon" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+newgrp \- logga in i en ny grupp
+.SH "SYNOPSIS"
+.HP \w'\fBnewgrp\fR\ 'u
+\fBnewgrp\fR [\-] [\fIgrupp\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBnewgrp\fR
+command is used to change the current group ID during a login session\&. If the optional
+\fB\-\fR
+flag is given, the user\'s environment will be reinitialized as though the user had logged in, otherwise the current environment, including current working directory, remains unchanged\&.
+.PP
+
+\fBnewgrp\fR
+changes the current real group ID to the named group, or to the default group listed in
+/etc/passwd
+if no group name is given\&.
+\fBnewgrp\fR
+also tries to add the group to the user groupset\&. If not root, the user will be prompted for a password if she does not have a password (in
+/etc/shadow
+if this user has an entry in the shadowed password file, or in
+/etc/passwd
+otherwise) and the group does, or if the user is not listed as a member and the group has a password\&. The user will be denied access if the group password is empty and the user is not listed as a member\&.
+.PP
+If there is an entry for this group in
+/etc/gshadow, then the list of members and the password of this group will be taken from this file, otherwise, the entry in
+/etc/group
+is considered\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBsu\fR(1),
+\fBsg\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/sv/newusers.8 b/man/sv/newusers.8
new file mode 100644 (file)
index 0000000..c49f1e8
--- /dev/null
@@ -0,0 +1,376 @@
+'\" t
+.\"     Title: newusers
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "NEWUSERS" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+newusers \- uppdatera och skapa nya anv\(:andare satsvis
+.SH "SYNOPSIS"
+.HP \w'\fBnewusers\fR\ 'u
+\fBnewusers\fR [\fIflaggor\fR\ \fInya_anv\(:andare\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBnewusers\fR
+command reads a file of user name and clear\-text password pairs and uses this information to update a group of existing users or to create new users\&. Each line is in the same format as the standard password file (see
+\fBpasswd\fR(5)) with the exceptions explained below:
+.PP
+pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
+.PP
+\fIpw_name\fR
+.RS 4
+This is the name of the user\&.
+.sp
+It can be the name of a new user or the name of an existing user (or an user created before by
+\fBnewusers\fR)\&. In case of an existing user, the user\'s information will be changed, otherwise a new user will be created\&.
+.RE
+.PP
+\fIpw_passwd\fR
+.RS 4
+Detta f\(:alt kommer att krypteras och anv\(:andas som det nya v\(:ardet f\(:or det krypterade l\(:osenordet\&.
+.RE
+.PP
+\fIpw_uid\fR
+.RS 4
+This field is used to define the UID of the user\&.
+.sp
+If the field is empty, an new (unused) UID will be defined automatically by
+\fBnewusers\fR\&.
+.sp
+If this field contains a number, this number will be used as the UID\&.
+.sp
+If this field contains the name of an existing user (or the name of an user created before by
+\fBnewusers\fR), the UID of the specified user will be used\&.
+.sp
+If the UID of an existing user is changed, the files ownership of the user\'s file should be fixed manually\&.
+.RE
+.PP
+\fIpw_gid\fR
+.RS 4
+This field is used to define the primary group ID for the user\&.
+.sp
+If this field contains the name of an existing group (or a group created before by
+\fBnewusers\fR), the GID of this group will be used as the primary group ID for the user\&.
+.sp
+If this field is a number, this number will be used as the primary group ID of the user\&. If no groups exist with this GID, a new group will be created with this GID, and the name of the user\&.
+.sp
+If this field is empty, a new group will be created with the name of the user and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and as the GID for the new group\&.
+.sp
+If this field contains the name of a group which does not exist (and was not created earlier wbefore by
+\fBnewusers\fR), a new group will be created with the specified name and a GID will be automatically defined by
+\fBnewusers\fR
+to be used as the primary group ID for the user and Gs the ID for the new group\&.
+.RE
+.PP
+\fIpw_gecos\fR
+.RS 4
+This field is copied in the GECOS field of the user\&.
+.RE
+.PP
+\fIpw_dir\fR
+.RS 4
+This field is used to define the home directory of the user\&.
+.sp
+If this field does not specify an existing directory, the specified directory is created, with ownership set to the user being created or updated and its primary group\&.
+.sp
+If the home directory of an existing user is changed,
+\fBnewusers\fR
+does not move or copy the content of the old directory to the new location\&. This should be done manually\&.
+.RE
+.PP
+\fIpw_shell\fR
+.RS 4
+This field defines the shell of the user\&. No checks are performed on this field\&.
+.RE
+.PP
+
+\fBnewusers\fR
+first tries to create or change all the specified users, and then write these changes to the user or group databases\&. If an error occurs (except in the final writes to the databases), no changes are committed to the databases\&.
+.PP
+Detta kommando \(:ar t\(:ankt att anv\(:andas i st\(:orre systemmilj\(:oer d\(:ar m\(oanga konton uppdateras p\(oa samma g\(oang\&.
+.SH "FLAGGOR"
+.PP
+The options which apply to the
+\fBnewusers\fR
+command are:
+.PP
+\fB\-c\fR, \fB\-\-crypt\-method\fR
+.RS 4
+Use the specified method to encrypt the passwords\&.
+.sp
+The available methods are DES, MD5, NONE, and SHA256 or SHA512 if your libc support these methods\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system account\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are choosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-sha\-rounds\fR
+.RS 4
+Use the specified number of rounds to encrypt the passwords\&.
+.sp
+The value 0 means that the system will choose the default number of rounds for the crypt method (5000)\&.
+.sp
+A minimal value of 1000 and a maximal value of 999,999,999 will be enforced\&.
+.sp
+You can only use this option with the SHA256 or SHA512 crypt method\&.
+.sp
+By default, the number of rounds is defined by the SHA_CRYPT_MIN_ROUNDS and SHA_CRYPT_MAX_ROUNDS variables in
+/etc/login\&.defs\&.
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+Inmatningsfilen m\(oaste skyddas eftersom den inneh\(oaller okrypterade l\(:osenord\&.
+.PP
+You should make sure the passwords and the encryption method respect the system\'s password policy\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBlogin.defs\fR(5),
+\fBpasswd\fR(1),
+\fBuseradd\fR(8)\&.
diff --git a/man/sv/nologin.8 b/man/sv/nologin.8
new file mode 100644 (file)
index 0000000..8a468ae
--- /dev/null
@@ -0,0 +1,42 @@
+'\" t
+.\"     Title: nologin
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "NOLOGIN" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+nologin \- v\(:agra sn\(:allt en inloggning
+.SH "SYNOPSIS"
+.HP \w'\fBnologin\fR\ 'u
+\fBnologin\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBnologin\fR
+command displays a message that an account is not available and exits non\-zero\&. It is intended as a replacement shell field for accounts that have been disabled\&.
+.PP
+F\(:or att inaktivera alla inloggningar, unders\(:ok
+\fBnologin\fR(5)\&.
+.SH "SE OCKS\(oA"
+.PP
+\fBlogin\fR(1),
+\fBnologin\fR(5)\&.
+.SH "HISTORY"
+.PP
+The
+\fBnologin\fR
+command appearred in BSD 4\&.4\&.
diff --git a/man/sv/passwd.1 b/man/sv/passwd.1
new file mode 100644 (file)
index 0000000..8664a35
--- /dev/null
@@ -0,0 +1,386 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Anv\(:andarkommandon
+.\"    Source: Anv\(:andarkommandon
+.\"  Language: Swedish
+.\"
+.TH "PASSWD" "1" "24-07-2009" "Anv\(:andarkommandon" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+passwd \- \(:andra anv\(:andarl\(:osenord
+.SH "SYNOPSIS"
+.HP \w'\fBpasswd\fR\ 'u
+\fBpasswd\fR [\fIflaggor\fR] [\fIINLOGGNINGSNAMN\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBpasswd\fR
+command changes passwords for user accounts\&. A normal user may only change the password for his/her own account, while the superuser may change the password for any account\&.
+\fBpasswd\fR
+also changes the account or associated password validity period\&.
+.SS "L\(:osenords\(:andringar"
+.PP
+The user is first prompted for his/her old password, if one is present\&. This password is then encrypted and compared against the stored password\&. The user has only one chance to enter the correct password\&. The superuser is permitted to bypass this step so that forgotten passwords may be changed\&.
+.PP
+Efter att l\(:osenordet har matats in kontrolleras l\(:osenordets \(oaldringsinformation f\(:or att se om anv\(:andaren till\(oats att \(:andra l\(:osenord f\(:or tillf\(:allet\&. Om inte, nekar
+\fBpasswd\fR
+att \(:andra l\(:osenordet och avslutas\&.
+.PP
+Anv\(:andaren fr\(oagas sedan tv\(oa g\(oanger efter ett ers\(:attande l\(:osenord\&. Den andra inmatningen j\(:amf\(:ors mot den f\(:orsta och b\(oada m\(oaste st\(:amma \(:overens f\(:or att l\(:osenordet ska \(:andras\&.
+.PP
+Sedan testas l\(:osenordet f\(:or sin komplexitet\&. Som en allm\(:an riktlinje b\(:or l\(:osenord inneh\(oalla 6 till 8 tecken och inkluderas ett eller flera tecken fr\(oan var och en av f\(:oljande punkter:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+gemena bokst\(:aver ur alfabetet
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+siffrorna 0 till 9
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+skiljetecken
+.RE
+.PP
+T\(:ank p\(oa att inte inkludera systemets standardtecken f\(:or radering eller d\(:oda\&.
+\fBpasswd\fR
+kommer att neka alla l\(:osenord som inte har l\(:amplig komplexitet\&.
+.SS "Tips f\(:or anv\(:andarl\(:osenord"
+.PP
+The security of a password depends upon the strength of the encryption algorithm and the size of the key space\&. The legacy
+\fIUNIX\fR
+System encryption method is based on the NBS DES algorithm\&. More recent methods are now recommended (see
+\fBENCRYPT_METHOD\fR)\&. The size of the key space depends upon the randomness of the password which is selected\&.
+.PP
+Problem i l\(:osenordss\(:akerheten brukar normalt komma fr\(oan slarvigt valda l\(:osenord eller hantering\&. Av denna anledning b\(:or du inte v\(:alja ett l\(:osenord som finns i en ordbok eller som m\(oaste skrivas ner\&. L\(:osenordet b\(:or heller inte vara ett korrekt namn, ditt personnummer, f\(:odelsedatum eller gatuadress\&. Dessa kan anv\(:andas som gissningar f\(:or att ta sig in i systemet\&.
+.PP
+You can find advices on how to choose a strong password on http://en\&.wikipedia\&.org/wiki/Password_strength
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBpasswd\fR
+\(:ar:
+.PP
+\fB\-a\fR, \fB\-\-all\fR
+.RS 4
+Denna flagga kan endast anv\(:andas med
+\fB\-S\fR
+och g\(:or att status visas f\(:or alla anv\(:andare\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-delete\fR
+.RS 4
+Ta bort en anv\(:andares l\(:osenord (g\(:or det blankt)\&. Detta \(:ar ett snabbt s\(:att att inaktivera ett l\(:osenord f\(:or ett konto\&. Det kommer att ta bort det angivna kontots l\(:osenord\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expire\fR
+.RS 4
+L\(:osenordet f\(:or ett konto s\(:atts omedelbart som utg\(oanget\&. Detta kan tvinga en anv\(:andare att \(:andra sitt l\(:osenord vid n\(:asta inloggningsf\(:ors\(:ok\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-i\fR, \fB\-\-inactive\fR\fIINAKTIV\fR
+.RS 4
+Denna flagga anv\(:ands f\(:or att inaktivera ett konto efter att l\(:osenordet har varit utg\(oanget i ett antal dagar\&. Efter att ett anv\(:andarkonto har haft ett utg\(oanget l\(:osenord i
+\fIINAKTIV\fR
+dagar f\(oar anv\(:andaren inte l\(:angre logga in med detta konto\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-keep\-tokens\fR
+.RS 4
+Indicate password change should be performed only for expired authentication tokens (passwords)\&. The user wishes to keep their non\-expired tokens as before\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-lock\fR
+.RS 4
+Lock the password of the named account\&. This option disables a password by changing it to a value which matches no possible encrypted value (it adds a \(aa!\(aa at the beginning of the password)\&.
+.sp
+Note that this does not disable the account\&. The user may still be able to login using another authentication token (e\&.g\&. an SSH key)\&. To disable the account, administrators should use
+\fBusermod \-\-expiredate 1\fR
+(this set the account\'s expire date to Jan 2, 1970)\&.
+.sp
+Users with a locked password are not allowed to change their password\&.
+.RE
+.PP
+\fB\-n\fR, \fB\-\-mindays\fR \fIMIN_DAYS\fR
+.RS 4
+S\(:atter minimalt antal dagar mellan l\(:osenords\(:andringar till
+\fIMIN_DAGAR\fR\&. Ett nollv\(:arde f\(:or detta f\(:alt betyder att anv\(:andaren kan \(:andra sitt l\(:osenord n\(:ar som helst\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Tyst l\(:age\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-repository\fR\fIF\(:ORR\(oAD\fR
+.RS 4
+change password in
+\fIREPOSITORY\fR
+repository
+.RE
+.PP
+\fB\-S\fR, \fB\-\-status\fR
+.RS 4
+Display account status information\&. The status information consists of 7 fields\&. The first field is the user\'s login name\&. The second field indicates if the user account has a locked password (L), has no password (NP), or has a usable password (P)\&. The third field gives the date of the last password change\&. The next four fields are the minimum age, maximum age, warning period, and inactivity period for the password\&. These ages are expressed in days\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock the password of the named account\&. This option re\-enables a password by changing the password back to its previous value (to the value before using the
+\fB\-l\fR
+option)\&.
+.RE
+.PP
+\fB\-w\fR, \fB\-\-warndays\fR\fIVARN_DAGAR\fR
+.RS 4
+S\(:atter antalet dagar f\(:or varning f\(:ore ett l\(:osenord beh\(:over \(:andras\&. Flaggan
+\fIVARN_DAGAR\fR
+\(:ar antalet dagar f\(:ore anv\(:andaren varnas om att l\(:osenordet \(:ar p\(oa v\(:ag att bli utg\(oanget\&.
+.RE
+.PP
+\fB\-x\fR, \fB\-\-maxdays\fR\fIMAX_DAGAR\fR
+.RS 4
+S\(:atter maximalt antal dagar som ett l\(:osenord ska vara giltigt\&. Efter
+\fIMAX_DAGAR\fR
+kr\(:avs det att l\(:osenordet \(:andras\&.
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+Password complexity checking may vary from site to site\&. The user is urged to select a password as complex as he or she feels comfortable with\&.
+.PP
+Users may not be able to change their password on a system if NIS is enabled and they are not logged into the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBENCRYPT_METHOD\fR (string)
+.RS 4
+This defines the system default encryption algorithm for encrypting passwords (if no algorithm are specified on the command line)\&.
+.sp
+It can take one of these values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIDES\fR
+(default)
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fIMD5\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA256\fR
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+\fISHA512\fR
+.RE
+.RS 4
+.sp
+Note: this parameter overrides the
+\fBMD5_CRYPT_ENAB\fR
+variable\&.
+.RE
+.PP
+\fBMD5_CRYPT_ENAB\fR (boolean)
+.RS 4
+Indicate if passwords must be encrypted using the MD5\-based algorithm\&. If set to
+\fIyes\fR, new passwords will be encrypted using the MD5\-based algorithm compatible with the one used by recent releases of FreeBSD\&. It supports passwords of unlimited length and longer salt strings\&. Set to
+\fIno\fR
+if you need to copy encrypted passwords to other systems which don\'t understand the new algorithm\&. Default is
+\fIno\fR\&.
+.sp
+This variable is superceded by the
+\fBENCRYPT_METHOD\fR
+variable or by any command line option used to configure the encryption algorithm\&.
+.sp
+This variable is deprecated\&. You should use
+\fBENCRYPT_METHOD\fR\&.
+.RE
+.PP
+\fBOBSCURE_CHECKS_ENAB\fR (boolean)
+.RS 4
+Enable additional checks upon password changes\&.
+.RE
+.PP
+\fBPASS_ALWAYS_WARN\fR (boolean)
+.RS 4
+Warn about weak passwords (but still allow them) if you are root\&.
+.RE
+.PP
+\fBPASS_CHANGE_TRIES\fR (number)
+.RS 4
+Maximum number of attempts to change password if rejected (too easy)\&.
+.RE
+.PP
+\fBPASS_MAX_LEN\fR (number), \fBPASS_MIN_LEN\fR (number)
+.RS 4
+Number of significant characters in the password for crypt()\&.
+\fBPASS_MAX_LEN\fR
+is 8 by default\&. Don\'t change unless your crypt() is better\&. This is ignored if
+\fBMD5_CRYPT_ENAB\fR
+set to
+\fIyes\fR\&.
+.RE
+.PP
+\fBSHA_CRYPT_MIN_ROUNDS\fR (number), \fBSHA_CRYPT_MAX_ROUNDS\fR (number)
+.RS 4
+When
+\fBENCRYPT_METHOD\fR
+is set to
+\fISHA256\fR
+or
+\fISHA512\fR, this defines the number of SHA rounds used by the encryption algorithm by default (when the number of rounds is not specified on the command line)\&.
+.sp
+With a lot of rounds, it is more difficult to brute forcing the password\&. But note also that more CPU resources will be needed to authenticate users\&.
+.sp
+If not specified, the libc will choose the default number of rounds (5000)\&.
+.sp
+The values must be inside the 1000\-999999999 range\&.
+.sp
+If only one of the
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+or
+\fBSHA_CRYPT_MAX_ROUNDS\fR
+values is set, then this value will be used\&.
+.sp
+If
+\fBSHA_CRYPT_MIN_ROUNDS\fR
+>
+\fBSHA_CRYPT_MAX_ROUNDS\fR, the highest value will be used\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+Kommandot
+\fBpasswd\fR
+avslutas med f\(:oljande v\(:arden:
+.PP
+\fI0\fR
+.RS 4
+lyckad
+.RE
+.PP
+\fI1\fR
+.RS 4
+\(oatkomst nekad
+.RE
+.PP
+\fI2\fR
+.RS 4
+ogiltig kombination av flaggor
+.RE
+.PP
+\fI3\fR
+.RS 4
+ov\(:antat fel, ingenting har genomf\(:orts
+.RE
+.PP
+\fI4\fR
+.RS 4
+ov\(:antat fel, filen
+passwd
+saknas
+.RE
+.PP
+\fI5\fR
+.RS 4
+Filen
+passwd
+\(:ar upptagen, f\(:ors\(:ok igen
+.RE
+.PP
+\fI6\fR
+.RS 4
+ogiltigt argument till flagga
+.RE
+.SH "SE OCKS\(oA"
+.PP
+
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBlogin.defs\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/passwd.5 b/man/sv/passwd.5
new file mode 100644 (file)
index 0000000..be180bc
--- /dev/null
@@ -0,0 +1,171 @@
+'\" t
+.\"     Title: passwd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Filformat och konversioner
+.\"    Source: Filformat och konversioner
+.\"  Language: Swedish
+.\"
+.TH "PASSWD" "5" "24-07-2009" "Filformat och konversioner" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+passwd \- l\(:osenordsfilen
+.SH "BESKRIVNING"
+.PP
+/etc/passwd
+inneh\(oaller en rad f\(:or varje anv\(:andarkonto men sju f\(:alt separerade med kolontecken (\(rq:\(rq)\&. Dessa f\(:alt \(:ar:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+inloggningsnamn
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+valfritt krypterat l\(:osenord
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numeriskt anv\(:andar\-id
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+numeriskt grupp\-id
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+anv\(:andarnamn eller kommentarsf\(:alt
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+anv\(:andarens hemkatalog
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+optional user command interpreter
+.RE
+.PP
+The encrypted password field may be blank, in which case no password is required to authenticate as the specified login name\&. However, some applications which read the
+/etc/passwd
+file may decide not to permit
+\fIany\fR
+access at all if the
+\fIpassword\fR
+field is blank\&. If the
+\fIpassword\fR
+field is a lower\-case
+\(rqx\(rq, then the encrypted password is actually stored in the
+\fBshadow\fR(5)
+file instead; there
+\fImust\fR
+be a corresponding line in the
+/etc/shadow
+file, or else the user account is invalid\&. If the
+\fIpassword\fR
+field is any other string, then it will be treated as an encrypted password, as specified by
+\fBcrypt\fR(3)\&.
+.PP
+The comment field is used by various system utilities, such as
+\fBfinger\fR(1)\&.
+.PP
+The home directory field provides the name of the initial working directory\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$HOME\fR
+environmental variable\&.
+.PP
+The command interpreter field provides the name of the user\'s command language interpreter, or the name of the initial program to execute\&. The
+\fBlogin\fR
+program uses this information to set the value of the
+\fB$SHELL\fR
+environmental variable\&. If this field is empty, it defaults to the value
+/bin/sh\&.
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+optional encrypted password file
+.RE
+.PP
+/etc/passwd\-
+.RS 4
+Backup file for /etc/passwd\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+
+\fBcrypt\fR(3),
+\fBgetent\fR(1),
+\fBgetpwnam\fR(3),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBshadow\fR(5),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/sv/porttime.5 b/man/sv/porttime.5
new file mode 100644 (file)
index 0000000..a0b7116
--- /dev/null
@@ -0,0 +1,87 @@
+'\" t
+.\"     Title: porttime
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Filformat och konversioner
+.\"    Source: Filformat och konversioner
+.\"  Language: Swedish
+.\"
+.TH "PORTTIME" "5" "24-07-2009" "Filformat och konversioner" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+porttime \- port access time file
+.SH "BESKRIVNING"
+.PP
+\fIporttime\fR
+inneh\(oaller en lista av tty\-enheter, anv\(:andarnamn och till\(oatna inloggningstider\&.
+.PP
+Each entry consists of three colon separated fields\&. The first field is a comma separated list of tty devices, or an asterisk to indicate that all tty devices are matched by this entry\&. The second field is a comma separated list of user names, or an asterisk to indicated that all user names are matched by this entry\&. The third field is a comma separated list of permitted access times\&.
+.PP
+Each access time entry consists of zero or more days of the week, abbreviated
+\fISu\fR,
+\fIMo\fR,
+\fITu\fR,
+\fIWe\fR,
+\fITh\fR,
+\fIFr\fR, and
+\fISa\fR, followed by a pair of times separated by a hyphen\&. The abbreviation
+\fIWk\fR
+may be used to represent Monday thru Friday, and
+\fIAl\fR
+may be used to indicate every day\&. If no days are given,
+\fIAl\fR
+is assumed\&.
+.SH "EXEMPEL"
+.PP
+F\(:oljande post till\(oater \(oatkomst f\(:or anv\(:andaren
+\fBjfh\fR
+p\(oa varje port under veckodagar fr\(oan 09\&.00 till 17\&.00\&.
+.PP
+*:jfh:Wk0900\-1700
+.PP
+De f\(:oljande posterna till\(oater \(oatkomst endast till anv\(:andarna
+\fIroot\fR
+och
+\fIoper\fR
+p\(oa
+/dev/console
+n\(:ar som helst\&. Detta illustrerar hur filen
+/etc/porttime
+\(:ar en ordnad lista f\(:or \(oatkomsttider\&. Alla andra anv\(:andare skulle matcha den andra poster, vilken inte till\(oater n\(oagon \(oatkomst oavsett tid\&.
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      console:root,oper:Al0000\-2400
+      console:*:
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+F\(:olajnde post till\(oater \(oatkomst f\(:or anv\(:andaren
+\fIgames\fR
+p\(oa valfri port men inte under arbetstid\&.
+.PP
+*:games:Wk1700\-0900,SaSu0000\-2400
+.SH "FILER"
+.PP
+/etc/porttime
+.RS 4
+Fil som inneh\(oaller port\(oatkomst
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBlogin\fR(1)\&.
diff --git a/man/sv/pwck.8 b/man/sv/pwck.8
new file mode 100644 (file)
index 0000000..7cea94c
--- /dev/null
@@ -0,0 +1,298 @@
+'\" t
+.\"     Title: pwck
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "PWCK" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+pwck \- validera integriteten f\(:or l\(:osenordsfiler
+.SH "SYNOPSIS"
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [\-q] [\-s] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.HP \w'\fBpwck\fR\ 'u
+\fBpwck\fR [\-q] [\-r] [\fIpasswd\fR\ [\ \fIshadow\fR\ ]]
+.SH "BESKRIVNING"
+.PP
+The
+\fBpwck\fR
+command verifies the integrity of the users and authentication information\&. It checks that all entries in
+/etc/passwd
+and
+/etc/shadow
+have the proper format and contain valid data\&. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors\&.
+.PP
+Kontroller g\(:ors f\(:or att validera att varje post har:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+korrekt antal f\(:alt
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+a unique and valid user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+en giltig identifierare f\(:or anv\(:andare och grupp
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+en giltig prim\(:ar grupp
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+en giltig hemkatalog
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+ett giltigt inloggningsskal
+.RE
+.PP
+
+shadow
+checks are enabled when a second file parameter is specified or when
+/etc/shadow
+exists on the system\&.
+.PP
+These checks are the following:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+every passwd entry has a matching shadow entry, and every shadow entry has a matching passwd entry
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+passwords are specified in the shadowed file
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries have the correct number of fields
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+shadow entries are unique in shadow
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+the last password changes are not in the future
+.RE
+.PP
+The checks for correct number of fields and unique user name are fatal\&. If the entry has the wrong number of fields, the user will be prompted to delete the entire line\&. If the user does not answer affirmatively, all further checks are bypassed\&. An entry with a duplicated user name is prompted for deletion, but the remaining checks will still be made\&. All other errors are warning and the user is encouraged to run the
+\fBusermod\fR
+command to correct the error\&.
+.PP
+The commands which operate on the
+/etc/passwd
+file are not able to alter corrupted or duplicated entries\&.
+\fBpwck\fR
+should be used in those circumstances to remove the offending entry\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBpwck\fR
+\(:ar:
+.PP
+\fB\-q\fR
+.RS 4
+Report errors only\&. The warnings which do not require any action from the user won\'t be displayed\&.
+.RE
+.PP
+\fB\-r\fR
+.RS 4
+Starta kommandot
+\fBpwck\fR
+i skrivskyddat l\(:age\&.
+.RE
+.PP
+\fB\-s\fR
+.RS 4
+Sorterar poster i
+/etc/passwd
+och
+/etc/shadow
+efter UID\&.
+.RE
+.PP
+By default,
+\fBpwck\fR
+operates on the files
+/etc/passwd
+and
+/etc/shadow\&. The user may select alternate files with the
+\fIpasswd\fR
+and
+\fIshadow\fR
+parameters\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+Kommandot
+\fBpwck\fR
+avslutas med f\(:oljande v\(:arden:
+.PP
+\fI0\fR
+.RS 4
+lyckad
+.RE
+.PP
+\fI1\fR
+.RS 4
+ogiltig kommandosyntax
+.RE
+.PP
+\fI2\fR
+.RS 4
+en eller flera felaktiga l\(:osenordsposter
+.RE
+.PP
+\fI3\fR
+.RS 4
+kan inte \(:oppna l\(:osenordsfiler
+.RE
+.PP
+\fI4\fR
+.RS 4
+kan inte l\(oasa l\(:osenordsfiler
+.RE
+.PP
+\fI5\fR
+.RS 4
+kan inte uppdatera l\(:osenordsfiler
+.RE
+.PP
+\fI6\fR
+.RS 4
+can\'t sort password files
+.RE
+.SH "SE OCKS\(oA"
+.PP
+
+\fBgroup\fR(5),
+\fBgrpck\fR(8),
+\fBpasswd\fR(5),
+\fBshadow\fR(5),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/pwconv.8 b/man/sv/pwconv.8
new file mode 100644 (file)
index 0000000..eca223c
--- /dev/null
@@ -0,0 +1,163 @@
+'\" t
+.\"     Title: pwconv
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "PWCONV" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+pwconv, pwunconv, grpconv, grpunconv \- konvertera till och fr\(oan skuggl\(:osenord och grupper
+.SH "SYNOPSIS"
+.HP \w'\fBpwconv\fR\ 'u
+\fBpwconv\fR
+.HP \w'\fBpwunconv\fR\ 'u
+\fBpwunconv\fR
+.HP \w'\fBgrpconv\fR\ 'u
+\fBgrpconv\fR
+.HP \w'\fBgrpunconv\fR\ 'u
+\fBgrpunconv\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBpwconv\fR
+command creates
+\fIshadow\fR
+from
+\fIpasswd\fR
+and an optionally existing
+\fIshadow\fR\&.
+.PP
+The
+\fBpwunconv\fR
+command creates
+\fIpasswd\fR
+from
+\fIpasswd\fR
+and
+\fIshadow\fR
+and then removes
+\fIshadow\fR\&.
+.PP
+The
+\fBgrpconv\fR
+command creates
+\fIgshadow\fR
+from
+\fIgroup\fR
+and an optionally existing
+\fIgshadow\fR\&.
+.PP
+The
+\fBgrpunconv\fR
+command creates
+\fIgroup\fR
+from
+\fIgroup\fR
+and
+\fIgshadow\fR
+and then removes
+\fIgshadow\fR\&.
+.PP
+These four programs all operate on the normal and shadow password and group files:
+/etc/passwd,
+/etc/group,
+/etc/shadow, and
+/etc/gshadow\&.
+.PP
+Each program acquires the necessary locks before conversion\&.
+\fBpwconv\fR
+and
+\fBgrpconv\fR
+are similar\&. First, entries in the shadowed file which don\'t exist in the main file are removed\&. Then, shadowed entries which don\'t have `x\' as the password in the main file are updated\&. Any missing shadowed entries are added\&. Finally, passwords in the main file are replaced with `x\'\&. These programs can be used for initial conversion as well to update the shadowed file if the main file is edited by hand\&.
+.PP
+
+\fBpwconv\fR
+will use the values of
+\fIPASS_MIN_DAYS\fR,
+\fIPASS_MAX_DAYS\fR, and
+\fIPASS_WARN_AGE\fR
+from
+/etc/login\&.defs
+when adding new entries to
+/etc/shadow\&.
+.PP
+Likewise
+\fBpwunconv\fR
+and
+\fBgrpunconv\fR
+are similar\&. Passwords in the main file are updated from the shadowed file\&. Entries which exist in the main file but not in the shadowed file are left alone\&. Finally, the shadowed file is removed\&. Some password aging information is lost by
+\fBpwunconv\fR\&. It will convert what it can\&.
+.SH "FEL"
+.PP
+Errors in the password or group files (such as invalid or duplicate entries) may cause these programs to loop forever or fail in other strange ways\&. Please run
+\fBpwck\fR
+and
+\fBgrpck\fR
+to correct any such errors before converting to or from shadow passwords or groups\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variable in
+/etc/login\&.defs
+changes the behavior of
+\fBgrpconv\fR
+and
+\fBgrpunconv\fR:
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of
+\fBpwconv\fR:
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.SH "FILER"
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBgrpck\fR(8),
+\fBlogin.defs\fR(5),
+\fBpwck\fR(8)\&.
diff --git a/man/sv/pwunconv.8 b/man/sv/pwunconv.8
new file mode 100644 (file)
index 0000000..6eed9e8
--- /dev/null
@@ -0,0 +1 @@
+.so man8/pwconv.8
diff --git a/man/sv/sg.1 b/man/sv/sg.1
new file mode 100644 (file)
index 0000000..cbe70eb
--- /dev/null
@@ -0,0 +1,89 @@
+'\" t
+.\"     Title: sg
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Anv\(:andarkommandon
+.\"    Source: Anv\(:andarkommandon
+.\"  Language: Swedish
+.\"
+.TH "SG" "1" "24-07-2009" "Anv\(:andarkommandon" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+sg \- k\(:or kommando med annat grupp\-id
+.SH "SYNOPSIS"
+.HP \w'\fBsg\fR\ 'u
+\fBsg\fR [\-] [grupp\ [\-c]\ kommando]
+.SH "BESKRIVNING"
+.PP
+The
+\fBsg\fR
+command works similar to
+\fBnewgrp\fR
+but accepts a command\&. The command will be executed with the
+/bin/sh
+shell\&. With most shells you may run
+\fBsg\fR
+from, you need to enclose multi\-word commands in quotes\&. Another difference between
+\fBnewgrp\fR
+and
+\fBsg\fR
+is that some shells treat
+\fBnewgrp\fR
+specially, replacing themselves with a new instance of a shell that
+\fBnewgrp\fR
+creates\&. This doesn\'t happen with
+\fBsg\fR, so upon exit from a
+\fBsg\fR
+command you are returned to your previous group ID\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBSYSLOG_SG_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsg\fR
+activity\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+
+\fBid\fR(1),
+\fBlogin\fR(1),
+\fBnewgrp\fR(1),
+\fBsu\fR(1),
+\fBgpasswd\fR(1),
+\fBgroup\fR(5), \fBgshadow\fR(5)\&.
diff --git a/man/sv/shadow.3 b/man/sv/shadow.3
new file mode 100644 (file)
index 0000000..73934dc
--- /dev/null
@@ -0,0 +1,249 @@
+'\" t
+.\"     Title: shadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Biblioteksanrop
+.\"    Source: Biblioteksanrop
+.\"  Language: Swedish
+.\"
+.TH "SHADOW" "3" "24-07-2009" "Biblioteksanrop" "Biblioteksanrop"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+shadow, getspnam \- encrypted password file routines
+.SH "SYNTAX"
+.PP
+
+\fI#include <shadow\&.h>\fR
+.PP
+
+\fIstruct spwd *getspent();\fR
+.PP
+
+\fIstruct spwd *getspnam(char\fR
+\fI*name\fR\fI);\fR
+.PP
+
+\fIvoid setspent();\fR
+.PP
+
+\fIvoid endspent();\fR
+.PP
+
+\fIstruct spwd *fgetspent(FILE\fR
+\fI*fp\fR\fI);\fR
+.PP
+
+\fIstruct spwd *sgetspent(char\fR
+\fI*cp\fR\fI);\fR
+.PP
+
+\fIint putspent(struct spwd\fR
+\fI*p,\fR
+\fIFIL\fR
+\fI*fp\fR\fI);\fR
+.PP
+
+\fIint lckpwdf();\fR
+.PP
+
+\fIint ulckpwdf();\fR
+.SH "BESKRIVNING"
+.PP
+
+\fIshadow\fR
+manipulates the contents of the shadow password file,
+/etc/shadow\&. The structure in the
+\fI#include\fR
+file is:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+struct spwd {
+      char             *sp_namp; /* user login name */
+      char             *sp_pwdp; /* encrypted password */
+      long int         sp_lstchg; /* last password change */
+      long int         sp_min; /* days until change allowed\&. */
+      long int         sp_max; /* days before change required */
+      long int         sp_warn; /* days warning for expiration */
+      long int         sp_inact; /* days before account inactive */
+      long int         sp_expire; /* date when account expires */
+      unsigned long int        sp_flag; /* reserved for future use */
+}
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Betydelsen av varje f\(:alt \(:ar:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_namp \- pointer to null\-terminated user name
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_pwdp \- pointer to null\-terminated password
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_lstchg \- days since Jan 1, 1970 password was last changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_min \- days before which password may not be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_max \- days after which password must be changed
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_warn \- days before password is to expire that user is warned of pending password expiration
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_inact \- days after password expires that account is considered inactive and disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_expire \- days since Jan 1, 1970 when account will be disabled
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+sp_flag \- reserverat f\(:or framtida anv\(:andning
+.RE
+.SH "BESKRIVNING"
+.PP
+
+\fIgetspent\fR,
+\fIgetspname\fR,
+\fIfgetspent\fR, and
+\fIsgetspent\fR
+each return a pointer to a
+\fIstruct spwd\fR\&.
+\fIgetspent\fR
+returns the next entry from the file, and
+\fIfgetspent\fR
+returns the next entry from the given stream, which is assumed to be a file of the proper format\&.
+\fIsgetspent\fR
+returns a pointer to a
+\fIstruct spwd\fR
+using the provided string as input\&.
+\fIgetspnam\fR
+searches from the current position in the file for an entry matching
+\fIname\fR\&.
+.PP
+
+\fIsetspent\fR
+and
+\fIendspent\fR
+may be used to begin and end, respectively, access to the shadow password file\&.
+.PP
+The
+\fIlckpwdf\fR
+and
+\fIulckpwdf\fR
+routines should be used to insure exclusive access to the
+/etc/shadow
+file\&.
+\fIlckpwdf\fR
+attempts to acquire a lock using
+\fIpw_lock\fR
+for up to 15 seconds\&. It continues by attempting to acquire a second lock using
+\fIspw_lock\fR
+for the remainder of the initial 15 seconds\&. Should either attempt fail after a total of 15 seconds,
+\fIlckpwdf\fR
+returns \-1\&. When both locks are acquired 0 is returned\&.
+.SH "DIAGNOSTIK"
+.PP
+Routines return NULL if no more entries are available or if an error occurs during processing\&. Routines which have
+\fIint\fR
+as the return value return 0 for success and \-1 for failure\&.
+.SH "T\(:ANK P\(oA"
+.PP
+These routines may only be used by the superuser as access to the shadow password file is restricted\&.
+.SH "FILER"
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBgetpwent\fR(3),
+\fBshadow\fR(5)\&.
diff --git a/man/sv/shadow.5 b/man/sv/shadow.5
new file mode 100644 (file)
index 0000000..2a61446
--- /dev/null
@@ -0,0 +1,141 @@
+'\" t
+.\"     Title: shadow
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Filformat och konversioner
+.\"    Source: Filformat och konversioner
+.\"  Language: Swedish
+.\"
+.TH "SHADOW" "5" "24-07-2009" "Filformat och konversioner" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+shadow \- shadowed password file
+.SH "BESKRIVNING"
+.PP
+
+shadow
+is a file which contains the password information for the system\'s accounts and optional aging information\&.
+.PP
+Denna fil f\(oar inte vara l\(:asbar av vanliga anv\(:andare om l\(:osenordss\(:akerheten ska uppr\(:atth\(oallas\&.
+.PP
+Each line of this file contains 9 fields, separated by colons (\(rq:\(rq), in the following order:
+.PP
+\fBinloggningsnamn\fR
+.RS 4
+It must be a valid account name, which exist on the system\&.
+.RE
+.PP
+\fBkrypterat l\(:osenord\fR
+.RS 4
+Referera till
+\fBcrypt\fR(3)
+f\(:or detaljer om hur denna str\(:ang tolkas\&.
+.sp
+If the password field contains some string that is not a valid result of
+\fBcrypt\fR(3), for instance ! or *, the user will not be able to use a unix password to log in (but the user may log in the system by other means)\&.
+.sp
+This field may be empty, in which case no passwords are required to authenticate as the specified login name\&. However, some applications which read the
+/etc/shadow
+file may decide not to permit any access at all if the password field is empty\&.
+.sp
+A password field which starts with a exclamation mark means that the password is locked\&. The remaining characters on the line represent the password field before the password was locked\&.
+.RE
+.PP
+\fBdate of last password change\fR
+.RS 4
+The date of the last password change, expressed as the number of days since Jan 1, 1970\&.
+.sp
+The value 0 has a special meaning, which is that the user should change her pasword the next time she will log in the system\&.
+.sp
+An empty field means that password aging features are disabled\&.
+.RE
+.PP
+\fBminimum password age\fR
+.RS 4
+The minimum password age is the number of days the user will have to wait before she will be allowed to change her password again\&.
+.sp
+An empty field and value 0 mean that there are no minimum password age\&.
+.RE
+.PP
+\fBmaximum password age\fR
+.RS 4
+The maximum password age is the number of days after which the user will have to change her password\&.
+.sp
+After this number of days is elapsed, the password may still be valid\&. The user should be asked to change her password the next time she will log in\&.
+.sp
+An empty field means that there are no maximum password age, no password warning period, and no password inactivity period (see below)\&.
+.sp
+If the maximum password age is lower than the minimum password age, the user cannot change her password\&.
+.RE
+.PP
+\fBpassword warning period\fR
+.RS 4
+The number of days before a password is going to expire (see the maximum password age above) during which the user should be warned\&.
+.sp
+An empty field and value 0 mean that there are no password warning period\&.
+.RE
+.PP
+\fBpassword inactivity period\fR
+.RS 4
+The number of days after a password has expired (see the maximum password age above) during which the password should still be accepted (and the user should update her password during the next login)\&.
+.sp
+After expiration of the password and this expiration period is elapsed, no login is possible using the current user\'s password\&. The user should contact her administrator\&.
+.sp
+An empty field means that there are no enforcement of an inactivity period\&.
+.RE
+.PP
+\fBaccount expiration date\fR
+.RS 4
+The date of expiration of the account, expressed as the number of days since Jan 1, 1970\&.
+.sp
+Note that an account expiration differs from a password expiration\&. In case of an acount expiration, the user shall not be allowed to login\&. In case of a password expiration, the user is not allowed to login using her password\&.
+.sp
+An empty field means that the account will never expire\&.
+.sp
+The value 0 should not be used as it is interpreted as either an account with no expiration, or as an expiration on Jan 1, 1970\&.
+.RE
+.PP
+\fBreserved field\fR
+.RS 4
+This field is reserved for future use\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow\-
+.RS 4
+Backup file for /etc/shadow\&.
+.sp
+Note that this file is used by the tools of the shadow toolsuite, but not by all user and password management tools\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBpasswd\fR(5),
+\fBpwck\fR(8),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsu\fR(1),
+\fBsulogin\fR(8)\&.
diff --git a/man/sv/su.1 b/man/sv/su.1
new file mode 100644 (file)
index 0000000..33262fe
--- /dev/null
@@ -0,0 +1,397 @@
+'\" t
+.\"     Title: su
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Anv\(:andarkommandon
+.\"    Source: Anv\(:andarkommandon
+.\"  Language: Swedish
+.\"
+.TH "SU" "1" "24-07-2009" "Anv\(:andarkommandon" "Anv\(:andarkommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+su \- change user ID or become superuser
+.SH "SYNOPSIS"
+.HP \w'\fBsu\fR\ 'u
+\fBsu\fR [\fIflaggor\fR] [\fIanv\(:andarnamn\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBsu\fR
+command is used to become another user during a login session\&. Invoked without a
+\fBusername\fR,
+\fBsu\fR
+defaults to becoming the superuser\&. The optional argument
+\fB\-\fR
+may be used to provide an environment similar to what the user would expect had the user logged in directly\&.
+.PP
+Additional arguments may be provided after the username, in which case they are supplied to the user\'s login shell\&. In particular, an argument of
+\fB\-c\fR
+will cause the next argument to be treated as a command by most command interpreters\&. The command will be executed by the shell specified in
+/etc/passwd
+for the target user\&.
+.PP
+Du kan anv\(:anda argumentet
+\fB\-\-\fR
+f\(:or att separera flaggorna till
+\fBsu\fR
+fr\(oan de argument som skickas till skalet\&.
+.PP
+Anv\(:andaren kommer att fr\(oagas efter ett l\(:osenord, om det \(:ar l\(:ampligt\&. Ogiltiga l\(:osenord kommer att ge ett felmeddelande\&. Alla f\(:ors\(:ok, b\(oade giltiga och ogiltiga, loggas f\(:or att detektera missk\(:otsel av systemet\&.
+.PP
+The current environment is passed to the new shell\&. The value of
+\fB$PATH\fR
+is reset to
+/bin:/usr/bin
+for normal users, or
+/sbin:/bin:/usr/sbin:/usr/bin
+for the superuser\&. This may be changed with the
+\fBENV_PATH\fR
+and
+\fBENV_SUPATH\fR
+definitions in
+/etc/login\&.defs\&.
+.PP
+A subsystem login is indicated by the presence of a "*" as the first character of the login shell\&. The given home directory will be used as the root of a new file system which the user is actually logged into\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBsu\fR
+\(:ar:
+.PP
+\fB\-c\fR, \fB\-\-command\fR \fICOMMAND\fR
+.RS 4
+Ange ett kommando som ska startas av skalet med
+\fB\-c\fR\&.
+.RE
+.PP
+\fB\-\fR, \fB\-l\fR, \fB\-\-login\fR
+.RS 4
+Tillhandah\(oall en milj\(:o som liknar den som anv\(:andaren skulle f\(:orv\(:anta sig om anv\(:andaren loggat in direkt\&.
+.sp
+N\(:ar
+\fB\-\fR
+anv\(:ands m\(oaste den anges som den sista flaggan f\(:or
+\fBsu\fR\&. De andra formerna (\fB\-l\fR
+och
+\fB\-\-login\fR) har inte denna restriktion\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fISKAL\fR
+.RS 4
+Skalet som ska startas\&.
+.sp
+The invoked shell is chosen from (highest priority first):
+.PP
+.RS 4
+Skalet angivet med \-\-shell\&.
+.RE
+.PP
+.RS 4
+Om
+\fB\-\-preserve\-environment\fR
+anv\(:ands, anges skalet med milj\(:ovariabeln
+\fB$SHELL\fR\&.
+.RE
+.PP
+.RS 4
+The shell indicated in the
+/etc/passwd
+entry for the target user\&.
+.RE
+.PP
+.RS 4
+/bin/sh
+om ett skal inte kunde hittas med n\(oagon ovanst\(oaende metod\&.
+.RE
+.sp
+If the target user has a restricted shell (i\&.e\&. the shell field of this user\'s entry in
+/etc/passwd
+is not listed in
+/etc/shell), then the
+\fB\-\-shell\fR
+option or the
+\fB$SHELL\fR
+environment variable won\'t be taken into account, unless
+\fBsu\fR
+is called by root\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-p\fR, \fB\-\-preserve\-environment\fR
+.RS 4
+Preserve the current environment, except for:
+.PP
+\fB$PATH\fR
+.RS 4
+reset according to the
+/etc/login\&.defs
+options
+\fBENV_PATH\fR
+or
+\fBENV_SUPATH\fR
+(see below);
+.RE
+.PP
+\fB$IFS\fR
+.RS 4
+reset to
+\(rq<space><tab><newline>\(rq, if it was set\&.
+.RE
+.sp
+Om m\(oalanv\(:andaren har ett begr\(:ansat skal har denna flagga ingen effekt (s\(oavida inte
+\fBsu\fR
+har startats av root)\&.
+.sp
+Note that the default behavior for the environment is the following:
+.PP
+.RS 4
+The
+\fB$HOME\fR,
+\fB$SHELL\fR,
+\fB$USER\fR,
+\fB$LOGNAME\fR,
+\fB$PATH\fR, and
+\fB$IFS\fR
+environment variables are reset\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is not used, the environment is copied, except for the variables above\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TERM\fR,
+\fB$COLORTERM\fR,
+\fB$DISPLAY\fR, and
+\fB$XAUTHORITY\fR
+environment variables are copied if they were set\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, the
+\fB$TZ\fR,
+\fB$HZ\fR, and
+\fB$MAIL\fR
+environment variables are set according to the
+/etc/login\&.defs
+options
+\fBENV_TZ\fR,
+\fBENV_HZ\fR,
+\fBMAIL_DIR\fR, and
+\fBMAIL_FILE\fR
+(see below)\&.
+.RE
+.PP
+.RS 4
+If
+\fB\-\-login\fR
+is used, other environment variables might be set by the
+\fBENVIRON_FILE\fR
+file (see below)\&.
+.RE
+.sp
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+Denna version av
+\fBsu\fR
+har m\(oanga kompileringsflaggor, kanske bara n\(oagra anv\(:ands p\(oa specifika system\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCONSOLE\fR (string)
+.RS 4
+If defined, either full pathname of a file containing device names (one per line) or a ":" delimited list of device names\&. Root logins will be allowed only upon these devices\&.
+.sp
+If not defined, root will be allowed on any device\&.
+.sp
+The device should be specified without the /dev/ prefix\&.
+.RE
+.PP
+\fBCONSOLE_GROUPS\fR (string)
+.RS 4
+List of groups to add to the user\'s supplementary groups set when logging in on the console (as determined by the CONSOLE setting)\&. Default is none\&.
+
+Use with caution \- it is possible for users to gain permanent access to these groups, even when not logged in on the console\&.
+.RE
+.PP
+\fBDEFAULT_HOME\fR (boolean)
+.RS 4
+Indicate if login is allowed if we can\'t cd to the home directory\&. Default in no\&.
+.sp
+If set to
+\fIyes\fR, the user will login in the root (/) directory if it is not possible to cd to her home directory\&.
+.RE
+.PP
+\fBENV_HZ\fR (string)
+.RS 4
+If set, it will be used to define the HZ environment variable when a user login\&. The value must be preceded by
+\fIHZ=\fR\&. A common value on Linux is
+\fIHZ=100\fR\&.
+.RE
+.PP
+\fBENVIRON_FILE\fR (string)
+.RS 4
+If this file exists and is readable, login environment will be read from it\&. Every line should be in the form name=value\&.
+.sp
+Lines starting with a # are treated as comment lines and ignored\&.
+.RE
+.PP
+\fBENV_PATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when a regular user login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/bin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_SUPATH\fR (string)
+.RS 4
+If set, it will be used to define the PATH environment variable when the superuser login\&. The value can be preceded by
+\fIPATH=\fR, or a colon separated list of paths (for example
+\fI/sbin:/bin:/usr/sbin:/usr/bin\fR)\&. The default value is
+\fIPATH=/bin:/usr/bin\fR\&.
+.RE
+.PP
+\fBENV_TZ\fR (string)
+.RS 4
+If set, it will be used to define the TZ environment variable when a user login\&. The value can be the name of a timezone preceded by
+\fITZ=\fR
+(for example
+\fITZ=CST6CDT\fR), or the full path to the file containing the timezone specification (for example
+/etc/tzname)\&.
+.sp
+If a full path is specified but the file does not exist or cannot be read, the default is to use
+\fITZ=CST6CDT\fR\&.
+.RE
+.PP
+\fBLOGIN_STRING\fR (string)
+.RS 4
+The string used for prompting a password\&. The default is to use "Password: ", or a translation of that string\&. If you set this variable, the prompt will no be translated\&.
+.sp
+If the string contains
+\fI%s\fR, this will be replaced by the user\'s name\&.
+.RE
+.PP
+\fBMAIL_CHECK_ENAB\fR (boolean)
+.RS 4
+Enable checking and display of mailbox status upon login\&.
+.sp
+You should disable it if the shell startup files already check for mail ("mailx \-e" or equivalent)\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBQUOTAS_ENAB\fR (boolean)
+.RS 4
+Enable setting of ulimit, umask, and niceness from passwd gecos field\&.
+.RE
+.PP
+\fBSULOG_FILE\fR (string)
+.RS 4
+If defined, all su activity is logged to this file\&.
+.RE
+.PP
+\fBSU_NAME\fR (string)
+.RS 4
+If defined, the command name to display when running "su \-"\&. For example, if this is defined as "su" then a "ps" will display the command is "\-su"\&. If not defined, then "ps" would display the name of the shell actually being run, e\&.g\&. something like "\-sh"\&.
+.RE
+.PP
+\fBSU_WHEEL_ONLY\fR (boolean)
+.RS 4
+If
+\fIyes\fR, the user must be listed as a member of the first gid 0 group in
+/etc/group
+(called
+\fIroot\fR
+on most Linux systems) to be able to
+\fBsu\fR
+to uid 0 accounts\&. If the group doesn\'t exist or is empty, no one will be able to
+\fBsu\fR
+to uid 0\&.
+.RE
+.PP
+\fBSYSLOG_SU_ENAB\fR (boolean)
+.RS 4
+Enable "syslog" logging of
+\fBsu\fR
+activity \- in addition to sulog file logging\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBlogin\fR(1),
+\fBlogin.defs\fR(5),
+\fBsg\fR(1),
+\fBsh\fR(1)\&.
diff --git a/man/sv/suauth.5 b/man/sv/suauth.5
new file mode 100644 (file)
index 0000000..896199d
--- /dev/null
@@ -0,0 +1,137 @@
+'\" t
+.\"     Title: suauth
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Filformat och konversioner
+.\"    Source: Filformat och konversioner
+.\"  Language: Swedish
+.\"
+.TH "SUAUTH" "5" "24-07-2009" "Filformat och konversioner" "Filformat och konversioner"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+suauth \- detaljerad kontrollfil f\(:or su
+.SH "SYNOPSIS"
+.HP \w'\fB/etc/suauth\fR\ 'u
+\fB/etc/suauth\fR
+.SH "BESKRIVNING"
+.PP
+The file
+/etc/suauth
+is referenced whenever the su command is called\&. It can change the behaviour of the su command, based upon:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      1) the user su is targetting
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+2) the user executing the su command (or any groups he might be a member of)
+.PP
+Filen \(:ar i f\(:oljande format, med de rader som inleds med # behandlas som kommentarsrader och ignoreras;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      till\-id:fr\(oan\-id:\(oATG\(:ARD
+    
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+D\(:ar till\-id \(:ar antingen ordet
+\fIALL\fR, en lista med anv\(:andarnamn separerade med "," eller orden
+\fIALL EXCEPT\fR
+f\(:oljt av en lista med anv\(:andarnamn separerade med ","
+.PP
+fr\(oan\-id \(:ar formaterad p\(oa samma s\(:att som till\-id f\(:orutom att det extra ordet
+\fIGROUP\fR
+k\(:anns igen\&.
+\fIALL EXCEPT GROUP\fR
+\(:ar helt giltigt ocks\(oa\&. Efterf\(:oljande till
+\fIGROUP\fR
+kan vara ett eller flera gruppnamn, separerade med ","\&. Det \(:ar inte tillr\(:ackligt att ha prim\(:art grupp\-id f\(:or den relevanta gruppen, en post i
+\fB/etc/group\fR(5)
+\(:ar n\(:odv\(:andigt\&.
+.PP
+\(oAtg\(:arden kan endast vara en av f\(:oljande f\(:or n\(:arvarande st\(:odda flaggor\&.
+.PP
+\fIDENY\fR
+.RS 4
+F\(:ors\(:oket att anv\(:anda su stoppades f\(:ore ett l\(:osenord har efterfr\(oagats\&.
+.RE
+.PP
+\fINOPASS\fR
+.RS 4
+F\(:ors\(:oket att anv\(:anda su lyckades helt automatiskt; inget l\(:osenord har efterfr\(oagats\&.
+.RE
+.PP
+\fIOWNPASS\fR
+.RS 4
+F\(:or att su\-kommandot ska lyckas m\(oaste anv\(:andaren mata in sitt egna l\(:osenord\&. De blir fr\(oagade att g\(:ora detta\&.
+.RE
+.PP
+Note there are three separate fields delimited by a colon\&. No whitespace must surround this colon\&. Also note that the file is examined sequentially line by line, and the first applicable rule is used without examining the file further\&. This makes it possible for a system administrator to exercise as fine control as he or she wishes\&.
+.SH "EXEMPEL"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+      # exempelfil f\(:or /etc/suauth
+      #
+      # Ett par priviligerade anv\(:andarnamn som 
+      # kan su till root med sina egna l\(:osenord\&.
+      #
+      root:bosse,birddog:OWNPASS
+      #
+      # Alla andra kan inte su till root om de inte finns
+      # gruppen wheel\&. Det \(:ar s\(oa BSD g\(:or saker\&.
+      #
+      root:ALL EXCEPT GROUP wheel:DENY
+      #
+      # Kanske terry och birddog \(:ar konton som
+      # \(:ags av samma person\&.
+      # Tillg\(oang kan ges mellan dem utan
+      # l\(:osenord\&.
+      #
+      terry:birddog:NOPASS
+      birddog:terry:NOPASS
+      #
+    
+.fi
+.if n \{\
+.RE
+.\}
+.SH "FILER"
+.PP
+/etc/suauth
+.RS 4
+.RE
+.SH "FEL"
+.PP
+There could be plenty lurking\&. The file parser is particularly unforgiving about syntax errors, expecting no spurious whitespace (apart from beginning and end of lines), and a specific token delimiting different things\&.
+.SH "DIAGNOSTIK"
+.PP
+An error parsing the file is reported using
+\fBsyslogd\fR(8)
+as level ERR on facility AUTH\&.
+.SH "SE OCKS\(oA"
+.PP
+\fBsu\fR(1)\&.
diff --git a/man/sv/useradd.8 b/man/sv/useradd.8
new file mode 100644 (file)
index 0000000..7af80aa
--- /dev/null
@@ -0,0 +1,647 @@
+'\" t
+.\"     Title: useradd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "USERADD" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+useradd \- skapa en ny anv\(:andare eller uppdatera standardinformation f\(:or nya anv\(:andare
+.SH "SYNOPSIS"
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR [\fIflaggor\fR] \fIINLOGGNINGSNAMN\fR
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D [\fIflaggor\fR]
+.SH "BESKRIVNING"
+.PP
+When invoked without the
+\fB\-D\fR
+option, the
+\fBuseradd\fR
+command creates a new user account using the values specified on the command line plus the default values from the system\&. Depending on command line options, the
+\fBuseradd\fR
+command will update system files and may also create the new user\'s home directory and copy initial files\&.
+.PP
+By default, a group will also be created for the new user (see
+\fB\-g\fR,
+\fB\-N\fR,
+\fB\-U\fR, and
+\fBUSERGROUPS_ENAB\fR)\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBuseradd\fR
+\(:ar:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR \fIBASE_DIR\fR
+.RS 4
+The default base directory for the system if
+\fB\-d\fR
+\fIHOME_DIR\fR
+is not specified\&.
+\fIBASE_DIR\fR
+is concatenated with the account name to define the home directory\&. If the
+\fB\-m\fR
+option is not used,
+\fIBASE_DIR\fR
+must exist\&.
+.sp
+If this option is not specified,
+\fBuseradd\fR
+will use the base directory specified by the
+\fBHOME\fR
+variable in
+/etc/default/useradd, or
+/home
+by default\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\fIKOMMENTAR\fR
+.RS 4
+Any text string\&. It is generally a short description of the login, and is currently used as the field for the user\'s full name\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\fIHEM_KAT\fR
+.RS 4
+The new user will be created using
+\fIHOME_DIR\fR
+as the value for the user\'s login directory\&. The default is to append the
+\fILOGIN\fR
+name to
+\fIBASE_DIR\fR
+and use that as the login directory name\&. The directory
+\fIHOME_DIR\fR
+does not have to exist but will not be created if it is missing\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-defaults\fR
+.RS 4
+See below, the subsection "Changing the default values"\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\fIUTG\(oANGSDATUM\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default expiry date specified by the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd, or an empty string (no expiry) by default\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\fIINAKTIV\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&. A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default inactivity period specified by the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd, or \-1 by default\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIGRUPP\fR
+.RS 4
+The group name or number of the user\'s initial login group\&. The group name must exist\&. A group number must refer to an already existing group\&.
+.sp
+If not specified, the bahavior of
+\fBuseradd\fR
+will depend on the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&. If this variable is set to
+\fIyes\fR
+(or
+\fB\-U/\-\-user\-group\fR
+is specified on the command line), a group will be created for the user, with the same name as her loginname\&. If the variable is set to
+\fIno\fR
+(or
+\fB\-N/\-\-no\-user\-group\fR
+is specified on the command line), useradd will set the primary group of the new user to the value specified by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd, or 100 by default\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\fIGRUPP1\fR[\fI,GRUPP2,\&.\&.\&.\fR[\fI,GRUPPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&. The default is for the user to belong only to the initial group\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-skel\fR \fISKEL_DIR\fR
+.RS 4
+The skeleton directory, which contains files and directories to be copied in the user\'s home directory, when the home directory is created by
+\fBuseradd\fR\&.
+.sp
+This option is only valid if the
+\fB\-m\fR
+(or
+\fB\-\-create\-home\fR) option is specified\&.
+.sp
+If this option is not set, the skeleton directory is defined by the
+\fBSKEL\fR
+variable in
+/etc/default/useradd
+or, by default,
+/etc/skel\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR\fINYCKEL\fR=\fIV\(:ARDE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBUMASK\fR,
+\fBPASS_MAX_DAYS\fR
+and others)\&.
+
+Example:
+\fB\-K \fR\fIPASS_MAX_DAYS\fR=\fI\-1\fR
+can be used when creating system account to turn off password ageing, even though system account has no password at all\&. Multiple
+\fB\-K\fR
+options can be specified, e\&.g\&.:
+\fB\-K \fR
+\fIUID_MIN\fR=\fI100\fR
+\fB\-K \fR
+\fIUID_MAX\fR=\fI499\fR
+.sp
+Notera:
+\fB\-K \fR\fIUID_MIN\fR=\fI10\fR,\fIUID_MAX\fR=\fI499\fR
+fungerar \(:annu inte\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-no\-log\-init\fR
+.RS 4
+Do not add the user to the lastlog and faillog databases\&.
+.sp
+By default, the user\'s entries in the lastlog and faillog databases are resetted to avoid reusing the entry from a previously deleted user\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-create\-home\fR
+.RS 4
+Create the user\'s home directory if it does not exist\&. The files and directories contained in the skeleton directory (which can be defined with the
+\fB\-k\fR
+option) will be copied to the home directory\&.
+.sp
+By default, no home directories are created\&.
+.RE
+.PP
+\fB\-M\fR
+.RS 4
+Do no create the user\'s home directory, even if the system wide setting from
+/etc/login\&.defs
+(\fBCREATE_HOME\fR) is set to
+\fIyes\fR\&.
+.RE
+.PP
+\fB\-N\fR, \fB\-\-no\-user\-group\fR
+.RS 4
+Do not create a group with the same name as the user, but add the user to the group specified by the
+\fB\-g\fR
+option or by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Allow the creation of a user account with a duplicate (non\-unique) UID\&.
+.sp
+This option is only valid in combination with the
+\fB\-o\fR
+option\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\fIL\(:OSENORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system account\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are choosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+/etc/login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.sp
+Note that
+\fBuseradd\fR
+will not create a home directory for such an user, regardless of the default setting in
+/etc/login\&.defs
+(\fBCREATE_HOME\fR)\&. You have to specify the
+\fB\-m\fR
+options if you want a home directory for a system account to be created\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fISKAL\fR
+.RS 4
+The name of the user\'s login shell\&. The default is to leave this field blank, which causes the system to select the default login shell specified by the
+\fBSHELL\fR
+variable in
+/etc/default/useradd, or an empty string by default\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\fIUID\fR
+.RS 4
+The numerical value of the user\'s ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than 999 and greater than every other user\&. Values between 0 and 999 are typically reserved for system accounts\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-user\-group\fR
+.RS 4
+Create a group with the same name as the user, and add the user to this group\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR \fISEUSER\fR
+.RS 4
+The SELinux user for the user\'s login\&. The default is to leave this field blank, which causes the system to select the default SELinux user\&.
+.RE
+.SS "\(:Andrar standardv\(:arden"
+.PP
+When invoked with only the
+\fB\-D\fR
+option,
+\fBuseradd\fR
+will display the current default values\&. When invoked with
+\fB\-D\fR
+plus other options,
+\fBuseradd\fR
+will update the default values for the specified options\&. Valid default\-changing options are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR \fIBASE_DIR\fR
+.RS 4
+The path prefix for a new user\'s home directory\&. The user\'s name will be affixed to the end of
+\fIBASE_DIR\fR
+to form the new user\'s home directory name, if the
+\fB\-d\fR
+option is not used when creating a new account\&.
+.sp
+This option sets the
+\fBHOME\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\fIUTG\(oANGSDATUM\fR
+.RS 4
+Datumet n\(:ar anv\(:andarkontot blir inaktiverat\&.
+.sp
+This option sets the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\fIINAKTIV\fR
+.RS 4
+Antalet dagar efter att ett l\(:osenord har g\(oatt ut innan kontot kommer att inaktiveras\&.
+.sp
+This option sets the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIGRUPP\fR
+.RS 4
+The group name or ID for a new user\'s initial group (when the
+\fB\-N/\-\-no\-user\-group\fR
+is used or when the
+\fBUSERGROUPS_ENAB\fR
+variable is set to
+\fIno\fR
+in
+/etc/login\&.defs\&. The named group must exist, and a numerical group ID must have an existing entry\&.
+.sp
+This option sets the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fISKAL\fR
+.RS 4
+The name of a new user\'s login shell\&.
+.sp
+This option sets the
+\fBSHELL\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.SH "NOTERINGAR"
+.PP
+The system administrator is responsible for placing the default user files in the
+/etc/skel/
+directory (or any other skeleton directory specified in
+/etc/default/useradd
+or on the command line)\&.
+.SH "T\(:ANK P\(oA"
+.PP
+You may not add a user to a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+Similarly, if the username already exists in an external user database such as NIS or LDAP,
+\fBuseradd\fR
+will deny the user account creation request\&.
+.PP
+Usernames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Usernames may only be up to 32 characters long\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indicate if a home directory should be created by default for new users\&.
+.sp
+This setting does not apply to system users, and can be overriden on the command line\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILER"
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.PP
+/etc/default/useradd
+.RS 4
+Standardv\(:arden f\(:or skapande av konto\&.
+.RE
+.PP
+/etc/skel/
+.RS 4
+Katalog som inneh\(oaller standardfiler\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+Kommandot
+\fBuseradd\fR
+avslutas med f\(:oljande v\(:arden:
+.PP
+\fI0\fR
+.RS 4
+lyckad
+.RE
+.PP
+\fI1\fR
+.RS 4
+kan inte uppdatera l\(:osenordsfilen
+.RE
+.PP
+\fI2\fR
+.RS 4
+ogiltig kommandosyntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+ogiltigt argument till flagga
+.RE
+.PP
+\fI4\fR
+.RS 4
+UID anv\(:ands redan (och inget
+\fB\-o\fR)
+.RE
+.PP
+\fI6\fR
+.RS 4
+angiven grupp finns inte
+.RE
+.PP
+\fI9\fR
+.RS 4
+anv\(:andarnamnet anv\(:ands redan
+.RE
+.PP
+\fI10\fR
+.RS 4
+kan inte uppdatera gruppfilen
+.RE
+.PP
+\fI12\fR
+.RS 4
+kan inte skapa hemkatalog
+.RE
+.PP
+\fI13\fR
+.RS 4
+kan inte skapa postk\(:o
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/userdel.8 b/man/sv/userdel.8
new file mode 100644 (file)
index 0000000..e6fb3ab
--- /dev/null
@@ -0,0 +1,266 @@
+'\" t
+.\"     Title: userdel
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "USERDEL" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+userdel \- ta bort ett anv\(:andarkonto och relaterade filer
+.SH "SYNOPSIS"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [flaggor] \fIINLOGGNINGSNAMN\fR
+.SH "BESKRIVNING"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBuserdel\fR
+\(:ar:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\'s home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+\fINotera:\fR
+Denna flagga \(:ar farlig och kan g\(:ora att ditt system f\(:ors\(:atts i ett inkonsistent tillst\(oand\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+Files in the user\'s home directory will be removed along with the home directory itself and the user\'s mail spool\&. Files located in other file systems will have to be searched for and deleted manually\&.
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+If defined, this command is run when removing a user\&. It should remove any at/cron/print jobs etc\&. owned by the user to be removed (passed as the first argument)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\'s cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+       echo "Usage: $0 username"
+       exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+      
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.SH "AVSLUTNINGSV\(:ARDEN"
+.PP
+Kommandot
+\fBuserdel\fR
+avslutas med f\(:oljande v\(:arden:
+.PP
+\fI0\fR
+.RS 4
+lyckad
+.RE
+.PP
+\fI1\fR
+.RS 4
+kan inte uppdatera l\(:osenordsfilen
+.RE
+.PP
+\fI2\fR
+.RS 4
+ogiltig kommandosyntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+angiven anv\(:andare finns inte
+.RE
+.PP
+\fI8\fR
+.RS 4
+anv\(:andaren \(:ar f\(:or n\(:arvarande inloggad
+.RE
+.PP
+\fI10\fR
+.RS 4
+kan inte uppdatera gruppfilen
+.RE
+.PP
+\fI12\fR
+.RS 4
+kan inte ta bort hemkatalogen
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\'s password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this user\&.
+.PP
+Du f\(oar inte ta bort n\(oagra NIS\-attribut p\(oa en NIS\-klient\&. Detta m\(oaste genomf\(:oras p\(oa NIS\-servern\&.
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/sv/usermod.8 b/man/sv/usermod.8
new file mode 100644 (file)
index 0000000..dbb2794
--- /dev/null
@@ -0,0 +1,269 @@
+'\" t
+.\"     Title: usermod
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "USERMOD" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+usermod \- \(:andra ett anv\(:andarkonto
+.SH "SYNOPSIS"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fIflaggor\fR] \fIINLOGGNINGSNAMN\fR
+.SH "BESKRIVNING"
+.PP
+Kommandot
+\fBusermod\fR
+\(:andrar systemkontofiler enligt det som anges p\(oa kommandoraden\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandot
+\fBusermod\fR
+\(:ar:
+.PP
+\fB\-a\fR, \fB\-\-append\fR
+.RS 4
+Add the user to the supplementary group(s)\&. Use only with the
+\fB\-G\fR
+option\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR\fIKOMMENTAR\fR
+.RS 4
+Det nya v\(:ardet f\(:or anv\(:andarens kommentarsf\(:alt i l\(:osenordsfilen\&. Vanligtvis \(:andras det med verktyget
+\fBchfn\fR(1)\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR\fIHEM_KAT\fR
+.RS 4
+The user\'s new login directory\&.
+.sp
+If the
+\fB\-m\fR
+option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR\fIUTG\(oANGSDATUM\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR\fIINAKTIV\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&.
+.sp
+A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR\fIGRUPP\fR
+.RS 4
+The group name or number of the user\'s new initial login group\&. The group must exist\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR\fIGRUPP1\fR[\fI,GRUPP2,\&.\&.\&.\fR[\fI,GRUPPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&.
+.sp
+If the user is currently a member of a group which is not listed, the user will be removed from the group\&. This behaviour can be changed via the
+\fB\-a\fR
+option, which appends the user to the current supplementary group list\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR\fINYTT_INLOGGNINGSNAMN\fR
+.RS 4
+The name of the user will be changed from
+\fILOGIN\fR
+to
+\fINEW_LOGIN\fR\&. Nothing else is changed\&. In particular, the user\'s home directory name should probably be changed manually to reflect the new login name\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+L\(oas en anv\(:andares l\(:osenord\&. Detta s\(:atter ett "!" i b\(:orjan av det krypterade l\(:osenordet som effektivt inaktiverar l\(:osenordet\&. Du kan inte anv\(:anda denna flagga med
+\fB\-p\fR
+eller
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+Move the content of the user\'s home directory to the new location\&.
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-u\fR
+option, this option allows to change the user ID to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR\fIL\(:OSENORD\fR
+.RS 4
+Det krypterade l\(:osenordet, som returneras av
+\fBcrypt\fR(3)\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR\fISKAL\fR
+.RS 4
+The name of the user\'s new login shell\&. Setting this field to blank causes the system to select the default login shell\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR\fIUID\fR
+.RS 4
+The new numerical value of the user\'s ID\&.
+.sp
+This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. Values between 0 and 999 are typically reserved for system accounts\&.
+.sp
+The user\'s mailbox, and any files which the user owns and which are located in the user\'s home directory will have the file user ID changed automatically\&.
+.sp
+The ownership of files outside of the user\'s home directory must be fixed manually\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+L\(oaser upp en anv\(:andares l\(:osenord\&. Detta tar bort det inledande "!" i det krypterade l\(:osenordet\&. Du kan inte anv\(:anda denna flagga med
+\fB\-p\fR
+eller
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR \fISEUSER\fR
+.RS 4
+The SELinux user for the user\'s login\&. The default is to leave this field the blank, which causes the system to select the default SELinux user\&.
+.RE
+.SH "T\(:ANK P\(oA"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\'s numerical user ID, the user\'s name, or the user\'s home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux, but only check if the user is logged in according to utmp on other architectures\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+You must make any changes involving NIS on the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/sv/vigr.8 b/man/sv/vigr.8
new file mode 100644 (file)
index 0000000..ff72d7a
--- /dev/null
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/sv/vipw.8 b/man/sv/vipw.8
new file mode 100644 (file)
index 0000000..382e5d9
--- /dev/null
@@ -0,0 +1,104 @@
+'\" t
+.\"     Title: vipw
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 24-07-2009
+.\"    Manual: Systemhanteringskommandon
+.\"    Source: Systemhanteringskommandon
+.\"  Language: Swedish
+.\"
+.TH "VIPW" "8" "24-07-2009" "Systemhanteringskommandon" "Systemhanteringskommandon"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAMN"
+vipw, vigr \- redigera l\(:osenordet, grupp, skuggl\(:osenord eller skuggruppfil
+.SH "SYNOPSIS"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIflaggor\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIflaggor\fR]
+.SH "BESKRIVNING"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "FLAGGOR"
+.PP
+Flaggorna som g\(:aller f\(:or kommandona
+\fBvipw\fR
+och
+\fBvigr\fR
+\(:ar:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+Redigera gruppdatabasen\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Visa hj\(:alpmeddelande och avsluta\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+Redigera l\(:osenordsdatabasen\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Tyst l\(:age\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+Redigera shadow\- eller gshadow\-databasen\&.
+.RE
+.SH "FILER"
+.PP
+/etc/group
+.RS 4
+Gruppkontoinformation\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+S\(:aker gruppkontoinformation\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+Anv\(:andarkontoinformation\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+S\(:aker anv\(:andarkontoinformation\&.
+.RE
+.SH "SE OCKS\(oA"
+.PP
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/tr/Makefile.am b/man/tr/Makefile.am
new file mode 100644 (file)
index 0000000..2c4b676
--- /dev/null
@@ -0,0 +1,18 @@
+mandir = @mandir@/tr
+
+man_MANS = \
+       chage.1 \
+       chfn.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       login.1 \
+       passwd.1 \
+       passwd.5 \
+       shadow.5 \
+       su.1 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/tr/Makefile.in b/man/tr/Makefile.in
new file mode 100644 (file)
index 0000000..4ced29e
--- /dev/null
@@ -0,0 +1,522 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/tr
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+       "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@/tr
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+       chage.1 \
+       chfn.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       login.1 \
+       passwd.1 \
+       passwd.5 \
+       shadow.5 \
+       su.1 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8
+
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/tr/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/tr/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man5 install-man8 install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/tr/chage.1 b/man/tr/chage.1
new file mode 100644 (file)
index 0000000..16bbbb1
--- /dev/null
@@ -0,0 +1,90 @@
+
+
+.\" Copyright 1990 - 1994 Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+  
+.TH chage 1 "" "" ""
+.nh  
+.SH İSİM  
+chage - 
+kullanıcı parolasının son kullanma tarihini değiştirir
+  
+.SH KULLANIM
+
+.nf
+
+\fBchage\fR [\fB-m \fR\fIasgari-gün-sayısı\fR]  [\fB-M \fR\fIazami-gün-sayısı\fR]  [\fB-d \fR\fIson-gün\fR]
+      [\fB-I \fR\fIpasif\fR]  [\fB-E \fR\fIson-tarih\fR]  [\fB-W \fR\fIuyarı-gün-sayısı\fR]  \fIkullanıcı\fR
+
+\fBchage -l \fR\fIkullanıcı\fR
+
+.fi
+
+
+  
+.SH AÇIKLAMA
+
+
+\fBchage\fR, parolanın son değiştirilme tarihinden, değiştirilmesi gerekecek olan güne kadar geçen sürenin gün cinsinde miktarını değiştirir. Bu bilgi, sistem tarafından, kullanıcının ne zaman parolasını değiştirmesi gerektiğini bulmakta kullanılır. Bu komut root kullanıcıya tahsis edilmiştir. Sadece \fB-l\fR seçeneği, normal kullanıcılar tarafından, parola ve hesaplarının son kullanma tarihini görmek amacı ile kullanılabilir.
+
+\fB-m\fR seçeneği ile belirtilen \fIasgari-gün-sayısı\fR´nın değeri, parola değişiklikleri arasında geçecek  asgari gün sayısıdır. Buraya sıfır değeri verilirse, kullanıcı istediği bir zaman parolasını değiştirebilir.
+
+\fB-M\fR seçeneği ile belirtilen \fIazami-gün-sayısı\fR´nın değeri, parolanın geçerliliğinin biteceği güne kadar geçecek zamanın gün cinsinden miktarıdır.  \fIazami-gün-sayısı\fR artı \fIson-gün\fR, içinde bulunulan günden az ise, kullanıcı hesabını kullanmadan önce parolasını değiştirmek zorunda kalacaktır. Bu olay, \fB-W\fR seçeneğini kullanılarak da ayarlanabilir. Bu seçenek sayesinde kullanıcıya bu olay hakkında uyarı mesajı verebilirsiniz.
+
+\fB-d\fR seçeneği ile, \fIson-gün\fR´ün değeri 1 Ocak 1970´den parolanın son değişeceği güne kadar olan gün sayısıdır. YYYY-AA-GG biçiminde bir tarih olarak da belirtilebilir (veya  yaşadığınız bölgede kabul edilen tarih biçimi ile).
+
+\fB-E\fR seçeneği, kullanıcı hesabının hangi tarihten sonra erişilemez olduğunu ayarlamak için kullanılır. \fIson-tarih\fR´in değeri; 1 Ocak 1970´den hesabın kilitleneceği güne kadar olan sürenin gün cinsinden miktarıdır. YYYY-AA-GG biçiminde bir tarih olarak da belirtilebilir (veya  yaşadığınız bölgede kabul edilen tarih biçimi ile).  Hesabı kilitlenen bir kullanıcının hesabını tekrar kullanabilmesi için, mutlaka sistem yöneticisine baş vurması gerekmektedir.
+
+\fB-I\fR seçeneği, bir parolanın pasif hale geçmesi ile  hesabın kilitlenmesi arasında geçecek olan gün miktarını ayarlamak için kullanılır.  \fIpasif\fR seçeneği, pasif geçecek gün sayısıdır. 0 (sıfır) değeri bu özelliği etkisizleştirir.  Hesabı kilitlenen bir kullanıcının hesabını tekrar kullanabilmesi için, mutlaka sistem yöneticisine baş vurması gerekmektedir.
+
+\fB-W\fR seçeneği, bir parola değişikliğinin gerekeceği günden kaç gün önce uyarı verileceğini ayarlamak için kullanılır. \fIuyarı-gün-sayısı\fR seçeneği, kullanıcının parolasının geçersiz kalmasından önce kullanıcının uyarılacağı gün sayısıdır.
+
+Şayet hiçbir seçenek belirtilmezse, \fBchage\fR etkileşimli kipe geçer. O an için geçerli olan bütün değerleri ekrana yazar. Bu alanlardaki değerleri değiştirmek için yeni değerler girilir. Şayet geçerli değerleri kullanmak istiyorsanız bu satırları boş bırakın. Geçerli değerler \fB[ ]\fR işaretleri arasında gösterilir.
+
+.SH SINIRLAMALAR
+
+\fBchage\fR uygulamasının /etc/shadow dosyasına ihtiyacı vardır.  Şayet parolalar /etc/passwd dosyası içinde saklanıyorsa, \fBchage\fR uygulamasının işlevselliği ortadan kalkar.
+
+.SH İLGİLİ DOYALAR
+
+/etc/passwd - kullanıcı hesabı bilgileri
+.br
+/etc/shadow - gölge parolalı kullanıcı hesabı bilgileri
+
+.SH İLGİLİ DOYALAR
+
+\fBpasswd\fR(5), 
+\fBshadow\fR(5)    
+    
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+    
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Kasım 2003
+
diff --git a/man/tr/chfn.1 b/man/tr/chfn.1
new file mode 100644 (file)
index 0000000..a867ed9
--- /dev/null
@@ -0,0 +1,79 @@
+
+
+.\"  chfn.1 -- change your finger information
+.\"  (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\"  this program is free software.  you can redistribute it and
+.\"  modify it under the terms of the gnu general public license.
+.\"  there is no warranty.
+
+.TH chfn 1 "13 Ekim 1994" "chfn " "Linux Başvuru Kılavuzu"
+.nh
+.SH İSİM  
+chfn - 
+kişisel bilgilerinizi değiştirir
+
+.SH KULLANIM
+
+.nf
+
+\fBchfn\fR [ \fB-f \fR\fIAdı-Soyadı\fR ] [ \fB-o \fR\fIİşyeri\fR ]  [ \fB-p \fR\fIİş-telefonu\fR ]
+     [ \fB-h \fR\fIEv-telefonu\fR ]  [ \fB-u\fR ] [ \fB-v\fR ] [ \fIkullanıcı\fR ]
+
+.fi
+
+
+
+.SH AÇIKLAMA
+
+\fBchfn\fR, kişisel bilgilerinizi değiştirmek için kullanılır. Bu bilgiler /etc/passwd dosyası içinde saklanır ve \fBfinger\fR komutu aracılığı ile ekrana gönderilir. Linux \fBfinger\fR komutu; \fBchfn\fR tarafından değiştirilebilen dört bilgi alanı görüntüler: adınız ve soyadınız, işyeriniz, iş telefon numaranız ve ev telefon numaranız.
+.SS KOMUT SATIRI
+
+Dört parçadan oluşan bu bilgilerin herhangi biri komut satırından belirtilebilir. Şayet komut satırından bilgi girilmemiş ise, \fBchfn\fR etkileşimli kipe geçecektir.
+.SS ETKİLEŞİMLİ KİP
+
+Etkileşimli kipte, \fBchfn\fR, her bir alan için kullanıcıdan veri girmesini isteyecektir. Bu alanlara yeni bilgi girebilir ya da eski bilgiyi korumak için  enter tuşuna basıp devam edebilirsiniz. Alanları boş bırakmak için \fBnone\fR kelimesini giriniz.
+
+.SH SEÇENEKLER   
+
+
+.br
+.ns
+.TP 
+\fB-f\fR, \fB--full-name\fR
+Ad ve soyadı belirtilir.
+
+.TP 
+\fB-o\fR, \fB--office\fR
+İşyeri ya da işyerindeki bölümünüz.
+
+.TP 
+\fB-p\fR, \fB--office-phone\fR
+İş telefonunuz.
+
+.TP 
+\fB-h\fR, \fB--home-phone\fR
+Ev telefonunuz.     
+
+.TP 
+\fB-u\fR, \fB--help\fR
+Bu kullanım bilgisi görüntüler ve çıkar.        
+
+.TP 
+\fB-v\fR, \fB--version\fR
+Sürüm bilgilerini görüntüler ve çıkar.        
+
+.PP
+
+.SH İLGİLİ BELGELER
+
+\fBfinger\fR(1),
+\fBpasswd\fR(5).
+
+.SH YAZAN
+
+Salvatore Valente <svalente (at) mit.edu> tarafından yazılmıştır.
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Aralık 2003
+
diff --git a/man/tr/groupadd.8 b/man/tr/groupadd.8
new file mode 100644 (file)
index 0000000..1568ae2
--- /dev/null
@@ -0,0 +1,97 @@
+
+
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+
+.TH groupadd 8 "" "" ""
+.nh
+.SH İSİM  
+groupadd - 
+yeni bir grup oluşturur
+
+.SH KULLANIM
+
+.nf
+
+\fBgroupadd\fR [\fB-g \fR\fIgrup-kimliği\fR [\fB-o\fR]] [\fB-r\fR] [\fB-f\fR] \fIgrup\fR
+
+.fi
+
+
+.SH AÇIKLAMA
+
+\fBgroupadd\fR komutu, komut satırından tanımlanan bilgiler ve sistemdeki öntanımlı bilgiler eşliğinde yeni bir grup oluşturur. Yeni grup, gerekli sistem dosyalarına girilir. \fBgroupadd\fR komutuna uygulanacak seçenekler şunlardır:
+
+
+
+.br
+.ns
+.TP 
+\fB-g \fR\fIgrup-kimliği\fR
+Grubu tanımlayan numara. \fB-o\fR seçeneği belirtilmediği sürece bu numara benzersiz olmalıdır. Negatif bir değer atanamaz. Öntanımlı olarak 500´den ve diğer bütün tanımlı grup numaralarından daha büyük olan en küçük sayı kullanılır. 0 ile 499 arasındaki değerler, geleneksel olarak, \fIsistem hesapları\fR için ayrılır.
+
+.TP 
+\fB-r\fR
+Bu seçenek \fBgroupadd\fR komutuna bir \fIsistem hesabı\fR eklemesini söyler. \fB-g\fR seçeneği belirtilmediği sürece, 499´dan küçük olan olası bir grup numarası atanır. Bu seçenek Red Hat tarafından eklenmiştir.
+
+.TP 
+\fB-f\fR
+Zorlama seçeneği. Bu seçenek, \fBgroupadd\fR komutunun eklemeye çalıştığı grup sistemde halihazırda var ise, bir hata vererek çıkmasını sağlar. Böyle bir durumda grup değişmeyecek veya tekrar eklenmeyecektir. 
+
+Bu seçenek aynı zamanda, \fB-g\fR seçeneğinin çalışma şeklini düzenler. Benzersiz olmayan bir grup numarası istediğiniz ve \fB-o\fR seçeneğini vermediğiniz zaman, grup oluşturma işlemi, standart şekline (\fB-g\fR veya \fB-o\fR seçeneği tanımlanmadığı durumda bir grup ekler gibi) geri dönecektir. Bu seçenek Red Hat tarafından eklenmiştir.
+
+.PP
+
+.SH İLGİLİ DOSYALAR
+
+.nf
+
+\fB/etc/group\fR   - grupların hesap bilgileri
+\fB/etc/gshadow\fR - güvenli grup bilgileri
+
+.fi
+
+
+.SH İLGİLİ BELGELER
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004
+
diff --git a/man/tr/groupdel.8 b/man/tr/groupdel.8
new file mode 100644 (file)
index 0000000..eda77ac
--- /dev/null
@@ -0,0 +1,77 @@
+
+
+.\" Copyright 1991 - 1993, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+
+.TH groupdel 8 "" "" ""
+.nh
+.SH İSİM  
+groupdel - 
+bir grubu siler
+
+.SH KULLANIM
+\fBgroupdel \fR\fIgrup\fR
+  
+.SH AÇIKLAMA
+
+\fBgroupdel\fR komutu, sistem hesap dosyalarını düzenler ve \fIgrup\fR olarak belirtilen gruba ait bütün girdileri siler. Silinmek istenen grup, sistemde varolmalıdır.
+
+Silme işleminden sonra, silinen grup numarasına ait herhangi bir dosya kalmadığından emin olmak için bütün dosya sistemlerini kontrol etmelisiniz.
+
+.SH YETERSİZLİKLER
+
+Varolan herhangi bir kullanıcının birincil grubunu silemeyebilirsiniz. Grubu silmeden önce bu kullanıcıyı sistemden kaldırmak zorundasınız.
+
+.SH İLGİLİ DOSYALAR
+
+.nf
+
+\fB/etc/group\fR   - grupların hesap bilgileri
+\fB/etc/gshadow\fR - güvenli grup bilgileri
+
+.fi
+
+
+.SH İLGİLİ BELGELER
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004
+
diff --git a/man/tr/groupmod.8 b/man/tr/groupmod.8
new file mode 100644 (file)
index 0000000..f55a05d
--- /dev/null
@@ -0,0 +1,91 @@
+
+
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+
+.TH groupmod 8 "" "" ""
+.nh
+.SH İSİM  
+groupmod - 
+bir grubun niteliklerini düzenler
+
+.SH KULLANIM
+
+.nf
+
+\fBgroupmod\fR [\fB-g \fR\fIgrup-kimliği\fR [\fB-o\fR]] [\fB-n \fR\fIgrup-ismi\fR] \fIgrup\fR
+
+.fi
+
+
+.SH AÇIKLAMA
+
+\fBgroupmod\fR komutu, komut satırından tanımlanan bir gruba ait bilgilerdeki değişiklikleri, sistem hesap dosyaları üzerinde değiştirmek için kullanılır. Bu komuta verilebilecek seçenekler şunlardır: 
+
+
+
+.br
+.ns
+.TP 
+\fB-g \fR\fIgrup-kimliği\fR
+Grubu tanımlayan numara. \fB-o\fR seçeneği belirtilmediği sürece bu numara benzersiz olmalıdır. Negatif bir değer atanamaz.  0 ile 99 arasında değerler, geleneksel olarak, sistem grupları için ayrılmıştır. Dosya grup numarası, eski grup numarası olan bütün dosyaların dosya grup numaraları el ile değiştirilmelidir.
+
+.TP 
+\fB-n \fR\fIgrup-ismi\fR
+\fIgrup\fR ile belirtilen grubun alacağı yeni grup adını tanımlar.
+
+.PP
+
+.SH İLGİLİ DOSYALAR
+
+.nf
+
+\fB/etc/group\fR   - grupların hesap bilgileri
+\fB/etc/gshadow\fR - güvenli grup bilgileri
+
+.fi
+
+
+.SH İLGİLİ BELGELER
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004
+
diff --git a/man/tr/login.1 b/man/tr/login.1
new file mode 100644 (file)
index 0000000..491a97d
--- /dev/null
@@ -0,0 +1,114 @@
+
+
+.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
+.\" May be distributed under the GNU General Public License
+
+.TH login 1 "4 Kasım 1996" "Util-linux 1.6" "Linux Yazılımcılarının Kılavuzu"
+.nh
+.SH İSİM  
+login - 
+Kullanıcının sisteme girişini sağlar.
+
+.SH KULLANIM
+
+
+\fBlogin\fR [ \fIisim\fR ]
+.br
+\fBlogin -p\fR
+.br
+\fBlogin -h\fR \fIkonakismi\fR
+.br
+\fBlogin -f\fR \fIisim\fR
+
+
+.SH AÇIKLAMA
+
+\fBlogin\fR, bir sisteme bağlanmak için kullanılır. Ayrıca, istenilen bir anda, bir kullanıcı adından başka birine geçiş yapmak içinde kullanılabilir (günümüzdeki pek çok kabuk, yerleşik olarak bu özelliği desteklemektedir).
+
+Herhangi bir argüman belirtilmemişse, \fBlogin\fR kullanıcı adını soracaktır.
+
+Şayet kullanıcı root değilse, ve eğer /etc/nologin dosyası varsa, bu dosyanın içeriği ekrana basılacak ve \fBlogin\fR sonlandırılacaktır. Bu genellikle, sistem kapanırken, yapılacak bağlantıları önlemek için kullanılır.
+
+Şayet kullanıcı için /etc/usertty içinde özel erişim kısıtlamaları tanımlanmışsa, kullanıcı bu şartları karşılamak zorundadır. Aksi taktirde bağlantı girişimi reddedilecek ve bir \fBsyslog\fR iletisi üretilecektir. Daha fazla bilgi için "Özel Erişim Kısıtlamaları" bölümüne bakınız.
+
+Şayet kullanıcı root ise, /etc/securetty içinde listelenen uçbirimlerden birisini kullanarak bağlanmak zorundadır. Giriş hataları \fBsyslog\fR tarafından kaydedilir. 
+
+Bütün bu şartlar kontrol edildikten sonra, parola istenecek ve kontrol edilecektir (şayet bu kullanıcı için parola gerekli ise). \fBlogin\fR sonlandırılmadan önce, 10 giriş denemesine izin vardır, fakat ilk üç denemeden sonra isteğe karşılık verme süresi uzayacaktır. Bağlantı hataları \fBsyslog\fR üzerinden rapor edilecektir. Bu, ayrıca başarılı root bağlantılarını raporlamak içinde kullanılır. 
+
+Şayet .hushlogin dosyası varsa, bir "hızlı" bağlantı gerçekleştirilir (bu özellik; e-posta kontrolünü, en son bağlantı zamanının ve günün iletisinin ekrana basılmasını engeller). Diğer yandan, şayet /var/log/lastlog dosyası varsa, son bağlantı zamanı ekrana basılacaktır (ve o anki bağlantı kaydedilecektir).
+
+Uçbirimin UID ve GID ayarlarını yapmak gibi, rastgele yönetim işleri yapılır. Şayet daha önceden belirtilmişse, TERM ortam değişkeni korunur (\fB-p\fR seçeneği kullanılmışsa diğer çevre değişkenleri de korunur).  Daha sonra HOME, PATH, SHELL, TERM, MAIL ve LOGNAME ortam değişkenleri ayarlanır. PATH değişkeni normal kullanıcılar için öntanımlı olarak /usr/local/bin:/bin:/usr/bin:. ve root kullanıcı için /bin:/usr/sbin:/usr/bin'dir. Son olarak, şayet bu bir "hızlı" bağlantı değilse; günün iletisi görüntülenir, kullanıcıya ait /var/spool/mail içindeki dosya kontrol edilir ve şayet dosya uzunluğu sıfırdan farklı ise bir ileti görüntülenir (şayet bu dosyanın uzunluğu sıfırdan farklı ise, kullanıcıya bir ileti gelmiş demektir).
+
+Daha sonra kullanıcı kabuğu başlatılır. Şayet \fB/etc/passwd\fR içinde  kullanıcı için bir kabuk tanımlı değilse, \fB/bin/sh\fR kullanılır. Şayet /etc/passwd içinde bir dizin tanımlı değilse, ev dizini olarak \fB/\fR (kök) dizini kullanılır (yukarıda bahsedilen .hushlogin dosyası için ev dizinine bakılır).
+
+
+.SH SEÇENEKLER
+
+
+.br
+.ns
+.TP 
+\fB-p\fR
+\fBgetty\fR(8) tarafından kullanılır, ortam değişkenlerinin korunmasını sağlar.
+
+.TP 
+\fB-f\fR
+İkinci bağlantı doğrulamasını atlamak için kullanılır. Özellikle root kullanıcı için çalışmaz ve Linux altında da çalıştığı görülmemiştir.        
+
+.TP 
+\fB-h\fR
+Diğer sunucular tarafından (\fBtelnetd\fR(8) gibi) uzak sunucunun adını, \fBlogin\fR´e bildirmek için kullanılır, bundan dolayı, utmp ve wtmp içine yerleştirilebilir. Bu seçenek sadece root kullanıcı içindir.
+
+.PP
+
+.SH ÖZEL ERİŞİM KISITLAMALARI
+
+/etc/securetty dosyası, root kullanıcının bağlantı yapabileceği, uçbirim isimlerinin listesini içerir. Her bir satırda, /dev/ öneki olmaksızın bir tty aygıtının adı belirtilmelidir. Şayet bu dosya yoksa, root kullanıcı herhangi bir uçbirim üzerinden bağlanabilir.
+
+Günümüzde çoğu Linux sistemi PAM (Pluggable Authentication Modules - Eklenebilir Kimlik Kantlama Modülleri) kullanmaktadır. PAM kullanılmayan sistemlerde /etc/usertty dosyası, belirlenen kullanıcılar için, ek erişim kısıtlamaları içerir. Şayet bu dosya yoksa, ek erişim kısıtlamaları yüklenemez. Bu dosya çeşitli bölümler içerir. Üç çeşit bölüm türü münkündür: CLASSES, GROUPS ve USERS. CLASSES bölümü uçbirim sınıflarının ve sunucu adlarının şablonlarını içerir. GROUPS  bölümü her bir grup için, USERS bölümü  ise her bir kullanıcı için izin verilen uçbirimleri ve sunucuları tanımlar.
+
+Bu dosya içindeki her bir satır en fazla 255 karaktere sahip olabilir. Açıklamalar \fB#\fR ile başlar ve satır sonuna kadar devam eder.
+
+.SS CLASSES Bölümü
+
+Bir CLASSES bölümü bir satırın başında tamamen büyük harflerden oluşmuş CLASSES dizgesi ile başlar. Yeni bir bölümün başlangıcına veya dosyanın sonuna kadar  her bir satır sekmeler ya da boşluklar tarafından ayrılmış sözcük dizilimleri içerir. Her bir satır uçbirim sınıfları ve sunucu şablonları içerir. 
+
+Satır başındaki sözcük, satırın kalanında tanımlanmış uçbirimler ve sunucu şablonları için ortak sınıf ismidir. Bu sınıf ismi GROUPS veya USERS bölümlerinde kullanılabilir. Yinelenmiş sınıflar oluşturma hatasından korunmak için sınıf isimleri tanımlamaların içinde kullanılmamalıdır. 
+
+Örnek bir CLASSES bölümü:
+
+.nf
+
+CLASSES
+sinif1       tty1 tty2
+sinif2       tty3 @.foo.com
+
+.fi
+
+
+Burada \fIsinif1\fR ve \fIsinif2\fR sınıfları sağ taraflarındakilerle tanımlanmıştır.
+
+.SS GROUPS Bölümü
+
+Bir GROUPS bölümü; her bir UNIX grubu için izin verilen uçbirim ve 
+sunucuları tanımlar.  Şayet bir kullanıcı /etc/passwd ve /etc/group dosyalarındaki tanımlara göre göre bir UNIX grubunun üyesi ise ve bu grup /etc/usertty içindeki GROUPS bölümünde belirtilmiş ise, kullanıcıya erişim izni verilmiş demektir.      
+
+Bir CLASSES bölümü bir satırın başında tamamen büyük harflerden oluşmuş CLASSES dizgesi ile başlar.
+Bir GROUPS bölümü bir satırda tamamen büyük harflerden oluşmuş GROUPS 
+yazısı ile başlar ve devam eden tüm satırlar, boşluklar veya tablar ile ayrılmış, kelimeler dizileridir. Satırdaki ilk kelime grup adı ve diğer kelimeler; grup elemanlarına bağlantı için izin verilen ttys´ler ve sunuculardır. Bu tanımlamalar önceki bölümde( CLASSES bölümünde) açıklanan sınıfları içerebilirler.
+
+
+.SH TEMİNİ
+
+\fBlogin\fR, e2fsprogs  paketinin bir parçasıdır ve
+.br
+http://e2fsprogs.sourceforge.net adresinden temin edilebilir.
+
+.SH İLGİLİ BELGELER
+
+\fBchattr\fR(1)
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Kasım 2003
+
diff --git a/man/tr/passwd.1 b/man/tr/passwd.1
new file mode 100644 (file)
index 0000000..afc461a
--- /dev/null
@@ -0,0 +1,172 @@
+
+
+.\" Copyright Red Hat, Inc., 1998, 1999, 2002.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, and the entire permission notice in its entirety,
+.\"    including the disclaimer of warranties.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. The name of the author may not be used to endorse or promote
+.\"    products derived from this software without specific prior
+.\"    written permission.
+.\"
+.\" ALTERNATIVELY, this product may be distributed under the terms of
+.\" the GNU Public License, in which case the provisions of the GPL are
+.\" required INSTEAD OF the above restrictions.  (This clause is
+.\" necessary due to a potential bad interaction between the GPL and
+.\" the restrictions contained in a BSD-style copyright.)
+.\"
+.\"  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+.\" DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+.\" OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.\" Copyright (c) Cristian Gafton, 1998, <gafton@redhat.com>
+.\"
+.TH passwd 1 "3 Ocak 1998" "Red Hat Linux" "Kullanıcı Araçları"
+.nh
+.SH İSİM  
+passwd - 
+kullanıcının parolasını günceller
+
+.SH KULLANIM
+
+.nf
+
+\fBpasswd \fR[\fB-k\fR] [\fB-l\fR] [\fB-u \fR[\fB-f\fR]] [\fB-d\fR] [\fB-n \fR\fIasgari_ömür\fR] [\fB-x \fR\fIazami_ömür\fR] 
+       [\fB-w \fR\fIuyarı_süresi\fR] [\fB-i \fR\fIaskı_süresi\fR] [\fB-S\fR] [\fIkullanıcı\fR]
+
+.fi
+
+
+
+.SH AÇIKLAMA
+
+\fBpasswd\fR, bir kullanıcının parolasını günceller
+
+\fBpasswd\fR, \fBLinux-PAM API\fR´si aracılığı ile çalışmak üzere ayarlanmıştır. Aslında, \fBpasswd\fR, kendisini Linux-Pam ile birlikte bir "passdw" servisi olarak başlatır ve  yetkilendirme için ayarlanmış parola modüllerini kullanır. Daha sonra kullanıcının parolası güncellenir.
+
+Bu servis için, Linux-PAM ayar dosyası, basitçe, şu şekilde olurdu: 
+
+.nf
+
+#
+# bir parola güncellenmeden önce, bu önerilen parolanın sağlamlığını
+# kontrol eden passwd servis girdisi.
+#
+passwd password requisite \
+            /usr/lib/security/pam_cracklib.so retry=3
+passwd password required \
+            /usr/lib/security/pam_unix.so use_authtok
+#
+
+.fi
+
+
+NOT: Bu uygulamanın düzgün çalışması için, diğer modül türlerine ihtiyaç yoktur.
+
+.SH SEÇENEKLER
+
+
+.br
+.ns
+.TP 
+\fB-k\fR
+Bu seçenek, güncellemenin, sadece geçerlilik süresi bitmiş parolaları kapsadığı anlamaına gelir. Kullanıcı geçerlilik süresi dolmamış parolalarını kullanmaya devam edebilir.
+
+.TP 
+\fB-l\fR
+Bu seçeneği sadece root kullanıcı kullanabilir. Belirtilen hesabı 
+kilitlemeye yarar. Kilitleme işlemi; şifrelenmiş parolanın sözdizimi geçersiz hale getirilerek uygulanır (şifreli sözdiziminin başına ! getirmek suretiyle).
+
+.TP 
+\fB--stdin\fR
+Bu seçenek, yeni parolanın borulanabilen standart girdiden okunacağı anlamına gelir.     
+
+.TP 
+\fB-u\fR
+\fB-l\fR seçeneğinin tersidir. Kilitlenmiş hesap parolalarının önündeki ! önekini kaldırarak, hesabı kullanıma açar. Bu seçenek, sadece root kullanıcıya tahsis edilmiştir. Öntanımlı olarak, \fBpassdw\fR, parolasız bir hesap oluşturmayı reddedecektir (parola olarak sadece ! işaretine sahip bir hesabın kilidini kaldıramaz). \fB-f\fR seçeneği, bu korumayı aşmak için kullanılabilir. 
+
+.TP 
+\fB-d\fR
+Bu seçenek, bir hesabın parolasını yok etmenin en kolay ve hızlı yoludur. Belirtilen hesabın parolasız açılmasını sağlar. Sadece root kullanıcı bu seçeneği kullanabilir. 
+
+.TP 
+\fB-n\fR
+Kullanıcının hesabı parola için bir geçerlilik süresi tanımlanmasını destekliyorsa, bu seçenekle parolanın geçerli olduğu asgari süre gün cinsinden belirtilebilir. Sadece root kullanıcı bu seçeneği kullanabilir. 
+
+.TP 
+\fB-x\fR
+Kullanıcının hesabı parola için bir geçerlilik süresi tanımlanmasını destekliyorsa, bu seçenekle parolanın geçerli olduğu azami süre gün cinsinden belirtilebilir. Sadece root kullanıcı bu seçeneği kullanabilir. 
+
+.TP 
+\fB-w\fR
+Kullanıcının hesabı parola için bir geçerlilik süresi tanımlanmasını destekliyorsa, bu seçenekle, kullanıcının parolasının zamanaşımına uğrayacağı tarihten kaç gün önceden itibaren uyarılacağı gün cinsinden belirtilebilir. Sadece root kullanıcı bu seçeneği kullanabilir.
+
+.TP 
+\fB-i\fR
+Kullanıcının hesabı parola için bir geçerlilik süresi tanımlanmasını destekliyorsa, kullanıcı parolası zamanaşımına uğradıktan sonra kullanıcı hesabı tamamen iptal edilene kadar kaç gün süreyle bekleneceği belirtilir. Sadece root kullanıcı bu seçeneği kullanabilir.
+
+.PP
+
+.SH İKİ ÖNEMLİ KURAL
+.SS Parolanızı koruyun
+
+Parolanızı herhangi bir yere not etmeyin. Bunun yerine ezberinizde tutun. Parolanızı şifrelenmemiş bir dosya içine yazıp, ortalıkta bırakmayın. Birbirinden bağımsız parolalar kullanın. Her yere aynı parola ile üye olmayın. Bilgisayar destek veya satış görevlileri ile parolanızı paylaşmayın. Parolanızı yazarken, kimsenin sizi izlemesine izin vermeyin. Güvenli olduğuna inanmadığınız bir sistemden, parolanız aracılığı ile giriş yapmayın. Parolanız için geçerlilik süreleri tahsis edin ve parolanızı düzenli olarak değiştirin. Bir sistemdeki parolanız sizin her şeyinizdir. Bu konuda paronoyak davranmak, vurdumduymazlıktan daha mantıklı bir yöntemdir.
+
+.SS Tahmin edilmesi güç bir parola seçin
+
+\fBpasswd\fR, sizin kötü bir parola seçmenizi önlemeye çalışacaktır, fakat bu çok güvenilir bir sistem değildir. Parolalarınızı, mantıklı bir şekilde oluşturun. Herhangi bir sözlükte (hangi dilde olursa olsun) bulunabilecek kelimeler kullanmayın. Çocuğunuzun, en sevdiğiniz film kahramanınızın, evcil hayvanlarınızın, ana-babanızın, mekanların ve ünlü kişilerin adlarını parola olarak seçmeyin. Telefon numarası, araç plakanız, doğum tarihiniz, SSK numaranız gibi başkaları tarafından ulaşılabilecek bilgileri, parola olarak kullanmayınız. Basit şablonlu parolalardan uzak durun. Bunun yerine, küçük ve büyük harflerin karışımından oluşan ve mümkünse içerisinde rakamlar bulunan parolalar seçin. Uzun parolalar kullanın. Noktalama işaretlerinin kullanıldığı kelime çiftleri oldukça iyi bir seçim olacaktır. Uzun ve akılda kalır bir cümlenin ilk harflerinden oluşmuş anlamsız bir kelime de oldukça iyi bir seçim sayılır. 
+
+
+
+Sistem, sizi bu iki kurala uymak konusunda biraz zorlayacaktır ama buradaki en önemli etken "insan"dır. Sistemlerin daha güvenli hale gelmesini sağlayan en önemli etken uyanık kullanıcılardır.
+
+.SH ÇIKIŞ DURUMU
+
+Çıkış durumu olarak \fB0\fR, işlemin başarıyla tamamlandığını gösterir. Hata oluştuğu durumlarda \fB1\fR ile çıkar. Metin olarak çıktılanabilen hatalar standart hataya yazılır.
+
+.SH UYUMLULUK
+
+Linux-PAM (Linux için Eklenebilir Kimlik Kanıtlama modülleri).
+.br
+Şayet, elinizdeki Linux-PAM sürümü, Linux dosya sistemi standartları ile uyumlu ise, modülleri /usr/lib/security dizini (örnekte gösterilen) yerine /lib/security altında bulabilirsiniz.
+
+.SH İLGİLİ DOSYALAR
+
+\fB/etc/pam.d/passwd\fR - \fBLinux-PAM\fR yapılandırma dosyası
+
+.SH YAZILIM HATALARI
+
+Bilinen herhangi bir yazılım hatası yoktur.
+.SH İLGİLİ BELGELER
+
+\fBpam_chauthok\fR(2),
+\fBpam\fR(8).
+
+\fBLinux-PAM\fR ile bu uygulamanın birlikte nasıl yapılandırıldığı hakkında daha ayrıntılı bilgiyi
+.br
+http://parc.power.net/morgan/Linux-PAM/index.html
+.br
+adresindeki, \fBLinux-PAM System Administrators´ Guide\fR içinde bulabilirsiniz.
+
+.SH YAZAN
+
+Cristian Gafton  <gafton (at) redhat.com> tarafından yazılmıştır.
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Aralık 2003
+
diff --git a/man/tr/passwd.5 b/man/tr/passwd.5
new file mode 100644 (file)
index 0000000..2c5348b
--- /dev/null
@@ -0,0 +1,113 @@
+
+
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de), Fri Apr  2 11:32:09 MET DST 1993
+.\"
+.\" This is free documentation; 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.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
+.\" USA.
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.\" Modified Mon Jan  5 20:24:40 MET 1998 by Michael Haardt
+.\"  (michael@cantor.informatik.rwth-aachen.de)
+
+.TH passwd 5 "5 Ocak 1998" "" "Dosya biçimleri"
+.nh
+.SH İSİM  
+passwd - 
+parola dosyası
+  
+.SH AÇIKLAMA
+
+
+
+
+
+
+\fBpasswd\fR bir metin dosyasıdır. Sistem hesaplarının bir listesini tutar. Kullanıcı kimliği, grup kimliği, ev dizini, kabuk ve benzeri bilgileri ihtiva eder. Sıklıkla, her bir hesap için şifrelenmiş parolayı da içerir. Herkes tarafından okunma iznine sahiptir (pek çok uygulama bu dosyayı kullanır, mesela \fBls\fR(1), kullanıcı ismi ile kullanıcı kimlğini birbirine eşlemek için kullanır) ama sadece süper kullanıcının yazma izni vardır.
+
+Eski güzel günlerde, bu okuma izni ile ilgili büyük bir sorun yoktu. Herkes bu şifreli parolaları okuyabiliyordu ama  iyi seçilmiş bir parolayı kırmak için yeterli donanım gücü yoktu ve kullanıcı grubu oldukça iyi niyetliydi. Günümüzde ise, pek çok kullanıcı gölgeli parola sistemini kullanmakta, /etc/passwd içinde parolanın yerinde bir `*´ görünmekte ve şifreli parola /etc/shadow içinde saklanmaktadır. Bu dosya sadece süper kullanıcı tarafından okunabilir.
+
+Gölgeli parolanın kullanılıp kullanılmadığına bakılmaksızın, pek çok sistem yöneticisi, şifrelenmiş parola alanında bir yıldız kullanır. Böylece bu kullanıcının bir parola kullanarak yetki almasını önler. (Yine de aşağıdaki \fBEK BİLGİ\fR bölümüne bakınız.
+
+Şayet yeni bir kullanıcı hesabı oluşturuyorsanız, ilk olarak parola alanına bir yıldız koyunuz, daha sonra \fBpasswd\fR(1)komutu ile parolayı belirleyin.
+
+Her satırda bir girdi yapılır ve her satır şu biçimdedir:
+.RS
+
+hesap:parola:UID:GID:GECOS:dizin:kabuk
+.RE
+
+Bu alanların açıklamaları şunlardır:
+
+
+.br
+.ns
+.TP 
+\fIhesap\fR
+Kullanıcının sistemdeki adı. Büyük harf içermemelidir.
+
+.TP 
+\fIparola\fR
+Şifreli kullanıcı parolası veya bir yıldız işareti.
+
+.TP 
+\fIUID\fR
+Sayısal kullanıcı kimliği
+
+.TP 
+\fIGID\fR
+Bu kullanıcının sayısal birincil grup kimliği
+
+.TP 
+\fIGECOS\fR
+Bu alan seçime bağlıdır ve sadece bilgilendirme amacı 
+ile kullanılır. Genellikle kullanıcının tam adı yazılır. GECOS´un anlamı General Electric  Comprehensive  Operating System´dir. General Electric´in büyük sistem bölümü Honeywell´e satıldığı zaman GCOS olarak yeniden adlandırılmıştır.    Dennis Ritchie´nin bildirdiğine göre: "bazı zamanlar yazıcı çıktılarını veya toplu işleri GCOS makineye gönderiyoruz. Parola dosyasındaki gcos alanı $IDENTcard için bilgileri biriktirme alanı olarak kullanılır. Zariflik olsun diye oraya konmamıştır."
+
+.TP 
+\fIdizin\fR
+Kullanıcının $HOME dizinidir.
+
+.TP 
+\fIkabuk\fR
+Sisteme girişte kullanılacak kabuk (belirtilmemişse \fB/bin/sh\fR kullanılır). Şayet olmayan bir uygulama belirtilirse, kullanıcı \fBlogin\fR(1) ile sisteme bağlanamaz.
+
+.PP
+.SH EK BİLGİ
+
+Şayet bir kullanıcı grubu oluşturmak istiyorsanız, Grup numaraları aynı olmak zorundadır ve /etc/group dosyasında bir girdisi olmalıdır. Aksi taktirde bir grup oluşturulmaz.
+
+Şayet şifreli parola bir yıldız ile betimlenmişse, kullanıcı \fBlogin\fR(1)'i kullanarak bağlanamaz ama hala \fBrlogin\fR(1)'i kullanarak bağlanabilir, varolan bir süreci çalıştırabilir, \fBrsh\fR(1), \fBcron\fR(1), \fBat\fR(1) veya posta süzgeçleri üzerinden yenilerini başlatabilir. Kabuk alanını değiştirerek bir hesabı kapatmaya çalışmak da aynı sonucu verir ve ek olarak \fBsu\fR(1) komutunun kullanımına izin verir.
+
+.SH İLGİLİ DOSYALAR
+
+/etc/passwd
+.SH İLGİLİ BELGELER
+
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBgroup\fR(5),
+\fBshadow\fR(5).
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004
+
diff --git a/man/tr/shadow.5 b/man/tr/shadow.5
new file mode 100644 (file)
index 0000000..8c56f05
--- /dev/null
@@ -0,0 +1,96 @@
+
+
+.\" Copyright 1989 - 1990, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+
+.TH shadow 5 "" "" ""
+.nh
+.SH İSİM  
+shadow - 
+şifreli parola dosyası
+  
+.SH AÇIKLAMA
+
+\fBshadow\fR kullanıcı hesaplarının şifreli parola bilgilerini ve isteğe bağlı parola dönemsellik bilgilerini içerir.
+
+
+.IP 
+
+Kullanıcı adı
+
+Şifreli parola
+
+1 Ocak 1970´den parolanın en son değiştiği güne kadar geçen gün sayısı
+
+Parolanın değişmesi gerekecek güne kadar olan sürenin gün sayısı
+
+Parolanın değişmesi gereken günden sonraki sürenin gün sayısı
+
+Parolanın zaman aşımından önce kullanıcının uyarılacağı gün sayısı
+
+Parolanın zaman aşımından hesabın kapatılacağı güne kadar geçecek sürenin gün sayısı
+
+1 ocak 1970´den hesabın kapatılacağı güne kadar geçen sürenin gün sayısı
+
+Bir yedek alan
+
+.PP
+Parola alanı mutlaka dolu olmalıdır. Şifreli parola alanı 64 karakterlik 
+bir alfabeden (a´dan z´ye, A´dan Z´ye, 0´dan 9´a, "." Ve "/" den oluşan bir alfabe) seçilen 13 ila 24 karakterden oluşur. Bu dizgenin nasıl yorumlandığını görmek için \fBcrypt\fR(3)'e bakınız.
+
+Parolanın en son değiştiği günün tarihi, 1 Ocak 1970´den beri geçen gün sayısı olarak belirtilir. Geçerli gün sayısı geçmeden parolanın tekrar değiştirilmesi önlenebilir ve belirli bir gün sayısı geçtikten sonra parolanın değişmesi için kullanıcı zorlanabilir. Şayet gerekli en az gün sayısı en çok gün sayısından daha büyük ise, parola kullanıcı tarafından değiştirilemez.
+
+Şayet parola son kullanım tarihinden sonra belirtilen süre içinde değiştirilmez ise, kullanıcı hesabı kapatılır. Parola son kullanım tarihinden bağımsız olarak, bir kullanıcı hesabı belirtilen sürenin sonunda kapatılabilir.
+
+Bu bilgiler, /etc/passwd dosyasında da varsa, /etc/shadow dosyasındaki bilgiler geçerlidir. 
+
+Parola güvenliği açısından bu dosya için normal kullanıcılara okuma izni kapalı olmalıdır.
+
+.SH İLGİLİ DOSYALAR
+
+/etc/passwd - kullanıcı hesap bilgileri
+.br
+/etc/shadow - şifreli kullanıcı parolaları
+
+.SH İLGİLİ BELGELER
+
+\fBchage\fR(1),
+\fBlogin\fR(1),
+\fBpasswd\fR(1),
+\fBsu\fR(1),
+\fBpasswd\fR(5),
+\fBpwconv\fR(8),
+\fBpwunconv\fR(8),
+\fBsulogin\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004
+
diff --git a/man/tr/su.1 b/man/tr/su.1
new file mode 100644 (file)
index 0000000..332c142
--- /dev/null
@@ -0,0 +1,84 @@
+
+.TH su 1 "Eylül 2001" "GNU sh-utils 2.0.11" "FSF"
+.nh
+.SH İSİM  
+su - 
+başka bir kullanıcı ve grup kimliği ile bir kabuk çalıştırır
+
+.SH KULLANIM
+
+
+\fBsu\fR [\fISEÇENEK\fR]... [-] [\fIKULLANICI\fR [\fIARGÜMANLAR\fR]...]
+
+
+
+.SH AÇIKLAMA
+
+Etkin kullanıcı ve grup kimliğini \fIKULLANICI\fR´nınkilerle ile değiştirir.    
+
+
+
+.br
+.ns
+.TP 
+\fB-\fR, \fB-l\fR, \fB--login\fR
+Kabuğu, giriş kabuğu haline dönüştürür.
+
+.TP 
+\fB-c\fR, \fB--commmand\fR=\fIKOMUT \fR
+Kabuğa \fB-c\fR ile tek bir \fIKOMUT\fR aktarır.
+
+.TP 
+\fB-f\fR, \fB--fast\fR
+Kabuğa \fB-f\fR aktarır (csh veya tcsh için).
+
+.TP 
+\fB-m\fR, \fB--preserve-environment\fR
+Ortam değişkenlerini sıfırlamaz.
+
+.TP 
+\fB-p\fR
+\fB-m\fR ile aynıdır.
+
+.TP 
+\fB-s\fR, \fB--shell\fR=\fIKABUK \fR
+/etc/shells izin verdiği taktirde \fIKABUK\fR kabuğunu çalıştırır.
+
+.TP 
+\fB--help\fR
+Bu yardım metnini görüntüler ve çıkar.      
+
+.TP 
+\fB--version\fR
+Sürüm bilgilerini görüntüler ve çıkar.        
+
+.PP
+
+
+Tek başına \fB-\fR verilirse \fB-l\fR verilmiş gibi işlem yapılır. \fIKULLANICI\fR belirtilmezse, kullanıcı root kabul edilir.
+
+.SH YAZAN
+
+David MacKenzie tarafından yazılmıştır.
+.SH GERİBİLDİRİM
+
+Lütfen, böcekleri ve hataları <bug-sh-utils (at) gnu.org> adresine bildirin.
+.SH TELİF HAKKI
+
+Telif hakkı © 2000 Free Software Foundation, Inc.
+.br
+Bu bir serbest yazılımdır; kopyalama koşulları için kaynak koduna bakınız. Hiçbir garantisi yoktur; hatta SATILABİLİRLİĞİ veya ŞAHSİ KULLANIMINIZA UYGUNLUĞU için bile garanti verilmez.
+
+.SH İLGİLİ BELGELER
+
+\fBsu\fR komutu ile ilgili kapsamlı bir kılavuz Texinfo olarak mevcuttur. Şayet \fBinfo\fR ve \fBsu\fR yazılımları düzgün bir şekilde sisteminizde mevcutsa, aşağıdaki komut ile bu kılavuzu görüntüleyebilirsiniz.
+
+.IP 
+
+\fBinfo su\fR
+.PP
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Kasım 2003
+
diff --git a/man/tr/useradd.8 b/man/tr/useradd.8
new file mode 100644 (file)
index 0000000..379b2d3
--- /dev/null
@@ -0,0 +1,195 @@
+
+
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+
+.TH useradd 8 "" "" ""
+.nh
+.SH İSİM  
+useradd - 
+yeni bir kullanıcı oluşturur veya öntanımlı yeni kullanıcı bilgilerini günceller
+
+.SH KULLANIM
+
+.nf
+
+\fBuseradd\fR [\fB-c \fR\fIaçıklama\fR] [\fB-d \fR\fIevdizini\fR]
+        [\fB-e \fR\fIbitiş_tarihi\fR] [\fB-f \fR\fIaskı_süresi\fR]
+        [\fB-g \fR\fIbirincil_grup\fR] [\fB-G \fR\fIgrup\fR[,...]]
+        [\fB-m \fR[\fB-k \fR\fIiskelet_dizin\fR] | \fB-M\fR] [\fB-p \fR\fIparola\fR]
+        [\fB-s \fR\fIkabuk\fR] [\fB-u \fR\fIkull_kiml\fR [ \fB-o\fR]] [\fB-n\fR] [\fB-r\fR] \fIkullanıcı\fR
+
+.fi
+
+
+.nf
+    
+\fBuseradd -D\fR [\fB-g \fR\fIöntanımlı_grup\fR] [\fB-b \fR\fIöntanımlı_ev\fR]
+        [\fB-f \fR\fIöntanımlı_askı_süresi\fR] [\fB-e \fR\fIöntanımlı_bitiş_tarihi\fR]
+        [\fB-s \fR\fIöntanımlı_kabuk\fR]
+
+.fi
+
+
+.SH AÇIKLAMA
+.SS Yeni Kullanıcıların Oluşturulması
+
+\fB-D\fR seçeneği belitilmeden çağrıldığında, \fBuseradd\fR komutu, komut satırında tanımlanan değerleri ve sistemdeki öntanımlı değerleri kullanarak yeni bir kullanıcı oluşturur. Komut satırında belirtilen seçeneklere bağlı olarak, gerekli sistem dosyalarına yeni kullanıcının bilgileri girilir; ev dizini oluşturulur;  ilk dosyalar kopyalanır.  Red Hat Linux´da kullanılan sürümünde, \fB-n\fR seçeneği belirtilmediği sürece, oluşturulan her kullanıcı için yeni bir grup oluşturulur. Kullanabileceğiniz seçenekler şunlardır:
+
+
+
+.br
+.ns
+.TP 
+\fB-c \fR\fIaçıklama\fR
+Yeni kullanıcının parola dosyasındaki açıklama alanı.
+
+.TP 
+\fB-d \fR\fIevdizini\fR
+Oluşturulan yeni kullanıcının sisteme girişte kullanacağı ev dizinini belirtir. Öntanımlı olarak, \fIkullanıcı\fR ismi \fIöntanımlı_ev\fR'e eklenecek ve sisteme giriş dizini ismi olarak kullanılacaktır.
+
+.TP 
+\fB-e \fR\fIbitiş_tarihi\fR
+Kullanıcı hesabının son kullanma tarihini belirtir. Tarih YYYY-AA-GG (Y: yıl, A: ay, G: gün) şeklinde belirtilir.
+
+.TP 
+\fB-f \fR\fIaskı_süresi\fR
+Kullanıcı parolasının son kullanma tarihinden itibaren, bu hesabın 
+tamamen kapatılacağı tarihe kadar geçecek olan sürenin gün cinsinden değeri belirtilir. Bu değer 0 olarak belirtilirse, parolanın son kullanma tarihinde hesap kapatılır. -1 değeri verilirse, bu özellik iptal edilmiş olur. -1 değeri öntanımlı değerdir. 
+
+.TP 
+\fB-g \fR\fIbirincil_grup\fR
+Kullanıcının üyesi olacağı birincil grubun adı veya numarası belirtilir. Belirtilen grup, sistemde önceden tanımlanmış olmalıdır. Şayet grup numarası belirtilmiş ise, bu numara sistemde var olan bir gruba ait olmalıdır. Olmayan gruba ait bir isim veya numara kullanamazsınız. Öntanımlı değer 1 dir.
+
+.TP 
+\fB-g \fR\fIgrup\fR[,...]
+Kullanıcının üyesi olacağı ilave gruplar belirtilir. Her grup, diğerinden virgül ile ayrılır, arada boşluk bırakılmaz. Burada tanımlanan gruplar, \fB-g\fR ile tanımlanan grubun kısıtlamalarına tabidirler. Öntanımlı olarak, kullanıcının sadece \fIbirincil_grup\fR üyesi olduğu kabul edilir.
+
+.TP 
+\fB-m\fR
+Şayet sistemde kullanıcının ev dizini yok ise, yeni bir dizin oluşturulur. Eğer \fB-k\fR seçeneği belirtilmişse \fIiskelet_dizin\fR içindeki dosyalar ev dizinine kopyalanır. Aksi taktirde /etc/skel içindeki dosyalar kullanılır. \fIiskelet_dizin\fR veya /etc/skel içindeki bütün dizinler, ev dizininde de oluşturulur. \fB-k\fR seçeneği, sadece \fB-m\fR seçeneği ile birlikte kullanıldığında etkilidir. Öntanımlı olarak, dizin oluşturulmaz ve dosyalar kopyalanmaz.
+
+.TP 
+\fB-M\fR
+/etc/login.defs içinde tanımlı bütün sistemi kapsayan ayarlarda ev dizininin yaratılması gerektiği belirtilmiş olsa bile, kullanıcı ev dizini oluşturulmaz.
+
+.TP 
+\fB-n\fR
+Öntanımlı olarak, oluşturulan yeni kullanıcı ile aynı adlı yeni bir grup oluşturulur. Bu seçenek belirtilir ise, bu Red Hat Linux´a özel davranış kapatılmış olur. 
+
+.TP 
+\fB-r\fR
+Bu seçenek, yeni bir sistem hesabı açmak için kullanılır. Böylece, /etc/login.defs içinde belirtilen UID_MIN değerinden daha küçük kullanıcı kimlikli kullanıcı oluşturulabilir. /etc/login.defs içindeki öntanımlı değerler ne olursa olsun, \fBuseradd\fR komutu böyle bir kullanıcı için ev dizini oluşturmayacaktır. Oluşturulacak sistem hesabı için bir ev dizini istiyorsanız, \fB-m\fR seçeneğini kullanmak zorundasınız. Bu, Red Hat tarafından eklenmiş bir seçenektir.   
+
+.TP 
+\fB-p \fR\fIparola\fR
+\fBcrypt\fR(3) tarafından döndürülen şifrelenmiş paroladır. Öntanımlı olarak hesap kapalıdır.
+
+.TP 
+\fB-s \fR\fIkabuk\fR
+Kullanıcının sisteme girişte kullanacağı kabuğun adıdır. Öntanımlı olarak bu değer boştur, böylece sistemin öntanımlı kabuğunun seçilmesi sağlanır. 
+
+.TP 
+\fB-u \fR\fIkull_kiml\fR
+Kullanıcı kimliğinin sayısal değeridir. Bu değer, \fB-o\fR seçeneği kullanılmadığı sürece, eşsiz olmalıdır. Değer mutlaka pozitif bir sayı olmalıdır. Öntanımlı olarak, diğer kullanıcıların numaralarından ve 99´dan büyük, en küçük numara kullanılır. 0 ile 99 arasındaki değerler sistem hesapları için ayrılmıştır.
+
+.PP
+.SS Öntanımlı Değerlerin Değiştirilmesi
+
+\fB-D\fR seçeneği ile birlikte kullanıldığı zaman, \fBuseradd\fR ya geçerli değerleri görüntüler, ya da öntanımlı değerleri, komut satırından belirtilenler ile günceller. Kullanabileceğiniz seçenekler şunlardır:          
+
+
+.br
+.ns
+.TP 
+\fB-b \fR\fIöntanımlı_ev\fR
+Yeni bir kullanıcının ev dizini için ilk dosyayolu önekini belirtir. \fIYeni bir hesap açarken \fB-d\fR seçeneği belirtilmemişse\fR, yeni kullanıcının adı \fIöntanımlı_ev\fR'in sonuna eklenir ve yeni dizin oluşturulur.
+
+.TP 
+\fB-e \fR\fIöntanımlı_bitiş_tarihi\fR
+Kullanıcı hesabının kapatılacağı tarih.
+
+.TP 
+\fB-f \fR\fIöntanımlı_askı_süresi\fR
+Kullanıcı parolasının son kullanma tarihinden itibaren, bu hesabın tamamen kapatılacağı tarihe kadar geçecek olan sürenin gün cinsinden değeri.
+
+.TP 
+\fB-g \fR\fIöntanımlı_grup\fR
+Yeni bir kullanıcı için birincil grup adı veya grup kimliği. Belirtilen grup ismi sistemde mevcut olmalı ve sayısal grup kimliği için mevcut bir girdi bulunmalıdır.
+
+.TP 
+\fB-s \fR\fIöntanımlı_kabuk\fR
+Yeni bir kullanıcının sisteme girişte kullanacağı kabuğun adı. Belirtilen kabuk gelecekte açılacak bütün yeni hesaplarda kullanılır.
+
+.PP
+
+Şayet herhangi bir seçenek belirtilmezse, \fBuseradd\fR geçerli öntanımlı değerleri görüntüleyecektir.
+
+.SH NOTLAR    
+
+/etc/skel dizinindeki öntanımlı dosyaların yerleştirilmesi sistem yöneticilerinin sorumluluğundadır. \fBuseradd\fR komutunun bu sürümü, Red Hat tarafından, Red Hat kullanıcı/grup uyumluluğunu sağlayamak için düzenlenmiştir.
+
+.SH YETERSİZLİKLER
+
+NIS grubuna kullanıcı ekleyemezsiniz. Bu NIS sunucusu üzerinde yapılmalıdır. 
+.SH İLGİLİ DOSYALAR
+
+.nf
+
+\fB/etc/passwd\fR          - kullanıcı hesabı bilgileri
+\fB/etc/shadow\fR          - güvenli kullanıcı hesabı bilgileri
+\fB/etc/group\fR           - grup bilgileri
+\fB/etc/gshadow\fR         - güvenli grup bilgileri
+\fB/etc/default/useradd\fR - öntanımlı bilgiler
+\fB/etc/login.defs\fR      - sistem genelinde geçerli kurallar
+\fB/etc/skel\fR            - öntanımlı dosyaları içeren dizin
+
+.fi
+
+
+.SH İLGİLİ BELGELER
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Aralık 2003
+
diff --git a/man/tr/userdel.8 b/man/tr/userdel.8
new file mode 100644 (file)
index 0000000..b6f5919
--- /dev/null
@@ -0,0 +1,94 @@
+
+
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+
+.TH userdel 8 "" "" ""
+.nh
+.SH İSİM  
+userdel - 
+Bir kullanıcı hesabını ve onunla ilgili dosyaları siler
+
+.SH KULLANIM
+
+.nf
+
+\fBuserdel\fR [ \fB-r\fR ] \fIkullanıcı\fR
+
+.fi
+
+
+.SH AÇIKLAMA
+
+\fBuserdel\fR, userdel komutu, \fIkullanıcı\fR ile belirtilen hesabı silerek, sistem hesap dosyalarını değiştirir. Silinmeye çalışan \fIkullanıcı\fR hesabı, sistemde var olan bir hesap olmalıdır. Var olmayan bir hesabı silemezsiniz.
+
+
+
+.br
+.ns
+.TP 
+\fB-r\fR
+Kullanıcının ev dizinindeki dosyalar, ev dizininin kendisi ve 
+kullanıcının posta havuzu silinir. Diğer dosya sistemlerinde bulunan dosyalar silinmez. Bu nedenle bu dosyaları bulmak ve onları silmek sistem yöneticisinin görevidir.
+
+.PP
+
+.SH İLGİLİ DOSYALAR    
+
+.nf
+
+/etc/passwd - kullanıcı hesap bilgileri
+/etc/shadow - güvenli kullanıcı hesap bilgileri
+/etc/group  - grup bilgileri 
+
+.fi
+  
+
+.SH YETERSİZLİKLER    
+
+Kullanıcı sisteme bağlı ise, \fBuserdel\fR komutu ile bu hesabı 
+kaldıramazsınız.  Silmeye çalıştığınız hesaba ait çalışan bütün süreçleri öldürmek zorundasınız. Bir NIS istemcisindeki NIS özniteliklerini kaldıramayabilirsiniz. Bu işlem, NIS sunucu üzerinde gerçekleştirilmelidir.
+
+.SH İLGİLİ BELGELER
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBusermod\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından  yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Aralık 2003
+
diff --git a/man/tr/usermod.8 b/man/tr/usermod.8
new file mode 100644 (file)
index 0000000..6980829
--- /dev/null
@@ -0,0 +1,142 @@
+
+
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+
+.TH usermod 8 "" "" ""
+.nh
+.SH İSİM  
+usermod - 
+bir kullanıcı hesabını düzenler
+
+.SH KULLANIM
+
+.nf
+
+\fBusermod\fR [\fB-c \fR\fIaçıklama\fR] [\fB-d \fR\fIevdizini \fR[\fB-m\fR]]
+        [\fB-e \fR\fIbitiş_tarihi\fR] [\fB-f \fR\fIaskı_süresi\fR]
+        [\fB-g \fR\fIbirincil_grup\fR] [\fB-G \fR\fIgrup\fR[,...]]
+        [\fB-l \fR\fIkullanıcı-adı\fR]  [\fB-p \fR\fIparola\fR]
+        [\fB-s \fR\fIkabuk\fR] [\fB-u \fR\fIkull_kiml\fR [\fB-o\fR]] [\fB-L\fR|\fB-U\fR] \fIkullanıcı\fR
+
+.fi
+
+
+.SH AÇIKLAMA
+
+\fBusermod\fR komutu, sistem hesap dosyalarını düzenlemeye, üzerlerinde değişiklik yapmaya yarar. Bu komuta uygulanabilecek seçenekler şunlardır:
+
+
+
+.br
+.ns
+.TP 
+\fB-c \fR\fIaçıklama\fR
+Kullanıcı parola dosyasındaki açıklama alanına girilecek yeni değeri belirtir. Normalde \fBchfn\fR(1) komutu ile düzenlenir.
+
+.TP 
+\fB-d \fR\fIevdizini\fR
+Kullanıcının sisteme girişte kullanacağı ev dizinini belirtir. Şayet \fB-m\fR seçeneği belirtilmiş ise, kullanıcının hali hazırda kullanmakta olduğu ev dizininin içeriği yeni oluşturulan ev dizinine aktarılır.
+
+.TP 
+\fB-e \fR\fIbitiş_tarihi\fR
+Kullanıcı hesabının son kullanma tarihini belirtir. Tarih YYYY-AA-GG (Y: yıl, A: ay, G: gün) şeklinde belirtilir.
+
+.TP 
+\fB-f \fR\fIaskı_süresi\fR
+Kullanıcı parolasının son kullanma tarihinden itibaren, bu hesabın 
+tamamen kapatılacağı tarihe kadar geçecek olan sürenin gün cinsinden değeri belirtilir. Bu değer 0 olarak belirtilirse, parolanın son kullanma tarihinde hesap kapatılır. -1 değeri verilirse, bu özellik iptal edilmiş olur. -1 değeri öntanımlı değerdir. 
+
+.TP 
+\fB-g \fR\fIbirincil_grup\fR
+Kullanıcının üyesi olacağı birincil grubun adı veya numarası belirtilir. Belirtilen grup, sistemde önceden tanımlanmış olmalıdır. Öntanımlı değer 1 dir.
+
+.TP 
+\fB-g \fR\fIgrup\fR[,...]
+Kullanıcının üyesi olacağı ilave gruplar belirtilir. Her grup, diğerinden virgül ile ayrılır, arada boşluk bırakılmaz. Burada tanımlanan gruplar, \fB-g\fR ile tanımlanan grubun kısıtlamalarına tabidirler. Şayet kullanıcı listelenen gruplar haricinde bir grubun da üyesi ise, kullanıcı bu gruptan çıkarılır.  
+
+.TP 
+\fB-l \fR\fIkullanıcı-adı\fR
+Sisteme girişte kullanıcının kullanacağı yeni isim. Sadece isim değişir, başka hiçbir şey değişmez. Kullanıcının ev dizininin ismi, yeni kullanıcı ismi ile bağlantı yapılmasını sağlamak için \fIkullanıcı-adı\fR ile tanımlanan yeni isme dönüşür.
+
+.TP 
+\fB-p \fR\fIparola\fR
+\fBcrypt\fR(3) tarafından döndürülen şifrelenmiş paroladır.
+
+.TP 
+\fB-s \fR\fIkabuk\fR
+Kullanıcının sisteme girişte kullanacağı kabuğun adıdır. Bu alan boş bırakılırsa, sistemin öntanımlı kabuğunun seçilmesi sağlanır. 
+
+.TP 
+\fB-u \fR\fIkull_kiml\fR
+Kullanıcı kimliğinin sayısal değeridir. Bu değer, \fB-o\fR seçeneği kullanılmadığı sürece, eşsiz olmalıdır. Değer mutlaka pozitif bir sayı olmalıdır. 0 ile 99 arsındaki değerler sistem hesapları için ayrılmıştır. Bu değer değiştirildiği zaman; kullanıcının sahip olduğu bütün dosyaların ve kullanıcı ev dizinini kök dizin olarak kabul ederek, kullanıcı ev dizininin altındaki hiyeraşik yapı içindeki bütün dosyaların kullanıcı numarası otomatik olarak değişir. Kullanıcı ev dizininin dışındaki dosyaların kullanıcı iyelik numarası kullanıcı tarafından değiştirilmelidir.
+
+.TP 
+\fB-L\fR
+Kullanıcı parolasını kilitler. Parolayı devre dışı bırakmak için, şifreli parolanın önüne '!'  işareti koyar. Bu seçeneği \fB-p\fR veya \fB-U\fR seçenekleri ile birlikte kullanamazsınız.
+
+.TP 
+\fB-U\fR
+Devre dışı bırakılmış bir kullanıcı parolasını tekrar açar. Yaptığı iş şifreli parolanın önündeki '!' işaretini kaldırmaktır. Bu seçeneği \fB-p\fR veya \fB-L\fR seçenekleri ile birlikte kullanamazsınız.
+
+.PP
+.SH YETERSİZLİKLER
+
+\fBusermod\fR komutu ile, sisteme bağlı bir kullanıcının adını 
+değiştiremezsiniz. Kullanıcının tanımlayıcı numarasını değiştirmeye kalktığınız zaman, kullanıcının herhangi bir süreç çalıştırmadığından emin olun. Herhangi bir \fBcrontab\fR dosyasının sahibini kendiniz değiştirmelisiniz.  Çalışan herhangi bir işin sahibini de kendiniz değiştirmelisiniz. NIS sunuculardaki NIS ile alakalı bütün değişiklikleri kendiniz yapmalısınız
+.SH İLGİLİ DOSYALAR
+
+.nf
+
+\fB/etc/passwd\fR  - kullanıcı hesabı bilgileri
+\fB/etc/shadow\fR  - güvenli kullanıcı hesabı bilgileri
+\fB/etc/group\fR   - grup bilgileri
+
+.fi
+
+
+.SH İLGİLİ BELGELER
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8).
+
+.SH YAZAN
+
+Julianne Frances Haugh <jockgrrl (at) ix.netcom.com> tarafından yazılmıştır.
+
+.SH ÇEVİREN
+
+Yalçın Kolukısa <yalcink01 (at) yahoo.com>, Ocak 2004
+
diff --git a/man/useradd.8 b/man/useradd.8
new file mode 100644 (file)
index 0000000..c8cd147
--- /dev/null
@@ -0,0 +1,649 @@
+'\" t
+.\"     Title: useradd
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "USERADD" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+useradd \- create a new user or update default new user information
+.SH "SYNOPSIS"
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR [\fIoptions\fR] \fILOGIN\fR
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D
+.HP \w'\fBuseradd\fR\ 'u
+\fBuseradd\fR \-D [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+When invoked without the
+\fB\-D\fR
+option, the
+\fBuseradd\fR
+command creates a new user account using the values specified on the command line plus the default values from the system\&. Depending on command line options, the
+\fBuseradd\fR
+command will update system files and may also create the new user\'s home directory and copy initial files\&.
+.PP
+By default, a group will also be created for the new user (see
+\fB\-g\fR,
+\fB\-N\fR,
+\fB\-U\fR, and
+\fBUSERGROUPS_ENAB\fR)\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBuseradd\fR
+command are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR \fIBASE_DIR\fR
+.RS 4
+The default base directory for the system if
+\fB\-d\fR
+\fIHOME_DIR\fR
+is not specified\&.
+\fIBASE_DIR\fR
+is concatenated with the account name to define the home directory\&. If the
+\fB\-m\fR
+option is not used,
+\fIBASE_DIR\fR
+must exist\&.
+.sp
+If this option is not specified,
+\fBuseradd\fR
+will use the base directory specified by the
+\fBHOME\fR
+variable in
+/etc/default/useradd, or
+/home
+by default\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR \fICOMMENT\fR
+.RS 4
+Any text string\&. It is generally a short description of the login, and is currently used as the field for the user\'s full name\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR \fIHOME_DIR\fR
+.RS 4
+The new user will be created using
+\fIHOME_DIR\fR
+as the value for the user\'s login directory\&. The default is to append the
+\fILOGIN\fR
+name to
+\fIBASE_DIR\fR
+and use that as the login directory name\&. The directory
+\fIHOME_DIR\fR
+does not have to exist but will not be created if it is missing\&.
+.RE
+.PP
+\fB\-D\fR, \fB\-\-defaults\fR
+.RS 4
+See below, the subsection "Changing the default values"\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR \fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default expiry date specified by the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd, or an empty string (no expiry) by default\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR \fIINACTIVE\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&. A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.sp
+If not specified,
+\fBuseradd\fR
+will use the default inactivity period specified by the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd, or \-1 by default\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGROUP\fR
+.RS 4
+The group name or number of the user\'s initial login group\&. The group name must exist\&. A group number must refer to an already existing group\&.
+.sp
+If not specified, the bahavior of
+\fBuseradd\fR
+will depend on the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&. If this variable is set to
+\fIyes\fR
+(or
+\fB\-U/\-\-user\-group\fR
+is specified on the command line), a group will be created for the user, with the same name as her loginname\&. If the variable is set to
+\fIno\fR
+(or
+\fB\-N/\-\-no\-user\-group\fR
+is specified on the command line), useradd will set the primary group of the new user to the value specified by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd, or 100 by default\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR \fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&. The default is for the user to belong only to the initial group\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-k\fR, \fB\-\-skel\fR \fISKEL_DIR\fR
+.RS 4
+The skeleton directory, which contains files and directories to be copied in the user\'s home directory, when the home directory is created by
+\fBuseradd\fR\&.
+.sp
+This option is only valid if the
+\fB\-m\fR
+(or
+\fB\-\-create\-home\fR) option is specified\&.
+.sp
+If this option is not set, the skeleton directory is defined by the
+\fBSKEL\fR
+variable in
+/etc/default/useradd
+or, by default,
+/etc/skel\&.
+.RE
+.PP
+\fB\-K\fR, \fB\-\-key\fR \fIKEY\fR=\fIVALUE\fR
+.RS 4
+Overrides
+/etc/login\&.defs
+defaults (\fBUID_MIN\fR,
+\fBUID_MAX\fR,
+\fBUMASK\fR,
+\fBPASS_MAX_DAYS\fR
+and others)\&.
+
+Example:
+\fB\-K \fR\fIPASS_MAX_DAYS\fR=\fI\-1\fR
+can be used when creating system account to turn off password ageing, even though system account has no password at all\&. Multiple
+\fB\-K\fR
+options can be specified, e\&.g\&.:
+\fB\-K \fR
+\fIUID_MIN\fR=\fI100\fR
+\fB\-K \fR
+\fIUID_MAX\fR=\fI499\fR
+.sp
+Note:
+\fB\-K \fR
+\fIUID_MIN\fR=\fI10\fR,\fIUID_MAX\fR=\fI499\fR
+doesn\'t work yet\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-no\-log\-init\fR
+.RS 4
+Do not add the user to the lastlog and faillog databases\&.
+.sp
+By default, the user\'s entries in the lastlog and faillog databases are resetted to avoid reusing the entry from a previously deleted user\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-create\-home\fR
+.RS 4
+Create the user\'s home directory if it does not exist\&. The files and directories contained in the skeleton directory (which can be defined with the
+\fB\-k\fR
+option) will be copied to the home directory\&.
+.sp
+By default, no home directories are created\&.
+.RE
+.PP
+\fB\-M\fR
+.RS 4
+Do no create the user\'s home directory, even if the system wide setting from
+/etc/login\&.defs
+(\fBCREATE_HOME\fR) is set to
+\fIyes\fR\&.
+.RE
+.PP
+\fB\-N\fR, \fB\-\-no\-user\-group\fR
+.RS 4
+Do not create a group with the same name as the user, but add the user to the group specified by the
+\fB\-g\fR
+option or by the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+Allow the creation of a user account with a duplicate (non\-unique) UID\&.
+.sp
+This option is only valid in combination with the
+\fB\-o\fR
+option\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR \fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&. The default is to disable the password\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-system\fR
+.RS 4
+Create a system account\&.
+.sp
+System users will be created with no aging information in
+/etc/shadow, and their numeric identifiers are choosen in the
+\fBSYS_UID_MIN\fR\-\fBSYS_UID_MAX\fR
+range, defined in
+/etc/login\&.defs, instead of
+\fBUID_MIN\fR\-\fBUID_MAX\fR
+(and their
+\fBGID\fR
+counterparts for the creation of groups)\&.
+.sp
+Note that
+\fBuseradd\fR
+will not create a home directory for such an user, regardless of the default setting in
+/etc/login\&.defs
+(\fBCREATE_HOME\fR)\&. You have to specify the
+\fB\-m\fR
+options if you want a home directory for a system account to be created\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fISHELL\fR
+.RS 4
+The name of the user\'s login shell\&. The default is to leave this field blank, which causes the system to select the default login shell specified by the
+\fBSHELL\fR
+variable in
+/etc/default/useradd, or an empty string by default\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR \fIUID\fR
+.RS 4
+The numerical value of the user\'s ID\&. This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. The default is to use the smallest ID value greater than 999 and greater than every other user\&. Values between 0 and 999 are typically reserved for system accounts\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-user\-group\fR
+.RS 4
+Create a group with the same name as the user, and add the user to this group\&.
+.sp
+The default behavior (if the
+\fB\-g\fR,
+\fB\-N\fR, and
+\fB\-U\fR
+options are not specified) is defined by the
+\fBUSERGROUPS_ENAB\fR
+variable in
+/etc/login\&.defs\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR \fISEUSER\fR
+.RS 4
+The SELinux user for the user\'s login\&. The default is to leave this field blank, which causes the system to select the default SELinux user\&.
+.RE
+.SS "Changing the default values"
+.PP
+When invoked with only the
+\fB\-D\fR
+option,
+\fBuseradd\fR
+will display the current default values\&. When invoked with
+\fB\-D\fR
+plus other options,
+\fBuseradd\fR
+will update the default values for the specified options\&. Valid default\-changing options are:
+.PP
+\fB\-b\fR, \fB\-\-base\-dir\fR \fIBASE_DIR\fR
+.RS 4
+The path prefix for a new user\'s home directory\&. The user\'s name will be affixed to the end of
+\fIBASE_DIR\fR
+to form the new user\'s home directory name, if the
+\fB\-d\fR
+option is not used when creating a new account\&.
+.sp
+This option sets the
+\fBHOME\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR \fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account is disabled\&.
+.sp
+This option sets the
+\fBEXPIRE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR \fIINACTIVE\fR
+.RS 4
+The number of days after a password has expired before the account will be disabled\&.
+.sp
+This option sets the
+\fBINACTIVE\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGROUP\fR
+.RS 4
+The group name or ID for a new user\'s initial group (when the
+\fB\-N/\-\-no\-user\-group\fR
+is used or when the
+\fBUSERGROUPS_ENAB\fR
+variable is set to
+\fIno\fR
+in
+/etc/login\&.defs\&. The named group must exist, and a numerical group ID must have an existing entry\&.
+.sp
+This option sets the
+\fBGROUP\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fISHELL\fR
+.RS 4
+The name of a new user\'s login shell\&.
+.sp
+This option sets the
+\fBSHELL\fR
+variable in
+/etc/default/useradd\&.
+.RE
+.SH "NOTES"
+.PP
+The system administrator is responsible for placing the default user files in the
+/etc/skel/
+directory (or any other skeleton directory specified in
+/etc/default/useradd
+or on the command line)\&.
+.SH "CAVEATS"
+.PP
+You may not add a user to a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+.PP
+Similarly, if the username already exists in an external user database such as NIS or LDAP,
+\fBuseradd\fR
+will deny the user account creation request\&.
+.PP
+Usernames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+.PP
+Usernames may only be up to 32 characters long\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBCREATE_HOME\fR (boolean)
+.RS 4
+Indicate if a home directory should be created by default for new users\&.
+.sp
+This setting does not apply to system users, and can be overriden on the command line\&.
+.RE
+.PP
+\fBGID_MAX\fR (number), \fBGID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of regular groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBPASS_MAX_DAYS\fR (number)
+.RS 4
+The maximum number of days a password may be used\&. If the password is older than this, a password change will be forced\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_MIN_DAYS\fR (number)
+.RS 4
+The minimum number of days allowed between password changes\&. Any password changes attempted sooner than this will be rejected\&. If not specified, \-1 will be assumed (which disables the restriction)\&.
+.RE
+.PP
+\fBPASS_WARN_AGE\fR (number)
+.RS 4
+The number of days warning given before a password expires\&. A zero means warning is given only upon the day of expiration, a negative value means no warning is given\&. If not specified, no warning will be provided\&.
+.RE
+.PP
+\fBSYS_GID_MAX\fR (number), \fBSYS_GID_MIN\fR (number)
+.RS 4
+Range of group IDs used for the creation of system groups by
+\fBuseradd\fR,
+\fBgroupadd\fR, or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBSYS_UID_MAX\fR (number), \fBSYS_UID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of system users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUID_MAX\fR (number), \fBUID_MIN\fR (number)
+.RS 4
+Range of user IDs used for the creation of regular users by
+\fBuseradd\fR
+or
+\fBnewusers\fR\&.
+.RE
+.PP
+\fBUMASK\fR (number)
+.RS 4
+The file mode creation mask is initialized to this value\&. If not specified, the mask will be initialized to 022\&.
+.sp
+
+\fBuseradd\fR
+and
+\fBnewusers\fR
+use this mask to set the mode of the home directory they create
+.sp
+It is also used by
+\fBlogin\fR
+to define users\' initial umask\&. Note that this mask can be overriden by the user\'s GECOS line (if
+\fBQUOTAS_ENAB\fR
+is set) or by the specification of a limit with the
+\fIK\fR
+identifier in
+\fBlimits\fR(5)\&.
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILES"
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/default/useradd
+.RS 4
+Default values for account creation\&.
+.RE
+.PP
+/etc/skel/
+.RS 4
+Directory containing default files\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBuseradd\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\'t update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI3\fR
+.RS 4
+invalid argument to option
+.RE
+.PP
+\fI4\fR
+.RS 4
+UID already in use (and no
+\fB\-o\fR)
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified group doesn\'t exist
+.RE
+.PP
+\fI9\fR
+.RS 4
+username already in use
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\'t update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\'t create home directory
+.RE
+.PP
+\fI13\fR
+.RS 4
+can\'t create mail spool
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBnewusers\fR(8),
+\fBuserdel\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/useradd.8.xml b/man/useradd.8.xml
new file mode 100644 (file)
index 0000000..5dec989
--- /dev/null
@@ -0,0 +1,798 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1991 - 1994, Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY CREATE_HOME           SYSTEM "login.defs.d/CREATE_HOME.xml">
+<!ENTITY GID_MAX               SYSTEM "login.defs.d/GID_MAX.xml">
+<!ENTITY MAIL_DIR              SYSTEM "login.defs.d/MAIL_DIR.xml">
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!ENTITY PASS_MAX_DAYS         SYSTEM "login.defs.d/PASS_MAX_DAYS.xml">
+<!ENTITY PASS_MIN_DAYS         SYSTEM "login.defs.d/PASS_MIN_DAYS.xml">
+<!ENTITY PASS_WARN_AGE         SYSTEM "login.defs.d/PASS_WARN_AGE.xml">
+<!ENTITY SYS_GID_MAX           SYSTEM "login.defs.d/SYS_GID_MAX.xml">
+<!ENTITY SYS_UID_MAX           SYSTEM "login.defs.d/SYS_UID_MAX.xml">
+<!ENTITY UID_MAX               SYSTEM "login.defs.d/UID_MAX.xml">
+<!ENTITY UMASK                 SYSTEM "login.defs.d/UMASK.xml">
+<!ENTITY USERGROUPS_ENAB       SYSTEM "login.defs.d/USERGROUPS_ENAB.xml">
+]>
+<refentry id='useradd.8'>
+  <!--  $Id: useradd.8.xml 2964 2009-05-21 12:02:12Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>useradd</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>useradd</refname>
+    <refpurpose>create a new user or update default new user information</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>useradd</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+      </arg>
+      <arg choice='plain'><replaceable>LOGIN</replaceable></arg>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>useradd</command>
+      <arg choice='plain'>-D </arg>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>useradd</command>
+      <arg choice='plain'>-D </arg>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+      <para>
+       When invoked without the <option>-D</option> option, the
+       <command>useradd</command> command creates a new user account using
+       the values specified on the command line plus the default values from
+       the system. Depending on command line options, the
+       <command>useradd</command> command
+       will update system files and may also create the new user's home
+       directory and copy initial files.
+      </para>
+      <para>
+       By default, a group will also be created for the new user (see
+       <option>-g</option>, <option>-N</option>, <option>-U</option>, and
+       <option>USERGROUPS_ENAB</option>).
+      </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>The options which apply to the <command>useradd</command> command are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-b</option>, <option>--base-dir</option>
+         <replaceable>BASE_DIR</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The default base directory for the system if <option>-d</option>
+           <replaceable>HOME_DIR</replaceable> is not specified.
+           <replaceable>BASE_DIR</replaceable> is
+           concatenated with the account name to define the home directory. 
+           If the <option>-m</option> option is not used,
+           <replaceable>BASE_DIR</replaceable> must exist.
+         </para>
+         <para>
+           If this option is not specified, <command>useradd</command>
+           will use the base directory specified by the
+           <option>HOME</option> variable in
+           <filename>/etc/default/useradd</filename>, or
+           <filename>/home</filename> by default.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-c</option>, <option>--comment</option>
+         <replaceable>COMMENT</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Any text string. It is generally a short description of the
+           login, and is currently used as the field for the user's full
+           name.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-d</option>, <option>--home</option>
+         <replaceable>HOME_DIR</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The new user will be created using
+           <replaceable>HOME_DIR</replaceable> as the value for the user's
+           login directory. The default is to append the
+           <replaceable>LOGIN</replaceable> name to
+           <replaceable>BASE_DIR</replaceable> and use that as the login
+           directory name. The directory <replaceable>HOME_DIR</replaceable>
+           does not have to exist but will not be created if it is missing.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-D</option>, <option>--defaults</option>
+       </term>
+       <listitem>
+         <para>
+           See below, the subsection "Changing the default values".
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-e</option>, <option>--expiredate</option>
+         <replaceable>EXPIRE_DATE</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The date on which the user account will be disabled. The date is
+           specified in the format <emphasis remap='I'>YYYY-MM-DD</emphasis>.
+         </para>
+         <para>
+           If not specified, <command>useradd</command> will use the
+           default expiry date specified by the <option>EXPIRE</option>
+           variable in <filename>/etc/default/useradd</filename>, or
+           an empty string (no expiry) by default.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-f</option>, <option>--inactive</option>
+         <replaceable>INACTIVE</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The number of days after a password expires until the account is
+           permanently disabled. A value of 0 disables the account as soon
+           as the password has expired, and a value of -1 disables the
+           feature.
+         </para>
+         <para>
+           If not specified, <command>useradd</command> will use the
+           default inactivity period specified by the
+           <option>INACTIVE</option> variable in
+           <filename>/etc/default/useradd</filename>, or -1 by default.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-g</option>, <option>--gid</option>
+         <replaceable>GROUP</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The group name or number of the user's initial login group. The
+           group name must exist. A group number must refer to an already
+           existing group.
+         </para>
+         <para>
+           If not specified, the bahavior of <command>useradd</command>
+           will depend on the <option>USERGROUPS_ENAB</option> variable
+           in <filename>/etc/login.defs</filename>. If this variable is
+           set to <replaceable>yes</replaceable> (or
+           <option>-U/--user-group</option> is specified on the command
+           line), a group will be created for the user, with the same
+           name as her loginname. If the variable is set to
+           <replaceable>no</replaceable> (or
+           <option>-N/--no-user-group</option> is specified on the
+           command line), useradd will set the primary group of the new
+           user to the value specified by the <option>GROUP</option>
+           variable in <filename>/etc/default/useradd</filename>, or
+           100 by default.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-G</option>, <option>--groups</option>
+         <replaceable>GROUP1</replaceable>[<emphasis remap='I'>,GROUP2,...</emphasis>[<emphasis remap='I'>,GROUPN</emphasis>]]]
+       </term>
+       <listitem>
+         <para>
+           A list of supplementary groups which the user is also a member
+           of. Each group is separated from the next by a comma, with no
+           intervening whitespace. The groups are subject to the same
+           restrictions as the group given with the <option>-g</option>
+           option. The default is for the user to belong only to the
+           initial group.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-h</option>, <option>--help</option></term>
+       <listitem>
+         <para>Display help message and exit.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-k</option>, <option>--skel</option>
+         <replaceable>SKEL_DIR</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The skeleton directory, which contains files and directories
+           to be copied in the user's home directory, when the home
+           directory is created by <command>useradd</command>.
+         </para>
+         <para>
+           This option is only valid if the <option>-m</option> (or
+           <option>--create-home</option>) option is specified.
+         </para>
+         <para>
+           If this option is not set, the skeleton directory is defined
+           by the <option>SKEL</option> variable in
+           <filename>/etc/default/useradd</filename> or, by default,
+           <filename>/etc/skel</filename>.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-K</option>, <option>--key</option>
+         <replaceable>KEY</replaceable>=<replaceable>VALUE</replaceable>
+       </term>
+       <listitem>
+         <para>
+           Overrides <filename>/etc/login.defs</filename> defaults
+           (<option>UID_MIN</option>, <option>UID_MAX</option>,
+           <option>UMASK</option>, <option>PASS_MAX_DAYS</option>
+           and others).
+         <para>
+         </para>
+           Example: <option>-K </option><replaceable>PASS_MAX_DAYS</replaceable>=<replaceable>-1</replaceable>
+           can be used when creating system account to turn off password
+           ageing, even though system account has no password at all.
+           Multiple <option>-K</option> options can be specified, e.g.:
+           <option>-K </option>
+           <replaceable>UID_MIN</replaceable>=<replaceable>100</replaceable>
+           <option>-K </option>
+           <replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>
+         </para>
+         <para>
+           Note: <option>-K </option>
+           <replaceable>UID_MIN</replaceable>=<replaceable>10</replaceable>,<replaceable>UID_MAX</replaceable>=<replaceable>499</replaceable>
+           doesn't work yet.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-l</option>, <option>--no-log-init</option></term>
+       <listitem>
+         <para>
+           Do not add the user to the lastlog and faillog databases.
+         </para>
+         <para>
+           By default, the user's entries in the lastlog and faillog
+           databases are resetted to avoid reusing the entry from a previously
+           deleted user.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-m</option>, <option>--create-home</option>
+       </term>
+       <listitem>
+         <para>
+           Create the user's home directory if it does not exist. 
+           The files and directories contained in the skeleton directory
+           (which can be defined with the <option>-k</option> option)
+           will be copied to the home directory.
+         </para>
+         <para>
+           By default, no home directories are created.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-M</option>
+       </term>
+       <listitem>
+         <para>
+           Do no create the user's home directory, even if the system
+           wide setting from <filename>/etc/login.defs</filename>
+           (<option>CREATE_HOME</option>) is set to
+           <replaceable>yes</replaceable>.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-N</option>, <option>--no-user-group</option>
+       </term>
+       <listitem>
+         <para>
+           Do not create a group with the same name as the user, but
+           add the user to the group specified by the <option>-g</option>
+           option or by the <option>GROUP</option> variable in
+           <filename>/etc/default/useradd</filename>.
+         </para>
+         <para>
+           The default behavior (if the <option>-g</option>,
+           <option>-N</option>, and <option>-U</option> options are not
+           specified) is defined by the <option>USERGROUPS_ENAB</option>
+           variable in <filename>/etc/login.defs</filename>.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-o</option>, <option>--non-unique</option>
+       </term>
+       <listitem>
+         <para>Allow the creation of a user account with a duplicate (non-unique) UID.</para>
+         <para>
+           This option is only valid in combination with the
+           <option>-o</option> option.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-p</option>, <option>--password</option>
+         <replaceable>PASSWORD</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The encrypted password, as returned by <citerefentry>
+           <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+           </citerefentry>. The default is to disable the password.
+         </para>
+         <para>
+           <emphasis role="bold">Note:</emphasis> This option is not
+           recommended because the password (or encrypted password) will
+           be visible by users listing the processes.
+         </para>
+         <para>
+           You should make sure the password respects the system's
+           password policy.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-r</option>, <option>--system</option>
+       </term>
+       <listitem>
+         <para>
+           Create a system account.
+         </para>
+         <para>
+           System users will be created with no aging information in
+           <filename>/etc/shadow</filename>, and their numeric
+           identifiers are choosen in the
+           <option>SYS_UID_MIN</option>-<option>SYS_UID_MAX</option>
+           range, defined in <filename>/etc/login.defs</filename>, instead of
+           <option>UID_MIN</option>-<option>UID_MAX</option> (and their
+           <option>GID</option> counterparts for the creation of groups).
+         </para>
+         <para>
+           Note that <command>useradd</command> will not create a home
+           directory for such an user, regardless of the default setting
+           in <filename>/etc/login.defs</filename>
+           (<option>CREATE_HOME</option>). You have to specify the
+           <option>-m</option> options if you want a home directory for a
+           system account to be created.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-s</option>, <option>--shell</option>
+         <replaceable>SHELL</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The name of the user's login shell. The default is to leave this
+           field blank, which causes the system to select the default login
+           shell specified by the <option>SHELL</option> variable in
+           <filename>/etc/default/useradd</filename>, or an empty string
+           by default.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-u</option>, <option>--uid</option>
+         <replaceable>UID</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The numerical value of the user's ID. This value must be unique,
+           unless the <option>-o</option> option is used. The value must be
+           non-negative. The default is to use the smallest ID value
+           greater than 999 and greater than every other user. Values
+           between 0 and 999 are typically reserved for system accounts.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-U</option>, <option>--user-group</option>
+       </term>
+       <listitem>
+         <para>
+           Create a group with the same name as the user, and
+           add the user to this group.
+         </para>
+         <para>
+           The default behavior (if the <option>-g</option>,
+           <option>-N</option>, and <option>-U</option> options are not
+           specified) is defined by the <option>USERGROUPS_ENAB</option>
+           variable in <filename>/etc/login.defs</filename>.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-Z</option>, <option>--selinux-user</option>
+         <replaceable>SEUSER</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The SELinux user for the user's login. The default is to leave this
+           field blank, which causes the system to select the default SELinux
+            user.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+
+    <refsect2 id='changing_the_default_values'>
+      <title>Changing the default values</title>
+      <para>
+       When invoked with only the <option>-D</option> option,
+       <command>useradd</command> will display the current default values.
+       When invoked with <option>-D</option> plus other options,
+       <command>useradd</command> will update the default values for the
+       specified options. Valid default-changing options are:
+      </para>
+      <variablelist remap='IP'>
+       <varlistentry>
+         <term>
+           <option>-b</option>, <option>--base-dir</option>
+           <replaceable>BASE_DIR</replaceable>
+         </term>
+         <listitem>
+           <para>
+             The path prefix for a new user's home directory. The
+             user's name will be affixed to the end of
+             <replaceable>BASE_DIR</replaceable> to form the new user's
+             home directory name, if the <option>-d</option> option is not used
+             when creating a new account.
+           </para>
+           <para>
+             This option sets the <option>HOME</option> variable in
+             <filename>/etc/default/useradd</filename>.
+           </para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term>
+           <option>-e</option>, <option>--expiredate</option>
+           <replaceable>EXPIRE_DATE</replaceable>
+         </term>
+         <listitem>
+           <para>The date on which the user account is disabled.</para>
+           <para>
+             This option sets the <option>EXPIRE</option> variable in
+             <filename>/etc/default/useradd</filename>.
+           </para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term>
+           <option>-f</option>, <option>--inactive</option>
+           <replaceable>INACTIVE</replaceable>
+         </term>
+         <listitem>
+           <para>
+             The number of days after a password has expired before the
+             account will be disabled.
+           </para>
+           <para>
+             This option sets the <option>INACTIVE</option> variable in
+             <filename>/etc/default/useradd</filename>.
+           </para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term>
+           <option>-g</option>, <option>--gid</option>
+           <replaceable>GROUP</replaceable>
+         </term>
+         <listitem>
+           <para>
+             The group name or ID for a new user's initial group (when
+             the <option>-N/--no-user-group</option> is used or when the
+             <option>USERGROUPS_ENAB</option> variable is set to
+             <replaceable>no</replaceable> in
+             <filename>/etc/login.defs</filename>. The named
+             group must exist, and a numerical group ID must have an
+             existing entry.
+           </para>
+           <para>
+             This option sets the <option>GROUP</option> variable in
+             <filename>/etc/default/useradd</filename>.
+           </para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term>
+           <option>-s</option>, <option>--shell</option>
+           <replaceable>SHELL</replaceable>
+         </term>
+         <listitem>
+           <para>
+             The name of a new user's login shell.
+           </para>
+           <para>
+             This option sets the <option>SHELL</option> variable in
+             <filename>/etc/default/useradd</filename>.
+           </para>
+         </listitem>
+       </varlistentry>
+      </variablelist>
+
+    </refsect2>
+  </refsect1>
+
+  <refsect1 id='notes'>
+    <title>NOTES</title>
+    <para>The system administrator is responsible for placing the default
+      user files in the <filename>/etc/skel/</filename> directory (or any
+      other skeleton directory specified in
+      <filename>/etc/default/useradd</filename> or on the command line).
+    </para>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      You may not add a user to a NIS or LDAP group. This must be
+      performed on the corresponding server.
+    </para>
+
+    <para>
+      Similarly, if the username already exists in an external user
+      database such as NIS or LDAP, <command>useradd</command> will deny
+      the user account creation request.
+    </para>
+
+    <para>
+      Usernames must start with a lower case letter or an underscore,
+      followed by lower case letters, digits, underscores, or dashes.
+      They can end with a dollar sign.
+      In regular expression terms: [a-z_][a-z0-9_-]*[$]?
+    </para>
+    <para>
+      Usernames may only be up to 32 characters long.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &CREATE_HOME;
+      &GID_MAX; <!-- documents also GID_MIN -->
+      &MAIL_DIR;
+      &MAX_MEMBERS_PER_GROUP;
+      &PASS_MAX_DAYS;
+      &PASS_MIN_DAYS;
+      &PASS_WARN_AGE;
+      &SYS_GID_MAX; <!-- documents also SYS_GID_MIN -->
+      &SYS_UID_MAX; <!-- documents also SYS_UID_MIN -->
+      &UID_MAX; <!-- documents also UID_MIN -->
+      &UMASK;
+      &USERGROUPS_ENAB;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="gshadow">
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/default/useradd</filename></term>
+       <listitem>
+         <para>Default values for account creation.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/skel/</filename></term>
+       <listitem>
+         <para>Directory containing default files.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='exit_values'>
+    <title>EXIT VALUES</title>
+    <para>
+      The <command>useradd</command> command exits with the following values:
+      <variablelist>
+       <varlistentry>
+         <term><replaceable>0</replaceable></term>
+         <listitem>
+           <para>success</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>1</replaceable></term>
+         <listitem>
+           <para>can't update password file</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>2</replaceable></term>
+         <listitem>
+           <para>invalid command syntax</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>3</replaceable></term>
+         <listitem>
+           <para>invalid argument to option</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>4</replaceable></term>
+         <listitem>
+           <para>UID already in use (and no <option>-o</option>)</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>6</replaceable></term>
+         <listitem>
+           <para>specified group doesn't exist</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>9</replaceable></term>
+         <listitem>
+           <para>username already in use</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>10</replaceable></term>
+         <listitem>
+           <para>can't update group file</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>12</replaceable></term>
+         <listitem>
+           <para>can't create home directory</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>13</replaceable></term>
+         <listitem>
+           <para>can't create mail spool</para>
+         </listitem>
+       </varlistentry>
+      </variablelist>
+    </para>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>newusers</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/userdel.8 b/man/userdel.8
new file mode 100644 (file)
index 0000000..15d1ac8
--- /dev/null
@@ -0,0 +1,267 @@
+'\" t
+.\"     Title: userdel
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "USERDEL" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+userdel \- delete a user account and related files
+.SH "SYNOPSIS"
+.HP \w'\fBuserdel\fR\ 'u
+\fBuserdel\fR [options] \fILOGIN\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBuserdel\fR
+command modifies the system account files, deleting all entries that refer to the user name
+\fILOGIN\fR\&. The named user must exist\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBuserdel\fR
+command are:
+.PP
+\fB\-f\fR, \fB\-\-force\fR
+.RS 4
+This option forces the removal of the user account, even if the user is still logged in\&. It also forces
+\fBuserdel\fR
+to remove the user\'s home directory and mail spool, even if another user uses the same home directory or if the mail spool is not owned by the specified user\&. If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs
+and if a group exists with the same name as the deleted user, then this group will be removed, even if it is still the primary group of another user\&.
+.sp
+
+\fINote:\fR
+This option is dangerous and may leave your system in an inconsistent state\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-r\fR, \fB\-\-remove\fR
+.RS 4
+Files in the user\'s home directory will be removed along with the home directory itself and the user\'s mail spool\&. Files located in other file systems will have to be searched for and deleted manually\&.
+.sp
+The mail spool is defined by the
+\fBMAIL_DIR\fR
+variable in the
+login\&.defs
+file\&.
+.RE
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.PP
+\fBUSERDEL_CMD\fR (string)
+.RS 4
+If defined, this command is run when removing a user\&. It should remove any at/cron/print jobs etc\&. owned by the user to be removed (passed as the first argument)\&.
+.sp
+The return code of the script is not taken into account\&.
+.sp
+Here is an example script, which removes the user\'s cron, at and print jobs:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+#! /bin/sh
+
+# Check for the required argument\&.
+if [ $# != 1 ]; then
+       echo "Usage: $0 username"
+       exit 1
+fi
+
+# Remove cron jobs\&.
+crontab \-r \-u $1
+
+# Remove at jobs\&.
+# Note that it will remove any jobs owned by the same UID,
+# even if it was shared by a different username\&.
+AT_SPOOL_DIR=/var/spool/cron/atjobs
+find $AT_SPOOL_DIR \-name "[^\&.]*" \-type f \-user $1 \-delete \e;
+
+# Remove print jobs\&.
+lprm $1
+
+# All done\&.
+exit 0
+      
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.RE
+.PP
+\fBUSERGROUPS_ENAB\fR (boolean)
+.RS 4
+Enable setting of the umask group bits to be the same as owner bits (examples: 022 \-> 002, 077 \-> 007) for non\-root users, if the uid is the same as gid, and username is the same as the primary group name\&.
+.sp
+If set to
+\fIyes\fR,
+\fBuserdel\fR
+will remove the user\'s group if it contains no more members, and
+\fBuseradd\fR
+will create by default a group with the name of the user\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/login\&.defs
+.RS 4
+Shadow password suite configuration\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "EXIT VALUES"
+.PP
+The
+\fBuserdel\fR
+command exits with the following values:
+.PP
+\fI0\fR
+.RS 4
+success
+.RE
+.PP
+\fI1\fR
+.RS 4
+can\'t update password file
+.RE
+.PP
+\fI2\fR
+.RS 4
+invalid command syntax
+.RE
+.PP
+\fI6\fR
+.RS 4
+specified user doesn\'t exist
+.RE
+.PP
+\fI8\fR
+.RS 4
+user currently logged in
+.RE
+.PP
+\fI10\fR
+.RS 4
+can\'t update group file
+.RE
+.PP
+\fI12\fR
+.RS 4
+can\'t remove home directory
+.RE
+.SH "CAVEATS"
+.PP
+
+\fBuserdel\fR
+will not allow you to remove an account if there are running processes which belong to this account\&. In that case, you may have to kill those processes or lock the user\'s password or account and remove the account later\&. The
+\fB\-f\fR
+option can force the deletion of this account\&.
+.PP
+You should manually check all file systems to ensure that no files remain owned by this user\&.
+.PP
+You may not remove any NIS attributes on a NIS client\&. This must be performed on the NIS server\&.
+.PP
+If
+\fBUSERGROUPS_ENAB\fR
+is defined to
+\fIyes\fR
+in
+/etc/login\&.defs,
+\fBuserdel\fR
+will delete the group with the same name as the user\&. To avoid inconsistencies in the passwd and group databases,
+\fBuserdel\fR
+will check that this group is not used as a primary group for another user, and will just warn without deleting the group otherwise\&. The
+\fB\-f\fR
+option can force the deletion of this group\&.
+.SH "SEE ALSO"
+.PP
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBlogin.defs\fR(5),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBuseradd\fR(8),
+\fBusermod\fR(8)\&.
diff --git a/man/userdel.8.xml b/man/userdel.8.xml
new file mode 100644 (file)
index 0000000..b183612
--- /dev/null
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1991 - 1994, Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY MAIL_DIR              SYSTEM "login.defs.d/MAIL_DIR.xml">
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+<!ENTITY USERDEL_CMD           SYSTEM "login.defs.d/USERDEL_CMD.xml">
+<!ENTITY USERGROUPS_ENAB       SYSTEM "login.defs.d/USERGROUPS_ENAB.xml">
+]>
+<refentry id='userdel.8'>
+  <!-- $Id: userdel.8.xml 2964 2009-05-21 12:02:12Z nekral-guest $ -->
+  <refmeta>
+    <refentrytitle>userdel</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>userdel</refname>
+    <refpurpose>delete a user account and related files</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>userdel</command>
+      <arg choice='opt'>options</arg>
+      <arg choice='plain'>
+       <replaceable>LOGIN</replaceable>
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>userdel</command> command modifies the system account
+      files, deleting all entries that refer to the user name <emphasis
+      remap='I'>LOGIN</emphasis>. The named user must exist.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>userdel</command> command are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term>
+         <option>-f</option>, <option>--force</option>
+       </term>
+       <listitem>
+         <para>
+           This option forces the removal of the user account, even if the
+           user is still
+           logged in. It also forces <command>userdel</command> to remove
+           the user's home directory and mail spool, even if another
+           user uses the same home directory or if the mail spool is not
+           owned by the specified user.  If
+           <option>USERGROUPS_ENAB</option> is defined to <emphasis
+           remap='I'>yes</emphasis> in <filename>/etc/login.defs</filename>
+           and if a group exists with the same name as the deleted user,
+           then this group will be removed, even if it is still the primary
+           group of another user.
+         </para>
+         <para>
+           <emphasis>Note:</emphasis> This option is dangerous and may leave
+           your system in an inconsistent state.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><option>-h</option>, <option>--help</option></term>
+          <listitem>
+           <para>Display help message and exit.</para>
+         </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-r</option>, <option>--remove</option>
+       </term>
+       <listitem>
+         <para>
+           Files in the user's home directory will be removed along with
+           the home directory itself and the user's mail spool. Files
+           located in other file systems will have to be searched for and
+           deleted manually.
+         </para>
+         <para>
+           The mail spool is defined by the <option>MAIL_DIR</option>
+           variable in the <filename>login.defs</filename> file.
+         </para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &MAIL_DIR; <!-- documents also MAIL_FILE -->
+      &MAX_MEMBERS_PER_GROUP;
+      &USERDEL_CMD;
+      &USERGROUPS_ENAB;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/login.defs</filename></term>
+       <listitem>
+         <para>Shadow password suite configuration.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='exit_values'>
+    <title>EXIT VALUES</title>
+    <para>
+      The <command>userdel</command> command exits with the following values:
+      <variablelist>
+       <varlistentry>
+         <term><replaceable>0</replaceable></term>
+         <listitem>
+           <para>success</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>1</replaceable></term>
+         <listitem>
+           <para>can't update password file</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>2</replaceable></term>
+         <listitem>
+           <para>invalid command syntax</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>6</replaceable></term>
+         <listitem>
+           <para>specified user doesn't exist</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>8</replaceable></term>
+         <listitem>
+           <para>user currently logged in</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>10</replaceable></term>
+         <listitem>
+           <para>can't update group file</para>
+         </listitem>
+       </varlistentry>
+       <varlistentry>
+         <term><replaceable>12</replaceable></term>
+         <listitem>
+           <para>can't remove home directory</para>
+         </listitem>
+       </varlistentry>
+      </variablelist>
+    </para>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      <command>userdel</command> will not allow you to remove an account if
+      there are running processes which belong to this account. In that
+      case, you may have to kill those processes or lock the user's
+      password or account and remove the account later. The
+      <option>-f</option> option can force the deletion of this account.
+    </para>
+    <para>
+      You should manually check all file systems to ensure that no files
+      remain owned by this user.
+    </para>
+    <para>You may not remove any NIS attributes on a NIS client. This must
+      be performed on the NIS server.
+    </para>
+    <para>If <option>USERGROUPS_ENAB</option> is defined to <emphasis
+      remap='I'>yes</emphasis> in <filename>/etc/login.defs</filename>,
+      <command>userdel</command> will delete the group with the same name
+      as the user. To avoid inconsistencies in the passwd and group
+      databases, <command>userdel</command> will check that this group is
+      not used as a primary group for another user, and will just warn
+      without deleting the group otherwise. The <option>-f</option> option
+      can force the deletion of this group.
+    </para>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para><citerefentry>
+       <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>usermod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/usermod.8 b/man/usermod.8
new file mode 100644 (file)
index 0000000..a94eddf
--- /dev/null
@@ -0,0 +1,271 @@
+'\" t
+.\"     Title: usermod
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "USERMOD" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+usermod \- modify a user account
+.SH "SYNOPSIS"
+.HP \w'\fBusermod\fR\ 'u
+\fBusermod\fR [\fIoptions\fR] \fILOGIN\fR
+.SH "DESCRIPTION"
+.PP
+The
+\fBusermod\fR
+command modifies the system account files to reflect the changes that are specified on the command line\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBusermod\fR
+command are:
+.PP
+\fB\-a\fR, \fB\-\-append\fR
+.RS 4
+Add the user to the supplementary group(s)\&. Use only with the
+\fB\-G\fR
+option\&.
+.RE
+.PP
+\fB\-c\fR, \fB\-\-comment\fR \fICOMMENT\fR
+.RS 4
+The new value of the user\'s password file comment field\&. It is normally modified using the
+\fBchfn\fR(1)
+utility\&.
+.RE
+.PP
+\fB\-d\fR, \fB\-\-home\fR \fIHOME_DIR\fR
+.RS 4
+The user\'s new login directory\&.
+.sp
+If the
+\fB\-m\fR
+option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist\&.
+.RE
+.PP
+\fB\-e\fR, \fB\-\-expiredate\fR \fIEXPIRE_DATE\fR
+.RS 4
+The date on which the user account will be disabled\&. The date is specified in the format
+\fIYYYY\-MM\-DD\fR\&.
+.RE
+.PP
+\fB\-f\fR, \fB\-\-inactive\fR \fIINACTIVE\fR
+.RS 4
+The number of days after a password expires until the account is permanently disabled\&.
+.sp
+A value of 0 disables the account as soon as the password has expired, and a value of \-1 disables the feature\&.
+.RE
+.PP
+\fB\-g\fR, \fB\-\-gid\fR \fIGROUP\fR
+.RS 4
+The group name or number of the user\'s new initial login group\&. The group must exist\&.
+.RE
+.PP
+\fB\-G\fR, \fB\-\-groups\fR \fIGROUP1\fR[\fI,GROUP2,\&.\&.\&.\fR[\fI,GROUPN\fR]]]
+.RS 4
+A list of supplementary groups which the user is also a member of\&. Each group is separated from the next by a comma, with no intervening whitespace\&. The groups are subject to the same restrictions as the group given with the
+\fB\-g\fR
+option\&.
+.sp
+If the user is currently a member of a group which is not listed, the user will be removed from the group\&. This behaviour can be changed via the
+\fB\-a\fR
+option, which appends the user to the current supplementary group list\&.
+.RE
+.PP
+\fB\-l\fR, \fB\-\-login\fR \fINEW_LOGIN\fR
+.RS 4
+The name of the user will be changed from
+\fILOGIN\fR
+to
+\fINEW_LOGIN\fR\&. Nothing else is changed\&. In particular, the user\'s home directory name should probably be changed manually to reflect the new login name\&.
+.RE
+.PP
+\fB\-L\fR, \fB\-\-lock\fR
+.RS 4
+Lock a user\'s password\&. This puts a \'!\' in front of the encrypted password, effectively disabling the password\&. You can\'t use this option with
+\fB\-p\fR
+or
+\fB\-U\fR\&.
+.sp
+Note: if you wish to lock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+to
+\fI1\fR\&.
+.RE
+.PP
+\fB\-m\fR, \fB\-\-move\-home\fR
+.RS 4
+Move the content of the user\'s home directory to the new location\&.
+.sp
+This option is only valid in combination with the
+\fB\-d\fR
+(or
+\fB\-\-home\fR) option\&.
+.RE
+.PP
+\fB\-o\fR, \fB\-\-non\-unique\fR
+.RS 4
+When used with the
+\fB\-u\fR
+option, this option allows to change the user ID to a non\-unique value\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-password\fR \fIPASSWORD\fR
+.RS 4
+The encrypted password, as returned by
+\fBcrypt\fR(3)\&.
+.sp
+
+\fBNote:\fR
+This option is not recommended because the password (or encrypted password) will be visible by users listing the processes\&.
+.sp
+You should make sure the password respects the system\'s password policy\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shell\fR \fISHELL\fR
+.RS 4
+The name of the user\'s new login shell\&. Setting this field to blank causes the system to select the default login shell\&.
+.RE
+.PP
+\fB\-u\fR, \fB\-\-uid\fR \fIUID\fR
+.RS 4
+The new numerical value of the user\'s ID\&.
+.sp
+This value must be unique, unless the
+\fB\-o\fR
+option is used\&. The value must be non\-negative\&. Values between 0 and 999 are typically reserved for system accounts\&.
+.sp
+The user\'s mailbox, and any files which the user owns and which are located in the user\'s home directory will have the file user ID changed automatically\&.
+.sp
+The ownership of files outside of the user\'s home directory must be fixed manually\&.
+.RE
+.PP
+\fB\-U\fR, \fB\-\-unlock\fR
+.RS 4
+Unlock a user\'s password\&. This removes the \'!\' in front of the encrypted password\&. You can\'t use this option with
+\fB\-p\fR
+or
+\fB\-L\fR\&.
+.sp
+Note: if you wish to unlock the account (not only access with a password), you should also set the
+\fIEXPIRE_DATE\fR
+(for example to
+\fI99999\fR, or to the
+\fBEXPIRE\fR
+value from
+/etc/default/useradd)\&.
+.RE
+.PP
+\fB\-Z\fR, \fB\-\-selinux\-user\fR \fISEUSER\fR
+.RS 4
+The SELinux user for the user\'s login\&. The default is to leave this field the blank, which causes the system to select the default SELinux user\&.
+.RE
+.SH "CAVEATS"
+.PP
+You must make certain that the named user is not executing any processes when this command is being executed if the user\'s numerical user ID, the user\'s name, or the user\'s home directory is being changed\&.
+\fBusermod\fR
+checks this on Linux, but only check if the user is logged in according to utmp on other architectures\&.
+.PP
+You must change the owner of any
+\fBcrontab\fR
+files or
+\fBat\fR
+jobs manually\&.
+.PP
+You must make any changes involving NIS on the NIS server\&.
+.SH "CONFIGURATION"
+.PP
+The following configuration variables in
+/etc/login\&.defs
+change the behavior of this tool:
+.PP
+\fBMAIL_DIR\fR (string)
+.RS 4
+The mail spool directory\&. This is needed to manipulate the mailbox when its corresponding user account is modified or deleted\&. If not specified, a compile\-time default is used\&.
+.RE
+.PP
+\fBMAIL_FILE\fR (string)
+.RS 4
+Defines the location of the users mail spool files relatively to their home directory\&.
+.RE
+.PP
+The
+\fBMAIL_DIR\fR
+and
+\fBMAIL_FILE\fR
+variables are used by
+\fBuseradd\fR,
+\fBusermod\fR, and
+\fBuserdel\fR
+to create, move, or delete the user\'s mail spool\&.
+.PP
+If
+\fBMAIL_CHECK_ENAB\fR
+is set to
+\fIyes\fR, they are also used to define the
+\fBMAIL\fR
+environment variable\&.
+.PP
+\fBMAX_MEMBERS_PER_GROUP\fR (number)
+.RS 4
+Maximum members per group entry\&. When the maximum is reached, a new group entry (line) is started in
+/etc/group
+(with the same name, same password, and same GID)\&.
+.sp
+The default value is 0, meaning that there are no limits in the number of members in a group\&.
+.sp
+This feature (split group) permits to limit the length of lines in the group file\&. This is useful to make sure that lines for NIS groups are not larger than 1024 characters\&.
+.sp
+If you need to enforce such limit, you can use 25\&.
+.sp
+Note: split groups may not be supported by all tools (even in the Shadow toolsuite)\&. You should not use this variable unless you really need it\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBchfn\fR(1),
+\fBchsh\fR(1),
+\fBpasswd\fR(1),
+\fBcrypt\fR(3),
+\fBgpasswd\fR(8),
+\fBgroupadd\fR(8),
+\fBgroupdel\fR(8),
+\fBgroupmod\fR(8),
+\fBlogin.defs\fR(5),
+\fBuseradd\fR(8),
+\fBuserdel\fR(8)\&.
diff --git a/man/usermod.8.xml b/man/usermod.8.xml
new file mode 100644 (file)
index 0000000..82951e1
--- /dev/null
@@ -0,0 +1,439 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1991 - 1994, Julianne Frances Haugh
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY MAIL_DIR              SYSTEM "login.defs.d/MAIL_DIR.xml">
+<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
+]>
+<refentry id='usermod.8'>
+  <!--  $Id: usermod.8.xml 2964 2009-05-21 12:02:12Z nekral-guest $  -->
+  <refmeta>
+    <refentrytitle>usermod</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>usermod</refname>
+    <refpurpose>modify a user account</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>usermod</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>
+      </arg>
+      <arg choice='plain'><replaceable>LOGIN</replaceable></arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>usermod</command> command modifies the system account
+      files to reflect the changes that are specified on the command line.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>usermod</command> command
+      are:
+    </para>
+    <variablelist>
+      <varlistentry>
+       <term>
+         <option>-a</option>, <option>--append</option>
+       </term>
+       <listitem>
+         <para>
+           Add the user to the supplementary group(s). Use only with the
+           <option>-G</option> option.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-c</option>, <option>--comment</option>
+         <replaceable>COMMENT</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The new value of the user's password file comment field. It is
+           normally modified using the <citerefentry>
+           <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+           </citerefentry> utility.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-d</option>, <option>--home</option>
+         <replaceable>HOME_DIR</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The user's new login directory.
+         </para>
+         <para>
+           If the <option>-m</option>
+           option is given, the contents of the current home directory will
+           be moved to the new home directory, which is created if it does
+           not already exist.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-e</option>, <option>--expiredate</option>
+         <replaceable>EXPIRE_DATE</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The date on which the user account will be disabled. The date is
+           specified in the format <emphasis remap='I'>YYYY-MM-DD</emphasis>.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-f</option>, <option>--inactive</option>
+         <replaceable>INACTIVE</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The number of days after a password expires until the account is
+           permanently disabled.
+         </para>
+         <para>
+           A value of 0 disables the account as soon
+           as the password has expired, and a value of -1 disables the
+           feature.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-g</option>, <option>--gid</option>
+         <replaceable>GROUP</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The group name or number of the user's new initial login group.
+           The group must exist.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-G</option>, <option>--groups</option>
+         <replaceable>GROUP1</replaceable>[<emphasis remap='I'>,GROUP2,...</emphasis>[<emphasis remap='I'>,GROUPN</emphasis>]]]
+       </term>
+       <listitem>
+         <para>
+           A list of supplementary groups which the user is also a member
+           of. Each group is separated from the next by a comma, with no
+           intervening whitespace. The groups are subject to the same
+           restrictions as the group given with the <option>-g</option>
+           option.
+         </para>
+         <para>
+           If the user is currently a member of a group which is
+           not listed, the user will be removed from the group. This
+           behaviour can be changed via the <option>-a</option> option, which
+           appends the user to the current supplementary group list.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-l</option>, <option>--login</option>
+         <replaceable>NEW_LOGIN</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The name of the user will be changed from
+           <replaceable>LOGIN</replaceable> to
+           <replaceable>NEW_LOGIN</replaceable>. Nothing else is changed. In
+           particular, the user's home directory name should probably be
+           changed manually to reflect the new login name.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-L</option>, <option>--lock</option>
+       </term>
+       <listitem>
+         <para>
+           Lock a user's password. This puts a '!' in front of the
+           encrypted password, effectively disabling the password. You
+           can't use this option with <option>-p</option> or
+           <option>-U</option>.
+         </para>
+         <para>
+           Note: if you wish to lock the account (not only access with a
+           password), you should also set the
+           <replaceable>EXPIRE_DATE</replaceable> to
+           <replaceable>1</replaceable>.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-m</option>, <option>--move-home</option>
+       </term>
+       <listitem>
+         <para>
+           Move the content of the user's home directory to the new
+           location.
+         </para>
+         <para>
+           This option is only valid in combination with the
+           <option>-d</option> (or <option>--home</option>) option.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-o</option>, <option>--non-unique</option>
+       </term>
+       <listitem>
+         <para>
+           When used with the <option>-u</option> option, this option
+           allows to change the user ID to a non-unique value.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-p</option>, <option>--password</option>
+         <replaceable>PASSWORD</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The encrypted password, as returned by <citerefentry>
+           <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+           </citerefentry>.
+         </para>
+         <para>
+           <emphasis role="bold">Note:</emphasis> This option is not
+           recommended because the password (or encrypted password) will
+           be visible by users listing the processes.
+         </para>
+         <para condition="pam">
+           The password will be written in the local
+           <filename>/etc/passwd</filename> or
+           <filename>/etc/shadow</filename> file. This might differ from the
+           password database configured in your PAM configuration.
+         </para>
+         <para>
+           You should make sure the password respects the system's
+           password policy.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-s</option>, <option>--shell</option>
+         <replaceable>SHELL</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The name of the user's new login shell. Setting this field to
+           blank causes the system to select the default login shell.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-u</option>, <option>--uid</option>
+         <replaceable>UID</replaceable>
+       </term>
+       <listitem>
+         <para>
+           The new numerical value of the user's ID.
+         </para>
+         <para>
+           This value must be unique,
+           unless the <option>-o</option> option is used. The value must be
+           non-negative. Values between 0 and 999 are typically reserved
+           for system accounts.
+         </para>
+         <para>
+           The user's mailbox, and any files which the user owns and which are
+           located in the user's home
+           directory will have the file user ID changed automatically.
+         </para>
+         <para>
+           The ownership of files outside of the user's home directory
+           must be fixed manually.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term>
+         <option>-U</option>, <option>--unlock</option>
+       </term>
+       <listitem>
+         <para>
+           Unlock a user's password. This removes the '!' in front of the
+           encrypted password. You can't use this option with
+           <option>-p</option> or <option>-L</option>.
+         </para>
+         <para>
+           Note: if you wish to unlock the account (not only access with a
+           password), you should also set the
+           <replaceable>EXPIRE_DATE</replaceable> (for example to
+           <replaceable>99999</replaceable>, or to the
+           <option>EXPIRE</option> value from
+           <filename>/etc/default/useradd</filename>).
+         </para>
+       </listitem>
+      </varlistentry>
+       <varlistentry>
+         <term>
+           <option>-Z</option>, <option>--selinux-user</option>
+           <replaceable>SEUSER</replaceable>
+         </term>
+         <listitem>
+           <para>
+             The SELinux user for the user's login. The default is to leave
+             this field the blank, which causes the system to select the
+             default SELinux user.
+           </para>
+         </listitem>
+       </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='caveats'>
+    <title>CAVEATS</title>
+    <para>
+      You must make certain that the named user is
+      not executing any processes when this command is being executed if the
+      user's numerical user ID, the user's name, or the user's home
+      directory is being changed. <command>usermod</command> checks this
+      on Linux, but only check if the user is logged in according to utmp
+      on other architectures.
+    </para>
+    <para>
+      You must change the owner of any <command>crontab</command> files or
+      <command>at</command> jobs manually.
+    </para>
+    <para>
+      You must make any changes involving NIS on the NIS server.
+    </para>
+  </refsect1>
+
+  <refsect1 id='configuration'>
+    <title>CONFIGURATION</title>
+    <para>
+      The following configuration variables in
+      <filename>/etc/login.defs</filename> change the behavior of this
+      tool:
+    </para>
+    <variablelist>
+      &MAIL_DIR; <!-- documents also MAIL_FILE -->
+      &MAX_MEMBERS_PER_GROUP;
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry condition="gshadow">
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>chfn</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>chsh</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>crypt</refentrytitle><manvolnum>3</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>gpasswd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>groupmod</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>login.defs</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>useradd</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>userdel</refentrytitle><manvolnum>8</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/vigr.8 b/man/vigr.8
new file mode 100644 (file)
index 0000000..ff72d7a
--- /dev/null
@@ -0,0 +1 @@
+.so man8/vipw.8
diff --git a/man/vipw.8 b/man/vipw.8
new file mode 100644 (file)
index 0000000..642dc3f
--- /dev/null
@@ -0,0 +1,106 @@
+'\" t
+.\"     Title: vipw
+.\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
+.\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+.\"      Date: 07/24/2009
+.\"    Manual: System Management Commands
+.\"    Source: System Management Commands
+.\"  Language: English
+.\"
+.TH "VIPW" "8" "07/24/2009" "System Management Commands" "System Management Commands"
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
+.SH "NAME"
+vipw, vigr \- edit the password, group, shadow\-password or shadow\-group file
+.SH "SYNOPSIS"
+.HP \w'\fBvipw\fR\ 'u
+\fBvipw\fR [\fIoptions\fR]
+.HP \w'\fBvigr\fR\ 'u
+\fBvigr\fR [\fIoptions\fR]
+.SH "DESCRIPTION"
+.PP
+The
+\fBvipw\fR
+and
+\fBvigr\fR
+commands edits the files
+/etc/passwd
+and
+/etc/group, respectively\&. With the
+\fB\-s\fR
+flag, they will edit the shadow versions of those files,
+/etc/shadow
+and
+/etc/gshadow, respectively\&. The programs will set the appropriate locks to prevent file corruption\&. When looking for an editor, the programs will first try the environment variable
+\fB$VISUAL\fR, then the environment variable
+\fB$EDITOR\fR, and finally the default editor,
+\fBvi\fR(1)\&.
+.SH "OPTIONS"
+.PP
+The options which apply to the
+\fBvipw\fR
+and
+\fBvigr\fR
+commands are:
+.PP
+\fB\-g\fR, \fB\-\-group\fR
+.RS 4
+Edit group database\&.
+.RE
+.PP
+\fB\-h\fR, \fB\-\-help\fR
+.RS 4
+Display help message and exit\&.
+.RE
+.PP
+\fB\-p\fR, \fB\-\-passwd\fR
+.RS 4
+Edit passwd database\&.
+.RE
+.PP
+\fB\-q\fR, \fB\-\-quiet\fR
+.RS 4
+Quiet mode\&.
+.RE
+.PP
+\fB\-s\fR, \fB\-\-shadow\fR
+.RS 4
+Edit shadow or gshadow database\&.
+.RE
+.SH "FILES"
+.PP
+/etc/group
+.RS 4
+Group account information\&.
+.RE
+.PP
+/etc/gshadow
+.RS 4
+Secure group account information\&.
+.RE
+.PP
+/etc/passwd
+.RS 4
+User account information\&.
+.RE
+.PP
+/etc/shadow
+.RS 4
+Secure user account information\&.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBvi\fR(1),
+\fBgroup\fR(5),
+\fBgshadow\fR(5)
+\fBpasswd\fR(5),
+\fBshadow\fR(5)\&.
diff --git a/man/vipw.8.xml b/man/vipw.8.xml
new file mode 100644 (file)
index 0000000..790c6f0
--- /dev/null
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 1997       , Marek Michałkiewicz
+   Copyright (c) 2001 - 2006, Tomasz Kłoczko
+   Copyright (c) 2007 - 2009, Nicolas François
+   All rights reserved.
+  
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+   3. The name of the copyright holders or contributors may not be used to
+      endorse or promote products derived from this software without
+      specific prior written permission.
+  
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+   PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+   HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+]>
+<refentry id='vipw.8'>
+  <!--  $Id: vipw.8.xml 2511 2009-03-14 11:08:39Z nekral-guest $  -->
+  <refmeta>
+    <refentrytitle>vipw</refentrytitle>
+    <manvolnum>8</manvolnum>
+    <refmiscinfo class="sectdesc">System Management Commands</refmiscinfo>
+  </refmeta>
+  <refnamediv id='name'>
+    <refname>vipw</refname>
+    <refname>vigr</refname>
+    <refpurpose>
+      edit the password, group, shadow-password or shadow-group file
+    </refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv id='synopsis'>
+    <cmdsynopsis>
+      <command>vipw</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>                                                                                           
+      </arg>
+    </cmdsynopsis>
+    <cmdsynopsis>
+      <command>vigr</command>
+      <arg choice='opt'>
+       <replaceable>options</replaceable>                                                                                           
+      </arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1 id='description'>
+    <title>DESCRIPTION</title>
+    <para>
+      The <command>vipw</command> and <command>vigr</command> commands edits
+      the files <filename>/etc/passwd</filename> and
+      <filename>/etc/group</filename>, respectively. With the
+      <option>-s</option> flag, they will edit the shadow versions of those
+      files, <filename>/etc/shadow</filename> and
+      <filename>/etc/gshadow</filename>, respectively. The programs will set
+      the appropriate locks to prevent file corruption. When looking for an
+      editor, the programs will first try the environment variable
+      <envar>$VISUAL</envar>, then the environment variable
+      <envar>$EDITOR</envar>, and finally the default editor,
+      <citerefentry><refentrytitle>vi</refentrytitle>
+      <manvolnum>1</manvolnum></citerefentry>.
+    </para>
+  </refsect1>
+
+  <refsect1 id='options'>
+    <title>OPTIONS</title>
+    <para>
+      The options which apply to the <command>vipw</command> and
+      <command>vigr</command> commands are:
+    </para>
+    <variablelist remap='IP'>
+      <varlistentry>
+       <term><option>-g</option>, <option>--group</option></term>
+       <listitem>
+         <para>Edit group database.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-h</option>, <option>--help</option></term>
+       <listitem>
+         <para>Display help message and exit.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-p</option>, <option>--passwd</option></term>
+       <listitem>
+         <para>Edit passwd database.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-q</option>, <option>--quiet</option></term>
+       <listitem>
+         <para>Quiet mode.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><option>-s</option>, <option>--shadow</option></term>
+       <listitem>
+         <para>Edit shadow or gshadow database.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='files'>
+    <title>FILES</title>
+    <variablelist>
+      <varlistentry>
+       <term><filename>/etc/group</filename></term>
+       <listitem>
+         <para>Group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/gshadow</filename></term>
+       <listitem>
+         <para>Secure group account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/passwd</filename></term>
+       <listitem>
+         <para>User account information.</para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><filename>/etc/shadow</filename></term>
+       <listitem>
+         <para>Secure user account information.</para>
+       </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1 id='see_also'>
+    <title>SEE ALSO</title>
+    <para>
+      <citerefentry>
+       <refentrytitle>vi</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>group</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>gshadow</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>
+      <citerefentry>
+       <refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+       <refentrytitle>shadow</refentrytitle><manvolnum>5</manvolnum>
+      </citerefentry>.
+    </para>
+  </refsect1>
+</refentry>
diff --git a/man/zh_CN/Makefile.am b/man/zh_CN/Makefile.am
new file mode 100644 (file)
index 0000000..b66f6c8
--- /dev/null
@@ -0,0 +1,18 @@
+# man pages encoded in GB2312
+mandir = @mandir@/zh_CN
+
+man_MANS = \
+       chfn.1 \
+       chsh.1 \
+       newgrp.1 \
+       chpasswd.8 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       passwd.5 \
+       su.1 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/zh_CN/Makefile.in b/man/zh_CN/Makefile.in
new file mode 100644 (file)
index 0000000..ab404ea
--- /dev/null
@@ -0,0 +1,523 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/zh_CN
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+       "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+
+# man pages encoded in GB2312
+mandir = @mandir@/zh_CN
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+       chfn.1 \
+       chsh.1 \
+       newgrp.1 \
+       chpasswd.8 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       passwd.5 \
+       su.1 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8
+
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/zh_CN/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/zh_CN/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man5 install-man8 install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/zh_CN/chfn.1 b/man/zh_CN/chfn.1
new file mode 100644 (file)
index 0000000..293271c
--- /dev/null
@@ -0,0 +1,58 @@
+.\" $Id: chfn.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\" this program is free software.  you can redistribute it and
+.\" modify it under the terms of the gnu general public license.
+.\"  there is no warranty.
+.TH CHFN 1 "October 13 1994" "chfn" "Linux Reference Manual"
+.SH 名称
+chfn \- 改 变 你 的 finger 讯 息
+.SH 语法
+.B chfn
+[\ \-f\ full\-name\ ] [\ \-o\ office\ ] [\ \-p\ office\-phone\ ]
+[\ \-h\ home\-phone\ ] [\ \-u\ ] [\ \-v\ ] [\ username\ ]
+.SH 描述
+.B chfn
+是 用 来 改 变 你 的 finger 讯 息 。 讯 息 是 存 放 在
+.I /etc/passwd 档 内 。 可 藉 由
+.B finger
+来 显 示 你 的 讯 息 。 Linux
+.B finger
+命 令 会 显 示 四 段 讯 息 , 这 些 讯 息 均 可 藉 由
+.B chfn
+改 变
+: 真 实 姓 名 , 工 作 地 点 电 话 , 及 你 家 的 电 话 。
+.SS 命令列
+每 一 段 讯 息 均 可 在 命 令 列 上 指 定 。 如 没 有 给 定 讯 息 ,
+.B chfn
+进 入 交 谈 模 式
+.SS INTERACTIVE MODE
+交谈模式
+.B chfn
+会 在 每 一 栏 前 提 示 。 在 提 示 状 态 下 , 你 就 可 输 入 新 的 讯 息 或 
+是 按  return 而 不 改 变 。
+输 入 "none" 则 表 示 该 栏 空 白 。
+.SH 选项
+.TP
+.I "\-f, \-\-full\-name"
+真 实 姓 名
+.TP
+.I "\-h, \-\-home\-phone"
+家 里 的 电 话
+.TP
+.I "\-o, \-\-office"
+办 工 室 号 码
+.TP
+.I "\-p, \-\-office\-phone"
+办 公 室 电 话
+.TP
+.I "\-u, \-\-help"
+秀 出 使 用 说 明 短 讯 。
+.TP
+.I "\-v, \-\-version"
+秀 出 版 本 讯 息 。
+.SH "相关文件"
+.BR finger (1),
+.BR passwd (5)
+.SH 作者
+Salvatore Valente <svalente@mit.edu>
diff --git a/man/zh_CN/chpasswd.8 b/man/zh_CN/chpasswd.8
new file mode 100644 (file)
index 0000000..0305fdb
--- /dev/null
@@ -0,0 +1,72 @@
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"; 中文版版权所有 soloman, Laser www.linuxforum.net 2000
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: chpasswd.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH CHPASSWD 8
+.SH NAME 名字
+chpasswd \- 成批更新用户的口令
+.SH 总览
+chpasswd [\-e]
+.SH 描述
+.B chpasswd
+从系统的标准输入读入用户的名称和口令,
+并利用这些信息来更新系统上已存在的用户的口令。
+在没有用 \-e 这个开关选项的情况下,口令将按明文的形式接收。
+如果使用了 \-e 选项,口令将只能以加密的方式传递。
+每行的具体格式如下所示:
+.sp 1
+               \fI用户名\fR:\fI新口令\fR
+.sp 1
+用户名必须是系统上已存在的用户。
+输入的密码在必要时进行加密处理,
+如果口令文件具有时间特性,则同时更新。
+.PP
+此命令适用于大型的系统,在此类系统中,
+用户一般都是一次同时生成的,而用 adduser 和
+passwd 口令来对其一一进行设置一般说往往比较慢。
+.SH 注意事项
+.\" The \fBmkpasswd\fR command must be executed afterwards to update the
+.\" DBM password files.
+.\" This command may be discarded in favor of the newusers(8) command.
+因为可以使用文件重定向进行输入,
+即:chpasswd &lt; user&amp;passwd\-filename, 
+如果输入文件是按非加密方式传递的话,请对该文件进行适当的加密。
+.SH 又见
+passwd(1),useradd(8),newuser(8)
+.SH 作者
+Julianne Frances Haugh (jfh@bga.com)
+.SH "[中文版维护人]"
+.B 所罗门 <solomen@email.com.cn>
+.SH "[中文版最新更新]"
+2000/11/26
+
+.SH "[中国 Linux 论坛 man 手册页翻译计划]"
+.TP
+.BI http://www.cmpp.net/
+
diff --git a/man/zh_CN/chsh.1 b/man/zh_CN/chsh.1
new file mode 100644 (file)
index 0000000..1914718
--- /dev/null
@@ -0,0 +1,45 @@
+.\" $Id: chsh.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\" this program is free software.  you can redistribute it and
+.\" modify it under the terms of the gnu general public license.
+.\" there is no warranty.
+.TH CHSH 1 "October 13 1994" "chsh" "Linux Reference Manual"
+.SH 名称
+chsh \- 更换你登入时所用的shell
+.SH 语法
+.B chsh
+[\ \-s\ shell\ ] [\ \-l\ ] [\ \-u\ ] [\ \-v\ ] [\ username\ ]
+.SH 描述
+.B chsh
+用来更换你登入时所用的shell
+。在命令列没指定shell。
+.B chsh
+会提示一个给你。
+.SS 有效的shell
+.B chsh
+可用指定路径全名的方式来指定任何一个可执行的档案。
+然而,如果此 shell并没纪录在
+.I /etc/shells
+档上,则chsh会提出警告讯息。
+.SH 选项
+.TP
+.I "\-l, \-\-list\-shells"
+列出纪录在
+.I /etc/shells
+的shell。
+.TP
+.I "\-s, \-\-shell"
+变更你的登入shell.
+.TP
+.I "\-u, \-\-help"
+使用短讯。
+.TP
+.I "\-v, \-\-version"
+版本资讯
+.SH "相关文件"
+.BR login (1),
+.BR passwd (5),
+.BR shells (5)
+.SH 作者
+Salvatore Valente <svalente@mit.edu>
diff --git a/man/zh_CN/groupadd.8 b/man/zh_CN/groupadd.8
new file mode 100644 (file)
index 0000000..dea7ca6
--- /dev/null
@@ -0,0 +1,91 @@
+.\" $Id: groupadd.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.TH GROUPADD 8
+.SH 名称
+groupadd \- 建 立 新 群 组
+.SH 语法
+.B groupadd
+[\fB\-g\fR \fIgid\fR [\fB\-o\fR]] [\fB\-r\fR] [\fB\-f\fR] \fIgroup\fR
+.SH 描述
+\fBgroupadd\fR
+可 指 定 群 组 名 称 来 建 立 新 的 群 组 帐 号 。
+需 要 时 可 从 系 统 中 取 得 新 群 组 值 。
+\fBgroupadd\fR 有 下 列 选 项 可 用 。
+.IP "\fB\-g\fR \fIgid\fR"
+group's ID 值 。
+除  非 使 用 \fB\-o\fR 参 数 不 然 该 值 必 须 是 唯 一 , 不 可 相 同 。
+数 值 不 可 为 负 。
+预 设 为 最 小  不  得 小 于 500 而 逐 次 增 加 。 0~999 传 统 上
+是 保 留 给 \fI系统帐号\fR 使 用 。
+.IP \fB\-r\fR
+
+
+此 参 数 是 用 来 建 立 \fI系统帐号\fR 。
+的  UID 会 比 定 义 在 系 统 档 上 /etc/login.defs.
+的 UID_MIN 来 的 小 。 注 意 useradd 此 用 法 所 建
+立  的 帐 号 不 会 建 立 使 用 者 目 录 , 也 不 会
+在 乎 纪 录 在 /etc/login.defs. 的 定 义 值  。  如
+果  你 想 要 有 使 用 者 目 录 须 额 外 指 定 \-m 参
+数 来 建 立 系 统 帐 号 。 这 是 RED HAT 额  外  增
+设 的 选 项 。
+它 会 自 动 帮 你 选 定 一 个 小 于 999 的 \fIgif\fR
+不 需 要 再 加 上 \fB\-g\fR 参 数 。
+.br
+这 是 RED HAT 额  外  增 设 的 选 项 。
+
+.IP \fB\-f\fR
+This is \fIforce\fR flag. 
+新 增 一 个 已 经 存 在 的 群 组 帐 号 , 系 统 会 出
+现 错 误 讯 息 然 后 结 束 \fBgroupadd\fR 。
+ 如 果 是 这 样 的 情 况 , 不 会 新 增 这 个 群 组 
+( 如 果 是 这 个 情 况 下 , 系 统 不 会 再 新 增 一 次 )
+.br
+也 可 同 时 加 上 \fB\-g\fR 选 项
+当 你 加 上 一 个 \fIgid\fR , 此 时  \fIgid\fR
+就 不 用 是 唯 一 值 , 可 不 加 \fB\-o\fR 参 数 ,
+建 好 群 组 后 会 显 结 果  
+(adding a group as neither \fB\-g\fR or \fB\-o\fR options were
+specified).
+
+.br
+这 是 RED HAT 额  外  增 设 的 选 项 。
+.SH 档案
+\fI/etc/group\fR \- 群 组 资 讯
+.br
+\fI/etc/gshadow\fR \- 群 组 资 讯 加 密
+.SH 相关文件
+.BR chfn (1),
+.BR chsh (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8),
+.BR passwd (1),
+.BR groupdel (8),
+.BR groupmod (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_CN/groupdel.8 b/man/zh_CN/groupdel.8
new file mode 100644 (file)
index 0000000..14befaa
--- /dev/null
@@ -0,0 +1,55 @@
+.\" $Id: groupdel.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 \- 1993, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.TH GROUPDEL 8
+.SH 名称
+groupdel \- 删除群组
+.SH 语法
+.B groupdel
+.I group
+.SH 描述
+\fBgroupdel\fR 命令会修改系统帐号档,会删除所有已经存在的\fIgroup\fR.
+群组名须存在。
+.PP
+你须手动确认一下所有的档案系统确保有没有档案还是没修正群组名变成群组ID。
+.SH 警告
+如果有任何一个群组的使用者在线上的话就不能移除该群组。
+最好先移除使用者后再移除群组。
+.SH 档案
+\fI/etc/group\fR \- 群组资讯
+\fI/etc/gshadow\fR \- 群组资讯加密
+.SH 相关文件
+.BR chfn (1),
+.BR chsh (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupmod (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_CN/groupmod.8 b/man/zh_CN/groupmod.8
new file mode 100644 (file)
index 0000000..0086ca2
--- /dev/null
@@ -0,0 +1,68 @@
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: groupmod.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH GROUPMOD 8
+.SH 名称
+groupmod \- 修 改 群 组
+.SH 语法
+.B groupmod
+[\fB\-g\fR \fIgid\fR [\fB\-o\fR]]
+[\fB\-n\fR \fIgroup_name\fR]
+.I group
+.SH 描述
+
+\fBgroupmod\fR 命 令 会 参 照 你 命 令 列 上 指 定 的 部 份 
+修 改 系 统 帐 号 档 。 下 列 为 \fIgroupmod\fR 可 选 用 的 参 数 。
+
+.IP "\fB\-g\fR \fIgid\fR"
+群 组 I D 值 。
+必 须 为 唯 一 的 ID 值 , 除 非 用 \-o 选 项 。
+数 字 不 可 为 负 值。预 设 为 最
+小 不 得 小 于 999 而 逐 次 增 加 。 0~ 499 传 统 上
+是 保 留 给 系 统 帐 号 使 用 。
+如 果 有 档 案 使 用 旧 的 群 组 ID , 而 这 时 候 你 新 增 的 群 组 ID
+恰 好 与 旧 的 相 同 , 这 样 的 话
+你 要 手 动 改 一 下 这 些 档 案 的 群 组 ID 。
+.IP "\fB\-n\fR \fIgroup_name\fR"
+更 改 群 组 名 。
+.SH 档案
+\fI/etc/group\fR \- 群 组 资 讯 
+.br
+\fI/etc/gshadow\fR \- 群 组 资 讯 加 密
+.SH 相关文件
+.BR chfn (1),
+.BR chsh (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupdel (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_CN/newgrp.1 b/man/zh_CN/newgrp.1
new file mode 100644 (file)
index 0000000..3d12998
--- /dev/null
@@ -0,0 +1,38 @@
+.\" Original author unknown.  This man page is in the public domain.
+.\" Modified Sat Oct  9 17:46:48 1993 by faith@cs.unc.edu
+.TH NEWGRP 1 "9 October 1993" "Linux 1.2" "Linux Programmer's Manual"
+
+.SH NAME
+newgrp \- 登录到新的用户组中
+
+.SH "总览 (SYNOPSIS)"
+.BI "newgrp [ " group " ]"
+
+.SH "描述 (DESCRIPTION)"
+.B Newgrp
+改变 调用者 的 用户组标识, 类似于
+.BR login (1).
+调用者 仍旧 登录 在 系统 中, 当前目录 也不变, 但是 文件的访问权限 将 根据
+新的 用户组 ID 计算.
+.LP
+如果 没有 指定 用户组, GID 将 变成 登录 的 GID.
+.LP
+
+.SH "文件 (FILES)"
+.I /etc/group
+.br
+.I /etc/passwd
+
+.SH "另见 (SEE ALSO)"
+.BR login "(1), " group (5)
+
+.SH "作者 (AUTHOR)"
+Originally by Michael Haardt. Currently maintained by 
+Peter Orbaek (poe@daimi.aau.dk).
+
+.SH "[中文版维护人]"
+.B 徐明 <xuming@users.sourceforge.net>
+.SH "[中文版最新更新]"
+.BR 2003/05/13
+.SH "《中国Linux论坛man手册页翻译计划》"
+.BI http://cmpp.linuxforum.net
diff --git a/man/zh_CN/passwd.5 b/man/zh_CN/passwd.5
new file mode 100644 (file)
index 0000000..c994b9b
--- /dev/null
@@ -0,0 +1,132 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de), Fri Apr 2 11:32:09 MET DST 1993
+.\" Chinese Version Copyright Scorpio, www.linuxforum.net, 2000
+.\"
+.\" This is free documentation; 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.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
+.\" USA.
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.\" Modified Mon Jan 5 20:24:40 MET 1998 by Michael Haardt
+.\" (michael@cantor.informatik.rwth-aachen.de)
+.TH PASSWD 5 "January 5, 1998" "" "File formats"
+.SH NAME 名称
+passwd \- 密码文件
+.SH 描述
+.B Passwd
+是个文本文件, 它包含了一个系统帐户列表,
+给出每个帐户一些有用的信息,比如用户 ID,组 ID, 家目录, shell,等.
+通常它也包含了每个用户经过加密的密码.
+它通常应该是可读的(许多命令,工具程序,象
+.BR ls (1)
+用它做用户 Id 到用户名称的映射),但是只允许超级用户有写方式权限.
+.PP
+在过去美好的日子里,这种一般的读许可没有什么大问题.
+每个人都能读到加密了的密码,因为硬件太慢以至于不能解开一个
+精选的密码,另外,这基本假定是为友好的使用团体使用的.
+现在,许多人运行一些版本的影子密码套件,它们在
+.I /etc/passwd
+的密码域里是 *,而不再是加密的口令,
+加密的口令放在
+.I /etc/shadow
+中,那个文件只有超级用户能读.
+.PP
+不管是否使用了影子密码,许多系统管理员使用一个星号在加密的密码字段
+以确保用户不能鉴别他(她)自己的密码. (见下面的注意)
+.PP
+如果你建立了一个新的登录,首先放个星号在密码字段,
+然后使用
+.BR passwd (1)
+设置它.
+.PP
+(密码文件)里每行一条记录,并且每行有这样的格式:
+.sp
+.RS
+account:password:UID:GID:GECOS:directory:shell
+(帐号:密码:用户ID:组ID:一般的信息:目录:shell)
+.RE
+.sp
+字段描述如下:
+.sp
+.RS
+.TP 1.0in
+.I account
+使用者在系统中的名字,它不能包含大写字母.
+.TP
+.I password
+加密的用户密码,或者星号。
+.TP
+.I UID
+用户 ID 数。
+.TP
+.I GID
+用户的主要组 ID 数。
+.TP
+.I GECOS
+这字段是可选的,通常为了存放信息目的而设的.
+通常,它包含了用户的全名. GECOS 意思是通用电气综合操作系统(General Electric
+Comprehensive Operating System), 当 GE 的大型系统部分割售卖给 Honeywell
+时它被改为 GCOS. Dennis Ritchie 作过报告:"有时我们发送印刷品或批道作业到
+GCOS机器时,gcos 字段打断了 $IDENT 卡的信息,不太美观。"(译者:我想是太长吧) 
+.TP
+.I directory
+用户的 $HOME 目录.
+.TP
+.I shell
+登录时运行的程序(如果空的,使用
+.BR /bin/sh ).
+如果设为不存在的执行(程序),用户不能通过
+.BR login (1)
+登录.
+.RE
+.SH 注意
+如果你想建立用户组,他们的 GID 必须相等并且一定是在
+\fI/etc/group\fP的一条记录, 要不然组就不存在.
+.PP
+如果加密密码设成星号,用户将不能用
+.BR login (1)
+来登录, 但依然可以用
+.BR rlogin (1)
+登录, 通过
+.BR rsh (1)
+或者
+.BR cron (1)
+或者
+.BR at (1)
+或者 mail 过滤器等程序运行已有的进程和开始新的等.
+试图通过简单改变 shell 字段锁住一个用户结果是一样的,
+而且还附上了使用
+.B su(1) 
+的权限.
+.SH 相关文件
+.I /etc/passwd
+.SH "又见"
+.BR passwd (1),
+.BR login (1),
+.BR su (1),
+.BR group (5),
+.BR shadow (5)
+.br
+.SH "[中文版维护人]"
+.B Scorpio <rawk@chinese.com>
+.SH "[中文版最新更新]"
+.B 2000/11/26
+.SH "《中国linux论坛man手册页翻译计划》:"
+.BI http://cmpp.linuxforum.net
diff --git a/man/zh_CN/su.1 b/man/zh_CN/su.1
new file mode 100644 (file)
index 0000000..52c8e80
--- /dev/null
@@ -0,0 +1,62 @@
+.TH SU "1" "1999年8月" "GNU sh-utils 2.0"  FSF
+.SH NAME(名称)
+su \- 运行替换用户和组标识的shell
+.SH SYNOPSIS(总览)
+.B su
+[\fIOPTION\fR]... [\fI-\fR] [\fIUSER \fR[\fIARG\fR]...]
+.SH DESCRIPTION(描述)
+.PP
+.PP
+修改有效用户标识和组标识为USER的.
+.TP
+-, \fB\-l\fR, \fB\-\-login\fR
+使得shell为可登录的shell
+.TP
+\fB\-c\fR, \fB\-\-commmand\fR=\fICOMMAND\fR
+传递单个COMMAND给\fB\-c\fR的shell.
+.TP
+\fB\-f\fR, \fB\-\-fast\fR
+传递\fB\-f\fR给shell(针对csh或tcsh)
+.TP
+\fB\-m\fR, \fB\-\-preserve\-environment\fR
+不重置环境变量
+.TP
+\fB\-p\fR
+与\fB\-m\fR同
+.TP
+\fB\-s\fR, \fB\-\-shell\fR=\fISHELL\fR
+如果/etc/shells允许,运行SHELL.
+.TP
+\fB\-\-help\fR
+显示帮助并退出
+.TP
+\fB\-\-version\fR
+输出版本信息并退出
+.PP
+单一的-意味着\fB\-l\fR.如果没有给定USER,则假定为root.
+.SH (报告BUGS)
+报告bugs,请发邮件到bug-sh-utils@gnu.org.
+.SH (另见)
+以Texinfo手册形式维护的
+.B su
+完全文档.如果你正确地安装了
+.B info
+和
+.B echo
+命令
+.IP
+.B info su
+.PP
+应该可以使你访问到整个手册.
+.SH COPYRIGHT(版权)
+版权所有 \(co 1999 Free Software Foundation, Inc.
+.br
+这是自由软件;参看复制条件的源文件.不作任何担保,更不用说商品性或者基于特殊目的的适
+用性.
+
+.SH "[中文版维护人]"
+.B riser <boomer@ccidnet.com>
+.SH "[中文版最新更新]"
+.BR 2001/08/08
+.SH "《中国linux论坛man手册页翻译计划》:"
+.BI http://cmpp.linuxforum.net
diff --git a/man/zh_CN/useradd.8 b/man/zh_CN/useradd.8
new file mode 100644 (file)
index 0000000..9993af4
--- /dev/null
@@ -0,0 +1,186 @@
+.\" $Id: useradd.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"    $Id: useradd.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"
+.TH USERADD 8
+.SH 名 称
+useradd \- 帐 号 建 立 或 更 新 新 使 用 者 的 资 讯
+.SH 语 法
+.TP 8
+.B useradd
+.RB [ \-c
+.IR comment ]
+.RB [ \-d
+.IR home_dir ]
+.br
+.RB [ \-e
+.IR expire_date ]
+.RB [ \-f
+.IR inactive_time ]
+.br
+.RB [ \-g
+.IR initial_group ]
+.RB [ \-G
+.IR group [,...]]
+.br
+.RB [ \-m " [" \-k
+.IR skeleton_dir ] " |" " " \-M ]
+.RB [ \-s
+.IR shell ]
+.br
+.RB [ \-u
+.IR uid " ["
+.BR \-o ]]
+.RB [ \-n ]
+.RB [ \-r ]
+.I login
+.TP 8
+.B useradd
+\fB\-D\fR [\fB\-g\fR \fIdefault_group\fR] [\fB\-b\fR \fIdefault_home\fR]
+.br
+[\fB\-f\fR \fIdefault_inactive\fR] [\fB\-e\fR \fIdefault_expire_date\fR]
+.br
+[\fB\-s\fR \fIdefault_shell\fR]
+.SH 描 述
+.SS 新 帐 号 建 立
+当 不 加 \fB\-D\fR 参 数 , \fBuseradd\fR 指 令 使 用 命 令 列 来 指 定
+新 帐 号 的 设 定 值 and 使 用 系 统 上 的 预 设 值 .
+新 使 用 者 帐 号 将 产 生 一 些 系 统 档 案 , 使 用 者 目 录 建 立 ,
+拷 备 起 始 档 案 等
+, 这 些 均 可 以 利 用 命 令列 选 项 指 定 。 此 版 本 为 Red Hat Linux 提 供
+, 可 帮 每 个 新 加 入 的 使 用 者 建 立 个 别 的 group , 毋 须 添 加 \fB\-n\fR
+选 项 。  
+\fBuseradd\fR 可 使 用 的 选 项 为
+.IP "\fB\-c\fR \fIcomment\fR"
+新 帐 号 password 档 的 说 明 栏 。 
+.IP "\fB\-d\fR \fIhome_dir\fR"
+新 帐 号 每 次 登 入 时 所 使 用 的 \fIhome_dir\fR 。 
+预 设 值 为 \fIdefault_home\fR 内 \fIlogin\fR 名 称 , 并 当 成 登 入 时 目 录 
+名 称 。
+.IP "\fB\-e\fR \fIexpire_date\fR"
+帐 号 终 止 日 期 。 日 期 的 指 定 格 式 为 \fIMM/DD/YY\fR 。
+.IP "\fB\-f\fR \fIinactive_days\fR"
+帐 号 过 期 几 日 后 永 久 停 权 。
+当 值 为 0 时 帐 号 则 立 刻 被 停 权 。
+而 当 值 为 \-1 时 则 关 闭 此 功 能 , 预 设 值 为 \-1
+.IP "\fB\-g\fR \fIinitial_group\fR"
+group 名 称 或 以 数 字 来 做 为 使 用 者 登 入 起 始 群 组 (group) 。
+群 组 名 须 为 现 有 存 在 的 名 称 。
+群 组 数 字 也 须 为 现 有 存 在 的 群 组 。
+预 设 的 群 组 数 字 为 1 。
+.IP "\fB\-G\fR \fIgroup,[...]\fR"
+定 义 此 使 用 者 为 此 一 堆 groups 的 成 员 。
+每 个 群 组 使 用 "," 区 格 开 来 , 不 可 以 夹 杂 空 白 字 元 。
+ 群 组 名 同 \fB\-g\fR 选 项 的 限 制 。
+定 义 值 为 使用 者 的 起 始 群 组 。
+.IP \fB\-m\fR
+使 用 者 目 录 如 不 存 在 则 自 动 建 立 。
+如 使 用 \fB\-k\fR 选 项 \fIskeleton_dir\fR 内 的 档 案 将 复 制 至 使 用 者 目 
+录 下 。
+然 而 在 \fI/etc/skel\fR 目 录 下 的 档 案 也 会 复 制 过 去 取 代 。
+任 何 在 \fIskeleton_dir\fR or \fI/etc/skel\fR 的 目 录 也 相 同 会 在 使 用 者
+目 录 下 一 一 建 立 。
+The \fB\-k\fR 同 \fB\-m\fR
+不 建 立 目 录 以 及 不 复 制 任 何 档 案 为 预 设 值 。
+.IP \fB\-M\fR
+不 建 立 使 用 者 目 录 , 即 使 \fI/etc/login.defs\fR 系 统 档 设 定 要 建 
+立 使 用 者 目 录 。
+.IP \fB\-n\fR
+预 设 值 使 用 者 群 组 与 使 用 者 名 称 会 相 同 。 此 选 项 将 取 消 此 预 
+设 值 。
+.IP \fB\-r\fR
+此 参 数 是 用 来 建 立 系 统 帐 号 。 系 统 帐 号 的 UID 会 比 定 义 在 系
+统 档 上 \fI/etc/login.defs\fR.
+的 UID_MIN 来 的 小 。 注 意 \fBuseradd\fR 此 用 法 所 建 立 的 帐 号 不 会
+建 立 使 用 者 目 录
+, 也 不 会 在 乎 纪 录 在 \fI/etc/login.defs\fR. 的 定 义 值 。
+如 果 你 想 要 有 使 用 者 目 录 须 额 外 指 定 \fB\-m\fR 参 数 来 建 立 系 
+统 帐 号 。
+这 是 RED HAT 额 外 增 设 的 选 项 。
+.IP "\fB\-s \fIshell\fR"
+使 用 者 登 入 后 使 用 的 shell 名 称 。
+预 设 为 不 填 写 , 这 样 系 统 会 帮 你 指 定 预 设 的 登 入 shell 。
+.IP "\fB\-u \fIuid\fR"
+使 用 者 的 ID 值 。 必 须 为 唯 一 的 ID 值 , 除 非 用 \fI\-o\fR 选 项 。
+数 字 不 可 为 负 值。预 设 为 最 小 不 得 小 于 999 而 逐 次 增 加 。
+0~ 999 传 统 上 是 保 留 给 系 统 帐 号 使 用 。
+
+.SS 改 变 预 设 值
+当 \fB\-D\fR 选 项 出 现 时 , \fBuseradd\fR 秀 出 现 在 的 预 设 值 , 或 是 藉 
+由
+命 令 列 的 方 式 更 新 预 设 值 。
+可 用 选 项 为 ∶
+.IP "\fB\-b\fR \fIdefault_home\fR"
+定 义 使 用 者 所 属 目 录 的 前 一 个 目 录 。
+使 用 者 名 称 会 附 加 在 \fIdefault_home\fR 后 面
+用 来 建 立 新 使 用 者 的 目 录 。
+当 然 使 用 \fB\-d\fI 后 则 此 选 项 无 效 。
+.IP "\fB\-e\fR \fIdefault_expire_date\fR"
+使 用 者 帐 号 停 止 日 期 。
+.IP "\fB\-f\fR \fIdefault_inactive\fR"
+帐 号 过 期 几 日 后 停 权 。
+.IP "\fB\-g\fR \fIdefault_group\fR"
+新 帐 号 起 始 群 组 名 或 ID 。
+群 组 名 须 为 现 有 存 在 的 名 称 。
+群 组 I D 也 须 为 现 有 存 在 的 群 组 。
+.IP "\fB\-s\fR \fIdefault_shell\fR"
+使 用 者 登 入 后 使 用 的 shell 名 称 。
+往 后 新 加 入 的 帐 号 都 将 使 用 此 shell.
+.PP
+如 不 指 定 任 何 参 数 , \fBuseradd\fR 显 示 目 前 预 设 的 值 。
+.SH 注 记 
+系 统 管 理 者 有 义 务 在 \fI/etc/skel\fR 目 录 下 放 置 使 用 者 定 义 档 。
+.br
+此 版 本 『useradd』 由 Red Hat 修 改 。
+.SH 警 告
+不 可 新 增 使 用 者 于 NIS 群 组 中 。
+你 必 须 在 NIS 伺 服 器 上 执 行 。
+.SH 档 案
+\fI/etc/passwd\fR \- 使 用 者 帐 号 资 讯
+.br
+\fI/etc/shadow\fR \- 使 用 者 帐 号 资 讯 加 密
+.br
+\fI/etc/group\fR \- 群 组 资 讯
+.br
+\fI/etc/default/useradd\fR \- 定 义 资 讯
+.br
+\fI/etc/login.defs\fR \- 系 统 广 义 设 定
+.br
+\fI/etc/skel\fR \- 内 含 定 义 档 的 目 录
+.SH SEE ALSO
+.BR chfn (1),
+.BR chsh (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.BR userdel (8),
+.BR usermod (8)
+.SH AUTHOR
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_CN/userdel.8 b/man/zh_CN/userdel.8
new file mode 100644 (file)
index 0000000..4a3aee2
--- /dev/null
@@ -0,0 +1,65 @@
+.\" $Id: userdel.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 - 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.TH USERDEL 8
+.SH 名称
+userdel \- 删 除 使 用 者 帐 号 及 相 关 档 案
+.SH 语法
+.B userdel
+[\fB\-r\fR]
+.I login
+.SH 描述
+\fBuserdel\fR 命 令 修 改 系 统 帐 号 档
+删 除 所 有 \fIlogin\fR 会 参 考 的 部 份 。
+使 用 者 名 称 必 须是 存 在 的 。
+.IP \fB\-r\fR
+使 用 者 目 录 下 的 档 案 一 并 移 除 。 在 其 他 位 置 上 的 档
+案 也 将 一 一 找 出 并 删 除 。
+.SH 档案
+\fI/etc/passwd\fR \- 使 用 者 帐 号 资 料
+.br
+\fI/etc/shadow\fR \- 使 用 者 帐 号 资 讯 加 密
+.br
+\fI/etc/group\fR \- 群 组 资 讯
+.SH 警告
+\fBuserdel\fR 不 允 许 你 移 除 正 在线 上
+的 使 用 者 帐 号 。
+你 必 须 砍 掉 此 帐 号 现 在 在 系 统 上 执 行 的 程 序 才 能 进 行 帐 号
+删 除 。
+不 能 在 NIS client 端 移 除 NIS 属 性 的 东 西 。
+这 动 做 须 在 NIS server 端 上 执 行 。
+.SH SEE ALSO
+.BR chfn (1),
+.BR chsh (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.BR useradd (8),
+.BR usermod (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_CN/usermod.8 b/man/zh_CN/usermod.8
new file mode 100644 (file)
index 0000000..b76f88e
--- /dev/null
@@ -0,0 +1,129 @@
+.\" $Id: usermod.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 \- 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.TH USERMOD 8
+.SH 名称
+usermod \- 修 改 使 用 者 帐 号
+.SH 语法
+.TP 8
+.B usermod
+.\" .RB [ \-A
+.\" .RI { method | \fBDEFAULT\fR "},... ]"
+.RB [ \-c
+.IR comment ]
+.RB [ \-d
+.IR home_dir " ["
+.BR \-m ]]
+.br
+.RB [ \-e
+.IR expire_date ]
+.RB [ \-f
+.IR inactive_time ]
+.br
+.RB [ \-g
+.IR initial_group ]
+.RB [ \-G
+.IR group [,...]]
+.br
+.RB [ \-l
+.IR login_name ]
+.RB [ \-s
+.IR shell ]
+.br
+.RB [ \-u
+.IR uid " ["
+.BR \-o ]]
+.I login
+.SH 描述
+\fBusermod\fR 命 令 会 参 照 你 命 令 列 上 指 定 的 部 份 修 改 系 统 帐 
+号 档 。 下 列 为 \fBusermod\fR 可 选 用 的 参 数 。
+
+.\" .IP "\fB\-A \fImethod\fR|\fBDEFAULT\fR"
+.\" The new value of the user's authentication method.
+.\" The authentication method is the name of a program which is responsible
+.\" for validating the user's identity.
+.\" The string \fBDEFAULT\fR may be used to change the user's authentication
+.\" method to the standard system password method.
+.IP "\fB\-c\fR \fIcomment\fR"
+更 新 使 用 者 帐 号 password 档 中 的 注 解 栏
+, 一 般 是 使 用 \fBchfn\fR(1) 来 修 改 。
+.IP "\fB\-d\fR \fIhome_dir\fR"
+更 新 使 用 者 新 的 登 入 目 录 。
+如 果 给 定 \fB\-m\fR 选 项 , 使 用 者 旧 目 录 会 搬 到 新 的 目 录 去 
+,如 旧 目 录 不 存 在 则 建 个 新 的 。
+.IP "\fB\-e\fR \fIexpire_date\fR"
+加 上 使 用 者 帐 号 停 止 日 期 。 日 期 格 式 为 \fIMM/DD/YY\fR.
+.IP "\fB\-f\fR \fIinactive_days\fR"
+帐 号 过 期 几 日 后 永 久 停 权。当 值 为  0  时
+帐  号 则 立 刻 被 停 权 。 而 当 值 为 \-1 时 则 关闭此功能
+。预 设 值 为 \-1。
+.IP "\fB\-g\fR \fIinitial_group\fR"
+更 新 使 用 者 新 的 起 始 登 入 群 组 。 群 组 名 须 已 存 在 
+。群 组 ID 必 须 参 照 既 有 的 的 群 组 。 群 组 ID 预 设 值 为 1 。
+.IP "\fB\-G\fR \fIgroup,[...]\fR"
+定 义 使 用 者 为  一 堆 groups 的 成 员 。 每
+个 群 组 使 用 "," 区 格 开 来 , 不 可 以 夹 杂 空
+白 字 元 。 群 组 名 同 \-g 选 项 的 限 制 。
+如 果 使 用 者 现 在 的 群 组 不 再 此 列 , 则 将 使 用 者 由 该 
+群 组 中 移 除 。
+.IP "\fB\-l\fR \fIlogin_name\fR"
+变 更 使 用 者 \fIlogin\fR 时 的 名 称 为 \fIlogin_name\fR 。
+其 于 不 变 。 特 别 是 , 使 用 者 目 录 名 应 该 也 会 跟 着 更 动 成 新 
+的 登 入 名 。
+.IP "\fB\-s\fR \fIshell\fR"
+指 定 新 登 入 shell 。 如 此 栏 留 白 , 系 统 将 选 用 系 统 预 设 shell 。
+.IP "\fB\-u\fR \fIuid\fR"
+使 用 者 ID 值 。必 须 为 唯 一 的 ID 值 , 除 非 用 \fI\-o\fR 选 项 。 数 
+字 不 可 为 负 值。预 设 为 最 小  不  得 小 于 999 而 逐 次 
+增 加 。 0~ 999 传 统 上 是 保 留 给 系 统 帐 号 使 用 。
+使 用 者 目 录 树 下 所 有 的 档 案 目 录 其 user ID 会 自 动 改 变 。
+放 在 使 用 者 目 录 外 的 档 案 则 要 自 行 手 动 更 动 。
+.SH 警告
+\fBusermod\fR 不 允 许 你 改 变  正 在线 上 的 使 用 者 帐 号 名 称 。
+当 usermod 用 来 改 变 user ID, 必 须 确 认 这 名 user 没 在 电 脑 上 执 
+行 任 何 程 序。
+你 需 手 动 更 改 使 用 者 的 crontab 档 。
+也 需 手 动 更 改 使 用 者 的 at 工 作 档 。
+采 用 NIS server 须 在 server 上 更 动 相 关 的 NIS 设 定 。
+
+.SH 档案
+\fI/etc/passwd\fR \- 使 用 者 帐 号 资 讯
+.br
+\fI/etc/shadow\fR \- 使 用 者 帐 号 资 讯 加 密
+.br
+\fI/etc/group\fR \- 群 组 资 讯
+.SH 相关文件
+.BR chfn (1),
+.BR chsh (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.BR useradd (8),
+.BR userdel (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_TW/Makefile.am b/man/zh_TW/Makefile.am
new file mode 100644 (file)
index 0000000..dc205f1
--- /dev/null
@@ -0,0 +1,18 @@
+# man pages encoded in Big5
+mandir = @mandir@/zh_TW
+
+man_MANS = \
+       chfn.1 \
+       chsh.1 \
+       chpasswd.8 \
+       newgrp.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       passwd.5 \
+       su.1 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8
+
+EXTRA_DIST = $(man_MANS)
diff --git a/man/zh_TW/Makefile.in b/man/zh_TW/Makefile.in
new file mode 100644 (file)
index 0000000..a0a6cc8
--- /dev/null
@@ -0,0 +1,523 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man/zh_TW
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+       "$(DESTDIR)$(man8dir)"
+man5dir = $(mandir)/man5
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+
+# man pages encoded in Big5
+mandir = @mandir@/zh_TW
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = \
+       chfn.1 \
+       chsh.1 \
+       chpasswd.8 \
+       newgrp.1 \
+       groupadd.8 \
+       groupdel.8 \
+       groupmod.8 \
+       passwd.5 \
+       su.1 \
+       useradd.8 \
+       userdel.8 \
+       usermod.8
+
+EXTRA_DIST = $(man_MANS)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  man/zh_TW/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  man/zh_TW/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           1*) ;; \
+           *) ext='1' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+       done
+install-man5: $(man5_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.5*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           5*) ;; \
+           *) ext='5' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
+       done
+install-man8: $(man8_MANS) $(man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $$i; then file=$$i; \
+         else file=$(srcdir)/$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+uninstall-man8:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+       for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         case "$$ext" in \
+           8*) ;; \
+           *) ext='8' ;; \
+         esac; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed -e 's/^.*\///'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
+         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1 install-man5 install-man8
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       distclean distclean-generic distclean-libtool distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-man1 \
+       install-man5 install-man8 install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-man uninstall-man1 uninstall-man5 uninstall-man8
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/zh_TW/chfn.1 b/man/zh_TW/chfn.1
new file mode 100644 (file)
index 0000000..79c6992
--- /dev/null
@@ -0,0 +1,58 @@
+.\" $Id: chfn.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\" this program is free software.  you can redistribute it and
+.\" modify it under the terms of the gnu general public license.
+.\" there is no warranty.
+.TH CHFN 1 "October 13 1994" "chfn" "Linux Reference Manual"
+.SH 名稱
+chfn \- 改 變 你 的 finger 訊 息
+.SH 語法
+.B chfn
+[\ \-f\ full\-name\ ] [\ \-o\ office\ ] [\ \-p\ office\-phone\ ]
+[\ \-h\ home\-phone\ ] [\ \-u\ ] [\ \-v\ ] [\ username\ ]
+.SH 描述
+.B chfn
+是 用 來 改 變 你 的 finger 訊 息 。 訊 息 是 存 放 在
+.I /etc/passwd 檔 內 。 可 藉 由
+.B finger
+來 顯 示 你 的 訊 息 。 Linux
+.B finger
+命 令 會 顯 示 四 段 訊 息 , 這 些 訊 息 均 可 藉 由
+.B chfn
+改 變
+: 真 實 姓 名 , 工 作 地 點 電 話 , 及 你 家 的 電 話 。
+.SS 命令列
+每 一 段 訊 息 均 可 在 命 令 列 上 指 定 。 如 沒 有 給 定 訊 息 ,
+.B chfn
+進 入 交 談 模 式
+.SS INTERACTIVE MODE
+交談模式
+.B chfn
+會 在 每 一 欄 前 提 示 。 在 提 示 狀 態 下 , 你 就 可 輸 入 新 的 訊 息 或 
+是 按  return 而 不 改 變 。
+輸 入 "none" 則 表 示 該 欄 空 白 。
+.SH 選項
+.TP
+.I "\-f, \-\-full\-name"
+真 實 姓 名
+.TP
+.I "\-h, \-\-home\-phone"
+家 裡 的 電 話
+.TP
+.I "\-o, \-\-office"
+辦 工 室 號 碼
+.TP
+.I "\-p, \-\-office\-phone"
+辦 公 室 電 話
+.TP
+.I "\-u, \-\-help"
+秀 出 使 用 說 明 短 訊 。
+.TP
+.I "\-v, \-\-version"
+秀 出 版 本 訊 息 。
+.SH "相關文件"
+.BR finger (1),
+.BR passwd (5)
+.SH 作者
+Salvatore Valente <svalente@mit.edu>
diff --git a/man/zh_TW/chpasswd.8 b/man/zh_TW/chpasswd.8
new file mode 100644 (file)
index 0000000..068cf95
--- /dev/null
@@ -0,0 +1,69 @@
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"; 中文版版權所有 soloman, Laser www.linuxforum.net 2000
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.TH CHPASSWD 8
+.SH NAME
+chpasswd \- 成批更新使用者的口令
+.SH 總覽
+chpasswd [\-e]
+.SH 描述
+.B chpasswd
+從系統的標準輸入讀入使用者的名稱和口令,
+並利用這些信息來更新系統上已存在的使用者的口令。
+在沒有用 \-e 這個開關選項的情況下,口令將按明文的形式接收。
+如果使用了 \-e 選項,口令將只能以加密的方式傳遞。
+每行的具體格式如下所示:
+.sp 1
+               \fI使用者名\fR:\fI新口令\fR
+.sp 1
+使用者名必須是系統上已存在的使用者。
+輸入的密碼在必要時進行加密處理,
+如果口令檔案具有時間特性,則同時更新。
+.PP
+此命令適用於大型的系統,在此類系統中,
+使用者一般都是一次同時生成的,而用 adduser 和
+passwd 口令來對其一一進行設置一般說往往比較慢。
+.SH 注意事項
+.\" The \fBmkpasswd\fR command must be executed afterwards to update the
+.\" DBM password files.
+.\" This command may be discarded in favor of the newusers(8) command.
+因為可以使用檔案重定向進行輸入,
+即:chpasswd &lt; user&amp;passwd-filename, 
+如果輸入檔案是按非加密方式傳遞的話,請對該檔案進行適當的加密。
+.SH 又見
+passwd(1),useradd(8),newuser(8)
+.SH 作者
+Julianne Frances Haugh (jfh@bga.com)
+
+.SH "[中文版維護人]"
+.B 所羅門 <solomen@email.com.cn>
+.SH "[中文版最新更新]"
+2000/11/26
+.SH "[中國 Linux 論壇 man 手冊頁翻譯計劃]"
+.BI http://cmpp.linuxforum.net
+
diff --git a/man/zh_TW/chsh.1 b/man/zh_TW/chsh.1
new file mode 100644 (file)
index 0000000..9a4512c
--- /dev/null
@@ -0,0 +1,45 @@
+.\" $Id: chsh.1 1342 2007-11-10 23:46:11Z nekral-guest $
+.\"  (c) 1994 by salvatore valente <svalente@athena.mit.edu>
+.\"
+.\"  this program is free software.  you can redistribute it and
+.\"  modify it under the terms of the gnu general public license.
+.\"  there is no warranty.
+.TH CHSH 1 "October 13 1994" "chsh" "Linux Reference Manual"
+.SH 名稱
+chsh \- 更換你登入時所用的shell
+.SH 語法
+.B chsh
+[\ \-s\ shell\ ] [\ \-l\ ] [\ \-u\ ] [\ \-v\ ] [\ username\ ]
+.SH 描述
+.B chsh
+用來更換你登入時所用的shell
+。在命令列沒指定shell。
+.B chsh
+會提示一個給你。
+.SS 有效的shell
+.B chsh
+可用指定路徑全名的方式來指定任何一個可執行的檔案。
+然而,如果此 shell並沒紀錄在
+.I /etc/shells
+檔上,則chsh會提出警告訊息。
+.SH 選項
+.TP
+.I "\-l, \-\-list\-shells"
+列出紀錄在
+.I /etc/shells
+的shell。
+.TP
+.I "\-s, \-\-shell"
+變更你的登入shell.
+.TP
+.I "\-u, \-\-help"
+使用短訊。
+.TP
+.I "\-v, \-\-version"
+版本資訊
+.SH "相關文件"
+.BR login (1),
+.BR passwd (5),
+.BR shells (5)
+.SH 作者
+Salvatore Valente <svalente@mit.edu>
diff --git a/man/zh_TW/groupadd.8 b/man/zh_TW/groupadd.8
new file mode 100644 (file)
index 0000000..ff47d68
--- /dev/null
@@ -0,0 +1,88 @@
+.\" $Id: groupadd.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.TH GROUPADD 8
+.SH 名稱
+groupadd \- 建 立 新 群 組
+.SH 語法
+\fBgroupadd\fR [\fB\-g\fR \fIgid\fR [\fB\-o\fR]] [\fB\-f\fR] \fIgroup\fR
+.SH 描述
+\fBgroupadd\fR
+可 指 定 群 組 名 稱 來 建 立 新 的 群 組 帳 號 。
+需 要 時 可 從 系 統 中 取 得 新 群 組 值 。
+\fBgroupadd\fR 有 下 列 選 項 可 用 。
+.IP \fB\-f\fR
+This is \fIforce\fR flag. 
+新 增 一 個 已 經 存 在 的 群 組 帳 號 , 系 統 會 出
+現 錯 誤 訊 息 然 後 結 束 \fBgroupadd\fR 。
+ 如 果 是 這 樣 的 情 況 , 不 會 新 增 這 個 群 組 
+( 如 果 是 這 個 情 況 下 , 系 統 不 會 再 新 增 一 次 )
+.br
+也 可 同 時 加 上 \fB\-g\fR 選 項
+當 你 加 上 一 個 \fIgid\fR , 此 時  \fIgid\fR
+就 不 用 是 唯 一 值 , 可 不 加 \fB\-o\fR 參 數 ,
+建 好 群 組 後 會 顯 結 果  
+(adding a group as neither \fB\-g\fR or \fB\-o\fR options were
+specified).
+
+.IP "\fB\-g \fIgid\fR"
+group's ID 值 。
+除  非 使 用 \fB\-o\fR 參 數 不 然 該 值 必 須 是 唯 一 , 不 可 相 同 。
+數 值 不 可 為 負 。
+預 設 為 最 小  不  得 小 於 500 而 逐 次 增 加 。 0~999 傳 統 上
+是 保 留 給 \fI系統帳號\fR 使 用 。
+.IP \fB\-r\fR
+此 參 數 是 用 來 建 立 \fI系統帳號\fR 。
+的  UID 會 比 定 義 在 系 統 檔 上 /etc/login.defs.
+的 UID_MIN 來 的 小 。 注 意 useradd 此 用 法 所 建
+立  的 帳 號 不 會 建 立 使 用 者 目 錄 , 也 不 會
+在 乎 紀 錄 在 /etc/login.defs. 的 定 義 值  。  如
+果  你 想 要 有 使 用 者 目 錄 須 額 外 指 定 \-m 參
+數 來 建 立 系 統 帳 號 。 這 是 RED HAT 額  外  增
+設 的 選 項 。
+它 會 自 動 幫 你 選 定 一 個 小 於 999 的 \fIgif\fR
+不 需 要 再 加 上 \fB\-g\fR 參 數 。
+.br
+這 是 RED HAT 額  外  增 設 的 選 項 。
+
+.br
+這 是 RED HAT 額  外  增 設 的 選 項 。
+.SH 檔案
+\fI/etc/group\fR \- 群 組 資 訊
+.br
+\fI/etc/gshadow\fR \- 群 組 資 訊 加 密
+.SH 相關文件
+.BR chfn (1),
+.BR chsh (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8),
+.BR passwd (1),
+.BR groupdel (8),
+.BR groupmod (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_TW/groupdel.8 b/man/zh_TW/groupdel.8
new file mode 100644 (file)
index 0000000..c950636
--- /dev/null
@@ -0,0 +1,55 @@
+.\" $Id: groupdel.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 - 1993, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.TH GROUPDEL 8
+.SH 名稱
+groupdel \- 刪除群組
+.SH 語法
+.B groupdel
+.I group
+.SH 描述
+\fBgroupdel\fR 命令會修改系統帳號檔,會刪除所有已經存在的\fIgroup\fR.
+群組名須存在。
+.PP
+你須手動確認一下所有的檔案系統確保有沒有檔案還是沒修正群組名變成群組ID。
+.SH 警告
+如果有任何一個群組的使用者在線上的話就不能移除該群組。
+最好先移除使用者後再移除群組。
+.SH 檔案
+\fI/etc/group\fR \- 群組資訊
+\fI/etc/gshadow\fR \- 群組資訊加密
+.SH 相關文件
+.BR chfn (1),
+.BR chsh (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupmod (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_TW/groupmod.8 b/man/zh_TW/groupmod.8
new file mode 100644 (file)
index 0000000..19fb6be
--- /dev/null
@@ -0,0 +1,63 @@
+.\" $Id: groupmod.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.TH GROUPMOD 8
+.SH 名稱
+groupmod \- 修 改 群 組
+.SH 語法
+\fBgroupmod\fR [\fB\-g\fR \fIgid \fR[\fB\-o\fR]] [\fB\-n\fR \fIgroup_name \fR] \fIgroup\fR
+.SH 描述
+
+\fBgroupmod\fR 命 令 會 參 照 你 命 令 列 上 指 定 的 部 份 
+修 改 系 統 帳 號 檔 。 下 列 為 \fIgroupmod\fR 可 選 用 的 參 數 。
+
+.IP "\fB\-g\fR \fIgid\fR"
+群 組 I D 值 。
+必 須 為 唯 一 的 ID 值 , 除 非 用 \-o 選 項 。
+數 字 不 可 為 負 值。預 設 為 最
+小 不 得 小 於 999 而 逐 次 增 加 。 0~ 499 傳 統 上
+是 保 留 給 系 統 帳 號 使 用 。
+如 果 有 檔 案 使 用 舊 的 群 組 ID , 而 這 時 候 你 新 增 的 群 組 ID
+恰 好 與 舊 的 相 同 , 這 樣 的 話
+你 要 手 動 改 一 下 這 些 檔 案 的 群 組 ID 。
+.IP "\fB\-n\fR \fIgroup_name\fR"
+更 改 群 組 名 。
+.SH 檔案
+\fI/etc/group\fR \- 群 組 資 訊 
+.br
+\fI/etc/gshadow\fR \- 群 組 資 訊 加 密
+.SH 相關文件
+.BR chfn (1),
+.BR chsh (1),
+.BR useradd (8),
+.BR userdel (8),
+.BR usermod (8),
+.BR passwd (1),
+.BR groupadd (8),
+.BR groupdel (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_TW/newgrp.1 b/man/zh_TW/newgrp.1
new file mode 100644 (file)
index 0000000..3fb79f6
--- /dev/null
@@ -0,0 +1,38 @@
+.\" Original author unknown.  This man page is in the public domain.
+.\" Modified Sat Oct  9 17:46:48 1993 by faith@cs.unc.edu
+.TH NEWGRP 1 "9 October 1993" "Linux 1.2" "Linux Programmer's Manual"
+
+.SH NAME
+newgrp \- 登入到新的使用者組中
+
+.SH "總覽 (SYNOPSIS)"
+.BI "newgrp [ " group " ]"
+
+.SH "描述 (DESCRIPTION)"
+.B Newgrp
+改變 調用者 的 使用者組標識, 類似於
+.BR login (1).
+調用者 仍舊 登入 在 系統 中, 當前目錄 也不變, 但是 檔案的訪問權限 將 根據
+新的 使用者組 ID 計算.
+.LP
+如果 沒有 指定 使用者組, GID 將 變成 登入 的 GID.
+.LP
+
+.SH "檔案 (FILES)"
+.I /etc/group
+.br
+.I /etc/passwd
+
+.SH "另見 (SEE ALSO)"
+.BR login "(1), " group (5)
+
+.SH "作者 (AUTHOR)"
+Originally by Michael Haardt. Currently maintained by 
+Peter Orbaek (poe@daimi.aau.dk).
+
+.SH "[中文版維護人]"
+.B 徐明 <xuming@users.sourceforge.net>
+.SH "[中文版最新更新]"
+.BR 2003/05/13
+.SH "《中國Linux論壇man手冊頁翻譯計劃》"
+.BI http://cmpp.linuxforum.net
diff --git a/man/zh_TW/passwd.5 b/man/zh_TW/passwd.5
new file mode 100644 (file)
index 0000000..57b5ea3
--- /dev/null
@@ -0,0 +1,132 @@
+.\" Copyright (c) 1993 Michael Haardt (michael@moria.de), Fri Apr 2 11:32:09 MET DST 1993
+.\" Chinese Version Copyright Scorpio, www.linuxforum.net, 2000
+.\"
+.\" This is free documentation; 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.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
+.\" USA.
+.\"
+.\" Modified Sun Jul 25 10:46:28 1993 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Aug 21 18:12:27 1994 by Rik Faith (faith@cs.unc.edu)
+.\" Modified Sun Jun 18 01:53:57 1995 by Andries Brouwer (aeb@cwi.nl)
+.\" Modified Mon Jan 5 20:24:40 MET 1998 by Michael Haardt
+.\" (michael@cantor.informatik.rwth-aachen.de)
+.TH PASSWD 5 "January 5, 1998" "" "File formats"
+.SH NAME 名稱
+passwd \- 密碼檔案
+.SH 描述
+.B Passwd
+是個純文字檔, 它包含了一個系統帳戶列表,
+給出每個帳戶一些有用的信息,比如使用者 ID,組 ID, 家目錄, shell,等.
+通常它也包含了每個使用者經過加密的密碼.
+它通常應該是可讀的(許\多命令,工具程式,像
+.BR ls (1)
+用它做使用者 Id 到使用者名稱的映射),但是只允許\超級使用者有寫方式權限.
+.PP
+在過去美好的日子裏,這種一般的讀許\可沒有什麼大問題.
+每個人都能讀到加密了的密碼,因為硬體太慢以至於不能解開一個
+精選的密碼,另外,這基本假定是為友好的使用團體使用的.
+現在,許\多人運行一些版本的影子密碼套件,它們在
+.I /etc/passwd
+的密碼域裏是 *,而不再是加密的口令,
+加密的口令放在
+.I /etc/shadow
+中,那個檔案只有超級使用者能讀.
+.PP
+不管是否使用了影子密碼,許\多系統管理員使用一個星號在加密的密碼字段
+以確保使用者不能鑒別他(她)自己的密碼. (見下面的注意)
+.PP
+如果你建立了一個新的登入,首先放個星號在密碼字段,
+然後使用
+.BR passwd (1)
+設置它.
+.PP
+(密碼檔案)裏每行一條記錄,並且每行有這樣的格式:
+.sp
+.RS
+account:password:UID:GID:GECOS:directory:shell
+(帳號:密碼:使用者ID:組ID:一般的信息:目錄:shell)
+.RE
+.sp
+字段描述如下:
+.sp
+.RS
+.TP 1.0in
+.I account
+使用者在系統中的名字,它不能包含大寫字母.
+.TP
+.I password
+加密的使用者密碼,或者星號。
+.TP
+.I UID
+使用者 ID 數。
+.TP
+.I GID
+使用者的主要組 ID 數。
+.TP
+.I GECOS
+這字段是可選的,通常為了存放信息目的而設的.
+通常,它包含了使用者的全名. GECOS 意思是通用電氣綜合作業系統(General Electric
+Comprehensive Operating System), 當 GE 的大型系統部分割售賣給 Honeywell
+時它被改為 GCOS. Dennis Ritchie 作過報告:"有時我們發送印刷品或批道作業到
+GCOS機器時,gcos 字段打斷了 $IDENT 卡的信息,不太美觀。"(譯者:我想是太長吧) 
+.TP
+.I directory
+使用者的 $HOME 目錄.
+.TP
+.I shell
+登入時運行的程式(如果空的,使用
+.BR /bin/sh ).
+如果設為不存在的執行(程式),使用者不能通過
+.BR login (1)
+登入.
+.RE
+.SH 注意
+如果你想建立使用者組,他們的 GID 必須相等並且一定是在
+\fI/etc/group\fP的一條記錄, 要不然組就不存在.
+.PP
+如果加密密碼設成星號,使用者將不能用
+.BR login (1)
+來登入, 但依然可以用
+.BR rlogin (1)
+登入, 通過
+.BR rsh (1)
+或者
+.BR cron (1)
+或者
+.BR at (1)
+或者 mail 過濾器等程式運行已有的進程和開始新的等.
+試圖通過簡單改變 shell 字段鎖住一個使用者結果是一樣的,
+而且還附上了使用
+.B su(1) 
+的權限.
+.SH 相關檔案
+.I /etc/passwd
+.SH "又見"
+.BR passwd (1),
+.BR login (1),
+.BR su (1),
+.BR group (5),
+.BR shadow (5)
+.br
+.SH "[中文版維護人]"
+.B Scorpio <rawk@chinese.com>
+.SH "[中文版最新更新]"
+.B 2000/11/26
+.SH "《中國linux論壇man手冊頁翻譯計劃》:"
+.BI http://cmpp.linuxforum.net
diff --git a/man/zh_TW/su.1 b/man/zh_TW/su.1
new file mode 100644 (file)
index 0000000..964d3d2
--- /dev/null
@@ -0,0 +1,62 @@
+.TH SU "1" "1999年8月" "GNU sh-utils 2.0"  FSF
+.SH NAME(名稱)
+su \- 運行替換使用者和組標識的shell
+.SH SYNOPSIS(總覽)
+.B su
+[\fIOPTION\fR]... [\fI-\fR] [\fIUSER \fR[\fIARG\fR]...]
+.SH DESCRIPTION(描述)
+.PP
+.PP
+修改有效使用者標識和組標識為USER的.
+.TP
+-, \fB\-l\fR, \fB\-\-login\fR
+使得shell為可登入的shell
+.TP
+\fB\-c\fR, \fB\-\-commmand\fR=\fICOMMAND\fR
+傳遞單個COMMAND給\fB\-c\fR的shell.
+.TP
+\fB\-f\fR, \fB\-\-fast\fR
+傳遞\fB\-f\fR給shell(針對csh或tcsh)
+.TP
+\fB\-m\fR, \fB\-\-preserve\-environment\fR
+不重置環境變量
+.TP
+\fB\-p\fR
+與\fB\-m\fR同
+.TP
+\fB\-s\fR, \fB\-\-shell\fR=\fISHELL\fR
+如果/etc/shells允許\,運行SHELL.
+.TP
+\fB\-\-help\fR
+顯示幫助並退出
+.TP
+\fB\-\-version\fR
+輸出版本信息並退出
+.PP
+單一的-意味著\fB\-l\fR.如果沒有給定USER,則假定為root.
+.SH (報告BUGS)
+報告bugs,請發郵件到bug-sh-utils@gnu.org.
+.SH (另見)
+以Texinfo手冊形式維護的
+.B su
+完全文件.如果你正確地安裝了
+.B info
+和
+.B echo
+命令
+.IP
+.B info su
+.PP
+應該可以使你訪問到整個手冊.
+.SH COPYRIGHT(版權)
+版權所有 \(co 1999 Free Software Foundation, Inc.
+.br
+這是自由軟體;參看複製條件的源檔案.不作任何擔保,更不用說商品性或者基於特殊目的的適
+用性.
+
+.SH "[中文版維護人]"
+.B riser <boomer@ccidnet.com>
+.SH "[中文版最新更新]"
+.BR 2001/08/08
+.SH "《中國linux論壇man手冊頁翻譯計劃》:"
+.BI http://cmpp.linuxforum.net
diff --git a/man/zh_TW/useradd.8 b/man/zh_TW/useradd.8
new file mode 100644 (file)
index 0000000..e670831
--- /dev/null
@@ -0,0 +1,184 @@
+.\" $Id: useradd.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 \- 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.TH USERADD 8
+.SH 名 稱
+useradd \- 帳 號 建 立 或 更 新 新 使 用 者 的 資 訊
+.SH 語 法
+.TP 8
+.B useradd
+.\" .RB [ \-A
+.\" .RI { method | \fBDEFAULT\fR "},... ]"
+.RB [ \-c
+.IR comment ]
+.RB [ \-d
+.IR home_dir ]
+.br
+.RB [ \-e
+.IR expire_date ]
+.RB [ \-f
+.IR inactive_time ]
+.br
+.RB [ \-g
+.IR initial_group ]
+.RB [ \-G
+.IR group [,...]]
+.br
+.RB [ \-m " [" \-k
+.IR skeleton_dir ] " |" " " \-M ]
+.RB [ \-s
+.IR shell ]
+.br
+.RB [ \-u
+.IR uid " ["
+.BR \-o ]]
+.RB [ \-n ]
+.RB [ \-r ]
+.I login
+.TP 8
+\fBuseradd\fR \fB\-D\fR [\fB\-g\fR \fIdefault_group\fR] [\fB\-b\fR \fIdefault_home\fR]
+.br
+[\fB\-f\fR \fIdefault_inactive\fR] [\fB\-e\fR \fIdefault_expire_date\fR]
+.br
+[\fB\-s\fR \fIdefault_shell\fR]
+.SH 描 述
+.SS 新 帳 號 建 立
+當 不 加 \fB\-D\fR 參 數 , \fBuseradd\fR 指 令 使 用 命 令 列 來 指 定
+新 帳 號 的 設 定 值 and 使 用 系 統 上 的 預 設 值 .
+新 使 用 者 帳 號 將 產 生 一 些 系 統 檔 案 , 使 用 者 目 錄 建 立 ,
+拷 備 起 始 檔 案 等
+, 這 些 均 可 以 利 用 命 令列 選 項 指 定 。 此 版 本 為 Red Hat Linux 提 供
+, 可 幫 每 個 新 加 入 的 使 用 者 建 立 個 別 的 group , 毋 須 添 加 \fB\-n\fR
+選 項 。  
+\fBuseradd\fR 可 使 用 的 選 項 為
+.IP "\fB\-c\fR \fIcomment\fR"
+新 帳 號 password 檔 的 說 明 欄 。 
+.IP "\fB\-d\fR \fIhome_dir\fR"
+新 帳 號 每 次 登 入 時 所 使 用 的 \fIhome_dir\fR 。 
+預 設 值 為 \fIdefault_home\fR 內 \fIlogin\fR 名 稱 , 並 當 成 登 入 時 目 錄 
+名 稱 。
+.IP "\fB\-e\fR \fIexpire_date\fR"
+帳 號 終 止 日 期 。 日 期 的 指 定 格 式 為 \fIMM/DD/YY\fR 。
+.IP "\fB\-f\fR \fIinactive_days\fR"
+帳 號 過 期 幾 日 後 永 久 停 權 。
+當 值 為 0 時 帳 號 則 立 刻 被 停 權 。
+而 當 值 為 \-1 時 則 關 閉 此 功\ 能 , 預 設 值 為 \-1
+.IP "\fB\-g\fR \fIinitial_group\fR"
+group 名 稱 或 以 數 字 來 做 為 使 用 者 登 入 起 始 群 組 (group) 。
+群 組 名 須 為 現 有 存 在 的 名 稱 。
+群 組 數 字 也 須 為 現 有 存 在 的 群 組 。
+預 設 的 群 組 數 字 為 1 。
+.IP "\fB\-G\fR \fIgroup,[...]\fR"
+定 義 此 使 用 者 為 此 一 堆 groups 的 成 員 。
+每 個 群 組 使 用 "," 區 格 開 來 , 不 可 以 夾 雜 空 白 字 元 。
+ 群 組 名 同 \fB\-g\fR 選 項 的 限 制 。
+定 義 值 為 使用 者 的 起 始 群 組 。
+.IP \fB\-m\fR
+使 用 者 目 錄 如 不 存 在 則 自 動 建 立 。
+如 使 用 \fB\-k\fR 選 項 \fIskeleton_dir\fR 內 的 檔 案 將 複 製 至 使 用 者 目 
+錄 下 。
+然 而 在 \fI/etc/skel\fR 目 錄 下 的 檔 案 也 會 複 製 過 去 取 代 。
+任 何 在 \fIskeleton_dir\fR or \fI/etc/skel\fR 的 目 錄 也 相 同 會 在 使 用 者
+目 錄 下 一 一 建 立 。
+The \fB\-k\fR 同 \fB\-m\fR
+不 建 立 目 錄 以 及 不 複 製 任 何 檔 案 為 預 設 值 。
+.IP \fB\-M\fR
+不 建 立 使 用 者 目 錄 , 即 使 \fI/etc/login.defs\fR 系 統 檔 設 定 要 建 
+立 使 用 者 目 錄 。
+.IP \fB\-n\fR
+預 設 值 使 用 者 群 組 與 使 用 者 名 稱 會 相 同 。 此 選 項 將 取 消 此 預 
+設 值 。
+.IP \fB\-r\fR
+此 參 數 是 用 來 建 立 系 統 帳 號 。 系 統 帳 號 的 UID 會 比 定 義 在 系
+統 檔 上 \fI/etc/login.defs\fR.
+的 UID_MIN 來 的 小 。 注 意 \fBuseradd\fR 此 用 法 所 建 立 的 帳 號 不 會
+建 立 使 用 者 目 錄
+, 也 不 會 在 乎 紀 錄 在 \fI/etc/login.defs\fR. 的 定 義 值 。
+如 果 你 想 要 有 使 用 者 目 錄 須 額 外 指 定 \fB\-m\fR 參 數 來 建 立 系 
+統 帳 號 。
+這 是 RED HAT 額 外 增 設 的 選 項 。
+.IP "\fB\-s\fR \fIshell\fR"
+使 用 者 登 入 後 使 用 的 shell 名 稱 。
+預 設 為 不 填 寫 , 這 樣 系 統 會 幫 你 指 定 預 設 的 登 入 shell 。
+.IP "\fB\-u\fR \fIuid\fR"
+使 用 者 的 ID 值 。 必 須 為 唯 一 的 ID 值 , 除 非 用 \fI\-o\fR 選 項 。
+數 字 不 可 為 負 值。預 設 為 最 小 不 得 小 於 999 而 逐 次 增 加 。
+0~ 999 傳 統 上 是 保 留 給 系 統 帳 號 使 用 。
+
+.SS 改 變 預 設 值
+當 \fB\-D\fR 選 項 出 現 時 , \fBuseradd\fR 秀 出 現 在 的 預 設 值 , 或 是 藉 
+由
+命 令 列 的 方 式 更 新 預 設 值 。
+可 用 選 項 為 :
+.IP "\fB\-b\fR \fIdefault_home\fR"
+定 義 使 用 者 所 屬 目 錄 的 前 一 個 目 錄 。
+使 用 者 名 稱 會 附 加 在 \fIdefault_home\fR 後 面
+用 來 建 立 新 使 用 者 的 目 錄 。
+當 然 使 用 \fB\-d\fI 後 則 此 選 項 無 效 。
+.IP "\fB\-e\fR \fIdefault_expire_date\fR"
+使 用 者 帳 號 停 止 日 期 。
+.IP "\fB\-f\fR \fIdefault_inactive\fR"
+帳 號 過 期 幾 日 後 停 權 。
+.IP "\fB\-g\fR \fIdefault_group\fR"
+新 帳 號 起 始 群 組 名 或 ID 。
+群 組 名 須 為 現 有 存 在 的 名 稱 。
+群 組 I D 也 須 為 現 有 存 在 的 群 組 。
+.IP "\fB\-s\fR \fIdefault_shell\fR"
+使 用 者 登 入 後 使 用 的 shell 名 稱 。
+往 後 新 加 入 的 帳 號 都 將 使 用 此 shell.
+.PP
+如 不 指 定 任 何 參 數 , \fBuseradd\fR 顯 示 目 前 預 設 的 值 。
+.SH 注 記 
+系 統 管 理 者 有 義 務 在 \fI/etc/skel\fR 目 錄 下 放 置 使 用 者 定 義 檔 。
+.br
+此 版 本 『useradd』 由 Red Hat 修 改 。
+.SH 警 告
+不 可 新 增 使 用 者 於 NIS 群 組 中 。
+你 必 須 在 NIS 伺 服 器 上 執 行 。
+.SH 檔 案
+\fI/etc/passwd\fR \- 使 用 者 帳 號 資 訊
+.br
+\fI/etc/shadow\fR \- 使 用 者 帳 號 資 訊 加 密
+.br
+\fI/etc/group\fR \- 群 組 資 訊
+.br
+\fI/etc/default/useradd\fR \- 定 義 資 訊
+.br
+\fI/etc/login.defs\fR \- 系 統 廣 義 設 定
+.br
+\fI/etc/skel/\fR \- 內 含 定 義 檔 的 目 錄
+.SH SEE ALSO
+.BR chfn (1),
+.BR chsh (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.BR userdel (8),
+.BR usermod (8)
+.SH AUTHOR
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_TW/userdel.8 b/man/zh_TW/userdel.8
new file mode 100644 (file)
index 0000000..afb24c9
--- /dev/null
@@ -0,0 +1,65 @@
+.\" $Id: userdel.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 \- 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.TH USERDEL 8
+.SH 名稱
+userdel \- 刪 除 使 用 者 帳 號 及 相 關 檔 案
+.SH 語法
+.B userdel
+[\fB\-r\fR]
+.I login
+.SH 描述
+\fBuserdel\fR 命 令 修 改 系 統 帳 號 檔
+刪 除 所 有 \fIlogin\fR 會 參 考 的 部 份 。
+使 用 者 名 稱 必 須是 存 在 的 。
+.IP \fB\-r\fR
+使 用 者 目 錄 下 的 檔 案 一 並 移 除 。 在 其 他 位 置 上 的 檔
+案 也 將 一 一 找 出 並 刪 除 。
+.SH 檔案
+\fI/etc/passwd\fR \- 使 用 者 帳 號 資 料
+.br
+\fI/etc/shadow\fR \- 使 用 者 帳 號 資 訊 加 密
+.br
+\fI/etc/group\fR \- 群 組 資 訊
+.SH 警告
+\fBuserdel\fR 不 允 許 你 移 除 正 在線 上
+的 使 用 者 帳 號 。
+你 必 須 砍 掉 此 帳 號 現 在 在 系 統 上 執 行 的 程 序 才 能 進 行 帳 號
+刪 除 。
+不 能 在 NIS client 端 移 除 NIS 屬 性 的 東 西 。
+這 動 做 須 在 NIS server 端 上 執 行 。
+.SH SEE ALSO
+.BR chfn (1),
+.BR chsh (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.BR useradd (8),
+.BR usermod (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/man/zh_TW/usermod.8 b/man/zh_TW/usermod.8
new file mode 100644 (file)
index 0000000..01926cf
--- /dev/null
@@ -0,0 +1,129 @@
+.\" $Id: usermod.8 1342 2007-11-10 23:46:11Z nekral-guest $
+.\" Copyright 1991 \- 1994, Julianne Frances Haugh
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of Julianne F. Haugh nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY JULIE HAUGH AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL JULIE HAUGH OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.TH USERMOD 8
+.SH 名稱
+usermod \- 修 改 使 用 者 帳 號
+.SH 語法
+.TP 8
+.B usermod
+.\" .RB [ \-A
+.\" .RI { method | \fBDEFAULT\fR "},... ]"
+.RB [ \-c
+.IR comment ]
+.RB [ \-d
+.IR home_dir " ["
+.BR \-m ]]
+.br
+.RB [ \-e
+.IR expire_date ]
+.RB [ \-f
+.IR inactive_time ]
+.br
+.RB [ \-g
+.IR initial_group ]
+.RB [ \-G
+.IR group [,...]]
+.br
+.RB [ \-l
+.IR login_name ]
+.RB [ \-s
+.IR shell ]
+.br
+.RB [ \-u
+.IR uid " ["
+.BR \-o ]]
+.I login
+.SH 描述
+\fBusermod\fR 命 令 會 參 照 你 命 令 列 上 指 定 的 部 份 修 改 系 統 帳 
+號 檔 。 下 列 為 \fBusermod\fR 可 選 用 的 參 數 。
+
+.\" .IP "\fB\-A \fImethod\fR|\fBDEFAULT\fR"
+.\" The new value of the user's authentication method.
+.\" The authentication method is the name of a program which is responsible
+.\" for validating the user's identity.
+.\" The string \fBDEFAULT\fR may be used to change the user's authentication
+.\" method to the standard system password method.
+.IP "\fB\-c\fR \fIcomment\fR"
+更 新 使 用 者 帳 號 password 檔 中 的 注 解 欄
+, 一 般 是 使 用 \fBchfn\fR(1) 來 修 改 。
+.IP "\fB\-d\fR \fIhome_dir\fR"
+更 新 使 用 者 新 的 登 入 目 錄 。
+如 果 給 定 \fB\-m\fR 選 項 , 使 用 者 舊 目 錄 會 搬 到 新 的 目 錄 去 
+,如 舊 目 錄 不 存 在 則 建 個 新 的 。
+.IP "\fB\-e\fR \fIexpire_date\fR"
+加 上 使 用 者 帳 號 停 止 日 期 。 日 期 格 式 為 \fIMM/DD/YY\fR.
+.IP "\fB\-f\fR \fIinactive_days\fR"
+帳 號 過 期 幾 日 後 永 久 停 權。當 值 為  0  時
+帳  號 則 立 刻 被 停 權 。 而 當 值 為 \-1 時 則 關閉此功\能
+。預 設 值 為 \-1。
+.IP "\fB\-g\fR \fIinitial_group\fR"
+更 新 使 用 者 新 的 起 始 登 入 群 組 。 群 組 名 須 已 存 在 
+。群 組 ID 必 須 參 照 既 有 的 的 群 組 。 群 組 ID 預 設 值 為 1 。
+.IP "\fB\-G\fR \fIgroup,[...]\fR"
+定 義 使 用 者 為  一 堆 groups 的 成 員 。 每
+個 群 組 使 用 "," 區 格 開 來 , 不 可 以 夾 雜 空
+白 字 元 。 群 組 名 同 \-g 選 項 的 限 制 。
+如 果 使 用 者 現 在 的 群 組 不 再 此 列 , 則 將 使 用 者 由 該 
+群 組 中 移 除 。
+.IP "\fB\-l\fR \fIlogin_name\fR"
+變 更 使 用 者 \fIlogin\fR 時 的 名 稱 為 \fIlogin_name\fR 。
+其 於 不 變 。 特 別 是 , 使 用 者 目 錄 名 應 該 也 會 跟 著 更 動 成 新 
+的 登 入 名 。
+.IP "\fB\-s\fR \fIshell\fR"
+指 定 新 登 入 shell 。 如 此 欄 留 白 , 系 統 將 選 用 系 統 預 設 shell 。
+.IP "\fB\-u\fR \fIuid\fR"
+使 用 者 ID 值 。必 須 為 唯 一 的 ID 值 , 除 非 用 \fI\-o\fR 選 項 。 數 
+字 不 可 為 負 值。預 設 為 最 小  不  得 小 於 999 而 逐 次 
+增 加 。 0~ 999 傳 統 上 是 保 留 給 系 統 帳 號 使 用 。
+使 用 者 目 錄 樹 下 所 有 的 檔 案 目 錄 其 user ID 會 自 動 改 變 。
+放 在 使 用 者 目 錄 外 的 檔 案 則 要 自 行 手 動 更 動 。
+.SH 警告
+\fBusermod\fR 不 允 許 你 改 變  正 在線 上 的 使 用 者 帳 號 名 稱 。
+當 usermod 用 來 改 變 user ID, 必 須 確 認 這 名 user 沒 在 電 腦 上 執 
+行 任 何 程 序。
+你 需 手 動 更 改 使 用 者 的 crontab 檔 。
+也 需 手 動 更 改 使 用 者 的 at 工 作 檔 。
+採 用 NIS server 須 在 server 上 更 動 相 關 的 NIS 設 定 。
+
+.SH 檔案
+\fI/etc/passwd\fR \- 使 用 者 帳 號 資 訊
+.br
+\fI/etc/shadow\fR \- 使 用 者 帳 號 資 訊 加 密
+.br
+\fI/etc/group\fR \- 群 組 資 訊
+.SH 相關文件
+.BR chfn (1),
+.BR chsh (1),
+.BR groupadd (8),
+.BR groupdel (8),
+.BR groupmod (8),
+.BR passwd (1),
+.BR useradd (8),
+.BR userdel (8)
+.SH 作者
+Julianne Frances Haugh (jfh@tab.com)
diff --git a/missing b/missing
new file mode 100755 (executable)
index 0000000..1c8ff70
--- /dev/null
+++ b/missing
@@ -0,0 +1,367 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2006-05-10.23
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
+#   Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case $1 in
+  lex|yacc)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $1 in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo "#! /bin/sh"
+       echo "# Created by GNU Automake missing as a replacement of"
+       echo "#  $ $@"
+       echo "exit 0"
+       chmod +x $file
+       exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f y.tab.h; then
+       echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f lex.yy.c; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+        you modified a dependency of a manual page.  You may need the
+        \`Help2man' package in order for those modifications to take
+        effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo ".ab help2man is required to generate this page"
+       exit 1
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+       /^@setfilename/{
+         s/.* \([^ ]*\) *$/\1/
+         p
+         q
+       }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+       case $firstarg in
+       *o*)
+           firstarg=`echo "$firstarg" | sed s/o//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+       case $firstarg in
+       *h*)
+           firstarg=`echo "$firstarg" | sed s/h//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/packaging/shadow-4.0.17-login.defs b/packaging/shadow-4.0.17-login.defs
new file mode 100644 (file)
index 0000000..18733bf
--- /dev/null
@@ -0,0 +1,58 @@
+# *REQUIRED*
+#   Directory where mailboxes reside, _or_ name of file, relative to the
+#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
+#   QMAIL_DIR is for Qmail
+#
+#QMAIL_DIR     Maildir
+MAIL_DIR       /var/spool/mail
+#MAIL_FILE     .mail
+
+# Password aging controls:
+#
+#      PASS_MAX_DAYS   Maximum number of days a password may be used.
+#      PASS_MIN_DAYS   Minimum number of days allowed between password changes.
+#      PASS_MIN_LEN    Minimum acceptable password length.
+#      PASS_WARN_AGE   Number of days warning given before a password expires.
+#
+PASS_MAX_DAYS  99999
+PASS_MIN_DAYS  0
+PASS_MIN_LEN   5
+PASS_WARN_AGE  7
+
+#
+# Min/max values for automatic uid selection in useradd
+#
+UID_MIN                          500
+UID_MAX                        60000
+
+#
+# Min/max values for automatic gid selection in groupadd
+#
+GID_MIN                          500
+GID_MAX                        60000
+
+#
+# If defined, this command is run when removing a user.
+# It should remove any at/cron/print jobs etc. owned by
+# the user to be removed (passed as the first argument).
+#
+#USERDEL_CMD   /usr/sbin/userdel_local
+
+#
+# If useradd should create home directories for users by default
+# On RH systems, we do. This option is overridden with the -m flag on
+# useradd command line.
+#
+CREATE_HOME    yes
+
+# The permission mask is initialized to this value. If not specified, 
+# the permission mask will be initialized to 022.
+UMASK           077
+
+# This enables userdel to remove user groups if no members exist.
+#
+USERGROUPS_ENAB yes
+
+# Use MD5 or DES to encrypt password? Red Hat use MD5 by default.
+MD5_CRYPT_ENAB yes
+
diff --git a/packaging/shadow-4.0.18.1-useradd b/packaging/shadow-4.0.18.1-useradd
new file mode 100644 (file)
index 0000000..4e81146
--- /dev/null
@@ -0,0 +1,9 @@
+# useradd defaults file
+GROUP=100
+HOME=/home
+INACTIVE=-1
+EXPIRE=
+SHELL=/bin/bash
+SKEL=/etc/skel
+CREATE_MAIL_SPOOL=yes
+
diff --git a/packaging/shadow-4.1.4-redhat.patch b/packaging/shadow-4.1.4-redhat.patch
new file mode 100644 (file)
index 0000000..3143c21
--- /dev/null
@@ -0,0 +1,75 @@
+diff -up shadow-4.1.4/libmisc/find_new_gid.c.redhat shadow-4.1.4/libmisc/find_new_gid.c
+--- shadow-4.1.4/libmisc/find_new_gid.c.redhat 2009-04-23 19:36:42.000000000 +0200
++++ shadow-4.1.4/libmisc/find_new_gid.c        2009-05-15 12:01:18.000000000 +0200
+@@ -58,11 +58,11 @@ int find_new_gid (bool sys_group,
+       assert (gid != NULL);
+       if (!sys_group) {
+-              gid_min = (gid_t) getdef_ulong ("GID_MIN", 1000UL);
++              gid_min = (gid_t) getdef_ulong ("GID_MIN", 500UL);
+               gid_max = (gid_t) getdef_ulong ("GID_MAX", 60000UL);
+       } else {
+               gid_min = (gid_t) getdef_ulong ("SYS_GID_MIN", 1UL);
+-              gid_max = (gid_t) getdef_ulong ("GID_MIN", 1000UL) - 1;
++              gid_max = (gid_t) getdef_ulong ("GID_MIN", 500UL) - 1;
+               gid_max = (gid_t) getdef_ulong ("SYS_GID_MAX", (unsigned long) gid_max);
+       }
+       used_gids = alloca (sizeof (bool) * (gid_max +1));
+diff -up shadow-4.1.4/libmisc/find_new_uid.c.redhat shadow-4.1.4/libmisc/find_new_uid.c
+--- shadow-4.1.4/libmisc/find_new_uid.c.redhat 2009-04-23 19:37:12.000000000 +0200
++++ shadow-4.1.4/libmisc/find_new_uid.c        2009-05-15 12:01:39.000000000 +0200
+@@ -58,11 +58,11 @@ int find_new_uid (bool sys_user,
+       assert (uid != NULL);
+       if (!sys_user) {
+-              uid_min = (uid_t) getdef_ulong ("UID_MIN", 1000UL);
++              uid_min = (uid_t) getdef_ulong ("UID_MIN", 500UL);
+               uid_max = (uid_t) getdef_ulong ("UID_MAX", 60000UL);
+       } else {
+               uid_min = (uid_t) getdef_ulong ("SYS_UID_MIN", 1UL);
+-              uid_max = (uid_t) getdef_ulong ("UID_MIN", 1000UL) - 1;
++              uid_max = (uid_t) getdef_ulong ("UID_MIN", 500UL) - 1;
+               uid_max = (uid_t) getdef_ulong ("SYS_UID_MAX", (unsigned long) uid_max);
+       }
+       used_uids = alloca (sizeof (bool) * (uid_max +1));
+diff -up shadow-4.1.4/src/useradd.c.redhat shadow-4.1.4/src/useradd.c
+--- shadow-4.1.4/src/useradd.c.redhat  2009-05-10 20:26:35.000000000 +0200
++++ shadow-4.1.4/src/useradd.c 2009-05-15 11:59:40.000000000 +0200
+@@ -90,7 +90,7 @@ char *Prog;
+ static gid_t def_group = 100;
+ static const char *def_gname = "other";
+ static const char *def_home = "/home";
+-static const char *def_shell = "";
++static const char *def_shell = "/sbin/nologin";
+ static const char *def_template = SKEL_DIR;
+ static const char *def_create_mail_spool = "no";
+@@ -102,7 +102,7 @@ static char def_file[] = USER_DEFAULTS_F
+ #define       VALID(s)        (strcspn (s, ":\n") == strlen (s))
+ static const char *user_name = "";
+-static const char *user_pass = "!";
++static const char *user_pass = "!!";
+ static uid_t user_id;
+ static gid_t user_gid;
+ static const char *user_comment = "";
+@@ -996,9 +996,9 @@ static void process_flags (int argc, cha
+               };
+               while ((c = getopt_long (argc, argv,
+ #ifdef WITH_SELINUX
+-                                       "b:c:d:De:f:g:G:k:K:lmMNop:rs:u:UZ:",
++                                       "b:c:d:De:f:g:G:k:K:lmMnNop:rs:u:UZ:",
+ #else
+-                                       "b:c:d:De:f:g:G:k:K:lmMNop:rs:u:U",
++                                       "b:c:d:De:f:g:G:k:K:lmMnNop:rs:u:U",
+ #endif
+                                        long_options, NULL)) != -1) {
+                       switch (c) {
+@@ -1148,6 +1148,7 @@ static void process_flags (int argc, cha
+                       case 'M':
+                               Mflg = true;
+                               break;
++                      case 'n':
+                       case 'N':
+                               Nflg = true;
+                               break;
diff --git a/packaging/shadow-4.1.4.1-goodname.patch b/packaging/shadow-4.1.4.1-goodname.patch
new file mode 100644 (file)
index 0000000..7ba4c2c
--- /dev/null
@@ -0,0 +1,68 @@
+diff -up shadow-4.1.4.1/libmisc/chkname.c.goodname shadow-4.1.4.1/libmisc/chkname.c
+--- shadow-4.1.4.1/libmisc/chkname.c.goodname  2009-04-28 21:14:04.000000000 +0200
++++ shadow-4.1.4.1/libmisc/chkname.c   2009-06-16 13:47:08.000000000 +0200
+@@ -49,20 +49,28 @@
+ static bool is_valid_name (const char *name)
+ {
+       /*
+-       * User/group names must match [a-z_][a-z0-9_-]*[$]
+-       */
+-      if (('\0' == *name) ||
+-          !((('a' <= *name) && ('z' >= *name)) || ('_' == *name))) {
++         * User/group names must match gnu e-regex:
++         *    [a-zA-Z0-9_.][a-zA-Z0-9_.-]{0,30}[a-zA-Z0-9_.$-]?
++         *
++         * as a non-POSIX, extension, allow "$" as the last char for
++         * sake of Samba 3.x "add machine script"
++         */
++      if ( ('\0' == *name) ||
++             !((*name >= 'a' && *name <= 'z') ||
++               (*name >= 'A' && *name <= 'Z') ||
++               (*name >= '0' && *name <= '9') ||
++               (*name == '_') || (*name == '.') 
++            )) {
+               return false;
+       }
+       while ('\0' != *++name) {
+-              if (!(( ('a' <= *name) && ('z' >= *name) ) ||
+-                    ( ('0' <= *name) && ('9' >= *name) ) ||
+-                    ('_' == *name) ||
+-                    ('-' == *name) ||
+-                    ( ('$' == *name) && ('\0' == *(name + 1)) )
+-                   )) {
++                if (!(  (*name >= 'a' && *name <= 'z') ||
++                        (*name >= 'A' && *name <= 'Z') ||
++                        (*name >= '0' && *name <= '9') ||
++                        (*name == '_') || (*name == '.') || (*name == '-') ||
++                        (*name == '$' && *(name + 1) == '\0') 
++                     )) {
+                       return false;
+               }
+       }
+diff -up shadow-4.1.4.1/man/groupadd.8.goodname shadow-4.1.4.1/man/groupadd.8
+--- shadow-4.1.4.1/man/groupadd.8.goodname     2009-05-22 15:56:08.000000000 +0200
++++ shadow-4.1.4.1/man/groupadd.8      2009-06-16 13:50:41.000000000 +0200
+@@ -153,9 +153,7 @@ Shadow password suite configuration\&.
+ .RE
+ .SH "CAVEATS"
+ .PP
+-Groupnames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+-.PP
+-Groupnames may only be up to 16 characters long\&.
++Groupnames may only be up to 32 characters long\&.
+ .PP
+ You may not add a NIS or LDAP group\&. This must be performed on the corresponding server\&.
+ .PP
+diff -up shadow-4.1.4.1/man/useradd.8.goodname shadow-4.1.4.1/man/useradd.8
+--- shadow-4.1.4.1/man/useradd.8.goodname      2009-05-22 15:56:28.000000000 +0200
++++ shadow-4.1.4.1/man/useradd.8       2009-06-16 13:51:17.000000000 +0200
+@@ -405,8 +405,6 @@ Similarly, if the username already exist
+ \fBuseradd\fR
+ will deny the user account creation request\&.
+ .PP
+-Usernames must start with a lower case letter or an underscore, followed by lower case letters, digits, underscores, or dashes\&. They can end with a dollar sign\&. In regular expression terms: [a\-z_][a\-z0\-9_\-]*[$]?
+-.PP
+ Usernames may only be up to 32 characters long\&.
+ .SH "CONFIGURATION"
+ .PP
diff --git a/packaging/shadow-4.1.4.1-largeGroup.patch b/packaging/shadow-4.1.4.1-largeGroup.patch
new file mode 100644 (file)
index 0000000..8777e24
--- /dev/null
@@ -0,0 +1,230 @@
+diff -U0 shadow-4.1.4.1/ChangeLog.large_group shadow-4.1.4.1/ChangeLog
+diff -up shadow-4.1.4.1/lib/gshadow.c.large_group shadow-4.1.4.1/lib/gshadow.c
+--- shadow-4.1.4.1/lib/gshadow.c.large_group   2009-04-23 13:53:56.000000000 +0200
++++ shadow-4.1.4.1/lib/gshadow.c       2009-06-16 14:47:08.000000000 +0200
+@@ -2,7 +2,7 @@
+  * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+  * Copyright (c) 1996 - 1998, Marek Michałkiewicz
+  * Copyright (c) 2005       , Tomasz Kłoczko
+- * Copyright (c) 2008       , Nicolas François
++ * Copyright (c) 2008 - 2009, Nicolas François
+  * All rights reserved.
+  *
+  * Redistribution and use in source and binary forms, with or without
+@@ -41,7 +41,6 @@
+ #include "prototypes.h"
+ #include "defines.h"
+ static /*@null@*/FILE *shadow;
+-static char sgrbuf[BUFSIZ * 4];
+ static /*@null@*//*@only@*/char **members = NULL;
+ static size_t nmembers = 0;
+ static /*@null@*//*@only@*/char **admins = NULL;
+@@ -131,12 +130,25 @@ void endsgent (void)
+ /*@observer@*//*@null@*/struct sgrp *sgetsgent (const char *string)
+ {
++      static char *sgrbuf = NULL;
++      static size_t sgrbuflen = 0;
++
+       char *fields[FIELDS];
+       char *cp;
+       int i;
++      size_t len = strlen (string) + 1;
++
++      if (len > sgrbuflen) {
++              char *buf = (char *) realloc (sgrbuf, sizeof (char) * len);
++              if (NULL == buf) {
++                      return NULL;
++              }
++              sgrbuf = buf;
++              sgrbuflen = len;
++      }
+-      strncpy (sgrbuf, string, sizeof sgrbuf - 1);
+-      sgrbuf[sizeof sgrbuf - 1] = '\0';
++      strncpy (sgrbuf, string, len);
++      sgrbuf[len-1] = '\0';
+       cp = strrchr (sgrbuf, '\n');
+       if (NULL != cp) {
+@@ -161,7 +173,7 @@ void endsgent (void)
+        * the line is invalid.
+        */
+-      if ((NULL != cp) || (i != FIELDS))
++      if ((NULL != cp) || (i != FIELDS)) {
+ #ifdef        USE_NIS
+               if (!IS_NISCHAR (fields[0][0])) {
+                       return 0;
+@@ -171,6 +183,7 @@ void endsgent (void)
+ #else
+               return 0;
+ #endif
++      }
+       sgroup.sg_name = fields[0];
+       sgroup.sg_passwd = fields[1];
+@@ -199,20 +212,48 @@ void endsgent (void)
+ /*@observer@*//*@null@*/struct sgrp *fgetsgent (/*@null@*/FILE * fp)
+ {
+-      char buf[sizeof sgrbuf];
++      static size_t buflen = 0;
++      static char *buf = NULL;
++
+       char *cp;
++      struct sgrp *ret;
++
++      if (0 == buflen) {
++              buf = (char *) malloc (BUFSIZ);
++              if (NULL == buf) {
++                      return NULL;
++              }
++      }
+       if (NULL == fp) {
+-              return (0);
++              return NULL;
+       }
+ #ifdef        USE_NIS
+-      while (fgetsx (buf, (int) sizeof buf, fp) != (char *) 0)
++      while (fgetsx (buf, (int) sizeof buf, fp) == buf)
+ #else
+-      if (fgetsx (buf, (int) sizeof buf, fp) != (char *) 0)
++      if (fgetsx (buf, (int) sizeof buf, fp) == buf)
+ #endif
+       {
+-              cp = strchr (buf, '\n');
++              while (   ((cp = strrchr (buf, '\n')) == NULL)
++                     && (feof (fp) == 0)) {
++                      size_t len;
++
++                      cp = (char *) realloc (buf, buflen*2);
++                      if (NULL == cp) {
++                              return NULL;
++                      }
++                      buf = cp;
++                      buflen *= 2;
++
++                      len = strlen (buf);
++                      if (fgetsx (&buf[len],
++                                  (int) (buflen - len),
++                                  fp) != &buf[len]) {
++                              return NULL;
++                      }
++              }
++              cp = strrchr (buf, '\n');
+               if (NULL != cp) {
+                       *cp = '\0';
+               }
+@@ -223,7 +264,7 @@ void endsgent (void)
+ #endif
+               return (sgetsgent (buf));
+       }
+-      return 0;
++      return NULL;
+ }
+ /*
+@@ -235,7 +276,6 @@ void endsgent (void)
+ #ifdef        USE_NIS
+       bool nis_1_group = false;
+       struct sgrp *val;
+-      char buf[BUFSIZ];
+ #endif
+       if (NULL == shadow) {
+               setsgent ();
+@@ -334,7 +374,6 @@ void endsgent (void)
+       struct sgrp *sgrp;
+ #ifdef        USE_NIS
+-      char buf[BUFSIZ];
+       static char save_name[16];
+       int nis_disabled = 0;
+ #endif
+diff -up shadow-4.1.4.1/libmisc/xgetgrgid.c.large_group shadow-4.1.4.1/libmisc/xgetgrgid.c
+--- shadow-4.1.4.1/libmisc/xgetgrgid.c.large_group     2008-09-06 16:56:51.000000000 +0200
++++ shadow-4.1.4.1/libmisc/xgetgrgid.c 2009-06-16 14:15:08.000000000 +0200
+@@ -58,7 +58,6 @@
+ #define ARG_TYPE      gid_t
+ #define ARG_NAME      gid
+ #define DUP_FUNCTION  __gr_dup
+-#define MAX_LENGTH    0x8000
+ #define HAVE_FUNCTION_R (defined HAVE_GETGRGID_R)
+ #include "xgetXXbyYY.c"
+diff -up shadow-4.1.4.1/libmisc/xgetgrnam.c.large_group shadow-4.1.4.1/libmisc/xgetgrnam.c
+--- shadow-4.1.4.1/libmisc/xgetgrnam.c.large_group     2008-09-06 16:56:57.000000000 +0200
++++ shadow-4.1.4.1/libmisc/xgetgrnam.c 2009-06-16 14:15:08.000000000 +0200
+@@ -58,7 +58,6 @@
+ #define ARG_TYPE      const char *
+ #define ARG_NAME      name
+ #define DUP_FUNCTION  __gr_dup
+-#define MAX_LENGTH    0x8000
+ #define HAVE_FUNCTION_R (defined HAVE_GETGRNAM_R)
+ #include "xgetXXbyYY.c"
+diff -up shadow-4.1.4.1/libmisc/xgetpwnam.c.large_group shadow-4.1.4.1/libmisc/xgetpwnam.c
+--- shadow-4.1.4.1/libmisc/xgetpwnam.c.large_group     2008-09-06 16:57:05.000000000 +0200
++++ shadow-4.1.4.1/libmisc/xgetpwnam.c 2009-06-16 14:15:08.000000000 +0200
+@@ -58,7 +58,6 @@
+ #define ARG_TYPE      const char *
+ #define ARG_NAME      name
+ #define DUP_FUNCTION  __pw_dup
+-#define MAX_LENGTH    0x8000
+ #define HAVE_FUNCTION_R (defined HAVE_GETPWNAM_R)
+ #include "xgetXXbyYY.c"
+diff -up shadow-4.1.4.1/libmisc/xgetpwuid.c.large_group shadow-4.1.4.1/libmisc/xgetpwuid.c
+--- shadow-4.1.4.1/libmisc/xgetpwuid.c.large_group     2008-09-06 16:57:11.000000000 +0200
++++ shadow-4.1.4.1/libmisc/xgetpwuid.c 2009-06-16 14:15:08.000000000 +0200
+@@ -58,7 +58,6 @@
+ #define ARG_TYPE      uid_t
+ #define ARG_NAME      uid
+ #define DUP_FUNCTION  __pw_dup
+-#define MAX_LENGTH    0x8000
+ #define HAVE_FUNCTION_R (defined HAVE_GETPWUID_R)
+ #include "xgetXXbyYY.c"
+diff -up shadow-4.1.4.1/libmisc/xgetspnam.c.large_group shadow-4.1.4.1/libmisc/xgetspnam.c
+--- shadow-4.1.4.1/libmisc/xgetspnam.c.large_group     2008-09-06 16:57:17.000000000 +0200
++++ shadow-4.1.4.1/libmisc/xgetspnam.c 2009-06-16 14:15:08.000000000 +0200
+@@ -58,7 +58,6 @@
+ #define ARG_TYPE      const char *
+ #define ARG_NAME      name
+ #define DUP_FUNCTION  __spw_dup
+-#define MAX_LENGTH    0x8000
+ #define HAVE_FUNCTION_R (defined HAVE_GETSPNAM_R)
+ #include "xgetXXbyYY.c"
+diff -up shadow-4.1.4.1/libmisc/xgetXXbyYY.c.large_group shadow-4.1.4.1/libmisc/xgetXXbyYY.c
+--- shadow-4.1.4.1/libmisc/xgetXXbyYY.c.large_group    2009-04-23 11:15:53.000000000 +0200
++++ shadow-4.1.4.1/libmisc/xgetXXbyYY.c        2009-06-16 14:15:08.000000000 +0200
+@@ -79,7 +79,7 @@
+               exit (13);
+       }
+-      do {
++      while (true) {
+               int status;
+               LOOKUP_TYPE *resbuf = NULL;
+               buffer = (char *)realloc (buffer, length);
+@@ -106,8 +106,14 @@
+                       return NULL;
+               }
+-              length *= 4;
+-      } while (length < MAX_LENGTH);
++              if (length <= ((size_t)-1 / 4)) {
++                      length *= 4;
++              } else if (length == (size_t) -1) {
++                      break;
++              } else {
++                      length = (size_t) -1;
++              }
++      }
+       free(buffer);
+       free(result);
+diff -up shadow-4.1.4.1/NEWS.large_group shadow-4.1.4.1/NEWS
diff --git a/packaging/shadow-4.1.4.1-ldap.patch b/packaging/shadow-4.1.4.1-ldap.patch
new file mode 100644 (file)
index 0000000..9d97188
--- /dev/null
@@ -0,0 +1,85 @@
+diff -up shadow-4.1.4.1/libmisc/find_new_gid.c.ldap shadow-4.1.4.1/libmisc/find_new_gid.c
+--- shadow-4.1.4.1/libmisc/find_new_gid.c.ldap 2009-07-16 10:37:41.653798746 +0200
++++ shadow-4.1.4.1/libmisc/find_new_gid.c      2009-07-16 10:44:14.482808945 +0200
+@@ -90,17 +90,26 @@ int find_new_gid (bool sys_group,
+        * but we also check the local database (gr_rewind/gr_next) in case
+        * some groups were created but the changes were not committed yet.
+        */
+-      setgrent ();
+-      while ((grp = getgrent ()) != NULL) {
+-              if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
+-                      group_id = grp->gr_gid + 1;
++      if (sys_group ) {
++              for(group_id = gid_min; group_id<=gid_max; group_id++) {
++                      grp = getgrgid(group_id);
++                      if(grp)
++                              used_gids[grp->gr_gid] = true;
+               }
+-              /* create index of used GIDs */
+-              if (grp->gr_gid <= gid_max) {
+-                      used_gids[grp->gr_gid] = true;
++      }
++      else {
++              setgrent ();
++              while ((grp = getgrent ()) != NULL) {
++                      if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
++                              group_id = grp->gr_gid + 1;
++                      }
++                      /* create index of used GIDs */
++                      if (grp->gr_gid <= gid_max) {
++                              used_gids[grp->gr_gid] = true;
++                      }
+               }
++              endgrent ();
+       }
+-      endgrent ();
+       gr_rewind ();
+       while ((grp = gr_next ()) != NULL) {
+               if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
+diff -up shadow-4.1.4.1/libmisc/find_new_uid.c.ldap shadow-4.1.4.1/libmisc/find_new_uid.c
+--- shadow-4.1.4.1/libmisc/find_new_uid.c.ldap 2009-07-16 10:37:41.653798746 +0200
++++ shadow-4.1.4.1/libmisc/find_new_uid.c      2009-07-16 10:37:41.668798323 +0200
+@@ -91,17 +91,27 @@ int find_new_uid (bool sys_user,
+        * but we also check the local database (pw_rewind/pw_next) in case
+        * some users were created but the changes were not committed yet.
+        */
+-      setpwent ();
+-      while ((pwd = getpwent ()) != NULL) {
+-              if ((pwd->pw_uid >= user_id) && (pwd->pw_uid <= uid_max)) {
+-                      user_id = pwd->pw_uid + 1;
++      /* speed up sys users look up on LDAP boxes */
++      if (sys_user) {
++              for (user_id = uid_min; user_id<=uid_max; user_id++) {
++                      pwd = getpwuid(user_id);
++                      if(pwd)
++                              used_uids[user_id] = true;
+               }
+-              /* create index of used UIDs */
+-              if (pwd->pw_uid <= uid_max) {
+-                      used_uids[pwd->pw_uid] = true;
++      }
++      else {
++              setpwent ();
++              while ((pwd = getpwent ()) != NULL) {
++                      if ((pwd->pw_uid >= user_id) && (pwd->pw_uid <= uid_max)) {
++                              user_id = pwd->pw_uid + 1;
++                      }
++                      /* create index of used UIDs */
++                      if (pwd->pw_uid <= uid_max) {
++                              used_uids[pwd->pw_uid] = true;
++                      }
+               }
++              endpwent ();
+       }
+-      endpwent ();
+       pw_rewind ();
+       while ((pwd = pw_next ()) != NULL) {
+               if ((pwd->pw_uid >= user_id) && (pwd->pw_uid <= uid_max)) {
+@@ -113,6 +123,7 @@ int find_new_uid (bool sys_user,
+               }
+       }
++
+       /* find free system account in reverse order */
+       if (sys_user) {
+               for (user_id = uid_max; user_id >= uid_min; user_id--) {
diff --git a/packaging/shadow-4.1.4.1-sysacc.patch b/packaging/shadow-4.1.4.1-sysacc.patch
new file mode 100644 (file)
index 0000000..8a6de17
--- /dev/null
@@ -0,0 +1,300 @@
+diff -up shadow-4.1.4.1/libmisc/find_new_gid.c.sysacc shadow-4.1.4.1/libmisc/find_new_gid.c
+--- shadow-4.1.4.1/libmisc/find_new_gid.c.sysacc       2009-07-16 11:51:34.807860808 +0200
++++ shadow-4.1.4.1/libmisc/find_new_gid.c      2009-07-16 14:19:08.678798578 +0200
+@@ -52,7 +52,7 @@ int find_new_gid (bool sys_group,
+                   /*@null@*/gid_t const *preferred_gid)
+ {
+       const struct group *grp;
+-      gid_t gid_min, gid_max, group_id;
++      gid_t gid_min, gid_max, group_id, id;
+       bool *used_gids;
+       assert (gid != NULL);
+@@ -61,7 +61,7 @@ int find_new_gid (bool sys_group,
+               gid_min = (gid_t) getdef_ulong ("GID_MIN", 500UL);
+               gid_max = (gid_t) getdef_ulong ("GID_MAX", 60000UL);
+       } else {
+-              gid_min = (gid_t) getdef_ulong ("SYS_GID_MIN", 1UL);
++              gid_min = (gid_t) getdef_ulong ("SYS_GID_MIN", 201UL);
+               gid_max = (gid_t) getdef_ulong ("GID_MIN", 500UL) - 1;
+               gid_max = (gid_t) getdef_ulong ("SYS_GID_MAX", (unsigned long) gid_max);
+       }
+@@ -80,7 +80,6 @@ int find_new_gid (bool sys_group,
+               return 0;
+       }
+-      group_id = gid_min;
+       /*
+        * Search the entire group file,
+@@ -91,13 +90,28 @@ int find_new_gid (bool sys_group,
+        * some groups were created but the changes were not committed yet.
+        */
+       if (sys_group ) {
+-              for(group_id = gid_min; group_id<=gid_max; group_id++) {
+-                      grp = getgrgid(group_id);
+-                      if(grp)
++              group_id = gid_max;
++              for(id = gid_max; id>=gid_min; id--) {
++                      grp = getgrgid(id);
++                      if(grp) {
++                              group_id = id - 1;
+                               used_gids[grp->gr_gid] = true;
++                      }
++              }
++
++              gr_rewind ();
++              while ((grp = gr_next ()) != NULL) {
++                      if ((grp->gr_gid <= group_id) && (grp->gr_gid >= gid_min)) {
++                              group_id = grp->gr_gid - 1;
++                      }
++                      /* create index of used GIDs */
++                      if (grp->gr_gid <= gid_max) {
++                              used_gids[grp->gr_gid] = true;
++                      }
+               }
+       }
+       else {
++              group_id = gid_min;
+               setgrent ();
+               while ((grp = getgrent ()) != NULL) {
+                       if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
+@@ -109,32 +123,16 @@ int find_new_gid (bool sys_group,
+                       }
+               }
+               endgrent ();
+-      }
+-      gr_rewind ();
+-      while ((grp = gr_next ()) != NULL) {
+-              if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
+-                      group_id = grp->gr_gid + 1;
+-              }
+-              /* create index of used GIDs */
+-              if (grp->gr_gid <= gid_max) {
+-                      used_gids[grp->gr_gid] = true;
+-              }
+-      }
+-      /* find free system account in reverse order */
+-      if (sys_group) {
+-              for (group_id = gid_max; group_id >= gid_min; group_id--) {
+-                      if (false == used_gids[group_id]) {
+-                              break;
++              gr_rewind ();
++              while ((grp = gr_next ()) != NULL) {
++                      if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
++                              group_id = grp->gr_gid + 1;
++                      }
++                      /* create index of used GIDs */
++                      if (grp->gr_gid <= gid_max) {
++                              used_gids[grp->gr_gid] = true;
+                       }
+-              }
+-              if ( group_id < gid_min ) {
+-                      fprintf (stderr,
+-                               _("%s: Can't get unique GID (no more available GIDs)\n"),
+-                               Prog);
+-                      SYSLOG ((LOG_WARN,
+-                               "no more available GID on the system"));
+-                      return -1;
+               }
+       }
+@@ -143,16 +141,35 @@ int find_new_gid (bool sys_group,
+        * will give us GID_MAX+1 even if not unique. Search for the first
+        * free GID starting with GID_MIN.
+        */
+-      if (group_id == gid_max + 1) {
+-              for (group_id = gid_min; group_id < gid_max; group_id++) {
+-                      if (false == used_gids[group_id]) {
+-                              break;
++      if (sys_group) {
++              if (group_id == gid_min - 1) {
++                      for (group_id = gid_max; group_id >= gid_min; group_id--) {
++                              if (false == used_gids[group_id]) {
++                                      break;
++                              }
++                      }
++                      if ( group_id < gid_min ) {
++                              fprintf (stderr,
++                                       _("%s: Can't get unique GID (no more available GIDs)\n"),
++                                       Prog);
++                              SYSLOG ((LOG_WARN,
++                                       "no more available GID on the system"));
++                              return -1;
+                       }
+               }
+-              if (group_id == gid_max) {
+-                      fprintf (stderr, _("%s: Can't get unique GID (no more available GIDs)\n"), Prog);
+-                      SYSLOG ((LOG_WARN, "no more available GID on the system"));
+-                      return -1;
++      }
++      else {
++              if (group_id == gid_max + 1) {
++                      for (group_id = gid_min; group_id < gid_max; group_id++) {
++                              if (false == used_gids[group_id]) {
++                                      break;
++                              }
++                      }
++                      if (group_id == gid_max) {
++                              fprintf (stderr, _("%s: Can't get unique GID (no more available GIDs)\n"), Prog);
++                              SYSLOG ((LOG_WARN, "no more available GID on the system"));
++                              return -1;
++                      }
+               }
+       }
+diff -up shadow-4.1.4.1/libmisc/find_new_uid.c.sysacc shadow-4.1.4.1/libmisc/find_new_uid.c
+--- shadow-4.1.4.1/libmisc/find_new_uid.c.sysacc       2009-07-16 11:51:34.807860808 +0200
++++ shadow-4.1.4.1/libmisc/find_new_uid.c      2009-07-16 14:13:38.120798526 +0200
+@@ -52,7 +52,7 @@ int find_new_uid (bool sys_user,
+                   /*@null@*/uid_t const *preferred_uid)
+ {
+       const struct passwd *pwd;
+-      uid_t uid_min, uid_max, user_id;
++      uid_t uid_min, uid_max, user_id, id;
+       bool *used_uids;
+       assert (uid != NULL);
+@@ -61,7 +61,7 @@ int find_new_uid (bool sys_user,
+               uid_min = (uid_t) getdef_ulong ("UID_MIN", 500UL);
+               uid_max = (uid_t) getdef_ulong ("UID_MAX", 60000UL);
+       } else {
+-              uid_min = (uid_t) getdef_ulong ("SYS_UID_MIN", 1UL);
++              uid_min = (uid_t) getdef_ulong ("SYS_UID_MIN", 201UL);
+               uid_max = (uid_t) getdef_ulong ("UID_MIN", 500UL) - 1;
+               uid_max = (uid_t) getdef_ulong ("SYS_UID_MAX", (unsigned long) uid_max);
+       }
+@@ -81,8 +81,6 @@ int find_new_uid (bool sys_user,
+       }
+-      user_id = uid_min;
+-
+       /*
+        * Search the entire password file,
+        * looking for the largest unused value.
+@@ -91,15 +89,30 @@ int find_new_uid (bool sys_user,
+        * but we also check the local database (pw_rewind/pw_next) in case
+        * some users were created but the changes were not committed yet.
+        */
+-      /* speed up sys users look up on LDAP boxes */
+       if (sys_user) {
+-              for (user_id = uid_min; user_id<=uid_max; user_id++) {
+-                      pwd = getpwuid(user_id);
+-                      if(pwd)
++              user_id = uid_max;
++              for (id = uid_max; id>=uid_min; id--) {
++                      pwd = getpwuid(id);
++                      if(pwd) {
++                              user_id = id - 1;
+                               used_uids[user_id] = true;
++                      }
+               }
++
++              pw_rewind ();
++              while ((pwd = pw_next ()) != NULL) {
++                      if ((pwd->pw_uid <= user_id) && (pwd->pw_uid >= uid_min)) {
++                              user_id = pwd->pw_uid - 1;
++                      }
++                      /* create index of used UIDs */
++                      if (pwd->pw_uid <= uid_max) {
++                              used_uids[pwd->pw_uid] = true;
++                      }
++              }
++
+       }
+       else {
++              user_id = uid_min;
+               setpwent ();
+               while ((pwd = getpwent ()) != NULL) {
+                       if ((pwd->pw_uid >= user_id) && (pwd->pw_uid <= uid_max)) {
+@@ -111,51 +124,55 @@ int find_new_uid (bool sys_user,
+                       }
+               }
+               endpwent ();
+-      }
+-      pw_rewind ();
+-      while ((pwd = pw_next ()) != NULL) {
+-              if ((pwd->pw_uid >= user_id) && (pwd->pw_uid <= uid_max)) {
+-                      user_id = pwd->pw_uid + 1;
+-              }
+-              /* create index of used UIDs */
+-              if (pwd->pw_uid <= uid_max) {
+-                      used_uids[pwd->pw_uid] = true;
+-              }
+-      }
+-
+-      /* find free system account in reverse order */
+-      if (sys_user) {
+-              for (user_id = uid_max; user_id >= uid_min; user_id--) {
+-                      if (false == used_uids[user_id]) {
+-                              break;
++              pw_rewind ();
++              while ((pwd = pw_next ()) != NULL) {
++                      if ((pwd->pw_uid >= user_id) && (pwd->pw_uid <= uid_max)) {
++                              user_id = pwd->pw_uid + 1;
++                      }
++                      /* create index of used UIDs */
++                      if (pwd->pw_uid <= uid_max) {
++                              used_uids[pwd->pw_uid] = true;
+                       }
+-              }
+-              if (user_id < uid_min ) {
+-                      fprintf (stderr,
+-                               _("%s: Can't get unique system UID (no more available UIDs)\n"),
+-                               Prog);
+-                      SYSLOG ((LOG_WARN,
+-                               "no more available UID on the system"));
+-                      return -1;
+               }
+       }
++
+       /*
+        * If a user with UID equal to UID_MAX exists, the above algorithm
+        * will give us UID_MAX+1 even if not unique. Search for the first
+        * free UID starting with UID_MIN.
+        */
+-      if (user_id == uid_max + 1) {
+-              for (user_id = uid_min; user_id < uid_max; user_id++) {
+-                      if (false == used_uids[user_id]) {
+-                              break;
++      if (sys_user) {
++              if (user_id == uid_min - 1) {
++                      for (user_id = uid_max; user_id >= uid_min; user_id--) {
++                              if (false == used_uids[user_id]) {
++                                      break;
++                              }
++                      }
++                      if (user_id < uid_min ) {
++                              fprintf (stderr,
++                                       _("%s: Can't get unique system UID (no more available UIDs)\n"),
++                                       Prog);
++                              SYSLOG ((LOG_WARN,
++                                       "no more available UID on the system"));
++                              return -1;
+                       }
+               }
+-              if (user_id == uid_max) {
+-                      fprintf (stderr, _("%s: Can't get unique UID (no more available UIDs)\n"), Prog);
+-                      SYSLOG ((LOG_WARN, "no more available UID on the system"));
+-                      return -1;
++      }
++      else {
++              if (user_id == uid_max + 1) {
++                      for (user_id = uid_min; user_id < uid_max; user_id++) {
++                              if (false == used_uids[user_id]) {
++                                      break;
++                              }
++                      }
++                      if (user_id == uid_max) {
++                              fprintf (stderr, _("%s: Can't get unique UID (no more available UIDs)\n"),
++                                                 Prog);
++                              SYSLOG ((LOG_WARN, "no more available UID on the system"));
++                              return -1;
++                      }
+               }
+       }
diff --git a/packaging/shadow-4.1.4.2-fixes.patch b/packaging/shadow-4.1.4.2-fixes.patch
new file mode 100644 (file)
index 0000000..a7ab5b4
--- /dev/null
@@ -0,0 +1,65 @@
+diff -up shadow-4.1.4.2/lib/commonio.c.fixes shadow-4.1.4.2/lib/commonio.c
+--- shadow-4.1.4.2/lib/commonio.c.fixes        2009-09-07 15:51:28.312139467 +0200
++++ shadow-4.1.4.2/lib/commonio.c      2009-09-07 15:52:00.788140456 +0200
+@@ -710,7 +710,7 @@ commonio_sort (struct commonio_db *db, i
+       db->tail->prev = entries[n - 1];
+       db->tail->next = NULL;
+-      for (i = 1; i < n; i++) {
++      for (i = 1; i < (n-1); i++) {
+               entries[i]->prev = entries[i - 1];
+               entries[i]->next = entries[i + 1];
+       }
+diff -up shadow-4.1.4.2/libmisc/cleanup.c.fixes shadow-4.1.4.2/libmisc/cleanup.c
+--- shadow-4.1.4.2/libmisc/cleanup.c.fixes     2009-09-07 15:52:22.449035388 +0200
++++ shadow-4.1.4.2/libmisc/cleanup.c   2009-09-07 15:55:06.632033653 +0200
+@@ -107,7 +107,7 @@ void del_cleanup (cleanup_function pcf)
+       assert (i<CLEANUP_FUNCTIONS);
+       /* Move the rest of the cleanup functions */
+-      for (; i<CLEANUP_FUNCTIONS; i++) {
++      for (; i<(CLEANUP_FUNCTIONS - 1); i++) {
+               /* Make sure the cleanup function was specified only once */
+               assert (cleanup_functions[i+1] != pcf);
+diff -up shadow-4.1.4.2/libmisc/limits.c.fixes shadow-4.1.4.2/libmisc/limits.c
+--- shadow-4.1.4.2/libmisc/limits.c.fixes      2009-09-07 15:55:38.734034494 +0200
++++ shadow-4.1.4.2/libmisc/limits.c    2009-09-07 15:56:10.545044166 +0200
+@@ -167,7 +167,7 @@ static int check_logins (const char *nam
+        * includes the user who is currently trying to log in.
+        */
+       if (count > limit) {
+-              SYSLOG ((LOG_WARN, "Too many logins (max %d) for %s\n",
++              SYSLOG ((LOG_WARN, "Too many logins (max %lu) for %s\n",
+                        limit, name));
+               return LOGIN_ERROR_LOGIN;
+       }
+diff -up shadow-4.1.4.2/libmisc/utmp.c.fixes shadow-4.1.4.2/libmisc/utmp.c
+--- shadow-4.1.4.2/libmisc/utmp.c.fixes        2009-09-07 15:56:30.534033865 +0200
++++ shadow-4.1.4.2/libmisc/utmp.c      2009-09-07 16:11:23.049069289 +0200
+@@ -56,7 +56,7 @@ static bool is_my_tty (const char *tty)
+       /* full_tty shall be at least sizeof utmp.ut_line + 5 */
+       char full_tty[200];
+       /* tmptty shall be bigger than full_tty */
+-      static char tmptty[sizeof (full_tty)+1];
++      static char tmptty[sizeof (full_tty)+1] = "";
+       if ('/' != *tty) {
+               (void) snprintf (full_tty, sizeof full_tty, "/dev/%s", tty);
+@@ -71,7 +71,7 @@ static bool is_my_tty (const char *tty)
+               }
+       }
+-      if (NULL == tmptty) {
++      if ('\0' == tmptty[0]) {
+               (void) puts (_("Unable to determine your tty name."));
+               exit (EXIT_FAILURE);
+       } else if (strncmp (tty, tmptty, sizeof (tmptty)) != 0) {
+@@ -200,7 +200,6 @@ static void updwtmpx (const char *filena
+               strcpy (hostname, host);
+ #ifdef HAVE_STRUCT_UTMP_UT_HOST
+       } else if (   (NULL != ut)
+-                 && (NULL != ut->ut_host)
+                  && ('\0' != ut->ut_host[0])) {
+               hostname = (char *) xmalloc (sizeof (ut->ut_host) + 1);
+               strncpy (hostname, ut->ut_host, sizeof (ut->ut_host));
diff --git a/packaging/shadow-4.1.4.2-leak.patch b/packaging/shadow-4.1.4.2-leak.patch
new file mode 100644 (file)
index 0000000..0d6aa09
--- /dev/null
@@ -0,0 +1,108 @@
+diff -up shadow-4.1.4.2/lib/groupmem.c.leak shadow-4.1.4.2/lib/groupmem.c
+--- shadow-4.1.4.2/lib/groupmem.c.leak 2009-04-23 19:43:27.000000000 +0200
++++ shadow-4.1.4.2/lib/groupmem.c      2009-09-07 15:43:23.314129427 +0200
+@@ -51,10 +51,13 @@
+       *gr = *grent;
+       gr->gr_name = strdup (grent->gr_name);
+       if (NULL == gr->gr_name) {
++              free(gr);
+               return NULL;
+       }
+       gr->gr_passwd = strdup (grent->gr_passwd);
+       if (NULL == gr->gr_passwd) {
++              free(gr->gr_name);
++              free(gr);
+               return NULL;
+       }
+@@ -62,11 +65,21 @@
+       gr->gr_mem = (char **) malloc ((i + 1) * sizeof (char *));
+       if (NULL == gr->gr_mem) {
++              free(gr->gr_passwd);
++              free(gr->gr_name);
++              free(gr);
+               return NULL;
+       }
+       for (i = 0; grent->gr_mem[i]; i++) {
+               gr->gr_mem[i] = strdup (grent->gr_mem[i]);
+               if (NULL == gr->gr_mem[i]) {
++                        int j;
++                        for (j=0; j<i; j++)
++                                free(gr->gr_mem[j]);
++                        free(gr->gr_mem);
++                        free(gr->gr_passwd);
++                        free(gr->gr_name);
++                        free(gr);
+                       return NULL;
+               }
+       }
+diff -up shadow-4.1.4.2/libmisc/copydir.c.leak shadow-4.1.4.2/libmisc/copydir.c
+--- shadow-4.1.4.2/libmisc/copydir.c.leak      2009-05-22 12:16:14.000000000 +0200
++++ shadow-4.1.4.2/libmisc/copydir.c   2009-09-07 15:41:49.217192095 +0200
+@@ -443,6 +443,7 @@ static char *readlink_malloc (const char
+               nchars = readlink (filename, buffer, size);
+               if (nchars < 0) {
++                      free(buffer);
+                       return NULL;
+               }
+diff -up shadow-4.1.4.2/lib/pwmem.c.leak shadow-4.1.4.2/lib/pwmem.c
+--- shadow-4.1.4.2/lib/pwmem.c.leak    2009-04-23 19:43:27.000000000 +0200
++++ shadow-4.1.4.2/lib/pwmem.c 2009-09-07 15:41:49.218203063 +0200
+@@ -51,22 +51,37 @@
+       *pw = *pwent;
+       pw->pw_name = strdup (pwent->pw_name);
+       if (NULL == pw->pw_name) {
++              free(pw);
+               return NULL;
+       }
+       pw->pw_passwd = strdup (pwent->pw_passwd);
+       if (NULL == pw->pw_passwd) {
++              free(pw->pw_name);
++              free(pw);
+               return NULL;
+       }
+       pw->pw_gecos = strdup (pwent->pw_gecos);
+       if (NULL == pw->pw_gecos) {
++              free(pw->pw_passwd);
++              free(pw->pw_name);
++              free(pw);
+               return NULL;
+       }
+       pw->pw_dir = strdup (pwent->pw_dir);
+       if (NULL == pw->pw_dir) {
++              free(pw->pw_gecos);
++              free(pw->pw_passwd);
++              free(pw->pw_name);
++              free(pw);
+               return NULL;
+       }
+       pw->pw_shell = strdup (pwent->pw_shell);
+       if (NULL == pw->pw_shell) {
++              free(pw->pw_dir);
++              free(pw->pw_gecos);
++              free(pw->pw_passwd);
++              free(pw->pw_name);
++              free(pw);
+               return NULL;
+       }
+diff -up shadow-4.1.4.2/lib/shadowmem.c.leak shadow-4.1.4.2/lib/shadowmem.c
+--- shadow-4.1.4.2/lib/shadowmem.c.leak        2009-04-23 19:43:27.000000000 +0200
++++ shadow-4.1.4.2/lib/shadowmem.c     2009-09-07 15:41:49.218203063 +0200
+@@ -52,10 +52,13 @@
+       *sp = *spent;
+       sp->sp_namp = strdup (spent->sp_namp);
+       if (NULL == sp->sp_namp) {
++                free(sp);
+               return NULL;
+       }
+       sp->sp_pwdp = strdup (spent->sp_pwdp);
+       if (NULL == sp->sp_pwdp) {
++                free(sp->sp_namp);
++                free(sp);
+               return NULL;
+       }
diff --git a/packaging/shadow-4.1.4.2-redhat.patch b/packaging/shadow-4.1.4.2-redhat.patch
new file mode 100644 (file)
index 0000000..2b9e334
--- /dev/null
@@ -0,0 +1,77 @@
+diff -up shadow-4.1.4.2/libmisc/find_new_gid.c.redhat shadow-4.1.4.2/libmisc/find_new_gid.c
+--- shadow-4.1.4.2/libmisc/find_new_gid.c.redhat       2009-07-18 01:53:42.000000000 +0200
++++ shadow-4.1.4.2/libmisc/find_new_gid.c      2009-09-07 16:34:26.640814090 +0200
+@@ -58,11 +58,11 @@ int find_new_gid (bool sys_group,
+       assert (gid != NULL);
+       if (!sys_group) {
+-              gid_min = (gid_t) getdef_ulong ("GID_MIN", 1000UL);
++              gid_min = (gid_t) getdef_ulong ("GID_MIN", 500UL);
+               gid_max = (gid_t) getdef_ulong ("GID_MAX", 60000UL);
+       } else {
+-              gid_min = (gid_t) getdef_ulong ("SYS_GID_MIN", 101UL);
+-              gid_max = (gid_t) getdef_ulong ("GID_MIN", 1000UL) - 1;
++              gid_min = (gid_t) getdef_ulong ("SYS_GID_MIN", 201UL);
++              gid_max = (gid_t) getdef_ulong ("GID_MIN", 500UL) - 1;
+               gid_max = (gid_t) getdef_ulong ("SYS_GID_MAX", (unsigned long) gid_max);
+       }
+       used_gids = alloca (sizeof (bool) * (gid_max +1));
+diff -up shadow-4.1.4.2/libmisc/find_new_uid.c.redhat shadow-4.1.4.2/libmisc/find_new_uid.c
+--- shadow-4.1.4.2/libmisc/find_new_uid.c.redhat       2009-07-18 01:53:43.000000000 +0200
++++ shadow-4.1.4.2/libmisc/find_new_uid.c      2009-09-07 16:34:19.695877000 +0200
+@@ -58,11 +58,11 @@ int find_new_uid (bool sys_user,
+       assert (uid != NULL);
+       if (!sys_user) {
+-              uid_min = (uid_t) getdef_ulong ("UID_MIN", 1000UL);
++              uid_min = (uid_t) getdef_ulong ("UID_MIN", 500UL);
+               uid_max = (uid_t) getdef_ulong ("UID_MAX", 60000UL);
+       } else {
+-              uid_min = (uid_t) getdef_ulong ("SYS_UID_MIN", 101UL);
+-              uid_max = (uid_t) getdef_ulong ("UID_MIN", 1000UL) - 1;
++              uid_min = (uid_t) getdef_ulong ("SYS_UID_MIN", 201UL);
++              uid_max = (uid_t) getdef_ulong ("UID_MIN", 500UL) - 1;
+               uid_max = (uid_t) getdef_ulong ("SYS_UID_MAX", (unsigned long) uid_max);
+       }
+       used_uids = alloca (sizeof (bool) * (uid_max +1));
+diff -up shadow-4.1.4.2/src/useradd.c.redhat shadow-4.1.4.2/src/useradd.c
+--- shadow-4.1.4.2/src/useradd.c.redhat        2009-06-06 00:16:58.000000000 +0200
++++ shadow-4.1.4.2/src/useradd.c       2009-09-07 16:34:01.402878101 +0200
+@@ -90,7 +90,7 @@ char *Prog;
+ static gid_t def_group = 100;
+ static const char *def_gname = "other";
+ static const char *def_home = "/home";
+-static const char *def_shell = "";
++static const char *def_shell = "/sbin/nologin";
+ static const char *def_template = SKEL_DIR;
+ static const char *def_create_mail_spool = "no";
+@@ -102,7 +102,7 @@ static char def_file[] = USER_DEFAULTS_F
+ #define       VALID(s)        (strcspn (s, ":\n") == strlen (s))
+ static const char *user_name = "";
+-static const char *user_pass = "!";
++static const char *user_pass = "!!";
+ static uid_t user_id;
+ static gid_t user_gid;
+ static const char *user_comment = "";
+@@ -989,9 +989,9 @@ static void process_flags (int argc, cha
+               };
+               while ((c = getopt_long (argc, argv,
+ #ifdef WITH_SELINUX
+-                                       "b:c:d:De:f:g:G:k:K:lmMNop:rs:u:UZ:",
++                                       "b:c:d:De:f:g:G:k:K:lmMnNop:rs:u:UZ:",
+ #else
+-                                       "b:c:d:De:f:g:G:k:K:lmMNop:rs:u:U",
++                                       "b:c:d:De:f:g:G:k:K:lmMnNop:rs:u:U",
+ #endif
+                                        long_options, NULL)) != -1) {
+                       switch (c) {
+@@ -1141,6 +1141,7 @@ static void process_flags (int argc, cha
+                       case 'M':
+                               Mflg = true;
+                               break;
++                      case 'n':
+                       case 'N':
+                               Nflg = true;
+                               break;
diff --git a/packaging/shadow-utils.changes b/packaging/shadow-utils.changes
new file mode 100644 (file)
index 0000000..0cca82a
--- /dev/null
@@ -0,0 +1,568 @@
+* Fri Mar 26 2010 Anas Nashif <anas.nashif@intel.com> - 4.1.4.2
+- Remove Epoch
+
+* Fri Dec 25 2009 Passion Zhao <passion.zhao@intel.com> - 4.1.4.2
+- Update to 4.1.4.2
+
+* Sun Aug 16 2009 Anas Nashif <anas.nashif@intel.com> - 4.1.4.1
+- Update to 4.1.4.1
+
+* Mon Aug 11 2008 Vincent Huang <chenglan.huang@intel.com>
+- fix salt size problem 
+
+* Mon Apr 07 2008 Peter Vrabec <pvrabec@redhat.com> 2:4.1.1-1
+- upgrade
+
+* Fri Mar 07 2008 Peter Vrabec <pvrabec@redhat.com> 2:4.1.0-5
+- improve newgrp audit patch
+
+* Mon Mar 03 2008 Peter Vrabec <pvrabec@redhat.com> 2:4.1.0-4
+- fix selinux labeling  (#433757)
+
+* Tue Feb 19 2008 Peter Vrabec <pvrabec@redhat.com> 2:4.1.0-3
+- fix groupmems segmentation fault (#430813)
+
+* Wed Feb 13 2008 Peter Vrabec <pvrabec@redhat.com> 2:4.1.0-2
+- fix newgrp audit event
+
+* Wed Dec 12 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.1.0-1
+- new upgrade release from new upstream
+- provide vipw and vigr
+
+* Thu Nov 29 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-20
+- do not create mail spool entries for system accounts (#402351)
+
+* Thu Oct 18 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-19
+- fix timestamps when moving home dirs to another file system (#278571)
+
+* Mon Oct 08 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-18
+- mark localized man pages with %%lang
+
+* Wed Aug 22 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-17
+- rebuild
+
+* Tue Jun 26 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-16
+- fix "CAVEATS" section of groupadd man page (#245590)
+
+* Tue Jun 06 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-15
+- fix infinitive loop if there are duplicate entries
+  in /etc/group (#240915)
+
+* Tue Jun 06 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-14
+- do not run find_new_uid() twice and use getpwuid() to check
+  UID uniqueness (#236871)
+
+* Tue Apr 10 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-13
+- fix useradd dump core when build without WITH_SELINUX (#235641)
+
+* Mon Mar 26 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-12
+- create user's mailbox file by default (#231311)
+
+* Fri Mar 16 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-11
+- assign system dynamic UID/GID from the top of available UID/GID (#190523)
+
+* Wed Feb 28 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-10
+- spec file fixes to meet fedora standarts.
+- fix useless call of restorecon(). (#222159) 
+
+* Sun Jan 14 2007 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-9
+- fix append option in usermod (#222540).
+
+* Thu Dec 21 2006 Dan Walsh <dwalsh@redhat.com> 2:4.0.18.1-8
+- Fix execution and creation of Home Directories under SELinux
+- Resolves: rhbz#217441
+
+* Thu Dec 14 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-7
+- fix rpmlint issues
+
+* Wed Dec 06 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-6
+- use MD5 encryption by default (#218629).
+
+* Thu Nov 30 2006 Steve Grubb <sgrubb@redhat.com> 2:4.0.18.1-5
+- Fix SELinux context on home directories created with useradd (#217441)
+
+* Tue Nov 14 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-4
+- fix chpasswd and chgpasswd stack overflow (#213052)
+
+* Sat Nov 04 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-3
+- fix "-g" and "-G" option.
+
+* Fri Nov 03 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-2
+- improve audit logging (#211659)
+- improve "-l" option. Do not reset faillog if it's used (#213450).
+* Wed Nov 01 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.18.1-1
+- upgrade
+
+* Wed Oct 25 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.17-7
+- add dist-tag
+
+* Wed Oct 04 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.17-6
+- fix regression. Permissions on user* group* binaries 
+  should be 0750, because of CAPP/LSPP certification
+- fix groupdel man page
+
+* Fri Aug 11 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.17-5
+- fix bug introduced with UIG_GID.patch (#201991)
+
+* Sat Aug 05 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.17-4
+- fix userdel, it didn't delete user's group (#201379)
+
+* Fri Aug 04 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.17-3
+- fix UID/GID overflow in user* group* (#198920)
+
+* Fri Aug 04 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.17-2
+- do not inherit file desc. in execve(nscd)
+
+* Mon Jul 17 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.17-1
+- upgrade
+
+* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 2:4.0.16-3.1
+- rebuild
+
+* Tue Jun 13 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.16-3
+- call "nscd -i" to flush nscd cache (#191464)
+
+* Sat Jun 10 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.16-2
+- "useradd -r" must create a system group (#194728)
+
+* Tue Jun 06 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.16-1
+- upgrade
+- do not replace login.defs file (#190014)
+
+* Sat Apr 08 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.15-3
+- fix typo in shadow-4.0.15-login.defs (#188263)
+
+* Tue Apr 04 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.15-2
+- properly notify nscd to flush its cache(#186803)
+
+* Mon Apr 03 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.15-1
+- upgrade
+
+* Fri Mar 10 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.14-4
+- fix lrename() function to handle relative symlinks too
+
+* Tue Mar 07 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.14-3
+- set default umask to 077 in login.defs
+
+* Mon Mar 06 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.14-2
+- use lrename() function, which follow a destination symbolic link(#181977)
+
+* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 2:4.0.14-1.2
+- bump again for double-long bug on ppc(64)
+
+* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 2:4.0.14-1.1
+- rebuilt for new gcc4.1 snapshot and glibc changes
+
+* Fri Jan 06 2006 Peter Vrabec <pvrabec@redhat.com> 2:4.0.14-1
+- upgrade
+
+* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com>
+- rebuilt
+
+* Tue Nov 29 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.13-4
+- fix incorrect audit record in userdel (#174392)
+
+* Wed Nov 16 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.13-3
+- fix useradd segfaults (#173241)
+
+* Sat Nov 5 2005 Steve Grubb <sgrubb@redhat.com> 2:4.0.13-2
+- Update audit communication to standard format messages
+
+* Fri Oct 21 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.13-1
+- upgrade
+
+* Fri Sep 23 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.12-4
+- add useradd -l option back, it was removed by mistake
+
+* Tue Sep 20 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.12-3
+- provide login.defs man page
+- adjust audit patch
+
+* Tue Aug 30 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.12-2
+- audit support
+
+* Sat Aug 27 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.12-1
+- upgrade 
+
+* Sat Aug 13 2005 Dan Walsh <dwalsh@redhat.com> 2:4.0.11.1-5
+- Change to use new selinux api for selinux_check_passwd_access
+
+* Tue Aug 09 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.11.1-4
+- change the password last changed field in the shadow file
+  when "usermod -p" is used (#164943)
+
+* Mon Aug 08 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.11.1-3
+- provide getspnam.3 man page(#162476)
+- fix useradd man page(#97131)
+
+* Mon Aug 08 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.11.1-2
+- do not copy files from skel directory if home directory 
+  already exist (#89591,#80242)
+
+* Fri Aug 05 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.11.1-1
+- upgrade 
+
+* Mon May 23 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.7-9
+- remove vigr binary
+
+* Mon May 23 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.7-8
+- fix nscd socket path
+
+* Fri Apr 29 2005 Jeremy Katz <katzj@redhat.com> - 2:4.0.7-7
+- don't assume selinux is enabled if is_selinux_enabled() returns -1
+
+* Mon Apr 18 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.7-6
+- fix chage -l option (#109499, #137498)
+
+* Mon Apr 04 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.7-5
+- fix memory leak, and CPU spinning when grp_update() and 
+  duplicate group entries in /etc/group (#151484)
+
+* Mon Mar 29 2005 Peter Vrabec <pvrabec@redhat.com>  2:4.0.7-4
+- use newgrp binary
+- newgrp don't ask for password if user's default GID = group ID,
+  ask for password if there is some in /etc/gshadow 
+  and in /etc/group is 'x' (#149997)
+
+* Mon Mar 14 2005 Peter Vrabec <pvrabec@redhat.com>
+- gcc4 fix (#150994) 2:4.0.7-3
+
+* Mon Mar 07 2005 Peter Vrabec <pvrabec@redhat.com>
+- man pages cs,es,ko,ru,zh_CN,zh_TW to UTF-8
+
+* Wed Mar 02 2005 Peter Vrabec <pvrabec@redhat.com>
+- upgrade 2:4.0.7-1
+
+* Fri Feb 25 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.3-59
+- static limit on group count to dynamic (#125510, #148994, #147742)
+
+* Mon Feb 21 2005 Peter Vrabec <pvrabec@redhat.com> 2:4.0.3-58
+- add "-l" option #146214
+
+* Mon Feb 14 2005 Adrian Havill <havill@redhat.com>
+- rebuilt
+
+* Wed Feb 9 2005 Dan Walsh <dwalsh@redhat.com> 2:4.0.3-39
+- Change useradd to use matchpathcon
+
+* Thu Oct 21 2004 Dan Walsh <dwalsh@redhat.com> 2:4.0.3-37
+- Add matchpathcon to create the files correctly when they do not exist.
+
+* Mon Oct 18 2004 Miloslav Trmac <mitr@redhat.com> - 2:4.0.3-36
+- Change symlink ownership when copying from /etc/skel (#66819, patch by
+  Michael Weiser)
+
+* Fri Oct 15 2004 Adrian Havill <havill@redhat.com> 2:4.0.3-35
+- make the limit for the group name the same as the username (determined
+  by the header files, rather than a constant) (#56850)
+
+* Wed Oct 13 2004 Adrian Havill <havill@redhat.com> 2:4.0.3-33
+- allow for mixed case and dots in usernames (#135401)
+- all man pages to UTF-8, not just Japanese (#133883)
+- add Polish blurb for useradd -n man page option (#82177)
+
+* Tue Oct 12 2004 Adrian Havill <havill@redhat.com> 2:4.0.3-31
+- check for non-standard legacy place for ncsd HUP (/var/run/nscd.pid) and
+  then the std FHS place (/var/run/nscd.pid) (#125421)
+
+* Fri Oct 1 2004 Dan Walsh <dwalsh@redhat.com> 2:4.0.3-30
+- Add checkPasswdAccess for chage in SELinux
+
+* Sun Sep 26 2004 Adrian Havill <riel@redhat.com> 2:4.0.3-29
+- always unlock all files on any exit (#126709)
+
+* Tue Aug 24 2004 Warren Togami <wtogami@redhat.com> 2:4.0.3-26
+- #126596 fix Req and BuildReqs
+
+* Sun Aug  1 2004 Alan Cox <alan@redhat.com> 4.0.3-25
+- Fix build deps etc, move to current auto* (Steve Grubb)
+
+* Sat Jul 10 2004 Alan Cox <alan@redhat.com> 4.0.3-24
+- Fix nscd path. This fixes various stale data caching bugs (#125421)
+
+* Thu Jun 17 2004 Dan Walsh <dwalsh@redhat.com> 4.0.3-23
+- Add get_enforce checks
+- Clean up patch for potential upstream submission
+- Add removemalloc patch to get it to build on 3.4
+
+* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Tue Mar 30 2004 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-21
+- rebuild
+
+* Tue Mar 30 2004 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-20
+- make /etc/default world-readable, needed for #118338
+
+* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Wed Jan 21 2004 Dan Walsh <dwalsh@redhat.com> 4.0.3-18
+- Fix selinux relabel of /etc/passwd file
+
+* Wed Jan  7 2004 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-17
+- fix use of uninitialized memory in useradd (#89145)
+
+* Tue Dec 16 2003 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-16
+- back to UTF-8 again
+- remove getspnam(3) man page, now conflicts with man-pages 1.64
+
+* Thu Nov 13 2003 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-15
+- don't convert man pages to UTF-8 for RHEL 3, conditionalized using macro
+- fixup dangling man page references
+
+* Mon Nov 10 2003 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-14
+- lastlog: don't pass a possibly-smaller field to localtime (#109648)
+- configure: call AC_SYS_LARGEFILE to get large file support
+
+* Fri Nov 7 2003 Dan Walsh <dwalsh@redhat.com> 4.0.3-13.sel
+- turn on SELinux support
+
+* Wed Oct 22 2003 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-12
+- convert ja man pages to UTF-8 (#106051)
+- override MKINSTALLDIRS at install-time (#107476)
+
+* Mon Sep 8 2003 Dan Walsh <dwalsh@redhat.com>
+- turn off SELinux support
+
+* Thu Sep 4 2003 Dan Walsh <dwalsh@redhat.com> 4.0.3-11.sel
+- build with SELinux support
+
+* Fri Jul 28 2003 Dan Walsh <dwalsh@redhat.com> 4.0.3-10
+- Add SELinux support
+
+* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Wed Jun  4 2003 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-8
+- rebuild
+
+* Tue Jun  3 2003 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-7
+- run autoconf to generate updated configure at compile-time
+
+* Wed Feb 12 2003 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-6
+- adjust mailspool patch to complain if no group named "mail" exists, even
+  though that should never happen
+
+* Tue Feb 11 2003 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-5
+- fix perms on mailspools created by useradd to be owned by the "mail"
+  group (#59810)
+
+* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
+- rebuilt
+
+* Mon Dec  9 2002 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-3
+- install the shadow.3 man page
+
+* Mon Nov 25 2002 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-2
+- disable use of cracklib at build-time
+- fixup reserved-account changes for useradd
+
+* Thu Nov 21 2002 Nalin Dahyabhai <nalin@redhat.com> 4.0.3-1
+- update to 4.0.3, bumping epoch
+
+* Mon Nov 18 2002 Nalin Dahyabhai <nalin@redhat.com> 20000902-14
+- remove man pages which conflict with the man-pages package(s)
+
+* Fri Nov 15 2002 Nalin Dahyabhai <nalin@redhat.com> 20000902-13
+- prevent libshadow from being built more than once, to keep automake happy
+- change how md5 and md5crypt are enabled, to keep autoconf happy
+- remove unpackaged files after %%install
+
+* Thu Aug 29 2002 Nalin Dahyabhai <nalin@redhat.com> 20000902-12
+- force .mo files to be regenerated with current gettext to flush out possible
+  problems
+- fixup non-portable encodings in translations
+- make sv translation header non-fuzzy so that it will be included (#71281)
+
+* Fri Aug 23 2002 Nalin Dahyabhai <nalin@redhat.com> 20000902-11
+- don't apply aging parameters when creating system accounts (#67408)
+
+* Fri Jun 21 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Sun May 26 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Fri May 17 2002 Nalin Dahyabhai <nalin@redhat.com> 20000902-8
+- rebuild in new environment
+
+* Wed Mar 27 2002 Nalin Dahyabhai <nalin@redhat.com> 20000902-7
+- rebuild with proper defines to get support for large lastlog files (#61983)
+
+* Fri Feb 22 2002 Nalin Dahyabhai <nalin@redhat.com> 20000902-6
+- rebuild
+
+* Fri Jan 25 2002 Nalin Dahyabhai <nalin@redhat.com> 20000902-5
+- fix autoheader breakage and random other things autotools complain about
+
+* Mon Aug 27 2001 Nalin Dahyabhai <nalin@redhat.com> 20000902-4
+- use -O0 instead of -O on ia64
+- build in source directory
+- don't leave lock files on the filesystem when useradd creates a group for
+  the user (#50269)
+- fix the -o option to check for duplicate UIDs instead of login names (#52187)
+
+* Thu Jul 26 2001 Bill Nottingham <notting@redhat.com> 20000902-3
+- build with -O on ia64
+
+* Fri Jun 08 2001 Than Ngo <than@redhat.com> 20000902-2
+- fixup broken specfile
+
+* Tue May 22 2001 Bernhard Rosenkraenzer <bero@redhat.com> 20000902-1
+- Create an empty mailspool when creating a user so non-setuid/non-setgid
+  MDAs (postfix+procmail) can deliver mail (#41811)
+- 20000902
+- adapt patches
+
+* Fri Mar  9 2001 Nalin Dahyabhai <nalin@redhat.com>
+- don't overwrite user dot files in useradd (#19982)
+- truncate new files when moving overwriting files with the contents of other
+  files while moving directories (keeps files from looking weird later on)
+- configure using %%{_prefix} as the prefix
+
+* Fri Feb 23 2001 Trond Eivind Glomsrxd <teg@redhat.com>
+- langify
+
+* Wed Aug 30 2000 Bernhard Rosenkraenzer <bero@redhat.com>
+- Fix up chage behavior (Bug #15883)
+
+* Wed Aug 30 2000 Bernhard Rosenkraenzer <bero@redhat.com>
+- 20000826
+- Fix up useradd man page (Bug #17036)
+
+* Tue Aug  8 2000 Bernhard Rosenkraenzer <bero@redhat.com>
+- check for vipw lock before adding or deleting users (Bug #6489)
+
+* Mon Aug  7 2000 Nalin Dahyabhai <nalin@redhat.com>
+- take LOG_CONS out of the openlog() call so that we don't litter the
+  screen during text-mode upgrades
+
+* Tue Jul 18 2000 Bernhard Rosenkraenzer <bero@redhat.com>
+- Remove a fixed-size buffer that caused problems when adding a huge number
+  of users to a group (>8192 bytes) (Bugs #3809, #11930)
+
+* Tue Jul 18 2000 Bernhard Rosenkraenzer <bero@redhat.com>
+- remove dependency on util-linux because it causes prereq loops
+
+* Tue Jul 18 2000 Nalin Dahyabhai <nalin@redhat.com>
+- change symlinked man pages to includers
+- require /usr/bin/newgrp (util-linux) so that /usr/bin/sg isn't left dangling
+
+* Wed Jul 12 2000 Prospector <bugzilla@redhat.com>
+- automatic rebuild
+
+* Sun Jun 18 2000 Matt Wilson <msw@redhat.com>
+- use mandir for FHS
+- added patches in src/ and po/ to honor DESTDIR
+- use make install DESTDIR=$RPM_BUILD_ROOT
+
+* Wed Feb 16 2000 Bernhard Rosenkraenzer <bero@redhat.com>
+- Fix up usermod's symlink behavior (Bug #5458)
+
+* Fri Feb 11 2000 Cristian Gafton <gafton@redhat.com>
+- get rid of mkpasswd
+
+* Mon Feb  7 2000 Nalin Dahyabhai <nalin@redhat.com>
+- fix usermod patch to check for shadow before doing any shadow-specific stuff
+  and merge it into the pwlock patch
+
+* Sat Feb  5 2000 Bernhard Rosenkraenzer <bero@redhat.com>
+- fix man symlinks
+
+* Wed Feb  2 2000 Nalin Dahyabhai <gafton@redhat.com>
+- make -p only change shadow password (bug #8923)
+
+* Mon Jan 31 2000 Cristian Gafton <gafton@redhat.com>
+- rebuild to fix dependeencies
+- man pages are compressed
+
+* Wed Jan 19 2000 Bernhard Rosenkraenzer <bero@redhat.com>
+- Fix a security bug (adduser could overwrite previously existing
+  groups, Bug #8609)
+
+* Sun Jan  9 2000 Bernhard Rosenkraenzer <bero@redhat.com>
+- unset LINGUAS before building
+- Fix typo in newusers manpage (Bug #8258)
+- libtoolize
+
+* Wed Sep 22 1999 Cristian Gafton <gafton@redhat.com>
+- fix segfault for userdel when the primary group for the user is not
+  defined
+
+* Tue Sep 21 1999 Cristian Gafton <gafton@redhat.com>
+- Serial: 1 because now we are using 19990827 (why the heck can't they have
+  a normal version just like everybody else?!)
+- ported all patches to the new code base
+
+* Thu Apr 15 1999 Bill Nottingham <notting@redhat.com>
+- SIGHUP nscd from usermod, too
+
+* Fri Apr 09 1999 Michael K. Johnson <johnsonm@redhat.com>
+- added usermod password locking from Chris Adams <cadams@ro.com>
+
+* Thu Apr 08 1999 Bill Nottingham <notting@redhat.com>
+- have things that modify users/groups SIGHUP nscd on exit
+
+* Wed Mar 31 1999 Michael K. Johnson <johnsonm@redhat.com>
+- have userdel remove user private groups when it is safe to do so
+- allow -f to force user removal even when user appears busy in utmp
+
+* Tue Mar 23 1999 Preston Brown <pbrown@redhat.com>
+- edit out unused CHFN fields from login.defs.
+
+* Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com> 
+- auto rebuild in the new build environment (release 7)
+
+* Wed Jan 13 1999 Bill Nottingham <notting@redhat.com>
+- configure fix for arm
+
+* Wed Dec 30 1998 Cristian Gafton <gafton@redhat.com>
+- build against glibc 2.1
+
+* Fri Aug 21 1998 Jeff Johnson <jbj@redhat.com>
+- Note that /usr/sbin/mkpasswd conflicts with /usr/bin/mkpasswd;
+  one of these (I think /usr/sbin/mkpasswd but other opinions are valid)
+  should probably be renamed.  In any case, mkpasswd.8 from this package
+  needs to be installed. (problem #823)
+
+* Fri May 08 1998 Prospector System <bugs@redhat.com>
+- translations modified for de, fr, tr
+
+* Tue Apr 21 1998 Cristian Gafton <gafton@redhat.com>
+- updated to 980403
+- redid the patches
+
+* Tue Dec 30 1997 Cristian Gafton <gafton@redhat.com>
+- updated the spec file
+- updated the patch so that new accounts created on shadowed system won't
+  confuse pam_pwdb anymore ('!!' default password instead on '!')
+- fixed a bug that made useradd -G segfault
+- the check for the ut_user is now patched into configure
+
+* Thu Nov 13 1997 Erik Troan <ewt@redhat.com>
+- added patch for XOPEN oddities in glibc headers
+- check for ut_user before checking for ut_name -- this works around some
+  confusion on glibc 2.1 due to the utmpx header not defining the ut_name
+  compatibility stuff. I used a gross sed hack here because I couldn't make
+  automake work properly on the sparc (this could be a glibc 2.0.99 problem
+  though). The utuser patch works fine, but I don't apply it.
+- sleep after running autoconf
+
+* Thu Nov 06 1997 Cristian Gafton <gafton@redhat.com>
+- added forgot lastlog command to the spec file
+
+* Mon Oct 26 1997 Cristian Gafton <gafton@redhat.com>
+- obsoletes adduser
+
+* Thu Oct 23 1997 Cristian Gafton <gafton@redhat.com>
+- modified groupadd; updated the patch
+
+* Fri Sep 12 1997 Cristian Gafton <gafton@redhat.com>
+- updated to 970616
+- changed useradd to meet RH specs
+- fixed some bugs
+
+* Tue Jun 17 1997 Erik Troan <ewt@redhat.com>
+- built against glibc
diff --git a/packaging/shadow-utils.spec b/packaging/shadow-utils.spec
new file mode 100644 (file)
index 0000000..23ce267
--- /dev/null
@@ -0,0 +1,168 @@
+Summary: Utilities for managing accounts and shadow password files
+Name: shadow-utils
+Version: 4.1.4.2
+Release: 1
+URL: http://pkg-shadow.alioth.debian.org/
+Source0: ftp://pkg-shadow.alioth.debian.org/pub/pkg-shadow/shadow-%{version}.tar.bz2
+Source1: shadow-4.0.17-login.defs
+Source2: shadow-4.0.18.1-useradd
+Patch0: shadow-4.1.4.2-redhat.patch
+Patch1: shadow-4.1.4.1-goodname.patch
+Patch2: shadow-4.1.4.2-leak.patch
+Patch3: shadow-4.1.4.2-fixes.patch
+License: BSD and GPLv2+
+Group: System/Base
+Requires: setup
+
+%description
+The shadow-utils package includes the necessary programs for
+converting UNIX password files to the shadow password format, plus
+programs for managing user and group accounts. The pwconv command
+converts passwords to the shadow password format. The pwunconv command
+unconverts shadow passwords and generates an npasswd file (a standard
+UNIX password file). The pwck command checks the integrity of password
+and shadow files. The lastlog command prints out the last login times
+for all users. The useradd, userdel, and usermod commands are used for
+managing user accounts. The groupadd, groupdel, and groupmod commands
+are used for managing group accounts.
+
+%prep
+%setup -q -n shadow-%{version}
+%patch0 -p1 -b .redhat
+%patch1 -p1 -b .goodname
+%patch2 -p1 -b .leak
+%patch3 -p1 -b .fixes
+
+iconv -f ISO88591 -t utf-8  doc/HOWTO > doc/HOWTO.utf8
+cp -f doc/HOWTO.utf8 doc/HOWTO
+
+%build
+%configure \
+        --enable-shadowgrp \
+        --without-audit \
+        --with-sha-crypt \
+        --without-selinux \
+        --without-libcrack \
+        --without-libpam \
+        --disable-shared
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT gnulocaledir=$RPM_BUILD_ROOT/%{_datadir}/locale MKINSTALLDIRS=`pwd`/mkinstalldirs
+install -d -m 755 $RPM_BUILD_ROOT/%{_sysconfdir}/default
+install -p -c -m 0644 %{SOURCE1} $RPM_BUILD_ROOT/%{_sysconfdir}/login.defs
+install -p -c -m 0600 %{SOURCE2} $RPM_BUILD_ROOT/%{_sysconfdir}/default/useradd
+
+
+ln -s useradd $RPM_BUILD_ROOT%{_sbindir}/adduser
+#ln -s %{_mandir}/man8/useradd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/adduser.8
+ln -s useradd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/adduser.8
+for subdir in $RPM_BUILD_ROOT/%{_mandir}/{??,??_??,??_??.*}/man* ; do
+        test -d $subdir && test -e $subdir/useradd.8 && echo ".so man8/useradd.8" > $subdir/adduser.8
+done
+
+# Remove binaries we don't use.
+rm $RPM_BUILD_ROOT/%{_bindir}/chfn
+rm $RPM_BUILD_ROOT/%{_bindir}/chsh
+rm $RPM_BUILD_ROOT/%{_bindir}/expiry
+rm $RPM_BUILD_ROOT/%{_bindir}/groups
+rm $RPM_BUILD_ROOT/%{_bindir}/login
+rm $RPM_BUILD_ROOT/%{_bindir}/passwd
+rm $RPM_BUILD_ROOT/%{_bindir}/su
+rm $RPM_BUILD_ROOT/%{_sysconfdir}/login.access
+rm $RPM_BUILD_ROOT/%{_sysconfdir}/limits
+rm $RPM_BUILD_ROOT/%{_sbindir}/logoutd
+rm $RPM_BUILD_ROOT/%{_sbindir}/nologin
+rm $RPM_BUILD_ROOT/%{_sbindir}/chgpasswd
+rm $RPM_BUILD_ROOT/%{_mandir}/man1/chfn.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man1/chfn.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man1/chsh.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man1/chsh.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man1/expiry.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man1/expiry.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man1/groups.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man1/groups.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man1/login.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man1/login.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man1/passwd.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man1/passwd.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man1/su.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man1/su.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man5/limits.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man5/limits.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man5/login.access.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man5/login.access.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man5/passwd.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man5/passwd.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man5/porttime.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man5/porttime.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man5/suauth.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man5/suauth.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man8/logoutd.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man8/logoutd.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man8/nologin.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man8/nologin.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man8/chgpasswd.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man8/chgpasswd.*
+rm $RPM_BUILD_ROOT/%{_mandir}/man3/getspnam.*
+rm $RPM_BUILD_ROOT/%{_mandir}/*/man3/getspnam.*
+
+%find_lang shadow
+find $RPM_BUILD_ROOT%{_mandir} -depth -type d -empty -delete
+for dir in $(ls -1d $RPM_BUILD_ROOT%{_mandir}/{??,??_??}) ; do
+    dir=$(echo $dir | sed -e "s|^$RPM_BUILD_ROOT||")
+    lang=$(basename $dir)
+    echo "%%lang($lang) $dir" >> shadow.lang
+    echo "%%lang($lang) $dir/man*" >> shadow.lang
+#    echo "%%lang($lang) $dir/man*/*" >> shadow.lang
+done
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files -f shadow.lang
+%defattr(-,root,root)
+%doc NEWS doc/HOWTO README
+%dir %{_sysconfdir}/default
+#%attr(0644,root,root)   %config(noreplace) %{_sysconfdir}/login.defs
+%exclude %{_sysconfdir}/login.defs
+%attr(0600,root,root)   %config(noreplace) %{_sysconfdir}/default/useradd
+%{_bindir}/sg
+%{_bindir}/chage
+%exclude %{_bindir}/faillog
+%{_bindir}/gpasswd
+%exclude %{_bindir}/lastlog
+%exclude %{_bindir}/newgrp
+%exclude %{_sbindir}/adduser
+%attr(0750,root,root)   %{_sbindir}/user*
+%attr(0750,root,root)   %{_sbindir}/group*
+%{_sbindir}/grpck
+%{_sbindir}/pwck
+%{_sbindir}/*conv
+%exclude %{_sbindir}/chpasswd
+%{_sbindir}/newusers
+%{_sbindir}/vipw
+%{_sbindir}/vigr
+%{_mandir}/man1/chage.1*
+%{_mandir}/man1/gpasswd.1*
+%{_mandir}/man1/sg.1*
+%{_mandir}/man1/newgrp.1*
+%{_mandir}/man3/shadow.3*
+%{_mandir}/man5/shadow.5*
+%{_mandir}/man5/login.defs.5*
+%{_mandir}/man5/gshadow.5*
+%{_mandir}/man5/faillog.5*
+%{_mandir}/man8/adduser.8*
+%{_mandir}/man8/group*.8*
+%{_mandir}/man8/user*.8*
+%{_mandir}/man8/pwck.8*
+%{_mandir}/man8/grpck.8*
+%{_mandir}/man8/chpasswd.8*
+%{_mandir}/man8/newusers.8*
+%{_mandir}/man8/*conv.8*
+%{_mandir}/man8/lastlog.8*
+%{_mandir}/man8/faillog.8*
+%{_mandir}/man8/vipw.8*
+%{_mandir}/man8/vigr.8*
+
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644 (file)
index 0000000..460ec38
--- /dev/null
@@ -0,0 +1,38 @@
+bs
+ca
+cs
+da
+de
+dz
+el
+es
+eu
+fi
+fr
+gl
+he
+hu
+id
+it
+ja
+kk
+km
+ko
+nb
+ne
+nl
+nn
+pl
+pt
+pt_BR
+ro
+ru
+sk
+sq
+sv
+tl
+tr
+uk
+vi
+zh_CN
+zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644 (file)
index 0000000..5022b8b
--- /dev/null
@@ -0,0 +1,403 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2006 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.16
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+       @echo "$(MSGFMT) -c -o $@ $<"; \
+       $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+       @lang=`echo $* | sed -e 's,.*/,,'`; \
+       test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+       echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
+       cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+       sed -e '/^#/d' $< > t-$@
+       mv t-$@ $@
+
+
+all: all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+       test ! -f $(srcdir)/$(DOMAIN).pot || \
+         test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+       @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+         echo "touch stamp-po" && \
+         echo timestamp > stamp-poT && \
+         mv stamp-poT stamp-po; \
+       }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+       if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+         msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+       else \
+         msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+       fi; \
+       $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+         --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
+         --files-from=$(srcdir)/POTFILES.in \
+         --copyright-holder='$(COPYRIGHT_HOLDER)' \
+         --msgid-bugs-address="$$msgid_bugs_address"
+       test ! -f $(DOMAIN).po || { \
+         if test -f $(srcdir)/$(DOMAIN).pot; then \
+           sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+           sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+           if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+             rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+           else \
+             rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+             mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+           fi; \
+         else \
+           mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+         fi; \
+       }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+       $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+       @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+       if test -f "$(srcdir)/$${lang}.po"; then \
+         test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+         echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+         cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
+       else \
+         $(MAKE) $${lang}.po-create; \
+       fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+       if test "$(PACKAGE)" = "gettext-tools"; then \
+         $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+         for file in $(DISTFILES.common) Makevars.template; do \
+           $(INSTALL_DATA) $(srcdir)/$$file \
+                           $(DESTDIR)$(gettextsrcdir)/$$file; \
+         done; \
+         for file in Makevars; do \
+           rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+         done; \
+       else \
+         : ; \
+       fi
+install-data-no: all
+install-data-yes: all
+       $(mkdir_p) $(DESTDIR)$(datadir)
+       @catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+         dir=$(localedir)/$$lang/LC_MESSAGES; \
+         $(mkdir_p) $(DESTDIR)$$dir; \
+         if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+         $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+         echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+         for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+           if test -n "$$lc"; then \
+             if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+               link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+               mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+               mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+               (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+                for file in *; do \
+                  if test -f $$file; then \
+                    ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+                  fi; \
+                done); \
+               rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+             else \
+               if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+                 :; \
+               else \
+                 rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+                 mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+               fi; \
+             fi; \
+             rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+             ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+             ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+             cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+             echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+           fi; \
+         done; \
+       done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+       if test "$(PACKAGE)" = "gettext-tools"; then \
+         $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+       else \
+         : ; \
+       fi
+installdirs-data-no:
+installdirs-data-yes:
+       $(mkdir_p) $(DESTDIR)$(datadir)
+       @catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+         dir=$(localedir)/$$lang/LC_MESSAGES; \
+         $(mkdir_p) $(DESTDIR)$$dir; \
+         for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+           if test -n "$$lc"; then \
+             if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+               link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+               mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+               mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+               (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+                for file in *; do \
+                  if test -f $$file; then \
+                    ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+                  fi; \
+                done); \
+               rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+             else \
+               if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+                 :; \
+               else \
+                 rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+                 mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+               fi; \
+             fi; \
+           fi; \
+         done; \
+       done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+       if test "$(PACKAGE)" = "gettext-tools"; then \
+         for file in $(DISTFILES.common) Makevars.template; do \
+           rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+         done; \
+       else \
+         : ; \
+       fi
+uninstall-data-no:
+uninstall-data-yes:
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+         for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+           rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+         done; \
+       done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+       rm -f remove-potcdate.sed
+       rm -f stamp-poT
+       rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+       rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+       rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+       $(MAKE) update-po
+       @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+       dists="$(DISTFILES)"; \
+       if test "$(PACKAGE)" = "gettext-tools"; then \
+         dists="$$dists Makevars.template"; \
+       fi; \
+       if test -f $(srcdir)/$(DOMAIN).pot; then \
+         dists="$$dists $(DOMAIN).pot stamp-po"; \
+       fi; \
+       if test -f $(srcdir)/ChangeLog; then \
+         dists="$$dists ChangeLog"; \
+       fi; \
+       for i in 0 1 2 3 4 5 6 7 8 9; do \
+         if test -f $(srcdir)/ChangeLog.$$i; then \
+           dists="$$dists ChangeLog.$$i"; \
+         fi; \
+       done; \
+       if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+       for file in $$dists; do \
+         if test -f $$file; then \
+           cp -p $$file $(distdir) || exit 1; \
+         else \
+           cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+         fi; \
+       done
+
+update-po: Makefile
+       $(MAKE) $(DOMAIN).pot-update
+       test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+       $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+       @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+       echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+       exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+       @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+       if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+       tmpdir=`pwd`; \
+       echo "$$lang:"; \
+       test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+       echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+       cd $(srcdir); \
+       if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+         if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+           rm -f $$tmpdir/$$lang.new.po; \
+         else \
+           if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+             :; \
+           else \
+             echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+             exit 1; \
+           fi; \
+         fi; \
+       else \
+         echo "msgmerge for $$lang.po failed!" 1>&2; \
+         rm -f $$tmpdir/$$lang.new.po; \
+       fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+       @:
+
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+       cd $(top_builddir) \
+         && $(SHELL) ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644 (file)
index 0000000..c2b35f8
--- /dev/null
@@ -0,0 +1,31 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --no-location
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
+
+MSGID_BUGS_ADDRESS = pkg-shadow-devel@lists.alioth.debian.org
+
+MSGMERGE += --previous
+MSGMERGE_UPDATE += --previous
+
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644 (file)
index 0000000..0045928
--- /dev/null
@@ -0,0 +1,110 @@
+# List of files which contain translatable strings.
+
+lib/commonio.c
+lib/encrypt.c
+lib/fputsx.c
+lib/getdef.c
+lib/get_gid.c
+lib/getlong.c
+lib/get_uid.c
+lib/groupio.c
+lib/groupmem.c
+lib/gshadow.c
+lib/lockpw.c
+lib/nscd.c
+lib/port.c
+lib/pwauth.c
+lib/pwio.c
+lib/pwmem.c
+lib/sgetgrent.c
+lib/sgetpwent.c
+lib/sgetspent.c
+lib/sgroupio.c
+lib/shadow.c
+lib/shadowio.c
+lib/shadowmem.c
+lib/utent.c
+libmisc/addgrps.c
+libmisc/age.c
+libmisc/audit_help.c
+libmisc/basename.c
+libmisc/chkname.c
+libmisc/chowndir.c
+libmisc/chowntty.c
+libmisc/cleanup.c
+libmisc/cleanup_group.c
+libmisc/cleanup_user.c
+libmisc/console.c
+libmisc/copydir.c
+libmisc/entry.c
+libmisc/env.c
+libmisc/failure.c
+libmisc/fields.c
+libmisc/find_new_gid.c
+libmisc/find_new_uid.c
+libmisc/getgr_nam_gid.c
+libmisc/getrange.c
+libmisc/hushed.c
+libmisc/isexpired.c
+libmisc/limits.c
+libmisc/list.c
+libmisc/log.c
+libmisc/loginprompt.c
+libmisc/mail.c
+libmisc/motd.c
+libmisc/myname.c
+libmisc/obscure.c
+libmisc/pam_pass.c
+libmisc/pwd2spwd.c
+libmisc/pwdcheck.c
+libmisc/pwd_init.c
+libmisc/rlogin.c
+libmisc/salt.c
+libmisc/setugid.c
+libmisc/setupenv.c
+libmisc/shell.c
+libmisc/strtoday.c
+libmisc/sub.c
+libmisc/sulog.c
+libmisc/ttytype.c
+libmisc/tz.c
+libmisc/ulimit.c
+libmisc/utmp.c
+libmisc/valid.c
+libmisc/xgetXXbyYY.c
+libmisc/xmalloc.c
+libmisc/yesno.c
+src/chage.c
+src/chfn.c
+src/chgpasswd.c
+src/chpasswd.c
+src/chsh.c
+src/expiry.c
+src/faillog.c
+src/gpasswd.c
+src/groupadd.c
+src/groupdel.c
+src/groupmems.c
+src/groupmod.c
+src/groups.c
+src/grpck.c
+src/grpconv.c
+src/grpunconv.c
+src/id.c
+src/lastlog.c
+src/login.c
+src/login_nopam.c
+src/logoutd.c
+src/newgrp.c
+src/newusers.c
+src/passwd.c
+src/pwck.c
+src/pwconv.c
+src/pwunconv.c
+src/suauth.c
+src/su.c
+src/sulogin.c
+src/useradd.c
+src/userdel.c
+src/usermod.c
+src/vipw.c
diff --git a/po/Rules-quot b/po/Rules-quot
new file mode 100644 (file)
index 0000000..9c2a995
--- /dev/null
@@ -0,0 +1,47 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+       $(MAKE) en@quot.po-update
+en@boldquot.po-create:
+       $(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+       @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+       if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+       tmpdir=`pwd`; \
+       echo "$$lang:"; \
+       ll=`echo $$lang | sed -e 's/@.*//'`; \
+       LC_ALL=C; export LC_ALL; \
+       cd $(srcdir); \
+       if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+         if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+           rm -f $$tmpdir/$$lang.new.po; \
+         else \
+           if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+             :; \
+           else \
+             echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+             exit 1; \
+           fi; \
+         fi; \
+       else \
+         echo "creation of $$lang.po failed!" 1>&2; \
+         rm -f $$tmpdir/$$lang.new.po; \
+       fi
+
+en@quot.insert-header: insert-header.sin
+       sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+       sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+       rm -f *.insert-header
diff --git a/po/boldquot.sed b/po/boldquot.sed
new file mode 100644 (file)
index 0000000..4b937aa
--- /dev/null
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
+s/“/“\e[1m/g
+s/”/\e[0m”/g
+s/‘/‘\e[1m/g
+s/’/\e[0m’/g
diff --git a/po/bs.gmo b/po/bs.gmo
new file mode 100644 (file)
index 0000000..dc1e996
Binary files /dev/null and b/po/bs.gmo differ
diff --git a/po/bs.po b/po/bs.po
new file mode 100644 (file)
index 0000000..393f24f
--- /dev/null
+++ b/po/bs.po
@@ -0,0 +1,1808 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2004-05-09 12:03+0100\n"
+"Last-Translator: Safir Šećerović <sapphire@linux.org.ba>\n"
+"Language-Team: Bosnian <lokal@lugbih.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+
+msgid "Password: "
+msgstr "Šifra:"
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s's Šifra: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr ""
+
+msgid "Warning: too many groups\n"
+msgstr ""
+
+msgid "Your password has expired."
+msgstr "Vaša šifra je istekla."
+
+msgid "Your password is inactive."
+msgstr "Vaša šifra je neaktivna."
+
+msgid "Your login has expired."
+msgstr "Vaš račun je istekao."
+
+msgid "  Contact the system administrator."
+msgstr ""
+
+msgid "  Choose a new password."
+msgstr "  Izaberite novu šifru."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Vaša šifra ističe za in %ld dana.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Vaša šifra ističe sutra."
+
+msgid "Your password will expire today."
+msgstr "Vaša šifra ističe danas."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr ""
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+
+msgid "Too many logins.\n"
+msgstr "Previše prijavljivanja.\n"
+
+msgid "You have new mail."
+msgstr "Imate novu poštu."
+
+msgid "No mail."
+msgstr "Nema pošte."
+
+msgid "You have mail."
+msgstr "Imate poštu."
+
+msgid "no change"
+msgstr ""
+
+msgid "a palindrome"
+msgstr ""
+
+msgid "case changes only"
+msgstr ""
+
+msgid "too similar"
+msgstr ""
+
+msgid "too simple"
+msgstr ""
+
+msgid "rotated"
+msgstr ""
+
+msgid "too short"
+msgstr ""
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Neispravna šifra: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr ""
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr ""
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Šifra:"
+
+msgid "passwd: password updated successfully\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Mijenjam šifru za grupu %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr ""
+
+msgid "No directory, logging in with HOME=/"
+msgstr ""
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr ""
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr ""
+
+msgid "Unable to determine your tty name."
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr ""
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+
+msgid "Minimum Password Age"
+msgstr "Minimalna trajnost šifre"
+
+msgid "Maximum Password Age"
+msgstr "Maskimalna trajnost šifre"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr ""
+
+msgid "Password Expiration Warning"
+msgstr "Upozorenje o isteku šifre"
+
+msgid "Password Inactive"
+msgstr "Šifra neaktivna"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Datum isteka računa (GGGG-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr ""
+
+#, fuzzy
+msgid "never"
+msgstr "Nikad"
+
+msgid "password must be changed"
+msgstr ""
+
+#, fuzzy
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Šifra:"
+
+#, fuzzy
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Šifra neaktivna"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr ""
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: Try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: Pokušajte ponovo kasnije\n"
+
+#, fuzzy, c-format
+#| msgid "%s: unknown member %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: nepoznat član %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "Puno ime i prezime"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr ""
+
+msgid "Room Number"
+msgstr "Broj sobe"
+
+msgid "Work Phone"
+msgstr "Poslovni telefon"
+
+msgid "Home Phone"
+msgstr "Kućni telefon"
+
+msgid "Other"
+msgstr "Ostalo"
+
+msgid "Cannot change ID to root.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr ""
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s: grupa %s postoji\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr ""
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr ""
+
+#, c-format
+msgid " [%lus left]"
+msgstr ""
+
+#, c-format
+msgid " [%lds lock]"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Nepoznat korisnik: %s\n"
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+msgid "The options cannot be combined.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Mijenjam šifru za grupu %s\n"
+
+msgid "New Password: "
+msgstr "Nova šifra:"
+
+msgid "Re-enter new password: "
+msgstr "Ponovo unesite novu šifru:"
+
+msgid "They don't match; try again"
+msgstr "One se ne slažu; pokušajte ponovo"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Pokušajte ponovo kasnije\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Dodajem korisnika %s grupi %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Uklanjam korisnika %s iz grupe %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr ""
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr ""
+
+msgid "invalid group file entry"
+msgstr ""
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr ""
+
+#, fuzzy
+msgid "duplicate group entry"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr ""
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr ""
+
+msgid "duplicate shadow group entry"
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr ""
+
+msgid "Usage: grpconv\n"
+msgstr ""
+
+msgid "Usage: grpunconv\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: unknown member %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: nepoznat član %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr ""
+
+msgid "Usage: id\n"
+msgstr ""
+
+msgid " groups="
+msgstr ""
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr ""
+
+msgid "Username                Port     Latest"
+msgstr ""
+
+msgid "**Never logged in**"
+msgstr ""
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr ""
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr ""
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr ""
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s login: "
+msgstr ""
+
+msgid "login: "
+msgstr ""
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr ""
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr ""
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr ""
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr ""
+
+#, c-format
+msgid " from %.*s"
+msgstr ""
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+
+msgid "Usage: logoutd\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr ""
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr ""
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Stara šifra:"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+msgid "too many groups\n"
+msgstr ""
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr ""
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "Stara šifra:"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+msgid "New password: "
+msgstr "Nova šifra:"
+
+msgid "Try again."
+msgstr "Pokušajte ponovo."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Upozorenje: slaba šifra (unesite je ponovo ako je ipak želite koristiti)."
+
+msgid "They don't match; try again.\n"
+msgstr "One se ne slažu; pokušajte ponovo\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "Mijenjam šifru za grupu %s\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Šifra:"
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Upozorenje o isteku šifre"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid password file entry"
+msgstr "Stara šifra:"
+
+msgid "duplicate password entry"
+msgstr ""
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Adding user %s to group %s\n"
+msgid "user '%s': no group %lu\n"
+msgstr "Dodajem korisnika %s grupi %s\n"
+
+#, fuzzy, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr ""
+
+msgid "duplicate shadow password entry"
+msgstr ""
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr ""
+
+msgid "Usage: pwconv\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Usage: pwunconv\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr ""
+
+msgid "Password authentication bypassed.\n"
+msgstr ""
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr ""
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr ""
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr ""
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr ""
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr ""
+
+#, fuzzy
+msgid "(Enter your own password)"
+msgstr "Ponovo unesite novu šifru:"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr ""
+
+msgid "No shell\n"
+msgstr ""
+
+#, fuzzy
+msgid "No password file"
+msgstr "Nova šifra:"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr ""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+
+msgid "Entering System Maintenance Mode"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s"
+msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "nepoznata grupa: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr ""
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: grupa %s postoji\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr ""
+
+msgid "failed to change mailbox owner"
+msgstr ""
+
+msgid "failed to rename mailbox"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "Šifra:"
+
+msgid "Couldn't get file context"
+msgstr ""
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr ""
+
+msgid "Couldn't make backup"
+msgstr ""
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Password set to expire."
+#~ msgstr "Vaša šifra je istekla."
+
+#, fuzzy
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "Broj sobe"
+
+#, fuzzy
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "Poslovni telefon"
+
+#, fuzzy
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "Kućni telefon"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "nepoznata grupa: %s\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Nepoznat korisnik: %s\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "nepoznata grupa: %s\n"
+
+#, fuzzy
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: nepoznat član %s\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Nova šifra:"
+
+#~ msgid "Sorry."
+#~ msgstr "Žalim."
diff --git a/po/ca.gmo b/po/ca.gmo
new file mode 100644 (file)
index 0000000..07c9778
Binary files /dev/null and b/po/ca.gmo differ
diff --git a/po/ca.po b/po/ca.po
new file mode 100644 (file)
index 0000000..2cf97a0
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,2724 @@
+# Shadow Catalan translation.
+# Guillem Jover <guillem@debian.org>, 2004, 2005, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-11-24 17:34+0100\n"
+"Last-Translator: Guillem Jover <guillem@debian.org>\n"
+"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n!=1;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "No s'ha pogut reservar espai per a la informació de configuració.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"error de configuració - element «%s» desconegut (notifiqueu-ho a "
+"l'administrador)\n"
+
+msgid "Password: "
+msgstr "Contrasenya: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Contrasenya de l'usuari %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Avís: el grup %s és desconegut\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Avís: hi ha massa grups\n"
+
+msgid "Your password has expired."
+msgstr "La vostra contrasenya ha caducat."
+
+msgid "Your password is inactive."
+msgstr "La vostra contrasenya està inactiva."
+
+msgid "Your login has expired."
+msgstr "El vostre accés ha caducat."
+
+msgid "  Contact the system administrator."
+msgstr "  Contacteu amb l'administrador del sistema."
+
+msgid "  Choose a new password."
+msgstr "  Escolliu una nova contrasenya."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "La vostra contrasenya caduca en %ld dies.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "La vostra contrasenya caduca demà."
+
+msgid "Your password will expire today."
+msgstr "La vostra contrasenya caduca avui."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "No es pot canviar la tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: els camps són massa llargs\n"
+
+msgid "Environment overflow\n"
+msgstr "Desbordament d'entorn\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "No podeu canviar $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"S'ha produït %d fallada des de l'últim accés.\n"
+"L'ultim va ser %s en %s.\n"
+msgstr[1] ""
+"S'han produït %d fallades des de l'últim accés.\n"
+"L'ultim va ser %s en %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: no es pot obtenir un UID únic\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: no es pot obtenir un GID únic\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: no es pot obtenir un UID únic\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: no es pot obtenir un UID únic\n"
+
+msgid "Too many logins.\n"
+msgstr "Massa accessos.\n"
+
+msgid "You have new mail."
+msgstr "Teniu correu nou."
+
+msgid "No mail."
+msgstr "No hi ha correu."
+
+msgid "You have mail."
+msgstr "Teniu correu."
+
+msgid "no change"
+msgstr "no hi ha canvis"
+
+msgid "a palindrome"
+msgstr "un palíndrom"
+
+msgid "case changes only"
+msgstr "només canvis de majúscules/minúscules"
+
+msgid "too similar"
+msgstr "massa similar"
+
+msgid "too simple"
+msgstr "massa senzilla"
+
+msgid "rotated"
+msgstr "rotada"
+
+msgid "too short"
+msgstr "massa curta"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "La contrasenya és incorrecta: %s."
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() ha fallat, error %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "S'ha canviat la contrasenya."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: s'ha actualitzat la contrasenya satisfactòriament\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "La contrasenya és incorrecta per a «%s».\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "No es pot canviar el directori a «%s»\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "No hi ha directori, entrant amb HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "No es pot executar %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "El directori arrel «%s» no és vàlid\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "No es pot canviar el directori arrel a «%s»\n"
+
+msgid "Unable to determine your tty name."
+msgstr "No s'ha pogut determinar el nom de la vostra tty."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: sense memòria\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) ha fallat\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "No\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Forma d'ús: chage [opcions] [USUARI]\n"
+"\n"
+"Opcions:\n"
+"  -d, --lastday ÚLTIM_DIA          estableix l'últim canvi de contrasenya\n"
+"                                   a ÚLTIM_DIA\n"
+"  -E, --expiredate DATA_EXPIRACIÓ  estableix la data d'expiració del\n"
+"                                   compte a DATA_EXPIRACIÓ\n"
+"  -h, --help                       mostra aquesta ajuda i acaba\n"
+"  -I, --inactive INACTIVA          estableix la contrasenya inactiva\n"
+"                                   després d'expiració a INACTIVA\n"
+"  -l, --list                       mostra informació d'envelliment del\n"
+"                                   compte\n"
+"  -m, --mindays DIES_MÍN           estableix el número mínim de dies abans\n"
+"                                   de canvi de contrasenya a DIES_MÍN\n"
+"  -M, --maxdays DIES_MÀX           estableix el número màxim de dies abans\n"
+"                                   de canvi de contrasenya a DIES_MÀX\n"
+"  -W, --warndays DIES_AVÍS         estableix els dies d'avís d'expiració\n"
+"                                   a DIES_AVÍS\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Introduïu el nou valor, o premeu ENTER per al predeterminat"
+
+msgid "Minimum Password Age"
+msgstr "Duració mínima de la contrasenya"
+
+msgid "Maximum Password Age"
+msgstr "Duració màxima de la contrasenya"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Últim canvi de contrasenya (AAAA-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Avís de caducitat de la contrasenya"
+
+msgid "Password Inactive"
+msgstr "Contrasenya inactiva"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data de caducitat per al compte (AAAA-MM-YY)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Últim canvi de contrasenya\t\t\t\t: "
+
+msgid "never"
+msgstr "mai"
+
+msgid "password must be changed"
+msgstr "s'ha de canviar la contrasenya"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "La contrasenya caduca\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Contrasenya inactiva\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "El compte caduca\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Número mínim de dies entre canvi de contrasenya\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Número màxim de dies entre canvi de contrasenya\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Número de dies d'avís abans que la contrasenya expiri\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: la data «%s» no és vàlida\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: l'argument numèric «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: no inclogueu «l» amb altres senyaladors\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Permís denegat.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: No s'ha pogut determinar el seu nom d'usuari.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: l'autenticació PAM ha fallat\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: no es poden blocar els fitxers, intenteu-ho més tard\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: no es pot obrir el fitxer %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: fallada al fer fork: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: ha fallat el despreniment de privilegis (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: el fitxer de contrasenyes ombra no és present\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: ha fallat el despreniment de privilegis (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: l'usuari %s no existeix\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "S'està canviant la informació de caducitat per a %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: s'ha produït un error en canviar els camps\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Forma d'ús: %s [-f nom_complet] [-r num_habitació] [-w tel_feina]\n"
+"\t[-h tel_casa] [-o altre] [usuari]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Forma d'ús: %s [-f nom_complet] [-r num_habitació] [-w tel_feina]\n"
+"[-h tel_casa]\n"
+
+msgid "Full Name"
+msgstr "Nom complet"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Número d'habitació"
+
+msgid "Work Phone"
+msgstr "Telèfon de la feina"
+
+msgid "Home Phone"
+msgstr "Telèfon de casa"
+
+msgid "Other"
+msgstr "Altre"
+
+msgid "Cannot change ID to root.\n"
+msgstr "No s'ha pogut canviar l'ID al de root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: el nom no és vàlid: «%s»\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: el número d'habitació no és vàlid: «%s»\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: el telèfon de la feina no és vàlid: «%s»\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: el telèfon de casa no és vàlid: «%s»\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: «%s» conté caràcters il·legals\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: «%s» conté caràcters il·legals\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: l'usuari %s no existeix\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: no s'ha pogut canviar l'usuari «%s» al client NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: «%s» és el mestre NIS per a aquest client.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "S'està canviant la informació d'usuari per a %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: els camps són massa llargs\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Forma d'ús: chpasswd [opcions]\n"
+"\n"
+"Opcions:\n"
+"  -e, --encrypted               les contrasenyes proveïdes estan xifrades\n"
+"  -h, --help                    mostra aquest missatge d'ajuda i acaba\n"
+"  -m, --md5                     usa xifrat MD5 en comptes de DES quan les\n"
+"                                contrasenyes proveïdes no estan xifrades\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: el senyalador «-a» NOMÉS es permet amb el senyalador «-G»\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: línia %d: la línia és massa llarga\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: línia %d: manca la nova contrasenya\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: el grup %s no existeix\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: línia %d: no es pot actualitzar l'entrada\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: s'ha detectat un error, els canvis s'han ignorat\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Forma d'ús: %s [entrada]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: l'usuari %s no existeix\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: l'usuari %s no existeix\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Forma d'ús: chsh [opcions] [USUARI]\n"
+"\n"
+"Ocions:\n"
+"  -h, --help                    mostra aquest missatge d'ajuda i acaba\n"
+"  -s, --shell INTÈRPRET         nou intèrpret d'accés per al compte "
+"d'usuari\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Intèrpret d'accés"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "No podeu canviar l'intèrpret per a %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "S'està canviant l'intèrpret d'accés per a %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: L'entrada no és vàlida: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s no és un intèrpret vàlid.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Forma d'ús: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Usuari      Fallades Màxim   Últim                    A\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [falten %lds]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [blocat %lds]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "L'usuari és desconegut: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: no es pot obrir el fitxer %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "No es pot canviar la contrasenya per a %s.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: contrasenyes ombra de grups requerides per a «-A»\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: el grup %s no existeix\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: fallada al fer fork: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "S'està canviant la contrasenya per al grup %s\n"
+
+msgid "New Password: "
+msgstr "Nova contrasenya: "
+
+msgid "Re-enter new password: "
+msgstr "Reintroduïu la nova contrasenya: "
+
+msgid "They don't match; try again"
+msgstr "No coincideixen; intenteu-ho de nou."
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Intenteu-ho de nou més tard.\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "S'està afegint l'usuari %s al grup %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "S'està eliminant l'usuari %s del grup %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: l'usuari %s no existeix\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: No és una tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Forma d'ús: %s [entrada]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s no és un nom de grup valid\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "el nom de grup «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: «-K» requereix CLAU=VALOR\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: el grup %s existeix\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "El membre ja existeix\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Forma d'ús: groupdel grup\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: no es pot reanomenar el directori %s a %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: no s'ha pogut canviar l'usuari «%s» al client NIS.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: el grup %s no existeix\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: el grup «%s» és un grup NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s és el mestre NIS\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: l'usuari %s és un usuari NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: sense memòria a update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "el nom de grup «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: el grup %s no és un grup NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: usuari %s desconegut\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Forma d'ús: %s [-r] [-s] [grup [grup_ombra]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Forma d'ús: %s [-r] [-s] [grup]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: «-s» i «-r» són incompatibles\n"
+
+msgid "invalid group file entry"
+msgstr "l'entrada del fitxer de grup no és vàlida"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "voleu eliminar la línia «%s»? "
+
+msgid "duplicate group entry"
+msgstr "l'entrada de grup està duplicada"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "el nom de grup «%s» no és vàlid\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "el nom de grup «%s» no és vàlid\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grup %s: no existeix l'usuari %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "voleu eliminar el membre «%s»? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "no hi ha cap entrada coincident al fitxer de grup en %s\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "voleu afegir el grup «%s» a %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "l'entrada del fitxer de grup ombra no és vàlida"
+
+msgid "duplicate shadow group entry"
+msgstr "l'entrada de grup ombra està duplicada"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grup ombra %s: no existeix l'usuari administratiu %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "voleu eliminar el membre administratiu «%s»? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grup ombra %s: no existeix l'usuari %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: el fitxer s'ha actualitzat\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: no hi ha canvis\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Forma d'ús: groupdel grup\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Forma d'ús: groupdel grup\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: no es pot actualitzar el fitxer %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Forma d'ús: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Forma d'ús: id\n"
+
+msgid " groups="
+msgstr " grups="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Forma d'ús: lastlog [opcions]\n"
+"\n"
+"Opcions:\n"
+"  -b, --before DIES             mostra només els registres de lastlog més\n"
+"                                antics que DIES\n"
+"  -h, --help                    mostra aquest missatge d'ajuda i acaba\n"
+"  -t, --time DIES               mostra només els registres de lastlog més\n"
+"                                recents que DIES\n"
+"  -u, --user USUARI             mostra el registre de lastlog per a\n"
+"                                l'usuari amb USUARI especific\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Usuari           Port     Des de           Últim"
+
+msgid "Username                Port     Latest"
+msgstr "Usuari                  Port     Últim"
+
+msgid "**Never logged in**"
+msgstr "**No ha entrat mai**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: argument inesperat: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Forma d'ús: %s [-p] [nom]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h ordinador] [-f nom]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r ordinador\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "El temps d'accés no és vàlid"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistema tancat per a manteniment rutinari"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[S'ha evitat la desconnexió -- l'accés de root està permès]."
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"L'accés ha caducat després de %d segons.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"No hi ha entrada utmp. Heu d'executar «login» des del «sh» de nivell més baix"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: fallada de PAM, s'està avortant: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s usuari: "
+
+msgid "login: "
+msgstr "usuari: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "S'ha excedit el nombre màxim d'intents (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: avortat a petició del PAM\n"
+
+msgid "Login incorrect"
+msgstr "Accés incorrecte"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s usuari: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fallada al fer fork: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Avís: accés reactivat després d'un bloqueig temporal."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Últim accés: %s a %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Última accés: %.19s a %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " des de %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"temps d'accés excedit\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Forma d'ús: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Forma d'ús: newgrp [-] [grup]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Forma d'ús: sg grup [[-c] ordre]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Contrasenya antiga: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fallada al fer fork: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: l'usuari %s no existeix\n"
+
+msgid "too many groups\n"
+msgstr "hi ha massa grups\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: el grup %s no existeix\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: el nom d'usuari «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: el nom d'usuari «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: línia %d: la línia no és vàlida\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: no es pot actualitzar l'entrada per a l'usuari %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: línia %d: no es pot crear el GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: línia %d: no es pot crear el GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: l'usuari %s no existeix\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: línia %d: no es pot actualitzar la contrasenya\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: línia %d: no s'ha pogut crear el directori\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: línia %d: no s'ha pogut canviar el propietari\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: línia %d: no es pot actualitzar l'entrada\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: passwd [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -a, --all                     report password status on all accounts\n"
+#| "  -d, --delete                  delete the password for the named "
+#| "account\n"
+#| "  -e, --expire                  force expire the password for the named "
+#| "account\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -k, --keep-tokens             change password only if expired\n"
+#| "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --lock                    lock the named account\n"
+#| "  -n, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -q, --quiet                   quiet mode\n"
+#| "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+#| "  -S, --status                  report password status on the named "
+#| "account\n"
+#| "  -u, --unlock                  unlock the named account\n"
+#| "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "  -x, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Forma d'ús: passwd [opcions] [USUARI]\n"
+"\n"
+"Opcions:\n"
+"  -a, --all                     informa de l'estat de la contrasenya\n"
+"                                per a tots els comptes\n"
+"  -d, --delete                  esborra la contrasenya per al compte\n"
+"                                anomenat\n"
+"  -e, --expire                  força la caducitat de la contrasenya per\n"
+"                                al compte anomenat\n"
+"  -h, --help                    mostra aquest missatge d'ajuda i acaba\n"
+"  -k, --keep-tokens             canvia la contrasenya només si ha caducat\n"
+"  -i, --inactive INACTIU        estableix la contrasenya a inactiva després\n"
+"                                d'INACTIU dies de caducitat\n"
+"  -l, --lock                    bloca el compte anomenat\n"
+"  -n, --mindays DIES_MÍN        estableix els dies mínims abans del canvi\n"
+"                                de contrasenya a DIES_MÍN\n"
+"  -q, --quiet                   mode silenciós\n"
+"  -r, --repository REPOSITORI   canvia la contrasenya en el REPOSITORI\n"
+"  -S, --status                  informa de l'estat de la contrasenya per\n"
+"                                al compte anomenat\n"
+"  -u, --unlock                  desbloca el compte anomenat\n"
+"  -w, --warndays DIES_AVÍS      estableix els dies d'avís de caducitat\n"
+"                                a DIES_AVÍS\n"
+"  -x, --maxdays DIES_MÀX        estableix els dies màxims abans del canvi\n"
+"                                de contrasenya a DIES_MÀX\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Contrasenya antiga: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduïu la nova contrasenya (un mínim de %d i un màxim de %d caràcters)\n"
+"Si us plau feu servir una combinació de lletres majúscules i minúscules i\n"
+"números.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduïu la nova contrasenya (un mínim de %d i un màxim de %d caràcters)\n"
+"Si us plau feu servir una combinació de lletres majúscules i minúscules i\n"
+"números.\n"
+
+msgid "New password: "
+msgstr "Contrasenya nova:"
+
+msgid "Try again."
+msgstr "Intenteu-ho de nou."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Avís: contrasenya feble (introduïu-la de nou per fer-la servir igualment)."
+
+msgid "They don't match; try again.\n"
+msgstr "No coincideixen; intenteu-ho de nou.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "No es pot canviar la contrasenya per a %s.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "No es pot canviar la contrasenya per a %s.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: el repositori %s no està suportat\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: No podeu veure o canviar la informació de contrasenya per a %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "S'està canviant la contrasenya per a %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "No s'ha canviat la contrasenya per a %s.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "S'ha canviat la contrasenya."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Avís de caducitat de la contrasenya"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Forma d'ús: %s [-q] [-r] [-s] [contrasenya [ombra]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: «-s» i «-r» són incompatibles\n"
+
+msgid "invalid password file entry"
+msgstr "l'entrada del fitxer de contrasenyes no és vàlida"
+
+msgid "duplicate password entry"
+msgstr "l'entrada de contrasenya està duplicada"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "el nom d'usuari «%s» no és vàlid\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "el nom d'usuari «%s» no és vàlid\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "usuari %s: no existeix el grup %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "usuari %s: el directori %s no existeix\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "usuari %s: el programa %s no existeix\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "cap entrada coincideix al fitxer de contrasenyes en %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "voleu afegir l'usuari «%s» a %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "l'entrada del fitxer de contrasenyes ombra no és vàlida"
+
+msgid "duplicate shadow password entry"
+msgstr "entrada de contrasenya ombra duplicada"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "usuari %s: l'últim canvi de contrasenya s'ha produït en el futur\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: no es pot obrir el fitxer %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Forma d'ús: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Forma d'ús: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "L'accés de «su» a aquest compte està DENEGAT.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "S'ha evitat l'autenticació de contrasenya.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Si us plau introduïu la VOSTRA contrasenya com a autenticació.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Forma d'ús: su [opcions] [USUARI]\n"
+"\n"
+"Opcions:\n"
+"  -c, --command ORDRE           passa l'ORDRE a l'intèrpret d'ordres\n"
+"                                invocat\n"
+"  -h, --help                    mostra aquest missatge d'ajuda i acaba\n"
+"  -, -l, --login                fes de l'intèrpret d'ordres un d'accés\n"
+"  -m, -p,\n"
+"  --preserve-environment        no reinicialitza les variables d'entorn,\n"
+"                                i manté el mateix intèrpret d'ordres\n"
+"  -s, --shell INTÈRPRET         fa servir INTÈRPRET en comptes del\n"
+"                                predeterminat a passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: s'ha d'executar des d'una terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: s'ha produït un error %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "L'id és desconegut: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "No esteu autoritzats a usar «su %s»\n"
+
+msgid "(Enter your own password)"
+msgstr "(Introduïu la vostra pròpia contrasenya)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorat)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: l'autenticació PAM ha fallat\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "No esteu autoritzats a usar «su %s»\n"
+
+msgid "No shell\n"
+msgstr "No hi ha intèrpret d'ordres\n"
+
+msgid "No password file"
+msgstr "No hi ha fitxer de contrasenyes"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "No hi ha entrada de contrasenya per a «root»"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Pitgeu «control-d» per a continuar amb l'inici normal de sistema,\n"
+"(o introduïu la contrasenya de «root» per a manteniment del sistema):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "S'està entrant en mode de manteniment del sistema"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: no es pot crear un fitxer nou de preferències predeterminades\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: no es pot obrir un fitxer nou de preferències predeterminades\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: línia %d: no s'ha pogut canviar el propietari\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: renomena: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: el grup «%s» és un grup NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: s'han especificat massa grups (màx de %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Forma d'ús: %s [entrada]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: el directori base «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: el comentari «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: el directori personal «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: les contrasenyes ombra són requerides per a «-e»\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: les contrasenyes ombra són requerides per a «-f»\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: el camp «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: l'intèrpret «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: no es pot crear el directori %s\n"
+
+msgid "Creating mailbox file"
+msgstr "S'està creant la bústia de correu"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"No s'ha trobat el grup «mail». S'està creant la bústia de correu de "
+"l'usuariamb mode 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "S'estan establint els permisos de la bústia de correu"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: l'usuari %s existeix\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: el grup %s existeix, si voleu afegir aquest usuari a aquest grup, useu «-"
+"g».\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: no es pot crear %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: el UID %u no és únic\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: no es pot crear %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: avís: el directori personal ja existeix.\n"
+"No s'hi copiarà cap fitxer del directori skel.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Forma d'ús: userdel [opcions] USUARI\n"
+"\n"
+"Opcions:\n"
+"  -f, --force                   força l'eliminació de fitxers, encara que\n"
+"                                no siguin propietat de l'usuari\n"
+"  -h, --help                    mostra aquesta ajuda i acaba\n"
+"  -r, --remove                  elimina el directori personal i la cua\n"
+"                                de correu\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: no es pot eliminar el grup %s, que és el grup primari per un altre "
+"usuari.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: avís: no es pot eliminar "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s no és propietat de %s, no s'elimina\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: l'usuari %s és un usuari NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: l'usuari %s està actualment dins el sistema\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: el directori personal «%s» no és vàlid\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: no s'elimina el directori %s (eliminaria el directori personal de "
+"l'usuari %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: s'ha produït un error en eliminar el directori %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Forma d'ús: usermod [opcions] USUARI\n"
+"\n"
+"Opcions:\n"
+"  -a, --append                  afegeix l'usuari als GRUPS addicionals\n"
+"                                (usar només amb -G)\n"
+"  -c, --comment COMENTARI       nou valor per al camp GECOS\n"
+"  -d, --home DIR_PERSONAL       nou directori personal per al nou compte\n"
+"                                d'usuari\n"
+"  -e, --expiredate DATA_CADUCIT estableix la data de caducitat del compte\n"
+"                                a DATA_CADUCITAT\n"
+"  -f, --inactive INACTIU        estableix la contrasenya a inactiva després\n"
+"                                d'INACTIU dies de caducitat\n"
+"  -g, --gid GRUP                força l'ús de GRUP com a nou grup inicial\n"
+"                                d'accés\n"
+"  -G, --groups GRUPS            llista de GRUPS addicionals\n"
+"  -h, --help                    mostra aquest missatge d'ajuda i surt\n"
+"  -l, --login USUARI            nou valor per al nom d'usuari\n"
+"  -L, --lock                    bloca el compte d'usuari\n"
+"  -m, --move-home               mou els continguts del directori personal\n"
+"                                a la nova ubicació (usar només amb -d)\n"
+"  -o, --non-unique              permet usar UID duplicats (no únics)\n"
+"  -p, --password CONTRASENYA    usa contrasenya xifrada per a la nova\n"
+"                                contrasenya\n"
+"  -s, --shell INTÈRPRET         nou intèrpret d'accés per al compte "
+"d'usuari\n"
+"  -u, --uid UID                 nou UID per al compte d'usuari\n"
+"  -U, --unlock                  desbloca el compte d'usuari\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: l'usuari %s existeix\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: no s'han especificat senyaladors\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: les contrasenyes ombra són requerides per a «-e» i «-f»\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "El membre ja existeix\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: el directori %s ja existeix\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: no es pot crear %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: no es pot fer canviar el propietari a %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: avís: no s'ha pogut eliminar completament l'antic directori personal %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: no es pot reanomenar el directori %s a %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: avís: %s no és propietat de %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "no s'ha pogut canviar el propietari de la bústia de correu"
+
+msgid "failed to rename mailbox"
+msgstr "no s'ha pogut reanomenar la bústia de correu"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Forma d'ús: vipw [opcions]\n"
+"\n"
+"Opcions:\n"
+"  -g, --group                   edita la base de dades de grup\n"
+"  -h, --help                    mostra aquest missatge d'ajuda i acaba\n"
+"  -p, --passwd                  edita la base de dades de passwd\n"
+"  -q, --quiet                   mode silenciós\n"
+"  -s, --shadow                  edita la base de dades de shadow o gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: ha fallat el despreniment de privilegis (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: no s'ha canviat %s\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "No s'ha pogut blocar el fitxer"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "No s'ha pogut blocar el fitxer"
+
+msgid "Couldn't make backup"
+msgstr "No s'ha pogut fer una còpia de seguretat"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: no es pot restaurar %s: %s (els seus canvis estan a %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: faillog [opcions]\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ "  -a, --all                     mostra els registres de faillog de tots "
+#~ "els\n"
+#~ "                                usuaris\n"
+#~ "  -h, --help                    mostra aquest missatge d'ajuda i acaba\n"
+#~ "  -l, --lock-time SEG           bloca durant SEG segons després d'una\n"
+#~ "                                fallada d'accés\n"
+#~ "  -m, --maximum MÀX             especifica els comptadors màxims de\n"
+#~ "                                fallades d'accés a MÀX\n"
+#~ "  -r, --reset                   reinicialitza els comptadors de fallades\n"
+#~ "                                d'accés\n"
+#~ "  -t, --time DIES               mostra registres de faillog més recents "
+#~ "que\n"
+#~ "                                DIES\n"
+#~ "  -u, --user USUARI             mostra registre de faillog o manté\n"
+#~ "                                comptadors de fallades i límits (si es "
+#~ "fa\n"
+#~ "                                servir amb les opcions -r, -m o -l) "
+#~ "només\n"
+#~ "                                per a l'usuari amb USUARI\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: groupadd [opcions] GRUP\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ "  -f, --force                   força la sortida amb un estat d'èxit si "
+#~ "el\n"
+#~ "                                grup especificat ja existeix\n"
+#~ "  -g, --gid GID                 usa GID per al nou grup\n"
+#~ "  -h, --help                    mostra aquest missatge d'ajuda i acaba\n"
+#~ "  -K, --key CLAU=VALOR          substitueix els valors predeterminats de\n"
+#~ "                                /etc/login.defs\n"
+#~ "  -o, --non-unique              permet crear grups amb GID duplicats\n"
+#~ "                                (no únics)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: groupmod [opcions] GRUP\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ "  -g, --gid GID                 força l'ús del nou GID per a GRUP\n"
+#~ "  -h, --help                    mostra aquest missatge d'ajuda i acaba\n"
+#~ "  -n, --new-name NOU_GRUP       força l'ús del nom NOU_GRUP per a GRUP\n"
+#~ "  -o, --non-unique              permet usar GID duplicats (no únics) per\n"
+#~ "                                a GRUP\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Forma d'ús: useradd [opcions] USUARI\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ "  -b, --base-dir DIR_BASE          directori base per al directori "
+#~ "personal\n"
+#~ "                                   del nou compte d'usuari\n"
+#~ "  -c, --comment COMENTARI          estableix el camp GECOS per al nou\n"
+#~ "                                   compte d'usuari\n"
+#~ "  -d, --home-dir DIR_PERSONAL      directori personal per al nou compte\n"
+#~ "  -D, --defaults                   mostra o guarda les modificacions a "
+#~ "les\n"
+#~ "                                   d'usuari configuracions "
+#~ "predeterminades\n"
+#~ "                                   de useradd\n"
+#~ "  -e, --expiredate DATA_CADUCITAT  estableix la data de caducitat del\n"
+#~ "                                   compte a DATA_CADUCITAT\n"
+#~ "  -f, --inactive INACTIU           estableix la contrasenya a inactiva\n"
+#~ "                                   després\n"
+#~ "                                   d'INACTIU dies de caducitat\n"
+#~ "  -g, --gid GRUP                   força l'ús del GRUP per al nou compte\n"
+#~ "                                   creat\n"
+#~ "  -G, --groups GRUPS               llista de grups suplementaris per al "
+#~ "nou\n"
+#~ "                                   compte d'usuari\n"
+#~ "  -h, --help                       mostra aquest missatge d'ajuda i "
+#~ "acaba\n"
+#~ "  -k, --skel DIR_SKEL              especifica un directori skel "
+#~ "alternatiu\n"
+#~ "  -K, --key CLAU=VALOR             substitueix els valors predeterminats "
+#~ "de\n"
+#~ "                                   /etc/login.defs\n"
+#~ "  -m, --create-home                crea el directori personal per al nou\n"
+#~ "                                   compte d'usuari\n"
+#~ "  -o, --non-unique                 permet crear usuaris amb UID "
+#~ "duplicats\n"
+#~ "                                   (no únics)\n"
+#~ "  -p, --password CONTRASENYA       usa contrasenya xifrada per al nou\n"
+#~ "                                   compte d'usuari\n"
+#~ "  -s, --shell INTÈRPRET            l'intèrpret d'accés per al nou compte\n"
+#~ "                                   d'usuari\n"
+#~ "  -u, --uid UID                    força l'ús de UID per al nou compte\n"
+#~ "                                   d'usuari\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "S'ha establert la contrasenya a caducada."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: no es pot actualitzar el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: no es pot actualitzar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNom complet: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNúmero d'habitació: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelèfon de la feina: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelèfon de casa: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr ""
+#~ "No s'ha pogut blocar el fitxer de contrasenyes; intenteu-ho més tard\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "No s'ha pogut obrir el fitxer de contrasenyes.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: no s'ha trobat %s a «/etc/passwd»\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Error en actualitzar l'entrada de la contrasenya.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "No es poden confirmar els canvis del fitxer de contrasenyes.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "No s'ha pogut desblocar el fitxer de contrasenyes.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de grups\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de grups\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: no s'ha pogut blocar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: no s'ha pogut obrir el fitxer de contrasenyes ombra\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en actualitzar el fitxer de contrasenyes ombra\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: s'ha produït un error en actualitzar l'entrada de grup\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: línia %d: el grup %s és desconegut\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: línia %d: no es pot actualitzar l'entrada\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: no s'ha pogut blocar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en actualitzar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en actualitzar el fitxer de contrasenyes\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: línia %d: l'usuari %s és desconegut\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr ""
+#~ "%s: línia %d: no s'ha pogut actualitzar l'entrada de la contrasenya\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: l'usuari és desconegut\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "L'usuari és desconegut: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Forma d'ús: %s [-r|-R] grup\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a usuari] grup\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d usuari] grup\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A usuari,...] [-M usuari,...] grup\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M usuari,...] grup\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: no es pot obtenir el bloqueig\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr ""
+#~ "%s: no es pot obtenir el bloqueig del fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: no es pot obrir el fitxer\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer ombra\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: no es pot desblocar el fitxer\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: no es pot actualitzar l'entrada\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr ""
+#~ "%s: no es pot actualitzar l'entrada del fitxer de contrasenyes ombra\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "El grup és desconegut: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: no es pot obrir el fitxer\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: no s'ha pogut obrir el fitxer de contrasenyes ombra\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Qui sou?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: El membre %s és desconegut\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: s'ha produït un error en afegir la nova entrada de grup\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de grup\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de grups ombra\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de grup\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de grup\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de grup ombra\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de grup ombra\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: el GID %u no és únic\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: s'ha produït un error en eliminar l'entrada de grup\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: s'ha produït un error en eliminar l'entrada de grup ombra\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: no es pot eliminar el grup primari de l'usuari.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "No s'han trobat els membres a borrar\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr "Forma d'ús: groupmems -a úsuari | -d úsuari | -D | -l [-g grup]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Només el superusuari pot afegir members a grups diferents\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "És requereix accés de grup\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "No és propietari principal del grup actual\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "l'autenticació PAM ha fallat per\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "No es pot blocar el fitxer de grup\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "No es pot obrir el fitxer de grup\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "No es pot obrir el fitxer de grup\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: no s'ha trobat %s a «/etc/group»\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u no és un GID únic\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s no és un nom únic\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de contrasenyes\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de contrasenyes\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: no es pot d'obrir el fitxer de contrasenyes\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: no es pot blocar el fitxer %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: no es pot actualitzar l'entrada ombra per a %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: no es pot actualitzar l'entrada per al grup %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de grups ombra\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de grups ombra\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: no es pot eliminar el grup ombra %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: no es pot actualitzar el fitxer de grups ombra\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: no es pot actualitzar el fitxer de grups\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: no es pot eliminar el fitxer de grups ombra\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "El UID és desconegut: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "El GID és desconegut: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: el grup %s no existeix\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: l'usuari %s no existeix\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: el nom d'usuari «%s» no és vàlid\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: no es pot blocar «/etc/passwd».\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: no es pot blocar «/etc/passwd».\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: no es pot blocar «/etc/passwd».\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: no es pot blocar «/etc/passwd».\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: no es poden obrir els fitxers\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: s'ha produït un error en actualitzar el fitxer\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: línia %d: no es pot trobar l'usuari %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: no es pot actualitzar l'entrada de la contrasenya per a %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: no es pot eliminar l'entrada ombra per a %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: no es pot actualitzar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: no es pot actualitzar el fitxer de contrasenyes\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: no es pot actualitzar l'entrada per a l'usuari %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: no es pot eliminar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: el GID %s és desconegut\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: el grup %s és desconegut\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: sense memòria a update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de contrasenyes\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: no es pot reescriure el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: no es pot blocar el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de contrasenyes ombra\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: s'ha produït un error en blocar el fitxer de grups\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: s'ha produït un error en obrir el fitxer de grups\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: s'ha produït un error en blocar el fitxer de grups ombra\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: s'ha produït un error en obrir el fitxer de grups ombra\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en afegir la nova entrada de contrasenya\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en afegir la nova entrada de contrasenya ombra\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: avís: CREATE_HOME no està suportat, si us plau useu «-m» en el seu "
+#~ "lloc.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: s'ha produït un error en actualitzar l'entrada de grup\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: s'ha produït un error en actualitzar l'entrada de grup\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de grups\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: no es pot obrir el fitxer de grups ombra\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: s'ha produït un error en eliminar l'entrada de contrasenya\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en eliminar l'entrada de contrasenya ombra\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: l'usuari %s no existeix\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: s'ha produït un error en afegir la nova entrada de grup\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: l'UID %lu no és únic\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: s'ha produït un error en canviar l'entrada de contrasenya\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: s'ha produït un error en eliminar l'entrada de contrasenya\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr ""
+#~ "%s: s'ha produït un error en eliminar l'entrada de contrasenya ombra\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: no es pot obtenir un GID únic\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " a «%.100s» des de «%.200s»"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " a «%.100s»"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: línia %d: no es pot crear el UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: el nom %s no és únic\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Forma d'ús: chpasswd [opcions]\n"
+#~ "\n"
+#~ "Opcions:\n"
+#~ "  -e, --encrypted\tles contrasenyes proveïdes estan xifrades\n"
+#~ "  -h, --help\t\tmostra aquest missatge d'ajuda i acaba\n"
+#~ "  -m, --md5\t\tusa xifrat MD5 en comptes de DES quan les contrasenyes\n"
+#~ "\t\t\tproveïdes no estan xifrades\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "No hi ha fitxer de contrasenyes\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Disculpeu.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Disculpeu, la contrasenya per a %s encara no es pot canviar.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Disculpeu."
diff --git a/po/cs.gmo b/po/cs.gmo
new file mode 100644 (file)
index 0000000..4526a83
Binary files /dev/null and b/po/cs.gmo differ
diff --git a/po/cs.po b/po/cs.po
new file mode 100644 (file)
index 0000000..6a284da
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,2760 @@
+# Czech translation of shadow-utils.
+# Jiří Pavlovský <pavlovsk@ff.cuni.cz>, 1999-2000
+# Miroslav Kuře <kurem@debian.cz>, 2004-2009
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2009-04-26 12:18+0200\n"
+"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
+"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Zjištěno několik záznamů pojmenovaných „%s“ v souboru %s. Napravte to prosím "
+"pomocí pwck nebo grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "typ šifry není knihovnou libcrypt podporován? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Nemohu alokovat dostatek místa pro konfigurační údaje.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"konfigurační chyba - neznámá položka „%s“ (informujte správce systému)\n"
+
+msgid "Password: "
+msgstr "Heslo: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Heslo uživatele %s:"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Varování: neznámá skupina %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Varování: příliš mnoho skupin\n"
+
+msgid "Your password has expired."
+msgstr "Platnost vašeho hesla vypršela."
+
+msgid "Your password is inactive."
+msgstr "Vaše heslo je vypnuto."
+
+msgid "Your login has expired."
+msgstr "Platnost vašeho účtu vypršela."
+
+msgid "  Contact the system administrator."
+msgstr "  Kontaktujte správce systému."
+
+msgid "  Choose a new password."
+msgstr "  Zvolte nové heslo."
+
+msgid "You must change your password."
+msgstr "Musíte si změnit heslo."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Platnost vašeho hesla vyprší za %ld dnů.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Platnost vašeho hesla vyprší zítra."
+
+msgid "Your password will expire today."
+msgstr "Platnost vašeho hesla vyprší dnes."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Nelze otevřít auditní rozhraní - končím.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Nelze změnit vlastníka nebo oprávnění k tty stdin: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: nepodařilo se odemknout %s\n"
+
+msgid "Environment overflow\n"
+msgstr "Přetečení prostředí\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Nemůžete změnit $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d selhání od posledního přihlášení.\n"
+"Poslední: %s na %s.\n"
+msgstr[1] ""
+"%d selhání od posledního přihlášení.\n"
+"Poslední: %s na %s.\n"
+msgstr[2] ""
+"%d selhání od posledního přihlášení.\n"
+"Poslední: %s na %s.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: Nelze získat jedinečné UID (volná UID neexistují)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Nelze získat jedinečné GID (volná GID neexistují)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: Nelze získat jedinečné UID (volná UID neexistují)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: Nelze získat jedinečné UID (volná UID neexistují)\n"
+
+msgid "Too many logins.\n"
+msgstr "Příliš mnoho přihlášení.\n"
+
+msgid "You have new mail."
+msgstr "Máte novou poštu."
+
+msgid "No mail."
+msgstr "Nemáte žádnou poštu."
+
+msgid "You have mail."
+msgstr "Máte poštu."
+
+msgid "no change"
+msgstr "beze změny"
+
+msgid "a palindrome"
+msgstr "palindrom"
+
+msgid "case changes only"
+msgstr "pouze změna velikosti písmen"
+
+msgid "too similar"
+msgstr "příliš podobné"
+
+msgid "too simple"
+msgstr "příliš jednoduché"
+
+msgid "rotated"
+msgstr "rotované"
+
+msgid "too short"
+msgstr "příliš krátké"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Chybné heslo: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: volání pam_start() selhalo, chyba %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: heslo nebylo změněno\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: heslo bylo úspěšně změněno\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Chybné heslo pro %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Neplatná hodnota ENCRYPT_METHOD: „%s“.\n"
+"Používám DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Nelze přejít do „%s“\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Žádný adresář, nastavuji HOME na /"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s nelze spustit"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Chybný kořenový adresář „%s“\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Nelze změnit kořenový adresář na „%s“\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Nelze zjistit vaše uživatelské jméno."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: došla paměť\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "volání malloc(%d) selhalo\n"
+
+msgid "No"
+msgstr "Ne"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Použití: chage [volby] ÚČET\n"
+"\n"
+"Volby:\n"
+"  -d, --lastday POSL_DEN        nastaví datum poslední změny hesla na "
+"POSL_DEN\n"
+"  -E, --expiredate EXP_DATUM    nastaví datum vypršení účtu na EXP_DATUM\n"
+"  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+"  -I, --inactive NEAKTIV        zablokuje účet po NEAKTIV dnech od vypršení\n"
+"                                platnosti hesla\n"
+"  -l, --list                    zobrazí informace o účtu\n"
+"  -m, --mindays MIN_DNŮ         nastaví minimální počet dnů před změnou\n"
+"                                hesla na MIN_DNŮ\n"
+"  -M, --maxdays MAX_DNŮ         nastaví maximální počet dnů před změnou\n"
+"                                hesla na MAX_DNŮ\n"
+"  -W, --warndays VAR_DNŮ        nastaví varování o expiraci na VAR_DNŮ\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"Zadejte novou hodnotu, nebo stiskněte ENTER pro použití implicitní hodnoty"
+
+msgid "Minimum Password Age"
+msgstr "Minimální stáří hesla"
+
+msgid "Maximum Password Age"
+msgstr "Maximální stáří hesla"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Poslední změna hesla (RRRR-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Varování o vypršení platnosti hesla"
+
+msgid "Password Inactive"
+msgstr "Vypnuté heslo"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Vypršení platnosti účtu (RRRR-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Poslední změna hesla\t\t\t\t\t: "
+
+msgid "never"
+msgstr "nikdy"
+
+msgid "password must be changed"
+msgstr "heslo musí být změněno"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Platnost hesla vyprší\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Vypnuté heslo\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Platnost účtu vyprší\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimální počet dnů mezi změnami hesla\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maximální počet dnů mezi změnami hesla\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Počet varovných dnů před vypršením platnosti hesla\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: chybné datum „%s“\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: chybný numerický argument „%s“\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: nepoužívejte „l“ s ostatními příznaky\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Přístup odmítnut.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: vaše uživatelské jméno nelze zjistit.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: ověření pomocí PAM selhalo\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: nelze zamknout %s, zkuste to opět později.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: nelze otevřít %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: chyba při zápisu změn do %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: selhala příprava nového %s záznamu „%s“\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: soubor se stínovými hesly není přítomen\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: selhalo odevzdání privilegií (%s)\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: uživatel „%s“ v %s neexistuje\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Měním informace o uživateli %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: chyba při změně položek\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Použití: %s [-f jméno] [-r číslo místnosti] [-w telefon do zaměstnání]\n"
+"\t[-h telefon domů] [-o ostatní] [uživatel]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Použití: %s [-f jméno] [-r číslo místnosti] [-w telefon do zaměstnání]\n"
+"\t[-h telefon domů]\n"
+
+msgid "Full Name"
+msgstr "Celé jméno"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Číslo místnosti"
+
+msgid "Work Phone"
+msgstr "Telefon do zaměstnání"
+
+msgid "Home Phone"
+msgstr "Telefon domů"
+
+msgid "Other"
+msgstr "Ostatní"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Nelze změnit ID na root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: jméno obsahuje jiné znaky než ASCII: „%s“\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: chybné jméno: „%s“\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: číslo místnosti obsahuje jiné znaky než ASCII: „%s“\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: chybné číslo místnosti: „%s“\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: chybné telefonní číslo do zaměstnání: „%s“\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: chybné telefonní číslo domů: „%s“\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: „%s“ obsahuje jiné znaky než ASCII\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: „%s“ obsahuje chybné znaky\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: uživatel „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: uživatele „%s“ nelze na NIS klientu změnit.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: „%s“ je hlavním NIS serverem pro tohoto klienta.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Měním informace o uživateli %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: položka je příliš dlouhá\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Použití: %s [volby]\n"
+"\n"
+"Volby:\n"
+"  -c, --crypt-method            typ šifry (jeden z %s)\n"
+"  -e, --encrypted               zadaná hesla jsou zašifrovaná\n"
+"  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+"  -m, --md5                     zašifruje nešifrované heslo\n"
+"                                algoritmem MD5\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr "  -s, --sha-rounds              počet SHA iterací algoritmu SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: přepínač %s je povolen pouze s přepínačem %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: přepínače -c, -e a -m se navzájem vylučují\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: nepodporovaný typ šifry: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: řádek %d je příliš dlouhý\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: řádek %d: chybí nové heslo\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: řádek %d: skupina „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: řádek %d: selhala příprava nového %s záznamu „%s“\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: chyba, změny budou ignorovány\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Použití: %s [vstup]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr "  -s, --sha-rounds              počet SHA iterací algoritmu SHA*\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: user '%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: řádek %d: uživatel „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: řádek %d: uživatel „%s“ neexistuje\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Použití: chsh [volby] [ÚČET]\n"
+"\n"
+"Volby:\n"
+"  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+"  -s, --shell SHELL             nový přihlašovací shell uživatele\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Přihlašovací shell"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Nemůžete změnit shell pro „%s“.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Měním přihlašovací shell pro %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: chybná položka %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s: %s není platný shell.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Použití: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to get the entry for UID %d\n"
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr "faillog: Nepodařilo se získat záznam pro UID %d\n"
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Uživatel    Chyb     Maximum Poslední                 Na\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus zbývá]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds zámek]"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to reset fail count for UID %d\n"
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+"faillog: nepodařilo se vynulovat počet chybných přihlášení pro UID %d\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set max for UID %d\n"
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr "faillog: nepodařilo se nastavit maximum pro UID %d\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set locktime for UID %d\n"
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr "faillog: nepodařilo se nastavit čas zablokování pro UID %d\n"
+
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "lastlog: Neznámý uživatel nebo rozsah: %s\n"
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "faillog: Nelze otevřít %s: %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr "faillog: Nelze zjistit velikost %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+"Použití: %s [volby] SKUPINA\n"
+"\n"
+"Volby:\n"
+"  -a, --add UŽIVATEL            přidá UŽIVATELE do SKUPINY\n"
+"  -d, --delete UŽIVATEL         odstraní UŽIVATELE ze SKUPINY\n"
+"  -r, --remove-password         odstraní heslo SKUPINY\n"
+"  -R, --restrict                povolí přístup ke SKUPINĚ jen členům\n"
+"  -M, --members UŽIVATEL,...    nastaví seznam členů SKUPINY\n"
+"%s\n"
+"\n"
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"  -A, --administrators SPRÁVCE,...\n"
+"                                nastaví seznam správců SKUPINY\n"
+"Kromě voleb -A a -M není možné volby kombinovat.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Volby se nedají kombinovat.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: přepínač -A funguje pouze se stínovými hesly skupin\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: skupina „%s“ v %s neexistuje\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: chyba při zavírání databáze %s otevřené jen pro čtení\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Měním heslo skupiny %s\n"
+
+msgid "New Password: "
+msgstr "Nové heslo: "
+
+msgid "Re-enter new password: "
+msgstr "Zadejte opět nové heslo: "
+
+msgid "They don't match; try again"
+msgstr "Neshodují se; zkuste to znovu"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Zkuste to později\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Přidávám uživatele %s do skupiny %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Odstraňuji uživatele %s ze skupiny %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: uživatel „%s“ není členem „%s“\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Nejedná se o tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Použití: %s [vstup]\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr "  -s, --sha-rounds              počet SHA iterací algoritmu SHA*\n"
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr "  -s, --sha-rounds              počet SHA iterací algoritmu SHA*\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: „%s“ není platným jménem skupiny\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: neplatné ID skupiny „%s“\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: parametr -K vyžaduje argument typu KLÍČ=HODNOTA\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: skupina „%s“ již existuje\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID „%lu“ již existuje\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Použití: groupdel skupina\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: nelze odstranit záznam „%s“ z %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: nelze odstranit primární skupinu uživatele „%s“.\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: skupina „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: skupina „%s“ je NIS skupinou\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s je hlavním NIS serverem\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: uživatel „%s“ je již členem „%s“\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Nedostatek paměti. Nelze aktualizovat %s.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+"Použití: groupmems [volby] [akce]\n"
+"\n"
+"Volby:\n"
+"  -g, --group skupina           místo uživatelovy skupiny změní zadanou\n"
+"                                skupinu (pouze root)\n"
+"\n"
+"Akce:\n"
+"  -a, --add uživatel            přidá uživatele mezi členy skupiny\n"
+"  -d, --delete uživatel         odebere uživateli členství ve skupině\n"
+"  -p, --purge                   ze skupiny odstraní všechny uživatele\n"
+"  -l, --list                    vypíše členy skupiny\n"
+"\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: vaše skupina neodpovídá vašemu uživatelskému jménu\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: volbu -g/--group může používat pouze root\n"
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: neplatné jméno skupiny „%s“\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: skupina %s je NIS skupinou\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: neznámý uživatel %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr ""
+"Použití: %s [-r] [-s] [soubor se skupinami [soubor se stínovými skupinami]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Použití: %s [-r] [-s] [soubor se skupinami]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s a -r nejsou slučitelné\n"
+
+msgid "invalid group file entry"
+msgstr "chybná položka v souboru se skupinami"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "smazat řádek „%s“?"
+
+msgid "duplicate group entry"
+msgstr "tato položka se v souboru se skupinami vyskytuje vícekrát"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "jméno skupiny „%s“ je chybné\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ID skupiny „%lu“ je chybné\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "skupina %s: uživatel %s neexistuje\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "smazat člena „%s“? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "žádný záznam v souboru se skupinami %s neodpovídá\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "přidat skupinu „%s“ do %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "chybná položka v souboru se stínovými skupinami"
+
+msgid "duplicate shadow group entry"
+msgstr "duplikovaná položka v souboru se stínovými skupinami"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "stínová skupina %s: administrátor %s neexistuje\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "smazat administrátora „%s“? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "stínová skupina %s: uživatel %s neexistuje\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: soubory byly aktualizovány\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: žádné změny nebyly provedeny\n"
+
+msgid "Usage: grpconv\n"
+msgstr "Použití: grpconv\n"
+
+msgid "Usage: grpunconv\n"
+msgstr "Použití: grpunconv\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: nelze smazat %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Použití: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Použití: id\n"
+
+msgid " groups="
+msgstr " skupiny="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Použití: lastlog [volby]\n"
+"\n"
+"Volby:\n"
+"  -b, --before DNŮ              zobrazí záznamy lastlogu starší než DNŮ\n"
+"  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+"  -t, --time DNŮ                zobrazí záznamy lastlogu novější než DNŮ\n"
+"  -u, --user ÚČET               zobrazí záznamy lastlogu pro uživatele ÚČET\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "lastlog: Failed to get the entry for UID %d\n"
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr "lastlog: nepodařilo se získat záznam pro UID %d\n"
+
+msgid "Username         Port     From             Latest"
+msgstr "Uživatel         Port     Z                Naposledy"
+
+msgid "Username                Port     Latest"
+msgstr "Uživatel                Port     Naposledy"
+
+msgid "**Never logged in**"
+msgstr "**Nikdy nebyl přihlášen**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: neočekávaný argument: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr "lastlog: nelze zjistit velikost %s: %s\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Použití: %s [-p] [jméno]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "         %s [-p] [-h počítač] [-f jméno]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "         %s [-p] -r počítač\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Chybný čas přihlášení"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systém byl uzavřen kvůli pravidelné údržbě."
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Odpojení přeskočeno -- uživatel root smí být přihlášen.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Vypršel časový limit (%d vteřin) pro přihlášení.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr "utmp záznam neexistuje. Musíte spustit „login“ z nejnižšího „sh“"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Chyba PAM, končím: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "Přihlašovací jméno na %s: "
+
+msgid "login: "
+msgstr "Přihlašovací jméno: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maximální počet pokusů vypršel (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM vyžádal přerušení\n"
+
+msgid "Login incorrect"
+msgstr "Chybné přihlášení"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"Přihlašovací jméno na %s: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: chyba rozdvojení: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY selhalo na %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Varování: po dočasném zákazu je přihlašování opět povoleno."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Poslední přihlášení: %s na %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Poslední přihlášení: %.19s na %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " z %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"Čas přihlášení vypršel\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Použití: logoutd\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Použití: newgrp [-] [skupina]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Použití: sg skupina [[-c] příkaz]\n"
+
+msgid "Invalid password.\n"
+msgstr "Neplatné heslo.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: chyba rozdvojení: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID „%lu“ neexistuje\n"
+
+msgid "too many groups\n"
+msgstr "příliš mnoho skupin\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: skupina „%s“ je stínovou skupinou, ale neexistuje v /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: chybné uživatelské ID „%s“\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: chybné uživatelské jméno „%s“\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: řádek %d: chybný řádek\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: položku pro uživatele %s nelze aktualizovat (není v passwd databázi)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: řádek %d: nelze vytvořit uživatele\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: řádek %d: nelze vytvořit skupinu\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: řádek %d: uživatel „%s“ v %s neexistuje\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: řádek %d: heslo nelze aktualizovat\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: řádek %d: volání mkdir selhalo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: řádek %d: volání chown selhalo\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: řádek %d: položku nelze aktualizovat\n"
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Použití: passwd [volby] [ÚČET]\n"
+"\n"
+"Volby:\n"
+"  -a, --all                     vypíše stav hesel na všech účtech\n"
+"  -d, --delete                  pro zadaný účet smaže heslo\n"
+"  -e, --expire                  pro zadaný účet vynutí expiraci hesla\n"
+"  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+"  -k, --keep-tokens             změní heslo pouze pokud mu vypršela\n"
+"                                platnost\n"
+"  -i, --inactive NEAKTIV        zablokuje účet po NEAKTIV dnech od\n"
+"                                vypršení platnosti hesla\n"
+"  -l, --lock                    zamkne heslo zadaného účtu\n"
+"  -n, --mindays MIN_DNŮ         nastaví minimální počet dnů před změnou\n"
+"                                hesla na MIN_DNŮ\n"
+"  -q, --quiet                   tichý režim\n"
+"  -r, --repository REPOSITÁŘ    změní heslo v repositáři REPOSITÁŘ\n"
+"  -S, --status                  pro zadaný účet vypíše stav hesla\n"
+"  -u, --unlock                  odemkne heslo zadaného účtu\n"
+"  -w, --warndays VAR_DNŮ        nastaví varování o expiraci na VAR_DNŮ\n"
+"  -x, --maxdays MAX_DNŮ         nastaví maximální počet dnů před změnou\n"
+"                                hesla na MAX_DNŮ\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Staré heslo: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Zadejte nové heslo (minimální délka %d znaků).\n"
+"Použijte kombinaci velkých a malých písmen s číslicemi.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Zadejte nové heslo (počet znaků v intervalu %d až %d).\n"
+"Použijte kombinaci velkých a malých písmen s číslicemi.\n"
+
+msgid "New password: "
+msgstr "Nové heslo: "
+
+msgid "Try again."
+msgstr "Zkuste to znovu."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Varování: slabé heslo (chcete-li jej opravdu použít, zadejte jej znovu)."
+
+msgid "They don't match; try again.\n"
+msgstr "Neshodují se; zkuste to znovu.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Heslo uživatele %s nelze změnit.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Heslo uživatele %s nelze zatím změnit.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s odemknutí hesla by znamenalo mít účet bez hesla.\n"
+"Pro odemknutí hesla tohoto účtu byste měli nastavit heslo pomocí usermod -"
+"p.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: úložna %s není podporována\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr "%s: %s není oprávněn změnit heslo %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Nemůžete prohlížet nebo měnit heslo uživatele %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Měním heslo uživatele %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Heslo uživatele %s nebylo změněno.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Heslo bylo změněno."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Varování o vypršení platnosti hesla"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr ""
+"Použití: %s [-q] [-r] [-s] [soubor s hesly [soubor se stínovými hesly]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s a -r nejsou slučitelné\n"
+
+msgid "invalid password file entry"
+msgstr "chybná položka v souboru s hesly"
+
+msgid "duplicate password entry"
+msgstr "duplikovaná položka v souboru s hesly"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "chybné uživatelské jméno „%s“\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "chybné uživatelské ID „%lu“\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "uživatel „%s“: skupina %lu neexistuje\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "uživatel „%s“: adresář „%s“ neexistuje\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "uživatel „%s“: program „%s“ neexistuje\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "žádný záznam v souboru s hesly %s neodpovídá\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "přidat uživatele „%s“ do %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "chybná položka v souboru se stínovými hesly"
+
+msgid "duplicate shadow password entry"
+msgstr "duplikovaná položka v souboru se stínovými hesly"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "uživatel %s: poslední změna hesla v budoucnosti\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: nelze seřadit záznamy v %s\n"
+
+msgid "Usage: pwconv\n"
+msgstr "Použití: pwconv\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: nepodařilo se změnit oprávnění %s na 0600\n"
+
+msgid "Usage: pwunconv\n"
+msgstr "Použití: pwunconv\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Z tohoto účtu je přístup k su ZAKÁZÁN.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Ověřování heslem vynecháno.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Pro ověření zadejte VAŠE vlastní heslo.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Použití: su [volby] [ÚČET]\n"
+"\n"
+"Volby:\n"
+"  -c, --command PŘÍKAZ          vyvolanému shellu předá PŘÍKAZ\n"
+"  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+"  -, -l, --login                nastaví shell jako přihlašovací\n"
+"  -m, -p,\n"
+"  --preserve-environment        zachová proměnné prostředí a ponechá\n"
+"                                současný shell\n"
+"  -s, --shell SHELL             místo výchozího shellu definovaného\n"
+"                                v passwd použije SHELL\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: musí být spuštěno z terminálu\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: chyba %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Neznámé id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Nejste oprávněn používat su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Zadejte své heslo)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignoruji)\n"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Chyba ověření\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Toto času nejste oprávněni používat su\n"
+
+msgid "No shell\n"
+msgstr "Žádný shell\n"
+
+msgid "No password file"
+msgstr "Soubor s hesly neexistuje"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY selhalo"
+
+msgid "No password entry for 'root'"
+msgstr "V databázi není položka pro uživatele 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Stiskněte control-d pro normální spuštění systému,\n"
+"(nebo zadejte heslo uživatele root pro údržbu systému):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Vstupuji do režimu údržby systému"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: nemohu vytvořit nový soubor s implicitními hodnotami\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: nemohu vytvořit nový soubor s implicitními hodnotami\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: řádek %d: volání chown selhalo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: přejmenovat: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: skupina „%s“ je NIS skupinou.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: zadáno příliš mnoho skupin (max %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Použití: %s [vstup]\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr "  -s, --sha-rounds              počet SHA iterací algoritmu SHA*\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr "  -s, --sha-rounds              počet SHA iterací algoritmu SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr "  -s, --sha-rounds              počet SHA iterací algoritmu SHA*\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr "  -s, --sha-rounds              počet SHA iterací algoritmu SHA*\n"
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr "  -s, --sha-rounds              počet SHA iterací algoritmu SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr "  -s, --sha-rounds              počet SHA iterací algoritmu SHA*\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: chybný základní adresář „%s“\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: chybný komentář „%s“\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: chybný domácí adresář „%s“\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: přepínač -e vyžaduje stínová hesla\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: přepínač -f vyžaduje stínová hesla\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: chybná položka „%s“\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: chybný shell „%s“\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: volby %s a %s kolidují\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: nepodařilo se vynulovat faillog záznam UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: nepodařilo se vynulovat lastlog záznam UID %lu: %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: adresář %s nelze vytvořit\n"
+
+msgid "Creating mailbox file"
+msgstr "Vytvářím poštovní schránku"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Skupina „mail“ nebyla nalezena. Vytvářím uživatelovu poštovní schránku s "
+"právy 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Nastavuji oprávnění k poštovní schránce"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: uživatel „%s“ již existuje\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: skupina %s existuje - chcete-li přidat uživatele do této skupiny, "
+"použijte -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: nelze vytvořit uživatele\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu není jedinečné\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: nelze vytvořit skupinu\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: varování: domovský adresář již existuje.\n"
+"Nekopíruji do něj žádné soubory z adresáře skel.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Použití: userdel [volby] ÚČET\n"
+"\n"
+"VOLBY:\n"
+"  -f, --force                   vynutí odstranění souborů,\n"
+"                                i když je uživatel nevlastní\n"
+"  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+"  -r, --remove                  odstraní domovský adresář a poštovní\n"
+"                                schránku\n"
+"\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: skupina %s je primární skupinou jiného uživatele a nelze ji odstranit.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove %s: %s"
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: varování: nemohu smazat %s: %s"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: vlastníkem %s není %s, nemažu jej\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: uživatel %s je NIS uživatelem\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: uživatel %s je právě přihlášen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: chybný domácí adresář „%s“\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: adresář %s nebudu mazat (je to domácí adresář uživatele %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: chyba při mazání adresáře %s\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: usermod [options] LOGIN\n"
+#| "\n"
+#| "Options:\n"
+#| "  -c, --comment COMMENT         new value of the GECOS field\n"
+#| "  -d, --home HOME_DIR           new home directory for the user account\n"
+#| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -g, --gid GROUP               force use GROUP as new primary group\n"
+#| "  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+#| "  -a, --append                  append the user to the supplemental "
+#| "GROUPS\n"
+#| "                                mentioned by the -G option without "
+#| "removing\n"
+#| "                                him/her from other groups\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -l, --login NEW_LOGIN         new value of the login name\n"
+#| "  -L, --lock                    lock the user account\n"
+#| "  -m, --move-home               move contents of the home directory to "
+#| "the\n"
+#| "                                new location (use only with -d)\n"
+#| "  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+#| "  -p, --password PASSWORD       use encrypted password for the new "
+#| "password\n"
+#| "  -s, --shell SHELL             new login shell for the user account\n"
+#| "  -u, --uid UID                 new UID for the user account\n"
+#| "  -U, --unlock                  unlock the user account\n"
+#| "\n"
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Použití: usermod [volby] ÚČET\n"
+"\n"
+"Volby:\n"
+"  -c, --comment KOMENTÁŘ        nová hodnota pole GECOS\n"
+"  -d, --home-dir DOMOV_ADR      nový domovský adresář uživatele\n"
+"  -e, --expiredate EXP_DATUM    nastaví vypršení platnosti účtu na "
+"EXP_DATUM\n"
+"  -f, --inactive NEAKTIV        zablokuje účet po NEAKTIV dnech od vypršení\n"
+"  -g, --gid SKUPINA             nastaví novou primární SKUPINU\n"
+"  -G, --groups SKUPINY          nový seznam dodatečných skupin, do kterých\n"
+"                                má účet patřit\n"
+"  -a, --append                  přidá uživatele do dalších SKUPIN zadaných\n"
+"                                volbou -G; neruší členství v ostatních sk.\n"
+"  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+"  -l, --login NOVÝ_ÚČET         nová hodnota přihlašovacího jména\n"
+"  -L, --lock                    zamkne uživatelský účet\n"
+"  -m, --move-home               přesune obsah původního domovského adresáře\n"
+"                                do nového umístění (používejte pouze s -d)\n"
+"  -o, --non-unique              povolí vytvoření uživatele s duplicitním\n"
+"                                (nejedinečným) UID\n"
+"  -p, --password HESLO          použije nové zašifrované heslo\n"
+"  -s, --shell SHELL             nový přihlašovací shell uživatele\n"
+"  -u, --uid UID                 nové UID pro uživatelský účet\n"
+"  -U, --unlock                  odemkne uživatelský účet\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s odemknutí uživatelova hesla by znamenalo mít účet bez hesla.\n"
+"Pro odemknutí hesla tohoto uživatele byste měli nastavit heslo pomocí "
+"usermod -p.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: uživatel „%s“ již v %s existuje\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: žádné přepínače\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: přepínače -e a -f vyžadují stínová hesla\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: přepínače -L, -p a -U se navzájem vylučují\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID „%lu“ již existuje\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: adresář %s již existuje\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: %s nelze vytvořit\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: volání chown pro %s selhalo\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: varování: selhalo úplné odstranění domovského adresáře %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: adresář %s nelze na %s přejmenovat\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: nepodařilo se zkopírovat lastlog záznamy uživatele %lu uživateli %lu: %"
+"s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: nepodařilo se zkopírovat faillog záznamy uživatele %lu uživateli %lu: %"
+"s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: varování: vlastníkem %s není %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "chyba při změně vlastníka poštovní schránky"
+
+msgid "failed to rename mailbox"
+msgstr "chyba při přejmenovávání poštovní schránky"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Změnili jste %s.\n"
+"Z důvodu konzistence byste měli změnit i %s.\n"
+"Můžete to provést příkazem „%s“.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Použití: vipw [volby]\n"
+"\n"
+"Volby:\n"
+"  -g, --group                   upraví databázi skupin\n"
+"  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+"  -p, --passwd                  upraví databázi hesel\n"
+"  -q, --quiet                   tichý režim\n"
+"  -s, --shadow                  upraví databázi shadow nebo gshadow\n"
+"\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: selhalo odstranění %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s je beze změny\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Soubor nelze zamknout"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Soubor nelze zamknout"
+
+msgid "Couldn't make backup"
+msgstr "Zálohování nelze provést."
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s nelze obnovit: %s (změny jsou v %s)\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: faillog [volby]\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ "  -a, --all                     zobrazí záznamy faillogu o všech "
+#~ "uživatelích\n"
+#~ "  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+#~ "  -l, --lock-time SEK           po neúspěšném přihlášení zamkne účet na "
+#~ "SEC\n"
+#~ "                                sekund\n"
+#~ "  -m, --maximum MAX             nastaví maximální počet chybných "
+#~ "přihlášení\n"
+#~ "                                na MAX\n"
+#~ "  -r, --reset                   vynuluje počitadla chybných přihlášení\n"
+#~ "  -t, --time DNŮ                zobrazí záznamy faillogu novější než DNŮ\n"
+#~ "  -u, --user ÚČET               zobrazí záznamy faillogu nebo upraví\n"
+#~ "                                počitadla a limity chybných přihlášení\n"
+#~ "                                pouze pro uživatele ÚČET (s volbami -r, -"
+#~ "m\n"
+#~ "                                nebo -l)\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: groupadd [volby] SKUPINA\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ "  -f, --force                   vynutí úspěšný návratový kód i když\n"
+#~ "                                zadaná skupina existuje\n"
+#~ "  -g, --gid GID                 pro novou skupinu použije GID\n"
+#~ "  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+#~ "  -K, --key KLÍČ=HODNOTA        přebije výchozí nastavení /etc/login."
+#~ "defs\n"
+#~ "  -o, --non-unique              povolí vytvoření skupiny s duplicitním\n"
+#~ "                                (nejedinečným) GID\n"
+#~ "  -p, --password HESLO          pro novou skupinu použije šifrované "
+#~ "heslo\n"
+#~ "  -r, --system                  vytvoří systémový účet\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: groupmod [volby] SKUPINA\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ "  -g, --gid GID                 pro SKUPINU vynutí nové GID\n"
+#~ "  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+#~ "  -n, --new-name NOVÁ_SKUPINA   vnutí SKUPINĚ jméno NOVÁ_SKUPINA\n"
+#~ "  -o, --non-unique              povolí skupině použít duplicitní\n"
+#~ "                                (nejedinečné) GID\n"
+#~ "  -p, --password HESLO          pro SKUPINU použije šifrované heslo\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~| "                                home directory\n"
+#~| "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~| "account\n"
+#~| "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~| "  -D, --defaults                print or save modified default useradd\n"
+#~| "                                configuration\n"
+#~| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~| "                                to INACTIVE\n"
+#~| "  -g, --gid GROUP               force use GROUP for the new user "
+#~| "account\n"
+#~| "  -G, --groups GROUPS           list of supplementary groups for the "
+#~| "new\n"
+#~| "                                user account\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~| "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~| "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~| "                                faillog databases\n"
+#~| "  -m, --create-home             create home directory for the new user\n"
+#~| "                                account\n"
+#~| "  -M, --no-create-home          do not create user's home directory\n"
+#~| "                                (overrides /etc/login.defs)\n"
+#~| "  -N, --no-user-group           do not create a group with the same name "
+#~| "as\n"
+#~| "                                the user\n"
+#~| "  -o, --non-unique              allow create user with duplicate\n"
+#~| "                                (non-unique) UID\n"
+#~| "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~| "                                account\n"
+#~| "  -r, --system                  create a system account\n"
+#~| "  -s, --shell SHELL             the login shell for the new user "
+#~| "account\n"
+#~| "  -u, --uid UID                 force use the UID for the new user "
+#~| "account\n"
+#~| "  -U, --user-group              create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Použití: useradd [volby] ÚČET\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ "  -b, --base-dir ZÁKL_ADR       základní adresář domovského adresáře "
+#~ "nového\n"
+#~ "                                uživatelského účtu\n"
+#~ "  -c, --comment KOMENTÁŘ        nastaví pole GECOS nového účtu\n"
+#~ "  -d, --home-dir DOMOV_ADR      domovský adresář nového účtu\n"
+#~ "  -D, --defaults                vypíše nebo nastaví výchozí nastavení\n"
+#~ "                                programu useradd\n"
+#~ "  -e, --expiredate EXP_DATUM    nastaví vypršení platnosti účtu na "
+#~ "EXP_DATUM\n"
+#~ "  -f, --inactive NEAKTIV        zablokuje účet po NEAKTIV dnech od "
+#~ "vypršení\n"
+#~ "  -g, --gid SKUPINA             vynutí použití této skupiny pro nový "
+#~ "účet\n"
+#~ "  -G, --groups SKUPINY          seznam dodatečných skupin, do kterých\n"
+#~ "                                má nový účet patřit\n"
+#~ "  -h, --help                    zobrazí tuto nápovědu a skončí\n"
+#~ "  -k, --skel VZOR_ADR           zadá alternativní vzorový adresář\n"
+#~ "  -K, --key KLÍČ=HODNOTA        přebije výchozí nastavení /etc/login."
+#~ "defs\n"
+#~ "  -l, --no-log-init             nepřidá uživatele do databází lastlog\n"
+#~ "                                a faillog\n"
+#~ "  -m, --create-home             vytvoří domovský adresář pro nový\n"
+#~ "                                uživatelský účet\n"
+#~ "  -M, --no-create-home          nevytvoří domovský adresář uživatele\n"
+#~ "                                (přebíjí nastavení /etc/login.defs)\n"
+#~ "  -N, --no-user-group           nevytvoří skupinu se stejným jménem jako\n"
+#~ "                                uživatel\n"
+#~ "  -o, --non-unique              povolí vytvoření uživatele s duplicitním\n"
+#~ "                                (nejedinečným) UID\n"
+#~ "  -p, --password HESLO          použije pro nový účet zadané zašifrované\n"
+#~ "                                heslo\n"
+#~ "  -r, --system                  vytvoří systémový účet\n"
+#~ "  -s, --shell SHELL             přihlašovací shell nového účtu\n"
+#~ "  -u, --uid UID                 vynutí použití tohoto UID pro nový účet\n"
+#~ "  -U, --user-group              vytvoří skupinu se stejným jménem jako\n"
+#~ "                                uživatel\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Použití: %s [volby] [vstup]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            typ šifry (jeden z %s)\n"
+#~ "  -r, --system                  vytvoří systémové účty\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Heslu byla nastavena vypršená platnost."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: soubor s hesly nelze zamknout\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: soubor s hesly nelze otevřít\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze zamknout\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze otevřít\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze přepsat\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: soubor s hesly nelze přepsat\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: soubor s hesly nelze aktualizovat\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze aktualizovat\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tCelé jméno: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tČíslo místnosti: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelefon do zaměstnání: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelefon domů: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Nelze zamknout soubor s hesly; zkuste to později.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Soubor s hesly nelze otevřít.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s se v /etc/passwd nenalézá\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Chyba při aktualizaci položky v souboru s hesly.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Nelze provést změny v souboru s hesly.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Soubor s hesly nelze odemknout.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: soubor se skupinami nelze zamknout\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: soubor se skupinami nelze otevřít\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: soubor stínových skupin nelze zamknout\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze otevřít\n"
+
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: chyba při aktualizaci souboru se stínovými skupinami\n"
+
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: chyba při aktualizaci souboru se skupinami\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: řádek %d: neznámá skupina %s\n"
+
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: řádek %d: položku nelze aktualizovat skupinu\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze zamknout\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: chyba při aktualizaci souboru se stínovými hesly\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: chyba při aktualizaci souboru s hesly\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: řádek %d: neznámý uživatel %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: řádek %d: položku v souboru s hesly nelze aktualizovat\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: neznámý uživatel\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Neznámý uživatel: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Použití: %s [r|-R] skupina\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a uživatel] skupina\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d uživatel] skupina\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A uživatel,...] [-M uživatel,...] skupina\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M uživatel,...] skupina\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: nelze získat zámek\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: nelze získat zámek pro soubor se stínovými hesly\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: nelze otevřít soubor\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: nelze přepsat soubor\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: nelze přepsat soubor se stínovými hesly\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: nelze odemknout soubor\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: nelze aktualizovat položku\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: nelze aktualizovat položku souboru se stínovými hesly\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "neznámá skupina %s\n"
+
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: nelze zavřít soubor\n"
+
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze zavřít\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Kdo jste?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: neznámý člen %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: chyba při přidávání nové skupiny\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: soubor se skupinami nelze přepsat\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: soubor se stínovými skupinami nelze přepsat\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: soubor se skupinami nelze zamknout\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: soubor se skupinami nelze otevřít\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: soubor se stínovými skupinami nelze zamknout\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: soubor se stínovými skupinami nelze otevřít\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u není jedinečné\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: chyba při odstraňování položky ze souboru se skupinami\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr ""
+#~ "%s: chyba při odstraňování položky ze souboru se stínovými skupinami\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: primární skupinu uživatele nelze odstranit.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Člen určený pro odstranění nebyl nalezen\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Použití: groupmems -a uživatel | -d uživatel | -D | -l [-g skupina]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Přidávat členy do jiných skupin může pouze uživatel root\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Je vyžadován skupinový přístup\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Nejste vlastníkem aktuální skupiny\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "Ověření pomocí PAM selhalo\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Soubor se skupinami nelze zamknout\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Soubor se skupinami nelze otevřít\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Soubor se skupinami nelze zavřít\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s se v /etc/group nenalézá\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u není jedinečné gid\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: jméno %s není jedinečné\n"
+
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: soubor s hesly nelze přepsat\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: soubor s hesly nelze zamknout\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: soubor s hesly nelze otevřít\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s: nelze změnit primární skupinu uživatele „%s“ z %u na %u, protože se "
+#~ "nenachází v souboru passwd.\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: soubor %s nelze zamknout\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: položku %s souboru se stínovými hesly nelze aktualizovat\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: položku skupiny %s nelze odstranit\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: soubor se stínovými skupinami nelze zamknout\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: soubor se stínovými skupinami nelze otevřít\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: položku stínové skupiny %s nelze odstranit\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze aktualizovat\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: soubor s hesly nelze aktualizovat\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: soubor se stínovými hesly skupin nelze smazat\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "neznámé UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "neznámé GID: %lu\n"
+
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: skupinové ID „%s“ není platné\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: skupina %s byla vytvořena, ale nastala chyba při vytváření "
+#~ "odpovídající stínové skupiny\n"
+
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: uživatelské ID „%s“ není platné\n"
+
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: neplatné uživatelské jméno „%s“\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: soubor /etc/passwd nelze zamknout.\n"
+
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: soubor /etc/shadow nelze zamknout.\n"
+
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: soubor /etc/group nelze zamknout.\n"
+
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: soubor /etc/gshadow nelze zamknout.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: soubory nelze otevřít\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: chyba při aktualizaci souborů\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: řádek %d: uživatele %s nelze nalézt\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: položku souboru s hesly pro uživatele %s nelze aktualizovat\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: soubor s hesly nelze zamknout\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: soubor s hesly nelze otevřít\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: položku souboru s hesly pro uživatele %s nelze odstranit\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze aktualizovat\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: soubor s hesly nelze aktualizovat\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: položku pro uživatele %s nelze aktualizovat\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: nemůžete smazat soubor se stínovými hesly\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: neznámé GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: neznámá skupina %s\n"
+
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr ""
+#~ "%s: Nedostatek paměti. Nelze aktualizovat databázi stínových skupin.\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: soubor s hesly nelze přepsat\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze přepsat\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze zamknout\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: soubor se stínovými hesly nelze otevřít\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: chyba při zamykání souboru se skupinami\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: chyba při otevírání souboru se skupinami\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: chyba při zamykání souboru se stínovými hesly\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: chyba při otevírání souboru se stínovými hesly\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: chyba při vytváření nové položky v souboru s hesly\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: chyba při vytváření nové položky v souboru se stínovými hesly\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: varování: CREATE_HOME není podporováno, použijte přepínač -m\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: položku souboru se skupinami nelze aktualizovat\n"
+
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: chyba při aktualizaci stínové skupiny\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: soubor se skupinami nelze otevřít\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: soubor se stínovými skupinami nelze otevřít\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: chyba při odstraňování položky ze souboru s hesly\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: chyba při odstraňování položky ze souboru se stínovými hesly\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: uživatel %s neexistuje\n"
+
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: chyba při přidávání nové stínové skupiny\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu není jedinečné\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: chyba při změně položky v souboru s hesly\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: chyba při odstraňování položky ze souboru s hesly\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: chyba při odstraňování položky ze souboru se stínovými hesly\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: nelze získat jedinečné GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " na „%.100s“ z „%.200s“"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " na „%.100s“"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: řádek %d: nelze vytvořit UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: jméno %s není jedinečné\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použití: chgpasswd [volby]\n"
+#~ "\n"
+#~ "Volby:\n"
+#~ "  -e, --encrypted\tzadaná hesla jsou zašifrovaná\n"
+#~ "  -h, --help\t\tzobrazí tuto nápovědu a skončí\n"
+#~ "  -m, --md5\t\tpokud zadaná hesla nejsou zašifrovaná,\n"
+#~ "\t\t\tpoužije místo DES algoritmus MD5\n"
+#~ "\n"
+
+#~ msgid "No password.\n"
+#~ msgstr "Žádné heslo.\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Lituji.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Lituji, ale heslo pro %s nelze ještě změnit.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Lituji."
diff --git a/po/da.gmo b/po/da.gmo
new file mode 100644 (file)
index 0000000..23f3337
Binary files /dev/null and b/po/da.gmo differ
diff --git a/po/da.po b/po/da.po
new file mode 100644 (file)
index 0000000..11af76a
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,2687 @@
+# translation of shadow-da2.po to Danish
+# translation of shadow-da.po to Danish
+# Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# Claus Hindsgaul <claus.hindsgaul@gmail.com>, 2006.
+# Claus Hindsgaul <claus_h@image.dk>, 2004, 2005.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-11-24 18:50+0100\n"
+"Last-Translator: Claus Hindsgaul <claus.hindsgaul@gmail.com>\n"
+"Language-Team: Danish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Kunne ikke frigøre plads til opsætningsoplysninger.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "opsætningsfejl - ukendt punkt %s (informér administrator)\n"
+
+msgid "Password: "
+msgstr "Adgangskode: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s's adgangskode: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Advarsel: ukendt gruppe %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Advarsel: for mange grupper\n"
+
+msgid "Your password has expired."
+msgstr "Din adgangskode er udløbet."
+
+msgid "Your password is inactive."
+msgstr "Din adgangskode er inaktiv."
+
+msgid "Your login has expired."
+msgstr "Din adgangskode er udløbet."
+
+msgid "  Contact the system administrator."
+msgstr "  Kontakt systemadministratoren."
+
+msgid "  Choose a new password."
+msgstr "  Vælg en ny adgangskode."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Din adgangskode udløber om %ld dage.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Din adgangskode udløber i morgen."
+
+msgid "Your password will expire today."
+msgstr "Din adgangskode udløber i dag."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Kunne ikke ændre tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: felter for lange\n"
+
+msgid "Environment overflow\n"
+msgstr "Miljøoverløb\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Du kan ikke ændre $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d fejl siden sidste logind.\n"
+"Sidst var %s, %s.\n"
+msgstr[1] ""
+"%d fejl siden sidste logind.\n"
+"Sidst var %s, %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: kan ikke få unik UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: kan ikke få unik GID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: kan ikke få unik UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: kan ikke få unik UID\n"
+
+msgid "Too many logins.\n"
+msgstr "Logget på for mange gange.\n"
+
+msgid "You have new mail."
+msgstr "Du har ny post."
+
+msgid "No mail."
+msgstr "Ingen post."
+
+msgid "You have mail."
+msgstr "Du har post."
+
+msgid "no change"
+msgstr "ingen ændring"
+
+msgid "a palindrome"
+msgstr "et palindrom"
+
+msgid "case changes only"
+msgstr "kun versalændringer"
+
+msgid "too similar"
+msgstr "for ens"
+
+msgid "too simple"
+msgstr "for simpelt"
+
+msgid "rotated"
+msgstr "omrokeret"
+
+msgid "too short"
+msgstr "for kort"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Ugyldig adgangskode: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() mislykkedes, fejl %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Adgangskode ændret."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: adgangskoden blev opdateret\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Ugyldig adgangskode for %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Kunne ikke skifte mappe til '%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Ingen mappe, logger på med HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Kan ikke udføre %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Ugyldig rodmappe '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Kan ikke ændre rodmappen til '%s'\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Kan ikke afgøre dit tty-navn."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: hukommelse opbrugt\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) mislykkedes\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Nej\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Brug: chage [tilvalg] [LOGIND]\n"
+"\n"
+"Tilvalg:\n"
+"  -d, --lastday SIDSTE_DAG      sæt seneste adgangskodeændring til "
+"SIDSTE_DAG\n"
+"  -E, --expiredate UDLØBSDATO   sæt kontoens udløbsdato til UDLØBSDATO\n"
+"  -h, --help                    vis denne hjælpebesked og afslut\n"
+"  -I, --inactive INAKTIVT       sæt inaktiv adgangskode efter udløb til "
+"INAKTIVT\n"
+"  -l, --list                    vis forældelsesoplysninger for konto\n"
+"  -m, --mindays MIN_DAGE        sæt minimalt antal dage inden "
+"adgangskodeændring\n"
+"                                til MIN_DAGE\n"
+"  -M, --maxdays MAKS_DAGE       sæt maksimalt antal dage inden\n"
+"                                adgangskodeændring\n"
+"                                til MAKS_DAGE\n"
+"  -W, --warndays VARSELSDAGE    sæt antallet af udløbsvarselsdage til\n"
+"                                VARSELSDAGE\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Angiv ny værdi eller tryk RETUR for standardværdien"
+
+msgid "Minimum Password Age"
+msgstr "Minimal adgangskode-alder"
+
+msgid "Maximum Password Age"
+msgstr "Maksimal adgangskode-alder"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Sidste ændring af adgangskode (ÅÅÅÅ-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Advarsel om udløb af adgangskode"
+
+msgid "Password Inactive"
+msgstr "Adgangskode inaktiv"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Konto-udløbsdato (ÅÅÅÅ-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Sidste ændring af adgangskode\t\t\t\t\t: "
+
+msgid "never"
+msgstr "aldrig"
+
+msgid "password must be changed"
+msgstr "adgangskoden skal ændres"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Adgangskode udløber\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Adgangskode inaktiv\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Konto udløber\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimalt antal dage mellem ændring af adgangskoden\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maksimalt antal dage mellem ændring af adgangskoden\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Antal dages forvarsel om adgangskodens udløb\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: ugyldig dato '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: ugyldigt numerisk parameter '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: medtag ikke \"l\" med andre flag\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Adgang nægtet.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Kan ikke afgøre dit brugernavn.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM-autentifikation mislykkedes\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: kan ikke låse filer. Prøv igen senere\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: kan ikke åbne filen %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: fejl under spaltning: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: kunne ikke afgive rettigheder (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: skyggeadgangskodefilen findes ikke\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: kunne ikke afgive rettigheder (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: brugeren %s eksisterer ikke\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Ændrer forældelsesoplysninger for %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: fejl ved ændring af felter\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Brug: %s [-f fulde_navn] [-r rum] [-w arbejdstelefon]\n"
+"\t[-h hjemmetelefon] [-o andet] [bruger]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Brug: %s [-f fulde_navn] [-r rum] [-w arbedstelefon] [-h hjemmetelefon]\n"
+
+msgid "Full Name"
+msgstr "Fulde navn"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Rum-nummer"
+
+msgid "Work Phone"
+msgstr "Arbejdstelefon"
+
+msgid "Home Phone"
+msgstr "Hjemmetelefon"
+
+msgid "Other"
+msgstr "Andet"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Kan ikke ændre ID til root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: ugyldigt navn: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: ugyldigt rum-nummer: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: ugyldig arbejdstelefon: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: ugyldig hjemmetelefon: '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' indeholder ugyldige tegn\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' indeholder ugyldige tegn\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: brugeren %s eksisterer ikke\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: kan ikke ændre brugeren'%s' på NIS-klienten.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' er NIS-masteren for denne klient.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Ændrer brugeroplysninger for %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: felter for lange\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Brug: chpasswd [tilvalg]\n"
+"\n"
+"Tilvalg:\n"
+"  -e, --encrypted               de angivne adgangskoder er krypterede\n"
+"  -h, --help                    vis denne hjælpetekst og afslut\n"
+"  -m, --md5                     brug MD5-kryptering i stedet for DES, når\n"
+"                                de angivne adgangskoder ikke er krypterede\n"
+"\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: flaget -a er KUN tilladt sammen med -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linje %d: linjen er for lang\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linje %d: mangler ny adgangskode\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: gruppen %s eksisterer ikke\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linje %d: kan ikke opdatere posten\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: fejl opdaget, ændringerne blev ignoreret\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Brug: %s [inddata]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: brugeren %s eksisterer ikke\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: brugeren %s eksisterer ikke\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Brug: chsh [tilvalg] [LOGIND]\n"
+"\n"
+"Tilvalg:\n"
+"  -f, --force                   gennemtving fjernelse af filer, selvom\n"
+"                                de ikke ejers af brugeren\n"
+"  -h, --help                    vis denne hjælpebesked og afslut\n"
+"  -s, --shell SKAL              ny logind-skal for brugerkontoen\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Login-skal"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Du kan ikke ændre skal for %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Ændrer login-skallen for %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Ugyldig linje: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s er en ugyldig skal.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Brug: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Logind      Fejl     Maksimum Seneste                 Tid\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds tilbage]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lås]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Ukendt bruger: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: kan ikke åbne filen %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Adgangskoden for %s kan ikke ændres.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: der kræves skyggeadgangskoder for -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: gruppen %s eksisterer ikke\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: fejl under spaltning: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Ændrer adgangskoden for gruppen %s\n"
+
+msgid "New Password: "
+msgstr "Ny adgangskode: "
+
+msgid "Re-enter new password: "
+msgstr "Gentag ny adgangskode: "
+
+msgid "They don't match; try again"
+msgstr "De er ikke ens. Prøv igen"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Prøv igen senere\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Tilføjer brugeren %s til gruppen %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Fjerner brugeren %s fra gruppen %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: brugeren %s eksisterer ikke\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Ikke en tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Brug: %s [inddata]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s er ikke et gyldigt gruppenavn\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "ugyldigt gruppenavn '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K kræver NAVN=VÆRDI\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: gruppen %s eksisterer\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Medlemmet eksisterer allerede\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Brug: groupdel gruppe\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: kan ikke omdøbe mappen %s til %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: kan ikke ændre brugeren'%s' på NIS-klienten.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: gruppen %s eksisterer ikke\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: gruppen '%s' er en NIS-gruppe.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s er NIS-masteren\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: brugeren %s er en NIS-bruger\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: løbet tør for hukommelse i update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "ugyldigt gruppenavn '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: gruppen %s er en NIS-gruppe\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: ukendt bruger %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Brug: %s [-r] [-s] [gruppe [gskygge]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Brug %s [-r] [-s] [gruppe]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s og -r er ikke kompatible\n"
+
+msgid "invalid group file entry"
+msgstr "ugyldig gruppefils-linje"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "slet linjen '%s'? "
+
+msgid "duplicate group entry"
+msgstr "gruppelinjen er en dublet"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ugyldigt gruppenavn '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "ugyldigt gruppenavn '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "gruppe %s: ingen bruger %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "slet medlemmet '%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "ingen tilsvarende gruppefilslinje i %s\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "tilføj gruppen %s i %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "ugyldig skyggegruppefils-linje"
+
+msgid "duplicate shadow group entry"
+msgstr "skyggegruppelinjen er en dublet"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "skyggegruppen %s: ingen administrator-bruger %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "slet administrator-medlemmet '%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "skyggegruppen %s: ingen bruger %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: filerne er blevet opdateret\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: ingen ændringer\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Brug: groupdel gruppe\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Brug: groupdel gruppe\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: kan ikke opdatere filen %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Brug: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Brug: id\n"
+
+msgid " groups="
+msgstr " grupper="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Brug: lastlog [tilvalg]\n"
+"\n"
+"Tilvalg:\n"
+"  -b, --before DAGE             vis kun lastlog-optegnelser, der er ældre\n"
+"                                end DAGE\n"
+"  -h, --help                    vis denne hjælpebesked og afslut\n"
+"  -t, --time DAGE               vis kun lastlog-optegnelser, der er nyere\n"
+"                                end DAGE\n"
+"  -u, --user LOGIND             vis lastlog-optegnelser for brugeren med\n"
+"                                det angivne LOGIND\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Brugernavn       Port     Fra              Seneste"
+
+msgid "Username                Port     Latest"
+msgstr "Brugernavn              Port     Seneste"
+
+msgid "**Never logged in**"
+msgstr "**Har aldrig logget på**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: uventet argument: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Brug: %s [-p] [navn]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "      %s [-p] [-h vært] [-f navn]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "      %s [-p] -r vært\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Ugyldig login-tid"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systemet er lukket for rutinemæssig vedligehold"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Afbrød ikke forbindelsen -- root-login er tilladt.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Login udløb efter %d sekunder.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr "Ingen utmp-post.  Du skal køre \"login\" fra det laveste\"sh\"-niveau"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM-fejl, afbryder: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s logind: "
+
+msgid "login: "
+msgstr "logind: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maksimalt antal forsøg nået (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "logind: PAM har anmodet om afbrydelse\n"
+
+msgid "Login incorrect"
+msgstr "Forkert login"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fejl under spaltning: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Advarsel: login genetableret efter midlertidig udelukkelse."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Sidst logget på: %s på %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Sidst logget på: %.19s på %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " fra %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"logind-tid overskredet\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Brug: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Brug: newgrp [-] [gruppe]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Brug: sg gruppe [[-c] kommando]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Gammel adgangskode: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fejl under spaltning: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: brugeren %s eksisterer ikke\n"
+
+msgid "too many groups\n"
+msgstr "for mange grupper\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: gruppen %s eksisterer ikke\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ugyldigt brugernavn '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: ugyldigt brugernavn '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linje %d: ugyldig linje\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: kan ikke opdatere linje for brugeren %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linje %d: kan ikke oprette GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linje %d: kan ikke oprette GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: brugeren %s eksisterer ikke\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linje %d: kan ikke opdatere adgangskode\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linje %d: mkdir fejlede\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linje %d: chown fejlede\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linje %d: kan ikke opdatere posten\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: passwd [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -a, --all                     report password status on all accounts\n"
+#| "  -d, --delete                  delete the password for the named "
+#| "account\n"
+#| "  -e, --expire                  force expire the password for the named "
+#| "account\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -k, --keep-tokens             change password only if expired\n"
+#| "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --lock                    lock the named account\n"
+#| "  -n, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -q, --quiet                   quiet mode\n"
+#| "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+#| "  -S, --status                  report password status on the named "
+#| "account\n"
+#| "  -u, --unlock                  unlock the named account\n"
+#| "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "  -x, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Brug: passwd [tilvalg] [LOGIND]\n"
+"\n"
+"Tilvalg:\n"
+"  -a, --all                     rapportér alle kontis adgangskodestatus\n"
+"  -d, --delete                  slet den navngivne kontos adgangskode\n"
+"  -e, --expire                  gennemtving udløb af den navngivne kontos\n"
+"                                adgangskode\n"
+"  -h, --help                    vis denne hjælpebesked og afslut\n"
+"  -k, --keep-tokens             skift kun adgangskode, hvis den er udløbet\n"
+"  -i, --inactive INAKTIVT       set udløbne adgangskoder til to INAKTIVT\n"
+"  -l, --lock                    læs den navngivne konto\n"
+"  -n, --mindays MIN_DAGE        angiv minimale antal dage inden skift af\n"
+"                                adgangskode til MIN_DAGE\n"
+"  -q, --quiet                   tavs tilstand\n"
+"  -r, --repository SAMLING      skift adgangskode i samlingen SAMLING\n"
+"  -S, --status                  raportér den navngivne kontos\n"
+"                                adgangskodestatus\n"
+"  -u, --unlock                  åbn den navngivne konto\n"
+"  -w, --warndays ADVAR_DAGE     advar om udløb i ADVAR_DAGE dage\n"
+"  -x, --maxdays MAKS_DAGE       sæt det maksimale antal dage inden skift af\n"
+"                                adgangskode til MAKS_DAGE\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Gammel adgangskode: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Angiv ny adgangskode (mindst %d, højst %d tegn)\n"
+"Brug en kombination af små og store bogstaver samt tal.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Angiv ny adgangskode (mindst %d, højst %d tegn)\n"
+"Brug en kombination af små og store bogstaver samt tal.\n"
+
+msgid "New password: "
+msgstr "Ny adgangskode: "
+
+msgid "Try again."
+msgstr "Prøv igen."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Advarsel: svag adgangskode (skriv den igen for at bruge det alligevel)."
+
+msgid "They don't match; try again.\n"
+msgstr "De er ikke ens; prøv igen.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Adgangskoden for %s kan ikke ændres.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Adgangskoden for %s kan ikke ændres.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: samlingen %s understøttes ikke\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Du har ikke lov til at se adgangskodeoplysninger for %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Ændrer adgangskode for %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Adgangskoden for %s er uændret.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Adgangskode ændret."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Advarsel om udløb af adgangskode"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Brug: %s [-q] [-r] [-s] [adgangskode [skygge]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s og -r er ikke kompatible\n"
+
+msgid "invalid password file entry"
+msgstr "ugyldig linje i adgangskodefil"
+
+msgid "duplicate password entry"
+msgstr "adgangskodelinjen er en dublet"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ugyldigt brugernavn'%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "ugyldigt brugernavn'%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "bruger %s: ingen gruppe %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "bruger %s: mappen %s eksisterer ikke\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "bruger %s: programmet %s eksisterer ikke\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "ingen tilsvarende adgangskoder i %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "tilføj brugeren '%s' i %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "ugyldig linje i skyggeadgangskodefil"
+
+msgid "duplicate shadow password entry"
+msgstr "skyggeadgangskodelinjen er en dublet"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "bruger %s: seneste ændring af adgangskoden skete i fremtiden\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: kan ikke åbne filen %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Brug: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Brug: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Adgang til at udføre su til den konto er NÆGTET.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Gik uden om adgangskode-autentifikation.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Angiv din EGEN adgangskode som autentifikation.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Brug: su [tilvalg] [LOGIND]\n"
+"\n"
+"Tilvalg:\n"
+"  -c, --command KOMMANDO        videregiv KOMMANDO til den startede skal\n"
+"  -h, --help                    vis denne hjælpebesked og afslut\n"
+"  -, -l, --login                gør skallen til en logind-skal\n"
+"  -m, -p,\n"
+"  --preserve-environment        nulstil ikke miljøvariable, og behold\n"
+"                                den samme skal\n"
+"  -s, --shell SKAL              benyt SKAL i stedet for standard-skallen\n"
+"                                i passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: skal køres fra en terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: fejl %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Ukendt id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Du er ikke autoriseret til at 'su %s'\n"
+
+msgid "(Enter your own password)"
+msgstr "(Angiv din adgangskode)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignoreret)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM-autentifikation mislykkedes\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Du er ikke autoriseret til at 'su %s'\n"
+
+msgid "No shell\n"
+msgstr "Ingen skal\n"
+
+msgid "No password file"
+msgstr "Ingen adgangskodefil"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Ingen adgangskodelinje for 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Tryk control-d for at fortsætte den normale opstart,\n"
+"(eller angiv root-adgangskoden for systemvedligehold):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Går i systemvedligeholdelses-tilstand"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: kan ikke oprette ny standardværdi-fil\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: kan ikke åbne ny standardværdi-fil\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linje %d: chown fejlede\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: omdøb: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: gruppen '%s' er en NIS-gruppe.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: der er angivet for mange grupper (højst %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Brug: %s [inddata]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ugyldig grundmappe '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ugyldig kommentar '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ugyldig hjemmemappe '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: der kræves skyggeadgangskoder for -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: der kræves skyggeadgangskoder for -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ugyldigt felt '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: ugyldig skal '%s'\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: kan ikke oprette mappen %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Opretter postboks-fil"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Gruppen 'mail' blev ikke fundet. Opretter brugerens postboks-fil med "
+"filrettighederne 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Indstiller postboks-filens rettigheder"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: brugeren %s eksisterer\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: gruppen %s eksisterer - brug -g hvis du vil tilføje denne bruger til den "
+"gruppe.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: kan ikke oprette %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u er ikke unikt\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: kan ikke oprette %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: advarsel: hjemmemappen eksisterer allerede.\n"
+"Kopierer ikke nogen filer til den fra skelet-mappen.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Brug: userdel [tilvalg] LOGIND\n"
+"\n"
+"Tilvalg:\n"
+"  -f, --force                   gennemtving fjernelse af filer,\n"
+"                                selvom de ikke ejers af brugeren\n"
+"  -h, --help                    vis denne hjælpebesked og afslut\n"
+"  -r, --remove                  fjern home-mappen og postkøen\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Kan ikke fjerne gruppen %s, som er primærgruppe for en anden bruger.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: advarsel: kan ikke fjerne "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ejes ikke af %s, fjerner ikke\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: brugeren %s er en NIS-bruger\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: brugeren %s er logget på\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: ugyldig hjemmemappe '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: fjerner ikke mappen %s (det ville fjerne hjemmemappen for brugeren %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: fejl under fjernelse af mappen %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Brug: usermod [tilvalg] LOGIND\n"
+"\n"
+"Tilvalg:\n"
+"  -a, --append GRUPPE           tilføj brugeren til en supplerende GRUPPE\n"
+"  -c, --comment KOMMENTAR       ny værdi til GECOS-feltet\n"
+"  -d, --home-dir HJEMMEMAPPE    den nye brugerkontos hjemmemappe\n"
+"  -e, --expiredate UDLØBSDATO   sæt kontoens udløbsdato til UDLØBSDATO\n"
+"  -f, --inactive INAKTIV        sæt inaktiv adgangskode til INAKTIV efter\n"
+"                                udløb\n"
+"  -g, --gid GRUPPE              gennemtving brugen af GRUPPE til den nye\n"
+"                                primære gruppe\n"
+"  -G, --groups GRUPPER          ny liste med supplerende grupper\n"
+"  -h, --help                    vis denne hjælpebesked og afslut\n"
+"  -l, --login NYT_LOGIND        ny værdi til logind-navnet\n"
+"  -L, --lock                    lås brugerkontoen\n"
+"  -m, --move-home               flyt indholdet af hjemmemappen til den nye\n"
+"                                placering (brug kun sammen med -d)\n"
+"  -o, --non-unique              tillad oprettelse af ens (ikke-unikke) UID\n"
+"  -p, --password ADGANGSKODE    brug krypteret adgangskode til den nye\n"
+"                                adgangskode\n"
+"  -s, --shell SKAL              den nye brugerkontos logind-skal\n"
+"  -u, --uid UID                 ny UID til brugerkontoen\n"
+"  -U, --unlock                  fjern lås fra brugerkontoen\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: brugeren %s eksisterer\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: ingen flag angivet\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: skyggeadgangskoder kræves for e og -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Medlemmet eksisterer allerede\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: mappen %s eksisterer\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: kan ikke oprette %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: kan ikke chown %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: advarsel: kunne ikke fjerne den gamle hjemmemappe %s fuldstændigt"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: kan ikke omdøbe mappen %s til %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: advarsel: %s ejes ikke af %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "kunne ikke ændre postkassens ejer"
+
+msgid "failed to rename mailbox"
+msgstr "kunne ikke omdøbe postkasse"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Brug: vipw [tilvalg]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   ret gruppedatabasen\n"
+"  -h, --help                    vis denne hjælpebesked og afslut\n"
+"  -p, --passwd                  redigér passwd-databasen\n"
+"  -q, --quiet                   stille tilstand\n"
+"  -s, --shadow                  ret shadow- eller gshadow-databasen\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: kunne ikke afgive rettigheder (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s er uændret\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "kunne ikke låse filen"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "kunne ikke låse filen"
+
+msgid "Couldn't make backup"
+msgstr "kunne ikke lave sikkerhedskopi"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: kunne ikke genskabe %s: %s (dine ændringer er i %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Brug: faillog [tilvalg]\n"
+#~ "\n"
+#~ "Tilvalg:\n"
+#~ "  -a, --all                     vis fejllog-optegnelser for alle brugere\n"
+#~ "  -h, --help                    vis denne hjælpetekst og afslut\n"
+#~ "  -l, --lock-time SEK           lås konto i SEK sekunder efter mislykket\n"
+#~ "                                logind\n"
+#~ "  -m, -- maximum MAKS           sæt det maksimale antal mislykkede "
+#~ "logind\n"
+#~ "                                til MAKS\n"
+#~ "  -r, --reset                   nulstil optællingen af mislykkede logind\n"
+#~ "  -r, --time DAGE               vis fejllog-optegnelser, der er nyere "
+#~ "end\n"
+#~ "                                DAGE\n"
+#~ "  -u, --user LOGIND             vis fejllog-optegnelser eller "
+#~ "vedligehold\n"
+#~ "                                kun fejltællere og grænser (hvis den "
+#~ "bruges\n"
+#~ "                                sammen med tilvalgene -r, -m eller -l) "
+#~ "for\n"
+#~ "                                brugeren med LOGIND\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Brug: groupadd [tilvalg] GRUPPE\n"
+#~ "\n"
+#~ "Tilvalg:\n"
+#~ "  -f, --force                   gennemtving success-afslutningsstatus "
+#~ "hvis\n"
+#~ "                                den angivne gruppe eksisterer i forvejen\n"
+#~ "  -g, --gid GID                 benyt GID til den nye gruppe\n"
+#~ "  -h, --help                    vis denne hjælpebesked og afslut\n"
+#~ "  -K, --key NØGLE=VÆRDI         tilsidesætter standardværdier i\n"
+#~ "                                /etc/login.defs\n"
+#~ "  -o, --non-unique              tillad gruppe med dupleret\n"
+#~ "                                (ikke-unikt) GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Brug: groupmod [tilvalg] GRUPPE\n"
+#~ "\n"
+#~ "Tilvalg:\n"
+#~ "  -g, --gid GID                 gennemtving GID til den nye gruppe\n"
+#~ "  -h, --help                    vis denne hjælpebesked og afslut\n"
+#~ "  -n, --new-name NY_GRUPPE      gennemtving NY_GRUPPE-navn efter GRUPPE\n"
+#~ "  -o, --non-unique              tillad gruppe med dupleret (ikke-unikt) "
+#~ "GID\n"
+#~ "                                efter GRUPPE\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Brug: useradd [tilvalg] LOGIND\n"
+#~ "\n"
+#~ "Tilvalg:\n"
+#~ "  -b, --base-dir GRUNDMAPPE     Grundmappe for den nye brugerkontos\n"
+#~ "                                hjemmebibliotek\n"
+#~ "  -c, --comment KOMMENTAR       sæt den nye brugerkontos GECOS-felt\n"
+#~ "  -d, --home-dir HJEMMEMAPPE    den nye brugerkontos hjemmemappe\n"
+#~ "  -D, --defaults                vis skal gem ændret standard\n"
+#~ "                                useradd-opsætning\n"
+#~ "  -e, --expiredate UDLØBSDATO   sæt kontoens udløbsdatur til UDLØBSDATO\n"
+#~ "  -f, --inactive INAKTIV        sæt inaktiv adgangskode efter udløb til\n"
+#~ "                                INAKTIV\n"
+#~ "  -g, --gid GRUPPE              gennemtving brugen af GRUPPE til den nye\n"
+#~ "                                brugerkonto\n"
+#~ "  -G, --groups GRUPPER          vis den nye brugerkontos supplerende "
+#~ "grupper\n"
+#~ "  -h, --help                    vis denne hjælp og afslut\n"
+#~ "  -k, --skel SKELETMAPPE        angiv en alternativ skeletmappe\n"
+#~ "  -K, --key NØGLE=VÆRDI         tilsidesætter standardindstillingerne\n"
+#~ "                                i /etc/login.defs\n"
+#~ "  -m, --create-home             opret hjemmemappe til den nye "
+#~ "brugerkonto\n"
+#~ "  -o, --non-unique              tillad oprettelse af ens (ikke-unikke) "
+#~ "UID\n"
+#~ "  -p, --password ADGANGSKODE    brug krypteret adgangskode til den nye\n"
+#~ "                                brugerkonto\n"
+#~ "  -s, --shell SKAL              den nye brugerkontos logind-skal\n"
+#~ "  -u, --uid UID                 gennemtving brugen af bruger-ID'en UID "
+#~ "til\n"
+#~ "                                den nye brugerkonto\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Adgangskode er sat til at udløbe."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: kan ikke låse adgangskodefil\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: kan ikke åbne adgangskodefil\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: kan ikke låse skyggeadgangskodefil\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: kan ikke åbne skyggeadgangskodefil\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: kan ikke genskrive skyggeadgangskodefilen\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: kan ikke genskrive adgangskodefilen\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: kan ikke opdatere adgangskodefil\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: kan ikke opdatere skyggeadgangskodefil\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tFulde navn: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tRum-nummer: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tArbejdstelefon: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tHjemmetelefon: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Kan ikke låse adgangskodefilen; forsøg igen senere.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Kan ikke åbne adgangskodefilen.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s ikke fundet i /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Fejl under opdatering af adgangskodelinje.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Kan ikke skrive ændringerne til adgangskodefilen.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Kan ikke låse adgangskodefilen op.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: kan ikke låse gruppefilen\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: kan ikke åbne gruppefilen\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: Kan ikke låse gshadow-filen\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: Kan ikke åbne skyggefilen\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: fejl under opdatering af skyggefil\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: fejl under opdatering af gruppelinje\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: linje %d: ukendt gruppe %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: linje %d: kan ikke opdatere posten\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: Kan ikke låse skyggefilen\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: fejl under opdatering af skyggefil\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: fejl under opdatering af adgangskodefil\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: linje %d: ukendt bruger %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: linje %d: kan ikke opdatere adgangskodelinje\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: ukendt bruger\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Ukendt bruger: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Brug: %s [-r|-R] gruppe\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "      %s [-a bruger] gruppe\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "      %s [-d bruger] gruppe\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "      %s [-A bruger,...] [-M bruger,...] gruppe\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "      %s [-M bruger,...] gruppe\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: Kan ikke opnå lås\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: Kan ikke opnå skyggelås\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: kan ikke åbne fil\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: kan ikke genskrive fil\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: kan ikke genskrive skyggefil\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: kan ikke låse fil op\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: kan ikke opdatere linje\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: kan ikke opdatere skyggelinje\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "ukendt gruppe: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: kan ikke åbne fil\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: Kan ikke åbne skyggefilen\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Hvem er du?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: ukendt medlem %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: fejl under tilføjelse af gruppelinje\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: kan ikke genskrive gruppefil\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: kan ikke genskrive skyggegruppefil\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: kan ikke låse gruppefil\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: kan ikke åbne gruppefil\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: kan ikke låse skyggegruppefil\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: kan ikke åbne skyggegruppefil\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u er ikke unikt\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: fejl under fjernelse af gruppelinje\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: fejl under fjernelse af skyggegruppelinje\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: kan ikke fjerne brugerens primære gruppe.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Medlemmet, der skulle slettes, blev ikke fundet\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Brug: groupmems -a brugernavn| -d brugernavn | -D | -l [-g gruppenavn]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Kun root kan tilføje medlemmer til andre grupper\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Gruppeadgang kræves\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Ikke primær ejer af den aktuelle gruppe\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM-autentifikation mislykkedes for\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Kan ikke låse gruppefil\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Kan ikke åbne gruppefil\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Kan ikke lukke gruppefil\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s blev ikke fundet i /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u er ikke en unik GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s er ikke et unikt navn\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: kan ikke genskrive adgangskodefilen\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: kunne ikke låse adgangskodefilen\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: kunne ikke åbne adgangskodefilen\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: kan ikke låse filen %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: kan ikke opdatere skygge-linjen for %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: kan ikke opdatere linjen for gruppen %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: kan ikke låse skyggegruppefilen\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: kan ikke åbne skyggegruppefilen\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: kan ikke fjerne skyggegruppen %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: kan ikke opdatere skyggegruppefilen\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: kan ikke opdatere gruppefilen\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: kan ikke slette skyggegruppefilen\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "ukendt UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "ukendt GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: gruppen %s eksisterer ikke\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: brugeren %s eksisterer ikke\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: ugyldigt brugernavn '%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: kan ikke låse /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: kan ikke låse /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: kan ikke låse /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: kan ikke låse /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: kan ikke åbne filer\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: fejl under opdatering af filerne\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: linje %d: kan ikke finde brugeren %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: kan ikke opdatere adgangskodelinjen for  %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: kan ikke låse adgangskodefil\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: kan ikke åbne adgangskodefil\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: kan ikke fjerne skyggelinjen for %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: kan ikke opdatere skyggefilen\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: kan ikke opdatere adgangskodefilen\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: kan ikke opdatere linje for brugeren %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: kan ikke slette skyggeadgangskodefilen\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: ukendt GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: ukendt gruppe %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: løbet tør for hukommelse i update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: kan ikke genskrive adgangskodefilen\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: kan ikke genskrive skyggeadgangskodefilen\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: kunne ikke låse skyggeadgangskodefilen\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: kunne ikke åbne skyggeadgangskodefilen\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: fejl under låsning af gruppefil\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: fejl under åbning af gruppefil\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: fejl under låsning af skyggegruppefil\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: fejl under åbning af skyggegruppefil\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: fejl under tilføjelse af ny adgangskodelinje\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: fejl under tilføjelse af ny skyggeadgangskode-linje\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: advarsel: CREATE_HOME understøttes ikke, brug i stedet -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: fejl under opdatering af gruppelinje\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: fejl under opdatering af gruppelinje\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: kan ikke åbne gruppefilen\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: kan ikke åbne skyggegruppefilen\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: fejl under sletning af adgangskodelinje\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: fejl under sletning af skyggeadgangskodelinje\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: brugeren %s eksisterer ikke\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: fejl under tilføjelse af gruppelinje\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu er ikke unik\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: fejl under ændring af adgangskodelinje\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: fejl under fjernelse af adgangskodelinje\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: fejl under fjernelse af skyggeadgangskodelinje\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: kan ikke få unik GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " på '%.100s' fra '%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " på '%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: linje %d: kan ikke oprette UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: navnet %s er ikke unikt\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Brug: chgpasswd [tilvalg]\n"
+#~ "\n"
+#~ "Tilvalg:\n"
+#~ "  -e, --encrypted\tde angivne adgangskoder er krypterede\n"
+#~ "  -h, --help\t\tvis denne hjælpetekst og afslut\n"
+#~ "  -m, --md5\t\tbrug MD5-kryptering i stedet for DES, når de angivne\n"
+#~ "\t\t\tadgangskoder ikke er krypterede\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Ingen adgangskodefil\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Beklager.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Beklager, adgangskoden for %s kan endnu ikke ændres.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Beklager."
diff --git a/po/de.gmo b/po/de.gmo
new file mode 100644 (file)
index 0000000..5c072ef
Binary files /dev/null and b/po/de.gmo differ
diff --git a/po/de.po b/po/de.po
new file mode 100644 (file)
index 0000000..09ee466
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,2330 @@
+# shadow de.po
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Frank Schmid <frank@cs-schmid.de>, 2002
+# Holger Wansing <linux@wansing-online.de>, 2006, 2008, 2009.
+# Patches, suggestions, etc welcome.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.1.1\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2009-05-08 13:23+0100\n"
+"Last-Translator: Holger Wansing <linux@wansing-online.de>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Mehrere Einträge namens »%s« in %s. Bitte beheben Sie dies mit pwck oder "
+"grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "Verschlüsselungsmethode von libcrypt nicht unterstützt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+"Konfigurationsfehler - Wert für %s konnte nicht ausgewertet werden: »%s«"
+
+msgid "Could not allocate space for config info.\n"
+msgstr ""
+"Es konnte kein Speicherplatz für Konfigurationsinformationen reserviert "
+"werden.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"Konfigurationsfehler - Element »%s« unbekannt (Administrator verständigen).\n"
+
+msgid "Password: "
+msgstr "Passwort: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Passwort von %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Warnung: unbekannte Gruppe %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Warnung: zu viele Gruppen\n"
+
+msgid "Your password has expired."
+msgstr "Ihr Passwort ist abgelaufen."
+
+msgid "Your password is inactive."
+msgstr "Ihr Passwort ist inaktiv."
+
+msgid "Your login has expired."
+msgstr "Ihr Benutzerzugang ist abgelaufen."
+
+msgid "  Contact the system administrator."
+msgstr "  Verständigen Sie den Systemadministrator."
+
+msgid "  Choose a new password."
+msgstr "  Wählen Sie ein neues Passwort."
+
+msgid "You must change your password."
+msgstr "Sie müssen Ihr Passwort ändern."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Ihr Passwort läuft in %ld Tagen ab.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Ihr Passwort läuft morgen ab."
+
+msgid "Your password will expire today."
+msgstr "Ihr Passwort läuft heute ab."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Audit-Schnittstelle konnte nicht geöffnet werden - Abbruch.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Eigentümer oder Modus von tty stdin kann nicht geändert werden: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: Entsperren von %s fehlgeschlagen.\n"
+
+msgid "Environment overflow\n"
+msgstr "Umgebungsüberlauf\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Sie dürfen $%s nicht ändern.\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d Fehlversuch seit letzter Anmeldung.\n"
+"Der letzte war am %s auf %s.\n"
+msgstr[1] ""
+"%d Fehlversuche seit letzter Anmeldung.\n"
+"Der letzte war am %s auf %s.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: Keine einmalige System-UID bekommen (keine UIDs mehr verfügbar).\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Keine einmalige GID bekommen (keine GIDs mehr verfügbar).\n"
+
+#, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: Keine einmalige System-UID bekommen (keine UIDs mehr verfügbar).\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: Keine einmalige UID bekommen (keine UIDs mehr verfügbar).\n"
+
+msgid "Too many logins.\n"
+msgstr "Zu viele Anmeldungen.\n"
+
+msgid "You have new mail."
+msgstr "Neue E-Mails vorhanden."
+
+msgid "No mail."
+msgstr "Keine E-Mails vorhanden."
+
+msgid "You have mail."
+msgstr "E-Mails vorhanden."
+
+msgid "no change"
+msgstr "keine Änderungen"
+
+msgid "a palindrome"
+msgstr "ein Palindrom"
+
+msgid "case changes only"
+msgstr "nur Änderungen bei Groß-/Kleinschreibung"
+
+msgid "too similar"
+msgstr "zu ähnlich"
+
+msgid "too simple"
+msgstr "zu einfach"
+
+msgid "rotated"
+msgstr "rotiert"
+
+msgid "too short"
+msgstr "zu kurz"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Schlechtes Passwort: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() fehlgeschlagen, Fehler %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: Passwort nicht geändert\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: Passwort erfolgreich geändert\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Falsches Passwort für %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Ungültiger Wert für ENCRYPT_METHOD: »%s«.\n"
+"Wähle Standard DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Es konnte nicht in das Verzeichnis »%s« gewechselt werden.\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Kein Verzeichnis, Anmeldung mit HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s konnte nicht ausgeführt werden"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Ungültiges root-Verzeichnis »%s«\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "root-Verzeichnis kann nicht auf »%s« geändert werden.\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Ihr tty-Name konnte nicht festgestellt werden."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: Speicher erschöpft\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) fehlgeschlagen\n"
+
+msgid "No"
+msgstr "Nein"
+
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Aufruf: chage [Optionen] [BENUTZERZUGANG]\n"
+"\n"
+"Optionen:\n"
+"  -d, --lastday LETZTER_TAG     Tag der letzten Passwortänderung auf\n"
+"                                LETZTER_TAG setzen\n"
+"  -E, --expiredate ABL_DATUM    Ablaufdatum des Benutzerzugangs auf\n"
+"                                ABL_DATUM setzen\n"
+"  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+"  -I, --inactive INAKTIV        Passwort nach Ablauf von INAKTIV\n"
+"                                deaktivieren\n"
+"  -l, --list                    Informationen zu Ablaufdaten usw. anzeigen\n"
+"  -m, --mindays MIN_TAGE        Minimale Anzahl der Tage vor\n"
+"                                Passwortänderung auf MIN_TAGE setzen\n"
+"  -M, --maxdays MAX_TAGE        Maximale Anzahl der Tage vor\n"
+"                                Passwortänderung auf MAX_TAGE setzen\n"
+"  -W, --warndays WARN_TAGE      Anzahl der Tage für Ablaufwarnung auf\n"
+"                                WARN_TAGE setzen\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"Geben Sie einen neuen Wert an oder drücken Sie ENTER für den Standardwert"
+
+msgid "Minimum Password Age"
+msgstr "Minimales Passwortalter"
+
+msgid "Maximum Password Age"
+msgstr "Maximales Passwortalter"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Letzte Passwortänderung (JJJJ-MM-TT)"
+
+msgid "Password Expiration Warning"
+msgstr "Passwortablaufwarnung"
+
+msgid "Password Inactive"
+msgstr "Passwort inaktiv"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Ablaufdatum des Benutzerzugangs (JJJJ-MM-TT)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Letzte Passwortänderung\t\t\t\t\t: "
+
+msgid "never"
+msgstr "nie"
+
+msgid "password must be changed"
+msgstr "Passwort muss geändert werden"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Passwort läuft ab\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Passwort inaktiv\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Benutzerzugang läuft ab\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimale Anzahl der Tage zwischen Passwortänderungen\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maximale Anzahl der Tage zwischen Passwortänderungen\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Anzahl Tage, an denen vor Passwortablauf gewarnt wird\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: Ungültiges Datum »%s«\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: Ungültiges numerisches Argument »%s«\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: benutzen Sie »l« nicht mit anderen Optionen.\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Erlaubnis verweigert.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Ihr Benutzername konnte nicht bestimmt werden.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM-Authentifizierung fehlgeschlagen\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr ""
+"%s: %s konnte nicht gesperrt werden; versuchen Sie es später noch einmal.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: %s konnte nicht geöffnet werden.\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: Fehler beim Schreiben der Änderungen nach %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: shadow-Passwortdatei ist nicht vorhanden.\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: Entfernen der Privilegien (%s) fehlgeschlagen.\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: Benutzer »%s« ist in %s nicht vorhanden.\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Passwortalterung für %s wird geändert.\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: Fehler beim Ändern der Felder\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Aufruf: %s [-f vollst_Name] [-r Raumnummer] [-w Tel_gesch]\n"
+"\t[-h Tel_privat] [-o sonstiges] [Benutzer]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Aufruf: %s [-f vollst_Name] [-r Raumnummer] [-w Tel_gesch] [-h Tel_privat]\n"
+
+msgid "Full Name"
+msgstr "Vollständiger Name"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Raumnummer"
+
+msgid "Work Phone"
+msgstr "Telefon geschäftlich"
+
+msgid "Home Phone"
+msgstr "Telefon privat"
+
+msgid "Other"
+msgstr "Sonstiges"
+
+msgid "Cannot change ID to root.\n"
+msgstr "ID konnte nicht auf root geändert werden.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: Name mit Zeichen, die nicht zum ASCII-Zeichensatz gehören: »%s«\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: Ungültiger Name: »%s«\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+"%s: Raumnummer mit Zeichen, die nicht zum ASCII-Zeichensatz gehören: »%s«\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: Ungültige Raumnummer: »%s«\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: Ungültige Telefon-Nr. (geschäftlich): »%s«\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: Ungültige Telefon-Nr. (privat): »%s«\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: »%s« enthält Zeichen, die nicht zum ASCII-Zeichensatz gehören.\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: »%s« enthält ungültige Zeichen.\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: Benutzer »%s« ist nicht vorhanden.\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: Benutzer »%s« auf dem NIS-Client konnte nicht geändert werden.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: »%s« ist der NIS-Master für diesen Client.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Benutzerinformationen für %s werden geändert.\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: Felder zu lang\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Aufruf: %s [Optionen]\n"
+"\n"
+"Optionen:\n"
+"  -c, --crypt-method            Verschlüsselungsmethode (eine der\n"
+"                                folgenden: %s)\n"
+"  -e, --encrypted               Angegebene Passwörter sind verschlüsselt\n"
+"  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+"  -m, --md5                     Die Klartext-Passwörter mittels MD5-"
+"Algorithmus\n"
+"                                verschlüsseln\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds              Anzahl der SHA-Runden für den SHA*-\n"
+"                                Verschlüsselungs-Algorithmus\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s ist nur zusammen mit %s erlaubt.\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: -c, -e und -m können nur exklusiv genutzt werden.\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: Nicht unterstützte Verschlüsselungsmethode: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: Zeile %d: Zeile zu lang\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: Zeile %d: Neues Passwort fehlt\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: Zeile %d: Gruppe »%s« existiert nicht\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: Zeile %d: neuer %s-Eintrag »%s« konnte nicht vorbereitet werden.\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: Fehler entdeckt, Änderungen verworfen\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -s, --sha-rounds              Anzahl der SHA-Runden für den SHA*-\n"
+"                                Verschlüsselungs-Algorithmus\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: user '%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: Zeile %d: Benutzer »%s« ist nicht vorhanden.\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: Zeile %d: Benutzer »%s« ist nicht vorhanden.\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Aufruf: chsh [Optionen] [BENUTZERZUGANG]\n"
+"\n"
+"Optionen:\n"
+"  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+"  -s, --shell SHELL             Neue Login-Shell für den Benutzerzugang\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Login-Shell"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Sie dürfen die Shell für »%s« nicht ändern.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Login-Shell für %s wird geändert.\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Ungültiger Eintrag: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s: %s ist eine ungültige Shell.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Aufruf: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+"  -Z, --selinux-user            neue SELinux-Benutzer-Zuordnung für den\n"
+"                                Benutzerzugang\n"
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to get the entry for UID %d\n"
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr "faillog: Auslesen des Eintrags für UID %d fehlgeschlagen\n"
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Login       Fehlver. Maximum Letzter                  Auf\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus übrig]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds Sperre]"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to reset fail count for UID %d\n"
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+"faillog: Zurücksetzen des Fehlanmeldungszählers für UID %d fehlgeschlagen\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set max for UID %d\n"
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr "faillog: Setzen des Max-Werts für UID %d fehlgeschlagen\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set locktime for UID %d\n"
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr "faillog: Setzen der Sperrzeit für UID %d fehlgeschlagen\n"
+
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "lastlog: Unbekannter Benutzer oder Bereich: %s\n"
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "faillog: %s kann nicht geöffnet werden: %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr "faillog: Auslesen der Größe von %s fehlgeschlagen: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+"Aufruf: %s [Option] GRUPPE\n"
+"\n"
+"Optionen:\n"
+"  -a, --add NUTZER               NUTZER zu GRUPPE hinzufügen\n"
+"  -d, --delete NUTZER            NUTZER aus GRUPPE entfernen\n"
+"  -r, --remove-password          Passwort der GRUPPE entfernen\n"
+"  -R, --restrict                 Zugriff zu GRUPPE auf ihre Mitglieder\n"
+"                                 beschränken\n"
+"  -M, --members NUTZER,...       Liste der Mitglieder von GRUPPE setzen\n"
+"%s\n"
+"\n"
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"  -A, --administrators ADMIN,...\n"
+"                                 setze die Liste der Administratoren für "
+"GRUPPE.\n"
+"Außer für -A und -M können die Optionen nicht kombiniert werden.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Die Optionen können nicht kombiniert werden.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: shadow-Gruppenpasswörter für -A erforderlich\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: Gruppe »%s« existiert nicht in %s.\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: Fehler beim Schließen von %s im Nur-Lese-Modus\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Passwort für die Gruppe %s wird geändert.\n"
+
+msgid "New Password: "
+msgstr "Neues Passwort: "
+
+msgid "Re-enter new password: "
+msgstr "Passwort wiederholen: "
+
+msgid "They don't match; try again"
+msgstr "Keine Übereinstimmung; versuchen Sie es noch einmal"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Versuchen Sie es später noch einmal.\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Benutzer %s wird zur Gruppe %s hinzugefügt.\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Benutzer %s wird aus der Gruppe %s entfernt.\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: Benutzer »%s« ist kein Mitglied von »%s«.\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Kein tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -s, --sha-rounds              Anzahl der SHA-Runden für den SHA*-\n"
+"                                Verschlüsselungs-Algorithmus\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+"  -Z, --selinux-user            neue SELinux-Benutzer-Zuordnung für den\n"
+"                                Benutzerzugang\n"
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds              Anzahl der SHA-Runden für den SHA*-\n"
+"                                Verschlüsselungs-Algorithmus\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+"  -Z, --selinux-user            neue SELinux-Benutzer-Zuordnung für den\n"
+"                                Benutzerzugang\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: »%s« ist kein gültiger Gruppenname.\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: Ungültige Gruppen-ID »%s«\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K erfordert SCHLÜSSEL=WERT\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: Gruppe »%s« existiert bereits.\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID »%lu« existiert bereits.\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Aufruf: groupdel Gruppe\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: Eintrag »%s« konnte nicht aus %s entfernt werden.\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: Primäre Gruppe des Benutzers »%s« konnte nicht entfernt werden.\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: Gruppe »%s« existiert nicht.\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: Gruppe »%s« ist eine NIS-Gruppe.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s ist der NIS-Master.\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: Benutzer »%s« ist bereits ein Mitglied von »%s«.\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Zu wenig Speicher. %s kann nicht aktualisiert werden.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+"Aufruf: groupmems [Optionen] [Aktion]\n"
+"\n"
+"Optionen:\n"
+"  -g, --group Gruppenname       Ändere Gruppenname statt der Gruppe des\n"
+"                                Benutzers (nur root)\n"
+"\n"
+"Aktionen:\n"
+"  -a, --add Benutzername        Benutzername zu den Mitgliedern der Gruppe\n"
+"                                hinzufügen\n"
+"  -d, --delete Benutzername     Benutzername von den Mitgliedern der Gruppe\n"
+"                                entfernen\n"
+"  -p, --purge                   Alle Mitglieder aus der Gruppe entfernen\n"
+"  -l, --list                    Die Mitglieder der Gruppe auflisten\n"
+"\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: Ihr Gruppenname passt nicht zu Ihrem Benutzername.\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: Nur root kann die Option -g/--group nutzen.\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+"  -Z, --selinux-user            neue SELinux-Benutzer-Zuordnung für den\n"
+"                                Benutzerzugang\n"
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: Ungültiger Gruppenname »%s«\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: Gruppe %s ist eine NIS-Gruppe.\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: Unbekannter Benutzer %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Aufruf: %s [-r] [-s] [Gruppe [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Aufruf: %s [-r] [-s] [Gruppe]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s und -r sind nicht kompatibel.\n"
+
+msgid "invalid group file entry"
+msgstr "Ungültiger Eintrag in group-Datei"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "Zeile »%s« löschen?"
+
+msgid "duplicate group entry"
+msgstr "Doppelter Gruppeneintrag"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "Ungültiger Gruppenname »%s«\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "Ungültige Gruppen-ID »%lu«\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "Gruppe %s: Kein Benutzer %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "Mitglied »%s« löschen?"
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "Kein passender group-Datei-Eintrag in %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "Gruppe »%s« zu %s hinzufügen?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "Ungültiger Eintrag in shadow-group-Datei"
+
+msgid "duplicate shadow group entry"
+msgstr "Doppelter Eintrag für shadow-Gruppe"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "shadow-Gruppe %s: Benutzer %s ist kein Administrator.\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "Administratives Mitglied »%s« löschen? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "shadow-Gruppe %s: Kein Benutzer %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: Die Dateien wurden aktualisiert.\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: Keine Änderungen\n"
+
+msgid "Usage: grpconv\n"
+msgstr "Aufruf: grpconv\n"
+
+msgid "Usage: grpunconv\n"
+msgstr "Aufruf: grpunconv\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: %s kann nicht gelöscht werden.\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Aufruf: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Aufruf: id\n"
+
+msgid " groups="
+msgstr " Gruppen="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Aufruf: lastlog [Optionen]\n"
+"\n"
+"Optionen:\n"
+"  -b, --before TAGE             Nur lastlog-Aufzeichnungen zeigen, die "
+"älter\n"
+"                                als TAGE Tage sind\n"
+"  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+"  -t, --time TAGE               Nur lastlog-Aufzeichnungen zeigen, die "
+"jünger\n"
+"                                als TAGE Tage sind\n"
+"  -u, --user BENUTZERZUGANG     lastlog-Eintrag für BENUTZERZUGANG anzeigen\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "lastlog: Failed to get the entry for UID %d\n"
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr "lastlog: Auslesen des Eintrags für UID %d fehlgeschlagen\n"
+
+msgid "Username         Port     From             Latest"
+msgstr "Benutzername     Port     Von              Letzter"
+
+msgid "Username                Port     Latest"
+msgstr "Benutzername            Port     Letzter"
+
+msgid "**Never logged in**"
+msgstr "**Noch nie angemeldet**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: Unerwartetes Argument: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr "lastlog: Auslesen der Größe von %s fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Aufruf: %s [-p] [Name]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h Rechner] [-f Name]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r Rechner\n"
+
+#, fuzzy, c-format
+#| msgid "configuration error - cannot parse %s value: '%s'"
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+"Konfigurationsfehler - Wert für %s konnte nicht ausgewertet werden: »%s«"
+
+msgid "Invalid login time"
+msgstr "Ungültige Login-Zeit"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"System wegen planmäßigen Wartungsarbeiten geschlossen"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Trennung abgebrochen -- root-Login erlaubt.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Login nach %d Sekunden wegen\n"
+"Zeitüberschreitung abgebrochen.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Kein utmp-Eintrag. Sie müssen »login« vom niedrigsten »sh«-Level ausführen."
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM-Fehler, Abbruch: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s Login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maximale Anzahl der Versuche überschritten (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: Abbruch durch PAM angefordert\n"
+
+msgid "Login incorrect"
+msgstr "Login fehlerhaft"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s Login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: Fehler beim Fork: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY auf %s fehlgeschlagen"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Warnung: Login nach temporärer Sperre reaktiviert."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Letztes Login: %s auf %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Letztes Login: %.19s auf %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " von %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"Login-Zeit überschritten\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Aufruf: logoutd\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Aufruf: newgrp [-] [Gruppe]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Aufruf: sg Gruppe [[-c] Befehl]\n"
+
+msgid "Invalid password.\n"
+msgstr "Ungültiges Passwort.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: Fehler beim Fork: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID »%lu« existiert nicht.\n"
+
+msgid "too many groups\n"
+msgstr "zu viele Gruppen\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+"  -Z, --selinux-user            neue SELinux-Benutzer-Zuordnung für den\n"
+"                                Benutzerzugang\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+"%s: Gruppe »%s« ist eine shadow-Gruppe, existiert aber nicht in /etc/group.\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: Ungültige Benutzer-ID »%s«\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: Ungültiger Benutzername »%s«\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: Zeile %d: Ungültige Zeile\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: Eintrag für Benutzer %s kann nicht aktualisiert werden (ist nicht in der "
+"passwd-Datenbank).\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: Zeile %d: Benutzer kann nicht erstellt werden.\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: Zeile %d: Gruppe kann nicht erstellt werden.\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: Zeile %d: Benutzer »%s« existiert nicht in %s.\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: Zeile %d: Passwort kann nicht aktualisiert werden.\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: Zeile %d: mkdir %s fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: Zeile %d: chown %s fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: Zeile %d: Eintrag kann nicht aktualisiert werden.\n"
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Aufruf: passwd [Optionen] [BENUTZERZUGANG]\n"
+"\n"
+"Optionen:\n"
+"  -a, --all                     Passwort-Status für alle Benutzerzugänge\n"
+"                                anzeigen\n"
+"  -d, --delete                  Passwort für den Benutzerzugang löschen\n"
+"  -e, --expire                  Ablauf des Passworts für den Benutzerzugang\n"
+"                                erzwingen\n"
+"  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+"  -k, --keep-tokens             Passwort nur ändern falls abgelaufen\n"
+"  -i, --inactive INAKTIV        Passwort nach Ablauf von INAKTIV\n"
+"                                deaktivieren\n"
+"  -l, --lock                    Benutzerzugang sperren\n"
+"  -n, --mindays MIN_TAGE        Minimale Anzahl der Tage vor\n"
+"                                Passwortänderung auf MIN_TAGE setzen\n"
+"  -q, --quiet                   Nicht so geschwätzig verhalten\n"
+"  -r, --repository REPOSITORY   Passwort ändern in REPOSITORY\n"
+"  -S, --status                  Passwort-Status des Benutzerzugangs "
+"anzeigen\n"
+"  -u, --unlock                  Benutzerzugang entsperren\n"
+"  -w, --warndays WARN_TAGE      Anzahl der Tage für Ablaufwarnung auf\n"
+"                                WARN_TAGE setzen\n"
+"  -x, --maxdays MAX_TAGE        Maximale Anzahl der Tage vor\n"
+"                                Passwortänderung auf MAX_TAGE setzen\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Altes Passwort: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Geben Sie das neue Passwort ein (mindestens %d Zeichen).\n"
+"Bitte benutzen Sie eine Kombination aus Groß- und Kleinbuchstaben\n"
+"sowie Ziffern.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Geben Sie das neue Passwort ein (mindestens %d, höchstens %d Zeichen).\n"
+"Bitte benutzen Sie eine Kombination aus Groß- und Kleinbuchstaben\n"
+"sowie Ziffern.\n"
+
+msgid "New password: "
+msgstr "Neues Passwort: "
+
+msgid "Try again."
+msgstr "Versuchen Sie es noch einmal."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Warnung: Schwaches Passwort (geben Sie es noch einmal ein,\n"
+"um es trotzdem zu verwenden)."
+
+msgid "They don't match; try again.\n"
+msgstr "Sie sind nicht identisch; versuchen Sie es noch einmal.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Das Passwort für %s kann nicht geändert werden.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Das Passwort für %s kann noch nicht geändert werden.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: Das Passwort zu entsperren würde zu einem Benutzerzugang ohne\n"
+"Passwort führen. Sie sollten mit usermod -p ein Passwort setzen, um das\n"
+"Passwort für diesen Benutzerzugang zu entsperren.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: Repository %s nicht unterstützt\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr "%s: %s ist nicht berechtigt, das Passwort von %s zu ändern.\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: Sie dürfen die Passwortinformationen für %s nicht anzeigen oder ändern.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Passwort für %s wird geändert.\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Das Passwort für %s wurde nicht geändert.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Passwort geändert."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Passwortablaufwarnung"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Aufruf: %s [-q] [-r] [-s] [passwort [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s und -r sind nicht kompatibel.\n"
+
+msgid "invalid password file entry"
+msgstr "Ungültiger Eintrag in Passwortdatei"
+
+msgid "duplicate password entry"
+msgstr "Doppelter Passworteintrag"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "Ungültiger Benutzername »%s«\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "Ungültige Benutzer-ID »%lu«\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "Benutzer »%s«: Keine Gruppe %lu\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "Benutzer »%s«: Verzeichnis »%s« existiert nicht.\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "Benutzer »%s«: Programm »%s« existiert nicht.\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "Kein passender Passwortdatei-Eintrag in %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "Füge Benutzer »%s« zu %s hinzu? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "Ungültiger shadow-Passwortdatei-Eintrag"
+
+msgid "duplicate shadow password entry"
+msgstr "Doppelter shadow-Passwort-Eintrag"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "Benutzer %s: Letzte Passwortänderung liegt in der Zukunft.\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: Einträge in %s können nicht sortiert werden.\n"
+
+msgid "Usage: pwconv\n"
+msgstr "Aufruf: pwconv\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: Änderung des Modus' von %s auf 0600 fehlgeschlagen\n"
+
+msgid "Usage: pwunconv\n"
+msgstr "Aufruf: pwunconv\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Zugriff mit su zu diesem Benutzerzugang VERWEIGERT.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Passwort-Authentifizierung umgangen.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Bitte geben Sie Ihr EIGENES Passwort als Authentifizierung ein.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Aufruf: su [Optionen] [BENUTZERZUGANG]\n"
+"\n"
+"Optionen:\n"
+"  -c, --command BEFEHL          BEFEHL an aufgerufene Shell weiterleiten\n"
+"  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+"  -, -l, --login                Mache aus der Shell eine Login-Shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        Umgebungsvariablen nicht zurücksetzen und\n"
+"                                die Shell beibehalten\n"
+"  -s, --shell SHELL             SHELL anstatt der Vorgabe aus passwd\n"
+"                                benutzen\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: Muss von einem Terminal gestartet werden.\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: Fehler %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Unbekannte ID: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "su %s ist Ihnen nicht erlaubt.\n"
+
+msgid "(Enter your own password)"
+msgstr "(Geben Sie Ihr eigenes Passwort ein)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignoriert)\n"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Authentifizierung fehlgeschlagen\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: su ist Ihnen derzeit nicht erlaubt.\n"
+
+msgid "No shell\n"
+msgstr "Keine Shell\n"
+
+msgid "No password file"
+msgstr "Keine Passwortdatei"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY fehlgeschlagen"
+
+msgid "No password entry for 'root'"
+msgstr "Kein Passworteintrag für »root«"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Geben Sie Strg-D ein, um mit dem normalen Startvorgang fortzufahren\n"
+"(oder geben Sie zur Systemwartung das root-Passwort ein):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Wechsle in den Systemwartungsmodus"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: die %s-Konfiguration in %s wird ignoriert.\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: Neue defaults-Datei kann nicht erzeugt werden.\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: Neue defaults-Datei kann nicht geöffnet werden.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: Zeile %d: chown %s fehlgeschlagen: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: Umbenennen: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: Die Gruppe »%s« ist eine NIS-Gruppe.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: Zu viele Gruppen angegeben (max. %d).\n"
+
+#, c-format
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds              Anzahl der SHA-Runden für den SHA*-\n"
+"                                Verschlüsselungs-Algorithmus\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              Anzahl der SHA-Runden für den SHA*-\n"
+"                                Verschlüsselungs-Algorithmus\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              Anzahl der SHA-Runden für den SHA*-\n"
+"                                Verschlüsselungs-Algorithmus\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds              Anzahl der SHA-Runden für den SHA*-\n"
+"                                Verschlüsselungs-Algorithmus\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+"  -Z, --selinux-user            neue SELinux-Benutzer-Zuordnung für den\n"
+"                                Benutzerzugang\n"
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds              Anzahl der SHA-Runden für den SHA*-\n"
+"                                Verschlüsselungs-Algorithmus\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -s, --sha-rounds              Anzahl der SHA-Runden für den SHA*-\n"
+"                                Verschlüsselungs-Algorithmus\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+"  -Z, --selinux-user            neue SELinux-Benutzer-Zuordnung für den\n"
+"                                Benutzerzugang\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+"  -Z, --selinux-user            neue SELinux-Benutzer-Zuordnung für den\n"
+"                                Benutzerzugang\n"
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+"  -Z, --selinux-user SEUSER     Verwende den Benutzernamen SEUSER für die "
+"SELinux-\n"
+"                                Benutzer-Zuordnung\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: Ungültiges Basis-Verzeichnis »%s«\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: Ungültiger Kommentar »%s«\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: Ungültiges Home-Verzeichnis »%s«\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: shadow-Passwörter für -e erforderlich\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: shadow-Passwörter für -f erforderlich\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: Ungültiges Feld »%s«\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: Ungültige Shell »%s«\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z erfordert einen Kernel, in dem SELinux aktiviert ist.\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: Optionen %s und %s stehen im Konflikt zueinander.\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: Zurücksetzen des faillog-Eintrags für UID %lu fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: Zurücksetzen des lastlog-Eintrags für UID %lu fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: Warnung: Die SELinux-Benutzer-Zuordnung des Benutzernamens %s zu %s ist\n"
+"fehlgeschlagen.\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: Verzeichnis %s kann nicht erstellt werden.\n"
+
+msgid "Creating mailbox file"
+msgstr "Erzeuge Mailbox-Datei"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Gruppe »mail« nicht gefunden. Erzeuge Mailbox-Datei des Benutzers mit Modus "
+"0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Zugriffsrechte der Mailboxdatei werden gesetzt"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: Benutzer »%s« existiert bereits\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: Gruppe %s existiert - wenn Sie den Benutzer zur Gruppe hinzufügen\n"
+"möchten, benutzen Sie -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: Benutzer kann nicht erstellt werden\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu ist nicht einmalig\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: Gruppe kann nicht erzeugt werden\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: Warnung: Das Home-Verzeichnis existiert bereits.\n"
+"Es werden keine Dateien vom skel-Verzeichnis dorthin kopiert.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Aufruf: userdel [Optionen] BENUTZERZUGANG\n"
+"\n"
+"Optionen:\n"
+"  -f, --force                   Entfernen von Dateien erzwingen, auch wenn\n"
+"                                sie nicht Eigentum des zu löschenden\n"
+"                                Benutzers sind\n"
+"  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+"  -r, --remove                  Entferne Home-Verzeichnis und Mail-Spool\n"
+"\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Gruppe %s ist die primäre Gruppe eines anderen Benutzers und wird\n"
+"nicht entfernt.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove %s: %s"
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: Warnung: %s kann nicht gelöscht werden: %s"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s nicht im Besitz von %s, wird nicht gelöscht.\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: Benutzer %s ist ein NIS-Benutzer.\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: Benutzer %s ist derzeit angemeldet.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: Ungültiges Home-Verzeichnis »%s«\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: Verzeichnis %s wird nicht gelöscht (würde das Home-Verzeichnis des\n"
+"Benutzers %s löschen).\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: Fehler beim Löschen des Verzeichnisses %s\n"
+
+#, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Aufruf: usermod [Optionen] BENUTZERZUGANG\n"
+"\n"
+"Optionen:\n"
+"  -c, --comment KOMMENTAR       Neuer KOMMENTAR im GECOS-Feld\n"
+"  -d, --home HOME_DIR           Neues Home-Verzeichnis für den Benutzer-\n"
+"                                zugang\n"
+"  -e, --expiredate ABL_DATUM    Ablaufdatum auf ABL_DATUM setzen\n"
+"  -f, --inactive INAKTIV        Passwort nach Ablauf von INAKTIV\n"
+"                                deaktivieren\n"
+"  -g, --gid GRUPPE              Erzwinge GRUPPE als neue primäre Gruppe\n"
+"  -G, --groups GRUPPEN          Neue Liste zusätzlicher GRUPPEN\n"
+"  -a, --append                  Benutzer zu zusätzlichen Gruppen "
+"hinzufügen,\n"
+"                                die mit der Option -G angegeben werden, "
+"ohne\n"
+"                                ihn dabei aus anderen Gruppen zu entfernen\n"
+"  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+"  -l, --login NEUER_NAME        Neuer Wert für den Benutzerzugangsnamen\n"
+"  -L, --lock                    Den Benutzerzugang sperren\n"
+"  -m, --move-home               Den Inhalt des Home-Verzeichnisses an den\n"
+"                                neuen Ort verschieben (nur mit -d benutzen)\n"
+"  -o, --non-unique              Benutzung von doppelter (nicht einmaliger)\n"
+"                                UID erlauben\n"
+"  -p, --password PASSWORD       Ein verschlüsseltes Passwort als neues\n"
+"                                Passwort verwenden\n"
+"  -s, --shell SHELL             Neue Login-Shell des Benutzerzugangs\n"
+"  -u, --uid UID                 Neue UID des Benutzerzugangs\n"
+"  -U, --unlock                  Den Benutzerzugang entsperren\n"
+"%s\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+"  -Z, --selinux-user            neue SELinux-Benutzer-Zuordnung für den\n"
+"                                Benutzerzugang\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: Das Passwort dieses Benutzer zu entsperren würde zu einem "
+"Benutzerzugang\n"
+"ohne Passwort führen. Sie sollten mit usermod -p ein Passwort setzen, um "
+"diesen\n"
+"Benutzerzugang zu entsperren.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: Benutzer »%s« existiert bereits in %s.\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: Keine Optionen angegeben\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: shadow-Passwörter für -e und -f erforderlich\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L, -p und -U können nur exklusiv genutzt werden.\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID »%lu« existiert bereits\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: Verzeichnis %s existiert\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: %s kann nicht erstellt werden\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: Besitzer von %s kann nicht geändert werden\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: Warnung: Altes Home-Verzeichnis %s kann nicht komplett gelöscht werden"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: Verzeichnis %s kann nicht in %s umbenannt werden\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: Kopieren des lastlog-Eintrags von Nutzer %lu zu Nutzer %lu "
+"fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: Kopieren des faillog-Eintrags von Nutzer %lu nach Nutzer %lu "
+"fehlgeschlagen: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: Warnung: %s nicht im Besitz von %s.\n"
+
+msgid "failed to change mailbox owner"
+msgstr "Fehler beim Ändern des mailbox-Besitzers"
+
+msgid "failed to rename mailbox"
+msgstr "Fehler beim Umbenennen von mailbox"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Sie haben %s verändert.\n"
+"Aus Konsistenzgründen müssen Sie unter Umständen auch %s ändern.\n"
+"Bitte nutzen Sie dazu den Befehl »%s«.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Aufruf: vipw [Optionen]\n"
+"\n"
+"Optionen:\n"
+"  -g, --group                   Gruppen-Datenbank editieren\n"
+"  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+"  -p, --passwd                  passwd-Datenbank editieren\n"
+"  -q, --quiet                   Nicht so geschwätzig verhalten\n"
+"  -s, --shadow                  shadow- oder gshadow-Datenbank editieren\n"
+"\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: Entfernen von %s fehlgeschlagen\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s ist unverändert.\n"
+
+msgid "Couldn't get file context"
+msgstr "Dateikontext konnte nicht empfangen werden"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () fehlgeschlagen"
+
+msgid "Couldn't lock file"
+msgstr "Datei konnte nicht gesperrt werden"
+
+msgid "Couldn't make backup"
+msgstr "Sicherung konnte nicht erstellt werden"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+"%s: Wiederherstellung von %s fehlgeschlagen: %s\n"
+"(Ihre Änderungen befinden sich in %s)\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Aufruf: faillog [Optionen]\n"
+#~ "\n"
+#~ "Optionen:\n"
+#~ "  -a, --all                     Aufzeichnungen fehlgeschlagener "
+#~ "Anmeldungen\n"
+#~ "                                für alle Benutzer anzeigen\n"
+#~ "  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+#~ "  -l, --lock-time SEK           Den Benutzerzugang nach fehlgeschlagener\n"
+#~ "                                Anmeldung für SEK Sekunden sperren\n"
+#~ "  -m, --maximum MAX             Maximal mögliche Anzahl fehlgeschlagener\n"
+#~ "                                Anmeldungen auf MAX setzen\n"
+#~ "  -r, --reset                   Zähler fehlgeschlagener Anmeldungen\n"
+#~ "                                zurücksetzen\n"
+#~ "  -t, --time TAGE               Aufzeichnungen fehlgeschlagener "
+#~ "Anmeldungen\n"
+#~ "                                anzeigen, die jünger sind als TAGE Tage\n"
+#~ "  -u, --user BENUTZERZUGANG     Aufzeichnungen fehlgeschlagener "
+#~ "Anmeldungen\n"
+#~ "                                anzeigen bzw. Verwalten von Zählern und "
+#~ "Be-\n"
+#~ "                                schränkungen (falls mit Optionen -r, -m "
+#~ "oder -l\n"
+#~ "                                aufgerufen) für den BENUTZERZUGANG\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Aufruf: groupadd [Optionen] GRUPPE\n"
+#~ "\n"
+#~ "Optionen:\n"
+#~ "  -f, --force                   Ohne Fehler beenden, falls die GRUPPE\n"
+#~ "                                bereits existiert\n"
+#~ "  -g, --gid GID                 Benutze GID für die neue GRUPPE\n"
+#~ "  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+#~ "  -K, --key SCHLÜSSEL=WERT      Die Vorgabewerte in /etc/login.defs\n"
+#~ "                                überschreiben\n"
+#~ "  -o, --non-unique              Das Erstellen einer GRUPPE mit einer "
+#~ "nicht\n"
+#~ "                                einmaligen (doppelten) GID erlauben\n"
+#~ "  -p, --password PASSWORT       Verwende verschlüsseltes Passwort für "
+#~ "die\n"
+#~ "                                neue GRUPPE\n"
+#~ "  -r, --system                  Erstelle eine Systemgruppe\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Aufruf: groupmod [Optionen] GRUPPE\n"
+#~ "\n"
+#~ "Optionen:\n"
+#~ "  -g, --gid GID                 Neue GID für die GRUPPE erzwingen\n"
+#~ "  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+#~ "  -n, --new-name NEUE_GRUPPE    Neuen Namen NEUE_GRUPPE für die GRUPPE "
+#~ "erzwingen\n"
+#~ "  -o, --non-unique              Verwendung einer doppelten (nicht "
+#~ "einmaligen)\n"
+#~ "                                GID für die GRUPPE erlauben\n"
+#~ "  -p, --password PASSWORT       Verwende verschlüsseltes Passwort als \n"
+#~ "                                neues Passwort\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Aufruf: useradd [Optionen] BENUTZERZUGANG\n"
+#~ "\n"
+#~ "Optionen:\n"
+#~ "  -b, --base-dir BASIS_VERZ     Basisverzeichnis für das\n"
+#~ "                                Home-Verzeichnis des neuen Benutzers\n"
+#~ "  -c, --comment KOMMENTAR       Kommentar für das GECOS-Feld des neuen\n"
+#~ "                                Benutzers\n"
+#~ "  -d, --home-dir HOME_VERZ      Home-Verzeichnis des neuen Benutzers\n"
+#~ "  -D, --defaults                Anzeigen oder Speichern der "
+#~ "modifizierten\n"
+#~ "                                Standardkonfiguration für useradd\n"
+#~ "  -e, --expiredate ABL_DATUM    Das Ablaufdatum des Benutzerzugangs auf\n"
+#~ "                                ABL_DATUM setzen\n"
+#~ "  -f, --inactive INAKTIV        Passwort nach Ablauf von INAKTIV "
+#~ "deaktivieren\n"
+#~ "  -g, --gid GRUPPE              Gruppenname GRUPPE für neuen Benutzer "
+#~ "erzwingen\n"
+#~ "  -G, --groups GRUPPEN          Liste der zusätzlichen Gruppen für den\n"
+#~ "                                neuen Benutzer\n"
+#~ "  -h, --help                    Diese Hilfe anzeigen, sonst nichts\n"
+#~ "  -k, --skel SKEL_VERZ          Ein alternatives skel-Verzeichnis\n"
+#~ "                                (Vorlagenverzeichnis) angeben\n"
+#~ "  -K, --key SCHLÜSSEL=WERT      Die Vorgaben in /etc/login.defs "
+#~ "überschreiben\n"
+#~ "  -l, --no-log-init             Den Benutzer nicht zu den lastlog- und "
+#~ "faillog-\n"
+#~ "                                Datenbanken hinzufügen\n"
+#~ "  -m, --create-home             Home-Verzeichnis des neuen Benutzers "
+#~ "erstellen\n"
+#~ "  -M, --no-create-home          Kein Home-Verzeichnis für den Benutzer "
+#~ "erstellen\n"
+#~ "                                (überschreibt /etc/login.defs)\n"
+#~ "  -N, --no-user-group           Keine Gruppe mit dem gleichen Namen wie "
+#~ "dem des\n"
+#~ "                                Benutzers erstellen\n"
+#~ "  -o, --non-unique              Benutzer mit doppelter (nicht "
+#~ "einmaliger)\n"
+#~ "                                UID erlauben\n"
+#~ "  -p, --password PASSWORT       Benutze ein verschlüsseltes Passwort für\n"
+#~ "                                den neuen Benutzerzugang\n"
+#~ "  -r, --system                  Erstelle einen Systemzugang\n"
+#~ "  -s, --shell SHELL             Die Login-Shell des neuen "
+#~ "Benutzerzugangs\n"
+#~ "  -u, --uid UID                 Benutzung dieser UID erzwingen\n"
+#~ "  -U, --user-group              Erstelle eine Gruppe mit dem gleichen "
+#~ "Namen wie\n"
+#~ "                                dem des Benutzers\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Aufruf: %s [Optionen] [Eingabe]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            Die Verschlüsselungsmethode (eine der\n"
+#~ "                                folgenden: %s)\n"
+#~ "  -r, --system                  Erzeuge Systemzugänge\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Passwort wird ablaufen."
+
+#~ msgid "setfscreatecon() failed"
+#~ msgstr "setfscreatecon() fehlgeschlagen"
diff --git a/po/dz.gmo b/po/dz.gmo
new file mode 100644 (file)
index 0000000..ed096de
Binary files /dev/null and b/po/dz.gmo differ
diff --git a/po/dz.po b/po/dz.po
new file mode 100644 (file)
index 0000000..b14a904
--- /dev/null
+++ b/po/dz.po
@@ -0,0 +1,2600 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.17\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2006-06-01 15:28+0530\n"
+"Last-Translator: Jurmey Rabgay <jur_gay@yahoo.com>\n"
+"Language-Team: dzongkha <pgeyleg@dit.gov.bt>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Poedit-Language: dzongkha\n"
+"X-Poedit-Country: bhutan\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "རིམ་སྒྲིག་བརྡ་དོན་གྱི་དོན་ལུ་ བར་སྟོང་སྤྲོད་མ་ཚུགས།\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "རིམ་སྒྲིག་འཚོལ་བ་-མ་ཤེས་པའི་རྣམ་གྲངས་ '%s'(བདག་སྐྱོང་པ་བརྡ་བསྐུལ་འབད་)།\n"
+
+msgid "Password: "
+msgstr "ཆོག་ཡིག་:"
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s's ཆོག་ཡིག་:"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "ཉེན་བརྡ་:མ་ཤེས་པའི་སྡེ་ཚན་%s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "ཉེན་བརྡ་:སྡེ་ཚན་མང་དྲགས་པ་\n"
+
+msgid "Your password has expired."
+msgstr "ཁྱོད་ཀྱི་ཆོག་ཡིག་འདི་ དུས་ཡོལ་ནུག"
+
+msgid "Your password is inactive."
+msgstr "ཁྱོད་ཀྱི་ཆོག་ཡིག་འདི་ ནུས་མེད་ཨིན་པས།"
+
+msgid "Your login has expired."
+msgstr "ཁྱོད་ཀྱི་ནང་བསྐྱོད་འདི་ དུས་ཡོལ་ནུག"
+
+msgid "  Contact the system administrator."
+msgstr "རིམ་ལུགས་བདག་སྐྱོང་པ་ལུ་ འབྲེལ་བ་འཐབ།"
+
+msgid "  Choose a new password."
+msgstr "ཆོག་ཡིག་གསརཔ་ཅིག་གདམས།"
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "ཁྱོད་ཀྱི་ཆོག་ཡིག་འདི་ ཉིནམ་%ldནང་ དུས་ཡོལ་ནི་མས།\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "ཁྱོད་ཀྱི་ཆོག་ཡིག་འདི་ ནངས་པར་དུས་ཡོལ་ནི་མས།"
+
+msgid "Your password will expire today."
+msgstr "ཁྱོད་ཀྱི་ཆོག་ཡིག་འདི་ ད་རིས་དུས་ཡོལ་ནི་མས།"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "ཊི་ཊི་ཝའི་ %s བསྒྱུར་བཅོས་འབད་མ་ཚུགས།"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: ས་སྒོ་ཚུ་རིང་དྲགས་པས།\n"
+
+msgid "Environment overflow\n"
+msgstr "མཐའ་འཁོར་ལུད་སོང་བ།\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr ""
+"ཁྱོད་ཀྱིས་ $%s\n"
+"བསྒྱུར་བཅོས་འབད་མི་ཚུགསཔ་འོང་།\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"མཇུག་མམ་གྱི་ནང་བསྐྱོད་འབད་ཞིནམ་ལས་ཚུར་ %dའཐུས་ཤོར།\n"
+"མཇུག་མམ་ %s འདི་ %s གུ་ཨིན་པས།\n"
+msgstr[1] ""
+"མཇུག་མམ་གྱི་ནང་བསྐྱོད་འབད་ཞིནམ་ལས་ཚུར་ %dའཐུས་ཤོར་ཚུ།\n"
+"མཇུག་མམ་ %s འདི་ %s གུ་ཨིན་པས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: ཐུན་མོང་ ཡུ་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: ཐུན་མོང་མ་ཡིན་པའི་ ཇི་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: ཐུན་མོང་ ཡུ་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: ཐུན་མོང་ ཡུ་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
+
+msgid "Too many logins.\n"
+msgstr "ནང་བསྐྱོད་མང་དྲགས་པ།\n"
+
+msgid "You have new mail."
+msgstr "ཁྱོད་ལུ་ཡིག་འཕྲིན་གསརཔ་ཅིག་འདུག"
+
+msgid "No mail."
+msgstr "ཡིག་འཕྲིན་མེད།"
+
+msgid "You have mail."
+msgstr "ཁྱོད་ལུ་ཡིག་འཕྲིན་འདུག"
+
+msgid "no change"
+msgstr "བསྒྱུར་བཅོས་མེད།"
+
+msgid "a palindrome"
+msgstr "མདུན་རྒྱབ་སྒྲ་དང་དོན་གཅིག་ཏུ་བཀླག་རུང་བ་ཅིག"
+
+msgid "case changes only"
+msgstr "ཡི་གུ་རྐྱངམ་ཅིག་བསྒྱུར་བཅོས་འབདཝ་ཨིན།"
+
+msgid "too similar"
+msgstr "ཤིན་ཏུ་ཆ་འདྲ་བ།"
+
+msgid "too simple"
+msgstr "ཤིན་ཏུ་འཇམ་སམ།"
+
+msgid "rotated"
+msgstr "བསྒྱིར་ཡོདཔ།"
+
+msgid "too short"
+msgstr "ཐུང་དྲགས་པ།"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "ཆོག་ཡིག་བྱང་ཉེས་:%s"
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "ཆོག་ཡིག་:པམ་སི་ཊཊི་()འཐུས་ཤོར་བྱུང་ཡོདཔ་(_s) འཛོལ་བ་ %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "ཆོག་ཡིག་: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "ཆོག་ཡིག་སོར་ཡོདཔ།"
+
+msgid "passwd: password updated successfully\n"
+msgstr "ཆོག་ཡིག་:ཆོག་ཡིག་འདི་མཐར་འཁྱོལ་སྦེ་ དུས་མཐུན་བཟོ་ཡི།\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "%s གི་དོན་ལུ་ བདེན་མེད་ཀྱི་ཆོག་ཡིག\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "'%s'ལུ་ སི་ཌི་འབད་མ་ཚུགས་\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "སྣོད་ཐོ་མེད་ ཁྱིམ་དང་བཅས་ ནང་བསྐྱོད་འབད་དོ་=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%sལག་ལེན་འཐབ་མི་ཚུགས།"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "ནུས་མེད་རྩ་བའི་སྣོད་ཐོ་ '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr " '%s'ལུ་ རྩ་བའི་སྣོད་ཐོ་བསྒྱུར་བཅོས་འབད་མི་ཚུགས།\n"
+
+msgid "Unable to determine your tty name."
+msgstr "ཁྱོད་ཀྱི་ཊི་ཊི་ཝའི་མིང་ གཏན་འབེབས་བཟོ་མ་ཚུགས།"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: དྲན་ཚད་ལས་བརྒལ་བ།\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "མེན།\n"
+
+#, fuzzy
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"ལག་ལེན་:chage[གདམ་ཁ་ཚུ་]user\n"
+"\n"
+"གདམ་ཁ་ཚུ་:\n"
+"   -d, ---lastday LAST_DAY\t མཇུག་མམ་གྱི་ཆོག་ཡིག་འདི་ LAST_DAYལུ་ བསྒྱུར་བཅོས་གཞི་སྒྲིག་"
+"འབད།\n"
+"   -E, --expiredate EXPIRE_DATE\t རྩིས་ཐོའི་དུས་ཡོལ་ཚེས་གྲངས་འདི་ཚུ་ EXPIRE_DATE ལུ་ "
+"བསྒྱུར་བཅོས་གཞི་སྒྲིག་འབད།\n"
+"   -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་ བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+"   -I, --inactive INACTIVE\t དུས་ཡོལ་ \n"
+"\t\t\t\tto INACTIVE གི་ཤུལ་མ་ཆོག་ཡིག་ནུས་མེད་འདི་ གཞི་སྒྲིག་འབད།\n"
+"   -l, --list\t\t\t རྩིས་ཐོ་རྒས་པའི་བརྡ་དོན་ སྟོན།\n"
+"   -m, --mindays MIN_DAYS\t ཉིན་གྲངས་ཉུང་མཐའ་འདི་ཚུ་ ཆོག་ཡིག་\n"
+"\t\t\t\tགི་ཧེ་མར་ MIN_DAYSལུ་བསྒྱུར་བཅོས་ གཞི་སྒྲིག་འབད།\n"
+"   -M, --maxdays MAX_DAYS\t ཉིན་གྲངས་མང་མཐའ་འདི་ཚུ་ ཆོག་ཡིག་\n"
+"\t\t\t\tགི་ཧེ་མར་ MAX_DAYSལུ་ བསྒྱུར་བཅོས་ གཞི་སྒྲིག་འབད།\n"
+"   -W, --warndays WARN_DAYS\t དུས་ཡོལ་ཉེན་བརྡའི་ཉིནམ་འདི་ཚུ་ WARN_DAYSལུ་ གཞི་སྒྲིག་འབད།\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "བེ་ལུ་གསརཔ་བཙུགས་ ཡང་ཅིན་ སྔོན་སྒྲིག་གི་དོན་ལུ་ ENTERལུ་ཨེབས།"
+
+msgid "Minimum Password Age"
+msgstr "ཆོག་ཡིག་ལོ་ཉུང་མཐའ།"
+
+msgid "Maximum Password Age"
+msgstr "ཆོག་ཡིག་ལོ་མང་མཐའ།"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "མཇུག་གི་ཆོག་ཡིག་བསྒྱུར་བཅོས་(ཝའི་ཝའི་ཝའི་ཝའི་-ཨེམ་ཨེམ་-ཌི་ཌི་)།"
+
+msgid "Password Expiration Warning"
+msgstr "ཆོག་ཡིག་དུས་ཡོལ་ཉེན་བརྡ།"
+
+msgid "Password Inactive"
+msgstr "ཆོག་ཡིག་ནུས་མེད།"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "རྩིས་ཐོའི་དུས་ཡོལ་ཚེས་གྲངས་(ཝའི་ཝའི་ཝའི་ཝའི་-ཨེམ་ཨེམ་-ཌི་ཌི་)།"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "མཇུག་གི་ཆོག་ཡིག་བསྒྱུར་བཅོས་\t\t\t\t\t: "
+
+msgid "never"
+msgstr "ནམ་ཡང་"
+
+msgid "password must be changed"
+msgstr "ཆོག་ཡིག་འདི་བསྒྱུར་བཅོས་འབད་དགོ"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "ཆོག་ཡིག་དུས་ཡོལཝ་ཨིན་\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "ཆོག་ཡིག་ནུས་མེད་\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "རྩིས་ཐོ་དུས་ཡོལཝ་ཨིན་\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "ཆོག་ཡིག་བསྒྱུར་བཅོས་\t\tབར་ནའི་ཉིན་གྲངས་ཉུང་མཐའ་:%ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "ཆོག་ཡིག་བསྒྱུར་བཅོས་\t\tབར་ནའི་ཉིན་གྲངས་མང་མཐའ་:%ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "ཆོག་ཡིག་དུས་མ་ཡོལ་བའི་ཧེ་མ་ ཉེན་བརྡའི་ཉིན་གྲངས་\t:%ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: ནུས་མེད་ཚེས་གྲངས་  '%s'།\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: ནུས་མེད་ཨང་གྲངས་སྒྲུབ་རྟགས་ '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: ཟུར་རྟགས་གཞན་མི་དང་གཅིག་ཁར་ \"l\" གྲངས་སུ་མི་བཙུགས།\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: སྣང་བ་ཉན་མ་བཏུབ།\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: ཁྱོད་ཀྱི་ལག་ལེན་པའི་མིང་ གཏན་འབེབས་བཟོ་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: པི་ཨེ་ཨེམ་ བདེན་བཤད་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s:ཡིག་སྣོད་ཚུ་ལྡེ་མིག་བརྐྱབ་མི་ཚུགས་ དོ་རུང་ཤུལ་ལས་འབད་རྩོལ་བསྐྱེད།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: ཡིག་སྣོད་%s ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: ཁ་སྤེལ་བ་འཐུས་ཤོར་:%s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་འདི་ མིན་འདུག\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: ལག་ལེན་པ་  %sའདི་ མེད།\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s གི་དོན་ལུ་ རྒས་པའི་བརྡ་དོན་བསྒྱུར་བཅོས་འབད་དོ།\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: ས་སྒོ་ཚུ་བསྒྱུར་བཅོས་འབད་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"ལག་ལེན་:%s[-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] user]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "ལག་ལེན་:%s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+
+msgid "Full Name"
+msgstr "མིང་ཆ་ཚང་།"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "ཁང་མིག་ཨང་།"
+
+msgid "Work Phone"
+msgstr "ལཱ་གི་བརྒྱུད་འཕྲིན།"
+
+msgid "Home Phone"
+msgstr "ཁྱིམ་གྱི་བརྒྱུད་འཕྲིན།"
+
+msgid "Other"
+msgstr "གཞན།"
+
+msgid "Cannot change ID to root.\n"
+msgstr "རྩ་བ་ལུ་ ཨའི་ཌི་ བསྒྱུར་བཅོས་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: ནུས་མེད་ཀྱི་མིང་:'%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: ནུས་མེད་ཀྱི་ཁང་མིག་ཨང་:'%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: ནུས་མེད་ཀྱི་ལཱ་གི་བརྒྱུད་འཕྲིན་: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: ནུས་མེད་ཀྱི་ ཁྱིམ་གྱི་བརྒྱུད་འཕྲིན་: '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s:  '%s' ནང་ལུ་ ཁྲིམས་འགལ་ཡིག་ཆ་ཚུ་ཡོད།\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s:  '%s' ནང་ལུ་ ཁྲིམས་འགལ་ཡིག་ཆ་ཚུ་ཡོད།\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: ལག་ལེན་པ་  %sའདི་ མེད།\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: ཨེན་ཨའི་ཨེསི་ ཞབས་ཏོག་སྤྱོད་མི་གུ་ ལག་ལེན་པ་ '%s' བསྒྱུར་བཅོས་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' འདི་ ཞབས་ཏོག་སྤྱོད་མི་འདི་གི་དོན་ལུ་ ཨེན་ཨའི་ཨེསི་ ཨམ་ཨིན།\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%sགི་དོན་ལུ་ ལག་ལེན་པའི་བརྡ་དོན་ བསྒྱུར་བཅོས་འབད་དོ།\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: ས་སྒོ་ཚུ་རིང་དྲགས་པས།\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"ལག་ལེན་: chpasswd [གདམ་ཁ་ཚུ་]\n"
+"\n"
+"གདམ་ཁ་ཚུ་:\n"
+"  -e, --encrypted\t བཀྲམ་སྤེལ་འབད་ཡོད་པའི་ཆོག་ཡིག་ཚུ་ གསང་བཟོས་མ་འབད་ཡོདཔ།\n"
+"  -h, --help\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་ བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+"  -m, --md5\t\t བཀྲམ་སྤེལ་འབད་ཡོད་པའི་\t\t\tཆོག་ཡིག་ཚུ་ གསང་བཟོས་མ་ཡིན་པའི་སྐབས་ལུ་ ཌི་ཨི་"
+"ཨེསི་གི་ཚབ་ལུ་ ཨེབ་ཌི་ ༥ གསང་བཟོ་ ལག་ལེན་འཐབ།\n"
+"\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: -a ཟུར་རྟགས་འདི་ -Gཟུར་རྟགས་དང་གཅིག་ཁར་རྐྱངམ་ཅིག་ཆོག\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: གྲལ་ཐིག་ %d: གྲལ་ཐིག་རིང་དྲགས་པས།\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: གྲལ་ཐིག་ %d: ཆོག་ཡིག་གསརཔ་ བརླག་སྟོར་ཞུགས་པ།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: གྲལ་ཐིག་ %d: ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: འཛོལ་བ་སྐྱོན་འཛིན་འབད་ཡི་ བསྒྱུར་བཅོས་ཚུ་སྣང་མེད་བཞག་ཡི།\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: ལག་ལེན་པ་  %sའདི་ མེད།\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: ལག་ལེན་པ་  %sའདི་ མེད།\n"
+
+#, fuzzy
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"ལག་ལེན་: userdel [གདམ་ཁ་ཚུ་] ནང་བསྐྱོད་\n"
+"\n"
+"གདམ་ཁ་ཚུ་:\n"
+"  -f, --force\t\t\t  ལག་ལེན་པ་གིས་བདག་དབང་མ་བཟུང་སྟེ་འབད་རུང་ ཡིག་སྣོད་བང་བཙོང་སྟེ་རྩ་བསྐྲད་"
+"གཏང་།\n"
+"  -h, --help\t\t\t  གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+"  -r, --remove\t\t\t  ཁྱིམ་གྱི་སྣོད་ཐོ་དང་ཡིག་འཕྲིན་འཕྲལ་གསོག་རྩ་བསྐྲད་གཏང་།\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "ནང་བསྐྱོད་ཀྱི་ཤལ།"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "ཁྱོད་ཀྱིས་ %sགི་དོན་ལུ་ ཤལ་བསྒྱུར་བཅོས་མི་འབདཝ་འོང་།\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%sགི་དོན་ལུ་ ནང་བསྐྱོད་ཤལ་ བསྒྱུར་བཅོས་འབད་དོ།\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: ནུས་མེད་ཀྱི་ཐོ་བཀོད་:%s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s འདི་ནུས་མེད་ཀྱི་ཤལ་ཨིན།\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "ལག་ལེན་: དུས་ཡོལ་{-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "ནང་བསྐྱོད་       མང་མཐའི་མཇུག་མཐའ་འཐུས་ཤོར་                   ཨཱོན། \n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds གཡོན་]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds ལྡེ་མིག་]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "མ་ཤེས་པའི་ལག་ལེན་པ་:%s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: ཡིག་སྣོད་%s ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "%sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -Aགི་དོན་ལུ་ གྱིབ་མའི་སྡེ་ཚན་ཆོག་ཡིག་ཚུ་དགོ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: ཁ་སྤེལ་བ་འཐུས་ཤོར་:%s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "སྡེ་ཚན་ %sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་དོ།\n"
+
+msgid "New Password: "
+msgstr "ཆོག་ཡིག་གསརཔ་:"
+
+msgid "Re-enter new password: "
+msgstr "ཆོག་ཡིག་གསརཔ་ ལོག་བཙུགས་:"
+
+msgid "They don't match; try again"
+msgstr "དེ་ཚུ་མཐུན་སྒྲིག་མིན་འདུག་ དོ་རུང་འབད་རྩོལ་བསྐྱེད།"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: དོ་རུང་ཤུལ་ལས་འབད་རྩོལ་བསྐྱེད།\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "སྡེ་ཚན་ %sལུ་ ལག་ལེན་པ་ %sཁ་སྐོང་འབད་དོ།\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "སྡེ་ཚན་ %sནང་ལས་ ལག་ལེན་པ་ %sརྩ་བསྐྲད་གཏང་དོ།\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: ལག་ལེན་པ་  %sའདི་ མེད།\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: ཊི་ཊི་ཝའི་མེན།\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s འདི་ ནུས་ཅན་གྱི་སྡེ་ཚན་མིང་མེན་པས།\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "ནུས་མེད་སྡེཚན་གྱི་མིང་ '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K གིས་ ལྡེ་མིག་=བེ་ལུ་ དགོཔ་ཨིན།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: སྡེ་ཚན་ %sཡོདཔ་ཨིན།\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr "ལག་ལེན་:groupdel སྡེ་ཚན།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: ཨེན་ཨའི་ཨེསི་ ཞབས་ཏོག་སྤྱོད་མི་གུ་ ལག་ལེན་པ་ '%s' བསྒྱུར་བཅོས་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: སྡེ་ཚན་ '%s' འདི་ ཨེན་ཨའི་ཨེསི་སྡེ་ཚན་ཨིན།\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %sའདི་ ཨེན་ཇི་ཨེསི་ ཨམ་ཨིན།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ ཨེན་ཨའི་ཨེསི་ ལག་ལེན་པ་ཅིག་ཨིན།\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: དུས་མཐུན་སྡེ་ཚན་ནང་ལུ་ དྲན་ཚད་ལས་བརྒལ་བ།\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "ནུས་མེད་སྡེཚན་གྱི་མིང་ '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: སྡེ་ཚན་ %s འདི་ ཨེན་ཇི་ཨེསི་ སྡེ་ཚན་ཨིན།\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: མ་ཤེས་པའི་ལག་ལེན་པ་%s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "ལག་ལེན་:%s [-r] [-s] [group [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "ལག་ལེན་: %s [-r] [-s] [སྡེ་ཚན་]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s དང་ -r གཉིས་མཐུན་འགྱུར་ཅན་མེན།\n"
+
+msgid "invalid group file entry"
+msgstr "ནུས་མེད་སྡེ་ཚན་ཐོ་བཀོད།"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "གྲལ་ཐིག་ '%s'བཏོན་གཏང་ནི་ཨིན་ན?"
+
+msgid "duplicate group entry"
+msgstr "སྡེ་ཚན་ཐོ་བཀོད་ བརྫུན་མ་བཟོ།"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ནུས་མེད་སྡེཚན་གྱི་མིང་ '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "ནུས་མེད་སྡེཚན་གྱི་མིང་ '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "སྡེ་ཚན་ %s: ལག་ལེན་པ་ %sམེད།\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "ཨང་གྲངས་ '%s' བཏོན་གཏང་ནི་ཨིན་ན?"
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "%sནང་ མཐུན་སྒྲིག་སྡེ་ཚན་གྱི་ཡིག་སྣོད་ཐོ་བཀོད་མེད།\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "%sནང་ སྡེ་ཚན་ '%s' ཁ་སྐོང་འབད་ནི་ཨིན་ན?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "ནུས་མེད་གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ཐོ་བཀོད།"
+
+msgid "duplicate shadow group entry"
+msgstr "ངོ་བཤུས་གྱིབ་མའི་སྡེ་ཚན་ཐོ་བཀོད།"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "གྱིབ་མའི་སྡེ་ཚན་%s: བདག་སྐྱོང་གི་ལག་ལེན་པ་ %sམེད།\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "བདག་སྐྱོང་གི་ཨང་གྲངས་ '%s' བཏོན་གཏང་ནི་ཨིན་ན?"
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "གྱིབ་མའི་སྡེ་ཚན་%s: ལག་ལེན་པ་%sམེད།\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: ཡིག་སྣོད་ཚུ་དུས་མཐུན་བཟོ་ཡི།\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: སོར་ནི་མེད།\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "ལག་ལེན་:groupdel སྡེ་ཚན།\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "ལག་ལེན་:groupdel སྡེ་ཚན།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: ཡིག་སྣོད་ %sའདི་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "ལག་ལེནཔ་:id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "ལག་ལེན་པ་: id\n"
+
+msgid " groups="
+msgstr "སྡེ་ཚན་="
+
+#, fuzzy
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"ལག་ལེན་: lastlog [གདམ་ཁ་ཚུ་]\n"
+"\n"
+"གདམ་ཁ་ཚུ་:\n"
+"  -b, --before DAYS\t ཉིན་གྲངས་ལས་རྙིང་པའི་lastlogདྲན་ཐོ་ཚུ་རྐྱངམ་ཅིག་ དཔར་བསྐྲུན་འབད།\n"
+"  -h, --help\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+"  -t, --time DAYS\t ཉིན་གྲངས་ལས་ལྷག་པའི་འཕྲལ་གྱི་ lastlogདྲན་ཐོ་ཚུ་རྐྱངམ་ཅིག་ དཔར་བསྐྲུན་"
+"འབད།\n"
+"  -u, ---user LOGIN\t ལག་ལེན་པའི་དོན་ལུ་ གསལ་བཀོད་འབད་ཡོད་པའི་ནང་བསྐྱོད་དང་བཅས་ "
+"lastlog དྲན་ཐོ་ དཔར་བསྐྲུན་འབད།\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "ལག་ལེན་པའི་མིང་         འདྲེན་ལམ་     ལས་             མཇུག་མཐའ།"
+
+msgid "Username                Port     Latest"
+msgstr "ལག་ལེན་པའི་མིང་                འདྲེན་ལམ་    མཇུག་མཐའ།"
+
+msgid "**Never logged in**"
+msgstr "**ནམ་ཡང་ནང་བསྐྱོད་མ་འབད་**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: རེ་བ་མ་བསྐྱེད་པའི་སྒྲུབ་རྟགས་:%s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "ལག་ལེན་: %s [-p] [མིང་]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h host] [-f name]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "ནུས་མེད་ནང་བསྐྱོད་ཀྱི་དུས་ཚོད།"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"རྒྱུན་ལས་རྒྱུན་སྐྱོང་གི་དོན་ལུ་ རིམ་ལུགས་ཁ་བསྡམས་ཅི།"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[མཐུད་བཏོག་ཟུར་ཏེ་འགྱོ་ཡོདཔ་ --རྩ་བའི་ནང་བསྐྱོད་མི་ཆོག]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"%d སྐར་ཆག་གི་ཤུལ་མར་ ནང་བསྐྱོད་ངལ་མཚམས་བྱུང་ཡོདཔ།\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"utmpཐོ་བཀོད་མིན་འདུག ཁྱོད་ཀྱིས་ གནས་རིམ་དམའ་ཤོས་\"sh\"གི་ནང་ལས་ \"login\"ལག་ལེན་འཐབ་དགོ"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "ནང་བསྐྱོད་: པི་ཨེ་ཨེམ་འཐུས་ཤོར་ བར་བཤོལ་དོ་: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s ནང་བསྐྱོད་: "
+
+msgid "login: "
+msgstr "ནང་བསྐྱོད་: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "འབད་རྩོལ་གྱི་ཨང་གྲངས་མང་མཐའ་ལྷག་ཡོདཔ་(%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "ནང་བསྐྱོད་:པི་ཨུ་ཨེམ་གྱིས་ཞུ་ཡོད་པའི་བར་བཤོལ།\n"
+
+msgid "Login incorrect"
+msgstr "ནང་བསྐྱོད་བདེན་མེད།"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s ནང་བསྐྱོད་: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: ཁ་སྤེལ་བ་འཐུས་ཤོར་:%s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "ཉེན་བརྡ་:གནས་སྐབས་ལྡེ་མིག་བརྐྱབས་པའི་ཤུལ་ལུ་ ལོག་སྟེ་ནང་བསྐྱོད་ལྕོགས་ཅན་བཟོ་ཡོདཔ།"
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "མཇུག་གི་ནང་བསྐྱོད་: %s གུ་ %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "མཇུག་གི་ནང་བསྐྱོད་: %.19s གུ་ %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " %.*sལས།"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"ནང་བསྐྱོད་དུས་ཚོད་ལྷག་ཡོདཔ།\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "ལག་ལེན་པ་: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "ལག་ལེན་: newgrp [-][ སྡེ་ཚན་]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "ལག་ལེན་: sg group [[-c]བརྡ་བཀོད་ ]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "ཆོག་ཡིག་རྙིངམ་:"
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: ཁ་སྤེལ་བ་འཐུས་ཤོར་:%s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: ལག་ལེན་པ་  %sའདི་ མེད།\n"
+
+msgid "too many groups\n"
+msgstr "སྡེ་ཚན་མང་དྲགས་པ།\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'།\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'།\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s:གྲལ་ཐིག་%d: ནུས་མེད་གྲལ་ཐིག་\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: ལག་ལེན་པ་%sགི་དོན་ལུ་ ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: གྲལ་ཐིག་ %d: ཇི་ཨའི་ཌི་ གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: གྲལ་ཐིག་ %d: ཇི་ཨའི་ཌི་ གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: ལག་ལེན་པ་  %sའདི་ མེད།\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: གྲལ་ཐིག་ %d: ཆོག་ཡིག་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: གྲལ་ཐིག་ %d: mkdir འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: གྲལ་ཐིག་ %d: ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#, fuzzy
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"ལག་ལེན་: passwd [གདམ་ཁ་ཚུ་] [ནང་བསྐྱོད་]\n"
+"\n"
+"གདམ་ཁ་ཚུ་:\n"
+"  -a, --all\t\t\t རྩིས་ཐོ་ཆ་མཉམ་གྱི་གུ་ ཆོག་ཡིག་གནས་ཚད་ སྙན་ཞུ་འབད།\n"
+"  -d, --delete\t\t\t མིང་བཏགས་ཡོད་པའི་རྩིས་ཐོའི་དོན་ལུ་ ཆོག་ཡིག་བཏོན་གཏང་།\n"
+"  -e, --expire\t\t\t མིང་བཏགས་ཡོད་པའི་རྩིས་ཐོའི་དོན་ལུ་ ཆོག་ཡིག་གི་དུས་ཡོལ་བང་བཙོང་།\n"
+"  -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+"  -k, --keep-tokens\t\t དུས་ལས་ཡོལ་སོང་པ་ཅིན་རྐྱངམ་ཅིག་ ཆོག་ཡིག་སོར།\n"
+"  -i, --inactive INACTIVE\t ཆོག་ཡིག་འདི་ནུས་མེད་ལུ་ དུས་ཡོལ་\n"
+"\t\t\t\t གི་ཤུལ་མར་ ནུས་མེད་སྦེ་གཞི་སྒྲིག་འབད།\n"
+"  -l, --lock\t\t\t མིང་བཏགས་ཡོད་པའི་རྩིས་ཐོ་ ལྡེ་མིག་རྐྱབས།\n"
+"  -n, --mindays MIN_DAYS\t ཆོག་ཡིག་ \n"
+"\t\t\t\tའདི་ MIN_DAYSལུ་མ་བསྒྱུར་བའི་ཧེ་མ་ ཉིན་གྲངས་ཉུང་མཐའ་གཞི་སྒྲིག་འབད།  -q, --quiet\t\t"
+"\t ཁུ་སིམ་སིམ་གྱི་ཐབས་ལམ།\n"
+"  -r, --repository REPOSITORY\t  REPOSITORYམཛོད་གནས་ནང་ལུ་ ཆོག་ཡིག་སོར།\n"
+"  -s, --status\t\t\t མིང་བཏགས་ཡོད་པའི་རྩིས་ཐོའི་གུ་ ཆོག་ཡིག་སྙན་ཞུ་འབད།\n"
+"  -u, --unlock\t\t\t མིང་བཏགས་ཡོད་པའི་རྩིས་ཐོ་འདི་ ལྡེ་མིག་ཕྱེ།\n"
+"  -w, --warndays WARN_DAYS\t  WARN_DAYSལུ་ དུས་ཡོལ་ཉེན་བརྡའི་ཉིན་གྲངས་ གཞི་སྒྲིག་འབད།\n"
+"  -x, --maxdays MAX_DAYS\t ཆོག་ཡིག་ \n"
+"\t\t\t\tའདི་ MAX_DAYSལུ་ བསྒྱུར་བཅོས་མ་འབད་བའི་ཧེ་མ་ ཉིན་གྲངས་ཉུང་མཐའ་ གཞི་སྒྲིག་འབད།\n"
+"\n"
+
+msgid "Old password: "
+msgstr "ཆོག་ཡིག་རྙིངམ་:"
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr "ཆོག་ཡིག་གསརཔ་བཙུགས་(%d གི་ཉུང་མཐའ་ %dཡིག་འབྲུའི་མང་མཐའ་)།\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr "ཆོག་ཡིག་གསརཔ་བཙུགས་(%d གི་ཉུང་མཐའ་ %dཡིག་འབྲུའི་མང་མཐའ་)།\n"
+
+msgid "New password: "
+msgstr "ཆོག་ཡིག་གསརཔ་:"
+
+#, fuzzy
+msgid "Try again."
+msgstr "ལོག་འབད་རྩོལ་བསྐྱེད་:"
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"ཉེན་བརྡ་:ནུས་མེད་ཀྱི་ཆོག་ཡིག་(ག་དེ་ཨིན་རུང་ལག་ལེན་འཐབ་ནིའི་དོན་ལས་ ལོག་བཙུགས་)།"
+
+msgid "They don't match; try again.\n"
+msgstr "དེ་ཚུ་མཐུན་སྒྲིག་མིན་འདུག་ ལོག་འབད་རྩོལ་བསྐྱེད།\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་མི་ཚུགས།\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: མཛོད་གནས་ %sའདི་ རྒྱབ་སྐྱོར་མ་འབད་བས།\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: ཁྱོད་ཀྱིས་  %sགི་དོན་ལུ་ ཆོག་ཡིག་བརྡ་དོན་མ་བལྟ་འོང་ ཡང་ན་ ལེགས་བཅོས་མ་འབདཝ་འོང་།\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་དོ།\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr " %sགི་དོན་ལུ་ ཆོག་ཡིག་འདི་མ་སོར་བས།\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "ཆོག་ཡིག་སོར་ཡོདཔ།"
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "ཆོག་ཡིག་དུས་ཡོལ་ཉེན་བརྡ།"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "ལག་ལེན་:%s [-q] [-r] [-s] [passwd [གྱིབ་མ་]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s དང་ -r གཉིས་མཐུན་འགྱུར་ཅན་མེན།\n"
+
+msgid "invalid password file entry"
+msgstr "ནུས་མེད་ཀྱི་ཆོག་ཡིག་ཡིག་སྣོད་ཐོ་བཀོད།"
+
+msgid "duplicate password entry"
+msgstr "ཆོག་ཡིག་ཐོ་བཀོད་རྫུན་མ།"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "ལག་ལེན་པ་ %s: སྡེ་ཚན་ %uམེད།\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "ལག་ལེན་པ་ %s: སྣོད་ཐོ་ %s མེད།\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "ལག་ལེན་པ་ %s: ལས་རིམ་%s མེད།\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "%sནང་ མཐུན་སྒྲིག་ཡོད་པའི་ཆོག་ཡིག་ཡིག་སྣོད་ཐོ་བཀོད་མེད།\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "%sནང་ ལག་ལེན་པ་ '%s' ཁ་སྐོང་འབད་ནི་ཨིན་ན?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "ནུས་མེད་གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ཐོ་བཀོད།"
+
+msgid "duplicate shadow password entry"
+msgstr "གྱིབ་མའི་ཆོག་ཡིག་ཐོ་བཀོད་རྫུན་མ།"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "ལག་ལེན་པ་ %s: མ་འོངས་པ་ནང་ མཇུག་གི་ཆོག་ཡིག་སོར་ནི།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: ཡིག་སྣོད་%s ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "ལག་ལེན་པ་: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "ལག་ལེན་པ་: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "རྩིས་ཐོ་དེ་ལུ་ ཟླ་ལུ་འཛུལ་སྤྱོད་འབད་ནི་ ཉན་མ་བཏུབ་པས།\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "ཆོག་ཡིག་བདེན་བཤད་ཟུར་ལས་འགྱོ་ཡོདཔ།\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "ཁྱོད་རའི་ཆོག་ཡིག་འདི་ བདེན་བཤད་སྦེ་བཙུགས།\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"ལག་ལེན་: ཟླ་ [གདམ་ཁ་ཚུ་] [ནང་བསྐྱོད་]\n"
+"\n"
+"གདམ་ཁ་ཚུ་:\n"
+"  -c, --command COMMAND\t\t ལས་བཀོལ་འབད་ཡོད་པའི་ཤལ་ལུ་ བརྡ་བཀོད་རྩིས་སྤྲོད་འབད།\n"
+"  -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+"  -, -l, --login\t\t ཤལ་འདི་ ནང་བསྐྱོད་ཤལ་བཟོ།\n"
+"  -m, -p,\n"
+"  --preserve-environment\t མཐའ་འཁོར་འགྱུར་ཅན་ཚུ་ སླར་གཞི་སྒྲིག་མ་འབད་དགོཔ་དང་ \n"
+"\t\t\t\tཤལ་ཅོག་འཐདཔ་སྦེ་བཞག\n"
+"  -s, --shell SHELL\t\t ཆོག་ཡིག་ནང་ སྔོན་སྒྲིག་གི་ཚབ་ལུ་ ཤལ་ལག་ལེན་འཐབ།\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: ཊར་མི་ནཱལ་ལས་གཡོག་བཀོལ་དགོ\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start:འཛོལ་བ་%d(_s)\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "མ་ཤེས་པའི་ཨའི་ཌི་:%s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "ཁྱོད་ ཟླ་%sལུ་ དབང་སྤྲོད་མ་འབད།\n"
+
+msgid "(Enter your own password)"
+msgstr "(ཁྱོད་རའི་ཆོག་ཡིག་རྐྱངམ་ཅིག་བཙུགས་)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(སྣང་མེད་བཞག་ཡོདཔ་)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: པི་ཨེ་ཨེམ་ བདེན་བཤད་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "ཁྱོད་ ཟླ་%sལུ་ དབང་སྤྲོད་མ་འབད།\n"
+
+msgid "No shell\n"
+msgstr "ཤལ་མེད།\n"
+
+msgid "No password file"
+msgstr "ཆོག་ཡིག་ཡིག་སྣོད་མེད།"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "'རྩ་བ་'གི་དོན་ལུ་ ཆོག་ཡིག་ཐོ་བཀོད་མེད།"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"སྤྱིར་བཏང་འགོ་བཙུགས་ཀྱི་ཐོག་ལས་ འཕྲོ་མཐུད་ནིའི་དོན་ལུ་ ཚད་འཛིན་-ཌི་ ཡིག་དཔར་རྐྱབས་\n"
+"(ཡང་ན་ རིམ་ལུགས་རྒྱུན་སྐྱོང་གི་དོན་ལུ་ རྩ་བའི་ཆོག་ཡིག་ཅིག་བྱིན་):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "རིམ་ལུགས་རྒྱུན་སྐྱོང་ཐབས་ལམ་བཙུགས་དོ།"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: སྔོན་སྒྲིག་ཡིག་སྣོད་གསརཔ་ གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: སྔོན་སྒྲིག་ཡིག་སྣོད་གསརཔ་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: བསྐྱར་མིང་བཏགས་:%s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: སྡེ་ཚན་ '%s' འདི་ ཨེན་ཨའི་ཨེསི་སྡེ་ཚན་ཨིན།\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: སྡེ་ཚན་མང་རབས་ཅིག་གསལ་བཀོད་འབད་ཡོདཔ་(མང་མཐའ་ %d)།\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་ཐོ་'%s'།\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ནུས་མེད་བསམ་བཀོད་ '%s'།\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ནུས་མེད་ཁྱིམ་གྱི་སྣོད་ཐོ་  '%s'།\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: -e ལུ་དགོས་མཁོ་ཡོད་པའི་གྱིབ་མའི་ཆོག་ཡིག་ཚུ།\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: -f  ལུ་དགོས་མཁོ་ཡོད་པའི་གྱིབ་མའི་ཆོག་ཡིག་ཚུ།\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ནུས་མེད་ཀྱི་ས་སྒོ་ '%s'།\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: ནུས་མེད་ཤལ་ '%s'།\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+msgid "Creating mailbox file"
+msgstr "ཡིག་སྒྲོམ་ཡིག་སྣོད་ གསར་བསྐྲུན་འབད་དོ།"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"སྡེ་ཚན་'mail' མ་ཐོབ། ༠༦༠༠ ཐབས་ལམ་དང་བཅས་ ལག་ལེན་པའི་ཡིག་སྒྲ྄ོམ་ཡིག་སྣོད་ གསར་བསྐྲུན་འབད་དོ།\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "ཡིག་སྒྲོམ་ཡིག་སྣོད་གྱི་གནང་བ་ གཞི་སྒྲིག་འབད་དོ།"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: ལག་ལེན་པ་ %sཡོདཔ་ཨིན།\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: སྡེ་ཚན་%s ཡོདཔ་ཨིན་-ཁྱོད་ཀྱིས་ ལག་ལེན་པ་འདི་སྡེ་ཚན་དེ་ནང་ ཁ་སྐོང་བརྐྱབ་ནི་ཨིན་པ་ཅིན་ -g ལག་"
+"ལེན་འཐབ།\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: ཡུ་ཨའི་ཌི་ %uའདི་ ཐུན་མོང་མེན།\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: ཉེན་བརྡ་:ཁྱིམ་གྱི་སྣོད་ཐོ་འདི་ཧེ་མ་ལས་རང་ཡོདཔ་ཨིན།\n"
+"འདི་ནང་ལུ་ སི་ཀེལ་སྣོད་ཐོ་ནང་ལས་ ཡིག་སྣོད་ག་ཅི་ཡང་འདྲ་བཤུས་མ་བརྐྱབ་ནི།\n"
+
+#, fuzzy
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"ལག་ལེན་: userdel [གདམ་ཁ་ཚུ་] ནང་བསྐྱོད་\n"
+"\n"
+"གདམ་ཁ་ཚུ་:\n"
+"  -f, --force\t\t\t  ལག་ལེན་པ་གིས་བདག་དབང་མ་བཟུང་སྟེ་འབད་རུང་ ཡིག་སྣོད་བང་བཙོང་སྟེ་རྩ་བསྐྲད་"
+"གཏང་།\n"
+"  -h, --help\t\t\t  གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+"  -r, --remove\t\t\t  ཁྱིམ་གྱི་སྣོད་ཐོ་དང་ཡིག་འཕྲིན་འཕྲལ་གསོག་རྩ་བསྐྲད་གཏང་།\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: ལག་ལེན་པ་གཞན་གྱི་དོན་ལུ་ གཞི་རིམ་སྡེ་ཚན་ཅིག་ཨིན་མི་སྡེ་ཚན་ %sའདི་ རྩ་བསྐྲད་གཏང་མི་ཚུགས།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: ཉེན་བརྡ་:རྩ་བསྐྲད་གཏང་མི་ཚུགས།"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %sགིས་བདག་དབང་མ་བཟུང་མི་ %sའདི་ རྩ་བསྐྲད་གཏང་ནི་མེད།\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: ལག་ལེན་པ་ %sའདི་ ཨེན་ཨའི་ཨེསི་ ལག་ལེན་པ་ཅིག་ཨིན།\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: ལག་ལེན་པ་  %sའདི་ ད་ལྟོ་རང་ནང་བསྐྱོད་འབད་ཡི།\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: ནུས་མེད་ཁྱིམ་གྱི་སྣོད་ཐོ་  '%s'།\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: སྣོད་ཐོ་ %sའདི་ རྩ་བསྐྲད་གཏང་ནི་མེད་(ལག་ལེན་པ་%sགི་ཁྱིམ་འདི་ རྩ་བསྐྲད་གཏང་འོང་)།\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: སྣོད་ཐོ་%s རྩ་བསྐྲད་གཏང་པའི་སྐབས་ལུ་ འཛོལ་བ།\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"ལག་ལེན་: usermod [གདམ་ཁ་ཚུ་] ནང་བསྐྱོད་\n"
+"\n"
+"གདམ་ཁ་ཚུ་:\n"
+"  -a, --append GROUP\t\t  ལྷན་ཐབས་སྡེ་ཚན་ལུ་ ལག་ལེན་པ་མཇུག་བསྣོད་འབད། \n"
+"  -c, --comment COMMENT\t\t  ཇི་ཨི་སི་ཨོ་ཨེསི་ ས་སྒོའི་བེ་ལུ་གསརཔ།\n"
+"  -d, --home HOME_DIR\t\t  ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ནང་བསྐྱོད་སྣོད་ཐོ་གསརཔ།\n"
+"  -e, --expiredate EXPIRE_DATE\t  EXPIRE_DATEལུ་ རྩིས་ཐོའི་དུས་ཡོལ་ཚེས་གྲངས་ གཞི་སྒྲིག་"
+"འབད།\n"
+"  -f, ---inactive INACTIVE\t   INACTIVEལུ་ དུས་ཡོལ་ \n"
+" \t\t\t\tགི་ཤུལ་མ་ ཆོག་ཡིག་ནུས་མེད་སྦེ་ གཞི་སྒྲིག་འབད།\n"
+"  -g, ---gid GROUP\t\t  འགོ་ཐོག་ནང་བསྐྱོད་སྡེ་ཚན་གསརཔ་སྦེ་ སྡེ་ཚན་འདི་བང་ཅན་སྦེ་ལག་ལེན་"
+"འཐབ།\n"
+"  -G, --groups GROUPS\t\t  ལྷན་ཐབས་སྡེ་ཚན་གྱི་ཐོ་ཡིག\n"
+"  -h, --help\t\t\t  གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+"  -l, --login LOGIN\t\t  ནང་བསྐྱོད་མིང་གི་བེ་ལུ་གསརཔ།\n"
+"  -L, --lock\t\t\t  ལག་ལེན་པའི་རྩིས་ཐོ་ ལྡེ་མིག་རྐྱབས།\n"
+"  -m, --move-home\t\t  ཁྱིམ་གྱི་སྣོད་ཐོའི་ནང་དོན་ཚུ་ \n"
+" \t\t\t\t གནས་ཁོངས་ (-dདང་རྐྱངམ་ཅིག་)གསརཔ་ལུ་སྤོ།\n"
+"  -o, --non-unique\t\t  ཡུ་ཨའི་ཌི་ རྫུན་མ་(ཐུན་མོང་)ལག་ལེན་གྱི་ཐོག་ལས་ འབད་བཅུག\n"
+"  -p, --password PASSWORD\t  ཆོག་ཡིག་གསརཔ་གི་དོན་ལུ་ གསང་བཟོས་ཆོག་ཡིག་ལག་ལེན་འཐབ།\n"
+"  -s, --shell SHELL\t\t  ལག་ལེན་པའི་རྩིས་ཐོའི་དོན་ལུ་ ནང་བསྐྱོད་ཤལ་གསརཔ།\n"
+"  -u, --uid UID\t\t\t  ལག་ལེན་པའི་རྩིས་ཐོའི་དོན་ལུ་ ཡུ་ཨི་ཌི་གསརཔ།\n"
+"  -U, --unlock\t\t\t  ལག་ལེན་པའི་རྩིས་ཐོ་ ལྡེ་མིག་ཕྱེ།\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: ལག་ལེན་པ་ %sཡོདཔ་ཨིན།\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: ཟུར་རྟགས་ཚུ་གྲ་སྒྲིག་མིན་འདུག\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e aདང་ -f གཉིས་ལུ་དངོས་མཁོ་ཡོད་པའི་གྱིབ་མའི་ཆོག་ཡིག་ཚུ།\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: སྣོད་ཐོ་  %sའདི་ཡོདཔཨིན།\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: %s chownའབད་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: ཉེན་བརྡ་: ཁྱིམ་གྱི་སྣོད་ཐོ་%sརྙིངམ་འདི་ མཐར་འཁྱོལ་སྦེ་རྩ་བསྐྲད་གཏང་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: ཉེན་བརྡ་: %s འདི་ %s གིས་ བདག་དབང་བཟུངམ་མེན།\n"
+
+msgid "failed to change mailbox owner"
+msgstr "ཡིག་སྒྲོམ་བདག་པོ་སོར་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ཡོདཔ།"
+
+msgid "failed to rename mailbox"
+msgstr "ཡིག་སྒྲོམ་གྱི་བསྐྱར་མིང་བཏགས་ནི་ལུ་ འཛོལ་བ།"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"ལག་ལེན་: vipw [གདམ་ཁ་ཚུ་]\n"
+"\n"
+"གདམ་ཁ་ཚུ་:\n"
+"  -g, --group\t\t\t  སྡེ་ཚན་གནད་སྡུད་གཞི་རྟེན་ ཞུན་དག་འབད།\n"
+"  -h, --help\t\t\t  གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+"  -p, --passwd\t\t\t  ཆོག་ཡིག་གནད་སྡུད་གཞི་རྟེན་ ཞུན་དག་འབད།\n"
+"  -q, --quiet\t\t\t  ཁུ་སིམ་སིམ་གྱི་ཐབས་ལམ།\n"
+"  -s, --shadow\t\t\t གྱིབ་མ་ ཡང་ན་  gshadowགནད་སྡུད་གཞི་རྟེན་ ཞུན་དག་འབད།\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %sའདི་ བསྒྱུར་བཅོས་མ་འབད་བས།\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "ཡིག་སྣོད་ལྡེ་མིག་བརྐྱབས་མ་ཚུགས།"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "ཡིག་སྣོད་ལྡེ་མིག་བརྐྱབས་མ་ཚུགས།"
+
+msgid "Couldn't make backup"
+msgstr "རྒྱབ་ཐག་བཟོ་མ་ཚུགས།"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %sསོར་ཆུད་འབད་མ་ཚུགས་: %s (ཁྱོད་ཀྱི་བསྒྱུར་བཅོས་ཚུ་ %sནང་ཨིན་)།\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་པ་:faillog [གདམ་ཁ་ཚུ་]\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ "  -a, --all\t\t\t ལག་ལེན་ཆ་མཉམ་གྱི་དོན་ལུ་ faillog དྲན་ཐོ་ཚུ་བཀྲམ་སྟོན་འབད།\n"
+#~ "  -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་ བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ "  -l, --lock-time SEC\t\t ནང་བསྐྱོད་འཐུས་ཤོར་བྱུང་བའི་ཤུལ་ལུ་ SECདཀར་ཆག་ཚུ་ལུ་ ལྡེ་མིག་"
+#~ "རྩིས་ཐོ།\n"
+#~ "  -m, --maximum MAX\t\t MAX ལུ་ འཐུས་ཤོར་བྱུང་ཡོད་པའི་ནང་བསྐྱོད་གདོང་ལན་ གཞི་སྒྲིག་འབད།\n"
+#~ "  -r, --reset\t\t\t ནང་བསྐྱོད་འཐུས་ཤོར་ཚུ་གི་གདོང་ལན་ སླར་གཞི་སྒྲིག་འབད།\n"
+#~ "  -t, --time DAYS\t\t   DAYSལས་ལྷག་པའི་འཕྲལ་གྱི་ཕེཡེ་ལོག་དྲན་ཐོ་ཚུ་ བཀྲམ་སྟོན་འབད།\n"
+#~ "  -u, --user LOGIN\t\t ཕེ་ཡེ་ལོག་དྲན་ཐོ་བཀྲམ་སྟོན་འབད་ ཡངན་ འཐུས་ཤོར་གདོང་ལན་\n"
+#~ "\t\t\t\tཚུ་ རྒྱུན་སྐྱོང་འབདཝ་ཨིནམ་དང་ ལག་ལེན་པའི་དོན་ལུ་ ནང་བསྐྱོད་ཀྱི་ཐོག་ལས་ \n"
+#~ "\t\t\t\tརྐྱངམ་ཅིག་ བཅད་མཚམས་( -r, -m ཡང་ན་ -l optionsདང་བཅས་ལག་ལེན་འཐབ་ཡོད་པ་"
+#~ "ཅིན་)བཟོཝ་ཨིན།\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་:groupadd [གདམ་ཁ་ཚུ་]སྡེ་ཚན།\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ "  -f, --force\t\t གསལ་བཀོད་འབད་ཡོད་པའི་ \n"
+#~ "\t\t\t\t སྡེ་ཚན་འདི་ཧེ་མ་ལས་ཡོད་པ་ཅིན་ མཐར་འཁྱོལ་གནས་ཚད་ཀྱི་ཐོག་ལས་ བང་ཅན་སྦེ་ཕྱིར་འཐོན་"
+#~ "འབད།\n"
+#~ "  -g, --gid GID\t\t སྡེ་ཚན་གསརཔ་གི་དོན་ལུ་ ཇི་ཨིའ་ཌི་ལག་ལེན་འཐབ།\n"
+#~ "  -h, --help\t\t\t   གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ "  -k, --key KEY=VALUE\t\t /etc/login.defs སྔོན་སྒྲིག་ཚུ་ ཟུར་བཞག་འབདཝ་ཨིན།\n"
+#~ "  -o, --non-unique\t\t ངོ་བཤུས་ \n"
+#~ " \t\t\t\t(ཐུན་མོང་པ་)ཇི་ཨའི་ཌི་དང་བཅས་ སྡེ་ཚན་གསར་བསྐྲུན་འབད་བཅུག\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་:groupadd [གདམ་ཁ་ཚུ་]སྡེ་ཚན།\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ "  -f, --force\t\t གསལ་བཀོད་འབད་ཡོད་པའི་ \n"
+#~ "\t\t\t\t སྡེ་ཚན་འདི་ཧེ་མ་ལས་ཡོད་པ་ཅིན་ མཐར་འཁྱོལ་གནས་ཚད་ཀྱི་ཐོག་ལས་ བང་ཅན་སྦེ་ཕྱིར་འཐོན་"
+#~ "འབད།\n"
+#~ "  -g, --gid GID\t\t སྡེ་ཚན་གསརཔ་གི་དོན་ལུ་ ཇི་ཨིའ་ཌི་ལག་ལེན་འཐབ།\n"
+#~ "  -h, --help\t\t\t   གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ "  -k, --key KEY=VALUE\t\t /etc/login.defs སྔོན་སྒྲིག་ཚུ་ ཟུར་བཞག་འབདཝ་ཨིན།\n"
+#~ "  -o, --non-unique\t\t ངོ་བཤུས་ \n"
+#~ " \t\t\t\t(ཐུན་མོང་པ་)ཇི་ཨའི་ཌི་དང་བཅས་ སྡེ་ཚན་གསར་བསྐྲུན་འབད་བཅུག\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "ལག་ལེན་: useradd [གདམ་ཁ་ཚུ་] ནང་བསྐྱོད་\n"
+#~ "\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ "  -b, --base-dir BASE_DIR\t ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་ \n"
+#~ "\t\t\t\t ཁྱིམ་གྱི་སྣོད་ཐོའི་དོན་ལུ་ གཞི་རྟེན་སྣོད་ཐོ།\n"
+#~ "  -c, --comment COMMENT\t\t ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ཇི་ཨི་སི་ཨོ་ཨེསི་ས་སྒོ་ གཞི་"
+#~ "སྒྲིག་འབད།\n"
+#~ "  -d, --home-dir HOME_DIR\t ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ཁྱིམ་གྱི་སྣོད་ཐོ།\n"
+#~ "  -D, --defaults\t\t ལེགས་བཅོས་འབད་ཡོད་པའི་སྔོན་སྒྲིག་ useradd\n"
+#~ "\t\t\t\t རིམ་སྒྲིག་འདི་ དཔར་བསྐྲུན་འབད་ཡང་ན་ སྲུངས། \n"
+#~ "  -e, --expiredate EXPIRE_DATE\t   EXPIRE_DATEལུ་ རྩིས་ཐོའི་དུས་ཡོལ་ཚེས་གྲངས་ གཞི་"
+#~ "སྒྲིག་འབད།\n"
+#~ "  -f, --inactive INACTIVE\t དུས་ཡོལ་ \n"
+#~ "\t\t\t\t གི་ཤུལ་མར་ INACTIVEལུ་ ཆོག་ཡིག་ནུས་མེད་སྦེ་གཞི་སྒྲིག་འབད།\n"
+#~ "  -g, --gid GROUP\t\t ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ བང་བཅོང་ཐོག་ལས་ སྡེ་ཚན་ལག་ལེན་"
+#~ "འཐབ།\n"
+#~ "  -G, --groups GROUPS\t\t \n"
+#~ "  \t\t\t\tལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ལྷན་ཐབས་སྡེབ་ཚན་གྱི་ཐོ་ཡིག\n"
+#~ "  -h, --help\t\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་བཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ "  -k, --skel SKEL_DIR \t\t ཐབས་གཞན་སི་ཀེལ་སྣོད་ཐོ་ཅིག་ གསལ་བཀོད་འབད།\n"
+#~ "  -K, --key KEY=VALUE\t\t   /etc/login.defs སྔོན་སྒྲིག་ ཟུར་བཞག་འབདཝ་ཨིན།\n"
+#~ "  -m, --create-home\t\t ལག་ལེན་པ་ \n"
+#~ " \t\t\t\tརྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ཁྱིམ་གྱི་སྣོད་ཐོ་གསར་བསྐྲུན་འབད།\n"
+#~ "  -o, --non-unique\t\t   \t\t\t\t(ཐུན་མོང་) ཡུ་ཨའི་ཌི་ རྫུན་མ་\n"
+#~ "གི་ཐོག་ལས་ ལག་ལེན་པ་གསར་བསྐྲུན་འབད་བཅུག\n"
+#~ "  -p, --password PASSWORD\t  ལག་ལེན་པ་གསརཔ་\n"
+#~ "  \t\t\t\tརྩིས་ཐོའི་དོན་ལུ་ གསང་བཟོས་ཆོག་ཡིགལག་ལེན་འཐབ།\n"
+#~ "  -s, --shell SHELL\t\t  ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ནང་བསྐྱོད་ཀྱི་ཤལ།\n"
+#~ "  -u, --uid UID\t\t\t  ལག་ལེན་པའི་རྩིས་ཐོ་གསརཔ་གི་དོན་ལུ་ ཡུ་ཨའི་ཌི་འདི་ བང་ཅན་སྦེ་ལག་"
+#~ "ལེན་འཐབ།\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "ཆོག་ཡིག་དུས་ཡོལ་ནིའི་དོན་ལས་་གཞི་སྒྲིག་འབད་ཡོདཔ།"
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མ་ཚུགས།\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མ་ཚུགས།\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ ལོག་འབྲི་མ་ཚུགས།\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ ལོག་འབྲི་མ་ཚུགས།\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མ་ཚུགས།\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མ་ཚུགས།\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tམིང་ཆ་ཚང་: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tཁང་མིག་ཨང་: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tལཱ་གི་བརྒྱུད་འཕྲིན་: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tཁྱིམ་གྱི་བརྒྱུད་འཕྲིན་: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "ཆོག་ཡིག་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས་ ཤུལ་ལས་ལོག་སྟེ་འབད་རྩོལ་སྐྱེད།\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s:  /etc/passwd ནང་ལུ་ %s མ་ཐོབ།\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "ཆོག་ཡིག་ཐོ་བཀོད་དུས་མཐུན་འབདཝ་ད་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "ཆོག་ཡིག་ཡིག་སྣོད་བསྒྱུར་བཅོས་ཚུ་ དང་ལེན་འབད་མི་ཚུགས།\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ལྡེ་མིག་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: gshadowཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་དུས་མཐུན་བཟོ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཐོ་བཀོད་དུས་མཐུན་བཟོ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: གྲལ་ཐིག་ %d: མ་ཤེས་པའི་སྡེ་ཚན་  %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: གྲལ་ཐིག་ %d: ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་དུས་མཐུན་བཟོ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་དུས་མཐུན་བཟོ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: གྲལ་ཐིག་ %d: མ་ཤེས་པའི་ལག་ལེན་པ་%s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: གྲལ་ཐིག་ %d: ཆོག་ཡིག་ཐོ་བཀོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: མ་ཤེས་པའི་ལག་ལེན་པ།\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "མ་ཤེས་པའི་ལག་ལེན་པ་:%s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "ལག་ལེན་པ་: %s [-r|-R] སྡེ་ཚན།\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a user] སྡེ་ཚན།\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d user] སྡེ་ཚན།\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A user,...] [-M user,...] སྡེ་ཚན།\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M user,...] སྡེ་ཚན།\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: གྱིབ་མ་ལྡེ་མིག་ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: ཡིག་སྣོད་ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: ཡིག་སྣོད་ལོག་འབྲི་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་ལོག་འབྲི་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: ཡིག་སྣོད་ལྡེ་མིག་ཕྱེ་མིཚུགས།\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: ཐོ་བཀོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: གྱིབ་མའི་ཐོ་བཀོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "མ་ཤེས་པའི་སྡེ་ཚན་:%s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: ཡིག་སྣོད་ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "ཁྱོད་ག་སྨོ?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: མ་ཤེས་པའི་འཐུས་མི་ %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: སྡེ་ཚན་ཐོ་བཀོད་གསརཔ་ཁ་སྐོང་འབད་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ལོག་འབྲི་མི་ཚུགས།\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ ལོག་འབྲི་མི་ཚུགས།\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མ་ཚུགས།\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མ་ཚུགས།\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མ་ཚུགས།\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མ་ཚུགས།\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: ཇི་ཨའི་ཌི་ %uའདི་ ཐུན་མོང་པ་ཨིན།\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: སྡེ་ཚན་ཐོ་བཀོད་རྩ་བསྐྲད་གཏང་པའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཐོ་བཀོད་རྩ་བསྐྲད་གཏང་པའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: ལག་ལེན་པའི་གཞི་རིམ་སྡེ་ཚན་ རྩ་བསྐྲད་གཏང་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: པི་ཨེ་ཨེམ་ བདེན་བཤད་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མ་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "Unable to open group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མ་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s འདི་ /etc/groupནང་མི་འཐོབ།\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u འདི་ ཐུན་མོང་གི་ཇི་ཨའི་ཌི་མེན།\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s འདི་ ཐུན་མོང་གི་མིང་མེན།\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་འདི་ ལོག་འབྲི་མི་བཏུབ།\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་འདི་ ལྡེ་མིག་བརྐྱབ་མ་ཚུགས།\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མ་ཚུགས།\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: ཡིག་སྣོད་ %sའདི་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: %sགི་དོན་ལུ་ གྱིབ་མའི་ཐོ་བཀོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: སྡེ་ཚན་ %sགི་དོན་ལུ་ ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ %sབསྐྲད་གཏང་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ བཏོན་གཏང་མི་ཚུགས།\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "མ་ཤེས་པའི་ ཇི་ཨའི་ཌི་:%u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "མ་ཤེས་པའི་ ཇི་ཨའི་ཌི་:%lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: ལག་ལེན་པ་  %sའདི་ མེད།\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'།\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: /etc/passwd ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: /etc/passwd ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: /etc/passwd ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: /etc/passwd ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: ཡིག་སྣོད་ཚུ་ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: ཡིག་སྣོད་དུས་མཐུན་བཟོ་བའི་སྐབས་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: གྲལ་ཐིག་ %d:ལག་ལེན་པ་ %sའཚོལ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: %sགི་དོན་ལུ་ ཆོག་ཡིག་ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: %sགི་དོན་ལུ་ གྱིབ་མའི་ཐོ་བཀོད་ རྩ་བསྐྲད་གཏང་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: ལག་ལེན་པ་%sགི་དོན་ལུ་ ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ བཏོན་གཏང་མི་ཚུགས།\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: མ་ཤེས་པའི་ཇི་ཨའི་ཌི་ %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: མ་ཤེས་པའི་སྡེ་ཚན་ %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: དུས་མཐུན་gshadowནང་ལུ་ དྲན་ཚད་ལས་བརྒལ་བ།\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་འདི་ ལོག་འབྲི་མི་བཏུབ།\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་འདི་ ལོག་འབྲི་མི་བཏུབ།\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་འདི་ ལྡེ་མིག་བརྐྱབ་པའི་བསྒང་ལུ་འཛོལ་བ།\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ཁ་ཕྱེ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ལྡེ་མིག་བརྐྱབ་པའི་བསྒང་ལུ་ འཛོལབ།\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ཁ་ཕྱེ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཐོ་བཀོད་གསརཔ་ཁ་སྐོང་འབད་བའི་སྐབས་ལུ་འཛོལ་བ།\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཐོ་བཀོད་གསརཔ་ ཁ་སྐོང་འབད་བའི་སྐབས་ལུ་འཛོལ་བ།\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: ཉེན་བརྡ་: CREATE_HOME རྒྱབ་སྐྱོར་མ་འབད་ དེའི་ཚབ་ལུ་ -mལག་ལེན་འཐབ་གནང་།\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: སྡེ་ཚན་ཐོ་བཀོད་དུས་མཐུན་བཟོ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: སྡེ་ཚན་ཐོ་བཀོད་དུས་མཐུན་བཟོ་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: གྱིབ་མའི་སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མི་ཚུགས།\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཐོ་བཀོད་བཏོན་གཏང་པའི་སྐབས་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཡིག་ཐོ་བཀོད་བོཏན་གཏང་པའི་སྐབས་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: ལག་ལེན་པ་  %sའདི་ མེད།\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: སྡེ་ཚན་ཐོ་བཀོད་གསརཔ་ཁ་སྐོང་འབད་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s:  uid %luའདི་ ཐུན་མོང་ཨིན།\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཐོ་བཀོད་སོར་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: ཆོག་ཡིག་ཐོ་བཀོད་རྩ་བསྐྲད་གཏང་པའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: གྱིབ་མའི་ཆོག་ཡིག་ཐོ་བཀོད་རྩ་བསྐྲད་གཏང་པའི་བསྒང་ལུ་ འཛོལ་བ།\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: ཐུན་མོང་མ་ཡིན་པའི་ ཇི་ཨའི་ཌི་འཐོབ་མི་ཚུགས།\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr "'%.200s'ནང་ལས་  '%.100s'གུ"
+
+#~ msgid " on '%.100s'"
+#~ msgstr "'%.100s'གུ"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: གྲལ་ཐིག་ %d: ཡུ་ཨའི་ཌི་ གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: མིང་ %s འདི་ ཐུན་མོང་པ་ཨིན།\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ལག་ལེན་:chgpasswd [གདམ་ཁ་ཚུ་]\n"
+#~ "གདམ་ཁ་ཚུ་:\n"
+#~ "  -e, --encrypted\t བཀྲམ་སྤེལ་འབད་ཡོད་པའི་ཆོག་ཡིག་ཚུ་ གསང་བ་བཟོ་ཡོདཔ།\n"
+#~ "  -h, --help\t\t གྲོགས་རམ་འཕྲིན་དོན་འདི་ མཀྲམ་སྟོན་འབད་ཞིནམ་ལས་ ཕྱིར་འཐོན་འབད།\n"
+#~ "  -m, --md5\t\t བཀྲམ་སྟོན་\n"
+#~ "འབད་ཡོད་པའི་\t\t\t ཆོག་ཡིག་ཚུ་གསང་བཟོས་མེན་པ་ཅིན་ ཌི་ཨི་ཨེསི་གི་ཚབ་ལུ་ ཨེམ་ཌི་ ༥ གསང་ ལག་"
+#~ "ལེན་འཐབ།\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "ཆོག་ཡིག་ཡིག་སྣོད་མེད།\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "དགོངསམ་མ་ཁྲེལ།\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "དགོསངམ་མ་ཁྲེལ་ %s གི་དོན་ལུ་ ཆོག་ཡིག་འདི་ད་རུང་ཡང་སོར་མི་བཏུབ།\n"
+
+#~ msgid "Sorry."
+#~ msgstr "དགོངསམ་མ་ཁྲེལ།"
diff --git a/po/el.gmo b/po/el.gmo
new file mode 100644 (file)
index 0000000..6585f93
Binary files /dev/null and b/po/el.gmo differ
diff --git a/po/el.po b/po/el.po
new file mode 100644 (file)
index 0000000..c994cf4
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,2701 @@
+# translation of shadow_po_el.po to Greek
+# Shadow Password Suite
+# Greek Translation by Nikos Mavroyanopoulos
+# Thanks to Simos Xenitelis (S.Xenitellis@rhbnc.ac.uk) for his
+# comments about making this translation better.
+# Kostas Papadimas <pkst@gnome.org>, 2005.
+# Konstantinos Margaritis <markos@debian.org>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow_po_el\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-11-24 21:44+0100\n"
+"Last-Translator: Konstantinos Margaritis <markos@debian.org>\n"
+"Language-Team: Greek <debian-l10n-greek@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.10.2\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Αδυναμία δέσμευσης χώρου για πληροφορίες διαμόρφωσης.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"σφάλμα διαμόρφωσης - άγνωστο αντικείμενο '%s' (ειδοποιήστε το διαχειριστή)\n"
+
+msgid "Password: "
+msgstr "Συνθηματικό: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Του %s το Συνθηματικό: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Προειδοποίηση: άγνωστη ομάδα %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Προειδοποίηση: Πολλές ομάδες\n"
+
+msgid "Your password has expired."
+msgstr "Το συνθηματικό σας έχει λήξει."
+
+msgid "Your password is inactive."
+msgstr "Το συνθηματικό σας είναι ανενεργό."
+
+msgid "Your login has expired."
+msgstr "Ο κωδικός εισόδου σας έχει λήξει."
+
+msgid "  Contact the system administrator."
+msgstr "  Επικοινωνήστε με τον διαχειριστή του συστήματος."
+
+msgid "  Choose a new password."
+msgstr "   Επιλέξτε ένα νέο συνθηματικό."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Το συνθηματικό σας θα λήξει σε %ld μέρες.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Το συνθηματικό σας θα λήξει αύριο."
+
+msgid "Your password will expire today."
+msgstr "Το συνθηματικό σας θα λήξει σήμερα."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Αδυναμία αλλαγής tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: Πολύ μακριά πεδία\n"
+
+msgid "Environment overflow\n"
+msgstr "Υπερχείλιση περιβάλλοντος\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Δεν μπορείτε να αλλάξετε το $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d αποτυχία από την τελευταία είσοδο.\n"
+" Η τελευταία ήταν στις %s στο %s.\n"
+msgstr[1] ""
+"%d αποτυχίες από την τελευταία είσοδο.\n"
+" Η τελευταία ήταν στις %s στο %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: αδυναμία λήψης μοναδικού UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: αδυναμία λήψης μοναδικού GID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: αδυναμία λήψης μοναδικού UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: αδυναμία λήψης μοναδικού UID\n"
+
+msgid "Too many logins.\n"
+msgstr "Πολλές είσοδοι στο σύστημα.\n"
+
+msgid "You have new mail."
+msgstr "Έχετε νέα γράμματα."
+
+msgid "No mail."
+msgstr "Κανένα γράμμα."
+
+msgid "You have mail."
+msgstr "Έχετε γράμματα."
+
+msgid "no change"
+msgstr "καμιά αλλαγή"
+
+msgid "a palindrome"
+msgstr "μια παλινδρόμηση"
+
+msgid "case changes only"
+msgstr "αλλαγές κεφαλαίων/πεζών μόνο"
+
+msgid "too similar"
+msgstr "αρκετά παρόμοιο"
+
+msgid "too simple"
+msgstr "πολύ απλό"
+
+msgid "rotated"
+msgstr "κυλιόμενο"
+
+msgid "too short"
+msgstr "πολύ σύντομο"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Κακό συνθηματικό: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "συνθηματικό: pam_start() απέτυχε, σφάλμα %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "συνθηματικό: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Το συνθηματικό άλλαξε."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: το συνθηματικό ενημερώθηκε επιτυχώς\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Εσφαλμένο συνθηματικό για %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Αδυναμία αλλαγής καταλόγου στον \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Χωρίς κατάλογο, εισαγωγή με ΜΗΤΡΙΚΟ_ΚΑΤΑΛΟΓΟ=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Αδυναμία εκτέλεσης %s"
+
+#, fuzzy, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Μη έγκυρος πρωταρχικός κατάλογος \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Αδυναμία αλλαγής του πρωταρχικού καταλόγου σε \"%s\"\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Δεν είναι δυνατόν να καθοριστεί το όνομα tty."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: δεν υπάρχει ελεύθερη μνήμη\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "Η κλήση malloc(%d) απέτυχε\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Όχι\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Χρήση: change [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        ρύθμιση τελευταίας αλλαγής συνθηματικού σε\n"
+"                                LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  ρύθμιση ημερομηνίας λήξης λογαριασμού σε\n"
+"                                EXPIRE_DATE\n"
+"  -h, --help                    προβολή αυτού του μηνύματος βοήθειας και\n"
+"                                έξοδος\n"
+"  -I, --inactive INACTIVE       ρύθμιση ανενεργού κωδικού μετά από τη λήξη\n"
+"                                του σε INACTIVE\n"
+"  -l, --list                    προβολή πληροφοριών ηλικίας λογαριασμού\n"
+"  -m, --mindays MIN_DAYS        ρύθμιση ελάχιστου αριθμού ημερών πριν την\n"
+"                                αλλαγή συνθηματικού σε MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        ρύθμιση μέγιστου αριθμού ημερών πριν την\n"
+"                                αλλαγή συνθηματικού σε MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      ρύθμιση προειδοποιήσεων ημερών λήξης σε\n"
+"                                WARN_DAYS\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Εισάγετε την νέα τιμή, ή πιέστε ENTER για την προκαθορισμένη"
+
+msgid "Minimum Password Age"
+msgstr "Μικρότερη διάρκεια συνθηματικού"
+
+msgid "Maximum Password Age"
+msgstr "Μέγιστη διάρκεια συνθηματικού"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Τελευταία αλλαγή συνθηματικού (ΧΧΧΧ-ΜΜ-ΗΗ)"
+
+msgid "Password Expiration Warning"
+msgstr "Προειδοποίηση λήξης συνθηματικού"
+
+msgid "Password Inactive"
+msgstr "Ανενεργό συνθηματικό"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Ημερομηνία Λήξης Λογαριασμού (ΧΧΧΧ-ΜΜ-ΗΗ)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Τελευταία αλλαγή συνθηματικού \t\t\t\t\t: "
+
+msgid "never"
+msgstr "Ποτέ"
+
+msgid "password must be changed"
+msgstr "το συνθηματικό πρέπει να αλλαχθεί"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Το συνθηματικό λήγει\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Ανενεργό συνθηματικό\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Ο λογαριασμός λήγει\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Ελάχιστος αριθμός ημερών μεταξύ των αλλαγών συνθηματικού\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Μέγιστος αριθμός ημερών μεταξύ των αλλαγών συνθηματικού\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Αριθμός ημερών πριν τη λήξη του συνθηματικού\t: %ld\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: Μη έγκυρη ημερομηνία `%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: Μη έγκυρη αριθμητική παράμετρος `%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: Να μην συμπεριλαμβάνετε το \"l\" με τις άλλες ενδείξεις\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: άδεια απορρίφθηκε\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Δεν είναι δυνατόν να καθοριστεί το όνομα χρήστη σας.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: Αποτυχία εξακρίβωσης PAM\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: αδυναμία κλειδώματος αρχείων, ξαναδοκιμάστε αργότερα\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: αδυναμία ανοίγματος αρχείου %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: αποτυχία διχάλωσης: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: αποτυχία απόρριψης προνομίων (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: Το αρχείο σκιωδών συνθηματικών δεν υπάρχει\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: αποτυχία απόρριψης προνομίων (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: Ο χρήστης %s δεν υπάρχει\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Αλλαγή πληροφοριών χρόνου για τον %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: Σφάλμα κατά την αλλαγή πεδίων\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Χρήση: %s [-f πλήρες_όνομα] [-r αρίθμ_δωματίου] [-w τηλ_εργασίας]\n"
+"\t[-h τηλ_οικίας] [-o άλλο] [χρήστης]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Χρήση: %s [-f πλήρες_όνομα] [-r αριθμ_δωματίου] [-w τηλ_δωματίου]\n"
+"[-h τηλ_οικίας]\n"
+
+msgid "Full Name"
+msgstr "Πλήρες όνομα"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Αριθμός δωματίου"
+
+msgid "Work Phone"
+msgstr "Τηλέφωνο Εργασίας"
+
+msgid "Home Phone"
+msgstr "Τηλέφωνο Οικίας"
+
+msgid "Other"
+msgstr "Άλλο"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Αδυναμία αλλαγής ταυτότητας χρήστη σε root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: Μη έγκυρο όνομα: `%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: Μη έγκυρος αριθμός δωματίου: `%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: Μη έγκυρο τηλέφωνο εργασίας: `%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: Μη έγκυρο τηλέφωνο οικίας: `%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" περιέχει μη έγκυρους χαρακτήρες\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" περιέχει μη έγκυρους χαρακτήρες\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: Ο χρήστης %s δεν υπάρχει\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: αδυναμία αλλαγής χρήστη `%s' στον NIS εξυπηρετούμενο.\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: `%s' είναι ο κύριος διακομιστής NIS γι'αυτόν τον εξυπηρετούμενο.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Αλλαγή πληροφοριών χρήστη για τον %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: Πολύ μακριά πεδία\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Χρήση: chpasswd [options]\n"
+"\n"
+"Επιλογές:\n"
+"  -e, --encrypted               τα παρεχόμενα συνθηματικά είναι\n"
+"                                κρυπτογραφημένα\n"
+"  -h, --help                    προβολή αυτού του μηνύματος βοήθειας και\n"
+"                                έξοδος\n"
+"  -m, --md5                     χρήση κρυπτογράφησης MD5 αντί για DES όταν\n"
+"                                τα παρεχόμενα συνθηματικά δεν είναι\n"
+"                                κρυπτογραφημένα\n"
+"\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: -επιτρέπεται ΜΟΝΟ μια σημαία με τη -G flag\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: γραμμή %d: πολύ μεγάλη γραμμή\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: γραμμή %d: έλλειψη νέου συνθηματικού\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: Η ομάδα %s δεν υπάρχει\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: γραμμή %d: αδυναμία ανανέωσης καταχώρησης\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: Ανιχνεύτηκε σφάλμα, οι αλλαγές αγνοήθηκαν\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Χρήση: %s [είσοδος]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: Ο χρήστης %s δεν υπάρχει\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: Ο χρήστης %s δεν υπάρχει\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Κέλυφος Εισόδου"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Δεν μπορείτε να αλλάξετε το φλοιό για το(ν) %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Αλλαγή του φλοιού για τον %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Μη έγκυρη καταχώρηση: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s δεν είναι έγκυρος φλοιός.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Χρήση: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Login       Αποτυχίες Μέγιστο Τελευταία                   Στις\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds απέμειναν]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds κλείδωμα]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Άγνωστος χρήστης: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: αδυναμία ανοίγματος αρχείου %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Το συνθηματικό για τον %s δεν μπορεί να αλλάξει.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: σκιώδη συνθηματικά ομάδων απαιτούνται για το -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: Η ομάδα %s δεν υπάρχει\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: αποτυχία διχάλωσης: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Αλλαγή του συνθήματος για την ομάδα %s\n"
+
+msgid "New Password: "
+msgstr "Νέο Συνθηματικό: "
+
+msgid "Re-enter new password: "
+msgstr "Εισάγετε ξανά το νέο συνθηματικό: "
+
+msgid "They don't match; try again"
+msgstr "Δεν ταιριάζουν. Δοκιμάστε ξανά"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Ξαναδοκιμάστε αργότερα\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Προσθήκη του χρήστη %s στην ομάδα %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Διαγραφή του χρήστη %s από την ομάδα %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: Ο χρήστης %s δεν υπάρχει\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Δεν είναι tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Χρήση: %s [είσοδος]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: Το %s δεν είναι έγκυρο όνομα ομάδας\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "Μη έγκυρο όνομα ομάδας `%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K απαιτεί KEY=VALUE\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: Η ομάδα %s υπάρχει\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr "Χρήση: groupdel ομάδα\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: αδυναμία μετονομασίας του καταλόγου %s σε %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: αδυναμία αλλαγής χρήστη `%s' στον NIS εξυπηρετούμενο.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: Η ομάδα %s δεν υπάρχει\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: Η ομάδα `%s' είναι NIS ομάδα.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: Ο %s είναι ο κύριος διακομιστής NIS\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: Ο χρήστης %s είναι NIS χρήστης\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: δεν υπάρχει ελεύθερη μνήμη στο update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "Μη έγκυρο όνομα ομάδας `%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: Η ομάδα %s είναι NIS ομάδα\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: άγνωστος χρήστης %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Χρήση: %s [-r] [-s] [group [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Χρήση: %s [-r] [-s] [group]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s και -r είναι ασύμβατα\n"
+
+msgid "invalid group file entry"
+msgstr "Μη έγκυρη καταχώρηση στο αρχείο ομάδων"
+
+#, fuzzy, c-format
+msgid "delete line '%s'? "
+msgstr "διαγραφή γραμμής `%s'; "
+
+msgid "duplicate group entry"
+msgstr "αντιγραφή καταχώρησης στο αρχείο ομάδων"
+
+#, fuzzy, c-format
+msgid "invalid group name '%s'\n"
+msgstr "Μη έγκυρο όνομα ομάδας `%s'\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "Μη έγκυρο όνομα ομάδας `%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "ομάδα %s: δεν υπάρχει χρήστης %s\n"
+
+#, fuzzy, c-format
+msgid "delete member '%s'? "
+msgstr "διαγραφή μέλους `%s'; "
+
+#, fuzzy, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "Δεν βρέθηκε καταχώρηση στο αρχείο ομάδων που να ταιριάζει\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "σκιώδης ομάδα %s: δεν υπάρχει χρήστης %s\n"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "Μη έγκυρη καταχώρηση στο αρχείο σκιωδών συνθηματικών ομάδων"
+
+msgid "duplicate shadow group entry"
+msgstr "αντιγραφή καταχώρησης στο αρχείο σκιωδών συνθηματικών ομάδων"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "σκιώδης ομάδα %s: Δεν υπάρχει διαχειριστής χρήστης %s\n"
+
+#, fuzzy, c-format
+msgid "delete administrative member '%s'? "
+msgstr "διαγραφή διαχειριστικού μέλους `%s'; "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "σκιώδης ομάδα %s: δεν υπάρχει χρήστης %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: τα αρχεία ανανεώθηκαν\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: καμιά αλλαγή\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Χρήση: groupdel ομάδα\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Χρήση: groupdel ομάδα\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: αδυναμία ανανέωσης αρχείου %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Χρήση: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Χρήση: id\n"
+
+msgid " groups="
+msgstr " ομάδες="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Χρήση: lastlog [options]\n"
+"\n"
+"Επιλογές:\n"
+"  -b, --before DAYS             εκτύπωση μόνο των τελευταίων εγγραφών\n"
+"                                lastlog παλαιότερων από DAYS\n"
+"  -h, --help                    προβολή αυτού του μηνύματος βοήθειας και\n"
+"                                έξοδος\n"
+"  -t, --time DAYS               εκτύπωση μόνο των τελευταίων εγγραφών\n"
+"                                lastlog πιο πρόσφατων από από DAYS\n"
+"  -u, --user LOGIN              εκτύπωση τελευταίας εγγραφής lastlog για\n"
+"                                χρήστη με καθορισμένο LOGIN\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Όνομα_Χρήστη     Θύρα     Από              Τελευταία"
+
+msgid "Username                Port     Latest"
+msgstr "Όνομα_Χρήστη            Θύρα     Τελευταία"
+
+msgid "**Never logged in**"
+msgstr "**Καμιά είσοδος στο σύστημα**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Χρήση: %s [-p] [όνομα]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h σύστημα] [-f όνομα]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r σύστημα\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Εσφαλμένη ώρα εισόδου"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Το σύστημα έκλεισε για συντήρηση ρουτίνας"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Παράκαμψη αποσύνδεσης -- Η είσοδος του root επετράπη.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Η διαδικασία εισόδου τερματίστηκε μετά από %d δευτερόλεπτα.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Δεν υπάρχει καταχώριση utmp.  Πρέπει να εκτελέσετε \"login\" από το \"sh\" "
+"του πιο χαμηλού επιπέδου"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: αποτυχία PAM, εγκατάλειψη: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Μέγιστος αριθμός ημερών μεταξύ των αλλαγών συνθηματικού\t\t: %ld\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr "Διαδικασία εισόδου απέτυχε"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: αποτυχία διχάλωσης: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"Προειδοποίηση: Η είσοδος επανενεργοποιήθηκε μετά από προσωρινό αποκλεισμό."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Τελευταία είσοδος: %s στο %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Τελευταία είσοδος: %.19s στο %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " από %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"υπέρβαση ορίου χρόνου εισόδου\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Χρήση: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Χρήση: newgrp [-] [ομάδα]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Χρήση: sg ομάδα [[-c] εντολή]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Παλιό Συνθηματικό: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: αποτυχία διχάλωσης: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: Ο χρήστης %s δεν υπάρχει\n"
+
+msgid "too many groups\n"
+msgstr "πάρα πολλές ομάδες\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: Η ομάδα %s δεν υπάρχει\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: Μη έγκυρο όνομα χρήστη `%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: Μη έγκυρο όνομα χρήστη `%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: γραμμή %d: μη έγκυρη γραμμή\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: αδυναμία ανανέωσης καταχώρησης για τον χρήστη %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: γραμμή %d: αδυναμία δημιουργίας GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: γραμμή %d: αδυναμία δημιουργίας GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: Ο χρήστης %s δεν υπάρχει\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: γραμμή %d: αδυναμία ανανέωση συνθηματικού\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: γραμμή %d: αποτυχία δημιουργίας καταλόγου(mkdir)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: γραμμή %d: αποτυχία αλλαγής ιδιοκτήτη(chown)\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: γραμμή %d: αδυναμία ανανέωσης καταχώρησης\n"
+
+#, fuzzy
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Χρήση: passwd [options] [login]\n"
+"\n"
+"Επιλογές:\n"
+"  -a, --all                     αναφορά κατάστασης συνθηματικών για όλους\n"
+"                                τους λογαριασμούς\n"
+"  -d, --delete                  διαγραφή συνθηματικού για το συγκεκριμένο\n"
+"                                λογαριασμό\n"
+"  -e, --expire                  εξαναγκασμός λήξης του συνθηματικού για το\n"
+"                                συγκεκριμένο λογαριασμό\n"
+"  -h, --help                    προβολή αυτού του μηνύματος βοήθειας και\n"
+"                                έξοδος\n"
+"  -k, --keep-tokens             αλλαγή συνθηματικού μόνο αν αυτό έχει λήξει\n"
+"  -i, --inactive INACTIVE       ρύθμιση ανενεργού συνθηματικού μετά τη λήξη\n"
+"                                του σε ΑΝΕΝΕΡΓΟ\n"
+"  -l, --lock                    κλείδωμα του συγκεκριμένου λογαριασμού\n"
+"  -n, --mindays MIN_DAYS        ρύθμιση ελάχιστου αριθμού ημερών πριν την\n"
+"                                αλλαγή συνθηματικού σε MIN_DAYS\n"
+"  -q, --quiet                   σιωπηρή λειτουργία\n"
+"  -r, --repository REPOSITORY   αλλαγή συνθηματικού στο REPOSITORY\n"
+"                                repository\n"
+"  -S, --status                  αναφορά κατάστασης συνθηματικού για το\n"
+"                                συγκεκριμένο λογαριασμό\n"
+"  -u, --unlock                  ξεκλείδωμα του συγκεκριμένου λογαριασμού\n"
+"  -w, --warndays WARN_DAYS      ρύθμιση ημερών προειδοποίησης λήξης σε\n"
+"                                WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        ρύθμιση μέγιστου αριθμού ημερών πριν την\n"
+"                                αλλαγή συνθηματικού σε MAX_DAYS\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Παλιό Συνθηματικό: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Εισάγετε το νέο συνθηματικό (ελάχιστο %d, μέγιστο %d χαρακτήρες)\n"
+"Παρακαλώ χρησιμοποιήστε ένα συνδυασμό από κεφαλαία και μικρά γράμματα\n"
+"καθώς και αριθμούς.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Εισάγετε το νέο συνθηματικό (ελάχιστο %d, μέγιστο %d χαρακτήρες)\n"
+"Παρακαλώ χρησιμοποιήστε ένα συνδυασμό από κεφαλαία και μικρά γράμματα\n"
+"καθώς και αριθμούς.\n"
+
+msgid "New password: "
+msgstr "Νέο Συνθηματικό: "
+
+msgid "Try again."
+msgstr "Ξαναδοκιμάστε."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Προσοχή: αδύναμο συνθηματικό (εισάγετε το πάλι για να το χρησιμοποιήσετε)."
+
+msgid "They don't match; try again.\n"
+msgstr "Δεν ταιριάζουν. Δοκιμάστε ξανά.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Το συνθηματικό για τον %s δεν μπορεί να αλλάξει.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Το συνθηματικό για τον %s δεν μπορεί να αλλάξει.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: η αποθήκη %s δεν υποστηρίζεται\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Δεν μπορείτε να δείτε αλλάξετε το συνθηματικό του %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Αλλαγή συνθηματικού για τον %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Το συνθηματικό για τον %s δεν άλλαξε.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Το συνθηματικό άλλαξε."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Προειδοποίηση λήξης συνθηματικού"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Χρήση: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s και -r είναι ασύμβατα\n"
+
+msgid "invalid password file entry"
+msgstr "Μη έγκυρη καταχώρηση στο αρχείο συνθηματικών"
+
+msgid "duplicate password entry"
+msgstr "διπλότυπη καταχώριση στο αρχείο συνθηματικών"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "Μη έγκυρο όνομα χρήστη '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "Μη έγκυρο όνομα χρήστη '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "χρήστης %s: καμιά ομάδα %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "χρήστης %s: ο κατάλογος %s δεν υπάρχει\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "χρήστης %s: το πρόγραμμα %s δεν υπάρχει\n"
+
+#, fuzzy, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "Δεν βρέθηκε καταχώριση στο αρχείο συνθηματικών που να ταιριάζει\n"
+
+#, fuzzy, c-format
+msgid "add user '%s' in %s? "
+msgstr "σκιώδης ομάδα %s: δεν υπάρχει χρήστης %s\n"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "Μη έγκυρη καταχώριση στο αρχείο σκιωδών συνθηματικών"
+
+msgid "duplicate shadow password entry"
+msgstr "διπλότυπη καταχώριση στο αρχείο σκιωδών συνθηματικών"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "χρήστης %s: τελευταία αλλαγή συνθηματικού στο μέλλον\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: αδυναμία ανοίγματος αρχείου %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Χρήση: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Χρήση: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Πρόσβαση στη su σε αυτόν τον λογαριασμό ΑΡΝΗΘΗΚΕ.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Παράκαμψη εξακρίβωσης με συνθηματικό.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Παρακαλώ εισάγετε το ΔΙΚΟ σας συνθηματικό για εξακρίβωση.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Χρήση: su [options] [login]\n"
+"\n"
+"Επιλογές:\n"
+"  -c, --command ΕΝΤΟΛΗ          εκτέλεση της ΕΝΤΟΛΗΣ στο καλούμενο κέλυφος\n"
+"  -h, --help                    προβολή αυτού του μηνύματος βοήθειας και\n"
+"                                έξοδος\n"
+"  -, -l, --login                κάνει το κέλυφος ένα κέλυφος εισόδου\n"
+"  -m, -p,\n"
+"  --preserve-environment        δεν γίνεται αρχικοποίηση μεταβλητών\n"
+"                                περιβάλλοντος, και διατηρεί το ίδιο κέλυφος\n"
+"  -s, --shell SHELL             χρήση SHELL αντί του προεπιλεγμένου στο\n"
+"                                passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: πρέπει να εκτελεστεί από τερματικό\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: σφάλμα %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Άγνωστη ταυτότητα: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Δεν έχετε άδεια για su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Εισάγετε το δικό σας συνθηματικό)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Αγνοήθηκε)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: Αποτυχία εξακρίβωσης PAM\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Δεν έχετε άδεια για su %s\n"
+
+msgid "No shell\n"
+msgstr "Δεν υπάρχει φλοιός\n"
+
+msgid "No password file"
+msgstr "Δεν υπάρχει αρχείο συνθηματικών"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Δεν υπάρχει καταχώρηση συνθηματικού για τον 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Πληκτρολογήστε control-d για να συνεχίσετε με την κανονική έναρξη,\n"
+"(ή δώστε το συνθηματικό του root για συντήρηση του συστήματος):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Έναρξη Κατάστασης Συντήρησης Συστήματος"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: αδυναμία δημιουργίας νέου αρχείου προκαθορισμένων ρυθμίσεων\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: αδυναμία ανοίγματος νέου αρχείου προκαθορισμένων ρυθμίσεων\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: γραμμή %d: αποτυχία αλλαγής ιδιοκτήτη(chown)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: μετονομασία: %s"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: Η ομάδα `%s' είναι NIS ομάδα.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: Προσδιορίστηκαν υπερβολικές ομάδες (μεγ. %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Χρήση: %s [είσοδος]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: Μη έγκυρος κατάλογος βάσης `%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: Μη έγκυρο σχόλιο `%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: Μη έγκυρος αρχικός κατάλογος χρήστη `%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: σκιώδη συνθηματικά απαιτούνται για το -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: σκιώδη συνθηματικά απαιτούνται για -f\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: Μη έγκυρο πεδίο `%s'\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: Μη έγκυρος φλοιός `%s'\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: αδυναμία δημιουργίας καταλόγου %s\n"
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: Ο χρήστης %s υπάρχει\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: ομάδα %s υπάρχει - αν θέλετε να προσθέσετε αυτόν το χρήστη σε αυτή την "
+"ομάδα, χρησιμοποιήστε -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: αδυναμία δημιουργίας του %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: Το UID %u δεν είναι μοναδικό\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: αδυναμία δημιουργίας του %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: προειδοποίηση: ο αρχικός κατάλογος χρήστη υπάρχει ήδη.\n"
+"Δεν έγινε αντιγραφή σε αυτό οποιουδήποτε καταλόγου skel.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Αδυναμία αφαίρεσης της ομάδας %s ή οποία είναι πρωταρχική ομάδα για άλλο "
+"χρήστη.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: προειδοποίηση: αδυναμία διαγραφής "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: Το %s δεν ανήκει στον %s, δεν αφαιρείται\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: Ο χρήστης %s είναι NIS χρήστης\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: Ο χρήστης %s βρίσκεται στο σύστημα\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: Μη έγκυρος αρχικός κατάλογος χρήστη `%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: Δεν διαγράφεται ο κατάλογος %s (θα αφαιρούσε τον αρχικό κατάλογο του "
+"χρήστη %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: Σφάλμα κατά την διαγραφή του καταλόγου %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Χρήση: usermod [options] LOGIN\n"
+"\n"
+"Επιλογές:\n"
+"  -a, --append GROUP            προσθήκη του χρήστη σε συμπληρωματική ΟΜΑΔΑ\n"
+"  -c, --comment COMMENT         νέα τιμή του πεδίου GECOS\n"
+"  -d, --home HOME_DIR           νλεος κατάλογος εισόδου για το νέο\n"
+"                                λογαριασμό χρήστη\n"
+"  -e, --expiredate EXPIRE_DATE  ρύθμιση ημερομηνίας λήξης λογαριασμού σε\n"
+"                                EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       ρύθμιση συνθηματικού ως ανενεργού μετά από\n"
+"                                τη λήξη του σε ΑΝΕΝΕΡΓΟ\n"
+"  -g, --gid GROUP               εξαναγκασμός χρήσης ΟΜΑΔΑΣ ως τη νέα αρχική\n"
+"                                ομάδα εισόδου\n"
+"  -G, --groups GROUPS           λίστα των συμπληρωματικών ΟΜΑΔΩΝ\n"
+"  -h, --help                    προβολή του μηνύματος βοήθειας και έξοδος\n"
+"  -l, --login LOGIN             νέα τιμή του ονόματος εισόδου\n"
+"  -L, --lock                    κλείδωμα του λογαριασμού χρήστη\n"
+"  -m, --move-home               μετακινεί τα περιεχόμενα του αρχικού\n"
+"                                καταλόγου στη νέατοποθεσία (χρήση μόνο με -"
+"d)\n"
+"  -o, --non-unique              επιτρέπει τη χρήση διπλότυπου (μη μοναδικού) "
+"UID\n"
+"  -p, --password PASSWORD       χρήση κρυπτογραφημένου συνθηματικού για το\n"
+"                                νέο συνθηματικό\n"
+"  -s, --shell SHELL             νέο κέλυφος εισόδου για το λογαριασμό "
+"χρήστη\n"
+"  -u, --uid UID                 νέο UID για το λογαριασμό χρήστη\n"
+"  -U, --unlock                  ξεκλείδωμα του λογαριασμού χρήστη\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: Ο χρήστης %s υπάρχει\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: Δεν δόθηκαν ενδείξεις\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: σκιώδη συνθηματικά απαιτούνται για το -e και -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: ο κατάλογος %s υπάρχει\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: αδυναμία δημιουργίας του %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: Αδυναμία αλλαγής ιδιοκτήτη(chown) του %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: προειδοποίηση: αποτυχία ολοκληρωτικής απομάκρυνσης του παλιού αρχικού "
+"καταλόγου %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: αδυναμία μετονομασίας του καταλόγου %s σε %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: προειδοποίηση: Το %s δεν ανήκει στον %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "αποτυχία αλλαγής του ιδιοκτήτη του γραμματοκιβωτίου"
+
+msgid "failed to rename mailbox"
+msgstr "αποτυχία μετονομασίας mailbox"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Χρήση: vipw [options]\n"
+"\n"
+"Επιλογές:\n"
+"  -g, --group                   επεξεργασία βάσης δεδομένων ομάδας\n"
+"  -h, --help                    προβολή κειμένου βοήθειας και έξοδος\n"
+"  -p, --passwd                  επεξεργασία βάσης δεδομένων κωδικών\n"
+"  -q, --quiet                   σιωπηλή λειτουργία\n"
+"  -s, --shadow                  επεξεργασία βάσης δεδομένων shadow ή "
+"gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: αποτυχία απόρριψης προνομίων (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: Το %s δεν άλλαξε\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Αδυναμία ξεκλειδώματος αρχείου"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Αδυναμία ξεκλειδώματος αρχείου"
+
+msgid "Couldn't make backup"
+msgstr "Αδυναμία δημιουργίας αντιγράφου ασφαλείας "
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: αδυναμία επαναφοράς %s: %s (οι αλλαγές είναι στο %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     προβολή καταγραφής faillog για όλους "
+#~ "τους\n"
+#~ "                                χρήστες\n"
+#~ "  -h, --help                    προβολή αυτού του μηνύματος βοήθειας και\n"
+#~ "                                έξοδος\n"
+#~ "  -l, --lock-time SEC           μετά από αποτυχημένη είσοδο κλείδωμα\n"
+#~ "                                λογαριασμού για SEC δευτερόλεπτα\n"
+#~ "  -m, --maximum MAX             ρύθμιση μέγιστου αριθμού καταμέτρησης\n"
+#~ "                                αποτυχημένων προσπαθειών εισόδου σε MAX\n"
+#~ "  -r, --reset                   αρχικοποίηση της καταμέτρησης "
+#~ "αποτυχημένων\n"
+#~ "                                προσπαθειών εισόδου\n"
+#~ "  -t, --time DAYS               προβολή εγγραφών faillog πιο πρόσφατων "
+#~ "από DAYS\n"
+#~ "  -u, --user LOGIN              προβάλλει τις εγγραφές faillog ή\n"
+#~ "                                διαχειρίζεται τα όρια καταμέτρησης\n"
+#~ "                                αποτυχημένων εισόδων (αν χρησιμοποιηθεί\n"
+#~ "                                με τις επιλογές -r, -m ή -l) μόνο\n"
+#~ "                                για το χρήστη με LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Χρήση: groupadd [options] group\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ "  -f, --force                   εξαναγκασμός εξόδου με κατάσταση "
+#~ "επιτυχίας\n"
+#~ "                                αν η καθορισμένη ομάδα υπάρχει ήδη\n"
+#~ "  -g, --gid GID                 χρήση GID για τη νέα ομάδα\n"
+#~ "  -h, --help                    προβολή αυτού του μηνύματος βοήθειας και\n"
+#~ "                                έξοδος\n"
+#~ "  -K, --key KEY=VALUE           παράκαμψη προεπιλογών /etc/login.defs\n"
+#~ "  -o, --non-unique              επιτρέπει τη δημιουργία ομάδας με "
+#~ "διπλότυπο\n"
+#~ "                                (μη-μοναδικό) GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Χρήση: groupadd [options] group\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ "  -f, --force                   εξαναγκασμός εξόδου με κατάσταση "
+#~ "επιτυχίας\n"
+#~ "                                αν η καθορισμένη ομάδα υπάρχει ήδη\n"
+#~ "  -g, --gid GID                 χρήση GID για τη νέα ομάδα\n"
+#~ "  -h, --help                    προβολή αυτού του μηνύματος βοήθειας και\n"
+#~ "                                έξοδος\n"
+#~ "  -K, --key KEY=VALUE           παράκαμψη προεπιλογών /etc/login.defs\n"
+#~ "  -o, --non-unique              επιτρέπει τη δημιουργία ομάδας με "
+#~ "διπλότυπο\n"
+#~ "                                (μη-μοναδικό) GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Χρήση: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ "  -b, --base-dir BASE_DIR       ο βασικός κατάλογος για τον αρχικό "
+#~ "κατάλογο\n"
+#~ "                                λογαριασμού νέου χρήστη\n"
+#~ "  -c, --comment COMMENT         ρύθμιση του πεδίου GECOS για το "
+#~ "λογαριασμό\n"
+#~ "                                νέου χρήστη\n"
+#~ "  -d, --home-dir HOME_DIR       ο αρχικός κατάλογος για το λογαριασμό "
+#~ "νέου\n"
+#~ "                                χρήστη\n"
+#~ "  -D, --defaults                εκτύπωση ή αποθήκευση τροποποιημένης\n"
+#~ "                                προεπιλεγμένης ρύθμισης tπροσθήκης "
+#~ "χρήστη\n"
+#~ "  -e, --expiredate EXPIRE_DATE  ρύθμιση ημερομηνίας λήξης λογαριασμού σε\n"
+#~ "                                EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       ρύθμιση ανενεργού συνθηματικού μετά τη "
+#~ "λήξη\n"
+#~ "                                σε ΑΝΕΝΕΡΓΟ\n"
+#~ "  -g, --gid GROUP               εξαναγκασμός χρήσης GROUP για το νέο\n"
+#~ "                                λογαριασμό χρήστη\n"
+#~ "  -G, --groups GROUPS           προβολή λίστας συμπληρωματικών ομάδων "
+#~ "για\n"
+#~ "                                το νέο λογαριασμό χρήστη\n"
+#~ "  -h, --help                    προβολή αυτού του μηνύματος βοήθειας και\n"
+#~ "                                έξοδος\n"
+#~ "  -k, --skel SKEL_DIR           καθορισμός ενός εναλλακτικού κατάλογου "
+#~ "skel\n"
+#~ "  -K, --key KEY=VALUE           παράκαμψη προεπιλογών /etc/login.defs\n"
+#~ "  -m, --create-home             δημιουργία αρχικού καταλόγου για το νέο\n"
+#~ "                                λογαριασμό χρήστη\n"
+#~ "  -o, --non-unique              επιτρέπει τη δημιουργία χρήστη με "
+#~ "διπλότυπο\n"
+#~ "                                (μη μοναδικό) UID\n"
+#~ "  -p, --password PASSWORD       χρήση κρυπτογραφημένου κωδικού για το "
+#~ "νέο\n"
+#~ "                                λογαριασμό χρήστη\n"
+#~ "  -s, --shell SHELL             το κέλυφος σύνδεσης για το νέο "
+#~ "λογαριασμό\n"
+#~ "                                χρήστη\n"
+#~ "  -u, --uid UID                 εξαναγκασμός χρήσης του UID για το νέο\n"
+#~ "                                λογαριασμό χρήστη\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Το συνθηματικό έχει ρυθμιστεί να λήξει."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: αδυναμία ανανέωσης αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: αδυναμία ανανέωσης του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tΠλήρες Όνομα: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tΑριθμός δωματίου: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tΤηλέφωνο Εργασίας: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tΤηλέφωνο Οικίας: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr ""
+#~ "Αδυναμία κλειδώματος του αρχείου συνθηματικών. Δοκιμάστε αργότερα.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Αδυναμία ανοίγματος του αρχείου συνθηματικών.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: Ο %s δεν βρέθηκε στο /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Σφάλμα κατά την ανανέωση καταχώρησης στο αρχείο συνθηματικών.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Αδυναμία εισαγωγής των αλλαγών στο αρχείο συνθηματικών.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Αδυναμία ξεκλειδώματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου ομάδων\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου ομάδων\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου σκιωδών συνθηματικών\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την ανανέωση καταχωρήσεων στο αρχείο σκιωδών "
+#~ "συνθηματικών\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: Σφάλμα κατά την ανανέωση καταχώρισης ομάδας\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: γραμμή %d: άγνωστος χρήστης %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: γραμμή %d: αδυναμία ανανέωσης καταχώρησης\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την ανανέωση καταχωρήσεων στο αρχείο σκιωδών "
+#~ "συνθηματικών\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: Σφάλμα κατά την ανανέωση καταχωρήσεων στο αρχείο συνθηματικών\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: γραμμή %d: άγνωστος χρήστης %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: γραμμή %d: αδυναμία ανανέωσης καταχώρησης συνθηματικού\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: άγνωστος χρήστης\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Άγνωστος χρήστης: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Χρήση: %s [-r|-R] ομάδα\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a χρήστης] ομάδα\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d χρήστης] ομάδα\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A χρήστης,...] [-M χρήστης,...] ομάδα\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M χρήστης,...] ομάδα\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: Αδυναμία δημιουργίας κλειδώματος\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr ""
+#~ "%s: Αδυναμία δημιουργίας κλειδώματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής αρχείου\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: αδυναμία ξεκλειδώματος αρχείου\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: αδυναμία ανανέωσης καταχώρησης\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr ""
+#~ "%s: αδυναμία ανανέωσης καταχώρησης στο αρχείο σκιωδών συνθηματικών\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "άγνωστη ομάδα: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Ποιος είσαι;\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: άγνωστο μέλος %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: Σφάλμα κατά την προσθήκη νέας καταχώρησης στο αρχείο ομάδων\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής του αρχείου ομάδων\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: Αδυναμία κλειδώματος του αρχείου ομάδων\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: Αδυναμία ανοίγματος του αρχείου ομάδων\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: Αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: Αδυναμία ανοίγματος του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: Το GID %u δεν είναι μοναδικό\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: Σφάλμα κατά την διαγραφή καταχώρησης ομάδας\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την αφαίρεση καταχώρησης στο αρχείο σκιωδών συνθηματικών "
+#~ "ομάδων\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: αδυναμία αφαίρεσης της πρωταρχικής ομάδας του χρήστη.\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: Αποτυχία εξακρίβωσης PAM\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: Αδυναμία κλειδώματος του αρχείου ομάδων\n"
+
+#, fuzzy
+#~ msgid "Unable to open group file\n"
+#~ msgstr "%s: Αδυναμία ανοίγματος του αρχείου ομάδων\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος αρχείου ομάδων\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: Ο %s δεν βρέθηκε στο /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: Το %u δεν είναι μοναδικό GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: Το %s δεν είναι μοναδικό όνομα\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: Αδυναμία κλειδώματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: Αδυναμία ανοίγματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr ""
+#~ "%s: αδυναμία ανανέωσης καταχώρησης στο αρχείο σκιωδών συνθηματικών για "
+#~ "τον %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: αδυναμία ανανέωσης καταχώρησης για την ομάδα %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr ""
+#~ "%s: αδυναμία αφαίρεσης  της ομάδας %s, από το αρχείο σκιωδών "
+#~ "συνθηματικών\n"
+#~ "ομάδων\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: αδυναμία ανανέωσης του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: αδυναμία ανανέωσης για το αρχείο ομάδων\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr ""
+#~ "%s: Δεν είναι δυνατόν να διαγραφεί το αρχείο σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "άγνωστο UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "άγνωστο GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: Η ομάδα %s δεν υπάρχει\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: Ο χρήστης %s δεν υπάρχει\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: Μη έγκυρο όνομα χρήστη `%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: αδυναμία ανοίγματος των αρχείων\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: Σφάλμα κατά την ενημέρωση αρχείων\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: γραμμή %d: αδυναμία εύρεσης χρήστη %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: αδυναμία ανανέωσης καταχώρησης συνθηματικού για τον %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr ""
+#~ "%s: αδυναμία απομάκρυνσης καταχώρησης σκιώδους συνθηματικού για τον %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr ""
+#~ "%s: αδυναμία ανανέωσης καταχώρησης του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: αδυναμία ανανέωσης αρχείου συνθηματικών\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: αδυναμία ανανέωσης καταχώρησης για τον χρήστη %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: Δεν είναι δυνατόν να διαγραφεί το αρχείο σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: άγνωστο GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: άγνωστη ομάδα %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s:  στο update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής του αρχείου συνθηματικών\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: αδυναμία επανεγγραφής του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: αδυναμία κλειδώματος του αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος αρχείου σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: Σφάλμα κατά το κλείδωμα του αρχείου ομάδων\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: Σφάλμα κατά το άνοιγμα του αρχείου ομάδων\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά το κλείδωμα του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά το άνοιγμα του αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την προσθήκη νέας καταχώρησης στο αρχείο συνθηματικών\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την προσθήκη νέας καταχώρησης στο αρχείο σκιωδών "
+#~ "συνθηματικών\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: προειδοποίηση: το CREATE_HOME δεν υποστηρίζεται, παρακαλώ "
+#~ "χρησιμοποιήστε το -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: Σφάλμα κατά την ανανέωση καταχώρισης ομάδας\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: Σφάλμα κατά την ανανέωση καταχώρισης ομάδας\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος αρχείου ομάδων\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: αδυναμία ανοίγματος αρχείου σκιωδών συνθηματικών ομάδων\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: Σφάλμα κατά την διαγραφή καταχώρησης στο αρχείο συνθηματικών\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την διαγραφή καταχώρησης στο αρχείο σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: Ο χρήστης %s δεν υπάρχει\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: Σφάλμα κατά την προσθήκη νέας καταχώρησης στο αρχείο ομάδων\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: Το uid %lu δεν είναι μοναδικό\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: Σφάλμα κατά την αλλαγή καταχώρησης συνθηματικού\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: Σφάλμα κατά την αφαίρεση καταχώρησης στο αρχείο συνθηματικών\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr ""
+#~ "%s: Σφάλμα κατά την αφαίρεση καταχώρησης στο αρχείο σκιωδών συνθηματικών\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: αδυναμία λήψης μοναδικού GID\n"
+
+#, fuzzy
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " στο `%.100s' από `%.200s'"
+
+#, fuzzy
+#~ msgid " on '%.100s'"
+#~ msgstr " στο `%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: γραμμή %d: αδυναμία δημιουργίας UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: Το όνομα %s δεν είναι μοναδικό\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Χρήση: chpasswd [options]\n"
+#~ "\n"
+#~ "Επιλογές:\n"
+#~ "  -e, --encrypted\tτα παρεχόμενα συνθηματικά είναι κρυπτογραφημένα\n"
+#~ "  -h, --help\t\tπροβολή αυτού του μηνύματος βοήθειας και έξοδος\n"
+#~ "  -m, --md5\t\tχρήση κρυπτογράφησης MD5 αντί για DES όταν τα παρεχόμενα\n"
+#~ "\t\t\tσυνθηματικά δεν είναι κρυπτογραφημένα\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Δεν υπάρχει αρχείο συνθηματικών\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Λυπάμαι.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Συγνώμη, το συνθηματικό για τον %s δεν μπορεί να αλλάξει ακόμη.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Λυπάμαι."
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
new file mode 100644 (file)
index 0000000..fedb6a0
--- /dev/null
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en@quot.header b/po/en@quot.header
new file mode 100644 (file)
index 0000000..a9647fc
--- /dev/null
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644 (file)
index 0000000..2eaaba7
Binary files /dev/null and b/po/es.gmo differ
diff --git a/po/es.po b/po/es.po
new file mode 100644 (file)
index 0000000..0af597f
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,2682 @@
+# Spanish translations for shadow package.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Rubén Porras Campo <nahoo@inicia.es>, 2004.
+# Reviewed by Ricardo Mones <ricardo.mones@hispalinux.es>, 2004.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.16\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-11-25 21:23+0100\n"
+"Last-Translator: Rubén Porras Campo <nahoo@inicia.es>\n"
+"Language-Team: Spanish <debian-l10n-spanish@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "No pude reservar espacio para la información de configuración.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"error de configuración - elemento '%s' desconocido (notifíquelo al "
+"administrador)\n"
+
+msgid "Password: "
+msgstr "Contraseña: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Contraseña de %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Aviso: grupo %s desconocido\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Aviso: demasiados grupos\n"
+
+msgid "Your password has expired."
+msgstr "Su contraseña ha caducado."
+
+msgid "Your password is inactive."
+msgstr "Su contraseña está inactiva."
+
+msgid "Your login has expired."
+msgstr "Su acceso ha caducado."
+
+msgid "  Contact the system administrator."
+msgstr "  Contacte con el administrador."
+
+msgid "  Choose a new password."
+msgstr "  Elija una contraseña nueva."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Su contraseña caducará en %ld días.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Su contraseña caducará mañana."
+
+msgid "Your password will expire today."
+msgstr "Su contraseña caducará hoy."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Incapaz de cambiar tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: campos demasiado largos\n"
+
+msgid "Environment overflow\n"
+msgstr "Desbordamiento de entorno\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "No debe cambiar $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d fallo desde la última entrada.\n"
+"La última fue %s en %s.\n"
+msgstr[1] ""
+"%d fallos desde la última entrada.\n"
+"La última fue %s en %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: no se puede obtener un UID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: no se puede obtener un GID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: no se puede obtener un UID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: no se puede obtener un UID único\n"
+
+msgid "Too many logins.\n"
+msgstr "Demasiados accesos.\n"
+
+msgid "You have new mail."
+msgstr "Tiene correo nuevo."
+
+msgid "No mail."
+msgstr "Sin correo."
+
+msgid "You have mail."
+msgstr "Tiene correo."
+
+msgid "no change"
+msgstr "sin cambios"
+
+msgid "a palindrome"
+msgstr "un palíndromo"
+
+msgid "case changes only"
+msgstr "sólo cambios mayúsculas/minúsculas"
+
+msgid "too similar"
+msgstr "demasiado parecidas"
+
+msgid "too simple"
+msgstr "demasiado simpre"
+
+msgid "rotated"
+msgstr "rotada"
+
+msgid "too short"
+msgstr "demasiado corta"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Contraseña mala: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: falló pam_start(), error %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Contraseña cambiada."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: contraseña actualizada correctamente\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Contraseña incorrecta para %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Incapaz de cambiar el directorio a «%s»\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Sin directorio, entrando con HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "No puedo ejecutar %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Directorio raíz «%s» inválido\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "No se pudo cambiar el directorio raíz a «%s»\n"
+
+msgid "Unable to determine your tty name."
+msgstr "No se pudo determinar el nombre de su tty."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: sin memoria\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "falló malloc(%d)\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "No\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Modo de uso: chage [opciones] [USUARIO]\n"
+"\n"
+"Opciones:\n"
+"  -d, --lastday ULTIMO_DÍA      establecer el último cambio de clave a\n"
+"                                ULTIMO_DÍA\n"
+"  -E, --expiredate FECHA_EXP    establecer la fecha de expiración de la\n"
+"                                cuenta a FECHA_EXP\n"
+"  -h, --help                    mostrar este mensaje de ayuda y terminar\n"
+"  -I, --inactive INACTIV        deshabilitar la cuenta después de INACTIV\n"
+"                                días de la fecha de expiración\n"
+"  -l, --list                    mostrar la información de envejecimiento\n"
+"                                de la cuenta\n"
+"  -m, --mindays DÍAS_MIN        establecer el número mínimo de días antes\n"
+"                                de cambiar la clave a DÍAS_MIN\n"
+"  -M, --maxdays DÍAS_MAXS       establecer el número máximo de días antes\n"
+"                                de cambiar la clave a DÍAS_MAX\n"
+"  -W, --warndays DÍAS_AVISO     set expiration warning days to WARN_DAYS\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Introduzca el nuevo valor, o presione ENTER para el predeterminado"
+
+msgid "Minimum Password Age"
+msgstr "Duración mínima de la contraseña"
+
+msgid "Maximum Password Age"
+msgstr "Duración máxima de la contraseña"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Último cambio de contraseña (AAAA-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Aviso de caducidad de la contraseña"
+
+msgid "Password Inactive"
+msgstr "Contraseña inactiva"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Fecha de caducidad de la cuenta (AAAA-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Último cambio de contraseña\t\t\t\t\t:"
+
+msgid "never"
+msgstr "nunca"
+
+msgid "password must be changed"
+msgstr "Contraseña cambiada"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "La contraseña caduca\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Contraseña inactiva\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "La cuenta caduca\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Número de días mínimo entre cambio de contraseña\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Número de días máximo entre cambio de contraseñas\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Número de días de aviso antes de que expire la contraseña\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: fecha «%s» inválida\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argumento numérico inválido «%s»\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: no incluya \"l\" con otras banderas\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Permiso denegado.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: no puedo determinar su nombre de usuario.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: Autenticación PAM fallida\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: no se pueden bloquear los ficheros, pruebe de nuevo más tarde\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: no se puede abrir el fichero %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: fallo en la llamada a fork: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: no fue posible desprenderse de los privilegios (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: el fichero de contraseñas ocultas no está presente\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: no fue posible desprenderse de los privilegios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: el usuario %s no existe\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Cambiando la información de la edad para %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: error cambiando los campos\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Modo de uso: %s [-f nombre_completo] [-r num_habitación] [-w telf_trabajo]\n"
+"\t[-h telf_casa] [-o otro] [usuario]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Modo de uso: %s [-f nombre_completo] [-r num_habitación] [-w telf_trabajo]\n"
+"\t[-h telf_casa]\n"
+
+msgid "Full Name"
+msgstr "Nombre completo"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Número de habitación"
+
+msgid "Work Phone"
+msgstr "Teléfono del trabajo"
+
+msgid "Home Phone"
+msgstr "Teléfono de casa"
+
+msgid "Other"
+msgstr "Otro"
+
+msgid "Cannot change ID to root.\n"
+msgstr "No se puede cambiar el ID al del superusuario.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nombre inválido: «%s»\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: nombre de habitación inválido: «%s»\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: teléfono del trabajo inválido: «%s»\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: teléfono de casa inválido: «%s»\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: «%s» contiene caracteres ilegales\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: «%s» contiene caracteres ilegales\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: el usuario %s no existe\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: no se pudo cambiar el usuario «%s» en el cliente NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: «%s» es el maestro NIS para este cliente.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Cambiando la información de usuario para %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: campos demasiado largos\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Modo de uso: chpasswd [opciones]\n"
+"\n"
+"Opciones:\n"
+"  -e, --encrypted               las contraseñas proporcionadas están "
+"cifradas\n"
+"  -h, --help                    muestra este mensaje de ayuda y termina\n"
+"  -m, --md5                     usa cifrado MD5 en vez de DES cuando las\n"
+"                                contraseñas proporcionadas no estén "
+"cifradas\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: SÓLO se puede usar la opción -a junto con la opción -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: línea %d: línea demasiado larga\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: línea %d: falta la nueva contraseña\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: el grupo %s no existe\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: línea %d: no se puede actualizar la entrada\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: error detectado, cambios ignorados\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Modo de uso: %s [entrada]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: el usuario %s no existe\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: el usuario %s no existe\n"
+
+#, fuzzy
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Modo de uso: userdel [opciones] USUARIO\n"
+"\n"
+"Opciones:\n"
+"  -f, --force                   forzar la eliminación de los ficheros,\n"
+"                                incluso si no pertenecen al usuario\n"
+"  -h, --help                    muestra este mensaje y termina\n"
+"  -r, --remove                  elimina el directorio y el buzón de correo\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Shell de acceso"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "No debe cambiar la shell para %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Cambiando la shell de acceso para %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: entrada inválida: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s no es una shell válida.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Modo de uso: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Usuario     Fallos Máximo Último                   Activo\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr "[faltan %lds]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr "[bloqueados %lds]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Usuario desconocido: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: no se puede abrir el fichero %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "No puede cambiarse la contraseña para %s.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: se requieren contraseñas de grupo ocultas (shadow) para -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: el grupo %s no existe\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: fallo en la llamada a fork: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Cambiando la contraseña para el grupo %s\n"
+
+msgid "New Password: "
+msgstr "Nueva contraseña: "
+
+msgid "Re-enter new password: "
+msgstr "Reintroduzca la nueva contraseña: "
+
+msgid "They don't match; try again"
+msgstr "No concuerdan, pruebe otra vez"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Pruebe otra vez más tarde\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Añadiendo al usuario %s al grupo %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Eliminando al usuario %s del grupo %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: el usuario %s no existe\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: No es una tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Modo de uso: %s [entrada]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s no es un nombre de grupo válido\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "nombre de grupo «%s» inválido\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K requiere NOMBRE=VALOR\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: el grupo %s existe\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr "Modo de uso: groupdel grupo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: no se puede renombrar el directorio %s a %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: no se pudo cambiar el usuario «%s» en el cliente NIS.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: el grupo %s no existe\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: el grupo «%s» es un grupo NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s es el maestro NIS\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: el usuario %s es un usuario NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: sin memoria en update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "nombre de grupo «%s» inválido\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: el grupo %s es un grupo NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: usuario desconocido %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Modo de uso: %s [-r] [-s] [grupo [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Modo de uso: %s [-r] [-s] [grupo]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s y -r son incompatibles\n"
+
+msgid "invalid group file entry"
+msgstr "entrada del fichero de grupos inválida"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "¿eliminar la línea «%s»? "
+
+msgid "duplicate group entry"
+msgstr "entrada de grupo duplicada"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nombre de grupo «%s» inválido\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "nombre de grupo «%s» inválido\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupo %s: no existe el usuario %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "¿eliminar miembro «%s»? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "no hay entradas coincidentes en el fichero de grupos en «%s»\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "¿añadir grupo «%s» a «%s»?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "entrada del fichero de grupos oculto (shadow) inválida"
+
+msgid "duplicate shadow group entry"
+msgstr "entrada del fichero de grupos oculto (shadow) duplicada"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grupo oculto (shadow) %s: no existe el usuario administrativo %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "¿eliminar miembro administrativo «%s»? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grupo oculto (shadow) %s: no existe el usuario %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: los ficheros se han actualizado\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: sin cambios\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Modo de uso: groupdel grupo\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Modo de uso: groupdel grupo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: no se puede actualizar el fichero %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Modo de uso: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Modo de uso: id\n"
+
+msgid " groups="
+msgstr "grupos="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Modo de uso: lastlog [opciones]\n"
+"\n"
+"Opciones:\n"
+"  -b, --before DÍAS             muestra los registros lastlog anteriores a "
+"DÍAS\n"
+"  -h, --help                    muestra este mensaje de ayuda y termina\n"
+"  -t, --time DÍAS               muestra sólo los registros lastlog más\n"
+"                                recientes que DÍAS\n"
+"  -u, --user USUARIO            muestra el registro lastlog para el usuario\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Nombre           Puerto   De               Último"
+
+msgid "Username                Port     Latest"
+msgstr "Nombre                  Puerto   Último"
+
+msgid "**Never logged in**"
+msgstr "**Nunca ha entrado**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: argumento inesperado: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Modo de uso: %s [-p] [nombre]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h puesto] [-f nombre]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r puesto\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Tiempo de acceso inválido"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistema cerrado para mantenimiento rutinario"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Desconexión evitada -- acceso del superusuario permitido.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"El acceso caducó después de %d segundos.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr "Sin entrada utmp. Debe ejecutar «login» desde el nivel «sh» más bajo"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Fallo de PAM, abortando: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s nombre: "
+
+msgid "login: "
+msgstr "nombre: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Número de intentos máximo excedido (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: petición abortada por PAM\n"
+
+msgid "Login incorrect"
+msgstr "Login incorrecto"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s nombre: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fallo en la llamada a fork: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Aviso: acceso reestablecido después de un lockout temporal."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Última entrada: %s en %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Última entrada: %.19s en %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " desde %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"tiempo de acceso excedido\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Modo de uso: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Modo de uso: newgrp [-] [grupo]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Modo de uso: sg grupo [[-c] orden]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Contraseña antigua: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fallo en la llamada a fork: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: el usuario %s no existe\n"
+
+msgid "too many groups\n"
+msgstr "demasiados grupos\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: el grupo %s no existe\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: nombre de usuario `%s' inválido\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: nombre de usuario `%s' inválido\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: línea %d: línea inválida\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: no se puede actualizar la entrada para el usuario %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: línea %d: no se puede crear GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: línea %d: no se puede crear GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: el usuario %s no existe\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: línea %d: no se puede actualizar la contraseña\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: línea %d: falló mkdir\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr ""
+"%s: línea %d: falló chown\n"
+"\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: línea %d: no se puede actualizar la entrada\n"
+
+#, fuzzy
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Modo de uso: passwd [opciones] [nombre usuario]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     informa del estado de las contraseñas de\n"
+"                                todas las cuentas\n"
+"  -d, --delete                  borra la contraseña para la cuenta\n"
+"  -e, --expire                  fuerza a que la contraseña de la cuenta\n"
+"                                caduque\n"
+"  -h, --help                    muestra esta ayuda y termina\n"
+"  -k, --keep-tokens             cambia la contraseña sólo si a caducado\n"
+"  -i, --inactive INACTIVO       establece la contraseña inactiva después de\n"
+"                                caducar a INACTIVO\n"
+"  -l, --lock                    bloquea la cuenta\n"
+"  -n, --mindays DÍAS_MIN        establece el número mínimo de días antes\n"
+"                                de que se cambie la contraseña a DÍAS_MIN\n"
+"  -q, --quiet                   modo silencioso\n"
+"  -r, --repository REP          cambia la contraseña en el repositorio REP\n"
+"  -S, --status                  indica el estado de la contraseña la cuenta\n"
+"  -u, --unlock                  desbloquea la cuenta\n"
+"  -w, --warndays DÍAS_AVISO     establece el aviso de caducidad a "
+"DÍAS_AVISO\n"
+"  -x, --maxdays DÍAS_MAX        establece el número máximo de días antes de\n"
+"                                cambiar la contraseña a DÍAS_MAX\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Contraseña antigua: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduzca la nueva contraseña (mínimo de %d caracteres, máximo de %d)\n"
+"Por favor, use una combinación de letras mayúsculas, minúsculas y números.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduzca la nueva contraseña (mínimo de %d caracteres, máximo de %d)\n"
+"Por favor, use una combinación de letras mayúsculas, minúsculas y números.\n"
+
+msgid "New password: "
+msgstr "Nueva contraseña: "
+
+msgid "Try again."
+msgstr "Vuelva a intentarlo."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Aviso: contraseña débil (introdúzcala otra vez para usarla de todos modos)."
+
+msgid "They don't match; try again.\n"
+msgstr "No concuerdan, pruebe de nuevo.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "No puede cambiarse la contraseña para %s.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "No puede cambiarse la contraseña para %s.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: repositorio %s no soportado\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: No debe ver o cambiar la información de la contraseña para %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Cambiando la contraseña para %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "La contraseña para %s no se ha modificado.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Contraseña cambiada."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Aviso de caducidad de la contraseña"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Modo de uso: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s y -r son incompatibles\n"
+
+msgid "invalid password file entry"
+msgstr "entrada del fichero de contraseñas inválida"
+
+msgid "duplicate password entry"
+msgstr "entrada de contraseña duplicada"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nombre de usuario '%s' inválido\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "nombre de usuario '%s' inválido\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "usuario %s: no existe el grupo %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "usuario %s: el directorio %s no existe\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "usuario %s: el programa %s no existe\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "ninguna entrada del fichero de contraseñas concuerda con %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "¿añadir usuario «%s» a «%s»?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "entrada de contraseña oculta (shadow) inválida"
+
+msgid "duplicate shadow password entry"
+msgstr "entrada de contraseña oculta (shadow) duplicada"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr ""
+"usuario %s: el último cambio de la contraseña se produjo en el futuro\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: no se puede abrir el fichero %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Modo de uso: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Modo de uso: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Acceso a \"su\" a esa cuenta DENEGADO.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Evitada autenticación de contraseña.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Por favor, introduzca su PROPIA contraseña como autenticación.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Modo de uso: su [opciones] [nombre]\n"
+"\n"
+"Opciones:\n"
+"  -c, --command ORDEN           pasa la ORDEN a la shell invocada\n"
+"  -h, --help                    muestra este mensaje de ayuda y termina\n"
+"  -, -l, --login                hace que la shell sea una shell de acceso\n"
+"  -m, -p,\n"
+"  --preserve-environment        no restablece las variables de entorno a su\n"
+"                                valor original, y conserva la misma shell\n"
+"  -s, --shell SHELL             usa SHELL en vez de la predeterminada en "
+"passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: debe ejecutarse desde un terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: error %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Id desconocido: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "No está autorizado a usar su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Introduzca su propia contraseña)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorado)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: Autenticación PAM fallida\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "No está autorizado a usar su %s\n"
+
+msgid "No shell\n"
+msgstr "Sin shell\n"
+
+msgid "No password file"
+msgstr "No hay fichero de contraseñas"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "No hay entrada de contraseña para 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Teclee control-d para continuar con un arranque normal del sistema,\n"
+"(o introduzca la contraseña del superusuario para mantenimiento del sistema):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Entrando en el Modo de Mantenimiento del Sistema"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+"%s: no se puede crear un nuevo fichero de preferencias predeterminadas\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+"%s: no se puede abrir un nuevo fichero de preferencias predeterminadas\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr ""
+"%s: línea %d: falló chown\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: renombra: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: el grupo «%s» es un grupo NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: demasiados grupos especificados (máx de %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Modo de uso: %s [entrada]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: directorio base «%s» inválido\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: comentario «%s» inválido\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: directorio home «%s» inválido\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: se requiere contraseñas ocultas (shadow) para -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: se requiere contraseñas ocultas (shadow) para -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: campo «%s» inválido\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: shell «%s» inválida\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: no se puede crear el directorio %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Creando el buzón de correo"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"No se encontró el grupo «mail». Se crea el buzón de correo del usuario con "
+"modo 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Estableciendo los permisos del buzón de correo"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: el usuario %s existe\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: el grupo %s existe - si quiere añadir este usuario a ese grupo, use -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: no se puede crear %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: el UID %u no es único\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: no se puede crear %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: aviso: el directorio personal ya existe.\n"
+"No se copia ningún fichero del directorio skel en él.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Modo de uso: userdel [opciones] USUARIO\n"
+"\n"
+"Opciones:\n"
+"  -f, --force                   forzar la eliminación de los ficheros,\n"
+"                                incluso si no pertenecen al usuario\n"
+"  -h, --help                    muestra este mensaje y termina\n"
+"  -r, --remove                  elimina el directorio y el buzón de correo\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: no se puede eliminar el grupo %s, que es un prupo primario\n"
+"para otro usuario.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: aviso: no se puede eliminar "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s no pertenece a %s, no se elimina\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: el usuario %s es un usuario NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: el usuario %s está actualmente dentro del sistema\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: directorio home «%s» inválido\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: no se elimina el directorio %s (eliminaría el directorio home del "
+"usuario %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: error eliminando el directorio %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Modo de uso: usermod [opciones] USUARIO\n"
+"\n"
+"Opciones:\n"
+"  -a, --append GRUPO            añade al usuario al GRUPO\n"
+"  -c, --comment COMENTARIO      nuevo valor del campo GECOS\n"
+"  -d, --home-dir DIR_PERSONAL   nuevo directorio personal del nuevo usuario\n"
+"  -e, --expiredate FECHA_EXPIR  establece la fecha de caducidad de la\n"
+"                                cuenta a FECHA_EXPIR\n"
+"  -f, --inactive INACTIVO       establece el tiempo de inactividad después\n"
+"                                de que caduque la cuenta a INACTIVO\n"
+"  -g, --gid GRUPO               fuerza el uso de GRUPO para la nueva cuenta\n"
+"                                de usuario\n"
+"  -G, --groups GRUPOS           lista de grupos suplementarios\n"
+"  -h, --help                    muestra esta ayuda y termina\n"
+"  -l, --login NOMBRE            nuevo nombre para el usuario\n"
+"  -L, --lock                    bloquea la cuenta de usuario\n"
+"  -m, --move-home               mueve los contenidos del directorio\n"
+"                                personal al directorio nuevo (usar sólo\n"
+"                                junto con -d)\n"
+"  -o, --non-unique              permite usar UID (identificadores de\n"
+"                                usuario) duplicados (no únicos)\n"
+"  -p, --password CONTRASEÑA     usar la contraseña cifrada CONTRASEÑA para\n"
+"                                la nueva cuenta\n"
+"  -s, --shell SHELL             la shell de entrada para la nueva cuenta de\n"
+"                                usuario\n"
+"  -u, --uid UID                 fuerza el uso del UID para la nueva cuenta\n"
+"                                de usuario\n"
+"  -U, --unlock                  desbloque la cuenta de usuario\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: el usuario %s existe\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: no se ha dado ninguna opción\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: se necesitan contraseñas ocultas (shadow) para -e y -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: el directorio %s existe\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: no se puede crear %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: no se puede chown %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: aviso: no se pudo eliminar completamente el directorio personal previo %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: no se puede renombrar el directorio %s a %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: aviso: %s no pertenece a %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "falló el cambio de propietario del buzón de correo"
+
+msgid "failed to rename mailbox"
+msgstr "falló el cambio de nombre del buzón de correo"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Modo de uso: vipw [opciones]\n"
+"\n"
+"Opciones:\n"
+"  -g, --group                   edita la base de datos con los grupos\n"
+"  -h, --help                    muestra este mensaje de ayuda y termina\n"
+"  -p, --passwd                  edita la base de datos con las contraseñas\n"
+"  -q, --quiet                   modo silencioso\n"
+"  -s, --shadow                  edita la base de datos shadow o gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: no fue posible desprenderse de los privilegios (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s no se cambia\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "No se puede bloquear el fichero"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "No se puede bloquear el fichero"
+
+msgid "Couldn't make backup"
+msgstr "No se puede realizar una copia de seguridad"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: no se puede restaurar %s: %s (sus cambios están en %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: faillog [opciones]\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ "  -a, --all                     muestra los registros de faillog para\n"
+#~ "                                todos los usuarios\n"
+#~ "  -h, --help                    muestra este mensaje de ayuda y termina\n"
+#~ "  -l, --lock-time SEC           después de un fallo de acceso bloquea\n"
+#~ "                                la cuenta SEC segundos\n"
+#~ "  -m, --maximum MAX             establece el número máximo de accesos\n"
+#~ "                                fallidos a MAX\n"
+#~ "  -r, --reset                   reinicia los contadores de accesos "
+#~ "fallidos\n"
+#~ "  -t, --time ND                 muestra los registros de faillog para "
+#~ "los\n"
+#~ "                                últimos ND días\n"
+#~ "  -u, --user USUARIO            muestra el registro de faillog o "
+#~ "mantiene\n"
+#~ "                                los contadores de fallos y los límites\n"
+#~ "                                (si se usan las opciones -r, -m o -l)\n"
+#~ "                                para el usuario USUARIO\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: groupadd [opciones] grupo\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ "  -f, --force                   fuerza una salida con un estado de éxito\n"
+#~ "                                si el grupo especificado existe\n"
+#~ "  -g, --gid GID                 usa GID para el nuevo grupo\n"
+#~ "  -h, --help                    muestra esta ayuda y termina\n"
+#~ "  -K, --key NOMBRE=VALOR        prevalece sobre el valor predeterminado "
+#~ "de\n"
+#~ "                                /etc/login.defs\n"
+#~ "  -o, --non-unique              permite crear grupos con un GID "
+#~ "duplicado\n"
+#~ "                                (que no es único)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: groupadd [opciones] grupo\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ "  -f, --force                   fuerza una salida con un estado de éxito\n"
+#~ "                                si el grupo especificado existe\n"
+#~ "  -g, --gid GID                 usa GID para el nuevo grupo\n"
+#~ "  -h, --help                    muestra esta ayuda y termina\n"
+#~ "  -K, --key NOMBRE=VALOR        prevalece sobre el valor predeterminado "
+#~ "de\n"
+#~ "                                /etc/login.defs\n"
+#~ "  -o, --non-unique              permite crear grupos con un GID "
+#~ "duplicado\n"
+#~ "                                (que no es único)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Modo de uso: useradd [opciones] USUARIO\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ "  -b, --base-dir DIR_BASE       directorio base para el nuevo directorio\n"
+#~ "                                personal\n"
+#~ "  -c, --comment COMENTARIO      comentarios para el nuevo usuario (campo "
+#~ "GECOS)\n"
+#~ "  -d, --home-dir DIR_PERSONAL   directorio personal para el nuevo "
+#~ "usuario\n"
+#~ "  -D, --defaults                muestra o salva la configuración\n"
+#~ "                                predeterminada modificada para useradd\n"
+#~ "  -e, --expiredate FECHA_EXPIR  establece la fecha de caducidad de la\n"
+#~ "                                cuenta a FECHA_EXPIR\n"
+#~ "  -f, --inactive INACTIVO       establece el tiempo de inactividad "
+#~ "después\n"
+#~ "                                de que caduque la cuenta a INACTIVO\n"
+#~ "  -g, --gid GRUPO               forzar el uso de GRUPO para la nueva "
+#~ "cuenta\n"
+#~ "                                de usuario\n"
+#~ "  -G, --groups GRUPOS           lista de grupos suplementarios para la "
+#~ "nueva\n"
+#~ "                                cuenta de usuario\n"
+#~ "  -h, --help                    muestra esta ayuda y termina\n"
+#~ "  -k, --skel DIR_SKEL           especifica un directorio skel "
+#~ "alternativo\n"
+#~ "  -K, --key LLAVE=VALOR         modifica los valores predeterminados de\n"
+#~ "                                /etc/login.defs\n"
+#~ "  -m, --create-home             crea el directorio personal para la "
+#~ "nueva\n"
+#~ "                                cuenta de usuario\n"
+#~ "  -o, --non-unique              permitir crear usuarios con UIDs "
+#~ "duplicadas\n"
+#~ "  -p, --password CONTRASEÑA     usar la contraseña cifrada CONTRASEÑA "
+#~ "para\n"
+#~ "                                la nueva cuenta\n"
+#~ "  -s, --shell SHELL             la shell de entrada para la nueva cuenta\n"
+#~ "                                de usuario\n"
+#~ "  -u, --uid UID                 forzar el uso del UID para la nueva "
+#~ "cuenta\n"
+#~ "                                de usuario\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Contraseña caducada."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: no puedo bloquear el fichero de contraseñas\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: no puedo abrir el fichero de contraseñas\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: no puedo bloquear el fichero de contraseñas ocultas\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: no puedo abrir el fichero de contraseñas ocultas\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: no se puede reescribir el fichero de contraseñas ocultas\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: no se puede reescribir el fichero de contraseñas\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: no puedo actualizar el fichero de contraseñas\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: no puedo actualizar el fichero de contraseñas ocultas\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNombre completo: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNúmero de habitación: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTeléfono del trabajo:% s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTeléfono de casa: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr ""
+#~ "No se puede bloquear el fichero de contraseñas, inténtelo más tarde.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "No se puede abrir el fichero de contraseñas.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: no se encontró %s en /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Error actualizando la entrada de la contraseña.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "No se pueden remitir los cambios del fichero de contraseñas.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "No se puede desbloquear el fichero de contraseñas.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: no se puede bloquear el fichero de grupos\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: no se puede abrir el fichero de grupos\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: no se puede abrir el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: no se puede abrir el fichero de contraseñas ocultas (shadow)\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: error actualizando el fichero de contraseñas ocultas (shadow)\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: error actualizando la entrada del grupo\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: línea %d: grupo desconocido %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: línea %d: no se puede actualizar la entrada\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr ""
+#~ "%s: no se puede bloquear el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: error actualizando el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: error actualizando el fichero de contraseñas\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: línea %d: usuario desconocido %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: línea %d: no se puede actualizar la entrada de la contraseña\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: usuario desconocido\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Usuario desconocido: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Modo de uso: %s [-r|-R] grupo\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a usuario] grupo\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d usuario] grupo\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A usuario,...] [-M usuario,...] grupo\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M usuario,...] grupo\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: no se puede obtener el bloqueo\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: no se puede obtener el bloqueo de shadow\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: no se puede abrir el fichero\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: no se puede reescribir el fichero\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: no se puede reescribir el fichero oculto (shadow)\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: no se puede desbloquear el fichero\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: no se puede actualizar la entrada\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: no se puede actualizar la entrada oculta (shadow)\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "grupo desconocido: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: no se puede abrir el fichero\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: no se puede abrir el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "¿Quién es?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: miembro desconocido %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: error añadiendo entrada nueva de grupo\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: no se puede reescribir el fichero grupos\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: no se puede reescribir el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: incapaz de bloquear el fichero de grupos\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: incapaz de abrir el fichero de grupos\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: incapaz de bloquear el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: incapaz de abrir el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: el GID %u no es único\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: error eliminando la entrada del grupo\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: error eliminando entrada del grupo oculto (shadow)\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: no se puede eliminar el grupo primario del usuario.\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: Autenticación PAM fallida\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: incapaz de bloquear el fichero de grupos\n"
+
+#, fuzzy
+#~ msgid "Unable to open group file\n"
+#~ msgstr "%s: incapaz de abrir el fichero de grupos\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: no se puede abrir el fichero de grupos\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: no se encontró %s en /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u no es un GID único\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s no es un nombre único\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: no se puede reescribir el fichero de contraseñas\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: incapaz de bloquear el fichero de contraseñas\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: incapaz de abrir el fichero de contraseñas\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: no se puede bloquear el fichero %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: no se puede actualizar la entrada oculta (shadow) para %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: no se puede actualizar la entrada para el grupo %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: no se puede bloquear el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: no se puede abrir el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: no se puede eliminar el grupo oculto (shadow) %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: no se puede actualizar el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: no se puede actualizar el fichero de grupo\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: no se puede eliminar el fichero de grupos oculto\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "UID desconocido: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "GID desconocido: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: el grupo %s no existe\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: el usuario %s no existe\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: nombre de usuario `%s' inválido\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: no se puede bloquear /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: no se puede bloquear /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: no se puede bloquear /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: no se puede bloquear /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: no se pueden abrir los ficheros\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: error actualizando los ficheros\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: línea %d: no se puede encontrar el usuario %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: no se puede actualizar la entrada de la contraseña para %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: no se puede bloquear el fichero passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: no se puede abrir el fichero passwd\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: no se puede eliminar la entrada oculta (shadow) para %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: no se puede actualizar el fichero oculto (shadow)\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: no se puede actualizar el fichero passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: no se puede actualizar la entrada para el usuario %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr ""
+#~ "%s: no se puede eliminar el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: GID %s desconocido\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: grupo %s desconocido\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: sin memoria en update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: no se puede reescribir el fichero de contraseñas\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr ""
+#~ "%s: no se puede reescribir el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr ""
+#~ "%s: no se puede bloquear el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: no se puede abrir el fichero de contraseñas ocultas (shadow)\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: error bloqueando el fichero de grupos\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: error abriendo el fichero de grupos\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: error bloqueando el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: error abriendo el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: error añadiendo entrada de contraseña nueva\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: error añadiendo entrada de contraseña oculta (shadow) nueva\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: aviso: CREATE_HOME no está soportado, por favor, use -m en su lugar.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: error actualizando la entrada del grupo\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: error actualizando la entrada del grupo\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: no se puede abrir el fichero de grupos\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: no se puede abrir el fichero de grupos oculto (shadow)\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: error eliminando la entrada de contraseña\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: error eliminando la entrada de contraseña oculta (shadow)\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: el usuario %s no existe\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: error añadiendo entrada nueva de grupo\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: el uid %lu no es único\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: error cambiando la entrada de la contraseña\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: error eliminando la entrada de la contraseña\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: error eliminando entrada de contraseña oculta (shadow)\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: no se puede obtener un GID único\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " en «%.100s» desde «%.200s»"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " en «%.100s»"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: línea %d: no se puede crear UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: el nombre %s no es único\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Modo de uso: chgpasswd [opciones]\n"
+#~ "\n"
+#~ "Opciones:\n"
+#~ "  -e, --encrypted\tlas contraseñas proporcionadas están cifradas\n"
+#~ "  -h, --help\t\tmuestra este mensaje de ayuda y termina\n"
+#~ "  -m, --md5\t\tusa cifrado MD5 en vez de DES cuando las\n"
+#~ "                        contraseñas proporcionadas no estén cifradas\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "No hay fichero de contraseñas\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Disculpe.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Disculpe, aún no puede cambiarse la contraseña para %s.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Disculpe."
diff --git a/po/eu.gmo b/po/eu.gmo
new file mode 100644 (file)
index 0000000..13fa140
Binary files /dev/null and b/po/eu.gmo differ
diff --git a/po/eu.po b/po/eu.po
new file mode 100644 (file)
index 0000000..d35a65f
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,2258 @@
+# translation of eu.po to Euskara
+# Copyright (C) 2004, 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# Piarres Beobide <pi@beobide.net>, 2004, 2005, 2006, 2008, 2009.
+# Inaki Larranga Murgoitio <dooteo@euskalgnu.org>, 2005.
+msgid ""
+msgstr ""
+"Project-Id-Version: eu\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2009-07-03 11:06+0200\n"
+"Last-Translator: Piarres Beobide <pi@beobide.net>\n"
+"Language-Team: Euskara <debian-l10n-eu@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 1.2.1\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"'%s' izeneko sarrera anitz %s-en. Mesedez konpondu pwck edo grpck "
+"erabiliaz.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "libcrypt-ek onartzen ez duen kriptografia metodoa? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "konfigurazio errorea - ezin da %s balioa analizatu: '%s'"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Ezin izan da lekua esleitu, konfigurazioaren informaziorako.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"konfigurazio errorea - %s item ezezaguna (eman honen berri "
+"administratzaileari)\n"
+
+msgid "Password: "
+msgstr "Pasahitza: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s (r)en pasahitza: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Abisua: %s talde ezezaguna\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Abisua: talde gehiegi\n"
+
+msgid "Your password has expired."
+msgstr "Pasahitza iraungi egin da."
+
+msgid "Your password is inactive."
+msgstr "Pasahitza ezgaitua dago."
+
+msgid "Your login has expired."
+msgstr "Erabiltzaile-izena iraungi egin da."
+
+msgid "  Contact the system administrator."
+msgstr "  Jarri harremanetan sistema administratzailearekin."
+
+msgid "  Choose a new password."
+msgstr "  Aukeratu pasahitz berria."
+
+msgid "You must change your password."
+msgstr "Zure pasahitza aldatu behar duzu."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Pasahitza %ld egun barru iraungi egingo da.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Pasahitza bihar iraungi egingo da."
+
+msgid "Your password will expire today."
+msgstr "Pasahitza gaur iraungi egingo da."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Ezin da auditatzeko interfazea ireki - uzten.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Ezin da tty sarrera-estandar modu edo jabea aldatu: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: huts %s desblokeatzean\n"
+
+msgid "Environment overflow\n"
+msgstr "Inguruneak gainezka egin du\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Ez zenuke $%s aldatu beharko\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d hutsegite azken saio hasieratik.\n"
+"Azkena %s izan zen %s(e)n.\n"
+msgstr[1] ""
+"%d hutsegite azken saio hasieratik.\n"
+"Azkena %s izan zen %s(e)n.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr ""
+"%s: Ezin da sistema UID bakarra lortu (ez dago UID erabilgarri gehiago)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Ezin da GID bakarra lortu (ez dago GID erabilgarri gehiago)\n"
+
+#, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr ""
+"%s: Ezin da sistema UID bakarra lortu (ez dago UID erabilgarri gehiago)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: ezin da UID bakarra lortu (ez dago UID erabilgarri gehiago)\n"
+
+msgid "Too many logins.\n"
+msgstr "Gehiegizko saio hasierak.\n"
+
+msgid "You have new mail."
+msgstr "Mezu berria duzu."
+
+msgid "No mail."
+msgstr "Mezurik ez."
+
+msgid "You have mail."
+msgstr "Mezua duzu."
+
+msgid "no change"
+msgstr "aldaketarik gabe"
+
+msgid "a palindrome"
+msgstr "palindromoa"
+
+msgid "case changes only"
+msgstr "Maiuskulak/minuskula bakarrik aldatu da"
+
+msgid "too similar"
+msgstr "antzekoegia"
+
+msgid "too simple"
+msgstr "sinpleegia"
+
+msgid "rotated"
+msgstr "aldirokoa"
+
+msgid "too short"
+msgstr "laburregia"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Pasahitz okerra: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() huts egin du, errorea: %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: pasahitza ez da aldatu\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: pasahitza ongi eguneratu da\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "%s(r)en pasahitz okerra.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"ENCRYPT_METHOD balio baliogabea: '%s'.\n"
+"DES-era lehenesten.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Ezin da '%s'-ra direktorioa aldatu\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Direktoriorik ez, HOME=/ erabiliz saioa hasiko da"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Ezin izan da %s exekutatu"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Baliogabeko erro direktorioa '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Ezin da erro direktorioa '%s'-ra aldatu\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Ezin da zure tty izena zehaztu."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: memoriarik ez\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) huts egin du\n"
+
+msgid "No"
+msgstr "Ez"
+
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Erabilera: chage [aukerak] [IZENA]\n"
+"\n"
+"Aukerak:\n"
+"  -d, --lastday AZKEN_EGUNA         ezarri pasahitz aldaketa AZKEN_EGUNA\n"
+"  -E, --expiredate IRAUNGITZE_DATA  ezarri kontu iraungitze data\n"
+"                                    IRAUNGITZE_DATA-ra\n"
+"  -h, --help                        laguntza mezu hau bistarazi eta  irten\n"
+"  -I, --inactive INACTIVE           ezarri pasahitza ezgaitua bezala\n"
+"                                    -INACTIVE iraungitzean\n"
+"  -l, --list                        kontu denbora informazioa bistarazi\n"
+"  -m, --mindays GUTXI_EGUN          pasahitz aldaketa gutxieneko data\n"
+"                                    GUTXI_EGUN-era aldatu\n"
+"  -M, --maxdays GEHI_EGUN           pasashitz aldaketa gehienezko data\n"
+"                                    GEHI_EGUN-era aldatu\n"
+"  -W, --warndays ABISU_EGUN         iraungitze abisua ABISU_EGUN-era ezarri\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Idatzi balio berria, edo sakatu 'Sartu' tekla lehenetsirako"
+
+msgid "Minimum Password Age"
+msgstr "Pasahitzaren gutxiengo iraupena"
+
+msgid "Maximum Password Age"
+msgstr "Pasahitzaren gehienezko iraupena"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Azken pasahitz aldaketa (UUUU-HH-EE)"
+
+msgid "Password Expiration Warning"
+msgstr "Pasahitza iraungitzearen abisua"
+
+msgid "Password Inactive"
+msgstr "Pasahitza ezgaitua"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Kontuaren iraungitze data (UUUU-HH-EE)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Azken pasahitz aldaketa\t\t\t\t\t: "
+
+msgid "never"
+msgstr "Inoiz ere ez"
+
+msgid "password must be changed"
+msgstr "Pasahitza aldatu egin behar da"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Pasahitz iraungitze data\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Pasahitza ezgaitu egingo da\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Kontua iraungitzeko data\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Gutxiengo egunak, pasahitza aldatzeko\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Gehienezko egunak, pasahitza aldatzeko\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Abisuen egun kopurua, pasahitza iraungi aurretik\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: '%s' data baliogabea\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s:baliogabeko zenbakizko '%s' argumentua\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: ez erabili \"l\" beste bandera batzuekin\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: baimena ukatua.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM autentifikazioak huts egin du\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: ezin da %s blokeatu; saiatu geroago.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: ezin da %s ireki\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: huts %s-en aldaketak idazterakoan\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: huts %s sarrera  berria prestatzean '%s'\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: ezin da itzalpeko (shadow) pasahitz fitxategia ez dago\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: huts baimenak kentzerakoan (%s)\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: `%s' erabiltzailea ez da %s-en existitzen\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s(r)en data informazioa aldatzen\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: errorea eremuak aldatzean\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Erabilera: %s [-f izen_osoa] [-r gela_zenb] [-w lan_tlf]\n"
+"\t[-h etxe_tlf] [-o bestelakoa] [erabiltzaile-izena]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "Erabilera: %s [-f izen_osoa] [-r gela_zb] [-w lan_tlf] [-h etxe_tlf]\n"
+
+msgid "Full Name"
+msgstr "Izen osoa"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Gela zenbakia"
+
+msgid "Work Phone"
+msgstr "Laneko telefonoa"
+
+msgid "Home Phone"
+msgstr "Etxeko telefonoa"
+
+msgid "Other"
+msgstr "Bestelakoa"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Ezin izan da IDa root-era aldatu.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: ASCII ez diren karaktereak dituen izena: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: izen baliogabea: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: ASCII ez diren karaktereak dituen gela zenbakia: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: gela zenbaki baliogabea: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: laneko tlf baliogabea: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: etxeko tlf baliogabea: '%s'\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s'(e)k ASCII ez diren karaktereak ditu\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s'(e)k karaktere baliogabeak ditu\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: '%s' erabiltzailea ez da existitzen\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: ezin da NIS bezeroko '%s' erabiltzailea aldatu.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' da bezero honen NIS nagusia.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s(r)en erabiltzaile informazioa aldatzen\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: eremu luzegiak\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Erabilera: %s [aukerak]\n"
+"\n"
+"Aukerak:\n"
+"  -c, --crypt-method            kriptografia metodoa (%s-etako bat)\n"
+"  -e, --encrypted              emandako pasahitzak enkripatzen dira\n"
+"  -h, --help                    laguntzako mezu hau erakutsi eta irten\n"
+"                                egiten da\n"
+"  -m, --md5                     erabili MD5 enkriptatze algoritmoa ,\n"
+"                                pasahitzak enkriptatuta ez daudenean\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kriptografia algoritmoentzako\n"
+"                                SHA erronda kopurua\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s bandera bakarrik %s banderarekin onartzen da\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: -c, -e, eta -m banderak esklusiboak dira\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: onartzen ez den kriptografia metodoa: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: %d. lerroa: lerro luzegia\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: %d. lerroa: pasahitz berria falta da\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: %d lerroa: '%s' taldea ez da existitzen\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: %d lerroa: huts %s sarrera berria prestatzean '%s'\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s:errorea atzeman da, aldaketak alde batera utzi dira\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak]\n"
+"\n"
+"Aukerak:\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr "  -c, --crypt-method            zifratze metodoa (%s-etako bat)\n"
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr "  -e, --encrypted               emandako pasahitzak zifraturik daude\n"
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+"  -h, --help                    laguntza mezu hau bistarazi eta irten\n"
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -m, --md5                     zifratu testu laueko pasahitza MD5\n"
+"                                algoritmoa erabiliaz\n"
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: `(%d lerroa, %s erabiltzailea) pasahitza ez da aldatu\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: %d lerroa: '%s' erabiltzailea ez da existitzen\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Erabilera: chsh [aukerak] [IZENA]\n"
+"\n"
+"Aukerak:\n"
+"  -h, --help                    laguntza testu hau bistarazi eta irten\n"
+"  -r, --shell IZENA             erabiltzaile kontukoaren shell berria\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Saio-hasierako shell-a"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Ez zenuke '%s'-(r)en shell-a aldatu behar.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%s(r)en saio-hasierako shell-a aldatzen\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: baliogabeko sarrera: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s: %s shell baliogabea da.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Erabilera: expiry {-f|-c}\n"
+
+#, fuzzy
+#| msgid "  -h, --help                    display this help message and exit\n"
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+"  -h, --help                    laguntza mezu hau bistarazi eta irten\n"
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr "  -r, --system                  sortu sistema kontuak\n"
+
+#, fuzzy
+#| msgid "  -h, --help                    display this help message and exit\n"
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+"  -h, --help                    laguntza mezu hau bistarazi eta irten\n"
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr "huts-erregistroa: Huts %lu UID-arentat sarrera eskuratzean\n"
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Saio-hasiera    Hutsegiteak Gehienezkoa Azkena     Aktiboa\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus falta]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds blokeatuta]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr "huts-erregistroa: Errorea %lu UIDaren huts kontua berrabiaraztean\n"
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr "huts-erregistroa: Huts %lu UIDarentzat max ezartzean\n"
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr "huts-erregistroa: Huts %lu UIDarentzat blokeo-ordua ezartzean\n"
+
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "azken-erregistroa: Eremu edo erabiltzaile ezezaguna: %s\n"
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "huts-erregistroa: Ezin da %s ireki: %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr "huts-erregistroa: Ezinda %s tamaina eskuratu: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+"Erabilera: %s [aukera] TALDEA\n"
+"\n"
+"Aukerak:\n"
+"  -a, --add ERAB                Gehitu ERABiltzailea TALDEra\n"
+"  -d, --delete ERAB             kendu ERABiltzailea TALDEtik\n"
+"  -r, --remove-password         TALDEaren pasahitaz kendu\n"
+"  -R, --restrict                mugatu sarrera TALDEra bere partaideetara\n"
+"  -M, --members ERAB,...        ezarri TALDEaren partaideen zerrenda\n"
+"%s\n"
+"\n"
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"  -A, --administrators ADMIN,...\n"
+"                                ezarri TALDEaren kudeatzaile zerrenda\n"
+"-A eta -M auekrekin kenduta, aukerak ezin dira nahastu.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Aukera hauek ezin dira nahastu.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -A erabiltzeko itzalpeko talde-pasahitza eskatzen da\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: '%s' taldea ez da existitzen %s-(e)n\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: huts irakurketa-soileko %s ixtean\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "%s taldearen pasahitza aldatzen\n"
+
+msgid "New Password: "
+msgstr "Pasahitz berria: "
+
+msgid "Re-enter new password: "
+msgstr "Berretsi pasahitz berria: "
+
+msgid "They don't match; try again"
+msgstr "Ez dira berdinak, saiatu berriro"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Saiatu geroago\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "%s erabiltzailea %s taldean gehitzen\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "%s erabiltzailea %s taldetik kentzen\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: '%s' erabiltzailea ez da existitzen '%s'-ko partaide\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: ez da tty\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: %s [options]\n"
+#| "\n"
+#| "Options:\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak]\n"
+"\n"
+"Aukerak:\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -m, --md5                     encrypt the clear text password using\n"
+#| "                                the MD5 algorithm\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -m, --md5                     zifratu testu laueko pasahitza MD5\n"
+"                                algoritmoa erabiliaz\n"
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr "  -r, --system                  sortu sistema kontuak\n"
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kriptografia algoritmoentzako\n"
+"                                SHA erronda kopurua\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -r, --system                  create a system account\n"
+msgstr "  -r, --system                  sortu sistema kontuak\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: '%s' ez da baliozko talde-izena\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: '%s' talde ID baliogabea\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K KEY=BALIOA eskatzen du\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: '%s' taldea badago dagoeneko\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: '%lu' GIDa badago dagoeneko\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Erabilera: groupdel taldea\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: ezin da '%s' sarrera %s-tik kendu\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: Ezin da '%s' erabiltzailearen talde nagusia kendu\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: '%s' taldea ez da existitzen\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: '%s' taldea NIS talde bat da\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s NIS nagusia da\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s:  '%s' erabiltzailea '%s' taldeko partaide da dagoeneko\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: memoriarik ez. Ezin da %s eguneratu.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+"Erabilera: groupmems [aukerak] [ekintza]\n"
+"\n"
+"Aukerak:\n"
+"  -g, --group groupname         aldatu talde-izena erabiltzailearen taldea "
+"ordez\n"
+"                                (root bakarrik)\n"
+"\n"
+"Ekintzak:\n"
+"  -a, --add erabiltzailea            gehitu erabiltzaile-izena taldearen "
+"partaideetara\n"
+"  -d, --delete erabiltzailea         kendu erabiltzaile-izena taldearen "
+"partaideetatik\n"
+"  -p, --purge                   garbitu talde baten partaide guztiak\n"
+"  -l, --list                    taldearen partaideak zerrendatu\n"
+"\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: zure talde-izena ez da erabiltzaile-izenaren berdina\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: root-ek bakarrik erabili dezake -g/--group aukera\n"
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr "  -r, --system                  sortu sistema kontuak\n"
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: '%s' talde izen baliogabea\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: %s taldea NIS talde bat da\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: %s erabiltzaile ezezaguna\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Erabilera: %s [-r] [-s] [taldea [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Erabilera: %s [-r] [-s] [taldea]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s eta -r ezin dira batera erabili\n"
+
+msgid "invalid group file entry"
+msgstr "baliogabeko talde-fitxategiko sarrera"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "'%s' lerroa ezabatu? "
+
+msgid "duplicate group entry"
+msgstr "bikoiztu taldearen sarrera"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "'%s' baliogabeko talde-izena\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "'%lu' talde ID baliogabea\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "%s taldea: %s erabiltzailea ez dago\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "'%s' kidea ezabatu? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "ez dago bat datorren talde fitxategi sarrerarik %s-(e)n\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "'%s' taldea %s(e)n gehitu? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"%s taldeak %s-n sarrera bat du, baina %s-ko pasahitza eremua ez dago 'x' "
+"bezala ezarririk\n"
+
+msgid "invalid shadow group file entry"
+msgstr "Baliogabeko itzalpeko talde-fitxategiko sarrera"
+
+msgid "duplicate shadow group entry"
+msgstr "bikoiztutako itzalpeko taldearen sarrera"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "%s itzalpeko taldea: ez dago %s erabiltzaile administratzailea\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "'%s' kide administratzailea kendu? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "%s itzalpeko taldea: %s erabiltzailea ez dago\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: fitxategiak eguneratu dira\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: aldaketarik gabe\n"
+
+msgid "Usage: grpconv\n"
+msgstr "Erabilera: grpconv\n"
+
+msgid "Usage: grpunconv\n"
+msgstr "Erabilera: grpunconv\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: ezin da %s ezabatu\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Erabilera: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Erabilera: id\n"
+
+msgid " groups="
+msgstr " taldeak="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Erabilera: lastlog [aukerak]\n"
+"\n"
+"Aukerak:\n"
+"  -b, --before EGUN             EGUN kopurua baino zaharragoak diren\n"
+"                                erregistroak\n"
+"  -h, --help                    laguntzako mezu hau bistaratu eta irten\n"
+"                                egiten da\n"
+"  -t, --time EGUNAK             EGUNAK baino berriagoak diren erregistroak\n"
+"                                bakarrik bistaratzen ditu\n"
+"  -u, --user IZENA              IZENA duen erabiltzailearen lastlog\n"
+"                                erregistroa bistaratzen du\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr "lastlog: Huts %lu UIDaren sarrera eskuratzean\n"
+
+msgid "Username         Port     From             Latest"
+msgstr "Erabiltzaile-izena        Ataka      Nondik           Azkena"
+
+msgid "Username                Port     Latest"
+msgstr "Erabiltzaile-izena           Ataka          Azkena"
+
+msgid "**Never logged in**"
+msgstr "**Inoiz ez du saiorik hasi**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: argumentu esperogabea: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr "lastlog: Ezinda %s-ren tamaina eskuratu: %s\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Erabilera: %s [-p] [izena]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h ostalaria] [-f izena]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r ostalaria\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "konfigurazio errorea - ezin da %s balioa analizatu: '%d'"
+
+msgid "Invalid login time"
+msgstr "Baliogabeko saio-hasieraren denbora"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistema aldiko mantenuagatik itxita"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Deskonexioa saltatuta -- root-ek saio-hastea baimenduta.]"
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Saio-hasiera denboraz kanpo %u segundo igarotakoan.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr "%s: Ezingo du ziurrenik funtzionatu erro efektibo bat gabe\n"
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Ez dago utmp sarrerarik. \"login\" \"sh\" maila baxuenetik exekutatu beharko "
+"zenuke"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "saio hasiera: PAM hutsa, uzten: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s izena: "
+
+msgid "login: "
+msgstr "izena: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Saiakera muga gainditu da (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "Saioa hastea: PAM-ek uztea eskatu du\n"
+
+msgid "Login incorrect"
+msgstr "Izen okerra"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s izena: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: huts zatitzerakoan: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY huts %s-en"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"Abisua: saio-hasiera berriro gaitu egingo da aldi bateko blokeoaren ondoren."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Azken saio-hasiera: %s %s(e)n"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Azken saio-hasiera: %.19s  %s(e)n"
+
+#, c-format
+msgid " from %.*s"
+msgstr " %.*s(e)tik"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"saio hasiera denbora pasa da\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Erabilera: logoutd\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Erabilera: newgrp [-] [taldea]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Erabilera: sg taldea [[-c] komandoa]\n"
+
+msgid "Invalid password.\n"
+msgstr "Pasahitz baliogabea.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: huts zatitzerakoan: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: `%lu' GIDa ez da existitzen\n"
+
+msgid "too many groups\n"
+msgstr "talde gehiegi\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr "  -r, --system                  sortu sistema kontuak\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: '%s' taldea itzalpeko talde bat da, baina ez dago /etc/group-en\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: '%s' erabiltzaile ID baliogabea\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: '%s' erabiltzaile-izen baliogabea\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: %d lerroa: lerro baliogabea\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: ezin da %s erabiltzailearen sarrera eguneratu (ez dago pasahitz "
+"datubasean)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: %d lerroa: ezin da erabiltzailea sortu\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: %d lerroa: ezin da taldea sortu\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: %d lerroa: `%s' erabiltzailea ez da existitzen %s-en\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: %d lerroa: ezin da pasahitza eguneratu\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: %d lerroa: mkdir %s-ek huts egin du: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: %d lerroa: chown %s-ek huts egin du: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: %d lerroa: ezin da sarrera eguneratu\n"
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Erabilera: passwd [aukerak] [IZENA]\n"
+"\n"
+"Aukerak:\n"
+"  -a, --all                        kontu guztien pasahitzen egoera "
+"erreportea\n"
+"  -d, --delete                     emandako kontuaren pasahitza ezabatu\n"
+"  -e, --expire                     emandako kontuaren pasahitzaren\n"
+"                                   iraungitzea behartu\n"
+"  -h, --help                       laguntza mezu hau bistarazi eta irten\n"
+"  -k, --keep-tokens                pasahitza iraungirik bakarrik badago\n"
+"                                   aldatu\n"
+"  -i, --inactive INAKTIBO          ezarri iraungiriko pasahitz ezgaitzea\n"
+"                                   INAKTIBO-ra\n"
+"  -l, --lock                       emandako kontua blokeatu\n"
+"  -n, --mindays GUTXI_EGUN         ezarri pasahitz aldaketa gutxieneko data\n"
+"                                   GUTXI_EGUN-ra\n"
+"  -q, --quiet                      ixilik modua\n"
+"  -r, --repository ERREPOSITORIOA  ERREPOSITORIOA errepositorioko pashitza\n"
+"                                   aldatu\n"
+"  -S, --status                     emandako kontuaren pasahitz egoera\n"
+"                                   erreportea egin\n"
+"  -u, --unlock                     emandako kontuaren blokeoa kendu\n"
+"  -w, --warndays ABISU_EGUN        ezarri iraungitze abisu data ABISU_EGUN-"
+"era\n"
+"  -x, --maxdays GEHI_EGUN          ezarri pasahitz aldatu aurretik "
+"gehienezko\n"
+"                                   egun kopurua GEHI_EGUN-era\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Pasahitz zaharra: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Sartu pasahitz berria (gutxienez %d eta karaktere)\n"
+"Erabili maiuskulen, minuskulen eta zenbakien arteko konbinazioa.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Sartu pasahitz berria (gutxienez %d eta gehienez %d karaktere)\n"
+"Erabili maiuskulen, minuskulen eta zenbakien arteko konbinazioa.\n"
+
+msgid "New password: "
+msgstr "Pasahitz berria: "
+
+msgid "Try again."
+msgstr "Saiatu berriro."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Oharra: pasahitza ahula da (sartu berriro erabiltzen jarraitzeko)."
+
+msgid "They don't match; try again.\n"
+msgstr "Ez dira berdinak, saiatu berriro.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s(r)en pasahitzak ezin dira aldatu.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s(r)en pasahitza ezin dira aldatu oraindik.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: taldea desblokeatzeak pasahitz gabeko kontu baten emaitza izan dezake\n"
+"Erabiltzaile hau desblokeatzeko usermod -p erabiliaz pasahitz bat ezarri "
+"behar duzu.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: %s biltegia ez da onartzen\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr "%s: %s ez dago %s-ren pasahitza aldatzeko baimendurik\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Ez zenuke %s(r)en shell-a aldatu behar.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s(r)en pasahitza aldatzen\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s(r)en pasahitza aldatu gabe dago.\n"
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s: pasahitza aldatuta.\n"
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s: pasahitz iraungitzea informazioa aldatua.\n"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Erabilera: %s [-q] [-r] [-s] [pasahitza [itzalpekoa]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s eta -r ezin dira batera erabili\n"
+
+msgid "invalid password file entry"
+msgstr "Baliogabeko pasahitzen fitxategiko sarrera"
+
+msgid "duplicate password entry"
+msgstr "bikoiztutako pasahitz sarrera"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "%s erabiltzaile-izen baliogabea\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "'%lu' erabiltzaile ID baliogabea\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "'%s' erabiltzailea: ez da %lu talderik\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "'%s' erabiltzailea: '%s' direktorioa ez da existitzen\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "'%s' erabiltzailea: '%s' programa ez da existitzen\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "ez dago bat datorren pasahitz sarrerarik %s(e)n\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "'%s' erabiltzailea %s(e)n gehitu? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"%s erabiltzaileak sarrera bat du %s-en baina %s-ko pasahitza ereemua ez dago "
+"'x' gisa ezarririk\n"
+
+msgid "invalid shadow password file entry"
+msgstr "baliogabeko itzalpeko pasahitz-fitxategiko sarrera"
+
+msgid "duplicate shadow password entry"
+msgstr "bikoiztutako itzalpeko pasahitz-fitxategiko sarrera"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "%s erabiltzailea: pasahitza etorkizunean aldatu zen azken aldiz\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: ezin dira %s fitxategiko sarrerak ordenatu\n"
+
+msgid "Usage: pwconv\n"
+msgstr "Erabilera: pwconv\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: huts %s-ren modua 0600-ra aldatzean\n"
+
+msgid "Usage: pwunconv\n"
+msgstr "Erabilera: pwunconv\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "kontu honentzako 'su' sarbidea UKATUTA.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Pasahitz autentifikazioa saltatuta.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Sartu zure pasahitz PROPIOA autentifikazio gisa.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Erabilera: su [aukerak] [IZENA]\n"
+"\n"
+"Aukerak:\n"
+"  -c, --command KOMANDOA        deituriko shell-ari KOMANDOA pasa\n"
+"  -h, --help                    laguntza testu hau bistarazi eta irten\n"
+"  -, -l, --login                shell-a saio shell bihurtu\n"
+"  -m, -p,\n"
+"  --preserve-environment        ez ingurune aldagaiak berezarri eta "
+"mantendu\n"
+"                                shell berdina\n"
+"  -s, --shell SHELL             SHELL erabili lehenetsiaren ordez\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: terminal batetik exekutatu behar da\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: %d errorea\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "ID ezezaguna: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Ez duzu 'su %s' exekutatzeko baimenik\n"
+
+msgid "(Enter your own password)"
+msgstr "(zure pasahitza idatzi)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ez ikusi egin zaio)\n"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: ¡autentifikazio errorea\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Ez duzu orain su erabiltzeko baimenik\n"
+
+msgid "No shell\n"
+msgstr "Ez dago shell-a\n"
+
+msgid "No password file"
+msgstr "Ez dago pasahitz-fitxategirik"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY huts egin du"
+
+msgid "No password entry for 'root'"
+msgstr "Ez dago 'root'-en pasahitzik"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Sakatu Kontrol+d teklak hasiera arrunta erabiltzeko,\n"
+"(edo idatzi root-en pasahitza sistemaren mantentze-lanetarako):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Sistemaren mantentze-lanetako moduan sartzen"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: %s konfigurazioa %s-n dagoena alde batetara utziko da\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: ezin da lehenespen fitxategi berria sortu\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: ezin da lehenespen fitxategi berria ireki\n"
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: lerro luzeegia %s-n: %s..."
+
+#, c-format
+msgid "%s: rename: %s: %s"
+msgstr "%s: berrizendatu: %s: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: taldea '%s' NIS talde bat da.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: talde gehiegi zehaztu dira (geh. %d).\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: %s [options]\n"
+#| "\n"
+#| "Options:\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Erabilera: %s [aukerak]\n"
+"\n"
+"Aukerak:\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kriptografia algoritmoentzako\n"
+"                                SHA erronda kopurua\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kriptografia algoritmoentzako\n"
+"                                SHA erronda kopurua\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kriptografia algoritmoentzako\n"
+"                                SHA erronda kopurua\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kriptografia algoritmoentzako\n"
+"                                SHA erronda kopurua\n"
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr "  -r, --system                  sortu sistema kontuak\n"
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kriptografia algoritmoentzako\n"
+"                                SHA erronda kopurua\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -m, --md5                     encrypt the clear text password using\n"
+#| "                                the MD5 algorithm\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -m, --md5                     zifratu testu laueko pasahitza MD5\n"
+"                                algoritmoa erabiliaz\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr "  -r, --system                  sortu sistema kontuak\n"
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr "  -r, --system                  sortu sistema kontuak\n"
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+"  -Z, --selinux-user SEERAB     erabili SEUSER zehatz bat SELinux "
+"erabiltzaile mapatzearentzat\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: oinarrizko '%s' direktorio baliogabea\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: '%s' iruzkin baliogabea\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: '%s' etxe-direktorio baliogabea\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: -e itzalpeko pasahitza eskatzen du\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: -f itzalpeko pasahitza eskatzen du\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: '%s' eremu baliogabea\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: '%s' shell baliogabea\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z-ek  SELinux gaituriko kernel bat behar du\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: %s eta %s aukerak elkar-jotzen dute\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: huts %lu UIDaren faillog erregistroa berrezartzean: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: huts %lu UIDaren lastlog sarrera berrezartzean: %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: abisua: %s erabiltzaile izena %s SELinux erabiltzailera mapatzean huts "
+"egin du.\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: ezin da %s direktorioa sortu\n"
+
+msgid "Creating mailbox file"
+msgstr "Postakutxa fitxategia sortzen"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Ez da 'mail' taldea aurkitu. Erabiltzaile postakutxa fitxategia 0600 moduan\n"
+"sortzen.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Postakutxa fitxategi baimenak ezartzen"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: '%s' erabiltzailea badago dagoeneko\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: %s taldea badago - erabiltzaile hau talde honetan gehitzeko -g erabili.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: ezin da erabiltzailea sortu\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: %lu UIDa ez da bakarra\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: ezin da taldea sortu\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: abisua: etxe direktorioa badago dagoeneko.\n"
+"Ez da bertara skel direktorioko fitxategirik kopiatuko.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Erabilera: userdel [aukerak] IZENA\n"
+"\n"
+"Aukerak:\n"
+"  -f, --force                   fitxategien ezabatzea indartu nahiz ez\n"
+"                                erabiltzailearenak izan\n"
+"  -h, --help                    laguntza testu hau bistarazi eta irten\n"
+"  -r, --remove                  etxe direktorioa eta posta hilara ezabatu\n"
+"\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: ezin da %s taldea ezabatu beste erabiltzaile baten talde nagusia bait "
+"da.\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: abisua: ezin da %s ezabatu: %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ez dago %s(r)en jabetzan. ez da ezabatuko\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s:  %s erabiltzailea NIS erabiltzaile bat da\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: une honetan %s erabiltzaileak saioan sartuta dago\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: %s etxe-direktorioa (%s) ez dago\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: ez da %s direktorioa ezabatuko (%s(r)en etxea ezabatuko luke)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: errorea %s direktorioa ezabatzean\n"
+
+#, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Erabilera: usermod [aukerak] IZENA\n"
+"\n"
+"Aukerak:\n"
+"  -c, --comment IRUZKINA         GECOS eremuaren balio berria\n"
+"  -d, --home-dir ETXE_DIR       erabiltzaile kontu berriaren etxe "
+"direktorioa\n"
+"  -e, --expiredate IRAUNG_DATA  kontu iraungitze data ezarri\n"
+"  -f, --inactive INAKTIBO       iraungitze ondorengo pasahitz ezgaitzea\n"
+"                                to INAKTIBO-ra ezarri\n"
+"  -g, --gid TALDE               erabiltzaile kontu berriarekin TALDE\n"
+"                                erabiltzea behartu\n"
+"  -G, --groups TALDEAK          erabiltzaile kontu berriaren talde\n"
+"                                gehigarriak bistarazi\n"
+"  -a, --append                  gehitu erabiltzailea -G aukerak zehaztutako "
+"talde\n"
+"                                gehigarrietara beste taldeetatik kendu gabe\n"
+"  -h, --help                    laguntza mezu hau bistarazi eta irten\n"
+"  -l, --login IZENA             saio hasiera izenaren balio berria\n"
+"  -L, --lock                    erabiltzaile kontua blokeatu\n"
+"  -m, --move-home               etxe direktorioaren edukia kokapen berrira\n"
+"                                mugitu (--d-rekin bakarrik erabilgarri)\n"
+"  -o, --non-unique              onartu UID bikoiztuak (ez bakarrak) "
+"erabiltzea\n"
+"  -p, --password PASAHITZA      Enkriptaturiko pasahitza erabili pasahitz\n"
+"                                berriarentzat\n"
+"  -s, --shell SHELL             erabiltzaile kontuaren saio shell berria\n"
+"  -u, --uid UID                 erabiltzaile kontuaren UID berria\n"
+"  -U, --unlock                  erabiltzaile kontua desblokeatu\n"
+"%s\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+"  -Z, --selinux-user            SELinux erabiltzaile mapatze berria "
+"erabiltzailearen kontuarentzat\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: erabiltzaile pasahitza  desblokeatzeak pasahitz gabeko kontu baten "
+"emaitza izan dezake\n"
+"Erabiltzaile pasahitz hau desblokeatzeko usermod -p erabiliaz pasahitz bat "
+"ezarri behar duzu.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: '%s' erabiltzailea badago dagoeneko %s-n\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: ez da banderarik eman\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s:  -e eta -f aukerek itzalpeko pasahitzak eskatzen dute\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L, -p, eta -U banderak esklusiboak dira\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: '%lu' UIDa badago dagoeneko\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: %s direktorioa badago\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: ezin da %s sortu\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s:ezin da %s jabez aldatu\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: abisua: huts %s etxe direktorio zaharra guztiz ezabatzerakoan"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: ezin da %s direktorioa %s gisa izenez aldatu\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: huts %lu erabiltzailearen lastlog sarrera %lu erabiltzailera kopiatzean: "
+"%s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: huts %lu erabiltzailearen faillog sarrera %lu erabiltzailera kopiatzean: "
+"%s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: abisua: %s ez dago %s(r)en jabegoan\n"
+
+msgid "failed to change mailbox owner"
+msgstr "huts egin du postontzia jabez aldatzean"
+
+msgid "failed to rename mailbox"
+msgstr "huts egin du postontzia izenez aldatzean"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"%s eraldatu duzu\n"
+"Konsistetziagatik %s eraldatu behar duzu.\n"
+"Mesedez erabili '%s' komandoa horretarako.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Erabilera: vipw [aukerak]\n"
+"\n"
+"Aukerak:\n"
+"  -g, --group                   talde datu-basea editatu\n"
+"  -h, --help                    laguntza testu hau bistarazi eta irten\n"
+"  -p, --passwd                  pasahitz datu-basea editatu\n"
+"  -q, --quiet                   ixiltasun modua\n"
+"  -s, --shadow                  shadow edo gshadow datubasea editatu\n"
+"\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: huts %s kentzerakoan\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s ez da aldatu\n"
+
+msgid "Couldn't get file context"
+msgstr "Ezin da fitxategi testuingurua eskuratu"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () -ek huts egin du"
+
+msgid "Couldn't lock file"
+msgstr "Ezin da fitxategia blokeatu"
+
+msgid "Couldn't make backup"
+msgstr "Ezin izan da babeskopiarik egin"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: ezin da %s leheneratu: %s (zure aldaketak %s(e)n daude)\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: faillog [aukerak]\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ "  -a, --all                     erabiltzaile guztien faillog-en\n"
+#~ "                                erregistroak bistaratzen ditu\n"
+#~ "  -h, --help                    laguntzako mezu hau bistarazi eta irten\n"
+#~ "  -l, --lock-time SEG           saio-hasieran hutsegin ondoren kontua "
+#~ "zenbat\n"
+#~ "                                segundutan blokeatuta egongo den\n"
+#~ "  -m, --maximum GEH             saio-hasierako GEHiengo hutsegite "
+#~ "kopurua\n"
+#~ "                                ezartzeko\n"
+#~ "  -r, --reset                   saio-hasierako hutsegiteen kontatzailea\n"
+#~ "                                berrezartzeko\n"
+#~ "  -t, --time EGUNAK             EGUNAK baino berriagoak diren faillog-en\n"
+#~ "                                erregistroak bistaratzeko\n"
+#~ "  -u, --user SAIOA              faillog-en erregistroak bistaratzeko edo\n"
+#~ "                                hutsegiteen kontatzailea eta "
+#~ "ERABILTZAILEA\n"
+#~ "                                izeneko erabiltzailearen(-r, -m edo -l\n"
+#~ "                                aukerekin erabiltzen bada) mantentzeko\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: groupadd [aukerak] TALDEA\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ "  -f, --force                   Indartu arrakastatsuki amaitzea nahiz\n"
+#~ "                                ezarritako taldea aurretik egon\n"
+#~ "  -g, --gid GID                 GID erabili talde berrirako\n"
+#~ "  -h, --help                    laguntza hau bistarazi eta irten\n"
+#~ "  -K, --key KEY=BALIO           /etc/login.defs lehenespenak gainidatzi\n"
+#~ "  -o, --non-unique              onartu bikoizutiko (ez bakarra) GID-a "
+#~ "duen\n"
+#~ "                                taldea sortzea\n"
+#~ "  -p, --password PASSWORD       enkriptatutako pasahitza erabili talde "
+#~ "berrirako\n"
+#~ "  -r, --system                  sistema kontu bat sortu\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Erabilera: groupmod [aukerak] TALDEA\n"
+#~ "\n"
+#~ "Aukerak::\n"
+#~ "  -g, --gid GID                 taldearentzat GID berria erabiltzea "
+#~ "indartu\n"
+#~ "  -h, --help                    laguntza hau bistarazi eta irten\n"
+#~ "  -K, --new-name TALDE_BERRIA   Taldearentzat TALDE_BERRI izena\n"
+#~ "                                erabiltzea indartu\n"
+#~ "  -o, --non-unique              onartu TALDEAK bikoizutiko (ez bakarra) "
+#~ "GID-a erabiltzea\n"
+#~ "  -p, --password PASSWORD       enkriptatutako pasahitza erabili pasahitz "
+#~ "berrirako\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Erabilera: useradd [aukerak] IZENA\n"
+#~ "\n"
+#~ "Aukerak:\n"
+#~ "  -b, --base-dir BASE_DIR       Erabiltzaile kontu berriaren etxe\n"
+#~ "                                direktorioaren oinarri direktorioa\n"
+#~ "  -c, --comment IRUZKINA        erabiltzaile kontu berriaren GECOS "
+#~ "ezarri\n"
+#~ "  -d, --home-dir HOME_DIR       erabiltzaile kontu berriaren etxe\n"
+#~ "                                direktorioa\n"
+#~ "  -D, --defaults                bistarazi edo gorde aldaturiko\n"
+#~ "                                lehenetsiriko useradd konfigurazioa\n"
+#~ "  -e, --expiredate IRAUNG_DATA  kontu iraungitze data ezarri\n"
+#~ "  -f, --inactive EZAKTIBO       ezarri pasahitza ez-aktibo gisa EZAKTIBO "
+#~ "iarungitzearen\n"
+#~ "                                ondoren\n"
+#~ "  -g, --gid TALDE               erabiltzaile kontu berriarekin TALDE\n"
+#~ "                                erabiltzea behartu\n"
+#~ "  -G, --groups TALDEAK          erabiltzaile kontu berriaren talde\n"
+#~ "                                gehiarriak bistarazi\n"
+#~ "  -h, --help                    laguntza mezu hau bistarazi eta irten\n"
+#~ "  -k, --skel SKEL_DIR           beste skel direktorio bat ezarri\n"
+#~ "  -K, --key KEY=BALIO           lehenetsiriko /etc/login.defs gainidatzi\n"
+#~ "  -l, --no-log-init             ez gehitu erabiltzailea lastlog eta "
+#~ "faillog\n"
+#~ "                                datu-baseetara\n"
+#~ "  -m, --create-home             erabiltzaile kontu berriarentzar etxe\n"
+#~ "                                direktorioa sortu\n"
+#~ "  -M, --no-create-home          ez sortu erabiltzailearen etxe-"
+#~ "direktorioa\n"
+#~ "                                (/etc/login.defs gainidazten du)\n"
+#~ "  -N, --no-user-group           ez sortu erabiltzailearen izen berdineko\n"
+#~ "                                talde bat\n"
+#~ "  -o, --non-unique              onartu erabiltzailea sortzea "
+#~ "bikoizturiko\n"
+#~ "                                (ez-bakarra) UIDa erabiliaz\n"
+#~ "  -p, --password PASAHITZA       enkriptatutako pasahitza erabili "
+#~ "erabiltzaile\n"
+#~ "                                berri kontuarentzat\n"
+#~ "  -r, --system                  sistema kontu bat sortu\n"
+#~ "  -s, --shell SHELL             Erabiltzaile kontu berriaren sarrera "
+#~ "shell-a\n"
+#~ "  -u, --uid UID                 behartu UID erabiltzea erabiltzaile kontu "
+#~ "berriarentzat\n"
+#~ "  -U, --user-group              sortu erabiltzailearen izen berdineko "
+#~ "talde bat\n"
+#~ "%s\n"
diff --git a/po/fi.gmo b/po/fi.gmo
new file mode 100644 (file)
index 0000000..bb61183
Binary files /dev/null and b/po/fi.gmo differ
diff --git a/po/fi.po b/po/fi.po
new file mode 100644 (file)
index 0000000..410db5c
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,2685 @@
+# Finnish translation for shadow.
+# Copyright (C) 2004-2007 Free Software Foundation, Inc.
+# Tommi Vainikainen <Tommi.Vainikainen@iki.fi>, 2004-2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18.1\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-11-24 22:54+0100\n"
+"Last-Translator: Tommi Vainikainen <thv+debian@iki.fi>\n"
+"Language-Team: Finnish <debian-l10n-finnish@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Asetustiedoille ei voi varata tilaa.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "asetusvirhe - tuntematon kohta \"%s\" (kerro ylläpidolle)\n"
+
+msgid "Password: "
+msgstr "Salasana: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Käyttäjän %s salasana: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Varoitus: tuntematon ryhmä %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Varoitus: liian monta ryhmää\n"
+
+msgid "Your password has expired."
+msgstr "Salasanasi on vanhentunut."
+
+msgid "Your password is inactive."
+msgstr "Salasanasi ei ole käytössä."
+
+msgid "Your login has expired."
+msgstr "Käyttäjätunnuksesi on vanhentunut."
+
+msgid "  Contact the system administrator."
+msgstr "  Ota yhteys järjestelmän ylläpitoon."
+
+msgid "  Choose a new password."
+msgstr "  Valitse uusi salasana."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Salasanasi vanhenee %ld päivässä.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Salasanasi vanhenee huomenna."
+
+msgid "Your password will expire today."
+msgstr "Salasanasi vanhenee tänään."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Päätettä %s ei voi vaihtaa"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: kentät liian pitkiä\n"
+
+msgid "Environment overflow\n"
+msgstr "Ympäristön ylivuoto\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Et voi muuttaa muuttujaa $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"Edellisen kirjautumisen jälkeen %d epäonnistunut yritys.\n"
+"Viimeisin oli %s päätteellä %s.\n"
+msgstr[1] ""
+"Edellisen kirjautumisen jälkeen %d epäonnistunutta yritystä.\n"
+"Viimeisin oli %s päätteellä %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: ei saa ainutkertaista UID:tä\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: ei saa ainutkertaista GID:iä\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: ei saa ainutkertaista UID:tä\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: ei saa ainutkertaista UID:tä\n"
+
+msgid "Too many logins.\n"
+msgstr "Liian monta sisäänkirjautumista.\n"
+
+msgid "You have new mail."
+msgstr "Sinulle on uutta postia."
+
+msgid "No mail."
+msgstr "Ei postia."
+
+msgid "You have mail."
+msgstr "Sinulle on postia."
+
+msgid "no change"
+msgstr "ei muutoksia"
+
+msgid "a palindrome"
+msgstr "palidromi"
+
+msgid "case changes only"
+msgstr "vain kirjainkoon muutoksia"
+
+msgid "too similar"
+msgstr "liian samankaltainen"
+
+msgid "too simple"
+msgstr "liian yksinkertainen"
+
+msgid "rotated"
+msgstr "pyöräytetty"
+
+msgid "too short"
+msgstr "liian lyhyt"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Huono salasana: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() epäonnistui, virhe %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Salasana vaihdettu."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: salasanan päivitys onnistui\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Väärä salasana käyttäjälle \"%s\".\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Ei voi vaihtaa hakemistoon \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Ei hakemistoa, sisäänkirjaudutaan siten, että HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Ei voi suorittaa %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Virheellinen juurihakemisto \"%s\"\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Ei voi vaihtaa juurihakemistoksi \"%s\"\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Tty-päätteesi nimeä ei voi selvittää."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: muisti loppui\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) epäonnistui\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Ei\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Käyttö: chage [valitsimet] [TUNNUS]\n"
+"\n"
+"Valitsimet:\n"
+"  -d, --lastday VIIM_PVM        Aseta edelliseksi salasanan vaihtopäiväksi\n"
+"                                VIIM_PVM\n"
+"  -E, --expiredate VANH_PVM     Aseta tilin vanhenemispäiväykseksi VANH_PVM\n"
+"  -h, --help                    Näytä tämä ohje ja lopeta\n"
+"  -I, --inactive POISKÄYTÖSTÄ   Ota salasana pois käytöstä POISKÄYTÖSTÄ\n"
+"                                päivää vanhenemisen jälkeen\n"
+"  -l, --list                    Näytä tilin vanhenemistiedot\n"
+"  -m, --mindays MIN_PÄIVIÄ      Aseta pienimmäksi sallittuksi määräksi\n"
+"                                päiviä ennen salasanan vaihtamista "
+"MIN_PÄIVIÄ\n"
+"  -M, --maxdays MAX_PÄIVIÄ      Aseta suurimmaksi sallituksi määräksi "
+"päiviä\n"
+"                                ennen salasanan vaihtamista MAX_PÄIVIÄ\n"
+"  -W, --warndays VAR_PÄIVIÄ     Aseta vanhenemisen varoitusajaksi "
+"VAR_PÄIVIÄ\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Syötä uusi arvo tai paina ENTER jättääksesi oletuksen"
+
+msgid "Minimum Password Age"
+msgstr "Salasanan ikä vähintään"
+
+msgid "Maximum Password Age"
+msgstr "Salasanan ikä korkeintaan"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Viimeisin salasanan vaihto (VVVV-KK-PP)"
+
+msgid "Password Expiration Warning"
+msgstr "Salasanan vanhenemisvaroitus"
+
+msgid "Password Inactive"
+msgstr "Salasana pois käytöstä"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Tunnuksen vanhenemispäiväys (VVVV-KK-PP)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Edellinen salasanan vaihto\t\t\t\t\t: "
+
+msgid "never"
+msgstr "ei koskaan"
+
+msgid "password must be changed"
+msgstr "salasana täytyy vaihtaa"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Salasana vanhenee\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Salasana pois käytöstä\t\t\t\t\t:"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Tunnus vanhenee\t\t\t\t\t:"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Salasanan vaihtamisten välillä vähintään päiviä\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Salasanan vaihtamisten välillä korkeintaan päiviä\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Montako päivää varoitetaan ennen salasanan vanhenemista\t\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: virheellinen päiväys \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: virheellinen numeroargumentti \"%s\"\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: älä sisällytä \"l\" muiden lippujen kanssa\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Lupa evätty.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Käyttäjätunnusta ei voi selvittää.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM-todennus epäonnistui\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: tiedostoja ei voi lukita, yritä myöhemmin uudelleen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: tiedostoa %s ei voi lukita\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: fork-kutsu epäonnistui: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: varjosalasanatiedostoa ei ole\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Muutetaan käyttäjän %s vanhenemistietoja\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: virhe muutettaessa kenttiä\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Käyttö: %s [-f koko_nimi] [-r huonenro] [-w työpuh]\n"
+"\t[-h kotipuh] [-o muu] [käyttäjä]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "Käyttö: %s [-f koko_nimi] [-r huonenro] [-w työpuh] [-h kotipuh]\n"
+
+msgid "Full Name"
+msgstr "Koko nimi"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Huonenumero"
+
+msgid "Work Phone"
+msgstr "Työpuhelin"
+
+msgid "Home Phone"
+msgstr "Kotipuhelin"
+
+msgid "Other"
+msgstr "Muu"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Ei voi vaihtaa tunnusta pääkäyttäjäksi.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: virheellinen nimi: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: virheellinen huonenumero: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: virheellinen työpuhelin: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: virheellinen kotipuhelin: \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" sisältää ei-sallittuja merkkejä\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" sisältää ei-sallittuja merkkejä\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: ei voi vaihtaa käyttäjää \"%s\" NIS-asiakkaalla.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: \"%s\" on NIS-palvelin tälle asiakkaalle.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Muutetaan käyttäjän %s tietoja\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: kentät liian pitkiä\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Käyttö: chpasswd [valitsimet]\n"
+"\n"
+"Valitsimet:\n"
+"  -e, --encrypted               Annetut salasanat ovat salakirjoitettuja\n"
+"  -h, --help                    Näytä tämä ohje ja lopeta\n"
+"  -m, --md5                     Käytä MD5:tä eikä DES:iä kun annetut\n"
+"                                salasanat eivät ole salakirjoitettuja\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: Valitsinta -a voi käyttää VAIN yhdessä valitsimen -G kanssa\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: rivi %d: rivi on liian pitkä\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: rivi %d: uusi salasana puuttuu\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: ryhmää %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: rivi %d: tietuetta ei voi päivittää\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: virhe havaittu, muutokset ohitetaan\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Käyttö: chsh [valitsimet] [TUNNUS]\n"
+"\n"
+"Valitsimet:\n"
+"  -h, --help                    Näytä tämä ohje ja poistu\n"
+"  -s, --shell KUORI             Aseta uusi sisäänkirjautumiskuori "
+"käyttäjälle\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Sisäänkirjautumiskuori"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Et voi muuttaa käyttäjän %s kuorta.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Muutetaan käyttäjän %s sisäänkirjautumiskuorta\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Virheellinen tietue: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s on virheellinen kuori.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Käyttö: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Tunnus      Epäonn.  Enint.  Edellinen                Päätteellä\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds jäljellä]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lukittu]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Tuntematon käyttäjä: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: tiedostoa %s ei voi lukita\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Käyttäjän %s salasanaa ei voi vaihtaa.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: varjoryhmäsalanat vaaditaan valitsimelle -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: ryhmää %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: fork-kutsu epäonnistui: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Vaihdetaan ryhmän %s salasana\n"
+
+msgid "New Password: "
+msgstr "Uusi salasana: "
+
+msgid "Re-enter new password: "
+msgstr "Toista uusi salasana: "
+
+msgid "They don't match; try again"
+msgstr "Ne eivät täsmää. Yritä uudelleen"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Yritä myöhemmin uudelleen\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Lisätään käyttäjä %s ryhmään %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Poistetaan käyttäjä %s ryhmästä %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Ei ole pääte\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s ei ole kelpo ryhmänimi\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "virheellinen ryhmänimi \"%s\"\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K vaatii AVAIN=ARVO\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: ryhmä %s on olemassa\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Jäsen on jo olemassa\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Käyttö: groupdel ryhmä\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: ei voi vaihtaa käyttäjää \"%s\" NIS-asiakkaalla.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: ryhmää %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: ryhmä \"%s\" on NIS-ryhmä.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: isäntä %s on NIS-palvelin\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: käyttäjä %s on NIS-käyttäjä\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: muisti loppui funktiossa update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "virheellinen ryhmänimi \"%s\"\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: ryhmä %s on NIS-ryhmä\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: Tuntematon käyttäjä %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Käyttö: %s [-r] [-s] [ryhmä [ryhmävarjo]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Käyttö: %s [-r] [-s] [ryhmä]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: valitsimet -s ja -r eivät sovi yhteen\n"
+
+msgid "invalid group file entry"
+msgstr "virheellinen ryhmätiedostotietue"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "poista rivi \"%s\"? "
+
+msgid "duplicate group entry"
+msgstr "kaksinkertainen ryhmätietue"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "virheellinen ryhmänimi \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "virheellinen ryhmänimi \"%s\"\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "ryhmä %s: ei käyttäjää %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "poista jäsen \"%s\"? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "ei täsmäävää ryhmätiedostotietuetta tiedostossa %s\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "lisää ryhmä \"%s\" tiedostoon %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "virheellinen tietue varjoryhmätiedostossa"
+
+msgid "duplicate shadow group entry"
+msgstr "kaksinkertainen varjoryhmätietue"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "varjoryhmä %s: käyttäjä %s ei kuulu ylläpitoon\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "poista ylläpidon jäsen \"%s\"? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "varjoryhmä %s: ei käyttäjää %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: tiedostot päivitettiin\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: ei muutoksia\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Käyttö: groupdel ryhmä\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Käyttö: groupdel ryhmä\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: tiedostoa %s ei voi päivittää\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Käyttö: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Käyttö: id\n"
+
+msgid " groups="
+msgstr " ryhmät="
+
+#, fuzzy
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Käyttö: lastlog [valitsimet]\n"
+"\n"
+"Valitsimet:\n"
+"  -b, --before PÄIVÄÄ        Tulosta vain PÄIVÄÄ vanhemmat lastlog-tietueet\n"
+"  -t, --time PÄIVÄÄ          Tulosta vain PÄIVÄÄ tuoreemmat lastlog-"
+"tietueet\n"
+"  -u, --login TUNNUS         Tulosta lastlog-tietue käyttäjälle TUNNUS\n"
+"  -h, --help                 Näytä tämä ohje ja lopeta\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Käyttäjä         Portti   Mistä            Viimeksi"
+
+msgid "Username                Port     Latest"
+msgstr "Käyttäjä                Portti   Viimeksi"
+
+msgid "**Never logged in**"
+msgstr "**Ei koskaan kirjautunut sisään**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: odottamaton argumentti: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Käyttö: %s [-p] [nimi]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h isäntä] [-f nimi]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r isäntä\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Virheellinen kirjautumisaika"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Järjestelmä on suljettu ylläpidon ajaksi"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Yhteydenkatkaisu ohitettu -- pääkäyttäjän kirjautuminen sallittu.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Sisäänkirjautuminen keskeytetty %d sekunnin jälkeen.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr "Ei utmp-tietuetta. Suorita \"login\" alimman tason kuoresta"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM-virhe, keskeytetään: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s-tunnus: "
+
+msgid "login: "
+msgstr "tunnus: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Suurin sallittu määrä yrityksiä ylitetty (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: keskeytyspyyntö PAM:sta\n"
+
+msgid "Login incorrect"
+msgstr "Sisäänkirjautuminen epäonnistui"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s-tunnus: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fork-kutsu epäonnistui: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"Varoitus: sisäänkirjautuminen uudelleen käytössä hetkellisen eston jälkeen."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Edellinen kirjautuminen: %s päätteellä %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Edellinen kirjautuminen: %.19s päätteellä %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " osoitteesta %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"sisäänkirjautumisaika ylitetty\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Käyttö: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Käyttö: newgrp [-] [ryhmä]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Käyttö: sg ryhmä [[-c] komento]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Vanha salasana: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fork-kutsu epäonnistui: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+msgid "too many groups\n"
+msgstr "liian monta ryhmää\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: ryhmää %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: virheellinen käyttäjätunnus \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: virheellinen käyttäjätunnus \"%s\"\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: rivi %d: virheellinen rivi\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: käyttäjän %s tietuetta ei voi päivittää\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: rivi %d: GIDiä ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: rivi %d: GIDiä ei voi luoda\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: rivi %d: salasanaa ei voi päivittää\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: rivi %d: mkdir epäonnistui\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: rivi %d: chown epäonnistui\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: rivi %d: tietuetta ei voi päivittää\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: passwd [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -a, --all                     report password status on all accounts\n"
+#| "  -d, --delete                  delete the password for the named "
+#| "account\n"
+#| "  -e, --expire                  force expire the password for the named "
+#| "account\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -k, --keep-tokens             change password only if expired\n"
+#| "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --lock                    lock the named account\n"
+#| "  -n, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -q, --quiet                   quiet mode\n"
+#| "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+#| "  -S, --status                  report password status on the named "
+#| "account\n"
+#| "  -u, --unlock                  unlock the named account\n"
+#| "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "  -x, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Käyttö: passwd [valitsimet] [TUNNUS]\n"
+"\n"
+"Valitsimet:\n"
+"  -a, --all                     Ilmoita jokaisen tunnuksen salasanatilanne\n"
+"  -d, --delete                  Poista annetun tunnuksen salasana\n"
+"  -e, --expire                  Aseta annetun tunnuksen salasana\n"
+"                                vanhentuneeksi\n"
+"  -h, --help                    Näytä tämä ohje ja lopeta\n"
+"  -k, --keep-tokens             Vaihda vain vanhentunut salasana\n"
+"  -i, --inactive POISKÄYTÖSTÄ   Ota salasana pois käytöstä POISKÄYTÖSTÄ\n"
+"                                päivää vanhenemisen jälkeen\n"
+"  -l, --lock                    Lukitse annettu tunnus\n"
+"  -n, --mindays VÄH_PÄIVÄ       Aseta vähin määrä päiviä ennen kuin\n"
+"                                salasanan voi vaihtaa VÄH_PÄIVÄksi\n"
+"  -q, --quiet                   Hiljainen toiminta\n"
+"  -r, --repository TIETOLÄHDE   Vaihda salasana tietolähteessä TIETOLÄHDE\n"
+"  -S, --status                  Ilmoita annetun tunnuksen salasanan tila\n"
+"  -u, --unlock                  Avaa annetun tunnuksen lukitus\n"
+"  -w, --warndays VAR_PÄIVÄÄ     Aseta varoituspäiviksi VAR_PÄIVÄÄ ennen\n"
+"                                vanhentumista\n"
+"  -x, --maxdays KORK_PÄIVÄ      Aseta korkein määrä päivä ennen kuin\n"
+"                                salasana täytyy vaihtaa KORK_PÄIVÄksi\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Vanha salasana: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Syötä uusi salasana (vähintään %d ja korkeintaan %d merkkiä)\n"
+"Käytäthän salasanassa numeroita sekä pien- ja suuraakkosia.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Syötä uusi salasana (vähintään %d ja korkeintaan %d merkkiä)\n"
+"Käytäthän salasanassa numeroita sekä pien- ja suuraakkosia.\n"
+
+msgid "New password: "
+msgstr "Uusi salasana: "
+
+msgid "Try again."
+msgstr "Yritä uudelleen."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Varoitus: heikko salasana (syötä uudelleen käyttääksesi joka tapauksessa)."
+
+msgid "They don't match; try again.\n"
+msgstr "Ne eivät täsmää. Yritä uudelleen.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Käyttäjän %s salasanaa ei voi vaihtaa.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Käyttäjän %s salasanaa ei voi vaihtaa.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: tietolähdettä %s ei tueta\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Et voi katsoa tai muokata käyttäjän %s salasanatietoja.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Vaihdetaan salasana käyttäjälle %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Käyttäjän %s salasanaa ei vaihdettu.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Salasana vaihdettu."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Salasanan vanhenemisvaroitus"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Käyttö: %s [-q] [-r] [-s] [passwd [varjo]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: valitsimet -s ja -r eivät sovi yhteen\n"
+
+msgid "invalid password file entry"
+msgstr "virheellinen sanasanatiedostotietue"
+
+msgid "duplicate password entry"
+msgstr "kaksinkertainen salasanatietue"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "virheellinen käyttäjätunnus \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "virheellinen käyttäjätunnus \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "käyttäjä %s: ei ryhmää %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "käyttäjä %s: hakemistoa %s ei ole olemassa\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "käyttäjä %s: kuorta %s ei ole olemassa\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "ei täsmäävää salasanatiedostotietuetta tiedostossa %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "lisää käyttäjä \"%s\" tiedostoon %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "virheellinen tietue varjosalasanatiedostossa"
+
+msgid "duplicate shadow password entry"
+msgstr "kaksinkertainen varjosalasanatietue"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "käyttäjä %s: viimeisin salasanan vaihto tapahtunut tulevaisuudessa\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: tiedostoa %s ei voi lukita\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Käyttö: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Käyttö: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Tunnuksen vaihtaminen täksi käyttäjäksi EVÄTTY.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Salasanatodennus ohitettu.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Syötä OMA salasanasi todennukseksi.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Käyttö: su [valitsimet] [TUNNUS]\n"
+"\n"
+"Valitsimet:\n"
+"  -c, --command KOMENTO         Välitä KOMENTO käynnistyvälle kuorelle\n"
+"  -h, --help                    Näytä tämä ohje ja lopeta\n"
+"  -, -l, --login                Tee kuoresta sisäänkirjautumiskuori\n"
+"  -m, -p,\n"
+"  --preserve-environment        Älä tyhjää ympäristömuuttujia ja säilytä\n"
+"                                sama kuori\n"
+"  -s, --shell KUORI             Käytä kuorta KUORI passwd:n oletuksen "
+"sijaan\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: täytyy suorittaa päätteessä\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: virhe %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Tuntematon id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Sinulla ei ole lupaa asettua käyttäjäksi %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Syötä oma salasanasi)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ohitettu)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM-todennus epäonnistui\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Sinulla ei ole lupaa asettua käyttäjäksi %s\n"
+
+msgid "No shell\n"
+msgstr "Ei kuorta\n"
+
+msgid "No password file"
+msgstr "Ei salasanatiedosto"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Ei salasanatietuetta pääkäyttäjälle (\"root\")"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Paina ctrl-d jatkaaksesi normaalia käynnistystä,\n"
+"(tai syötä pääkäyttäjän salasana järjestelmän ylläpitämiseksi):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Siirrytään järjestelmän ylläpitotilaan"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: uutta defaults-tiedostoa ei voi luoda\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: uutta defaults-tiedostoa ei voi avata\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: rivi %d: chown epäonnistui\n"
+
+# Kannattaako tuota kääntää, siinä viitataan rename()-funktioon...
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: rename: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: ryhmä \"%s\" on NIS-ryhmä.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: liian monta ryhmää määritelty (korkeintaan %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Käyttö: %s [syöte]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: virheellinen perushakemisto \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: virheellinen kommentti \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: virheellinen kotihakemisto \"%s\"\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: varjosalasanat vaaditaan valitsimelle -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: varjosalasanat vaaditaan valitsimelle -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: virheellinen kenttä \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: virheellinen kuori \"%s\"\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: hakemistoa %s ei voi luoda\n"
+
+msgid "Creating mailbox file"
+msgstr "Luodaan postilaatikkotiedosto"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Ryhmää \"mail\" ei löytynyt. Luodaan käyttäjälle postilaatikkotiedosto 0600-"
+"oikeuksin.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Asetetaan postilaatikkotiedoston oikeudet"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: käyttäjä %s on olemassa\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: ryhmä %s on olemassa - jos haluat lisätä tämän käyttäjän ryhmään, käytä "
+"valitsinta -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: tiedostoa %s ei voi luoda\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u ei ole ainutkertainen\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: tiedostoa %s ei voi luoda\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: varoitus: kotihakemisto on jo olemassa.\n"
+"Ei kopioida yhtään tiedostoa sinne skel-hakemistosta.\n"
+
+#, fuzzy
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Käyttö: userdel [valitsimet] TUNNUS\n"
+"\n"
+"Valitsimet:\n"
+"  -f, --force                   Pakota tiedostojen poisto vaikkei niitä\n"
+"                                omistaisikaan käyttäjä\n"
+"  -h, --help                    Näytä tämä ohje ja poistu\n"
+"  -r, --remove                  Poista kotihakemistoja ja postilaatikko\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Ryhmää %s ei voi poistaa, koska se on toisen käyttäjän ensisijainen "
+"ryhmä.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: varoitus: ei voi poistaa tiedostoa "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: tiedoston %s omistaja ei ole %s, ei poisteta\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: käyttäjä %s on NIS-käyttäjä\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: käyttäjä %s on nyt sisäänkirjautuneena\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: virheellinen kotihakemisto \"%s\"\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: ei poisteta hakemistoa %s (poistettaisiin käyttäjän %s kotihakemisto)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: virhe poistettaessa hakemistoa %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Käyttö: usermod [valitsimet] TUNNUS\n"
+"\n"
+"Valitsimet:\n"
+"  -a, --append RYHMÄ            Lisää käyttäjä ryhmään RYHMÄ\n"
+"                                (käytetään vain valitsimen -G kanssa)\n"
+"  -c, --comment KOMMENTTI       Aseta GECOS-kenttään uusi arvo\n"
+"  -d, --home KOTIHAK            Käyttäjätunnuksen uusi kotihakemisto\n"
+"  -e, --expiredate VANH_PVM     Aseta tilin vanhenemispäiväykseksi VANH_PVM\n"
+"  -f, --inactive POISKÄYTÖSTÄ   Ota salasana pois käytöstä POISKÄYTÖSTÄ\n"
+"                                päivää vanhenemisen jälkeen\n"
+"  -g, --gid RYHMÄ               Aseta RYHMÄ uudeksi "
+"sisäänkirjautumisryhmäksi\n"
+"  -G, --groups RYHMÄT           Luettelo lisäryhmistä\n"
+"  -h, --help                    Näytä tämä ohje ja lopeta\n"
+"  -l, --login TUNNUS            Uusi arvo tunnukseksi\n"
+"  -L, --lock                    Lukitse annettu tunnus\n"
+"  -m, --move-home               Siirrä kotihakemiston sisältö uuteen\n"
+"                                sijaintiin (käytä vain yhdessä valitsimen\n"
+"                                -d kanssa)\n"
+"  -o, --non-unique              Salli UID:n uudelleenkäyttö (ei-uniikki "
+"UID)\n"
+"  -p, --password SALASANA       Käytä salakirjoitettua salasanaa\n"
+"  -s, --shell KUORI             Käyttäjätunnuksen uusi "
+"sisäänkirjautumiskuori\n"
+"  -u, --uid UID                 Uusi UID käyttäjätunnukselle\n"
+"  -U, --unlock                  Avaa annetun tunnuksen lukitus\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: käyttäjä %s on olemassa\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: lippuja ei annettu\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: varjosalasanat vaaditaan valitsimille -e ja -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Jäsen on jo olemassa\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: hakemisto %s on olemassa\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: tiedostoa %s ei voi luoda\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: tiedoston %s omistajaa ei voi asettaa\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: varoitus: vanhan kotihakemiston %s täydellinen poistaminen epäonnistui"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: varoitus: tiedoston %s omistaja ei ole %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "postilaatikon omistajan vaihtaminen epäonnistui"
+
+msgid "failed to rename mailbox"
+msgstr "postilaatikon uudelleennimeäminen epäonnistui"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Käyttö: vipw [valitsimet]\n"
+"\n"
+"Valitsimet:\n"
+"  -g, --group                   Muokkaa ryhmätietokantaa\n"
+"  -h, --help                    Näytä tämä ohje ja lopeta\n"
+"  -p, --passwd                  Muokkaa passwd-tietokantaa\n"
+"  -q, --quiet                   Hiljainen toiminta\n"
+"  -s, --shadow                  Muokkaa shadow- tai gshadow-tietokantaa\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: tiedostoa %s ei muutettu\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Tiedostoa ei voi lukita"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Tiedostoa ei voi lukita"
+
+msgid "Couldn't make backup"
+msgstr "Tiedostoa ei voi varmuuskopioida"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+"%s: tiedostoa %s ei voi palauttaa: %s (muutoksesi ovat tiedostossa %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: faillog [valitsimet]\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ "  -a, --all                     Näytä faillog-tietueet kaikille "
+#~ "käyttäjille\n"
+#~ "  -h, --help                    Näytä tämä ohje ja lopeta\n"
+#~ "  -l, --lock-time SEK           Lukitse epäonnistuneen kirjautumisen "
+#~ "jälkeen\n"
+#~ "                                tunnus SEK sekunniksi\n"
+#~ "  -m, --maximum MAX             Aseta sallittujen kirjautumisyritysten\n"
+#~ "                                laskureiksi MAX\n"
+#~ "  -r, --reset                   Nollaa kirjautumisyrityslaskurit\n"
+#~ "  -t, --time PÄIVIÄ             Näytä PÄIVIÄ uudemmat faillog-tietueet\n"
+#~ "  -u, --user TUNNUS             Näytä faillog-tietue tai muuta\n"
+#~ "                                kirjautumisyrityslaskureita (kun\n"
+#~ "                                käytetään -r, -m tai -l-valitsimilla)\n"
+#~ "                                vain käyttäjälle TUNNUS\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: groupadd [valitsimet] RYHMÄ\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ "  -f, --force                   poistu onnistuneella arvolla vaikka "
+#~ "annettu\n"
+#~ "                                ryhmä olisikin jo olemassa\n"
+#~ "  -g, --gid RYHMÄID             käytä RYHMÄID:tä uudelle ryhmälle\n"
+#~ "  -h, --help                    näytä tämä ohjeviesti ja poistu\n"
+#~ "  -K, --key AVAIN=ARVO          ohita /etc/login.defs:n oletusarvot\n"
+#~ "  -o, --non-unique              salli ryhmän luominen (ei-uniikilla)\n"
+#~ "                                kopio-RYHMÄID:llä\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: groupmod [valitsimet] RYHMÄ\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ "  -g, --gid RYHMÄID             käytä RYHMÄID:tä tälle ryhmälle\n"
+#~ "  -h, --help                    näytä tämä ohjeviesti ja poistu\n"
+#~ "  -n, --new-name UUSI_RYHMÄ     aseta UUSI_RYHMÄ nimeksi RYHMÄlle\n"
+#~ "  -o, --non-unique              salli saman RYHMÄID:n käyttäminen "
+#~ "RYHMÄlle\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Käyttö: useradd [valitsimet] TUNNUS\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ "  -b, --base-dir YLÄHAK         Ylähakemisto uuden käyttäjätunnuksen\n"
+#~ "                                kotihakemistolle\n"
+#~ "  -c, --comment KOMMENTTI       Aseta GECOS-kenttä uudelle "
+#~ "käyttäjätunnukselle\n"
+#~ "  -d, --home-dir KOTIHAK        Uuden käyttäjätunnuksen kotihakemisto\n"
+#~ "  -D, --defaults                Tulosta tai tallenna useradd-työkalun\n"
+#~ "                                oletusasetukset\n"
+#~ "  -e, --expiredate VANH_PVM     Aseta tilin vanhenemispäiväykseksi "
+#~ "VANH_PVM\n"
+#~ "  -f, --inactive POISKÄYTÖSTÄ   Ota salasana pois käytöstä POISKÄYTÖSTÄ\n"
+#~ "                                päivää vanhenemisen jälkeen\n"
+#~ "  -g, --gid RYHMÄ               Valitse itse RYHMÄ uudelle "
+#~ "käyttäjätunnukselle\n"
+#~ "  -G, --groups RYHMÄT           Luettelo lisäryhmistä uudelle\n"
+#~ "                                käyttäjätunnukselle\n"
+#~ "  -h, --help                    Näytä tämä ohje ja lopeta\n"
+#~ "  -k, --skel MALLIHAK           Määritä vaihtoehtoinen mallihakemisto\n"
+#~ "  -K, --key AVAIN=ARVO          Kumoa /etc/login.defs-oletusarvot\n"
+#~ "  -m, --create-home             Luo kotihakemisto uudelle "
+#~ "käyttäjätunnukselle\n"
+#~ "  -o, --non-unique              Salli UID:n uudelleenkäyttö (ei-uniikki "
+#~ "UID)\n"
+#~ "                                luotaessa käyttäjätunnus\n"
+#~ "  -p, --password SALASANA       Käytä salakirjoitettua salasanaa uudelle\n"
+#~ "                                käyttäjätunnukselle\n"
+#~ "  -s, --shell KUORI             Uuden käyttäjätunnuksen "
+#~ "sisäänkirjautumiskuori\n"
+#~ "  -u, --uid UID                 Valitse itse UID uudelle "
+#~ "käyttäjätunnukselle\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Salasana asetettu vanhenemaan."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi lukita\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi avata\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi lukita\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi avata\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi päivittää\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi päivittää\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tKoko nimi: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tHuonenumero: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTyöpuhelin: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tKotipuhelin: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Salasanatiedostoa ei voi lukita. Yritä myöhemmin uudelleen.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Salasanatiedostoa ei voi avata.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: Käyttäjää %s ei löydy tiedostosta /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Virhe päivitettäessä salasanatietuetta.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Salasanatiedoston muutoksia ei voi tallentaa.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Salasanatiedoston lukitusta ei voi avata.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: ryhmätiedostoa ei voi lukita\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: ryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: gshadow-tiedostoa ei voi lukita\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: varjotiedostoa ei voi avata\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: virhe päivitettäessä varjotiedostoa\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: virhe päivitettäessä ryhmätietuetta\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: rivi %d: tuntematon ryhmä %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: rivi %d: tietuetta ei voi päivittää\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: varjotiedostoa ei voi lukita\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: virhe päivitettäessä varjotiedostoa\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: virhe päivitettäessä salasanatiedostoa\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: rivi %d: tuntematon käyttäjä %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: rivi %d: salasanatietuetta ei voi päivittää\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: tuntematon käyttäjä\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Tuntematon käyttäjä: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Käyttö: %s [-r|-R] ryhmä\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a käyttäjä] ryhmä\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d käyttäjä] ryhmä\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A käyttäjä,...] [-M käyttäjä,...] ryhmä\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M käyttäjä,...] ryhmä\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: ei voi lukita\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: varjoa ei voi lukita\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: tiedosta ei voi avata\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: tiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: varjotiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: tiedoston lukkoa ei voi avata\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: tietuetta ei voi päivittää\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: varjotietuetta ei voi päivittää\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "tuntematon ryhmä: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: tiedosta ei voi avata\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: varjotiedostoa ei voi avata\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Kuka olet?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: tuntematon jäsen %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: virhe lisättäessä uutta ryhmätietuetta\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: ryhmätiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: ryhmätiedostoa ei voi lukita\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: ryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi lukita\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u ei ole ainutkertainen\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: virhe poistettaessa ryhmätietuetta\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: virhe poistettaessa varjoryhmätietuetta\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: käyttäjän ensisijaista ryhmää ei voi poistaa\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Poistettavaa jäsentä ei löytynyt\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr "Käyttö: groupmems -a tunnus | -d tunnus | -D | -l [-g ryhmännimi]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Vain pääkäyttäjä voi lisätä jäseniä eri ryhmiin\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Ryhmäoikeus vaaditaan\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Et ole nykyisen ryhmän ensisijainen omistaja\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM-todennus epäonnistui\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Ryhmätiedostoa ei voi lukita\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Ryhmätiedostoa ei voi avata\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Ryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: Ryhmää %s ei löydy tiedostosta /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u ei ole ainutkertainen GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s ei ole ainutkertainen nimi\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi lukita\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi avata\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: tiedostoa %s ei voi lukita\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: varjotietuetta ryhmälle %s ei voi päivittää\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: ryhmän %s tietuetta ei voi päivittää\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi lukita\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: varjoryhmää %s ei voi poistaa\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi päivittää\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: ryhmätiedostoa ei voi päivittää\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi poistaa\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "tuntematon UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "tuntematon GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: ryhmää %s ei ole olemassa\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: virheellinen käyttäjätunnus \"%s\"\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: tiedostoa /etc/passwd ei voi lukita.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: tiedostoa /etc/passwd ei voi lukita.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: tiedostoa /etc/passwd ei voi lukita.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: tiedostoa /etc/passwd ei voi lukita.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: tiedostoja ei voi avata\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: virhe päivitettäessä tiedostoja\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: rivi %d: käyttäjää %s ei löydy\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: salasanatietuetta %s ei voi päivittää\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: passwd-tiedostoa ei voi lukita\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: passwd-tiedostoa ei voi avata\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: varjotietuetta %s ei voi poistaa\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: varjotiedostoa ei voi päivittää\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi päivittää\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: käyttäjän %s tietuetta ei voi päivittää\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi poistaa\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: tuntematon GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: tuntematon ryhmä %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: muisti loppui funktiossa update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: salasanatiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi uudelleenkirjoittaa\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi lukita\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: varjosalasanatiedostoa ei voi avata\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: virhe lukittaessa ryhmätiedostoa\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: virhe avattaessa ryhmätiedostoa\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: virhe lukittaessa varjoryhmätiedostoa\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: virhe avattaessa varjoryhmätiedostoa\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: virhe lisättäessä uutta salasanatietuetta\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: virhe lisättäessä uutta varjosalasanatietuetta\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: varoitus: CREATE_HOME ei tuettu, käytä -m sen sijaan.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: virhe päivitettäessä ryhmätietuetta\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: virhe päivitettäessä ryhmätietuetta\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: ryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: varjoryhmätiedostoa ei voi avata\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: virhe poistettaessa salasanatietuetta\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: virhe poistettaessa varjosalasanatietuetta\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: käyttäjää %s ei ole olemassa\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: virhe lisättäessä uutta ryhmätietuetta\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu ei ole ainutkertainen\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: virhe muutettaessa salasanatietuetta\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: virhe poistettaessa salasanatietuetta\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: virhe poistettaessa varjosalasanatietuetta\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: ei saa ainutkertaista GID:iä\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " päätteeltä \"%.100s\" osoitteesta \"%.200s\""
+
+#~ msgid " on '%.100s'"
+#~ msgstr " päätteeltä \"%.100s\""
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: rivi %d: UID:tä ei voi luoda\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: nimi %s ei ole ainutkertainen\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Käyttö: chgpasswd [valitsimet]\n"
+#~ "\n"
+#~ "Valitsimet:\n"
+#~ "  -e, --encrypted\tAnnetut salasanat ovat salakirjoitettuja\n"
+#~ "  -h, --help\t\tNäytä tämä ohje ja lopeta\n"
+#~ "  -m, --md5\t\tKäytä MD5:tä eikä DES:iä kun annetut salasanat\n"
+#~ "\t\t\teivät ole salakirjoitettuja\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Ei salasanatiedosto\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Pahoittelen.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Pahoittelen, käyttäjän %s salasanaa ei voi vaihtaa vielä.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Pahoittelen."
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644 (file)
index 0000000..f534984
Binary files /dev/null and b/po/fr.gmo differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644 (file)
index 0000000..009d113
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,2384 @@
+# translation of fr.po to French
+# shadow fr.po
+# Copyright (C) 1999, 2004, 2005, 2006, 2009 Free Software Foundation, Inc.
+# Patches, suggestions, etc welcome.
+#
+# Vincent Renardias <vincent@ldsol.com>, 1999, 2005.
+# Jean-Luc Coulon <jean.luc.coulon@wanadoo.fr>, 2005, 2006, 2008.
+# Christian Perrier <bubulle@debian.org>, 2005, 2006, 2008, 2009.
+# Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2009-05-22 15:52+0200\n"
+"Last-Translator: Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+"X-Generator: Lokalize 0.3\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Il existe plusieurs entrées nommées « %s » dans %s. Veuillez corriger cela "
+"avec pwck ou grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+"la méthode de chiffrement n'est pas prise en compte par libcrypt ? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+"erreur de configuration - évaluation impossible de la valeur de %s : « %s »"
+
+msgid "Could not allocate space for config info.\n"
+msgstr ""
+"Impossible d'allouer l'espace pour l'information sur la configuration.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"erreur de configuration - élément « %s » inconnu (avertissez "
+"l'administrateur)\n"
+
+msgid "Password: "
+msgstr "Mot de passe : "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Mot de passe de %s : "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Attention : le groupe %s est inconnu\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Attention : il y a trop de groupes\n"
+
+msgid "Your password has expired."
+msgstr "Votre mot de passe est arrivé en fin de validité."
+
+msgid "Your password is inactive."
+msgstr "Votre mot de passe est désactivé."
+
+msgid "Your login has expired."
+msgstr "Votre compte est arrivé en fin de validité."
+
+msgid "  Contact the system administrator."
+msgstr "  Contactez l'administrateur du système."
+
+msgid "  Choose a new password."
+msgstr "  Choisissez un nouveau mot de passe."
+
+msgid "You must change your password."
+msgstr "Vous devez changer votre mot de passe."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Votre mot de passe arrivera en fin de validité dans %ld jours.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Votre mot de passe arrivera demain en fin de validité."
+
+msgid "Your password will expire today."
+msgstr "Votre mot de passe arrive aujourd'hui en fin de validité."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Impossible de créer l'interface d'audit - abandon.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr ""
+"Impossible de modifier le propriétaire ou le tty d'entrée standard : %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s : échec du déverrouillage de %s\n"
+
+msgid "Environment overflow\n"
+msgstr "Débordement de l'environnement\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Vous ne pouvez pas changer $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d échec depuis la dernière connexion.\n"
+"Le dernier échec était le %s sur %s.\n"
+msgstr[1] ""
+"%d échecs depuis la dernière connexion.\n"
+"Le dernier échec était le %s sur %s.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr ""
+"%s : impossible d'obtenir un identifiant d'utilisateur (UID) unique (plus "
+"d'UID disponible)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+"%s : impossible d'obtenir un identifiant de groupe (GID) unique (plus de GID "
+"disponible)\n"
+
+#, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr ""
+"%s : impossible d'obtenir un identifiant d'utilisateur (UID) unique (plus "
+"d'UID disponible)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+"%s : impossible d'obtenir un identifiant d'utilisateur (UID) unique (plus "
+"d'UID disponible)\n"
+
+msgid "Too many logins.\n"
+msgstr "Trop de connexions.\n"
+
+msgid "You have new mail."
+msgstr "Vous avez des nouveaux messages."
+
+msgid "No mail."
+msgstr "Pas de courrier."
+
+msgid "You have mail."
+msgstr "Vous avez du courrier."
+
+msgid "no change"
+msgstr "pas de modification"
+
+msgid "a palindrome"
+msgstr "palindrome"
+
+msgid "case changes only"
+msgstr "changement de casse uniquement"
+
+msgid "too similar"
+msgstr "trop semblable au précédent"
+
+msgid "too simple"
+msgstr "trop simple"
+
+msgid "rotated"
+msgstr "anagramme"
+
+msgid "too short"
+msgstr "trop court"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Mot de passe incorrect : %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd : échec de pam_start(), erreur %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd : %s\n"
+
+#
+msgid "passwd: password unchanged\n"
+msgstr "Mot de passe non changé\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd : le mot de passe a été mis à jour avec succès\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Mot de passe incorrect pour %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Valeur d'ENCRYPT_METHOD non valable : « %s ».\n"
+"Utilisation de DES par défaut.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Impossible d'aller dans le répertoire « %s »\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Pas de répertoire, connexion avec HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Impossible d'exécuter %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Répertoire racine « %s » incorrect\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Impossible de changer le répertoire racine en « %s »\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Impossible de déterminer le nom de votre tty."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s : plus de mémoire\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "échec de malloc(%d)\n"
+
+msgid "No"
+msgstr "Non"
+
+#
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Syntaxe : chage [options] [IDENTIFIANT]\n"
+"\n"
+"Options :\n"
+"  -d, --lastday DERNIER_JOUR    fixer la dernière modification du mot de\n"
+"                                passe à DERNIER_JOUR\n"
+"  -E, --expiredate FIN_VALIDITÉ fixer la date de fin de validité du compte\n"
+"                                à FIN_VALIDITÉ\n"
+"  -h, --help                    afficher ce message d'aide et quitter\n"
+"  -I, --inactive INACTIF        fixer la durée d'inactivité du mot de\n"
+"                                passe après sa fin de validité à INACTIF\n"
+"  -l, --list                    afficher les informations concernant la\n"
+"                                validité du compte au cours du temps\n"
+"  -m, --mindays JOURS_MIN       fixer le nombre minimum de jours avant la\n"
+"                                modification du mot de passe à JOURS_MIN\n"
+"  -M, --maxdays JOURS_MAX       fixer le nombre maximum de jours avant la\n"
+"                                modification du mot de passe à JOURS_MAX\n"
+"  -W, --warndays JOURS_AVERT    fixer le nombre de jours d'avertissement\n"
+"                                de fin de validité à JOURS_AVERT\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée"
+
+msgid "Minimum Password Age"
+msgstr "Durée minimale de validité du mot de passe"
+
+msgid "Maximum Password Age"
+msgstr "Durée maximale de validité du mot de passe"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Dernier changement de mot de passe (AAAA-MM-JJ)"
+
+msgid "Password Expiration Warning"
+msgstr "Avertissement de fin de validité du mot de passe"
+
+msgid "Password Inactive"
+msgstr "Mot de passe désactivé"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Date de fin de validité du compte (AAAA-MM-JJ)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Dernier changement de mot de passe\t\t\t\t\t: "
+
+msgid "never"
+msgstr "jamais"
+
+msgid "password must be changed"
+msgstr "Le mot de passe doit être changé"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Fin de validité du mot de passe\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Mot de passe désactivé\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Fin de validité du compte\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr ""
+"Nombre minimum de jours entre les changements de mot de passe\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr ""
+"Nombre maximum de jours entre les changements de mot de passe\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+"Nombre de jours d'avertissement avant la fin de validité du mot de passe\t: %"
+"ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s : date « %s » non valable\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s : argument numérique « %s » incorrect\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s : ne pas mélanger « l » avec les autres indicateurs\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s : permission refusée.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s : Impossible de déterminer votre nom d'utilisateur.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s : échec de la méthode d'authentification PAM\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s : impossible de verrouiller %s ; veuillez réessayer plus tard.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s : impossible d'ouvrir %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s : échec lors de l'écriture des modifications vers %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s : échec lors de la préparation de la nouvelle entrée de %s « %s »\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s : le fichier des mots de passe cachés /etc/shadow n'existe pas\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s : échec lors de l'abandon des privilèges (%s)\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s : l'utilisateur « %s » n'existe pas dans %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Changement des informations sur la limite de validité pour %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s : erreur lors de la modification des champs\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Syntaxe : %s [-f nom_complet] [-r num_bureau] [-w tel_bureau]\n"
+"\t[-h tel_perso] [-o autre] [utilisateur]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Syntaxe : %s [-f nom_complet] [-r num_bureau] [-w tel_bureau] [-h "
+"tel_maison]\n"
+
+msgid "Full Name"
+msgstr "Nom complet"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s : %s\n"
+
+msgid "Room Number"
+msgstr "N° de bureau"
+
+msgid "Work Phone"
+msgstr "Téléphone professionnel"
+
+msgid "Home Phone"
+msgstr "Téléphone personnel"
+
+msgid "Other"
+msgstr "Autre"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Impossible de devenir superutilisateur.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s : nom contenant des caractères non ASCII : %s\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s : nom incorrect : « %s »\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s : le bureau comporte des caractères non ASCII : %s\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s : numéro de bureau non valable : « %s »\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s : téléphone professionnel non valable : « %s »\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s : téléphone personnel non valable : « %s »\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s : « %s » contient des caractères non ASCII\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s : « %s » contient des caractères incorrects\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s : l'utilisateur %s n'existe pas\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s : impossible de changer l'utilisateur « %s » sur le client NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s : « %s » est le maître NIS pour ce client.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Modification des informations relatives à l'utilisateur %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s : champs trop longs\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Syntaxe : %s [options]\n"
+"\n"
+"Options :\n"
+"  -c, --crypt-method            méthode de chiffrement\n"
+"                                (parmi %s)\n"
+"  -e, --encrypted               les mots de passe fournis sont chiffrés\n"
+"  -h, --help                    afficher ce message d'aide et quitter\n"
+"  -m, --md5                     utiliser le chiffrement MD5 pour les mots\n"
+"                                de passe\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds              nombre de passes SHA pour les algorithmes \n"
+"                                de chiffrement SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s : l'indicateur %s n'est autorisé qu'avec l'indicateur %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s : les indicateurs -c, -e et -m s'excluent mutuellement\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s : méthode de chiffrement non gérée : %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s : ligne %d : ligne trop longue\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s : ligne %d : nouveau mot de passe manquant\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s : ligne %d : le groupe %s n'existe pas\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+"%s : ligne %d : impossible de préparer la nouvelle entrée de %s « %s »\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s : erreur détectée ; modifications ignorées\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilisation : %s [options]\n"
+"\n"
+"Options:\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+"  -c, --crypt-method            méthode de chiffrement\n"
+"                               (parmi %s)\n"
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+"  -e, --encrypted               les mots de passe fournis sont chiffrés\n"
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+"  -h, --help                    afficher ce message d'aide et quitter\n"
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -m, --md5                     utiliser le chiffrement MD5 pour les mots\n"
+"                                de passe\n"
+
+# , c-format
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s : (ligne %d, utilisateur %s) mot de passe non modifié\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s : ligne %d : l'utilisateur « %s » n'existe pas\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Syntaxe : chsh [options] [IDENTIFIANT]\n"
+"\n"
+"Options :\n"
+"  -h, --help                    afficher cette page d'aide et quitter\n"
+"  -s, --shell INTERPRÉTEUR      nouvel interpréteur de commandes initial\n"
+"                                pour le compte de l'utilisateur\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Interpréteur de commandes initial"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Vous ne pouvez pas changer l'interpréteur de commandes de %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Changement d'interpréteur de commandes initial pour %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s : entrée non valable : %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s : %s  n'est pas un interpréteur de commandes valable.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Syntaxe : expiry {-f|-c}\n"
+
+#, fuzzy
+#| msgid "  -h, --help                    display this help message and exit\n"
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+"  -h, --help                    afficher ce message d'aide et quitter\n"
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr "  -r, --system                  créer des comptes système\n"
+
+#, fuzzy
+#| msgid "  -h, --help                    display this help message and exit\n"
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+"  -h, --help                    afficher ce message d'aide et quitter\n"
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+# , c-format
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+"failog : impossible d'obtenir l'entrée pour l'identifiant d'utilisateur "
+"(UID) %lu\n"
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Identifiant Échecs   Maximum Dernier                 Sur\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus restants]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds verrou]"
+
+# , c-format
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+"faillog : impossible de réinitialiser le compteur d'échecs de l'identifiant "
+"d'utilisateur (UID) %lu\n"
+
+# , c-format
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+"faillog : impossible de définir la valeur maximum pour l'identifiant "
+"d'utilisateur (UID) %lu\n"
+
+# , c-format
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+"faillog : échec de positionnement de locktime pour l'identifiant "
+"d'utilisateur %lu\n"
+
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "lastlog : utilisateur inconnu ou plage inconnue : %s\n"
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "failog : impossible d'ouvrir le %s : %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr "faillog : impossible d'obtenir la taille de %s : %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+"Syntaxe : %s [option] GROUPE\n"
+"\n"
+"Options :\n"
+"  -a, --add UTILISATEUR           ajouter l'UTILISATEUR au GROUPE\n"
+"  -d, --delete UTILISATEUR        supprimer l'UTILISATEUR du GROUPE\n"
+"  -r, --remove-password           supprimer le mot de passe du GROUPE\n"
+"  -R, --restrict                  restreindre à ses membres l'accès au\n"
+"                                  GROUPE\n"
+"  -M, --members UTILISATEUR, ...  définir la liste des membres du GROUPE\n"
+"%s\n"
+"\n"
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"  -A, --administrators ADMIN,...\n"
+"                                définir la liste des administrateurs "
+"du                                 GROUPE\n"
+"À l'exception des options A et M, les options ne peuvent pas être "
+"combinées.\n"
+
+#
+msgid "The options cannot be combined.\n"
+msgstr "Les options ne peuvent pas être combinées.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr ""
+"%s : mots de passe cachés dans /etc/gshadow nécessaires avec l'option -A\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s : le groupe %s n'existe pas dans %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s : échec lors de la fermeture de %s qui est en lecture seule\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Changement du mot de passe pour le groupe %s\n"
+
+msgid "New Password: "
+msgstr "Nouveau mot de passe : "
+
+msgid "Re-enter new password: "
+msgstr "Nouveau mot de passe (pour vérification) : "
+
+msgid "They don't match; try again"
+msgstr "Les mots de passe ne correspondent pas. Essayez à nouveau"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s : réessayez plus tard\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Ajout de l'utilisateur %s au groupe %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Retrait de l'utilisateur %s du groupe %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s : l'utilisateur %s n'est pas membre de %s\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s : n'est pas un tty\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: %s [options]\n"
+#| "\n"
+#| "Options:\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilisation : %s [options]\n"
+"\n"
+"Options:\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -m, --md5                     encrypt the clear text password using\n"
+#| "                                the MD5 algorithm\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -m, --md5                     utiliser le chiffrement MD5 pour les mots\n"
+"                                de passe\n"
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr "  -r, --system                  créer des comptes système\n"
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds              nombre de passes SHA pour les algorithmes \n"
+"                                de chiffrement SHA*\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -r, --system                  create a system account\n"
+msgstr "  -r, --system                  créer des comptes système\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s : %s n'est pas un nom de groupe valable\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s : identifiant de groupe « %s » non valable\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s : -K exige CLÉ=VALEUR\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s : le groupe « %s » existe déjà\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s : l'identifiant de groupe (GID) « %lu » existe déjà\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Syntaxe : groupdel groupe\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s : impossible de supprimer l'entrée « %s » de %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+"%s : impossible de supprimer le groupe primaire de l'utilisateur « %s »\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s : le groupe « %s » n'existe pas\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s : le groupe « %s » est un groupe NIS\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s : %s est le maître NIS\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s : l'utilisateur « %s » est déjà memebre de « %s »\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s : mémoire insuffisante. Impossible de mettre à jour %s.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+"Syntaxe : groupmems [options] [action]\n"
+"\n"
+"Options :\n"
+"  -g, --group nom-du-groupe     modifier le nom-du-groupe plutôt que les\n"
+"                                utilisateurs du groupe\n"
+"                                (administrateur uniquement)\n"
+"\n"
+"Actions :\n"
+"  -a, --add username            ajouter un nom d'utilisateur aux membres\n"
+"                                du groupe\n"
+"  -d, --delete username         supprimer un nom d'utilisateur aux membres\n"
+"                                du groupe\n"
+"  -p, --purge                   purger tous les membres du groupe\n"
+"  -l, --list                    afficher la liste des membres du groupe\n"
+"\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s : votre nom de groupe ne correspond pas à votre nom d'utilisateur\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s : seul l'administrateur peut utiliser l'option -g/--group\n"
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr "  -r, --system                  créer des comptes système\n"
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s : nom de groupe « %s » non valable\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s : le groupe %s est un groupe NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s : utilisateur %s inconnu\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Syntaxe : %s [-r] [-s] [groupe [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Syntaxe : %s [-r] [-s] [groupe]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s : -s et -r sont incompatibles\n"
+
+msgid "invalid group file entry"
+msgstr "entrée non valable dans le fichier /etc/group"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "effacer la ligne « %s » ? "
+
+msgid "duplicate group entry"
+msgstr "entrée de groupe dupliquée"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nom de groupe « %s » non valable\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "identifiant de groupe « %lu » non valable\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "groupe %s : pas d'utilisateur %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "effacer le membre « %s » ? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "aucune entrée correspondante dans le fichier de groupe %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "Faut-il ajouter le groupe « %s » dans %s ? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"le groupe %s a une entrée dans %s, mais le champ du mot de passe dans %s ne "
+"contient pas « x »\n"
+
+msgid "invalid shadow group file entry"
+msgstr ""
+"entrée non valable dans le fichier des mots de passe cachés /etc/gshadow"
+
+msgid "duplicate shadow group entry"
+msgstr "entrée dupliquée dans le fichier des mots de passe cachés /etc/gshadow"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "%s dans /etc/gshadow : aucun administrateur %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "effacer le membre administrateur « %s » ? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "%s dans /etc/gshadow : aucun utilisateur %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s : les fichiers ont été mis à jour\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s : aucun changement\n"
+
+#
+msgid "Usage: grpconv\n"
+msgstr "Syntaxe : grpconv\n"
+
+#
+msgid "Usage: grpunconv\n"
+msgstr "Syntaxe : grpunconv\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s : impossible de supprimer %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Syntaxe : id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Syntaxe : id\n"
+
+msgid " groups="
+msgstr " groupes="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Syntaxe : lastlog [options]\n"
+"\n"
+"Options :\n"
+"   b, --before JOURS            n'afficher que les enregistrements de\n"
+"                                « lastlog » plus anciens que JOURS\n"
+"  -h, --help                    afficher ce message d'aide et quitter\n"
+"  -t, --time NB_JOURS           afficher uniquement les enregistrements de\n"
+"                                « lastlog » plus récents que NB_JOURS jours\n"
+"  -u, --user LOGIN              afficher l'enregistrement « lastlog » pour\n"
+"                                l'utilisateur dont le compte est LOGIN\n"
+"\n"
+
+# , c-format
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+"lastlog : échec de l'obtention de l'entrée pour l'identifiant d'utilisateur "
+"(UID) %lu\n"
+
+msgid "Username         Port     From             Latest"
+msgstr "Utilisateur      Port     Venant de        Dernière"
+
+msgid "Username                Port     Latest"
+msgstr "Utilisateur             Port     Dernière"
+
+msgid "**Never logged in**"
+msgstr "**Jamais connecté**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog : paramètre inattendu : %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr "lastlog : impossible d'obtenir la talle de %s : %s\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Syntaxe : %s [-p] [nom]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h hôte] [-f nom]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r hôte\n"
+
+# , c-format
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+"erreur de configuration - évaluation impossible de la valeur de %s : « %d »"
+
+msgid "Invalid login time"
+msgstr "Heure de connexion non valable"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Système fermé pour maintenance"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Déconnexion court-circuitée -- accès superutilisateur autorisé]."
+
+# , c-format
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Tentative de connexion : délai de %u secondes dépassé.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+"%s : fonctionnement impossible sans être réellement le superutilisateur\n"
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Pas d'entrée utmp. Vous devez exécuter « login » depuis l'interpréteur de "
+"commandes de plus bas niveau (« sh »)"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login : échec de PAM, abandon : %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login : "
+
+msgid "login: "
+msgstr "login : "
+
+# , c-format
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Dépassement du nombre maximum de tentatives (%u)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login : interruption requise par PAM\n"
+
+msgid "Login incorrect"
+msgstr "Identifiant de connexion incorrect"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login : "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s : échec lors du clonage (« forking ») : %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "échec de TIOCSCTTY sur %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"Attention : identifiant de connexion réactivé après une désactivation "
+"temporaire."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Dernière connexion : le %s sur %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Dernière connexion : le %.19s sur %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " à partir de %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"Dépassement de temps lors de la connexion\n"
+"\n"
+
+#
+msgid "Usage: logoutd\n"
+msgstr "Syntaxe : logoutd\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Syntaxe : newgrp [-] [groupe]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Syntaxe : sg groupe [[-c] commande]\n"
+
+msgid "Invalid password.\n"
+msgstr "Mot de passe non valable.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s : échec lors du clonage (« forking ») : %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s : l'identifiant de groupe (GID) « %lu » n'existe pas\n"
+
+msgid "too many groups\n"
+msgstr "trop de groupes\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr "  -r, --system                  créer des comptes système\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+"%s : le groupe « %s » est un groupe caché, mais il n'existe pas dans /etc/"
+"group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s : identifiant d'utilisateur « %s » non valable\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s : nom d'utilisateur « %s » non valable\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s : ligne %d : ligne non valable\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s : impossible de mettre à jour l'entrée pour l'utilisateur %s\n"
+"(il ne se trouve pas dans la base de données des mots de passe)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s : ligne %d : impossible de créer l'utilisateur\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s : ligne %d : impossible de créer le groupe\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s : ligne %d : l'utilisateur « %s » n'existe pas dans %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s : ligne %d : impossible de mettre le mot de passe à jour\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s : ligne %d : échec de mkdir %s : %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s : ligne %d : échec de chown %s : %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s : ligne %d : impossible de mettre l'entrée à jour\n"
+
+#
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Syntaxe : passwd [options] [IDENTIFIANT]\n"
+"\n"
+"Options :\n"
+"  -a, --all                     afficher l'état des mots de passe de tous\n"
+"                                les comptes\n"
+"  -d, --delete                  supprimer le mot de passe du compte indiqué\n"
+"  -e, --expire                  forcer la fin de validité du compte indiqué\n"
+"  -h, --help                    afficher ce message d'aide et quitter\n"
+"  -k, --keep-tokens             ne changer le mot de passe que s'il\n"
+"                                est arrivé en fin de validité\n"
+"  -i, --inactive INACTIF        fixer la durée d'inactivation du mot de\n"
+"                                passe après sa fin de validité à INACTIF\n"
+"  -l, --lock                    bloquer le compte indiqué\n"
+"  -n, --mindays JOURS_MIN       fixer le nombre minimum de jours avant le\n"
+"                                changement de mot de passe à JOURS_MIN\n"
+"  -q, --quiet                   mode silencieux\n"
+"  -r, --repository DÉPÔT        changer le mot de passe dans le dépôt DÉPÔT\n"
+"  -S, --status                  afficher l'état du mot de passe du compte\n"
+"                                indiqué\n"
+"  -u, --unlock                  déverrouiller le compte indiqué\n"
+"  -w, --warndays JOURS_AVERT    fixer le nombre de jours d'avertissement\n"
+"                                de fin de validité à JOURS_AVERT\n"
+"  -x, --maxdays JOURS_MAX       fixer le nombre maximum de jours avant le\n"
+"                                changement de mot de passe à JOURS_MAX\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Ancien mot de passe : "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Entrez le nouveau mot de passe (%d caractères minimum)\n"
+"Utilisez une combinaison de lettres majuscules, minuscules et de chiffres.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Entrez le nouveau mot de passe (minimum de %d, maximum de %d\n"
+"caractères). Utilisez une combinaison de lettres majuscules, minuscules\n"
+"et de chiffres.\n"
+
+msgid "New password: "
+msgstr "Nouveau mot de passe : "
+
+msgid "Try again."
+msgstr "Réessayez..."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Attention : mot de passe trop simple (entrez-le à nouveau pour l'utiliser\n"
+"quand même)."
+
+msgid "They don't match; try again.\n"
+msgstr "Mots de passe différents, recommencez...\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Le mot de passe de %s ne peut être changé.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Le mot de passe de %s ne peut être changé maintenant.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s : le déverrouillage du mot de passe produirait un compte sans mot de "
+"passe.\n"
+"Vous devriez définir un mot de passe avec usermod -p pour déverrouiller le "
+"mot de passe de ce compte utilisateur.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s : le dépôt %s n'est pas géré\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr "%s : %s n'est pas autorisé à modifier le mot de passe de %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s : Vous ne pouvez pas afficher ou modifier les informations de mot de "
+"passe de %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Changement du mot de passe de %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Le mot de passe pour %s est inchangé.\n"
+
+# , c-format
+#, c-format
+msgid "%s: password changed.\n"
+msgstr "%s : mot de passe changé.\n"
+
+# , c-format
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "%s : expiration du mot de passe modifiée.\n"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Syntaxe : %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s : -s et -r sont incompatibles\n"
+
+msgid "invalid password file entry"
+msgstr "entrée non valable dans le fichier des mots de passe"
+
+msgid "duplicate password entry"
+msgstr "entrée dupliquée dans le fichier des mots de passe"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nom d'utilisateur « %s » non valable\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "identifiant d'utilisateur « %lu » non valable\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "utilisateur %s : aucun groupe %lu\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "utilisateur %s : le répertoire « %s » n'existe pas\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "utilisateur %s : le programme « %s » n'existe pas\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "aucune entrée correspondante dans le fichier des mots de passe %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "ajouter l'utilisateur « %s » dans %s ? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+"l'utilisateur %s a une entrée dans %s, mais le champ du mot de passe dans %s "
+"ne contient pas « x »\n"
+
+msgid "invalid shadow password file entry"
+msgstr ""
+"entrée non valable dans le fichier des mots de passe cachés /etc/shadow"
+
+msgid "duplicate shadow password entry"
+msgstr "entrée dupliquée dans le fichier des mots de passe cachés /etc/shadow"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "utilisateur %s : changement du dernier mot de passe à venir\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s : impossible de trier les entrées de %s\n"
+
+#
+msgid "Usage: pwconv\n"
+msgstr "Syntaxe : pwconv\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s : impossible de changer le mode de %s en 0600\n"
+
+#
+msgid "Usage: pwunconv\n"
+msgstr "Syntaxe : pwunconv\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Accès à « su » à partir de ce compte REFUSÉ.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Authentification par mot de passe court-circuitée.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Entrez votre PROPRE mot de passe pour vous authentifier.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s : %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Syntaxe : su [options] [IDENTIFIANT]\n"
+"\n"
+"Options :\n"
+"  -c, --command COMMANDE        passer la commande COMMANDE à\n"
+"                                l'interpréteur de commande appelé ;\n"
+"  -h, --help                    afficher ce message d'aide et quitter ;\n"
+"  -, -l, --login                utiliser un interpréteur de commandes\n"
+"                                initial (« login shell ») ;\n"
+"  -m, -p,\n"
+"  --preserve-environment        ne pas réinitialiser les variables\n"
+"                                d'environnement et conserver le même\n"
+"                                interpréteur de commandes ;\n"
+"  -s, --shell SHELL             utiliser SHELL comme interpréteur de\n"
+"                                commandes à la place de celui défini\n"
+"                                par défaut dans le fichier passwd.\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s : doit être lancé à partir d'un terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s : pam_start : erreur %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "identifiant inconnu : %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Vous n'êtes pas autorisé à utiliser « su » %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Entrez votre propre mot de passe)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s : %s\n"
+"(Ignoré)\n"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s : échec de l'authentification\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s : vous n'êtes pas autorisé à utiliser « su » cet instant\n"
+
+msgid "No shell\n"
+msgstr "Pas d'interpréteur de commandes\n"
+
+msgid "No password file"
+msgstr "Pas de fichier des mots de passe"
+
+msgid "TIOCSCTTY failed"
+msgstr "échec de TIOCSCTTY"
+
+msgid "No password entry for 'root'"
+msgstr "Pas de mot de passe pour « root »"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Tapez Ctrl+D pour démarrer normalement\n"
+"(ou donnez le mot de passe du superutilisateur pour la maintenance du "
+"système) :"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Entrée dans le mode de maintenance du système"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s : la configuration %s dans %s sera ignorée\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s : impossible de créer le nouveau fichier des valeurs par défaut\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s : impossible d'ouvrir le nouveau fichier des valeurs par défaut\n"
+
+# , c-format
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s : ligne trop longue dans %s : %s..."
+
+# , c-format
+#, c-format
+msgid "%s: rename: %s: %s"
+msgstr "%s : renomme : %s : %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s : le groupe « %s » est un groupe NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s : trop de groupes spécifiés (max %d).\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: %s [options]\n"
+#| "\n"
+#| "Options:\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+"Utilisation : %s [options]\n"
+"\n"
+"Options:\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds              nombre de passes SHA pour les algorithmes \n"
+"                                de chiffrement SHA*\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              nombre de passes SHA pour les algorithmes \n"
+"                                de chiffrement SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              nombre de passes SHA pour les algorithmes \n"
+"                                de chiffrement SHA*\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds              nombre de passes SHA pour les algorithmes \n"
+"                                de chiffrement SHA*\n"
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr "  -r, --system                  créer des comptes système\n"
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds              nombre de passes SHA pour les algorithmes \n"
+"                                de chiffrement SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -m, --md5                     encrypt the clear text password using\n"
+#| "                                the MD5 algorithm\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -m, --md5                     utiliser le chiffrement MD5 pour les mots\n"
+"                                de passe\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr "  -r, --system                  créer des comptes système\n"
+
+#, fuzzy
+#| msgid "  -r, --system                  create system accounts\n"
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr "  -r, --system                  créer des comptes système\n"
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+"  -Z, --selinux-user SEUSER     utiliser un SEUSER particulier pour la\n"
+"                                correspondance de l'utilisateur SELinux\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s : répertoire de base non valable « %s »\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s : commentaire « %s » non valable\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s : répertoire personnel « %s » non valable\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s : mots de passe cachés nécessaires avec -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s : mots de passe cachés nécessaires avec -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s : champ « %s » non valable\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s : interpréteur de commandes « %s » non valable\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s : -Z nécessite un noyau avec l'option SELinux active\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s : les options %s et %s sont en conflit\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+"%s : impossible de réinitialiser l'entrée faillog de l'identifiant "
+"d'utilisateur (UID) %lu : %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+"%s : impossible de réinitialiser l'entrée lastlog de l'identifiant "
+"d'utilisateur (UID) %lu : %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s : attention, la correspondance (mapping) du nom d'utilisateur %s avec %s "
+"l'utilisateur SELinux a échoué.\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s : impossible de créer le répertoire %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Création de la boîte à lettres"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Le groupe « mail » est introuvable. Création de la boîte à lettre avec le "
+"mode 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Définition des permissions de la boîte à lettres"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s : l'utilisateur « %s » existe déjà\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s : le groupe %s existe - si vous voulez ajouter cet utilisateur à ce "
+"groupe, utilisez -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s : impossible de créer l'utilisateur\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s : l'identifiant d'utilisateur (UID) %lu n'est pas unique\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s : impossible de créer le groupe\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s : attention, le répertoire personnel existe déjà.\n"
+"Aucun fichier du répertoire « skels » n'y sera copié.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Syntaxe : userdel [options] IDENTIFIANT\n"
+"\n"
+"Options :\n"
+"  -f, --force                   forcer la suppression des fichiers, même\n"
+"                                s'ils n'appartiennent pas à l'utilisateur\n"
+"  -h, --help                    afficher cette page d'aide et quitter\n"
+"  -r, --remove                  supprimer le répertoire personnel et le\n"
+"                                spool du courrier\n"
+"\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s : le groupe %s est le groupe primaire d'un autre utilisateur et il ne "
+"sera pas supprimé.\n"
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s : attention : impossible de supprimer %s : %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s : %s n'appartient pas à %s, non supprimé\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s : le compte %s est un compte NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s : l'utilisateur %s est connecté\n"
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s : le répertoire personnel de %s (%s) n'a pas été trouvé\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s : répertoire %s non supprimé (cela supprimerait le répertoire personnel "
+"de %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s : erreur lors de l'effacement du répertoire %s\n"
+
+#, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Syntaxe : usermod [options] IDENTIFIANT\n"
+"\n"
+"Options :\n"
+"  -c, --comment COMMENT         définir une nouvelle valeur pour le champ\n"
+"                                « GECOS »\n"
+"  -d, --home REP_PERS           définir un nouveau répertoire personnel\n"
+"                                pour le compte de l'utilisateur\n"
+"  -e, --expiredate DATE_EXPIR   fixer la date de fin de validité du compte\n"
+"                                à DATE_EXPIR\n"
+"  -f, --inactive INACTIF        fixer la durée d'inactivité du mot de passe\n"
+"                                après sa fin de validité à INACTIF\n"
+"  -g, --gid GROUPE              forcer l'utilisation de GROUPE comme\n"
+"                                 nouveau groupe primaire\n"
+"  -G, --groups GROUPES          définir une nouvelle liste de groupes\n"
+"                                supplémentaires\n"
+"  -a, --append                  ajouter l'utilisateur aux GROUPES\n"
+"                                supplémentaires mentionnés par l'option -G\n"
+"                                sans supprimer l 'utilisateur des autres\n"
+"                                groupes\n"
+"  -h, --help                    afficher ce message d'aide et quitter\n"
+"  -l, --login IDENTIFIANT       définir un nouveau nom pour le compte\n"
+"  -L, --lock                    bloquer le compte de l'utilisateur\n"
+"  -m, --move-home               déplacer le contenu du répertoire personnel\n"
+"                                vers le nouvel emplacement (à n'utiliser\n"
+"                                qu'avec -d)\n"
+"  -o, --non-unique              autoriser l'utilisation d'un identifiant\n"
+"                                d'utilisateur (UID) dupliqué (non unique)\n"
+"  -p, --password MOT_DE_PASSE   utiliser un mot de passe chiffré pour le\n"
+"                                nouveau mot de passe\n"
+"  -s, --shell INTERPRÉTEUR      définir un nouvel interpréteur de commandes\n"
+"                                initial pour le compte de l'utilisateur\n"
+"  -u, --uid UID                 définir un nouvel identifiant (UID) pour le\n"
+"                                compte de l'utilisateur\n"
+"  -U, --unlock                  déverrouiller le compte de l'utilisateur\n"
+"%s\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+"  -Z, --selinux-user            nouvelle corespondance de l'utilisateur "
+"SELinux pour le compte d'utilisateur\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s : le déverrouillage du mot de passe de l'utilisateur produirait un compte "
+"sans mot de passe.\n"
+"Vous devriez définir un mot de passe avec usermod -p pour déverrouiller le "
+"mot de passe de cet utilisateur.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s : l'utilisateur « %s » existe déjà dans %s\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s : aucun indicateur n'a été précisé\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s : les mots de passe cachés sont nécessaires avec -e ou -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s : les indicateurs -L, -p et -U s'excluent mutuellement\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s : l'identifiant d'utilisateur (UID) « %lu » existe déjà\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s : le répertoire %s existe\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s : impossible de créer %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s : impossible de changer le propriétaire de %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s : attention, échec de la suppression totale du répertoire personnel %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s : impossible de renommer le répertoire %s en %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s : impossible de copier l'entrée lastlog de l'utilisateur %lu vers "
+"l'utilisateur %lu : %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s : impossible de copier l'entrée faillog de l'utilisateur %lu vers "
+"l'utilisateur %lu : %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s : attention : %s n'appartient pas à %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "échec du changement de propriétaire de la boîte à lettres"
+
+msgid "failed to rename mailbox"
+msgstr "échec du changement de nom de la boîte à lettres"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Vous avez modifié %s.\n"
+"Pour des raisons de cohérence, vous devriez modifier %s.\n"
+"Veuillez utiliser la commande « %s » pour le faire.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Syntaxe : vipw [options]\n"
+"\n"
+"Options :\n"
+"  -g, --group                   modifier la base de données des groupes\n"
+"                                (/etc/group)\n"
+"  -h, --help                    afficher ce message d'aide et quitter\n"
+"  -p, --passwd                  modifier la base de données des comptes\n"
+"                                (/etc/passwd)\n"
+"  -q, --quiet                   mode silencieux\n"
+"  -s, --shadow                  modifier la base de données des mots de\n"
+"                                passe cachés (« shadow passwords ») :\n"
+"                                shadow ou gshadow\n"
+"\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s : échec lors de la suppression de %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s : %s est inchangé\n"
+
+msgid "Couldn't get file context"
+msgstr "Impossible d'obtenir le contexte du fichier"
+
+msgid "setfscreatecon () failed"
+msgstr "échec de setfscreatecon ()"
+
+msgid "Couldn't lock file"
+msgstr "Impossible de verrouiller le fichier"
+
+msgid "Couldn't make backup"
+msgstr "Impossible d'effectuer une sauvegarde"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+"%s : impossible de restaurer %s : %s (vos modifications sont dans %s)\n"
+
+#
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Syntaxe : faillog [options]\n"
+#~ "\n"
+#~ "Options :\n"
+#~ "  -a, --all                     afficher les enregistrements « faillog »\n"
+#~ "                                pour tous les utilisateurs\n"
+#~ "  -h, --help                    afficher ce message d'aide et quitter\n"
+#~ "  -l, --lock-time SEC           après une connexion refusée, verrouiller "
+#~ "le\n"
+#~ "                                compte pendant SEC secondes\n"
+#~ "  -m, --maximum MAX             positionner les compteurs de connexions\n"
+#~ "                                refusées à MAX\n"
+#~ "  -r, --reset                   remettre à zéro les compteurs de "
+#~ "connexions\n"
+#~ "                                refusées\n"
+#~ "  -t, --time NB_JOURS           afficher les échecs de connexions datant "
+#~ "de\n"
+#~ "                                moins de NB_JOURS jours\n"
+#~ "  -u, --user LOGIN              afficher l'enregistrement « faillog » ou\n"
+#~ "                                gérer les compteurs et les limites (si\n"
+#~ "                                utilisé conjointement avec les options -"
+#~ "r,\n"
+#~ "                                -m ou -l) d'échecs uniquement pour\n"
+#~ "                                l'utilisateur dont le compte est LOGIN\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Syntaxe : groupadd [option] GROUPE\n"
+#~ "\n"
+#~ "Options :\n"
+#~ "  -f, --force                   forcer la sortie avec un code de retour "
+#~ "de\n"
+#~ "                                succès si le groupe indiqué existe déjà\n"
+#~ "  -g, --gid GID                 utiliser GID pour le nouveau groupe\n"
+#~ "  -h, --help                    afficher ce message d'aide et quitter\n"
+#~ "  -K, --key CLÉ=VALEUR          remplacer les valeurs par défaut de\n"
+#~ "                                /etc/login.defs\n"
+#~ "  -o, --non-unique              permettre de créer un groupe avec un GID\n"
+#~ "                                dupliqué (non unique)\n"
+#~ "  -p, --password MOT_DE_PASSE   utiliser un mot de passe chiffré pour le\n"
+#~ "                                nouveau groupe\n"
+#~ "  -r, --system                  créer un compte système\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Syntaxe : groupmod [option] GROUPE\n"
+#~ "\n"
+#~ "Options :\n"
+#~ "  -g, --gid GID                 forcer l'utilisation par le GROUPE du\n"
+#~ "                                nouveau GID\n"
+#~ "  -h, --help                    afficher ce message d'aide et quitter\n"
+#~ "  -n, --new-name NOUVEAU_GROUPE forcer l'utilisation par le GROUPE du\n"
+#~ "                                NOUVEAU_GROUPE\n"
+#~ "  -o, --non-unique              permettre l'utilisation par le GROUPE\n"
+#~ "                                d'un groupe avec un GID dupliqué\n"
+#~ "                                (non unique)\n"
+#~ "  -p, --password MOT_DE_PASSE   utiliser un mot de passe chiffré comme\n"
+#~ "                                nouveau mot de passe\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Syntaxe : useradd [options] IDENTIFIANT\n"
+#~ "\n"
+#~ "Options :\n"
+#~ "  -b, --base-dir REP_BASE       répertoire de base pour le répertoire\n"
+#~ "                                personnel du compte du nouvel "
+#~ "utilisateur\n"
+#~ "  -c, --comment COMMENT         définir le champ « GECOS » du compte du\n"
+#~ "                                nouvel utilisateur\n"
+#~ "  -d, --home-dir REP_PERS       répertoire personnel pour le compte du\n"
+#~ "                                nouvel utilisateur\n"
+#~ "  -D, --defaults                afficher ou enregistrer la configuration\n"
+#~ "                                par défaut modifiée de « useradd »\n"
+#~ "  -e, --expiredate DATE_EXPIR   fixer la date de fin de validité du\n"
+#~ "                                compte à DATE_EXPIR\n"
+#~ "  -f, --inactive INACTIF        fixer la durée d'inactivité du mot de "
+#~ "passe\n"
+#~ "                                après sa fin de validité à INACTIF\n"
+#~ "  -g, --gid GROUPE              forcer l'utilisation de GROUPE pour le\n"
+#~ "                                compte du nouvel utilisateur\n"
+#~ "  -G, --groups GROUPES          liste des GROUPES supplémentaires pour "
+#~ "le\n"
+#~ "                                compte du nouvel utilisateur\n"
+#~ "  -h, --help                    afficher ce message d'aide et quitter\n"
+#~ "  -k, --skel REP_SQEL           définir un autre répertoire « skel »\n"
+#~ "  -K, --key CLÉ=VALEUR          remplacer les valeurs par défaut de\n"
+#~ "                                /etc/login.defs\n"
+#~ "  -l, --no-log-init             ne pas ajouter l'utilisateur aux bases "
+#~ "de\n"
+#~ "                                données lastlog et faillog\n"
+#~ "  -m, --create-home             créer le répertoire personnel pour le\n"
+#~ "                                compte du nouvel utilisateur\n"
+#~ "  -M, --no-create-home          ne pas créer de répertoire personnel "
+#~ "pour\n"
+#~ "                                le compte du nouvel utilisateur "
+#~ "(remplace\n"
+#~ "                                /etc/login.defs)\n"
+#~ "  -N, --no-user-group           ne pas créer de groupe de même nom que\n"
+#~ "                                l'utilisateur\n"
+#~ "  -o, --non-unique              autoriser la création d'un utilisateur\n"
+#~ "                                avec un identifiant d'utilisateur (UID)\n"
+#~ "                                dupliqué (non unique)\n"
+#~ "  -p, --password MOT_DE_PASSE   utiliser un mot de passe chiffré pour le\n"
+#~ "                                compte du nouvel utilisateur\n"
+#~ "  -r, --system                  créer un nouveau compte système\n"
+#~ "  -s, --shell INTERPRÉTEUR      interpréteur de commandes initial pour "
+#~ "le\n"
+#~ "                                compte du nouvel utilisateur\n"
+#~ "  -u, --uid UID                 forcer l'utilisation de l'identifiant\n"
+#~ "                                « UID » pour le compte du nouvel "
+#~ "utilisateur\n"
+#~ "  -U, --user-group              créer un groupe ayant le même nom que\n"
+#~ "                                l'utilisateur\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Syntaxe : %s [options] [entrée]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            méthode de chiffrement (parmi %s)\n"
+#~ "  -r, --system                  créer des comptes système\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Le mot de passe est configuré pour une validité limitée."
diff --git a/po/gl.gmo b/po/gl.gmo
new file mode 100644 (file)
index 0000000..029efbc
Binary files /dev/null and b/po/gl.gmo differ
diff --git a/po/gl.po b/po/gl.po
new file mode 100644 (file)
index 0000000..cc38b0c
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,2613 @@
+# Galician translation of shadow
+# Copyright (C) 1999, 2004, 2005 Free Software Foundation, Inc.
+# Jacobo Tarrio <jtarrio@debian.org>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2006-07-18 23:27+0200\n"
+"Last-Translator: Jacobo Tarrio <jtarrio@debian.org>\n"
+"Language-Team: Galician <trasno@ceu.fi.udc.es>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n!=1;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Non se puido reservar espacio para a información de configuración.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"erro de configuración - elemento \"%s\" descoñecido (avise ao "
+"administrador)\n"
+
+msgid "Password: "
+msgstr "Contrasinal: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Contrasinal de %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Aviso: grupo %s descoñecido\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Aviso: hai grupos de máis\n"
+
+msgid "Your password has expired."
+msgstr "O seu contrasinal caducou."
+
+msgid "Your password is inactive."
+msgstr "O seu contrasinal está inactivo."
+
+msgid "Your login has expired."
+msgstr "O seu identificador de usuario caducou."
+
+msgid "  Contact the system administrator."
+msgstr " Póñase en contacto co administrador do sistema."
+
+msgid "  Choose a new password."
+msgstr " Escolla un novo contrasinal."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "O seu contrasinal ha caducar en %ld días.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "O seu contrasinal ha caducar mañá."
+
+msgid "Your password will expire today."
+msgstr "O seu contrasinal ha caducar hoxe."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Non se puido cambiar o tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: campos longos de máis\n"
+
+msgid "Environment overflow\n"
+msgstr "Desbordamento nas variables de ambiente\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Non pode cambiar $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d fallo desde a última entrada.\n"
+"O último foi o %s en %s.\n"
+msgstr[1] ""
+"%d fallos desde a última entrada.\n"
+"O último foi o %s en %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: non se pode obter un UID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: non se pode obter un GID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: non se pode obter un UID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: non se pode obter un UID único\n"
+
+msgid "Too many logins.\n"
+msgstr "Entrou demasiadas veces.\n"
+
+msgid "You have new mail."
+msgstr "Ten novo correo."
+
+msgid "No mail."
+msgstr "Non hai correo."
+
+msgid "You have mail."
+msgstr "Ten correo."
+
+msgid "no change"
+msgstr "ningún cambio"
+
+msgid "a palindrome"
+msgstr "un palíndromo"
+
+msgid "case changes only"
+msgstr "só cambia maiúsculas/minúsculas"
+
+msgid "too similar"
+msgstr "semellantes de máis"
+
+msgid "too simple"
+msgstr "simple de máis"
+
+msgid "rotated"
+msgstr "rotado"
+
+msgid "too short"
+msgstr "curto de máis"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Contrasinal non válido: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: a chamada a pam_start() fallou, erro %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Cambiouse o contrasinal."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: o contrasinal actualizouse con éxito\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Contrasinal incorrecto para %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Non se puido cambiar a \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Non hai un directorio, éntrase con HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Non se pode executar %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Directorio raíz \"%s\" non válido\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Non se pode cambiar o directorio raíz a \"%s\"\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Non se pode determinar o nome do seu tty."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: memoria esgotada\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "A chamada a malloc(%d) fallou\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Non\n"
+
+#, fuzzy
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Emprego: chage [opcións] [USUARIO]\n"
+"\n"
+"Opcións:\n"
+"  -d, --lastday ÚLTIMO\t\tfixa o último cambio de\tcontrasinal ao\n"
+"\t\t\t\tdía ÚLTIMO\n"
+"  -E, --expiredate CADUCA\tfixa a data de caducidade ao día CADUCA\n"
+"  -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+"  -I, --inactive INACTIVO\tfixa o tempo de inactividade do contrasinal\n"
+"\t\t\t\ttrala caducidade a INACTIVO\n"
+"  -l, --list\t\t\tamosa a información de caducidade das contas\n"
+"  -m, --mindays MÍNIMO\t\tfixa o número mínimo de días antes do\n"
+"\t\t\t\tcambio de contrasinal a MÍNIMO\n"
+"  -M, --maxdays MÁXIMO\t\tfixa o número máximo de días antes do\n"
+"\t\t\t\tcambio de contrasinal a MÁXIMO\n"
+"  -W, --warndays AVISO\t\tfixa o número de días de aviso de caducidade\n"
+"\t\t\t\ta AVISO\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Introduza o novo valor ou prema Intro para o valor por defecto"
+
+msgid "Minimum Password Age"
+msgstr "Idade mínima do contrasinal"
+
+msgid "Maximum Password Age"
+msgstr "Idade máxima do contrasinal"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Último cambio de contrasinal (AAAA-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Aviso de caducidade de contrasinal"
+
+msgid "Password Inactive"
+msgstr "Contrasinal inactivo"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data de caducidade da conta (AAAA-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Último cambio de contrasinal\t\t\t\t: "
+
+msgid "never"
+msgstr "nunca"
+
+msgid "password must be changed"
+msgstr "debe cambiarse o contrasinal"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "O contrasinal caduca\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Contrasinal inactivo\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "A conta caduca\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Número mínimo de días entre cambios de contrasinal\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Número máximo de días entre cambios de contrasinal\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Número de días de aviso antes de que caduque o contrasinal: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: data \"%s\" non válida\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argumento numérico \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: non inclúa \"l\" con outros indicadores\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Permiso denegado.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Non se pode determinar o seu nome de usuario.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: a autenticación con PAM fallou\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: non se pode bloquear ficheiros, volva tentalo despois\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: non se pode abrir o ficheiro %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: fallo ao lanzar o proceso: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: o ficheiro de contrasinais shadow non está presente\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: o usuario %s non existe\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "A cambiar a información de caducidade de %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: erro ao cambiar os campos\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Emprego: %s [-f nome] [-r num_cuarto] [-w tlf_traballo]\n"
+"\t[-h tlf_casa] [-o outro] [usuario]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Emprego: %s [-f nome] [-r num_cuarto] [-w tlf_traballo] [-h tlf_casa]\n"
+
+msgid "Full Name"
+msgstr "Nome completo"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Número de cuarto"
+
+msgid "Work Phone"
+msgstr "Teléfono do traballo"
+
+msgid "Home Phone"
+msgstr "Teléfono da casa"
+
+msgid "Other"
+msgstr "Outro"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Non se pode cambiar o ID a root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nome non válido: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: número de cuarto non válido: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: teléfono do traballo non válido: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: teléfono da casa non válido: \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" contén caracteres non válidos\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" contén caracteres non válidos\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: o usuario %s non existe\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: non se pode cambiar o usuario \"%s\" no cliente NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: \"%s\" é o mestre NIS deste cliente.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "A cambiar a información de usuario de %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: campos longos de máis\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Emprego: chpasswd [opcións]\n"
+"\n"
+"Opcións:\n"
+"  -e, --encrypted\tos contrasinais fornecidos xa están cifrados\n"
+"  -h, --help\t\tamosa esta mensaxe de axuda e sae\n"
+"  -m, --md5\t\tempregar cifrado MD5 no canto de DES se os\n"
+"\t\t\tcontrasinais fornecidos non están cifrados\n"
+"\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: o modificador -a SÓ se admite co modificador -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: liña %d: liña longa de máis\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: liña %d: falla o novo contrasinal\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: o grupo %s non existe\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: liña %d: non se pode actualizar a entrada\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: detectouse un erro, ignóranse os cambios\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: o usuario %s non existe\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: o usuario %s non existe\n"
+
+#, fuzzy
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Emprego: chsh [opcións] [USUARIO]\n"
+"\n"
+"Opcións:\n"
+"  -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+"  -s, --shell INTÉRPRETE\tnovo intérprete de ordes da conta de usuario\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Intérprete de ordes"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Non pode cambiar o intérprete de ordes de %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "A cambiar o intérprete de ordes de %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Entrada non válida: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s non é un intérprete de ordes válido.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Emprego: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Usuario     Fallos   Máximo  Último                   O\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [fallan %lds]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [bloqueado %lds]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Usuario descoñecido: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: non se pode abrir o ficheiro %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Non se pode cambiar o contrasinal de %s.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: precísase de contrasinais de grupo shadow para -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: o grupo %s non existe\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: fallo ao lanzar o proceso: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "A cambiar o contrasinal do grupo %s\n"
+
+msgid "New Password: "
+msgstr "Novo contrasinal: "
+
+msgid "Re-enter new password: "
+msgstr "Volva introducir o novo contrasinal: "
+
+msgid "They don't match; try again"
+msgstr "Non coinciden, volva tentalo"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Volva tentalo despois\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "A engadir o usuario %s ao grupo %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "A eliminar o usuario %s do grupo %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: o usuario %s non existe\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Non é un tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s non é un nome de grupo válido\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "nome de grupo \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K precisa de CLAVE=VALOR\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: o grupo %s existe\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "O membro xa existe\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Emprego: groupdel grupo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: non se pode cambiar o nome do directorio %s a %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: non se pode cambiar o usuario \"%s\" no cliente NIS.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: o grupo %s non existe\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: o grupo \"%s\" é un grupo NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s é o mestre NIS\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: o usuario %s é un usuario NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: esgotouse a memoria en update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "nome de grupo \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: o grupo %s é un grupo NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: usuario %s descoñecido\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Emprego: %s [-r] [-s] [grupo [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Emprego: %s [-r] [-s] [grupo]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s e -r son incompatibles\n"
+
+msgid "invalid group file entry"
+msgstr "entrada do ficheiro de grupos non válida"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "¿borrar a liña \"%s\"? "
+
+msgid "duplicate group entry"
+msgstr "entrada de grupo duplicada"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nome de grupo \"%s\" non válido\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "nome de grupo \"%s\" non válido\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupo %s: non existe o usuario %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "¿borrar o membro \"%s\"? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "non hai unha entrada do ficheiro de grupos que coincida en %s\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "¿engadir o grupo \"%s\" en %s? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "entrada do ficheiro de grupos shadow non válida"
+
+msgid "duplicate shadow group entry"
+msgstr "entrada de grupo shadow duplicada"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grupo shadow %s: non existe o usuario administrativo %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "¿borrar o membro administrativo \"%s\"? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grupo shadow %s: non existe o usuario %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: actualizáronse os ficheiros\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: non hai cambios\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Emprego: groupdel grupo\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Emprego: groupdel grupo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: non se pode actualizar o ficheiro %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Emprego: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Emprego: id\n"
+
+msgid " groups="
+msgstr " grupos="
+
+#, fuzzy
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Emprego: lastlog [opcións]\n"
+"\n"
+"Opcións:\n"
+"  -b, --before DÍAS\tamosa só os rexistros de última entrada de máis\n"
+"\t\t\tde DÍAS días\n"
+"  -h, --help\t\tamosa esta mensaxe de axuda e sae\n"
+"  -t, --time DÍAS\tamosa só os rexistros de última entrada de menos\n"
+"\t\t\tde DÍAS días\n"
+"  -u, --user USUARIO\tamosa o rexistro de última entrada do USUARIO\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Usuario          Porto    Desde            Última"
+
+msgid "Username                Port     Latest"
+msgstr "Usuario                 Porto    Última"
+
+msgid "**Never logged in**"
+msgstr "**Nunca entrou**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: non se esperaba un argumento: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Emprego: %s [-p] [nome]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "         %s [-p] [-h servidor] [-f nome]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "         %s [-p] -r servidor\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Hora de entrada non válida"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"O sistema está pechado por mantemento rutinario"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Omitida a desconexión -- permítese a entrada coma root.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"A entrada caducou despois de %d segundos.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Non hai unha entrada en utmp. Debe executar \"login\" dende o \"sh\" de "
+"nivel máis baixo"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Fallo en PAM, a abortar: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Superouse o número máximo de intentos (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: cancelación solicitada por PAM\n"
+
+msgid "Login incorrect"
+msgstr "Entrada incorrecta"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fallo ao lanzar o proceso: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Aviso: vólvese permitir a entrada despois do bloqueo temporal."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Última entrada: %s en %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Última entrada: %.19s en %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " desde %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"superouse o tempo de entrada\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Emprego: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Emprego: newgrp [-] [grupo]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Emprego: sg grupo [[-c] orde]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Contrasinal antigo: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fallo ao lanzar o proceso: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: o usuario %s non existe\n"
+
+msgid "too many groups\n"
+msgstr "hai grupos de máis\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: o grupo %s non existe\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: nome de usuario \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: nome de usuario \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: liña %d: liña non válida\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: non se pode actualizar a entrada do usuario %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: liña %d: non se pode crear o GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: liña %d: non se pode crear o GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: o usuario %s non existe\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: liña %d: non se pode actualizar o contrasinal\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: liña %d: a chamada a mkdir fallou\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: liña %d: a chamada a chown fallou\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: liña %d: non se pode actualizar a entrada\n"
+
+#, fuzzy
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Emprego: passwd [opcións] [USUARIO]\n"
+"\n"
+"Opcións:\n"
+"  -a, --all\t\t\tinforma do estado dos contrasinais en tódalas contas\n"
+"  -d, --delete\t\t\telimina o contrasinal da conta indicada\n"
+"  -e, --expire\t\t\tfai caducar o contrasinal da conta indicada\n"
+"  -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+"  -k, --keep-tokens\t\tcambia o contrasinal só se caducou\n"
+"  -i, --inactive INACT\t\tcambia o tempo de inactividade trala caducidade\n"
+"\t\t\t\tda conta a INACT\n"
+"  -l, --lock\t\t\tbloquea a conta indicada\n"
+"  -n, --mindays MÍN\tfixa o número mínimo de días antes do cambio de\n"
+"\t\t\t\tcontrasinal a MÍN\n"
+"  -q, --quiet\t\t\tmodo silencioso\n"
+"  -r, --repository REP\t\tcambia o contrasinal do repositorio REP\n"
+"  -S, --status\t\t\tinforma do estado do contrasinal da conta indicada\n"
+"  -u, --unlock\t\t\tdesbloquea a conta indicada\n"
+"  -w, --warndays AVISO\tfixa o tempo de aviso antes da caducidade a AVISO\n"
+"\t\t\t\tdías\n"
+"  -x, --maxdays MÁX\t\tfixa o número máximo de días antes do cambio de\n"
+"\t\t\t\tcontrasinal a MÁX\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Contrasinal antigo: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduza o novo contrasinal (mínimo de %d, máximo de %d caracteres)\n"
+"Empregue unha combinación de maiúsculas, minúsculas e números.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduza o novo contrasinal (mínimo de %d, máximo de %d caracteres)\n"
+"Empregue unha combinación de maiúsculas, minúsculas e números.\n"
+
+msgid "New password: "
+msgstr "Novo contrasinal: "
+
+msgid "Try again."
+msgstr "Volva tentalo."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Aviso: contrasinal feble (introdúzao outra vez para o empregar igualmente)."
+
+msgid "They don't match; try again.\n"
+msgstr "Non coinciden; volva tentalo.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Non se pode cambiar o contrasinal de %s.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Non se pode cambiar o contrasinal de %s.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: non se soporta o repositorio %s\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Non pode ver ou modificar a información de contrasinal de %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "A cambiar o contrasinal de %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Non se cambiou o contrasinal de %s\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Cambiouse o contrasinal."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Aviso de caducidade de contrasinal"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Emprego: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s e -r son incompatibles\n"
+
+msgid "invalid password file entry"
+msgstr "entrada do ficheiro de contrasinais non válida"
+
+msgid "duplicate password entry"
+msgstr "entrada de contrasinal duplicada"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nome de usuario \"%s\" non válido\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "nome de usuario \"%s\" non válido\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "usuario %s: non existe o grupo %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "usuario %s: o directorio %s non existe\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "usuario %s: o programa %s non existe\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "non hai unha entrada do ficheiro de contrasinais que coincida en %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "¿engadir o usuario \"%s\" en %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "entrada do ficheiro de contrasinais shadow non válida"
+
+msgid "duplicate shadow password entry"
+msgstr "entrada de contrasinal shadow duplicada"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "usuario %s: último cambio de contrasinal no futuro\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: non se pode abrir o ficheiro %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Emprego: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Emprego: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "O acceso a su para esa conta está DENEGADO.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Omitiuse a autenticación por contrasinal.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Introduza O SEU PROPIO contrasinal para autenticación.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Emprego: su [opcións] [USUARIO]\n"
+"\n"
+"Opcións:\n"
+"  -c, --command ORDE\t\tpasa a ORDE ao intérprete de ordes executado\n"
+"  -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+"  -, -l, --login\t\tfai que o intérprete de ordes sexa de \"login\"\n"
+"  -m, -p,\n"
+"  --preserve-environment\tnon reinicia as variables de ambiente e\n"
+"\t\t\t\tmantén o mesmo intérprete de ordes\n"
+"  -s, --shell INTÉRPRETE\temprega o INTÉRPRETE no canto do normal\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: débese executar dende un terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start(): erro %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Id. descoñecido: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Non está autorizado para facer su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Introduza o seu propio contrasinal)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignórase)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: a autenticación con PAM fallou\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Non está autorizado para facer su %s\n"
+
+msgid "No shell\n"
+msgstr "Non hai un intérprete de ordes\n"
+
+msgid "No password file"
+msgstr "Non é un ficheiro de contrasinais"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Non hai unha entrada de contrasinal para \"root\""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Escriba control-d para seguir co inicio normal,\n"
+"(ou escriba o contrasinal de root para o mantemento do sistema):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "A entrar no modo de mantemento do sistema"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: non se pode crear o novo ficheiro de valores por defecto\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: non se pode abrir o novo ficheiro de valores por defecto\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: liña %d: a chamada a chown fallou\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: rename: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: o grupo \"%s\" é un grupo NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: especificáronse grupos de máis (máximo %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Emprego: %s [entrada]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: directorio base \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: comentario \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: directorio inicial \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: precísase de contrasinais shadow para -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: precísase de contrasinais shadow para -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: campo \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: intérprete de ordes \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: non se pode crear o directorio %s\n"
+
+msgid "Creating mailbox file"
+msgstr "A crear o ficheiro da caixa do correo"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Non se atopou o grupo \"mail\". Hase crear a caixa do correo do usuario co "
+"modo 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "A estabrecer os permisos do ficheiro da caixa do correo"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: o usuario %s existe\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: o grupo %s existe - se quere engadir este usuario a este grupo, empregue "
+"-g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: non se pode crear %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: o UID %u non é único\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: non se pode crear %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: aviso: o directorio inicial xa existe.\n"
+"Non se copia nel ningún ficheiro do directorio skel.\n"
+
+#, fuzzy
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Emprego: userdel [opcións] USUARIO\n"
+"\n"
+"Opcións:\n"
+"  -f, --force\t\t\ttamén elimina os ficheiros se non son do usuario\n"
+"  -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+"  -r, --remove\t\t\telimina o directorio inicial e o correo\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Non se pode eliminar o grupo %s, que é o grupo primario de outro "
+"usuario.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: aviso: non se pode eliminar "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s non pertence a %s, non se elimina\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: o usuario %s é un usuario NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: o usuario %s está conectado\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: directorio inicial \"%s\" non válido\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: non se elimina o directorio %s (había eliminar o directorio inicial do "
+"usuario %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: erro ao borrar o directorio %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Emprego: usermod [opcións] USUARIO\n"
+"\n"
+"Opcións:\n"
+"  -a, --append GRUPO\t\tengade o usuario ao GRUPO suplementario\n"
+"\t\t\t\t(emprégueo só con -G)\n"
+"  -c, --comment COMENTARIO\tnovo valor do campo GECOS\n"
+"  -d, --home DIR_INICIAL\tnovo directorio inicial da conta de usuario\n"
+"  -e, --expiredate DATA_CAD\tfixa a data de caducidade da conta a DATA_CAD\n"
+"  -f, --inactive INACTIVA\tfixa o tempo de inactividade do contrasinal\n"
+"\t\t\t\ttrala caducidade a INACTIVA\n"
+"  -g, --gid GRUPO\t\tusa o GRUPO coma novo grupo primario\n"
+"  -G, --groups GRUPOS\t\tnova lista de GRUPOS suplementarios\n"
+"  -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+"  -l, --login NOVO_USUARIO\tnovo valor do nome de usuario\n"
+"  -L, --lock\t\t\tbloquea a conta do usuario\n"
+"  -m, --move-home\t\tmove o contido do directorio inicial á nova\n"
+"\t\t\t\tlocalización (emprégueo só con -d)\n"
+"  -o, --non-unique\t\tpermite empregar UIDs duplicados (non únicos)\n"
+"  -p, --password CONTRASINAL\temprega o constrasinal cifrado coma novo\n"
+"\t\t\t\tcontrasinal\n"
+"  -s, --shell INTÉRPRETE\tnovo intérprete de ordes da conta de usuario\n"
+"  -u, --uid UID\t\t\tnovo UID para a conta de usuario\n"
+"  -U, --unlock\t\t\tdesbloquea a conta do usuario\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: o usuario %s existe\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: non se forneceu ningún modificador\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: precísase de contrasinais de shadow para -e e -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "O membro xa existe\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: o directorio %s existe\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: non se pode crear %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: non se pode cambiar o propietario de %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: aviso: non se puido eliminar completamente o vello directorio inicial %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: non se pode cambiar o nome do directorio %s a %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: aviso: %s non pertence a %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "non se puido cambiar o propietario da caixa do correo"
+
+msgid "failed to rename mailbox"
+msgstr "non se puido cambiar o nome da caixa do correo"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Emprego: vipw [opcións]\n"
+"\n"
+"Opcións:\n"
+"  -g, --group\t\tedita a base de datos de grupos\n"
+"  -h, --help\t\tamosa esta mensaxe de axuda e sae\n"
+"  -p, --passwd\t\tedita a base de datos de contrasinais\n"
+"  -q, --quiet\t\tmodo silencioso\n"
+"  -s, --shadow\t\tedita a base de datos shadow ou gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: non se puido deixar os privilexios (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s non ten cambios\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Non se puido bloquear o ficheiro"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Non se puido bloquear o ficheiro"
+
+msgid "Couldn't make backup"
+msgstr "Non se puido facer unha copia de seguridade"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: non se pode restaurar %s: %s (os seus cambios están en %s)\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: faillog [opcións]\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ "  -a, --all\t\tamosa os rexistros de entradas fallidas\tpara\n"
+#~ "\t\t\ttódolos usuarios\n"
+#~ "  -h, --help\t\tamosa esta mensaxe de axuda e sae\n"
+#~ "  -l, --lock-time SEG\tdespois dunha entrada fallida bloquea a conta\n"
+#~ "\t\t\tdurante SEG segundos\n"
+#~ "  -m, --maximum MÁX\tfixa os contadores de máximas entradas fallidas a "
+#~ "MÁX\n"
+#~ "  -r, --reset\t\treinicia os contadores de entradas fallidas\n"
+#~ "  -t, --time DÍAS\tamosa os rexistros de entradas fallidas máis\n"
+#~ "\t\t\trecentes que DÍAS\n"
+#~ "  -u, --user USUARIO\tamosa o rexistro de entradas fallidas ou mantén\n"
+#~ "\t\t\tos contadores de fallos e límites (se se emprega coas\n"
+#~ "\t\t\topcións -r, -m ou -l) só do USUARIO\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: groupadd [opcións] GRUPO\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ "  -f, --force\t\tforza a saída con éxito se o grupo indicado xa existe\n"
+#~ "  -g, --gid GID\t\temprega o GID para o novo grupo\n"
+#~ "  -h, --help\t\tamosa esta mensaxe de axuda e sae\n"
+#~ "  -K, --key CLAVE=VALOR\tignora os valores de /etc/login.defs\n"
+#~ "  -o, --non-unique\tpermite crear un grupo cun GID duplicado (non único)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: groupmod [opcións] GRUPO\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ "  -g, --gid GID\t\t\temprega o GID para o novo grupo\n"
+#~ "  -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+#~ "  -n, --new-name NOVO_GRUPO\tcambia o nome do GRUPO por NOVO_GRUPO\n"
+#~ "  -o, --non-unique\t\tpermite crear un grupo cun GID duplicado\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Emprego: useradd [opcións] USUARIO\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ "  -b, --base-dir DIR_BASE\tdirectorio base para o directorio inicial\n"
+#~ "\t\t\t\tda nova conta de usuario\n"
+#~ "  -c, --comment COMENTARIO\tfixa o campo GECOS da nova conta de usuario\n"
+#~ "  -d, --home-dir DIR_INICIAL\tdirectorio inicial da nova conta de "
+#~ "usuario\n"
+#~ "  -D, --defaults\t\tamosa ou grave a configuración modificada\n"
+#~ "\t\t\t\tde useradd\n"
+#~ "  -e, --expiredate DATA_CAD\tfixa a data de caducidade da conta a "
+#~ "DATA_CAD\n"
+#~ "  -f, --inactive INACTIVA\tfixa o tempo de inactividade do contrasinal\n"
+#~ "\t\t\t\ttrala caducidade a INACTIVA\n"
+#~ "  -g, --gid GRUPO\t\tusa o GRUPO para a nova conta de usuario\n"
+#~ "  -G, --groups GRUPOS\t\tlista de grupos suplementarios para a nova\n"
+#~ "\t\t\t\tconta de usuario\n"
+#~ "  -h, --help\t\t\tamosa esta mensaxe de axuda e sae\n"
+#~ "  -k, --skel DIR_SKEL\t\tespecifica un directorio \"skel\" alternativo\n"
+#~ "  -K, --key CLAVE=VALOR\t\tomite os valores por defecto de /etc/login."
+#~ "defs\n"
+#~ "  -m, --create-home\t\tcrea o directorio inicial para a nova conta\n"
+#~ "\t\t\t\tde usuario\n"
+#~ "  -o, --non-unique\t\tpermite crear usuarios con UIDs duplicados\n"
+#~ "\t\t\t\t(non únicos)\n"
+#~ "  -p, --password CONTRASINAL\temprega o CONTRASINAL cifrado para a nova\n"
+#~ "\t\t\t\tconta de usuario\n"
+#~ "  -s, --shell INTÉRPRETE\to intérprete de ordes da nova conta de usuario\n"
+#~ "  -u, --uid UID\t\t\tusa o UID para a nova conta de usuario\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Vai caducar o contrasinal."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: non se pode actualizar o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: non se pode actualizar o ficheiro de contrasinais shadow\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNome completo: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNúmero de cuarto: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTeléfono do traballo: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTeléfono da casa: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr ""
+#~ "Non se pode bloquear o ficheiro de contrasinais; volva tentalo despois.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Non se pode abrir o ficheiro de contrasinais.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: non se atopou %s en /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Erro ao actualizar a entrada de contrasinal.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Non se poden gravar os cambios no ficheiro de contrasinais.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Non se pode desbloquear o ficheiro de contrasinais.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de grupos\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de grupos\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: erro ao actualizar o ficheiro shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: erro ao actualizar a entrada do grupo\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: liña %d: grupo %s descoñecido\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: liña %d: non se pode actualizar a entrada\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro shadow\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: erro ao actualizar o ficheiro shadow\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: erro ao actualizar o ficheiro de contrasinais\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: liña %d: usuario %s descoñecido\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: liña %d: non se pode actualizar a entrada de contrasinal\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: usuario descoñecido\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Usuario descoñecido: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Emprego: %s [-r|-R] grupo\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "         %s [-a usuario] grupo\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "         %s [-d usuario] grupo\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "         %s [-A usuario,...] [-M usuario,...] grupo\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "         %s [-M usuario,...] grupo\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: non se pode obter un bloqueo\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: non se pode obter o bloqueo de shadow\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de shadow\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: non se pode desbloquear o ficheiro\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: non se pode actualizar a entrada\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: non se pode actualizar a entrada de shadow\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "grupo descoñecido: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro shadow\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "¿Quen é vostede?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: membro %s descoñecido\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: erro ao engadir a entrada do novo grupo\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de grupos\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de grupos\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de grupos\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: o GID %u non é único\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: erro ao eliminar a entrada do grupo\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: erro ao eliminar a entrada do grupo shadow\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: non se pode eliminar o grupo primario do usuario.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Non se atopou o membro a eliminar\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr "Emprego: groupmems -a usuario | -d usuario | -D | -l [-g grupo]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Só o administrador pode engadir membros a distintos grupos\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Precísase de acceso a grupos\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Non é o propietario primario do grupo actual\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "A autenticación con PAM fallou para\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Non se pode bloquear o ficheiro de grupos\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Non se pode abrir o ficheiro de grupos\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Non se pode pechar o ficheiro de grupos\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: non se atopou %s en /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u non é un GID único\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s non é un nome único\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de contrasinais\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de contrasinais\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de contrasinais\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: non se pode actualizar a entrada shadow para %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: non se pode actualizar a entrada do grupo %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: non se pode eliminar o grupo shadow %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: non se pode actualizar o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: non se pode actualizar o ficheiro de grupos\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: non se pode borrar o ficheiro de grupos shadow\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "UID descoñecido: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "GID descoñecido: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: o grupo %s non existe\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: o usuario %s non existe\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: nome de usuario \"%s\" non válido\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: non se pode bloquear /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: non se pode bloquear /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: non se pode bloquear /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: non se pode bloquear /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: non se pode abrir ficheiros\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: erro ao actualizar os ficheiros\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: liña %d: non se pode atopar o usuario %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: non se pode actualizar a entrada de contrasinal para %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: non se pode eliminar a entrada shadow para %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: non se pode actualizar o ficheiro shadow\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: non se pode actualizar o ficheiro de contrasinais\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: non se pode actualizar a entrada do usuario %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: non se pode borrar o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: GID %s descoñecido\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: grupo %s descoñecido\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: esgotouse a memoria en update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de contrasinais\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: non se pode rescribir o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: non se pode bloquear o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de contrasinais shadow\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: erro ao bloquear o ficheiro de grupos\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: erro ao abrir o ficheiro de grupos\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: erro ao bloquear o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: erro ao abrir o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: erro ao engadir a nova entrada de contrasinal\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: erro ao engadir a nova entrada de contrasinal shadow\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: aviso: CREATE_HOME non está soportado, empregue -m no seu canto.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: erro ao actualizar a entrada do grupo\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: erro ao actualizar a entrada do grupo\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de grupos\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: non se pode abrir o ficheiro de grupos shadow\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: erro ao eliminar a entrada de contrasinal\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: erro ao eliminar a entrada de contrasinal shadow\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: o usuario %s non existe\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: erro ao engadir a entrada do novo grupo\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: o uid %lu non é único\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: erro ao cambiar a entrada de contrasinal\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: erro ao eliminar a entrada de contrasinal\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: erro ao eliminar a entrada de contrasinal shadow\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: non se pode obter un GID único\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " en \"%.100s\" desde \"%.200s\""
+
+#~ msgid " on '%.100s'"
+#~ msgstr " en \"%.100s\""
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: liña %d: non se pode crear o UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: o nome %s non é único\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Emprego: chgpasswd [opcións]\n"
+#~ "\n"
+#~ "Opcións:\n"
+#~ "  -e, --encrypted\tos contrasinais fornecidos xa están cifrados\n"
+#~ "  -h, --help\t\tamosa esta mensaxe de axuda e sae\n"
+#~ "  -m, --md5\t\tempregar cifrado MD5 no canto de DES se os\n"
+#~ "\t\t\tcontrasinais fornecidos non están cifrados\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Non é un ficheiro de contrasinais\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Perdón.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Aínda non se pode cambiar o contrasinal de %s.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Perdón."
diff --git a/po/he.gmo b/po/he.gmo
new file mode 100644 (file)
index 0000000..b55e20c
Binary files /dev/null and b/po/he.gmo differ
diff --git a/po/he.po b/po/he.po
new file mode 100644 (file)
index 0000000..619b5ee
--- /dev/null
+++ b/po/he.po
@@ -0,0 +1,1928 @@
+# Hebrew translation of shadow.
+# Copyright (C) 2004 THE shadow'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the shadow package.
+# Lior Kaplan <webmaster@guides.co.il>, 2004.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2004-07-21 23:59+0300\n"
+"Last-Translator: Lior Kaplan <webmaster@guides.co.il>\n"
+"Language-Team: Hebrew <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "לא יכול להקצות מקום בשביל מידע על הקונפיגורציה.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "שגיאת הגדרות - רכיב לא ידוע '%s' (הודע למנהל)\n"
+
+msgid "Password: "
+msgstr "סיסמה: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "הסיסמה של %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "אזהרה: קבוצה לא מוכרת %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "אזהרה: יותר מידי קבוצות\n"
+
+msgid "Your password has expired."
+msgstr "תוקף הסיסמה שלך פג."
+
+msgid "Your password is inactive."
+msgstr "הסיסמה שלך אינה פעילה."
+
+msgid "Your login has expired."
+msgstr "תוקף הכניסה שלך למערכת פג."
+
+msgid "  Contact the system administrator."
+msgstr "  צור קשר עם מנהל המערכת."
+
+msgid "  Choose a new password."
+msgstr "  בחר סיסמה חדשה."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "תוקף הסיסמה שלך יפוג בתוך %ld ימים.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "תוקף הסיסמה שלך יפוג מחר."
+
+msgid "Your password will expire today."
+msgstr "תוקף הסיסמה שלך פג היום."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "לא יכול לשנות tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: שדות ארוכים מידי\n"
+
+msgid "Environment overflow\n"
+msgstr "הצפת סביבה\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "אינך רשאי לשנות את $%s\n"
+
+#, fuzzy, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] "%d שגיאה מאז כניסה אחרונה למערכת. האחרונה היתה %s על %s.\n"
+msgstr[1] "%d שגיאה מאז כניסה אחרונה למערכת. האחרונה היתה %s על %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+msgid "Too many logins.\n"
+msgstr "יותר מידי כניסות למערכת.\n"
+
+msgid "You have new mail."
+msgstr "יש לך דואר חדש."
+
+msgid "No mail."
+msgstr "אין דואר."
+
+msgid "You have mail."
+msgstr "יש לך דואר."
+
+msgid "no change"
+msgstr ""
+
+msgid "a palindrome"
+msgstr ""
+
+msgid "case changes only"
+msgstr ""
+
+msgid "too similar"
+msgstr ""
+
+msgid "too simple"
+msgstr ""
+
+msgid "rotated"
+msgstr ""
+
+msgid "too short"
+msgstr ""
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "סיסמה לא טובה: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr ""
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "סיסמה: "
+
+msgid "passwd: password updated successfully\n"
+msgstr ""
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "לא יכול לבצע cd ל-\"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "אין ספריה, נכנס למערכת עם HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "לא יכול להריץ %s"
+
+#, fuzzy, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "לא יכול לשנות ספרית שורש ל-\"%s\"\n"
+
+#, fuzzy
+msgid "Unable to determine your tty name."
+msgstr "%s: לא יכול לקבוע את שם המשתמש שלך.\n"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr ""
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) נכשל\n"
+
+msgid "No"
+msgstr ""
+
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "הכנס ערך חדש, או לחץ ENTER לברירת המחדל"
+
+msgid "Minimum Password Age"
+msgstr "גיל סיסמה מינימלי"
+
+msgid "Maximum Password Age"
+msgstr "גיל סיסמה מקסימלי"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "שינוי סיסמה אחרון (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "אזהרת תוקף סיסמה"
+
+msgid "Password Inactive"
+msgstr "סיסמה לא פעילה"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "תאריך תוקף חשבון (YYYY-MM-DD)"
+
+#, fuzzy
+msgid "Last password change\t\t\t\t\t: "
+msgstr "שינוי סיסמה אחרון (YYYY-MM-DD)"
+
+#, fuzzy
+msgid "never"
+msgstr "אף פעם"
+
+msgid "password must be changed"
+msgstr ""
+
+#, fuzzy
+msgid "Password expires\t\t\t\t\t: "
+msgstr "תוקף סיסמה:\t"
+
+#, fuzzy
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "חסור פעילות סיסמה:\t"
+
+#, fuzzy
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "תוקף חשבון:\t"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: הגישה נאסרה\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: לא יכול לקבוע את שם המשתמש שלך.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: זיהוי PAM נכשל\n"
+
+#, fuzzy, c-format
+#| msgid "Cannot lock the password file; try again later.\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "לא יכול לנעול קובץ סיסמאות; נסה שוב מאוחר יותר\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't open shadow file\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: לא יכול לפתוח קובץ צל\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: לא יכול לפתוח קובץ סיסמאות צל\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "שנה מידע הזדקות בשביל %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: שגיאה בשינוי שדות\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr "שם מלא"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "Room Number"
+msgstr "מספר חדר"
+
+msgid "Work Phone"
+msgstr "מספר טלפון בעבודה"
+
+msgid "Home Phone"
+msgstr "מספר טלפון בבית"
+
+msgid "Other"
+msgstr "אחר"
+
+msgid "Cannot change ID to root.\n"
+msgstr "לא יכול לשנות ID ל-root\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: מספר חדר לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: מספר טלפון בבית לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" מכיל תווים לא חוקיים\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" מכיל תווים לא חוקיים\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "משנה מידע בשביל המשתמש %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: שדות ארוכים מידי\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: שורה %d: שורה ארוכה מידי\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: שורה %d: חסרה סיסמה חדשה\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: שגיאה זוהתה, מתעלם משינויים\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: unknown user %s\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: unknown user %s\n"
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "מעטפת כניסה למערכת"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "אינך רשאי לשנות את המעטפת בשביל %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "משנה מעטפת כניסה למערכת בשביל %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: רשומה לא חוקית: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s היא מעטפת לא חוקית.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "שימוש: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr ""
+
+#, c-format
+msgid " [%lus left]"
+msgstr ""
+
+#, c-format
+msgid " [%lds lock]"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+msgid "The options cannot be combined.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr ""
+
+msgid "New Password: "
+msgstr ""
+
+msgid "Re-enter new password: "
+msgstr ""
+
+msgid "They don't match; try again"
+msgstr ""
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr ""
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr ""
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: לא יכול לשנות משתמש `%s' על לקוח NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr ""
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid group file entry"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr ""
+
+#, fuzzy
+msgid "duplicate group entry"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "invalid group name '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid shadow group file entry"
+msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#, fuzzy
+msgid "duplicate shadow group entry"
+msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: grpconv\n"
+msgstr "שימוש: id\n"
+
+msgid "Usage: grpunconv\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "שימוש: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "שימוש: id\n"
+
+msgid " groups="
+msgstr ""
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr ""
+
+msgid "Username                Port     Latest"
+msgstr ""
+
+msgid "**Never logged in**"
+msgstr ""
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "שימוש: %s [-p] [name]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr ""
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr ""
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s login: "
+msgstr ""
+
+msgid "login: "
+msgstr ""
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr ""
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr ""
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr ""
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr ""
+
+#, c-format
+msgid " from %.*s"
+msgstr ""
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "שימוש: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr ""
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr ""
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "סיסמה לא טובה: %s.  "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+msgid "too many groups\n"
+msgstr ""
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: unknown user %s\n"
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: missing new password\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: שורה %d: חסרה סיסמה חדשה\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr ""
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+msgid "New password: "
+msgstr ""
+
+msgid "Try again."
+msgstr ""
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+
+msgid "They don't match; try again.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "אינך רשאי לשנות את המעטפת בשביל %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "סיסמה: "
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "אזהרת תוקף סיסמה"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid password file entry"
+msgstr "לא יכול לנעול קובץ סיסמאות; נסה שוב מאוחר יותר"
+
+#, fuzzy
+msgid "duplicate password entry"
+msgstr "שגיאה בעדכון רשומת הסיסמה."
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "לא יכול לנעול קובץ סיסמאות; נסה שוב מאוחר יותר\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid shadow password file entry"
+msgstr "%s: לא יכול לנעול קובץ סיסמאות צל"
+
+#, fuzzy
+msgid "duplicate shadow password entry"
+msgstr "%s: לא יכול לעדכן קובץ סיסמאות צל"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: לא יכול לכתוב מחדש קובץ סיסמאות\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "שימוש: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "שימוש: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr ""
+
+msgid "Password authentication bypassed.\n"
+msgstr ""
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s\n"
+msgstr "passwd: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr ""
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr ""
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr ""
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr ""
+
+msgid "(Enter your own password)"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: זיהוי PAM נכשל\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr ""
+
+msgid "No shell\n"
+msgstr ""
+
+#, fuzzy
+msgid "No password file"
+msgstr "  בחר סיסמה חדשה.\n"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr ""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+
+msgid "Entering System Maintenance Mode"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "ספרית שורש לא חוקית \"%s\"\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr ""
+
+msgid "failed to change mailbox owner"
+msgstr ""
+
+msgid "failed to rename mailbox"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: מספר טלפון בעבודה לא חוקי: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "סיסמה: "
+
+msgid "Couldn't get file context"
+msgstr ""
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr ""
+
+msgid "Couldn't make backup"
+msgstr ""
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Password set to expire."
+#~ msgstr "תוקף הסיסמה שלך פג."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: לא יכול לנעול קובץ סיסמאות\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: לא יכול לפתוח קובץ סיסמאות\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: לא יכול לנעול קובץ סיסמאות צל\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: לא יכול לפתוח קובץ סיסמאות צל\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: לא יכול לכתוב מחדש קובץ סיסמאות צל\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: לא יכול לכתוב מחדש קובץ סיסמאות\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: לא יכול לעדכן קובץ סיסמאות\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: לא יכול לעדכן קובץ סיסמאות צל\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tשם מלא: %s\n"
+
+#, fuzzy
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "מספר חדר"
+
+#, fuzzy
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "מספר טלפון בעבודה"
+
+#, fuzzy
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "מספר טלפון בבית"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "לא יכול לפתוח את קובץ הסיסמאות.\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "שגיאה בעדכון רשומת הסיסמה.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "לא יכול לבצע שינויים בקובץ הסיסמאות.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "לא יכול לשחרר נעילה של קובץ הסיסמאות.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: שגיאה בעדכון קובץ סיסמאות\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: שורה %d: לא יכול לעדכן רשומת סיסמה\n"
+
+#, fuzzy
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "שימוש: %s [-r|-R] group\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: לא יכול לפתוח קובץ צל\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: זיהוי PAM נכשל\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "לא יכול לבצע cd ל-\"%s\"\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "לא יכול לשחרר נעילה של קובץ הסיסמאות.\n"
+
+#, fuzzy
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: שם לא חוקי: \"%s\"\n"
+
+#, fuzzy
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: לא יכול לנעול קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: שורה %d: משתמש לא מוכר %s\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: שגיאה בעדכון קובץ צל\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "  בחר סיסמה חדשה.\n"
diff --git a/po/hu.gmo b/po/hu.gmo
new file mode 100644 (file)
index 0000000..a343c98
Binary files /dev/null and b/po/hu.gmo differ
diff --git a/po/hu.po b/po/hu.po
new file mode 100644 (file)
index 0000000..03fff85
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,2712 @@
+# Gabor Kelemen <kelemeng@gnome.hu>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-11-25 20:56+0100\n"
+"Last-Translator: SZERVÁC Attila <sas@321.hu>\n"
+"Language-Team: Hungarian <gnome@gnome.hu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Poedit-Language: Hungarian\n"
+"X-Poedit-Country: HUNGARY\n"
+"X-Generator: KBabel 1.11.2\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Sikertelen helyfoglalás a beállítási infónak.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "beállítási hiba - ismeretlen '%s' elem (értesítsd a rendszergazdát)\n"
+
+msgid "Password: "
+msgstr "Jelszó: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s jelszava: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Figyelem: ismeretlen %s csoport\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Figyelem: túl sok csoport\n"
+
+msgid "Your password has expired."
+msgstr "A jelszó lejárt"
+
+msgid "Your password is inactive."
+msgstr "A jelszó inaktív"
+
+msgid "Your login has expired."
+msgstr "A bejelentkezés lejárt"
+
+msgid "  Contact the system administrator."
+msgstr "  Fordulj a rendszergazdához."
+
+msgid "  Choose a new password."
+msgstr "  Adj új jelszót"
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "A jelszó %ld nap múlva lejár.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Jelszavad már csak holnapig érvényes"
+
+msgid "Your password will expire today."
+msgstr "Jelszavad érvényessége ma lejár"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Nem lehet a következő terminálra váltani: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: túl hosszú mezők\n"
+
+msgid "Environment overflow\n"
+msgstr "Környezeti túlcsordulás\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Nem módosítható a következő: $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d hiba az utolsó bejelentkezés óta\n"
+"A legutóbbi: %s itt: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: nem kérhető le egyedi felhasználói azonosító\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: nem szerezhető be egyedi csoportazonosító\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: nem kérhető le egyedi felhasználói azonosító\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: nem kérhető le egyedi felhasználói azonosító\n"
+
+msgid "Too many logins.\n"
+msgstr "Túl sok bejelentkezés\n"
+
+msgid "You have new mail."
+msgstr "Új leveled érkezett"
+
+msgid "No mail."
+msgstr "Nincs leveled"
+
+msgid "You have mail."
+msgstr "Levelek kiolvasva"
+
+msgid "no change"
+msgstr "nem változott"
+
+msgid "a palindrome"
+msgstr "egy palindróma"
+
+msgid "case changes only"
+msgstr "csak változások esetén"
+
+msgid "too similar"
+msgstr "túl hasonló"
+
+msgid "too simple"
+msgstr "túl egyszerű"
+
+msgid "rotated"
+msgstr "fordított"
+
+msgid "too short"
+msgstr "túl rövid"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Rossz jelszó: %s."
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() sikertelen, hibakód: %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Jelszó módosítva."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: a jelszó sikeresen frissült\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Hibás jelszó ehhez: %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "nem lehet könyvtárat váltani ide: \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Ismeretlen könyvtár, bejelentkezés így: HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s nem futtatható"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Érvénytelen gyökérkönyvtár: \"%s\"\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Nem lehet a gyökérkönyvtárba váltani: \"%s\"\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Sikertelen tty név meghatározás."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: a memória elfogyott\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "Sikertelen malloc(%d)\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Nem\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Használat: chage [kapcsolók] [NÉV]\n"
+"\n"
+"Kapcsolók:\n"
+"  -d, --lastday UTOLSÓ_NAP         utolsó jelszómódosítás beállítása az\n"
+"                                   UTOLSÓ_NAPRA\n"
+"  -E, --expiredate LEJÁRATI_DÁTUM  fiók lejárati dátumának beállítása a\n"
+"                                   LEJÁRATI_DÁTUMRA\n"
+"  -h, --help                       ezen súgószöveg megjelenítése és kilépés\n"
+"  -I, --inactive INAKTÍV           a jelszó inaktívvá tétele lejárat után\n"
+"                                   az INAKTÍV értékre\n"
+"  -l, --list                       fiókelévülési információk megjelenítése\n"
+"  -m, --mindays MIN_NAPOK          napok minimális számának beállítása\n"
+"                                   jelszómódosítás előtt a MIN_NAPOK "
+"értékre\n"
+"  -M, --maxdays MAX_NAPOK          napok maximális számának beállítása\n"
+"                                   jelszómódosítás előtt a MAX_NAPOK "
+"értékre\n"
+"  -W, --warndays FIGYELM_NAPOK     a lejáratra figyelmeztetés napjai\n"
+"                                   számának beállítása FIGYELM_NAPOK-ra\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Add meg az új értéket vagy üss ENTER-t az alapértelmezetthez"
+
+msgid "Minimum Password Age"
+msgstr "Minimum jelszó-kor"
+
+msgid "Maximum Password Age"
+msgstr "Maximum jelszó-kor"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Utolsó jelszóváltás (ÉÉÉÉ-HH-NN)"
+
+msgid "Password Expiration Warning"
+msgstr "Jelszó elévülési figyelmeztetés"
+
+msgid "Password Inactive"
+msgstr "Inaktív jelszó"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Hozzáférés elévülési dátum (ÉÉÉÉ-HH-NN)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Utolsó jelszóváltás\t\t\t\t\t: "
+
+msgid "never"
+msgstr "soha"
+
+msgid "password must be changed"
+msgstr "jelszóváltás kötelező"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Jelszó lejár\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Jelszó inaktív\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Hozzáférés lejár\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "A jelszómódosítások közti legkevesebb nap\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "A jelszómódosítások közti legtöbb nap\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "A jelszó lejárata előtt figyelmeztetés napok száma\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: érvénytelen dátum: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: érvénytelen numerikus argumentum: \"%s\"\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: ne add meg más jelzőkkel a \"l\"-t\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Hozzáférés megtagadva.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: A felhasználóneved megállapítása sikertelen\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM hitelesítési hiba\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: fájlok zárolása sikertelen, próbáld később\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: %s fájl nem nyitható meg\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: hiba a következő indításakor: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: nincs meg az árnyék jelszófájl\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s elévülési információinak módosítása\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: hiba a mezők módosításakor\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Használat: %s [-f TELJES_Név] [-r szobaszám] [-w munka_tel]\n"
+"\t[-h otthoni_tel] [-o egyéb] [felhasználónév]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Használat: %s [-f TELJES_Név] [-r szobaszám] [-w munka_tel] \t[-h "
+"otthoni_tel]\n"
+
+msgid "Full Name"
+msgstr "TELJES Név"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Szobaszám"
+
+msgid "Work Phone"
+msgstr "Munkahelyi telefon"
+
+msgid "Home Phone"
+msgstr "Otthoni telefon"
+
+msgid "Other"
+msgstr "Egyéb"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Az ID nem cserélhető root-ra.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: érvénytelen név: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: érvénytelen szobaszám: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: érvénytelen munkahelyi telefonszám: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: érvénytelen otthoni telefonszám: \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" illegális karaktereket tartalmaz\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" illegális karaktereket tartalmaz\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: `%s' felhasználó nem módosítható NIS kliensen.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: `%s' a NIS mester ehhez a klienshez.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s felhasználói információinak cseréje\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: túl hosszú mezők\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Használat: chpasswd [kapcsolók]\n"
+"\n"
+"Kapcsolók:\n"
+"  -e, --encrypted               a megadott jelszavak titkosítottak\n"
+"  -h, --help                    ezen súgó megjelenítése és kilépés\n"
+"  -m, --md5                     MD5 titkosítás használata DES helyett,ha a\n"
+"                                megadott jelszavak nem titkosítottak\n"
+"\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: -a kapcsoló CSAK -G-vel megy\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: %d. sor: túl hosszú\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: %d. sor: hiányzó új jelszó\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: %s csoport nem létezik\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: %d. sor: nem tudom frissíteni a bejegyzést\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: hibákat észleltem, a változások elvetve\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Használat: chsh [kapcsolók] NÉV\n"
+"\n"
+"Kapcsolók:\n"
+"  -h, --help                    kiírja e súgót és kilép\n"
+"  -s, --shell                   új bejelentkező héj a felhasználói fiókhoz\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Bejelentkező héj"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Nem módosíthatod %s parancsértelmezőjét.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Bejelentkező héj ehhez: %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Érvénytelen bejegyzés: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s érvénytelen héj.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Használat: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Név         Hibás Maximális Legutóbbi                   Ezen\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds van hátra]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds zárolva]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Ismeretlen felhasználó: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: %s fájl nem nyitható meg\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "%s jelszava nem változtatható\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: árnyék csoport jelszavak kellenek ehhez: -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: %s csoport nem létezik\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: hiba a következő indításakor: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "%s csoport jelszavának cseréje\n"
+
+msgid "New Password: "
+msgstr "Új jelszó: "
+
+msgid "Re-enter new password: "
+msgstr "Új jelszó ismét: "
+
+msgid "They don't match; try again"
+msgstr "Nem egyeznek; próbáld újra"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Próbáld később\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "%s felhasználó hozzáadása %s csoporthoz\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "%s felhasználó törlése %s csoportból\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Nem tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s rossz csoport név\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "érvénytelen csoportnév: `%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K KULCS=ÉRTÉK párost kíván\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: %s csoport létezik\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "A tag már létezik\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Használat: groupdel csoport\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: nem tudom átnevezni %s könyvtárat erre: %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: `%s' felhasználó nem módosítható NIS kliensen.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: %s csoport nem létezik\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: a(z) \"%s\" csoport egy NIS csoport.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s a NIS mester\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: %s egy NIS felhasználó\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: elfogyott a memória az update_group során\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "érvénytelen csoportnév: `%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: %s egy NIS csoport\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: ismeretlen %s felhasználó\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Használat: %s [-r] [-s] [csoport [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Használat: %s [-r] [-s] [csoport]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s és -r inkompatibilisek\n"
+
+msgid "invalid group file entry"
+msgstr "érvénytelen csoport fájl bejegyzés"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "törlöd a következő sort: `%s'? "
+
+msgid "duplicate group entry"
+msgstr "dupla csoport bejegyzés"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "érvénytelen csoportnév: `%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "érvénytelen csoportnév: `%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "%s csoport: nincs %s felhasználó\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "törlöd a következő tagot: `%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "nincs megfelelő csoportfájl bejegyzés a következőben: %s\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "hozzáadod a(z) %s csoportot a következőhöz: %s ?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "érvénytelen árnyék csoport fájl bejegyzés"
+
+msgid "duplicate shadow group entry"
+msgstr "dupla árnyék csoport bejegyzés"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "%s árnyék csoport: nincs %s adminisztratív felhasználó\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "törlöd az adminisztratív %s tagot? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "%s árnyék csoport: nincs %s felhasználó\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: fájlok frissítve\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: nincs változás\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Használat: groupdel csoport\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Használat: groupdel csoport\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: %s fájl nem frissíthető\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Használat: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Használat: id\n"
+
+msgid " groups="
+msgstr " csoportok="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Használat: lastlog [kapcsolók]\n"
+"\n"
+"Kapcsolók:\n"
+"  -b, --before NAP              csak a NAPOK számánál régebbi lastlog\n"
+"                                rekordok megjelenítése\n"
+"  -h, --help                    ezen súgószöveg megjelenítése és kilépés\n"
+"  -t, --time NAP                csak a megadott NAPNÁL újabb lastlog\n"
+"                                rekordok kiírása\n"
+"  -u, --user NÉV                a megadott NEVŰ felhasználó lastlog\n"
+"                                rekordjainak kiírása\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Felhasználónév   Port     Innen            Legutóbb"
+
+msgid "Username                Port     Latest"
+msgstr "Felhasználónév          Port     Legutóbb"
+
+msgid "**Never logged in**"
+msgstr "**Sosem lépett be**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: váratlan argumentum: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Használat: %s [-p] [név]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h host] [-f név]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Érvénytelen bejelentkezési idő"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Rendszer lezárva rutin karbantartásra"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Leválasztás átlépve -- root bejelentkezés engedélyezett]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"A bejelentkezés %d mp. után elkésett\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Nincs utmp bejegyzés.  Futtasd a \"login\"-t a legalacsonyabb szintű \"sh\"-"
+"ból."
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM hiba, törölve: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s bejelentkezés: "
+
+msgid "login: "
+msgstr "bejelentkezés: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Próbálkozások megengedett száma átlépve (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: a PAM törlést kért\n"
+
+msgid "Login incorrect"
+msgstr "Hibás bejelentkezés"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s bejelentkezés: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: hiba a következő indításakor: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Figyelem: a bejelentkezés ismét lehetséges az átmeneti kizárás után."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Utolsó bejelentkezés: %s ide: %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Utolsó bejelentkezés: %.19s ide: %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " innen: %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"bejelentkezési idő átlépve\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Használat: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Használat: newgrp [-] [csoport]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Használat: sg csoport [[-c] parancs]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Régi jelszó: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: hiba a következő indításakor: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+msgid "too many groups\n"
+msgstr "túl sok csoport\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: %s csoport nem létezik\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: érvénytelen '%s' felhasználónév\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: érvénytelen '%s' felhasználónév\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: %d. sor: érvénytelen sor\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: nem tudom frissíteni %s felhasználó bejegyzését\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: %d. sor: GID létrehozása sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: %d. sor: GID létrehozása sikertelen\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: %s felhasználó nem létezik\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: %d. sor: jelszó frissítése sikertelen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: %d. sor: mkdir sikertelen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: %d. sor: chown sikertelen\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: %d. sor: nem tudom frissíteni a bejegyzést\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: passwd [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -a, --all                     report password status on all accounts\n"
+#| "  -d, --delete                  delete the password for the named "
+#| "account\n"
+#| "  -e, --expire                  force expire the password for the named "
+#| "account\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -k, --keep-tokens             change password only if expired\n"
+#| "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --lock                    lock the named account\n"
+#| "  -n, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -q, --quiet                   quiet mode\n"
+#| "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+#| "  -S, --status                  report password status on the named "
+#| "account\n"
+#| "  -u, --unlock                  unlock the named account\n"
+#| "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "  -x, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Használat: passwd [kapcsolók] [NÉV]\n"
+"\n"
+"Kapcsolók:\n"
+"  -a, --all                     jelszóállapot jelentés az összes fiókon\n"
+"  -d, --delete                  a megadott fiók jelszavának törlése\n"
+"  -e, --expire                  a megadott fiók jelszava lejáratának\n"
+"                                kényszerítése\n"
+"  -h, --help                    kiírja e súgót és kilép\n"
+"  -k, --keep-tokens             a jelszót csak annak lejáratakor módosítsa\n"
+"  -i, --inactive INAKTÍV        a jelszó inaktívvá tétele lejárat után\n"
+"                                az INAKTÍV értékre\n"
+"  -l, --lock                    a megadott fiók zárolása\n"
+"  -n, --mindays MIN_NAPOK       napok minimális számának beállítása\n"
+"                                jelszómódosítás előtt a MIN_NAPOK értékre\n"
+"  -q, --quiet                   csendes mód\n"
+"  -r, --repository LERAKAT      jelszó módosítása a LERAKAT lerakatban\n"
+"  -S, --status                  jelentés a megadott fiók jelszóállapotáról\n"
+"  -u, --unlock                  a megadott fiók zárolásának feloldása\n"
+"  -w, --warndays FIGYELEM_NAPOK a lejáratra figyelmeztetés napjai számának\n"
+"  -x, --maxdays MAX_NAPOK       napok maximális számának beállítása\n"
+"                                jelszómódosítás előtt a MAX_NAPOK értékre\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Régi jelszó: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Add meg az új jelszót (minimum %d, maximum %d karakter)\n"
+"Biztonság: kérlek használj vegyesen Nagy és kisbetűket és számokat.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Add meg az új jelszót (minimum %d, maximum %d karakter)\n"
+"Biztonság: kérlek használj vegyesen Nagy és kisbetűket és számokat.\n"
+
+msgid "New password: "
+msgstr "Új jelszó: "
+
+msgid "Try again."
+msgstr "Próbáld újra"
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Figyelem: Gyenge jelszó! (add meg újra, ha tényleg ezt akarod)."
+
+msgid "They don't match; try again.\n"
+msgstr "Nem egyeznek; próbáld újra\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s jelszava nem változtatható\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s jelszava nem változtatható\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: %s tár nem támogatott\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: %s jelszavát nem olvashatod és cserélheted.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s jelszavának cseréje\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s jelszava változatlan.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Jelszó módosítva."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Jelszó elévülési figyelmeztetés"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Használat: %s [-q] [-r] [-s] [jelszó [árnyék]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s és -r inkompatibilisek\n"
+
+msgid "invalid password file entry"
+msgstr "Érvénytelen jelszófájl bejegyzés"
+
+msgid "duplicate password entry"
+msgstr "dupla jelszó bejegyzés"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "érvénytelen '%s' felhasználó név\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "érvénytelen '%s' felhasználó név\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "%s felhasználó: nincs %u csoport\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "%s felhasználó: %s könyvtár nem létezik\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "%s felhasználó: %s program nem létezik\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "nincs megfelelő jelszófájl bejegyzés a következőben: %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "hozzáadja \"%s\" felhasználót a következőbe: %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "érvénytelen árnyék jelszófájl bejegyzés"
+
+msgid "duplicate shadow password entry"
+msgstr "dupla árnyék jelszó bejegyzés"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "%s felhasználó: az utolsó jelszómódosítás időpontja a jövőben van\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: %s fájl nem nyitható meg\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Használat: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Használat: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "A su-zás e hozzáféréshez ELUTASÍTVA.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Jelszó hitelesítés átlépve.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Add meg SAJÁT jelszavad a hitelesítéshez.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+# CHECK!
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Használat: su [kapcsolók] [NÉV]\n"
+"\n"
+"Kapcsolók:\n"
+"  -c, --command PARANCS         a PARANCS átadása a meghívott héjnak\n"
+"  -h, --help                    kiírja e súgót és kilép\n"
+"  -, -l, --login                a héj bejelentkezési héjjá tétele\n"
+"  -m, -p,\n"
+"  --preserve-environment        nem állítja vissza a környezeti változókat\n"
+"                                és megtartja ugyanazt a héjat\n"
+"  -s, --shell HÉJ               a HÉJ használata a\n"
+"                                passwd-ben megadott alapértelmezett helyett\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: terminálból kell futnia\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: hiba: %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Ismeretlen azonosító: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Nem vagy jogosult ehhez: su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Add meg saját jelszavad)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Átlépve)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM hitelesítési hiba\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Nem vagy jogosult ehhez: su %s\n"
+
+msgid "No shell\n"
+msgstr "Nincs héj\n"
+
+msgid "No password file"
+msgstr "Nincs jelszófájl"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Nincs 'root' jelszó bejegyzés"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Üsd le a control-d a szokásos indítás továbblépéséhez\n"
+"(vagy add meg a root jelszót a rendszer karbantartásához):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Belépés a rendszerkarbantartó módba"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: nem tudom létrehozni az új defaults fájlt\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: nem tudom megnyitni az új defaults fájlt\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: %d. sor: chown sikertelen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: átnevezés: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: a(z) \"%s\" csoport egy NIS csoport.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: túl sok csoport van megadva (max %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Használat: %s [bemenet]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: érvénytelen alapkönyvtár: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: érvénytelen megjegyzés: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: érvénytelen saját könyvtár: \"%s\"\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: a -e árnyék jelszavakat vár\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: a -f árnyék jelszavakat vár\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: érvénytelen mező: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: érvénytelen parancsértelmező: \"%s\"\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: %s könyvtár nem hozható létre\n"
+
+msgid "Creating mailbox file"
+msgstr "Postafiókfájl létrehozása"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"A \"mail\" csoport nem található. A felhasználó postafiókfájlja 0600 "
+"móddalkerül létrehozásra.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "A postafiókfájl jogosultságainak beállítása"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: %s felhasználó létezik\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: %s csoport létezik - ha e felhasználót e csoporthoz akarod adni, "
+"használd a -g-t.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: %s létrehozása sikertelen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u nem egyedi\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: %s létrehozása sikertelen\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: figyelem: a saját könyvtár már létezik.\n"
+"Nem másolok semmit bele a vázkönyvtárból.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Használat: userdel [kapcsolók] NÉV\n"
+"\n"
+"Kapcsolók:\n"
+"  -f, --force                   fájlok eltávolításának kényszerítése, még\n"
+"                                ha nem a felhasználó a tulajdonos is\n"
+"  -h, --help                    ezen súgószöveg megjelenítése és kilépés\n"
+"  -r, --remove                  saját könyvtár és levelezési sor "
+"eltávolítása\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Nem tudom %s csoportot törölni, ami egy másik felhasználó elsődleges "
+"csoportja.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: figyelem: nem törölhető: "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s tulajdonosa nem %s, nem törlöm\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: %s egy NIS felhasználó\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: %s felhasználó most be van jelentkezve\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: érvénytelen saját könyvtár: \"%s\"\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: nem törlöm %s könyvtárat (%s saját könyvtára)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: hiba %s könyvtár törlésekor\n"
+
+# FIXME
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Használat: usermod [kapcsolók] NÉV\n"
+"\n"
+"Kapcsolók:\n"
+"  -a, --append                     felhasználó adása a kiegészítő "
+"CSOPORTHOZ\n"
+"                                   (csak -G-vel használd)\n"
+"  -c, --comment MEGJEGYZÉS         a GECOS mező új értéke\n"
+"  -d, --home SAJÁT_KVT             új bejelentkezési könyvtár az új\n"
+"                                   felhasználói\n"
+"  -e, --expiredate LEJÁRATI_DÁTUM  fiók lejárati dátumának beállítása a\n"
+"                                   LEJÁRATI_DÁTUMRA\n"
+"  -f, --inactive INAKTÍV           a jelszó inaktívvá tétele lejárat után\n"
+"                                   az INAKTÍV értékre\n"
+"  -g, --gid CSOPORT                a CSOPORT használatának kényszerítése\n"
+"                                   az új felhasználói fiókhoz\n"
+"  -G, --groups CSOPORTOK           kiegészítő csoportok felsorolása az új\n"
+"                                   felhasználói fiókhoz\n"
+"  -h, --help                       ezen súgószöveg megjelenítése és kilépés\n"
+"  -l, --login NÉV                  a bejelentkezési név új értéke\n"
+"  -L, --lock                       a megadott fiók zárolása\n"
+"  -m, --move-home                  a saját könyvtár tartalmának áthelyezése "
+"az\n"
+"                                   új helyre (csak a -d kapcsolóval "
+"használd)\n"
+"  -o, --non-unique                 engedélyezi a csoport létrehozását "
+"többször\n"
+"                                   szereplő (nem egyedi) GID értékkel\n"
+"  -p, --password JELSZÓ            az új jelszó titkosított\n"
+"  -s, --shell PARANCSÉRTELMEZŐ     a PARANCSÉRTELMEZŐ használata a\n"
+"                                   passwd-ben megadott alapértelmezett "
+"helyett\n"
+"  -u, --uid UID                    új UID a felhasználó fiókjához\n"
+"  -U, --unlock                     a felhasználói fiók zárolásának "
+"feloldása\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: %s felhasználó létezik\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: nincs kapcsoló megadva\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e és -f árnyék jelszavakat vár\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "A tag már létezik\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: %s könyvtár létezik\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: %s létrehozása sikertelen\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: chown %s sikertelen\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: figyelem: nem sikerült a régi %s saját könyvtár teljes törlése"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: nem tudom átnevezni %s könyvtárat erre: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: figyelem: %s tulajdonosa nem %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "a postafiók tulajdonosának váltása sikertelen"
+
+msgid "failed to rename mailbox"
+msgstr "a postafiók átnevezése sikertelen"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Használat: vipw [kapcsolók]\n"
+"\n"
+"Kapcsolók:\n"
+"  -g, --group                   csoportadatbázis szerkesztése\n"
+"  -h, --help                    ezen súgószöveg megjelenítése\n"
+"  -p, --passwd                  a passwd adatbázis szerkesztése\n"
+"  -q, --quiet                   csendes mód\n"
+"  -s, --shadow                  a shadow vagy gshadow adatbázis "
+"szerkesztése\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: a jogosultságok eldobása meghiúsult (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s is változatlan\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Nem tudtam zárolni a fájlt"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Nem tudtam zárolni a fájlt"
+
+msgid "Couldn't make backup"
+msgstr "Nem tudtam biztonsági másolatot készíteni"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: nem tudom visszaállítani %s-t: %s (módosításaid itt vannak: %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: faillog [kapcsolók]\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ "  -a, --all                     az összes felhasználó faillog "
+#~ "bejegyzésének\n"
+#~ "                                megjelenítése\n"
+#~ "  -h, --help                    ezen súgószöveg megjelenítése és kilépés\n"
+#~ "  -l, --lock-time MP            a sikertelen bejelentkezés után a fiók\n"
+#~ "                                zárolása MP másodpercre\n"
+#~ "  -m, --maximum MAX             a sikertelen bejelentkezések "
+#~ "számlálójának\n"
+#~ "                                beállítása a MAX értékre\n"
+#~ "  -r, --reset                   a bejelentkezési hibák számának "
+#~ "visszaállítása\n"
+#~ "  -t, --time NAPOK              az adott NAPOK számánál régebbi faillog\n"
+#~ "                                rekordok megjelenítése\n"
+#~ "  -u, --user NÉV                faillog rekord megjelenítése, vagy csak\n"
+#~ "                                (ha a -r, -m vagy -l kapcsolókkal "
+#~ "használja) a\n"
+#~ "                                NÉV bejelentkezési nevű felhasználó "
+#~ "számára\n"
+#~ "                                karbantartja a hibaszámlálókat és "
+#~ "értékeket.\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: groupadd [kapcsolók] CSOPORT\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ "  -f, --force                   kilépés kényszerítése sikeres "
+#~ "állapottal,\n"
+#~ "                                ha a megadott csoport már létezik\n"
+#~ "  -g, --gid GID                 a GID használata az új csoporthoz\n"
+#~ "  -h, --help                    kiírja e súgót és kilép\n"
+#~ "  -K, --key KULCS=ÉRTÉK         felülbírálja az /etc/login.defs\n"
+#~ "                                alapértelmezéseit\n"
+#~ "  -o, --non-unique              engedélyezi a csoport létrehozását "
+#~ "többször\n"
+#~ "                                szereplő (nem egyedi) GID értékkel\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: groupmod [kapcsolók] CSOPORT\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ "  -g, --gid GID                 a GID használata az új csoporthoz\n"
+#~ "  -h, --help                    kiírja e súgót és kilép\n"
+#~ "  -n, --new-name Új_CSOPORT     a CSOPORTot az ÚJ_CSOPORT névre bírja\n"
+#~ "  -o, --non-unique              engedélyezi a CSOPORT létrehozását "
+#~ "többször\n"
+#~ "                                szereplő (nem egyedi) GID értékkel\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Használat: useradd [kapcsolók] NÉV\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ "  -b, --base-dir ALAP_KVT          az új felhasználói fiók saját\n"
+#~ "                                   könyvtárának alapkönyvtára\n"
+#~ "  -c, --comment MEGJEGYZÉS         az új felhasználói fiók GECOS "
+#~ "mezőjének\n"
+#~ "                                   beállítása\n"
+#~ "  -d, --home-dir SAJÁT_KVT         az új felhasználói fiók saját "
+#~ "könyvtára\n"
+#~ "  -D, --defaults                   az alapértelmezett useradd "
+#~ "beállítások\n"
+#~ "                                   kiírása vagy mentése\n"
+#~ "  -e, --expiredate LEJÁRATI_DÁTUM  a fiók lejárati dátumának beállítása\n"
+#~ "  -f, --inactive INAKTÍV           a jelszó inaktívvá tétele lejárat "
+#~ "után\n"
+#~ "                                   az INAKTÍV értékre\n"
+#~ "  -g, --gid CSOPORT                a CSOPORT használatának kényszerítése\n"
+#~ "                                   az új felhasználói fiókhoz\n"
+#~ "  -G, --groups CSOPORTOK           kiegészítő csoportok felsorolása az "
+#~ "új\n"
+#~ "                                   felhasználói fiókhoz\n"
+#~ "  -h, --help                       ezen súgószöveg megjelenítése és "
+#~ "kilépés\n"
+#~ "  -k, --skel VÁZ_KVT               alternatív vázkönyvtár megadása\n"
+#~ "  -K, --key KULCS=ÉRTÉK            felülbírálja az /etc/login.defs\n"
+#~ "                                   alapértelmezéseit\n"
+#~ "  -m, --create-home                az új felhasználói fiók saját\n"
+#~ "                                   könyvtárának létrehozása\n"
+#~ "  -o, --non-unique                 engedélyezi a csoport létrehozását "
+#~ "többször\n"
+#~ "                                   szereplő (nem egyedi) GID értékkel\n"
+#~ "  -p, --password JELSZÓ            titkosított jelszó használata az új\n"
+#~ "                                   felhasználói fiókhoz\n"
+#~ "  -s, --shell PARANCSÉRTELMEZŐ     a bejelentkezési parancsértelmező az\n"
+#~ "                                   új felhasználói fiókhoz\n"
+#~ "  -u, --uid UID                    az UID használatának kényszerítése az "
+#~ "új\n"
+#~ "                                   felhasználói fiókhoz\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Jelszó lejárata beállítva."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: nem tudom zárolni a jelszófájlt\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: a jelszófájl nem nyitható meg\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: az árnyék jelszófájl zárolása sikertelen\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: az árnyék jelszófájl megnyitása sikertelen\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: az árnyék jelszófájl újraírása sikertelen\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: a jelszófájl újraírása sikertelen\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: a jelszófájl frissítése sikertelen\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: az árnyék jelszófájl frissítése sikertelen\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tTELJES Név: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tSzobaszám: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tMunkahelyi telefon: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tOtthoni telefon: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Nem zárolható a jelszófájl; próbáld később\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "A jelszófájl nem nyitható meg.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s nem található a /etc/passwd-ben\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Hiba a jelszó bejegyzés frissítésekor\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Nem tudom megtenni a jelszófájl módosításokat.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Nem tudom feloldani a jelszófájl zárolását.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: nem tudom lezárni a 'group' fájlt\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: nem tudom megnyitni a 'group' fájlt\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: nem tudom lezárni a 'gshadow' fájlt\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: nem tudom megnyitni a 'gshadow' fájlt\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: hiba az árnyék fájl frissítésekor\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: Hiba a csoport bejegyzés frissítésekor\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: %d.: ismeretlen %s csoport\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: %d. sor: nem tudom frissíteni a bejegyzést\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: nem tudom zárolni az árnyék fájlt\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: hiba az árnyék fájl frissítésekor\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: hiba a jelszófájl frissítésekor\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: %d. sor: ismeretlen %s felhasználó\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: %d. sor: a jelszó bejegyzés nem frissíthető\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: ismeretlen felhasználó\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Ismeretlen felhasználó: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Használat: %s [-r|-R] group\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a felhasználó] csoport\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d felhasználó] csoport\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A felhasználó,...] [-M felhasználó,...] csoport\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M felhasználó,...] csoport\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: nem szerezhető zár\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: nem szerezhető árnyékzár\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: nem tudom megnyitni a fájlt\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: nem tudom újraírni a fájlt\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: nem tudom újraírni az árnyék fájlt\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: nem tudom feloldani a fájlt\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: nem tudom frissíteni a bejegyzést\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: nem tudom frissíteni az árnyék bejegyzést\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "ismeretlen csoport: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: nem tudom megnyitni a fájlt\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: nem tudom megnyitni a 'gshadow' fájlt\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Ki vagy?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: ismeretlen %s tag\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: hiba az új csoport bejegyzés hozzáadásakor\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: nem tudom újraírni a csoport fájlt\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: nem tudom újraírni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: nem tudom zárolni a csoport fájlt\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: nem tudom megnyitni a csoport fájlt\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: nem tudom zárolni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: nem tudom megnyitni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: %u GID nem egyedi\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: nem tudom törölni a csoport bejegyzést\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: nem tudom törölni az árnyék csoport bejegyzést\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: nem tudom törölni a felhasználó elsődleges csoportját\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Az eltávolítandó tag nem található\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Használat: groupmems -a felhasználónév | -d felhasználónév | -D | -l [-g "
+#~ "csoportnév]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Csak a root adhat tagokat különböző csoportokhoz\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Csoport hozzáférés kell\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Nem a jelen csoport elsődleges tulajdonosa\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM hitelesítési hiba ehhez:\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Csoport fájl zárolása sikertelen\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Csoport fájl megnyitása sikertelen\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Csoport fájl bezárása sikertelen\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s nincs a /etc/group-ban\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u nem egyedi GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s nem egyedi név\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: nem tudom újraírni a jelszófájlt\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: nem tudom zárolni a jelszófájlt\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: nem tudom megnyitni a jelszófájlt\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: %s fájl nem zárolható\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: nem tudom frissíteni %s árnyék bejegyzését\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: nem tudom frissíteni %s csoport bejegyzését\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: nem tudom zárolni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: nem tudom megnyitni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: nem tudom törölni %s árnyék csoportot\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: nem tudom frissíteni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: nem tudom frissíteni a csoport fájlt\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: nem tudom törölni az árnyék csoport fájlt\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "ismeretlen UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "ismeretlen GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: %s csoport nem létezik\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: %s felhasználó nem létezik\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: érvénytelen '%s' felhasználónév\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: nem tudom zárolni a /etc/passwd fájlt.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: nem tudom zárolni a /etc/passwd fájlt.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: nem tudom zárolni a /etc/passwd fájlt.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: nem tudom zárolni a /etc/passwd fájlt.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: fájlok megnyitása sikertelen\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: hiba a fájlok frissítésekor\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: %d. sor: nem találom e felhasználót: %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: nem tudom frissíteni %s jelszó bejegyzését\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: nem tudom lezárni a passwd fájlt\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: nem tudom megnyitni a passwd fájlt\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: nem tudom törölni %s árnyék bejegyzését\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: nem tudom frissíteni a \"shadow\" fájlt\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: nem tudom frissíteni a \"passwd\" fájlt\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: nem tudom frissíteni %s felhasználó bejegyzését\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: nem tudom törülni az árnyék jelszófájlt\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: ismeretlen %s GID\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: ismeretlen %s csoport\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: elfogyott a memória az update_gshadow során\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: nem tudom újraírni a jelszófájlt\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: nem tudom újraírni az árnyék jelszófájlt\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: nem tudom zárolni az árnyék jelszófájlt\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: nem tudom megnyitni az árnyék jelszófájlt\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: hiba a csoportfájl zárolásakor\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: hiba a csoportfájl megnyitásakor\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: hiba az árnyék csoportfájl zárolásakor\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: hiba az árnyék csoportfájl megnyitásakor\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: hiba az új jelszó bejegyzés hozzáadásakor\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: hiba az új árnyék jelszó bejegyzés hozzáadásakor\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: figyelem: a CREATE_HOME nem támogatott, használd a -m-et helyette.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: Hiba a csoport bejegyzés frissítésekor\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: Hiba a csoport bejegyzés frissítésekor\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: nem tudom megnyitni a csoport fájlt\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: nem tudom megnyitni az árnyék csoport fájlt\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: hiba a jelszó bejegyzés törlésekor\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: hiba az árnyék jelszó bejegyzés törlésekor\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: %s felhasználó nem létezik\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: hiba az új csoport bejegyzés hozzáadásakor\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu nem egyedi\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: hiba a jelszó bejegyzés cseréjekor\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: hiba a jelszó bejegyzés törlésekor\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: hiba az árnyék jelszó bejegyzés törlésekor\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: nem szerezhető be egyedi csoportazonosító\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " erre: `%.100s' erről: `%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " erre: `%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: %d. sor: UID létrehozása sikertelen\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: %s név nem egyedi\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Használat: chgpasswd [kapcsolók]\n"
+#~ "\n"
+#~ "Kapcsolók:\n"
+#~ "  -e, --encrypted\ta megadott jelszavak titkosítottak\n"
+#~ "  -h, --help\t\tezen súgó megjelenítése és kilépés\n"
+#~ "  -m, --md5\t\tMD5 titkosítás használata DES helyett,ha a megadott\n"
+#~ "\t\t\tjelszavak nem titkosítottak\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Nincs jelszófájl\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Bocs.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Bocsi, %s jelszava még nem változtatható...\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Bocs."
diff --git a/po/id.gmo b/po/id.gmo
new file mode 100644 (file)
index 0000000..3a98457
Binary files /dev/null and b/po/id.gmo differ
diff --git a/po/id.po b/po/id.po
new file mode 100644 (file)
index 0000000..b94b586
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,2615 @@
+# Terjemahan Bahasa Indonesia: shadow
+# Parlin Imanuel Toh <parlin@ui.edu>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.15\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-11-25 20:58+0100\n"
+"Last-Translator: Parlin Imanuel Toh <parlin_i@yahoo.com>\n"
+"Language-Team: Debian Indonesia <debid@yahoogroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Tidak dapat mengalokasikan ruang untuk informasi konfigurasi.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"Kesalahan konfigurasi - item tidak dikenal '%s' (beritahu administrator)\n"
+
+msgid "Password: "
+msgstr "Kata sandi:"
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Kata sandi dari %s:"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Peringatan: grup tidak dikenal %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Peringatan: terlalu banyak grup\n"
+
+msgid "Your password has expired."
+msgstr "Kata sandi anda telah kadaluarsa."
+
+msgid "Your password is inactive."
+msgstr "Kata sandi anda tidak aktif."
+
+msgid "Your login has expired."
+msgstr "Login anda telah kadaluarsa."
+
+msgid "  Contact the system administrator."
+msgstr "  Hubungi administrator sistem."
+
+msgid "  Choose a new password."
+msgstr "  Pilih sebuah kata sandi baru."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Kata sandi anda akan kadaluarsa dalam %ld hari.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Kata sandi anda akan kadaluarsa besok."
+
+msgid "Your password will expire today."
+msgstr "Kata sandi anda akan kadaluarsa hari ini."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Tidak dapat mengubah tts %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: ruas terlalu panjang\n"
+
+msgid "Environment overflow\n"
+msgstr "Lingkungan overflow\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Anda tidak boleh mengubah $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d sejak login terakhir.\n"
+"Terakhir %s pada %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: tidak bisa mendapatkan UID yang unik\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: tak mampu mendapatkan GID yang unik\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: tidak bisa mendapatkan UID yang unik\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: tidak bisa mendapatkan UID yang unik\n"
+
+msgid "Too many logins.\n"
+msgstr "Terlalu banyak login.\n"
+
+msgid "You have new mail."
+msgstr "Anda memiliki surat baru."
+
+msgid "No mail."
+msgstr "Tidak ada surat."
+
+msgid "You have mail."
+msgstr "Anda memiliki surat."
+
+msgid "no change"
+msgstr "tak ada perubahan"
+
+msgid "a palindrome"
+msgstr "sebuah palindrom"
+
+msgid "case changes only"
+msgstr "hanya perubahan huruf besar/kecil"
+
+msgid "too similar"
+msgstr "terlalu mirip"
+
+msgid "too simple"
+msgstr "terlalu sederhana"
+
+msgid "rotated"
+msgstr "pernah dipakai"
+
+msgid "too short"
+msgstr "terlalu pendek"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Kata sandi buruk: %s."
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() gagal, kesalahan nomor %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Password telah diubah."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: kata sandi diperbaharui dengan sukses\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Kata sandi tidak tepat untuk %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Tidak dapat cd ke \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Tidak terdapat direktori, masuk dengan HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Tidak dapat menjalankan %s"
+
+#, fuzzy, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Direktori root tidak sah \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Tidak dapat mengubah direktori root ke \"%s\"\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Tak dapat menentukan nama tty anda."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: kehabisan memori\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) gagal\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Tidak\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Penggunaan: chage [pilihan-pilihan] [NAMA-LOGIN]\n"
+"\n"
+"Pilihan-pilihan:\n"
+"  -d, --lastday LAST_DAY        atur pergantian password terakhir pada "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  atur kadaluarsa akun pada tanggal\n"
+"                                EXPIRE_DATE\n"
+"  -h, --help                    tampilkan pesan bantuan ini dan keluar\n"
+"  -I, --inactive INACTIVE       atur masa inaktif kata sandi setelah\n"
+"                                kadaluarsa pada INACTIVE\n"
+"  -l, --list                    tampilkan informasi umur akun\n"
+"  -m, --mindays MIN_DAYS        atur jumlah hari minimum sebelum kata sandi\n"
+"                                diganti menjadi MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        atur jumlah hari maksimum sebelum kata "
+"sandi\n"
+"                                diganti menjadi MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      atur hari peringatan kadaluarsa menjadi\n"
+"                                WARN_DAYS\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Masukkan nilai baru atau tekan ENTER untuk nilai bawaan"
+
+msgid "Minimum Password Age"
+msgstr "Umur Kata Sandi Minimal"
+
+msgid "Maximum Password Age"
+msgstr "Umur Kata Sandi Maksimal"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Penggantian Kata Sandi Terakhir (TTTT-MM-HH)"
+
+msgid "Password Expiration Warning"
+msgstr "Peringatan Kadaluarsanya Kata Sandi"
+
+msgid "Password Inactive"
+msgstr "Kata Sandi Tak-aktif"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Waktu Kadaluarsa Akun (TTTT-MM-HH)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Penggantian kata sandi terakhir\t\t\t\t\t: "
+
+msgid "never"
+msgstr "tak pernah"
+
+msgid "password must be changed"
+msgstr "password mesti diubah"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Kata sandi kadaluarsa\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Kata sandi tak aktif\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Akun kadaluarsa\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Jumlah hari minimum antara penggantian password\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Jumlah hari maksimum antara penggantian password\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Jumlah hari pemberian peringatan sebelum kadaluarsa\t: %ld\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: tanggal `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argumen numerik tak sah `%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: jangan gabungkan \"l\" dengan flag lain\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: ijin ditolak.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Tidak dapat menentukan nama pengguna anda.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: Otentikasi PAM gagal\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: tidak dapat mengunci berkas-berkas, coba lagi nanti\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: tidak dapat membuka berkas %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: gagal membuat proses: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: tak terdapat berkas kata sandi bayangan\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Mengubah informasi umur akun untuk %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: kesalahan saat mengubah ruas-ruas isian\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Penggunaan: %s [-f nama_lkp] [-r no_ruang] [-w telp_ktr]\n"
+"\t[-h telp_rmh] [-o lain_lain] [pengguna]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Penggunaan: %s [-f nama_lkp] [-r no_ruang] [-w telp_ktr] [-h telp_rmh]\n"
+
+msgid "Full Name"
+msgstr "Nama Lengkap"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Nomor Ruangan"
+
+msgid "Work Phone"
+msgstr "Telepon Kantor"
+
+msgid "Home Phone"
+msgstr "Telepon Rumah"
+
+msgid "Other"
+msgstr "Lain-lain"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Tidak dapat mengubah ID menjadi root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nama tidak sah: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: nomor ruang tidak sah: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: telepon kantor tidak sah: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: telepon rumah tidak sah: \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" berisi karakter-karakter ilegal\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" berisi karakter-karakter ilegal\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: tidak dapat mengubah pengguna '%s' pada klien NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: `%s' merupakan master NIS untuk klien ini.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Mengubah informasi pengguna dari %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: ruas terlalu panjang\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Penggunaan: chpasswd [pilihan-pilihan]\n"
+"\n"
+"Pilihan-pilihan:\n"
+"  -e, --encrypted               kata sandi yang diberikan telah terenkripsi\n"
+"  -h, --help                    tampilkan pesan bantuan ini dan keluar\n"
+"  -m, --md5                     gunakan enkripsi MD5 daripada DES bila kata\n"
+"                                sandi yang diberikan tak terenkripsi\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: -a hanya diperbolehkan dengan -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: baris %d: baris terlalu panjang\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: baris %d: kata sandi baru hilang\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: grup %s tidak ada\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: baris %d: tak dapat memperbaharui entri\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: kesalahan terdeteksi, perubahan diabaikan\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Login Shell"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Anda tidak boleh mengubah shell untuk %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Mengubah login shell untuk %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Entri tidak sah: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s merupakan shell yang tidak sah.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Penggunaan: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Login       Gagal    Maks.   Terakhir                 Pada\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds tersisa]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds terkunci]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Pengguna tak dikenal: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: tidak dapat membuka berkas %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Kata sandi untuk %s tidak dapat diganti.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: kata sandi bayangan grup diperlukan untuk -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: grup %s tidak ada\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: gagal membuat proses: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Mengubah kata sandi untuk grup %s\n"
+
+msgid "New Password: "
+msgstr "Kata sandi baru: "
+
+msgid "Re-enter new password: "
+msgstr "Masukkan lagi kata sandi baru: "
+
+msgid "They don't match; try again"
+msgstr "Kedua kata sandi tidak identik; coba lagi"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Coba lagi nanti\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Menambahkan pengguna %s ke grup %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Mengeluarkan pengguna %s dari grup %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Bukan sebuah tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: nama grup %s tidak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "nama grup `%s' tidak sah\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K memerlukan NAMA=NILAI\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: grup %s telah ada\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr "Penggunaan: groupdel grup\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: tak dapat mengubah nama direktori %s menjadi %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: tidak dapat mengubah pengguna '%s' pada klien NIS.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: grup %s tidak ada\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: grup `%s' merupakan grup NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s merupakan master NIS\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: pengguna %s merupakan pengguna NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: kehabisan memori saat update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "nama grup `%s' tidak sah\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: grup %s merupakan sebuah grup NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: pengguna %s tak dikenal\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Penggunaan: %s [-r] [-s] [grup [gbayangan]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Penggunaan: %s [-r] [-s] [grup]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s dan -r tidak kompatible\n"
+
+msgid "invalid group file entry"
+msgstr "entri berkas grup tidak sah"
+
+#, fuzzy, c-format
+msgid "delete line '%s'? "
+msgstr "hapus baris `%s'? "
+
+msgid "duplicate group entry"
+msgstr "entri grup berulang"
+
+#, fuzzy, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nama grup `%s' tidak sah\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "nama grup `%s' tidak sah\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grup %s: tak ada pengguna %s\n"
+
+#, fuzzy, c-format
+msgid "delete member '%s'? "
+msgstr "hapus anggota `%s'? "
+
+#, fuzzy, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "entri tidak ditemukan pada berkas grup\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "grup bayangan %s: tak ada pengguna %s\n"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "entri berkas grup bayangan tidak sah"
+
+msgid "duplicate shadow group entry"
+msgstr "entri grup bayangan berulang"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grup bayangan %s: tak ada pengguna administratif %s\n"
+
+#, fuzzy, c-format
+msgid "delete administrative member '%s'? "
+msgstr "hapus anggota administratif `%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grup bayangan %s: tak ada pengguna %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: berkas-berkas telah diperbaharui\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: tak ada perubahan\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Penggunaan: groupdel grup\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Penggunaan: groupdel grup\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: tidak dapat memperbaharui berkas %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Penggunaan: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Penggunaan: id\n"
+
+msgid " groups="
+msgstr " grup="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Penggunaan: lastlog [pilihan-pilihan]\n"
+"\n"
+"Pilihan-pilihan:\n"
+"  -b, --before HARI     cetak hanya record lastlog yang lebih tua dari HARI\n"
+"  -h, --help            tampilkan pesan bantuan ini dan keluar\n"
+"  -t, --time HARI       cetak hanya record lastlog yang lebih baru dari "
+"HARI\n"
+"  -u, --user NAMA       cetak record lastlog untuk pengguna dengan nama "
+"NAMA\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Nama pengguna    Port     Dari             Terakhir"
+
+msgid "Username                Port     Latest"
+msgstr "Nama pengguna           Port     Terakhir"
+
+msgid "**Never logged in**"
+msgstr "**Tak pernah log in**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: argumen tak terduga: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Penggunaan: %s [-p] [nama]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "            %s [-p] [-h host] [-f nama]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "            %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Waktu login tidak sah"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistem ditutup untuk pengelolaan rutin"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Pemutusan hubungan diabaikan -- login root diperbolehkan.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Login time out setelah %d detik.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Tanpa entri utmp. Anda mesti menjalankan \"login\" dari level terendah \"sh\""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Kegagalan PAM, berhenti: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Jumlah pengulangan maksimum terlampaui (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: penghentian diminta oleh PAM\n"
+
+msgid "Login incorrect"
+msgstr "Login tidak tepat"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: gagal membuat proses: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Perhatian: login dibolehkan setelah penguncian sementara."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Login terakhir: %s pada %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Login terakhir: %.19s pada %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " dari %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"waktu login telah berlebihan\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Penggunaan: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Penggunaan: newgrp [-] [grup]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Penggunaan: sg grup [[-c] perintah]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Kata sandi lama: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: gagal membuat proses: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+msgid "too many groups\n"
+msgstr "terlalu banyak grup\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: grup %s tidak ada\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: nama pengguna `%s' tak sah\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: nama pengguna `%s' tak sah\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: baris %d: baris tidak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: tak dapat memperbaharui entri untuk pengguna %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: baris %d: tak dapat membuat GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: baris %d: tak dapat membuat GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: pengguna %s tak ada\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: baris %d: tak dapat memperbaharui kata sandi\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: baris %d: mkdir gagal\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: baris %d: chown gagal\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: baris %d: tak dapat memperbaharui entri\n"
+
+#, fuzzy
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Penggunaan: passwd [pilihan-pilihan] [nama-pengguna]\n"
+"\n"
+"Pilihan-pilihan:\n"
+"  -a, --all                     laporkan status kata sandi untuk semua akun\n"
+"  -d, --delete                  hapus password untuk pengguna yang "
+"diberikan\n"
+"  -e, --expire                  paksakan kadaluarsa kata sandi untuk akun\n"
+"                                pengguna\n"
+"  -h, --help                    tampilkan pesan bantuan ini dan keluar\n"
+"  -k, --keep-tokens             ganti kata sandi hanya bila telah "
+"kadaluarsa\n"
+"  -i, --inactive INAKTIF        atur masa inaktif kata sandi setelah\n"
+"                                kadaluarsa pada INAKTIF\n"
+"  -l, --lock                    blok akun pengguna\n"
+"  -n, --mindays HARI_MIN        atur jumlah hari minimum sebelum kata sandi\n"
+"                                diganti pada HARI_MIN\n"
+"  -q, --quiet                   mode tenang\n"
+"  -r, --repository REPOSITORI   ubah kata sandi pada repositori REPOSITORI\n"
+"  -S, --status                  laporkan status kata sandi dari akun "
+"pengguna\n"
+"  -u, --unlock                  buka bloking akun pengguna\n"
+"  -w, --warndays HARI           atur hari peringatan kadaluarsa pada HARI\n"
+"  -x, --maxdays HARI_MAKS       atur jumlah hari maksimum sebelum kata "
+"sandi\n"
+"                                diganti pada HARI_MAKS\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Kata sandi lama: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Masukkan password baru (minimim %d, maksimum %d karakter)\n"
+"Mohon gunakan kombinasi huruf besar, huruf kecil dan angka.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Masukkan password baru (minimim %d, maksimum %d karakter)\n"
+"Mohon gunakan kombinasi huruf besar, huruf kecil dan angka.\n"
+
+msgid "New password: "
+msgstr "kata sandi baru: "
+
+msgid "Try again."
+msgstr "Coba lagi."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Kata sandi lemah (masukkan lagi untuk tetap menggunakannya)."
+
+msgid "They don't match; try again.\n"
+msgstr "Kata sandi tidak sama; coba lagi.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Kata sandi untuk %s tidak dapat diganti.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Kata sandi untuk %s tidak dapat diganti.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: repositori %s tidak didukung\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Anda tak boleh melihat atau mengubah info kata sandi untuk %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Mengganti kata sandi untuk %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Kata sandi untuk %s tidak diubah.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Password telah diubah."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Peringatan Kadaluarsanya Kata Sandi"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Penggunaan: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s dan -r tidak kompatible\n"
+
+msgid "invalid password file entry"
+msgstr "entri kata sandi tak sah"
+
+msgid "duplicate password entry"
+msgstr "entri kata sandi berduplikat"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nama pengguna tak sah '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "nama pengguna tak sah '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "pengguna %s: tak ada grup %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "pengguna %s: tak terdapat direktori %s\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "pengguna %s: tak terdapat program %s\n"
+
+#, fuzzy, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "tak terdapat entri kata sandi yang cocok\n"
+
+#, fuzzy, c-format
+msgid "add user '%s' in %s? "
+msgstr "grup bayangan %s: tak ada pengguna %s\n"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "entri kata sandi bayangan tak sah"
+
+msgid "duplicate shadow password entry"
+msgstr "entri kata sandi bayangan terduplikasi"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "pengguna %s: pergantian kata sandi terakhir terjadi dimasa depan\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: tidak dapat membuka berkas %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Penggunaan: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Penggunaan: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Akses su untuk account itu DITOLAK.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Otentikasi kata sandi diabaikan.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Silakan masukkan kata sandi anda SENDIRI sebagai otentikasi.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Penggunaan: su [pilihan-pilihan] [login]\n"
+"\n"
+"Pilihan-pilihan:\n"
+"  -c, --command PERINTAH        berikan PERINTAH yang akan diberikan\n"
+"                                pada shell\n"
+"  -h, --help                    tampilkan pesan bantuan ini dan keluar\n"
+"  -, -l, --login                buat shell menjadi shell login\n"
+"  -m, -p,\n"
+"  --preserve-environment        jangan reset  variabel lingkungan, dan\n"
+"                                pertahankan shell yang sama\n"
+"  -s, --shell SHELL             gunakan shell SHELL daripada bawaan\n"
+"                                di passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: mesti dijalankan dari sebuah terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: kesalahan %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Id tak dikenal: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Anda tak diperbolehkan untuk su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Masukkan kata sandi anda sendiri)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Diabaikan)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: Otentikasi PAM gagal\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Anda tak diperbolehkan untuk su %s\n"
+
+msgid "No shell\n"
+msgstr "Tak ada shell\n"
+
+msgid "No password file"
+msgstr "Tak ada berkas kata sandi"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Tak ada entri kata sandi untuk 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Ketikkan control-d untuk melanjutkan startup normal,\n"
+"(atau berikan kata sandi root untuk pengelolaan sistem):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Memasuki Mode Pengelolaan Sistem"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: tak dapat membuat berkas-berkas bawaan yang baru\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: tak dapat membuka berkas-berkas bawaan yang baru\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: baris %d: chown gagal\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: ubah nama: %s"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: grup `%s' merupakan grup NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: grup yang diberikan terlalu banyak (maks %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Penggunaan: %s [input]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: direktori awal `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: komentar `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: direktori rumah `%s' tak sah\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: kata sandi bayangan dibutuhkan untuk -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: kata sandi banyangan diperlukan untuk -f\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ruas `%s' tak sah\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: shell `%s' tak sah\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: tak dapat membuat direktori %s\n"
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: pengguna %s telah ada\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: grup %s telah ada - jika ingin menambah pengguna ke grup itu, pakai -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: tak dapat membuat %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u tidak unik\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: tak dapat membuat %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: perhatian: direktori rumah telah ada.\n"
+"Tak menyalin berkas apapun dari direktori skel ke situ.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: tidak dapat menghapus grup %s yg merupakan grup utama dari pengguna "
+"lain.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: perhatian: tak dapat menghapus "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s tak dimiliki oleh %s, tidak menghapus\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: pengguna %s merupakan pengguna NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: pengguna %s saat ini sedang login\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: direktori rumah `%s' tak sah\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: tak menghapus dir %s (karena akan menghapus rumah dari %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: kesalahan saat menghapus direktori %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Penggunaan: usermod [pilihan-pilihan] NAMA-LOGIN\n"
+"\n"
+"Pilihan-pilihan:\n"
+"  -a, --append GRUP             tambahkan pengguna ke grup tambahan GRUP\n"
+"  -c, --comment KOMENTAR        nilai baru dari ruas GECOS\n"
+"  -d, --home DIR_RUMAH          direktori rumah baru dari pengguna baru\n"
+"  -e, --expiredate TANGGAL      atur tanggal kadaluarsa akun pada TANGGAL\n"
+"  -f, --inactive INAKTIF        atur masa inaktif setelah kadaluarsa\n"
+"                                pada INAKTIF\n"
+"  -g, --gid GRUP                paksakan GRUP sebagai grup login awalan\n"
+"  -G, --groups GRUP-GRUP        daftar grup-grup tambahan\n"
+"  -h, --help                    tampilkan pesan bantuan ini dan keluar\n"
+"  -l, --login LOGIN             nilai baru dari nama pengguna\n"
+"  -L, --lock                    blok akun pengguna\n"
+"  -m, --move-home               pindahkan isi direktori rumah ke lokasi "
+"baru\n"
+"                                (hanya gunakan dengan -d)\n"
+"  -o, --non-unique              perbolehkan UID terduplikasi (tak-unik)\n"
+"  -p, --password PASSWORD       gunakan kata sandi baru yang terenkripsi\n"
+"  -s, --shell SHELL             shell login baru bagi pengguna\n"
+"  -u, --uid UID                 UID baru untuk pengguna\n"
+"  -U, --unlock                  buka bloking pengguna\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: pengguna %s telah ada\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: tak diberikan tanda-tanda/bendera\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: diperlukan kata sandi bayangan untuk -e dan -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: direktori %s telah ada\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: tak dapat membuat %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: tak dapat chown %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: perhatian: gagal menghapus direktori rumah lama %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: tak dapat mengubah nama direktori %s menjadi %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: perhatian %s tak dimiliki oleh %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "gagal mengganti pemilik kotak-surat"
+
+msgid "failed to rename mailbox"
+msgstr "gagal mengubah nama kotak-surat"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Penggunaan: vipw [pilihan-pilihan]\n"
+"\n"
+"Pilihan-pilihan:\n"
+"  -g, --group                   sunting basisdata grup\n"
+"  -h, --help                    tampilkan pesan bantuan ini dan keluar\n"
+"  -p, --passwd                  sunting basisdata kata sandi\n"
+"  -q, --quiet                   mode tenang\n"
+"  -s, --shadow                  sunting basisdata shadow atau gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: gagal membuang hak (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s tidak berubah\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Tidak dapat mengunci berkas"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Tidak dapat mengunci berkas"
+
+msgid "Couldn't make backup"
+msgstr "Tidak dapat membuat backup"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: tidak dapat mengembalikan %s: %s (perubahan ada dalam %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Penggunaan: faillog [pilihan-pilihan]\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ "  -a, --all                     tampilkan record faillog records untuk\n"
+#~ "                                semua pengguna\n"
+#~ "  -h, --help                    tampilkan pesan bantuan ini dan keluar\n"
+#~ "  -l, --lock-time DTK           setelah kegagalan login blok akun selama\n"
+#~ "                                DTK detik\n"
+#~ "  -m, --maximum MAX             atur penghitung kegagalan login maksimum\n"
+#~ "                                pada MAX\n"
+#~ "  -r, --reset                   reset penghitung kegagalan login\n"
+#~ "  -t, --time HARI               tampilkan record faillog yang lebih baru\n"
+#~ "                                dari HARI\n"
+#~ "  -u, --user NAMA               tampilkan record faillog atau atur\n"
+#~ "                                penghitung kegagalan dan batasnya (bila\n"
+#~ "                                digunakan dengan -r, -m atau -l) hanya\n"
+#~ "                                untuk pengguna dengan nama NAMA\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Usage: groupadd [pilihan-pilihan] namagroup\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ "  -f, --force                   paksa status sukses saat keluar bila "
+#~ "grup\n"
+#~ "                                telah ada\n"
+#~ "  -g, --gid GID                 gunakan GID untuk grup yang baru ini\n"
+#~ "  -h, --help                    tampilkan pesan bantuan ini dan keluar\n"
+#~ "  -K, --key KEY=VALUE           ganti nilai bawaan pada /etc/login.defs\n"
+#~ "  -o, --non-unique              perbolehkan pembuatan grup dengan GID\n"
+#~ "                                terduplikasi (tak-unik)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Usage: groupadd [pilihan-pilihan] namagroup\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ "  -f, --force                   paksa status sukses saat keluar bila "
+#~ "grup\n"
+#~ "                                telah ada\n"
+#~ "  -g, --gid GID                 gunakan GID untuk grup yang baru ini\n"
+#~ "  -h, --help                    tampilkan pesan bantuan ini dan keluar\n"
+#~ "  -K, --key KEY=VALUE           ganti nilai bawaan pada /etc/login.defs\n"
+#~ "  -o, --non-unique              perbolehkan pembuatan grup dengan GID\n"
+#~ "                                terduplikasi (tak-unik)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Penggunaan: useradd [pilihan-pilihan] NAMA-LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       direktori awal untuk direktori rumah "
+#~ "dari\n"
+#~ "                                pengguna baru\n"
+#~ "  -c, --comment KOMENTAR        atur ruas GECOS untuk pengguna baru\n"
+#~ "  -d, --home-dir DIR_RUMAH      direktori rumah untuk pengguna baru\n"
+#~ "  -D, --defaults                cetak atau simpan konfigurasi bawaan "
+#~ "useradd\n"
+#~ "  -e, --expiredate KADALUARSA   atur tanggal kadaluarsa pada KADALUARSA\n"
+#~ "  -f, --inactive INAKTIF        atur masa inaktif kata sandi setelah\n"
+#~ "                                kadaluarsa menjadi INAKTIF\n"
+#~ "  -g, --gid GRUP                paksakan grup GRUP untuk pengguna baru\n"
+#~ "  -G, --groups GRUP-GRUP        daftar grup-grup tambahan untuk\n"
+#~ "                                pengguna baru\n"
+#~ "  -h, --help                    tampilkan pesan bantuan ini dan keluar\n"
+#~ "  -k, --skel SKEL_DIR           berikan direktori skel alternatif\n"
+#~ "  -K, --key KEY=VALUE           ganti nilai-nilai bawaan pada /etc/login."
+#~ "defs\n"
+#~ "  -m, --create-home             buat direktori rumah untuk pengguna baru\n"
+#~ "  -o, --non-unique              perbolehkan pembuatan pengguna dengan\n"
+#~ "                                UID terduplikasi (tak-unik)\n"
+#~ "  -p, --password PASSWORD       gunakan kata sandi terenkripsi untuk\n"
+#~ "                                pengguna baru\n"
+#~ "  -s, --shell SHELL             shell login untuk pengguna baru\n"
+#~ "  -u, --uid UID                 paksakan uid UID untuk pengguna baru\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Kata sandi dibuat kadaluarsa."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas kata sandi\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: tidak dapat membuka berkas kata sandi\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas kata sandi bayangan\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: tidak dapat membuka berkas kata sandi bayangan\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: tidak dapat menulis kembali berkas kata sandi bayangan\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: tidak dapat menulis kembali berkas kata sandi\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: tidak dapat memperbaharui berkas kata sandi\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: tidak dapat memperbaharui berkas kata sandi bayangan\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNama Lengkap: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNomor Ruangan: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelepon Kantor: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelepon Rumah: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Tidak dapat mengunci berkas kata sandi; coba lagi nanti.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Tidak dapat membuka berkas kata sandi.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s tidak ditemukan pada /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Kesalahan saat memperbaharui entri kata sandi.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Tidak dapat menyimpan perubahan berkas kata sandi.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Tidak dapat membuka kunci berkas kata sandi.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas grup\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: tidak dapat membuka berkas grup\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: tidak dapat membuka berkas kata sandi bayangan\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: kesalahan saat memperbaharui berkas kata sandi bayangan\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: errot memperbaharui entri grup\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: baris %d: grup %s tak dikenal\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: baris %d: tak dapat memperbaharui entri\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas kata sandi bayangan\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: kesalahan saat memperbaharui berkas kata sandi bayangan\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: kesalahan saat memperbaharui berkas kata sandi\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: baris %d: pengguna %s tak dikenal\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: baris %d: tidak dapat memperbaharui entri kata sandi\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: pengguna tak dikenal\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Pengguna tak dikenal: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Penggunaan: %s [-r|-R] grup\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a pengguna] grup\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d pengguna] grup\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A pengguna,...] [-M pengguna,...] grup\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M pengguna,...] grup\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: tidak mendapatkan kunci\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: tidak mendapatkan kunci untuk berkas bayangan\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: tidak dapat membuka berkas\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: tidak dapat menuliskan kembali berkas\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: tidak dapat menuliskan kembali berkas bayangan\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: tidak dapat membuka kunci berkas\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: tidak dapat memperbaharui entri\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: tidak dapat memperbaharui entri bayangan\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "grup tak dikenal: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: tidak dapat membuka berkas\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: tidak dapat membuka berkas kata sandi bayangan\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Anda siapa?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: anggota tak dikenal %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: kesalahan saat menambahkan entri grup yang baru\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: tidak dapat menuliskan kembali berkas grup\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: tidak dapat menuliskan kembali berkas grup bayangan\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas grup\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: tidak dapat membuka berkas grup\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas grup bayangan\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: tidak dapat membuka berkas grup bayangan\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u tidak unik\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: kesalahan saat menghapus entri grup\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: kesalahan saat menghapus entri group bayangan\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: tidak dapat menghapus grup utama dari pengguna.\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: Otentikasi PAM gagal\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas grup\n"
+
+#, fuzzy
+#~ msgid "Unable to open group file\n"
+#~ msgstr "%s: tidak dapat membuka berkas grup\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: tak dapat membuka berkas grup\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s tidak ditemukan dalam /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u bukan GID yang unik\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s bukan nama yang unik\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: tak dapat menulis kembali berkas kata sandi\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: tak dapat mengunci berkas kata sandi\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: tak dapat membuka berkas kata sandi\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: tidak dapat mengunci berkas %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: tidak dapat memperbaharui entri bayangan untuk %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: tidak dapat memperbaharui entri untuk grup %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: tidak dapat mengunci berkas grup bayangan\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: tidak dapat membuka berkas grup banyangan\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: tidak dapat menghapus grup bayangan %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: tidak dapat memperbaharui berkas grup bayangan\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: tidak dapat memperbaharui berkas grup\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: tidak dapat menghapus berkas grup bayangan\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "UID tak dikenal: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "GID tidak dikenal: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: grup %s tidak ada\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: pengguna %s tak ada\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: nama pengguna `%s' tak sah\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: tidak dapat mengunci /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: tidak dapat mengunci /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: tidak dapat mengunci /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: tidak dapat mengunci /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: tidak dapat membuka berkas-berkas\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: kesalahan saat memperbaharui berkas-berkas\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: baris %d: tak menemukan pengguna %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: tak dapat menghapus entri passwd untuk %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: tak dapat mengunci berkas passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: tak dapat membuka berkas passwd\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: tak dapat menghapus entri bayangan untuk %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: tak dapat memperbaharui berkas shadow\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: tak dapat memperbaharui berkas passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: tak dapat memperbaharui entri untuk pengguna %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: tak dapat menghapus berkas kata sandi bayangan\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: GID %s tak dikenal\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: grup %s tak dikenal\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: kehabisan memori saat update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: tak dapat menulis kembali berkas kata sandi\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: tak dapat menulis kembali berkas kata sandi bayangan\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: tak dapat mengunci berkas kata sandi bayangan\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: tak dapat membuka berkas kata sandi bayangan\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: kesalahan saat mengunci berkas grup\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: kesalahan saat membuka berkas grup\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: kesalahan saat mengunci berkas grup bayangan\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: kesalahan saat membuka berkas grup bayangan\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: kesalahan saat menambah entri baru kata sandi\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: kesalahan saat menambah entri baru kata sandi bayangan\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: perhatian: CREATE_HOME tak didukung, sebaiknya gunakan -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: errot memperbaharui entri grup\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: errot memperbaharui entri grup\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: tak dapat membuka berkas grup\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: tak dapat membuka berkas grup bayangan\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: kesalahan saat menghapus entri kata sandi\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: kesalahan saat menghapus entri kata sandi bayangan\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: pengguna %s tak ada\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: kesalahan saat menambahkan entri grup yang baru\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu tak unik\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: kesalahan saat mengganti entri kata sandi\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: kesalahan saat menghapus entri kata sandi\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: kesalahan saat menghapus entri kata sandi bayangan\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: tak mampu mendapatkan GID yang unik\n"
+
+#, fuzzy
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " pada `%.100s' dari `%.200s'"
+
+#, fuzzy
+#~ msgid " on '%.100s'"
+#~ msgstr " pada `%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: baris %d: tak dapat membuat UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: nama %s tidak unik\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Penggunaan: chgpasswd [pilihan-pilihan]\n"
+#~ "\n"
+#~ "Pilihan-pilihan:\n"
+#~ "  -e, --encrypted\tkata sandi yang diberikan telah terenkripsi\n"
+#~ "  -h, --help\t\ttampilkan pesan bantuan ini dan keluar\n"
+#~ "  -m, --md5\t\tgunakan enkripsi MD5 daripada DES bila kata sandi\n"
+#~ "\t\t\tyang diberikan tak terenkripsi\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Tak ada berkas kata sandi\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Maaf.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Maaf, kata sandi untuk %s belum dapat diganti.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Maaf."
diff --git a/po/insert-header.sin b/po/insert-header.sin
new file mode 100644 (file)
index 0000000..b26de01
--- /dev/null
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/it.gmo b/po/it.gmo
new file mode 100644 (file)
index 0000000..7a37028
Binary files /dev/null and b/po/it.gmo differ
diff --git a/po/it.po b/po/it.po
new file mode 100644 (file)
index 0000000..0462e1c
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,2873 @@
+# Italian translations for shadow package.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the shadow package.
+# Giuseppe Sacco <eppesuig@debian.org>, 2004.
+# Danilo Piazzalunga <danilopiazza@gmail.com>, 2004-2006.
+#
+# Convenzioni utilizzate per tradurre i termini più frequenti:
+#
+# “faillog (record)”..................: «(record degli) accessi falliti»
+# “group file”........................: «file dei gruppi»
+# “logged in”.........................: «collegato»
+# “login”.............................: «accesso» (nella maggioranza dei casi)
+# “login” [user account]..............: «login»
+# “mail spool”........................: «spool di posta»
+# “primary group”.....................: «gruppo principale»
+# “shadow file”.......................: «file shadow»
+# “shadow group”......................: «gruppo shadow»
+# “(shadow) group file”...............: «file dei gruppi (shadow)»
+# “shadow password”...................: «shadow password»
+# “(shadow) password file”............: «file delle (shadow) password»
+# “superuser”.........................: «root» o «amministratore»
+# “user name”.........................: «nome utente»
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.1.1\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2008-03-27 14:40+0100\n"
+"Last-Translator: Danilo Piazzalunga <danilopiazza@gmail.com>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Più di una voce chiamata «%s» in %s. Correggere il problema con pwck o "
+"grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "metodo di cifratura non supportato da libcrypt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Impossibile allocare spazio per le informazioni di configurazione.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"errore di configurazione: oggetto «%s» sconosciuto (avvisare "
+"l'amministratore)\n"
+
+msgid "Password: "
+msgstr "Password: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Password di %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Attenzione: gruppo «%s» sconosciuto\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Attenzione: troppi gruppi\n"
+
+msgid "Your password has expired."
+msgstr "La password in uso è scaduta."
+
+msgid "Your password is inactive."
+msgstr "La password in uso è inattiva."
+
+msgid "Your login has expired."
+msgstr "Il login in uso è scaduto."
+
+msgid "  Contact the system administrator."
+msgstr "  Contattare l'amministratore del sistema."
+
+msgid "  Choose a new password."
+msgstr "  Scegliere una nuova password."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "La password in uso scadrà tra %ld giorni.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "La password in uso scadrà domani."
+
+msgid "Your password will expire today."
+msgstr "La password in uso scade oggi."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Impossibile cambiare i permessi al device %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: lunghezza dei campi eccessiva\n"
+
+msgid "Environment overflow\n"
+msgstr "Dimensione dell'ambiente eccessiva\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Non si può modificare $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d tentativo fallito dall'ultimo accesso.\n"
+"L'ultimo è stato %s su %s.\n"
+msgstr[1] ""
+"%d tentativi falliti dall'ultimo accesso.\n"
+"L'ultimo è stato %s su %s.\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "Impossibile ottenere un UID univoco (nessun UID disponibile)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "Impossibile ottenere un GID univoco (nessun GID disponibile)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "Impossibile ottenere un UID univoco (nessun UID disponibile)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "Impossibile ottenere un UID univoco (nessun UID disponibile)\n"
+
+# NdT: Riferito al numero massimo di accessi concorrenti per un utente.
+msgid "Too many logins.\n"
+msgstr "Troppi accessi.\n"
+
+msgid "You have new mail."
+msgstr "C'è nuova posta."
+
+msgid "No mail."
+msgstr "Nessun messaggio di posta."
+
+msgid "You have mail."
+msgstr "C'è la solita posta."
+
+msgid "no change"
+msgstr "nessuna modifica"
+
+msgid "a palindrome"
+msgstr "palindromo"
+
+msgid "case changes only"
+msgstr "cambiano solo maiuscole/minuscole"
+
+msgid "too similar"
+msgstr "simile alla precedente"
+
+msgid "too simple"
+msgstr "troppo semplice"
+
+msgid "rotated"
+msgstr "rotazione"
+
+msgid "too short"
+msgstr "troppo corta"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Password non valida: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() ha restituito l'errore %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Password cambiata."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: password aggiornata correttamente\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Password sbagliata per %s\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Valore di ENCRYPT_METHOD «%s» non valido.\n"
+"Viene usato il valore predefinito, DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Impossibile spostarsi nella directory «%s»\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Directory non presente, accesso con HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Impossibile eseguire %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Directory root «%s» non valida\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Impossibile cambiare la directory root in «%s»\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Impossibile determinare il nome del terminale."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: memoria esaurita\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) non riuscita\n"
+
+msgid "No"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Uso: chage [OPZIONI] [LOGIN]\n"
+"\n"
+"Opzioni:\n"
+"  -d, --lastday ULTIMO_CAMBIO   imposta la data dell'ULTIMO_CAMBIO della\n"
+"                                password\n"
+"  -E, --expiredate SCADENZA     imposta la data di SCADENZA dell'account\n"
+"  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+"  -i, --inactive INATTIVITÀ     imposta il numero di giorni di INATTIVITÀ\n"
+"                                della password oltre la sua scadenza\n"
+"  -l, --list                    mostra le informazioni sulla durata\n"
+"                                dell'account\n"
+"  -m, --mindays MINIMO          imposta a il numero MINIMO di giorni tra i\n"
+"                                cambi di password\n"
+"  -M, --maxdays MASSIMO         imposta il numero MASSIMO di giorni tra i\n"
+"                                cambi di password\n"
+"  -w, --warndays PREAVVISO      imposta il numero di giorni di PREAVVISO\n"
+"                                prima della scadenza della password\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Inserire il nuovo valore o premere INVIO per quello predefinito"
+
+msgid "Minimum Password Age"
+msgstr "Durata minima della password"
+
+msgid "Maximum Password Age"
+msgstr "Durata massima della password"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Ultimo cambio della password (AAAA-MM-GG)"
+
+msgid "Password Expiration Warning"
+msgstr "Avviso di scadenza della password"
+
+msgid "Password Inactive"
+msgstr "Inattività della password"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data di scadenza dell'account (AAAA-MM-GG)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Ultimo cambio della password\t\t\t\t: "
+
+msgid "never"
+msgstr "mai"
+
+msgid "password must be changed"
+msgstr "la password deve essere cambiata"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Scadenza della password\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Inattività della password\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Scadenza dell'account\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Numero minimo di giorni tra i cambi di password\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Numero massimo di giorni tra i cambi di password\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Giorni di preavviso prima della scadenza della password\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: data «%s» non valida\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argomento numerico «%s» non valido\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: non includere «l» con altri flag\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Permesso negato.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: impossibile determinare il proprio nome utente.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: autenticazione PAM non riuscita\n"
+
+#, fuzzy, c-format
+#| msgid "Cannot lock the password file; try again later.\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr ""
+"Impossibile fare il lock del file delle password; riprovare più tardi.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: impossibile aprire il file %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failure forking: %s\n"
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: impossibile eseguire fork(): %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: manca il file delle shadow password\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Modifica delle informazioni sulla durata dell'account di %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: errore nel cambiare i campi\n"
+
+# NdT: L'output è allineato se "%s" == "chfn".
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Uso: %s [-f NOME_COMPLETO] [-r NUM_STANZA] [-w TEL_LAVORO]\n"
+"          [-h TEL_CASA] [-o ALTRO] [UTENTE]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Uso: %s [-f NOME_COMPLETO] [-r NUM_STANZA] [-w TEL_LAVORO] [-h TEL_CASA]\n"
+
+msgid "Full Name"
+msgstr "Nome completo"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Stanza n°"
+
+msgid "Work Phone"
+msgstr "Numero telefonico di lavoro"
+
+msgid "Home Phone"
+msgstr "Numero telefonico di casa"
+
+msgid "Other"
+msgstr "Altro"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Impossibile cambiare ID a root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nome «%s» non valido\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: numero di stanza «%s» non valido\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: telefono di lavoro «%s» non valido\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: telefono di casa «%s» non valido\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: «%s» contiene caratteri non ammessi\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: «%s» contiene caratteri non ammessi\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: impossibile modificare l'utente «%s» sul client NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: «%s» è il NIS master per questo client.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Modifica delle informazioni relative all'utente %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: lunghezza dei campi eccessiva\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Uso: %s [OPZIONI]\n"
+"\n"
+"Opzioni:\n"
+"  -c, --crypt-method            il metodo di cifratura (uno di %s)\n"
+"  -e, --encrypted               le password fornite sono cifrate\n"
+"  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+"  -m, --md5                     cifra la password in chiaro usando\n"
+"                                l'algoritmo MD5\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds              il numero di passaggi SHA per gli\n"
+"                                algoritmi di cifratura SHA*\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s flag is ONLY allowed with the %s flag\n"
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: è permesso usare il flag %s solo con il flag %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: i flag -c, -e e -m sono mutuamente esclusivi\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: metodo di cifratura «%s» non supportato\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: riga %d: riga troppo lunga\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: riga %d: manca la nuova password\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: gruppo «%s» inesistente\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: riga %d: impossibile aggiornare la voce\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: rilevato un errore; le modifiche vengono ignorate\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -s, --sha-rounds              il numero di passaggi SHA per gli\n"
+"                                algoritmi di cifratura SHA*\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Uso: chsh [OPZIONI] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+"  -s, --shell SHELL             nuova shell di login per l'utente\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Shell di login"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Non è permesso cambiare la shell di %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Cambio della shell di login di %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: voce «%s» non valida\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s non è una shell valida.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Uso: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+# NdT: Vedere faillog(5) per il significato dei campi. Il campo "On"
+# è il device tty su cui è avvenuto l'ultimo accesso fallito.
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Login       Errori   Massimo Ultimo accesso           Su\n"
+
+# NdT: La «s» indica l'unità di misura (secondi).
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds rimasti]"
+
+# NdT: La «s» indica l'unità di misura (secondi).
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds blocco]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unknown user or range: %s\n"
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Utente o intervallo «%s» sconosciuto\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: impossibile aprire il file %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "La password di %s non può essere cambiata.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: l'opzione -A richiede le shadow password per i gruppi\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: gruppo «%s» inesistente\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failure forking: %s\n"
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: impossibile eseguire fork(): %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Cambio della password del gruppo %s\n"
+
+msgid "New Password: "
+msgstr "Nuova password: "
+
+msgid "Re-enter new password: "
+msgstr "Reimmettere la nuova password: "
+
+msgid "They don't match; try again"
+msgstr "Non corrispondono; provare di nuovo"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: riprovare più tardi\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Aggiunta dell'utente %s al gruppo %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Rimozione dell'utente %s dal gruppo %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: non è un terminale\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -s, --sha-rounds              il numero di passaggi SHA per gli\n"
+"                                algoritmi di cifratura SHA*\n"
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds              il numero di passaggi SHA per gli\n"
+"                                algoritmi di cifratura SHA*\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s non è un nome di gruppo valido\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid group name `%s'\n"
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: nome di gruppo «%s» non valido\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K richiede NOME=VALORE\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: gruppo «%s» già esistente\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Membro già esistente\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Uso: groupdel GRUPPO\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: impossibile rinominare la directory %s in %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot change the primary group of user '%s' from %u to %u.\n"
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+"%s: impossibile modificare il gruppo principale dell'utente «%s» da %u a %u.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: gruppo «%s» inesistente\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: il gruppo «%s» è un gruppo NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s è il NIS master\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: l'utente %s è un utente NIS\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Out of memory. Cannot update the group database.\n"
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: memoria esaurita. Impossibila aggiornare il database dei gruppi.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid group name `%s'\n"
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: nome di gruppo «%s» non valido\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: il gruppo «%s» è un gruppo NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: utente «%s» sconosciuto\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Uso: %s [-r] [-s] [GRUPPO [GSHADOW]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Uso: %s [-r] [-s] [GRUPPO]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s e -r sono incompatibili\n"
+
+msgid "invalid group file entry"
+msgstr "voce non valida nel file dei gruppi"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "eliminare la riga «%s»? "
+
+msgid "duplicate group entry"
+msgstr "voce duplicata nel file dei gruppi"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nome di gruppo «%s» non valido\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "nome di gruppo «%s» non valido\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "gruppo %s: nessun utente %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "eliminare il membro «%s»? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "nessuna voce corrispondente nel file dei gruppi %s\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "aggiungere il gruppo «%s» in %s? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "voce non valida nel file dei gruppi shadow"
+
+msgid "duplicate shadow group entry"
+msgstr "voce duplicata nel file dei gruppi shadow"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "gruppo shadow %s: nessun utente amministrativo %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "eliminare il membro amministrativo «%s»? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "gruppo shadow %s: nessun utente %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: i file sono stati aggiornati\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: nessuna modifica\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Uso: groupdel GRUPPO\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Uso: groupdel GRUPPO\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: impossibile aggiornare il file %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Uso: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Uso: id\n"
+
+msgid " groups="
+msgstr " gruppi="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Uso: lastlog [OPZIONI]\n"
+"\n"
+"Opzioni:\n"
+"  -b, --before GIORNI           mostra solo i record di ultimo accesso più\n"
+"                                vecchi di un numero di GIORNI\n"
+"  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+"  -t, --time GIORNI             mostra solo i record di ultimo accesso più\n"
+"                                recenti di un numero di GIORNI\n"
+"  -u, --user LOGIN              mostra il record di ultimo accesso per\n"
+"                                l'utente specificato da LOGIN\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Nome utente      Porta    Da               Ultimo accesso"
+
+msgid "Username                Port     Latest"
+msgstr "Nome utente             Porta    Ultimo accesso"
+
+msgid "**Never logged in**"
+msgstr "**Nessun accesso effettuato**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: argomento «%s» non previsto\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Uso: %s [-p] [NOME]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "     %s [-p] [-h HOST] [-f NOME]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "     %s [-p] -r HOST\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+# NdT: Non è l'ora giusta per accedere da questo tty (con questo utente).
+msgid "Invalid login time"
+msgstr "Orario di accesso non permesso"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistema chiuso per lavori di ordinaria manutenzione"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Disconnessione obbligatoria evitata: root può accedere.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Login scaduto dopo %d secondi.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr "Nessuna voce utmp. Eseguire «login» dalla shell di livello più basso"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM ha restituito un errore: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Superato il numero massimo di tentativi (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM ha richiesto l'uscita immediata\n"
+
+msgid "Login incorrect"
+msgstr "Login non corretto"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: impossibile eseguire fork(): %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY non riuscita su %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"Attenzione: accesso nuovamente abilitato dopo una proibizione temporanea."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Ultimo accesso: %s su %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Ultimo accesso: %.19s su %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " da %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"orario di accesso terminato\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Uso: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Uso: newgrp [-] [GRUPPO]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Uso: sg GRUPPO [[-c] COMANDO]\n"
+
+msgid "Invalid password.\n"
+msgstr "Password non valida.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: impossibile eseguire fork(): %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+msgid "too many groups\n"
+msgstr "troppi gruppi\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: group %s is a shadow group, but does not exist in /etc/group\n"
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: il gruppo «%s» è un gruppo shadow, ma non esiste in /etc/group\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: nome utente «%s» non valido\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: nome utente «%s» non valido\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: riga %d: riga non valida\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: impossibile aggiornare la voce dell'utente %s (non presente nel database "
+"delle password)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: riga %d: impossibile creare l'utente\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: riga %d: impossibile creare il gruppo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: l'utente «%s» non esiste\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: riga %d: impossibile aggiornare la password\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: riga %d: la chiamata mkdir ha restituito un errore\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: riga %d: la chiamata chown ha restituito un errore\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: riga %d: impossibile aggiornare la voce\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: passwd [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -a, --all                     report password status on all accounts\n"
+#| "  -d, --delete                  delete the password for the named "
+#| "account\n"
+#| "  -e, --expire                  force expire the password for the named "
+#| "account\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -k, --keep-tokens             change password only if expired\n"
+#| "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --lock                    lock the named account\n"
+#| "  -n, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -q, --quiet                   quiet mode\n"
+#| "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+#| "  -S, --status                  report password status on the named "
+#| "account\n"
+#| "  -u, --unlock                  unlock the named account\n"
+#| "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "  -x, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Uso: passwd [OPZIONI] [LOGIN]\n"
+"\n"
+"Opzioni:\n"
+"  -a, --all                     mostra lo stato delle password di tutti gli\n"
+"                                account\n"
+"  -d, --delete                  elimina la password dell'account "
+"specificato\n"
+"  -e, --expire                  segna come scaduta la password dell'account\n"
+"                                specificato\n"
+"  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+"  -k, --keep-tokens             cambia la password solo se è scaduta\n"
+"  -i, --inactive INATTIVITÀ     imposta il numero di giorni di INATTIVITÀ\n"
+"                                della password oltre la sua scadenza\n"
+"  -l, --lock                    blocca l'account specificato\n"
+"  -n, --mindays MINIMO          imposta a il numero MINIMO di giorni tra i\n"
+"                                cambi di password\n"
+"  -q, --quiet                   opera in modalità silenziosa\n"
+"  -r, --repository REPOSITORY   cambia la password nel REPOSITORY\n"
+"                                specificato\n"
+"  -S, --status                  mostra lo stato della password dell'account\n"
+"                                specificato\n"
+"  -u, --unlock                  sblocca l'account specificato\n"
+"  -w, --warndays PREAVVISO      imposta il numero di giorni di PREAVVISO\n"
+"                                prima della scadenza della password\n"
+"  -x, --maxdays MASSIMO         imposta il numero MASSIMO di giorni tra i\n"
+"                                cambi di password\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Vecchia password: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Inserire la nuova password (minimo %d caratteri)\n"
+"Utilizzare una combinazione di lettere maiuscole, minuscole e numeri.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Inserire la nuova password (minimo %d caratteri, massimo %d)\n"
+"Utilizzare una combinazione di lettere maiuscole, minuscole e numeri.\n"
+
+msgid "New password: "
+msgstr "Nuova password: "
+
+msgid "Try again."
+msgstr "Provare di nuovo."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Attenzione: password troppo debole (inserirla di nuovo per usarla comunque)."
+
+msgid "They don't match; try again.\n"
+msgstr "Non corrispondono; provare di nuovo.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "La password di %s non può essere cambiata.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "La password di %s non può ancora essere cambiata.\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: unlocking the user would result in a passwordless account.\n"
+#| "You should set a password with usermod -p to unlock this user account.\n"
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: sbloccando l'utente si otterrebbe un account senza password.\n"
+"È necessario impostare una password con «usermod -p» per sbloccare questo "
+"account.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: repository %s non supportato\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: non è permesso vedere o cambiare le informazioni sulla password di %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Cambio della password di %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "La password di %s non è cambiata.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Password cambiata."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Avviso di scadenza della password"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Uso: %s [-q] [-r] [-s] [PASSWD [SHADOW]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s e -r sono incompatibili\n"
+
+msgid "invalid password file entry"
+msgstr "voce non valida nel file delle password"
+
+msgid "duplicate password entry"
+msgstr "voce duplicata nel file delle password"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nome utente «%s» non valido\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "nome utente «%s» non valido\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "utente %s: nessun gruppo %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "utente %s: la directory %s non esiste\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "utente %s: il programma %s non esiste\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "nessuna voce corrispondente nel file delle password %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "aggiungere l'utente «%s» in %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "voce non valida nel file delle shadow password"
+
+msgid "duplicate shadow password entry"
+msgstr "voce duplicata nel file delle shadow password"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "utente %s: l'ultimo cambio di password reca una data futura\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: impossibile aprire il file %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Uso: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Uso: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "L'accesso all'account tramite «su» è NEGATO.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Evitata l'autenticazione tramite password.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Inserire la PROPRIA password per autenticarsi.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Uso: su [OPZIONI] [LOGIN]\n"
+"\n"
+"Opzioni:\n"
+"  -c, --command COMANDO         passa il COMANDO alla shell invocata\n"
+"  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+"  -, -l, --login                rende la shell una shell di login\n"
+"  -m, -p,\n"
+"  --preserve-environment        non azzera le variabili d'ambiente e\n"
+"                                mantiene la stessa shell\n"
+"  -s, --shell SHELL             usa la SHELL specificata anziché quella\n"
+"                                predefinita in passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: si deve avviare da un terminale\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: errore %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Id «%s» sconosciuto\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Non si è autorizzati a diventare %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Immettere la propria password)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorato)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: autenticazione PAM non riuscita\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Non si è autorizzati a diventare %s\n"
+
+msgid "No shell\n"
+msgstr "Nessuna shell\n"
+
+msgid "No password file"
+msgstr "Manca il file delle password"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY non riuscita"
+
+msgid "No password entry for 'root'"
+msgstr "Manca una voce per «root» nel file delle password"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Premere Ctrl-D per procedere con l'avvio regolare, oppure\n"
+"inserire la password di root per la manutenzione del sistema:"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Avvio modalità manutenzione del sistema"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: impossibile creare il nuovo file dei valori predefiniti\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: impossibile aprire il nuovo file dei valori predefiniti\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: riga %d: la chiamata chown ha restituito un errore\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: rename: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: il gruppo «%s» è un gruppo NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: troppi gruppi specificati (max %d).\n"
+
+#, c-format
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds              il numero di passaggi SHA per gli\n"
+"                                algoritmi di cifratura SHA*\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              il numero di passaggi SHA per gli\n"
+"                                algoritmi di cifratura SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              il numero di passaggi SHA per gli\n"
+"                                algoritmi di cifratura SHA*\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds              il numero di passaggi SHA per gli\n"
+"                                algoritmi di cifratura SHA*\n"
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds              il numero di passaggi SHA per gli\n"
+"                                algoritmi di cifratura SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -s, --sha-rounds              il numero di passaggi SHA per gli\n"
+"                                algoritmi di cifratura SHA*\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: directory di base «%s» non valida\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: commento «%s» non valido\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: directory home «%s» non valida\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: le shadow password sono necessarie per -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: le shadow password sono necessarie per -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: campo «%s» non valido\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: shell «%s» non valida\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: le opzioni %s e %s sono mutuamente esclusive\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: impossibile creare la directory %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Creazione del file della casella di posta"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Impossibile trovare il gruppo «mail». Creazione del file della casella di "
+"posta dell'utente con il modo 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Impostazione dei permessi del file della casella di posta"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: l'utente «%s» esiste già\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: il gruppo «%s» esiste già; usare -g per aggiungere questo utente a tale "
+"gruppo.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: impossibile creare l'utente\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u non univoco\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: impossibile creare il gruppo\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: attenzione: la directory home esiste già.\n"
+"Non verrà copiato nessun file dalla directory skel.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Uso: userdel [OPZIONI] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   rimuove comunuque i file, anche se non\n"
+"                                appartengono all'utente\n"
+"  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+"  -r, --remove                  rimuove directory home e spool di posta\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: impossibile rimuovere il gruppo «%s» in quanto gruppo principale di un "
+"altro utente.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: attenzione: impossibile rimuovere "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s non appartiene a %s, quindi non viene rimosso\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: l'utente %s è un utente NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: l'utente %s è attualmente collegato\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: directory home «%s» non valida\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: la directory %s non viene rimossa (verrebbe eliminata la home "
+"dell'utente %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: errore nel rimuovere la directory %s\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: usermod [options] LOGIN\n"
+#| "\n"
+#| "Options:\n"
+#| "  -c, --comment COMMENT         new value of the GECOS field\n"
+#| "  -d, --home HOME_DIR           new home directory for the user account\n"
+#| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -g, --gid GROUP               force use GROUP as new primary group\n"
+#| "  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+#| "  -a, --append                  append the user to the supplemental "
+#| "GROUPS\n"
+#| "                                mentioned by the -G option without "
+#| "removing\n"
+#| "                                him/her from other groups\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -l, --login NEW_LOGIN         new value of the login name\n"
+#| "  -L, --lock                    lock the user account\n"
+#| "  -m, --move-home               move contents of the home directory to "
+#| "the\n"
+#| "                                new location (use only with -d)\n"
+#| "  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+#| "  -p, --password PASSWORD       use encrypted password for the new "
+#| "password\n"
+#| "  -s, --shell SHELL             new login shell for the user account\n"
+#| "  -u, --uid UID                 new UID for the user account\n"
+#| "  -U, --unlock                  unlock the user account\n"
+#| "\n"
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Uso: usermod [OPZIONI] LOGIN\n"
+"\n"
+"Opzioni:\n"
+"  -c, --comment COMMENTO        imposta il nuovo valore del campo GECOS\n"
+"  -d, --home DIR_HOME           imposta la nuova directory home dell'utente\n"
+"  -e, --expiredate SCADENZA     imposta la data di SCADENZA dell'account\n"
+"  -f, --inactive INATTIVITÀ     imposta il numero di giorni di INATTIVITÀ\n"
+"                                della password oltre la sua scadenza\n"
+"  -g, --gid GRUPPO              impone l'uso di GRUPPO come nuovo gruppo\n"
+"iniziale\n"
+"  -G, --groups GRUPPI           nuovo elenco di GRUPPI aggiuntivi\n"
+"  -a, --append                  aggiunge l'utente a ulteriori GRUPPI\n"
+"                                specificati dall'opzione -G senza\n"
+"                                rimuoverlo da altri gruppi\n"
+"  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+"  -l, --login NUOVO_LOGIN       imposta il nuovo nome di login dell'utente\n"
+"  -L, --lock                    blocca l'account dell'utente\n"
+"  -m, --move-home               sposta il contenuto della directory home\n"
+"                                nella nuova posizione (usare solo con -d)\n"
+"  -o, --non-unique              permette di usare un UID duplicato (non\n"
+"                                univoco)\n"
+"  -p, --password PASSWORD       imposta la nuova PASSWORD cifrata\n"
+"  -s, --shell SHELL             la nuova shell di login dell'utente\n"
+"  -u, --uid UID                 imposta il nuovo UID dell'utente\n"
+"  -U, --unlock                  sblocca l'account dell'utente\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: unlocking the user would result in a passwordless account.\n"
+#| "You should set a password with usermod -p to unlock this user account.\n"
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: sbloccando l'utente si otterrebbe un account senza password.\n"
+"È necessario impostare una password con «usermod -p» per sbloccare questo "
+"account.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: l'utente «%s» esiste già\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: non è stata fornita nessuna opzione\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: le shadow password sono necessarie per le opzioni -e e -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: i flag -L, -p e -U sono mutuamente esclusivi\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Membro già esistente\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: la directory %s esiste già\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: impossibile creare %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: chown di %s non riuscito\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: attenzione: impossibile rimuovere completamente la vecchia directory "
+"home %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: impossibile rinominare la directory %s in %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: attenzione: %s non appartiene a %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "impossibile cambiare il proprietario della casella di posta"
+
+msgid "failed to rename mailbox"
+msgstr "impossibile rinominare la casella di posta"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "You have modified %s.\n"
+#| "You may need to modify %s for consistency.\n"
+#| "Please use the command `%s' to do so.\n"
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"%s è stato modificato.\n"
+"Per coerenza, potrebbe essere necessario modificare anche %s.\n"
+"Usare il comando «%s» per compiere questa operazione.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Uso: vipw [OPZIONI]\n"
+"\n"
+"Opzioni:\n"
+"  -g, --group                   modifica il database dei gruppi\n"
+"  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+"  -p, --passwd                  modifica il database delle password\n"
+"  -q, --quiet                   opera in modalità silenziosa\n"
+"  -s, --shadow                  modifica il database shadow o gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: impossibile abbandonare i privilegi (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s non modificato\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Impossibile fare il lock del file"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Impossibile fare il lock del file"
+
+msgid "Couldn't make backup"
+msgstr "Impossibile effettuare il backup"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+"%s: impossibile ripristinare %s: %s (le modifiche effettuate sono in %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: faillog [OPZIONI]\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ "  -a, --all                     mostra i record degli accessi falliti "
+#~ "per\n"
+#~ "                                tutti gli utenti\n"
+#~ "  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+#~ "  -l, --lock-time SEC           blocca l'account per SEC secondi dopo un\n"
+#~ "                                tentativo di accesso fallito\n"
+#~ "  -m, --maximum MAX             imposta a MAX il numero massimo di\n"
+#~ "                                tentativi di accesso falliti\n"
+#~ "  -r, --reset                   azzera i conteggi degli accessi falliti\n"
+#~ "  -t, --time GIORNI             mostra i record degli accessi falliti "
+#~ "più\n"
+#~ "                                recenti di un numero di GIORNI\n"
+#~ "  -u, --user LOGIN              mostra il record degli accessi falliti "
+#~ "o,\n"
+#~ "                                se sono state usate con le opzioni -r, -"
+#~ "m\n"
+#~ "                                o -l, imposta conteggi e limiti solo per\n"
+#~ "                                l'utente specificato da LOGIN\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: groupadd [OPZIONI] GRUPPO\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ "  -f, --force                   termina con successo anche se il gruppo\n"
+#~ "                                specificato esiste già\n"
+#~ "  -g, --gid GID                 usa GID per il nuovo gruppo\n"
+#~ "  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+#~ "  -K, --key CHIAVE=VALORE       specifica un valore diverso da quello\n"
+#~ "                                predefinito in /etc/login.defs\n"
+#~ "  -o, --non-unique              permette di creare un gruppo con un GID\n"
+#~ "                                duplicato (non univoco)\n"
+#~ "  -p, --password PASSWORD       imposta la nuova PASSWORD cifrata\n"
+#~ "  -r, --system                  crea un account di sistema\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: groupmod [OPZIONI] GRUPPO\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ "  -g, --gid GID                 impone l'uso di GID per il GRUPPO\n"
+#~ "  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+#~ "  -n, --new-name NUOVO_GRUPPO   impone l'uso del nome NUOVO_GRUPPO per "
+#~ "il\n"
+#~ "                                GRUPPO\n"
+#~ "  -o, --non-unique              permette di che il GRUPPO usi un GID\n"
+#~ "                                duplicato (non univoco)\n"
+#~ "  -p, --password PASSWORD       imposta la nuova PASSWORD cifrata\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~| "                                home directory\n"
+#~| "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~| "account\n"
+#~| "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~| "  -D, --defaults                print or save modified default useradd\n"
+#~| "                                configuration\n"
+#~| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~| "                                to INACTIVE\n"
+#~| "  -g, --gid GROUP               force use GROUP for the new user "
+#~| "account\n"
+#~| "  -G, --groups GROUPS           list of supplementary groups for the "
+#~| "new\n"
+#~| "                                user account\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~| "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~| "  -l,                           do not add the user to the lastlog and\n"
+#~| "                                faillog databases\n"
+#~| "  -m, --create-home             create home directory for the new user\n"
+#~| "                                account\n"
+#~| "  -N, --no-user-group           do not create a group with the same name "
+#~| "as\n"
+#~| "                                the user\n"
+#~| "  -o, --non-unique              allow create user with duplicate\n"
+#~| "                                (non-unique) UID\n"
+#~| "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~| "                                account\n"
+#~| "  -r, --system                  create a system account\n"
+#~| "  -s, --shell SHELL             the login shell for the new user "
+#~| "account\n"
+#~| "  -u, --uid UID                 force use the UID for the new user "
+#~| "account\n"
+#~| "  -U, --user-group              create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Uso: useradd [OPZIONI] LOGIN\n"
+#~ "\n"
+#~ "Opzioni:\n"
+#~ "  -b, --base-dir DIR_BASE       specifica la directory di base in cui "
+#~ "creare\n"
+#~ "                                la directory home per il nuovo account\n"
+#~ "  -c, --comment COMMENTO        imposta il campo GECOS per il nuovo "
+#~ "account\n"
+#~ "  -d, --home-dir DIR_HOME       specifica la directory home per il nuovo\n"
+#~ "                                account\n"
+#~ "  -D, --defaults                mostra o imposta i valori predefiniti "
+#~ "della\n"
+#~ "                                configurazione di useradd\n"
+#~ "  -e, --expiredate SCADENZA     imposta la data di SCADENZA dell'account\n"
+#~ "  -f, --inactive INATTIVITÀ     imposta il numero di giorni di "
+#~ "INATTIVITÀ\n"
+#~ "                                della password oltre la sua scadenza\n"
+#~ "  -g, --gid GRUPPO              impone l'uso di GRUPPO per il nuovo "
+#~ "account\n"
+#~ "  -G, --groups GRUPPI           elenco di GRUPPI aggiuntivi per il nuovo\n"
+#~ "                                account\n"
+#~ "  -h, --help                    mostra questo messaggio di aiuto ed esce\n"
+#~ "  -k, --skel DIR_SKEL           specifica una directory skel alternativa\n"
+#~ "  -K, --key CHIAVE=VALORE       specifica un valore diverso da quello\n"
+#~ "                                predefinito in /etc/login.defs\n"
+#~ "  -l                            non aggiunge l'utente ai database lastlog "
+#~ "e\n"
+#~ "                                faillog\n"
+#~ "  -m, --create-home             crea la directory home per il nuovo "
+#~ "account\n"
+#~ "  -N, --no-user-group           non crea un gruppo con lo stesso nome\n"
+#~ "                                dell'utente\n"
+#~ "  -o, --non-unique              permette di creare un utente con un UID\n"
+#~ "                                duplicato (non univoco)\n"
+#~ "  -p, --password PASSWORD       usa la PASSWORD cifrata per il nuovo "
+#~ "account\n"
+#~ "  -r, --system                  crea un account di sistema\n"
+#~ "  -s, --shell SHELL             la shell di login per il nuovo account\n"
+#~ "  -u, --uid UID                 impone l'uso di UID per il nuovo account\n"
+#~ "  -U, --user-group              crea un gruppo con lo stesso nome\n"
+#~ "                                dell'utente\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Uso: %s [OPZIONI] [INPUT]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            il metodo di cifratura (uno di %s)\n"
+#~ "  -r, --system                  crea gli account di sistema\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Password segnata come scaduta."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: impossibile fare il lock del file delle password\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: impossibile aprire il file delle password\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: impossibile fare il lock del file delle shadow password\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: impossibile aprire il file delle shadow password\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: impossibile riscrivere il file delle shadow password\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: impossibile riscrivere il file delle password\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: impossibile aggiornare il file delle password\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: impossibile aggiornare il file delle shadow password\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNome completo: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tStanza n°: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tNumero telefonico di lavoro: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tNumero telefonico di casa: %s\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Impossibile aprire il file delle password.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: impossibile trovare «%s» in /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Errore nell'aggiornare la voce nel file delle password.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Impossibile effettuare le modifiche al file delle password.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Impossibile togliere il lock dal file delle password.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: impossibile fare il lock del file dei gruppi\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: impossibile aprire il file dei gruppi\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: impossibile fare il lock del file gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: impossibile aprire il file shadow\n"
+
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: errore nell'aggiornare il file gshadow\n"
+
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: errore nell'aggiornare il file dei gruppi\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: riga %d: gruppo «%s» sconosciuto\n"
+
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: riga %d: impossibile aggiornare la voce nel file dei gruppi\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: impossibile fare il lock del file shadow\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: errore nell'aggiornare il file shadow\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: errore nell'aggiornare il file delle password\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: riga %d: utente «%s» sconosciuto\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr ""
+#~ "%s: riga %d: impossibile aggiornare la voce nel file delle password\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: utente sconosciuto\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Utente «%s» sconosciuto\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Uso: %s [-r|-R] GRUPPO\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "     %s [-a UTENTE] GRUPPO\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "     %s [-d UTENTE] GRUPPO\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "     %s [-A UTENTE,...] [-M UTENTE,...] GRUPPO\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "     %s [-M UTENTE,...] GRUPPO\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: impossibile fare il lock\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: impossibile fare il lock del file shadow\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: impossibile aprire il file\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: impossibile riscrivere il file\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: impossibile riscrivere il file shadow\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: impossibile togliere il lock dal file\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: impossibile aggiornare la voce\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: impossibile aggiornare la voce nel file shadow\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "gruppo «%s» sconosciuto\n"
+
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: impossibile chiudere il file\n"
+
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: impossibile chiudere il file shadow\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Chi sei?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: membro «%s» sconosciuto\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: errore nell'aggiungere la nuova voce al file dei gruppi\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: impossibile riscrivere il file dei gruppi\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: impossibile riscrivere il file dei gruppi shadow\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: impossibile fare il lock del file dei gruppi\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: impossibile aprire il file dei gruppi\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: impossibile fare il lock del file dei gruppi shadow\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: impossibile aprire il file dei gruppi shadow\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u non univoco\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: errore nel rimuovere la voce dal file dei gruppi\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: errore nel rimuovere la voce dal file dei gruppi shadow\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: impossibile rimuovere il gruppo principale dell'utente.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Impossibile trovare il membro da rimuovere\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Uso: groupmems -a NOME_UTENTE | -d NOME_UTENTE | -D | -l [ -g "
+#~ "NOME_GRUPPO]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Solo root può aggiungere membri a gruppi diversi\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "È necessario l'accesso al gruppo\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Non si è il proprietario principale del gruppo\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "Autenticazione PAM non riuscita per\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Impossibile fare il lock del file dei gruppi\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Impossibile aprire il file dei gruppi\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Impossibile chiudere il file dei gruppi\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: «%s» non trovato in /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u non è un GID univoco\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s non è un nome univoco\n"
+
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: impossibile riscrivere il file delle password\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: impossibile fare il lock del file delle password\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: impossibile aprire il file delle password\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s: impossibile modificare il gruppo principale dell'utente «%s» da %u a %"
+#~ "u, in quanto non è presente nel file delle password.\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: impossibile fare il lock del file %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: impossibile aggiornare la voce relativa a %s nel file shadow\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: impossibile aggiornare la voce del gruppo %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: impossibile fare il lock del file dei gruppi shadow\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: impossibile aprire il file dei gruppi shadow\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: impossibile rimuovere il gruppo shadow %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: impossibile aggiornare il file dei gruppi shadow\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: impossibile aggiornare il file dei gruppi\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: impossibile eliminare il file dei gruppi shadow\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "UID %u sconosciuto\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "GID %lu sconosciuto\n"
+
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: ID gruppo «%s» non valido\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: creato il gruppo «%s»; errore nel creare il corrispondente gruppo "
+#~ "gshadow\n"
+
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: ID utente «%s» non valido\n"
+
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: nome utente «%s» non valido\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: impossibile fare il lock di /etc/passwd.\n"
+
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: impossibile fare il lock di /etc/shadow.\n"
+
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: impossibile fare il lock di /etc/group.\n"
+
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: impossibile fare il lock di /etc/gshadow.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: impossibile aprire i file\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: errore nell'aggiornare i file\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: riga %d: impossibile trovare l'utente %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: impossibile aggiornare la voce relativa a %s nel file passwd\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: impossibile fare il lock del file passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: impossibile aprire il file passwd\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: impossibile rimuovere la voce relativa a %s dal file shadow\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: impossibile aggiornare il file shadow\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: impossibile aggiornare il file passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: impossibile aggiornare la voce relativa all'utente %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: impossibile eliminare il file delle shadow password\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: GID «%s» sconosciuto\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: gruppo «%s» sconosciuto\n"
+
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr ""
+#~ "%s: memoria esaurita. Impossibile aggiornare il database dei grupppi "
+#~ "shadow.\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: impossibile riscrivere il file delle password\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: impossibile riscrivere il file delle shadow password\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: impossibile fare il lock del file delle shadow password\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: impossibile aprire il file delle shadow password\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: errore nel fare il lock del file dei gruppi\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: errore nell'aprire il file dei gruppi\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: errore nel fare il lock del file dei gruppi shadow\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: errore nell'aprire il file dei gruppi shadow\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: errore nell'aggiungere la nuova voce al file delle password\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr ""
+#~ "%s: errore nell'aggiungere la nuova voce al file delle shadow password\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: attenzione: CREATE_HOME non è supportata; usare -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: errore nell'aggiornare la voce nel file dei gruppi\n"
+
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: errore nell'aggiornare la voce nel file dei gruppi shadow\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: impossibile aprire il file dei gruppi\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: impossibile aprire il file dei gruppi shadow\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: errore nel rimuovere la voce dal file delle password\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: errore nel rimuovere la voce dal file delle shadow password\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: l'utente %s non esiste\n"
+
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr ""
+#~ "%s: errore nell'aggiungere la nuova voce al file dei gruppi shadow\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid «%lu» non univoco\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: errore nel cambio della voce nel file delle password\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: errore nel rimuovere la voce dal file delle password\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: errore nel rimuovere la voce dal file delle shadow password\n"
diff --git a/po/ja.gmo b/po/ja.gmo
new file mode 100644 (file)
index 0000000..627954b
Binary files /dev/null and b/po/ja.gmo differ
diff --git a/po/ja.po b/po/ja.po
new file mode 100644 (file)
index 0000000..7688641
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,2263 @@
+# Shadow utils japanese message catalog\r
+# Copyright (C) YEAR Free Software Foundation, Inc.\r
+# Yasuyuki Furukawa <furukawa@vinelinux.org>, 2000.\r
+# revised by NAKANO Takeo <nakano@webmasters.gr.jp> since 2004-09-05\r
+# \r
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2009-05-10 15:58+0900\n"
+"Last-Translator: NAKANO Takeo <nakano@webmasters.gr.jp>\n"
+"Language-Team: Japanese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"'%s' というエントリが %s に複数あります。pwck または grpck で修正してくださ"
+"い。\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "暗号化の手法が libcrypt によってサポートされていない? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "設定エラー - %s の値 '%s' をパースできません"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "設定情報用の空き容量が確保できませんでした。\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "設定エラー: 不明な項目 '%s' (管理者に連絡してください)\n"
+
+msgid "Password: "
+msgstr "パスワード: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s のパスワード: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "警告: 不明なグループ %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "警告: グループが多すぎます\n"
+
+msgid "Your password has expired."
+msgstr "あなたのパスワードは期限が切れています。"
+
+msgid "Your password is inactive."
+msgstr "あなたのパスワードは現在使えません。"
+
+msgid "Your login has expired."
+msgstr "あなたのアカウントは期限が切れました。"
+
+msgid "  Contact the system administrator."
+msgstr "  システム管理者と相談してください。"
+
+msgid "  Choose a new password."
+msgstr "  新しいパスワードを選択してください。"
+
+msgid "You must change your password."
+msgstr "パスワードを変更してください。"
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "あなたのパスワードはあと %ld 日で期限が切れます。\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "あなたのパスワードは明日で期限が切れます。"
+
+msgid "Your password will expire today."
+msgstr "あなたのパスワードは本日で期限が切れます。"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "audit インターフェースを開けません - 終了します。\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "端末 stdin: %s の所有者かモードを変更できません"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: %s がアンロックできませんでした\n"
+
+msgid "Environment overflow\n"
+msgstr "環境変数領域のオーバーフロー\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "$%s を変更できません\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"最後のログインから %d 回失敗。\n"
+"最後のログインは %s (マシン %s)。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr ""
+"%s: 他と重ならないシステム UID を取得できません (利用できる UID がありませ"
+"ん)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+"%s: 他と重ならないグループ ID を取得できません (利用できる GID がありませ"
+"ん)\n"
+
+#, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr ""
+"%s: 他と重ならないシステム UID を取得できません (利用できる UID がありませ"
+"ん)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+"%s: 他と重ならないユーザ ID を取得できません (利用できる UID がありません)\n"
+
+msgid "Too many logins.\n"
+msgstr "ログイン試行数が制限を越えました。\n"
+
+msgid "You have new mail."
+msgstr "新しいメールが来ています。"
+
+msgid "No mail."
+msgstr "メールはありません。"
+
+msgid "You have mail."
+msgstr "メールがあります。"
+
+msgid "no change"
+msgstr "変更されていません"
+
+msgid "a palindrome"
+msgstr "回文になっています"
+
+msgid "case changes only"
+msgstr "大文字小文字しか変更されていません"
+
+msgid "too similar"
+msgstr "似すぎています"
+
+msgid "too simple"
+msgstr "単純すぎます"
+
+msgid "rotated"
+msgstr "循環になっています"
+
+msgid "too short"
+msgstr "短かすぎます"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "不正なパスワードです: %s "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() にエラー %d で失敗しました\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "パスワード: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: パスワードは変更されませんでした\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: パスワードは正しく更新されました\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "%s のパスワードが正しくありません。\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"ENCRYPT_METHOD の値が正しくありません: '%s'\n"
+"デフォルトの DES を用います。\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "'%s' へディレクトリを変更できません\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "ディレクトリがありません。HOME=/ としてログインします"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s を実行できません"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "ルートディレクトリ '%s' は不正です\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "ルートディレクトリを '%s' へ変更できません\n"
+
+msgid "Unable to determine your tty name."
+msgstr "あなたの端末 (tty) 名を決定できません。"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: メモリが足りません\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) に失敗しました\n"
+
+msgid "No"
+msgstr "No"
+
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"使い方: chage [オプション] [ログイン名]\n"
+"\n"
+"オプション\n"
+"  -d, --lastday LAST_DAY        パスワードの最終変更日を LAST_DAY にする\n"
+"  -E, --expiredate EXPIRE_DATE  アカウント期限切れの日を EXPIRE_DATE にする\n"
+"  -h, --help                    このヘルプを表示して終了する\n"
+"  -I, --inactive INACTIVE       パスワードを期限切れ後に無効化する日数を\n"
+"                                INACTIVEにする\n"
+"  -l, --list                    アカウントの経時情報を表示する\n"
+"  -m, --mindays MIN_DAYS        パスワードが変更できるまでの最短日数を\n"
+"                                MIN_DAYS に変更する\n"
+"  -M, --maxdays MAX_DAYS        パスワードが変更できる期間の最長日数を\n"
+"                                MAX_DAYS に変更する\n"
+"  -W, --warndays WARN_DAYS      期限切れ警告の日数を WARN_DAYS にする\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"新しい値を入力してください。標準設定値を使うならリターンを押してください"
+
+msgid "Minimum Password Age"
+msgstr "パスワード変更可能までの最短日数"
+
+msgid "Maximum Password Age"
+msgstr "パスワード変更可能期間の最長日数"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "最後にパスワード変更した日付 (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "パスワード期限切れ警告日数"
+
+msgid "Password Inactive"
+msgstr "パスワード無効日数"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "アカウント期限切れ日付 (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "最終パスワード変更日\t\t\t\t:"
+
+msgid "never"
+msgstr "なし"
+
+msgid "password must be changed"
+msgstr "パスワードは変更しなければなりません"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "パスワード期限:\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "パスワード無効化中\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "アカウント期限切れ\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "パスワードが変更できるまでの最短日数\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "パスワードを変更しなくてよい最長日数\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "パスワード期限が切れる前に警告される日数\t\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: 日付 '%s' は不正です\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: 数値引数 '%s' が正しくありません\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: \"l\" オプションは他のフラグと同時には指定できません\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: 権限がありません。\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: あなたのユーザ名を判定できません。\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM 認証に失敗しました\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: %s をロックできません。後でもう一度試してください。\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: %s を開けません\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: 変更を %s に書き込めませんでした\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: %s の新しいエントリ '%s' を準備できませんでした。\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: シャドウパスワードファイルがありません\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: 特権を落とせませんでした (%s)\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: ユーザ %s は %s に存在しません\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s の期限情報を変更中\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: フィールド変更の際にエラーが起きました\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"使い方: %s [-f フルネーム] [-r 部屋番号] [-w 職場TEL]\n"
+"\t[-h 自宅TEL] [-o その他] [ユーザ]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "使い方: %s [-f フルネーム] [-r 部屋番号] [-w 職場TEL] [-h 自宅TEL]\n"
+
+msgid "Full Name"
+msgstr "フルネーム"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "部屋番号"
+
+msgid "Work Phone"
+msgstr "職場電話番号"
+
+msgid "Home Phone"
+msgstr "自宅電話番号"
+
+msgid "Other"
+msgstr "その他"
+
+msgid "Cannot change ID to root.\n"
+msgstr "ID を root へ変更できません。\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: 非 ASCII 文字の名前: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: ユーザ名が不正です: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: 非 ASCII 文字の部屋番号: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: 部屋番号が不正です: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: 職場電話番号が不正です: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: 自宅電話番号が不正です: '%s'\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' には非 ASCII 文字が含まれています\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' には利用できない文字が含まれています\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: ユーザ '%s' は存在しません\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: NIS クライアントではユーザ '%s' を変更できません。\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' がこのクライアントの NIS マスターです。\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s のユーザ情報を変更中\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: 入力内容が長過ぎます\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"使い方: %s [オプション]\n"
+"\n"
+"オプション:\n"
+"  -c, --crypt-method            暗号化の方法 (%s のどれか)\n"
+"  -e, --encrypted               パスワードを暗号化した状態で渡す\n"
+"  -h, --help                    このヘルプメッセージを表示して終了する\n"
+"  -m, --md5                     与えたパスワードが暗号化されていない場合、\n"
+"                                MD5 アルゴリズムで暗号化する\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* 暗号化アルゴリズムの SHA ラウンド回数\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s フラグは %s フラグと共に指定する必要があります\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: -c, -e, -m フラグは同時に指定できません\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: サポートされていない暗号化手法です: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: %d 行: 行が長過ぎます\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: %d 行: 新規パスワードがありません\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: %d 行: グループ '%s' は存在しません\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: %d 行: %s の新しいエントリ '%s' を用意できません\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: エラーが検出されました。変更は行いません\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* 暗号化アルゴリズムの SHA ラウンド回数\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: user '%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: %d 行目: ユーザ '%s' は存在しません\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: %d 行目: ユーザ '%s' は存在しません\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"使い方: chsh [オプション]\n"
+"\n"
+"オプション:\n"
+"  -h, --help                    このヘルプメッセージを表示して終了する\n"
+"  -s, --shell SHELL             ユーザのシェルを新たに SHELL にする\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "ログインシェル"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "あなたは '%s' のシェルを変更できません。\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%s のログインシェルを変更中\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: 不正なエントリ: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s: %s はシェルに指定できません。\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "使い方: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+"  -Z, --selinux-user            このユーザアカウントへの新規 SELinux\n"
+"                                ユーザマッピング\n"
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to get the entry for UID %d\n"
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr "faillog: UID %d のエントリを取得できませんでした\n"
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "ログイン名  失敗     最大    最新                     場所\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr "[残り %lu 秒]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr "[ロック %ld 秒]"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to reset fail count for UID %d\n"
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr "faillog: UID %d の失敗回数をリセットできませんでした\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set max for UID %d\n"
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr "faillog: UID %d の最大回数を設定できませんでした\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set locktime for UID %d\n"
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr "faillog: UID %d のロック時間を設定できませんでした\n"
+
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "lastlog: 不明なユーザまたは範囲です: %s\n"
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "faillog: ファイル %s を開けません: %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr "faillog: %s のサイズを取得できませんでした: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+"使い方: %s [オプション] GROUP\n"
+"\n"
+"オプション:\n"
+"  -a, --add USER        \n"
+"\n"
+"  -a, --add USER                USER を GROUP に追加する\n"
+"  -d, --delete USER             USER を GROUP から削除する\n"
+"  -r, --remove-password         GROUP のパスワードを削除する\n"
+"  -R, --restrict                GROUP へのアクセスをそのメンバーのみに制限す"
+"る\n"
+"  -M, --members USER,...        GROUP のメンバーリストを設定する\n"
+"%s\n"
+"\n"
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"  -A, --administrators ADMIN,...\n"
+"                                GROUP の管理者のリストを設定する\n"
+"-A オプションと -M オプション以外は同時に指定できない\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "これらのオプションは同時に指定できません。\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -A にはシャドウグループパスワードが必要です\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: グループ '%s' は %s に存在しません\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: リードオンリーの %s のクローズ中に失敗\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "グループ %s のパスワードを変更中\n"
+
+msgid "New Password: "
+msgstr "新規パスワード: "
+
+msgid "Re-enter new password: "
+msgstr "新規パスワード再入力: "
+
+msgid "They don't match; try again"
+msgstr "一致しません; もう一度お願いします"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: 後でもう一度お願いします\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "ユーザ %s をグループ %s に追加\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "ユーザ %s をグループ %s から削除\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: ユーザ '%s' は '%s' のメンバーではありません\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: 端末ではありません\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* 暗号化アルゴリズムの SHA ラウンド回数\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+"  -Z, --selinux-user            このユーザアカウントへの新規 SELinux\n"
+"                                ユーザマッピング\n"
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* 暗号化アルゴリズムの SHA ラウンド回数\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+"  -Z, --selinux-user            このユーザアカウントへの新規 SELinux\n"
+"                                ユーザマッピング\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: '%s' はグループ名として正しくありません\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: '%s' はグループ ID として正しくありません\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K には KEY=VALUE が必要です\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: グループ '%s' は既に存在します\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID '%lu' は既に存在します\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "使い方: groupdel グループ\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: '%s' のエントリを %s から削除できません\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: ユーザ '%s' のプライマリグループは削除できません。\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: グループ '%s' は存在しません\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: グループ '%s' は NIS グループです\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s が NIS マスターです\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: ユーザ '%s' はすでに '%s' のメンバーです\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: メモリ不足です。%s を更新できません。\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+"使い方: groupmems [オプション] [動作]\n"
+"\n"
+"オプション:\n"
+"  -g, --group groupname         ユーザのグループでなく groupname を使う\n"
+"                                (root のみ)\n"
+"\n"
+"動作:\n"
+"  -a, --add username            username をグループのメンバーに加える\n"
+"  -d, --delete username         username をグループのメンバーから除く\n"
+"  -p, --purge                   すべてのメンバーをグループから削除する\n"
+"  -l, --list                    グループのメンバー一覧を表示する\n"
+"\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: あなたのグループ名はあなたのユーザ名とマッチしません\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: -g/--group オプションは root のみが指定できます\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+"  -Z, --selinux-user            このユーザアカウントへの新規 SELinux\n"
+"                                ユーザマッピング\n"
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s '%s' はグループ名として正しくありません\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: グループ %s は NIS のグループです\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: ユーザ %s は不明です\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "使い方: %s [-r] [-s] [group [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "使い方: %s [-r] [-s] [group]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s と -r は同時に指定できません\n"
+
+msgid "invalid group file entry"
+msgstr "不正なグループファイルエントリです"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "行 '%s' を削除しますか? "
+
+msgid "duplicate group entry"
+msgstr "グループエントリが重複しています"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "'%s' はグループ名として正しくありません\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "'%lu' はグループ ID として正しくありません\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "グループ %s: ユーザ %s はいません\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "メンバー '%s' を削除しますか? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "%s には一致するグループファイルエントリがありません\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "グループ '%s' を %s に追加しますか?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "シャドウグループファイルのエントリが正しくありません"
+
+msgid "duplicate shadow group entry"
+msgstr "シャドウグループエントリが重複しています"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "シャドウグループ %s: 管理ユーザ %s は存在しません\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "管理ユーザ '%s' を削除しますか?"
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "シャドウグループ %s: ユーザ %s は存在しません\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: ファイルは更新されました\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: 変更はありません\n"
+
+msgid "Usage: grpconv\n"
+msgstr "使い方: grpconv\n"
+
+msgid "Usage: grpunconv\n"
+msgstr "使い方: grpunconv\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: %s を削除できません\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "使い方: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "使い方: id\n"
+
+msgid " groups="
+msgstr " グループ="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"使い方: lastlog [オプション]\n"
+"\n"
+"オプション:\n"
+"  -b, --before DAYS             DAYS 日より以前の lastlog 記録だけを表示す"
+"る\n"
+"  -h, --help                    このヘルプメッセージを表示して終了する\n"
+"  -t, --time DAYS               DAYS 日前以降の lastlog 記録だけを表示する\n"
+"  -u, --user LOGIN              指定ユーザ LOGIN の lastlog 記録を表示する\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "lastlog: Failed to get the entry for UID %d\n"
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr "lastlog: UID %d のエントリを取得できませんでした\n"
+
+msgid "Username         Port     From             Latest"
+msgstr "ユーザ名         ポート   場所             最近のログイン"
+
+msgid "Username                Port     Latest"
+msgstr "ユーザ名                ポート   最近のログイン"
+
+msgid "**Never logged in**"
+msgstr "**一度もログインしていません**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: この引き数は不正です: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr "lastlog: %s のサイズを取得できませんでした: %s\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "使い方: %s [-p] [ユーザ名]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h ホスト] [-f ユーザ名]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r ホスト\n"
+
+#, fuzzy, c-format
+#| msgid "configuration error - cannot parse %s value: '%s'"
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "設定エラー - %s の値 '%s' をパースできません"
+
+msgid "Invalid login time"
+msgstr "ログイン時間が不正です"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"システムは定期メンテナンスのため利用できません"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[切断を迂回 -- root ログインが可能です。]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"あと %d 秒でログインはタイムアウトします。\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"utmp にエントリがありません。\"login\" を \"sh\" の最低レベルから行う必要があ"
+"ります"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM が失敗しました、終了します: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "最大試行回数 (%d) を越えました\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM から中断要請がありました\n"
+
+msgid "Login incorrect"
+msgstr "ログインが違います"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fork に失敗しました: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY が %s で失敗しました"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"警告: 一時的にロックアウトします。しばらく経ってからやり直してください。"
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "最近のログイン: %s on %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "最近のログイン: %.19s on %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " from %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"ログイン時間切れ\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "使い方: logoutd\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "使い方: newgrp [-] [グループ]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "使い方: sg グループ [[-c] コマンド]\n"
+
+msgid "Invalid password.\n"
+msgstr "そのパスワードは使えません。\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fork に失敗しました: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID '%lu' は存在しません\n"
+
+msgid "too many groups\n"
+msgstr "グループが多すぎます\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+"  -Z, --selinux-user            このユーザアカウントへの新規 SELinux\n"
+"                                ユーザマッピング\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+"%s: グループ '%s' はシャドウグループですが、/etc/group に存在しません\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: '%s' はユ−ザ ID に使えません\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: '%s' はユーザ名に使えません\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: %d 行: 不正な行です\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: ユーザ %s のエントリを更新できません (passwd データベースに存在しませ"
+"ん)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: %d 行: ユーザを作成できません\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: %d 行: グループを作成できません\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: %d 行: ユーザ '%s' は %s に存在しません\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: %d 行: パスワードを更新できません\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: %d 行: mkdir %s が失敗しました: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: %d 行: chown %s が失敗しました: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: %d 行: エントリを更新できません\n"
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"使い方: passwd [オプション] [ログイン名]\n"
+"\n"
+"オプション:\n"
+"  -a, --all                     全アカウントのパスワード状態をレポートする\n"
+"  -d, --delete                  指定アカウントのパスワードを削除する\n"
+"  -e, --expire                  指定アカウントのパスワードを期限切れにする\n"
+"  -h, --help                    このヘルプメッセージを表示して終了する\n"
+"  -k, --keep-tokens             期限切れの場合にのみパスワードを変更する\n"
+"  -i, --inactive INACTIVE       期限切れ後のパスワード無効化日数を\n"
+"                                INACTIVE にする\n"
+"  -l, --lock                    指定アカウントをロックする\n"
+"  -n, --mindays MIN_DAYS        パスワードが変更できるまでの最短日数を\n"
+"                                MIN_DAYS に変更する\n"
+"  -q, --quiet                   表示抑制モード\n"
+"  -r, --repository REPOSITORY   リポジトリ REPOSITORY のパスワードを変更す"
+"る\n"
+"  -S, --status                  指定アカウントのパスワードの状態を報告する\n"
+"  -u, --unlock                  指定アカウントのロックを解除する\n"
+"  -w, --warndays WARN_DAYS      期限切れ警告の日数を WARN_DAYS にする\n"
+"  -x, --maxdays MAX_DAYS        パスワードが変更できる期間の最長日数を\n"
+"                                MAX_DAYS に変更する\n"
+"\n"
+
+msgid "Old password: "
+msgstr "古いパスワード: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"新しいパスワードを入れてください (最短 %d 文字)\n"
+"大文字・小文字・数字を混ぜて使うようにしてください。\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"新しいパスワードを入れてください (最低 %d 文字、最高 %d 文字)\n"
+"大文字・小文字・数字を混ぜて使うようにしてください。\n"
+
+msgid "New password: "
+msgstr "新しいパスワード: "
+
+msgid "Try again."
+msgstr "もう一度お願いします。"
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"警告: 弱いパスワードです (どうしてもこれを使いたければもう一度入力)。"
+
+msgid "They don't match; try again.\n"
+msgstr "一致しません。もう一度お願いします。\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s のパスワードは変更できません。\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s のパスワードはまだ変更できません。\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: パスワードをアンロックするとパスワードのないアカウントができます。\n"
+"このアカウントのパスワードをアンロックするには usermod -p でパスワードを\n"
+"設定すべきです。\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: レポジトリ %s はサポートしていません\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr "%s: %s は %s のパスワードを変更する権限がありません\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: あなたは %s のパスワード情報を閲覧ないし変更できません。\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s のパスワードを変更しています\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s のパスワードは変更されません。\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "パスワードは変更されました。"
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "パスワード期限切れ警告日数"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "使い方: %s [-q] [-r] [-s] [パスワード [シャドウ]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s と -r は同時に指定できません\n"
+
+msgid "invalid password file entry"
+msgstr "パスワードファイルのエントリが不正です"
+
+msgid "duplicate password entry"
+msgstr "パスワードエントリが重複しています"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ユーザ名 '%s' は不正です\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "'%lu' はユーザ ID に使えません\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "ユーザ '%s': グループ %lu がありません\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "ユーザ %s: ディレクトリ '%s' が存在しません\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "ユーザ '%s': プログラム '%s' が存在しません\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "一致するパスワードファイルエントリが %s にありません\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "ユーザ '%s' を '%s' に追加しますか?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "不正なシャドウパスワードのエントリです"
+
+msgid "duplicate shadow password entry"
+msgstr "シャドウパスワードエントリが重複しています"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "ユーザ %s: 最後のパスワード変更が未来になっています\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: %s のエントリをソートできません\n"
+
+msgid "Usage: pwconv\n"
+msgstr "使い方: pwconv\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: %s のモードを 0600 に変更できませんでした\n"
+
+msgid "Usage: pwunconv\n"
+msgstr "使い方: pwunconv\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "このアカウントへの su アクセスは禁止されています。\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "パスワード認証を迂回します。\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "「あなた自身のパスワード」を入力して認証してください。\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"使い方: su [オプション] [ユーザ名]\n"
+"\n"
+"オプション:\n"
+"  -c, --command COMMAND   起動したシェルにコマンド COMMAND を渡す\n"
+"  -h, --help              このヘルプを表示して終了する\n"
+"  -, -l, --login          そのシェルをログインシェルにする\n"
+"  -m, -p,\n"
+"  --preserve-environment  環境変数をリセットせず、シェルも同じものを使う\n"
+"  -s, --shell SHELL       passwd にあるデフォルト値でなくシェル SHELL を使"
+"う\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: 端末から実行してください\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: エラー %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "不明な ID です: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "あなたには su %s する権限がありません\n"
+
+msgid "(Enter your own password)"
+msgstr "(あなたのパスワードを入力してください)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(無視)\n"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: 認証に失敗しました\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: あなたは現時点では su する権限がありません\n"
+
+msgid "No shell\n"
+msgstr "シェルがありません\n"
+
+msgid "No password file"
+msgstr "パスワードファイルがありません"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY が失敗しました"
+
+msgid "No password entry for 'root'"
+msgstr "'root' のパスワードエントリがありません"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"通常の起動を継続するには Ctrl-D を押してください。\n"
+"(システムメンテナンスをするには root のパスワードを入力):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "システムメンテナンスモードへ入ります"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%1$s: %3$s 中の設定 %2$s は無視されます\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: 新しいデフォルトファイルを作れません\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: 新しいデフォルトファイルを開けません\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: %d 行: chown %s が失敗しました: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: ファイル名変更: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: グループ '%s' は NIS グループです。\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: 指定したグループ数が多すぎます (最大 %d 個)。\n"
+
+#, c-format
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* 暗号化アルゴリズムの SHA ラウンド回数\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* 暗号化アルゴリズムの SHA ラウンド回数\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* 暗号化アルゴリズムの SHA ラウンド回数\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* 暗号化アルゴリズムの SHA ラウンド回数\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+"  -Z, --selinux-user            このユーザアカウントへの新規 SELinux\n"
+"                                ユーザマッピング\n"
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* 暗号化アルゴリズムの SHA ラウンド回数\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* 暗号化アルゴリズムの SHA ラウンド回数\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+"  -Z, --selinux-user            このユーザアカウントへの新規 SELinux\n"
+"                                ユーザマッピング\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+"  -Z, --selinux-user            このユーザアカウントへの新規 SELinux\n"
+"                                ユーザマッピング\n"
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+"  -Z, --selinux-user SEUSER     SELinux のユーザマッピングに指定した\n"
+"                                SEUSER を使う\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ベースディレクトリ '%s' は不正です\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: コメント '%s' は不正です\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ホームディレクトリ '%s' は不正です\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: シャドウパスワードには -e が必要です\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: シャドウパスワードには -f が必要です\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: フィールド '%s' は不正です\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: シェル '%s' は不正です\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z は SELinux カーネル以外では使えません\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: オプション %s と %s は同時に指定できません\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: UID %lu の faillog エントリをリセットできませんでした: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: UID %lu の lastlog エントリをリセットできませんでした: %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: 警告: ユーザ名 %s から %s への SELinux ユーザマッピングに失敗しました。\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: ディレクトリ %s を作成できません\n"
+
+msgid "Creating mailbox file"
+msgstr "メールボックスファイルを作成します"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"グループ 'mail' が見付かりません。ユーザのメールボックスファイルを\n"
+"モード 0600 で作成します\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "メールボックスファイルの許可属性を設定します"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: ユーザ '%s' は既に存在します\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: グループ %s は存在します。このユーザをそのグループへ追加するには -g を用"
+"いてください。\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: ユーザを作成できません\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: ユーザ ID %lu は重複しています\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: グループを作成できません\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: 警告: ホームディレクトリが既に存在します。\n"
+"skel ディレクトリからのコピーは行いません。\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"使い方: userdel [オプション] ログイン名\n"
+"\n"
+"オプション:\n"
+"  -f, --force                   当該ユーザの所有でないファイルも削除する\n"
+"  -h, --help                    このヘルプを表示して終了する\n"
+"  -r, --remove                  ホームディレクトリとメールスプールを削除す"
+"る\n"
+"\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr "%s: グループ %s は他のユーザのプライマリグループなので削除しません。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove %s: %s"
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: 警告: %s を削除できません: %s"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s は %s の所有ではありません。削除は行いません\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: ユーザ %s は NIS ユーザです\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: ユーザ %s は現在ログイン中です\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: ホームディレクトリ '%s' は不正です\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: ディレクトリ %s の削除は行いません (ユーザ %s のホームディレクトリです)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: ディレクトリ %s の削除でエラーが起きました\n"
+
+#, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"使い方: usermod [オプション] ログイン名\n"
+"\n"
+"オプション:\n"
+"  -c, --comment COMMENT         GECOS フィールドの値を再設定する\n"
+"  -d, --home HOME_DIR           ユーザアカウントのホームディレクトリを\n"
+"                                再設定する\n"
+"  -e, --expiredate EXPIRE_DATE  アカウント期限切れの日を EXPIRE_DATE にする\n"
+"  -f, --inactive INACTIVE       パスワードを期限切れ後に無効化する日数を\n"
+"                                INACTIVEにする\n"
+"  -g, --gid GROUP               主グループを GROUP に変更する\n"
+"  -G, --groups GROUPS           新たな補助グループのリストを与える\n"
+"  -a, --append                  ユーザを (-G で指定された) 補助グループ群\n"
+"                                GROUPS に追加する。他のグループからの削除は\n"
+"                                行わない。\n"
+"  -h, --help                    このヘルプを表示して終了する\n"
+"  -l, --login NEW_LOGIN         ログイン名を変更する\n"
+"  -L, --lock                    このユーザアカウントをロックする\n"
+"  -m, --move-home               現ホームディレクトリの内容を新たな場所に\n"
+"                                移動する (-d が指定された場合のみ)\n"
+"  -o, --non-unique              一意でないユーザ (UID の重なるユーザ) を\n"
+"                                許可する\n"
+"  -p, --password PASSWORD       新たな暗号化済みパスワードを与える\n"
+"  -s, --shell SHELL             このユーザのログインシェルを変更する\n"
+"  -u, --uid UID                 このユーザの UID を変更する\n"
+"  -U, --unlock                  このユーザアカウントのロックを解除する\n"
+"%s\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+"  -Z, --selinux-user            このユーザアカウントへの新規 SELinux\n"
+"                                ユーザマッピング\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: ユーザのパスワードをアンロックするとパスワードのないアカウントができま"
+"す。\n"
+"このユーザのパスワードをアンロックするには usermod -p でパスワードを設定\n"
+"すべきです。\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: ユーザ '%s' は既に %s に存在します\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: ひとつもフラグが指定されていません\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e および -f にはシャドウパスワードが必要です\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L, -p, -U フラグは同時に指定できません\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID '%lu' は既に存在します\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: ディレクトリ %s は存在します\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: %s を作成できません\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: %s を chown できません\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: 警告: 古いホームディレクトリ %s を完全削除できませんでした"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: ディレクトリ %s の名前を %s に変更できません\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: ユーザ %lu の lastlog エントリをユーザ %lu にコピーできませんでした: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: ユーザ %lu の faillog エントリをユーザ %lu にコピーできませんでした: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: 警告: %s は %s の所有ではありません\n"
+
+msgid "failed to change mailbox owner"
+msgstr "mailbox 所有者の変更に失敗しました"
+
+msgid "failed to rename mailbox"
+msgstr "mailbox の名前変更に失敗しました"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"%s を変更しました。\n"
+"整合性を保つために %s を変更する必要があるかもしれません。\n"
+"その場合はコマンド '%s' を使ってください。\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"使い方: vipw [オプション]\n"
+"\n"
+"オプション:\n"
+"  -g, --group                   group データベースを編集する\n"
+"  -h, --help                    このヘルプを表示して終了する\n"
+"  -p, --passwd                  passwd データベースを編集する\n"
+"  -q, --quiet                   表示抑制モード\n"
+"  -s, --shadow                  shadow ないし gshadow データベースを編集す"
+"る\n"
+"\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: %s を削除できませんでした\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s は変更されません\n"
+
+msgid "Couldn't get file context"
+msgstr "ファイルコンテキストを取得できません"
+
+msgid "setfscreatecon () failed"
+msgstr "setfscreatecon () が失敗しました"
+
+msgid "Couldn't lock file"
+msgstr "ファイルをロックできません"
+
+msgid "Couldn't make backup"
+msgstr "バックアップを作成できません"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s を復旧できませんでした: %s (あなたの変更は %s にあります)\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "使い方: faillog [オプション]\n"
+#~ "\n"
+#~ "オプション:\n"
+#~ "  -a, --all                     全ユーザの faillog 記録を表示する\n"
+#~ "  -h, --help                    このヘルプメッセージを表示して終了する\n"
+#~ "  -l, --lock-time SEC           ログイン失敗後 SEC 秒アカウントをロックす"
+#~ "る\n"
+#~ "  -m, --maximum MAX             ログインの失敗が許される回数を MAX にす"
+#~ "る\n"
+#~ "  -r, --reset                   ログイン失敗のカウンタをリセットする\n"
+#~ "  -t, --time DAYS               最近 DAYS 日分の faillog 記録を表示する\n"
+#~ "  -u, --user LOGIN              ユーザ LOGIN の faillog 記録を表示する。\n"
+#~ "                                あるいは -r, -m, -l が同時に指定された場合"
+#~ "は\n"
+#~ "                                このユーザのみの失敗カウンタに制限を加え"
+#~ "る\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "使い方: groupadd [オプション] GROUP\n"
+#~ "\n"
+#~ "オプション:\n"
+#~ "  -f, --force                   指定グループが存在していた場合、終了ステー"
+#~ "タス\n"
+#~ "                                success で強制的に終了する\n"
+#~ "  -g, --gid GID                 新グループの GID\n"
+#~ "  -h, --help                    このヘルプメッセージを表示して終了する\n"
+#~ "  -K, --key KEY=VALUE           /etc/login.defs のデフォルトを変更する\n"
+#~ "  -o, --non-unique              一意でないグループ (GID の重なるグループ) "
+#~ "の\n"
+#~ "                                作成を許可する\n"
+#~ "  -p, --password PASSWORD       新規グループにこの暗号化パスワードを用い"
+#~ "る\n"
+#~ "  -r, --system                  システムアカウントを作成する\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "使い方: groupmod [オプション] GROUP\n"
+#~ "\n"
+#~ "オプション:\n"
+#~ "  -g, --gid GID                 GROUP の新 GID を設定する\n"
+#~ "  -h, --help                    このヘルプメッセージを表示して終了する\n"
+#~ "  -n, --new-name NEW_GROUP      GROUP の新グループ名を設定する\n"
+#~ "  -o, --non-unique              一意でないグループ (GID の重なるグループ) "
+#~ "の\n"
+#~ "                                使用を GROUP に許可する\n"
+#~ "  -p, --password PASSWORD       暗号化済みパスワードを新しいパスワードに用"
+#~ "いる\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "使い方: useradd [オプション] ログイン名\n"
+#~ "\n"
+#~ "オプション:\n"
+#~ "  -b, --base-dir BASE_DIR       新ユーザアカウントのホームディレクトリの\n"
+#~ "                                ベースディレクトリを指定する\n"
+#~ "  -c, --comment COMMENT         新ユーザアカウントの GECOS フィールド\n"
+#~ "  -d, --home-dir HOME_DIR       新ユーザアカウントのホームディレクトリ\n"
+#~ "  -D, --defaults                変更された useradd のデフォルト設定を\n"
+#~ "                                保存または表示する\n"
+#~ "  -e, --expiredate EXPIRE_DATE  アカウント期限切れの日を EXPIRE_DATE にす"
+#~ "る\n"
+#~ "  -f, --inactive INACTIVE       パスワードを期限切れ後に無効化する日数を\n"
+#~ "                                INACTIVEにする\n"
+#~ "  -g, --gid GROUP               新ユーザアカウントのグループを GROUP にす"
+#~ "る\n"
+#~ "  -G, --groups GROUPS           新ユーザアカウントの補助グループの\n"
+#~ "                                リストを与える\n"
+#~ "  -h, --help                    このヘルプを表示して終了する\n"
+#~ "  -k, --skel SKEL_DIR           skel ディレクトリを指定する\n"
+#~ "  -K, --key KEY=VALUE           /etc/login.defs のデフォルトを変更する\n"
+#~ "  -l, --no-log-init             このユーザを lastlog・faillog のデータ\n"
+#~ "                                ベースに追加しない。\n"
+#~ "  -m, --create-home             新ユーザアカウントのホームディレクトリを\n"
+#~ "                                作成する\n"
+#~ "  -M, --no-create-home          ユ−ザのホームディレクトリを作成しない\n"
+#~ "                                (/etc/login.defs より優先される)\n"
+#~ "  -N, --no-user-group           ユーザと同名のグループを作成しない\n"
+#~ "  -o, --non-unique              一意でないユーザ (UID の重なるユーザ) の\n"
+#~ "                                作成を許可する\n"
+#~ "  -p, --password PASSWORD       新ユーザアカウントの暗号化済みパスワード"
+#~ "を\n"
+#~ "                                与える\n"
+#~ "  -r, --system                  システムアカウントを作成する\n"
+#~ "  -s, --shell SHELL             新ユーザアカウントのログインシェル\n"
+#~ "  -u, --uid UID                 新ユーザアカウントのユーザ ID を指定する\n"
+#~ "  -U, --user-group              ユーザと同名のグループを作成する\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "使い方: %s [オプション] [入力]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            暗号化の方法 (%s のどれか)\n"
+#~ "  -r, --system                  システムアカウントを作成する\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "パスワードは期限付きになりました。"
+
+#~ msgid "setfscreatecon() failed"
+#~ msgstr "setfscreatecon()が失敗しました"
diff --git a/po/kk.gmo b/po/kk.gmo
new file mode 100644 (file)
index 0000000..6156c41
Binary files /dev/null and b/po/kk.gmo differ
diff --git a/po/kk.po b/po/kk.po
new file mode 100644 (file)
index 0000000..5a271ed
--- /dev/null
+++ b/po/kk.po
@@ -0,0 +1,2842 @@
+# shadowutils to kazakh.
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# Baurzhan Muftakhidinov <baurthefirst@gmail.com>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadowutils\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2009-03-02 13:55+0600\n"
+"Last-Translator: Baurzhan M. <baurthefirst@gmail.com>\n"
+"Language-Team: Kazakh <kk_KZ@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"'%s' атындағы %s ішінде бірнеше жазба бар. Оны pwck не grpck көмегімен "
+"дұрыстаңыз.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "шифрлеу тәсіліне libcrypt-тан қолдау жоқ па? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Баптауларды жүктеу үшін орын жоқ.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "баптау қатесі - белгісіз элемент '%s' (администраторға хабарласыңыз)\n"
+
+msgid "Password: "
+msgstr "Пароль: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s пайдаланушының паролі: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Ескерту: белгісіз топ %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Ескерту: топ саны өте көп\n"
+
+msgid "Your password has expired."
+msgstr "Пароліңіздің мерзімі аяқталған."
+
+msgid "Your password is inactive."
+msgstr "Пароліңіз қазір сөндірілген."
+
+msgid "Your login has expired."
+msgstr "Тіркелгіңіздің мерзімі аяқталған."
+
+msgid "  Contact the system administrator."
+msgstr "  Жүйелік администраторыңызға хабарласыңыз."
+
+msgid "  Choose a new password."
+msgstr "  Жаңа пароль таңдаңыз."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Пароліңіздің мерзімі %ld күнде аяқталады.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Пароліңіздің мерзімі ертең аяқталады."
+
+msgid "Your password will expire today."
+msgstr "Пароліңіздің мерзімі бүгін аяқталады."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "%s терминалын ауыстыру мүмкін емес"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: жолдар өте ұзын\n"
+
+msgid "Environment overflow\n"
+msgstr "Орындалу орта айнымалыларының шектен көп саны\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Сіз $%s өзгерте алмайсыз\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"Жүйеге кірудің %d-ші қате талабы.\n"
+"Соңғысы %s болған, терминал %s.\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "Ерекше UID алу мүмкін емес (бос UID-тар қалмады)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "Ерекше GID алу мүмкін емес (бос GID-тар қалмады)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "Ерекше UID алу мүмкін емес (бос UID-тар қалмады)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "Ерекше UID алу мүмкін емес (бос UID-тар қалмады)\n"
+
+msgid "Too many logins.\n"
+msgstr "Жүйеге кірудің шектен көп талап саны.\n"
+
+msgid "You have new mail."
+msgstr "Сізде жаңа пошта бар."
+
+msgid "No mail."
+msgstr "Сізде пошта жоқ."
+
+msgid "You have mail."
+msgstr "Сізде пошта бар."
+
+msgid "no change"
+msgstr "өзгерістер жоқ"
+
+msgid "a palindrome"
+msgstr "палиндром"
+
+msgid "case changes only"
+msgstr "өзгерістер тек таңбалардың регистрінде ғана"
+
+msgid "too similar"
+msgstr "өте ұқсас"
+
+msgid "too simple"
+msgstr "өте оңай"
+
+msgid "rotated"
+msgstr "аударылған"
+
+msgid "too short"
+msgstr "өте қысқа"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Пароль қате: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() ішіндегі %d қатесі\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Пароль өзгертілді."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: пароль сәтті жаңартылды\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "%s үшін қате пароль.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Қате ENCRYPT_METHOD мәні: '%s'.\n"
+"Бастапқы DES мәні қолданылады.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "'%s' бумасына ауысу мүмкін емес\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Бума табылмады, HOME=/ бумасына кіру орындалады"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s орындау мүмкін емес"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "'%s' түбірлік бумасы қате\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Түбірлік бумасын '%s' мәніне ауыстыру мүмкін емес\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Терминалыңыздың атын анықтау мүмкін емес."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: жады жеткіліксіз\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "жадыдан %d байт бөлу мүмкін емес\n"
+
+msgid "No"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Қолданылуы: chage [опциялар] [ПАЙДАЛАНУШЫ_АТЫ]\n"
+"\n"
+"Опциялар:\n"
+"  -d, --lastday LAST_DAY        парольдің аяқталу мерзімін LAST_DAY күніне "
+"орнату\n"
+"  -E, --expiredate EXPIRE_DATE  тіркелгінің аяқталу мерзімі EXPIRE_DATE "
+"күніне орнату\n"
+"  -h, --help                    осы көмек ақпаратын көрсетіп, шығу\n"
+"  -I, --inactive INACTIVE       парольдің мерзімі біткен соң оны INACTIVE "
+"болып\n"
+"                                орнату үшін өтетін күн саны\n"
+"  -l, --list                    тіркелгінің жұмыс уақыты ақпаратын көрсету\n"
+"  -m, --mindays MIN_DAYS        парольді ауыстыру арасында өту керек ең аз "
+"күн санын\n"
+"                                MIN_DAYS мәніне орнату\n"
+"  -M, --maxdays MAX_DAYS        парольді ауыстыру арасында өту керек ең көп "
+"сүн санын\n"
+"                                MAX_DAYS мәніне орнату\n"
+"  -W, --warndays WARN_DAYS      мерзімі аяқталу туралы хабарламаны WARN_DAYS "
+"күн қалғанда көрсете бастау\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Жаңа мәнді енгізіңіз, немесе ұсынылатынды қабылдау үшін ENTER басыңыз"
+
+msgid "Minimum Password Age"
+msgstr "Парольдің ең аз жасау мерзімі (күн)"
+
+msgid "Maximum Password Age"
+msgstr "Парольдің ең көп жасау мерзімі (күн)"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Парольді соңғы ауыстыру (ЖЖЖЖ-АА-КК)"
+
+msgid "Password Expiration Warning"
+msgstr "Мерзімі аяқталу туралы хабарламаны көрсету (күн саны)"
+
+msgid "Password Inactive"
+msgstr "Тіркелгіні күн өткенде сөндіру (күн саны)"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Тіркелгінің мерзімі аяқталатын күні (ЖЖЖЖ-АА-КК)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Парольді соңғы ауыстыру\t\t\t\t\t: "
+
+msgid "never"
+msgstr "ешқашан"
+
+msgid "password must be changed"
+msgstr "пароль өзгертілу керек"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Парольдің мерзімі бітеді\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Пароль сөндіріледі\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Тіркелгі сөндіріледі\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Парольді ауыстыру арасында өту керек ең аз күн саны\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Парольді ауыстыру арасында өту керек ең көп күн саны\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+"Парольдің мерзімі аяқталу туралы хабарламаны көрсете бастау, күн саны\t: %"
+"ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: '%s' күні қате\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: қате сан аргументі '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: \"l\" опциясын басқалармен бірге қолданбаңыз\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Рұқсат жоқ.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Сіздің пайдаланушы атын анықтау мүмкін емес.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM көмегімен шындылықты тексеру қатемен аяқталды\n"
+
+#, fuzzy, c-format
+#| msgid "Cannot lock the password file; try again later.\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "Парольдер файлын оқшаулау мүмкін емес; кейінірек қайталап көріңіз.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: %s файлын ашу мүмкін емес\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failure forking: %s\n"
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: үрдісті бастау қатесі: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: привилегиялар деңгейін төмендету мүмкін емес (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: көлеңкелі парольдер файлын жоқ болып тұр\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: привилегиялар деңгейін төмендету мүмкін емес (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: пайдаланушы `%s' жоқ болып тұр\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s үшін мерзім ақпаратын өзгерту\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: жолдарды өзгерту қатесі\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Қолданылуы: %s [-f толықl_аты] [-r бөлме_нөмірі] [-w жұмыс_тел]\n"
+"\t[-h үй_тел] [-o басқа] [пайдаланушы аты]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Қолданылуы: %s [-f толық_аты] [-r бөлме_нөмірі] [-w жұмыс_тел] [-h үй_тел]\n"
+
+msgid "Full Name"
+msgstr "Толық аты"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Бөлме нөмірі"
+
+msgid "Work Phone"
+msgstr "Жұмыс телефон нөмірі"
+
+msgid "Home Phone"
+msgstr "Үй телефон нөмірі"
+
+msgid "Other"
+msgstr "Басқа"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Суперпайдаланушы (root) құқығын алу мүмкін емес.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: пайдаланушы аты қате: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: бөлме нөмірі қате: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: жұмыс телефон нөмірі қате: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: үй телефон нөмірі қате: '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' құрамында қате таңбалар бар\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' құрамында қате таңбалар бар\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: пайдаланушы `%s' жоқ болып тұр\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: NIS клиентінде '%s' пайдаланушыны ауыстыруға мүмкін емес.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' - бұл клиент үшін NIS сервері.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s үшін пайдаланушы ақпаратын өзгерту\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: жолдар өте ұзын\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Қолданылуы: %s [опциялар]\n"
+"\n"
+"Опциялары:\n"
+"  -c, --crypt-method            шифрлеу тәсіл (%s-дан біреу)\n"
+"  -e, --encrypted               шифрленген пароль енгізіледі\n"
+"  -h, --help                    осы көмек ақпаратын көрсету және шығу\n"
+"  -m, --md5                     DES орнына MD5 алгоритмін қолдану, егер "
+"пароль\n"
+"                                шифрленбеген түрде енгізілсе\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* тектес алгоритмдер үшін SHA\n"
+"                                раундтар саны\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s flag is ONLY allowed with the %s flag\n"
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s жалаушасын тек %s жалаушасымен БІРГЕ қолдануға болады\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: -c, -e, және -m жалаушалары өзара үйлеспейді\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: қолдауы жоқ шифрлеу тәсілі: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: жол %d: жол өте ұзын\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: жол %d: жаңа пароль жоқ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: %s тобы жоқ болып тұр\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: жол %d: жазбаны жаңарту мүмкін емес\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: қателер орын алды, өзгерістер сақталмады\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* тектес алгоритмдер үшін SHA\n"
+"                                раундтар саны\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: пайдаланушы `%s' жоқ болып тұр\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: пайдаланушы `%s' жоқ болып тұр\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Қолданылуы: chsh [опциялар] [LOGIN]\n"
+"\n"
+"Опциялары:\n"
+"  -h, --help                    осы көмек ақпаратын көрсету және шығу\n"
+"  -s, --shell SHELL             пайдаланушы тіркелгісі үшін жаңа қоршам\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Қоршам"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Сіз %s үшін қоршамды өзгерте алмайсыз.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%s үшін қоршамды өзгерту\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Қате мән: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s - дұрыс қоршам емес.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Қолданылуы: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Пайдаланушы Сәтсіз кіру саны Максимум Соңғы         Қайда\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds қалды]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds оқшаулар саны]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unknown user or range: %s\n"
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Белгісіз пайдаланушы не диапазон: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: %s файлын ашу мүмкін емес\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "%s үшін парольді өзгертуге болмайды.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -A үшін көлеңкелі парольдер файлына қолдау керек\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: %s тобы жоқ болып тұр\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failure forking: %s\n"
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: үрдісті бастау қатесі: %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "%s тобы үшін парольді өзгерту\n"
+
+msgid "New Password: "
+msgstr "Жаңа пароль:"
+
+msgid "Re-enter new password: "
+msgstr "Жаңа парольді қайта енгізіңіз:"
+
+msgid "They don't match; try again"
+msgstr "Олар сәйкес емес; қайтадан енгізіңіз"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Кейінірек қайталап көріңіз\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "%s пайдаланушыны %s тобына қосу\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "%s пайдаланушыны %s тобынан өшіру\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: пайдаланушы `%s' жоқ болып тұр\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Терминал емес\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* тектес алгоритмдер үшін SHA\n"
+"                                раундтар саны\n"
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* тектес алгоритмдер үшін SHA\n"
+"                                раундтар саны\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s - дұрыс топ аты емес\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid group name `%s'\n"
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: қате топ аты `%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K талап етеді KEY=МӘНІ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: %s тобы бар болып тұр\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Мүше бар болып тұр\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Қолданылуы: groupdel топ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: %s бумасының атын %s атына ауыстыру мүмкін емес\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot change the primary group of user '%s' from %u to %u.\n"
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+"%s: '%s' пайдаланушының басыңқы тобын %u тобынан %u тобына өзгертуге мүмкін "
+"емес.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: %s тобы жоқ болып тұр\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: '%s' тобы NIS тобы болып тұр.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s қазір NIS сервері болып тұр\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: %s қазір NIS пайдаланушысы болып тұр\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Out of memory. Cannot update the group database.\n"
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Жады жеткіліксіз. Топтар дерекқорын жаңарту мүмкін емес.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid group name `%s'\n"
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: қате топ аты `%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: %s тобы NIS тобы болып тұр\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: белгісіз пайдаланушы %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Қолданылуы: %s [-r] [-s] [group [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Қолданылуы: %s [-r] [-s] [топ]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s пен -r өзара үйлеспейді\n"
+
+msgid "invalid group file entry"
+msgstr "group файл ішінде қате жазба"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "'%s' жолын өшіру керек пе? "
+
+msgid "duplicate group entry"
+msgstr "қайталанатын топ жазбасы"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "қате топ аты '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "қате топ аты '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "%s тобы: %s пайдаланушы жоқ\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "'%s' қатысушыны өшіру керек пе? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "%s ішінде сәйкес көлеңкелі топ жазбасы жоқ\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "'%s' тобын %s ішіне қосу керек пе ?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "көлеңкелі топтар файлының қате жазбасы"
+
+msgid "duplicate shadow group entry"
+msgstr "қайталанатын көлеңкелі топтар жазбасы"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "көлеңкелі топ %s: %s әкімші пайдаланушысы жоқ\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "'%s' әкімші пайдаланушысын өшіру керек пе? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "көлеңкелі топ %s: %s пайдаланушысы жоқ\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: файлдар жаңартылды\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: өзгерістер жоқ\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Қолданылуы: groupdel топ\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Қолданылуы: groupdel топ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: %s файлын жаңарту мүмкін емес\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Қолданылуы: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Қолданылуы: id\n"
+
+msgid " groups="
+msgstr " топтар="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Қолданылуы: lastlog [опциялар]\n"
+"\n"
+"Опциялары:\n"
+"  -b, --before КҮН             мерзімі КҮНнен үлкен ғана lastlog жазбаларын "
+"көрсету\n"
+"  -h, --help                    осы көмек ақпаратын көрсету және шығу\n"
+"  -t, --time КҮН               мерзімі КҮНнен кіші ғана lastlog жазбаларын "
+"көрсету\n"
+"  -u, --user ТІРКЕЛГІ          көрсетілген ТІРКЕЛГІ үшін lastlog жазбаларын "
+"көрсету\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Пайдаланушы    Порт    Қайдан      Соңғы"
+
+msgid "Username                Port     Latest"
+msgstr "Пайдаланушы       Порт     Соңғы"
+
+msgid "**Never logged in**"
+msgstr "**Жүйеге ешқашан кірмеді**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: күтпеген аргумент: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Қолданылуы: %s [-p] [аты]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h хост] [-f аты]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r хост\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Жүйеге кірудің қате уақыты"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Жүйе техникалық жөндеуді өткізу үшін жабылған"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Жүйеден мәжбүрлі шығу орындалмады -- root үшін жүйеге кіруге рұқсат "
+"етілген.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Жүйеге кіруді орындау уақыты %d секундтан кейін аяқталды.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Utmp жазбасы жоқ. Сізге exec \"login\" командасын бірінші деңгейден \"sh\" "
+"қосу керек"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM қатесі, тоқтатылды: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s пайдаланушы аты: "
+
+msgid "login: "
+msgstr "пайдаланушы аты:"
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Талаптар саны шектен асты (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: тоқтатуды PAM сұраған\n"
+
+msgid "Login incorrect"
+msgstr "Жүйеге кіру орындалмады"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s пайдаланушы аты: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: үрдісті бастау қатесі: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "%s үшін TIOCSCTTY орындау қатемен аяқталды"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Ескерту: тіркелгі уақытша сөндірілгеннен кейін қайта қосылған."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Жүйеге соңғы кіру: %s, терминал %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Жүйеге соңғы кіру: %.19s, терминал %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " қайдан: %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"жүйеге кіру уақыты өтті\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Қолданылуы: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Қолданылуы: newgrp [-] [топ]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Қолданылуы: sg топ [[-c] командасы]\n"
+
+msgid "Invalid password.\n"
+msgstr "пароль қате.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: үрдісті бастау қатесі: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: пайдаланушы `%s' жоқ болып тұр\n"
+
+msgid "too many groups\n"
+msgstr "топ саны шектен тыс\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: group %s is a shadow group, but does not exist in /etc/group\n"
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: топ %s shadow тобы болып тұр, бірақ /etc/group ішінен табылмады\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: '%s' пайдаланушы аты қате\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: '%s' пайдаланушы аты қате\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: жол %d: жол қате\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: %s пайдаланушы жазбасын жаңарту мүмкін емес (passwd дерекқорында жоқ)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: жол %d: пайдаланушыны жасау мүмкін емес\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: жол %d: топты жасау мүмкін емес\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: пайдаланушы `%s' жоқ болып тұр\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: жол %d: парольді жаңарту мүмкін емес\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: жол %d: mkdir қатесі\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: жол %d: chown қатесі\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: жол %d: жазбаны жаңарту мүмкін емес\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: passwd [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -a, --all                     report password status on all accounts\n"
+#| "  -d, --delete                  delete the password for the named "
+#| "account\n"
+#| "  -e, --expire                  force expire the password for the named "
+#| "account\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -k, --keep-tokens             change password only if expired\n"
+#| "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --lock                    lock the named account\n"
+#| "  -n, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -q, --quiet                   quiet mode\n"
+#| "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+#| "  -S, --status                  report password status on the named "
+#| "account\n"
+#| "  -u, --unlock                  unlock the named account\n"
+#| "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "  -x, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Қолданылуы: passwd [опциялар] [ТІРКЕЛГІ]\n"
+"\n"
+"Опциялары:\n"
+"  -a, --all                     барлық тіркелгілер үшін парольдер күйін "
+"шығару\n"
+"  -d, --delete                  көрсетілген тіркелгі үшін парольді өшіру\n"
+"  -e, --expire                  көрсетілген тіркелгі үшін пароль мерзімінің "
+"аяқталуын мәжбүрлету\n"
+"  -h, --help                    осы көмек ақпаратын көрсету және шығу\n"
+"  -k, --keep-tokens             парольді тек мерзімі аяқталса ғана өзгерту\n"
+"  -i, --inactive INACTIVE       мерзімі аяқталғаннан кейін тіркелгіні "
+"сөндіру үшін\n"
+"                                керек күн санын INACTIVE мәніне орнату\n"
+"  -l, --lock                    көрсетілген тіркелгіні оқшаулау\n"
+"  -n, --mindays MIN_DAYS        парольді өзгерту арасында ең аз рұқсат "
+"етілген күн санын\n"
+"                                MIN_DAYS мәніне орнату\n"
+"  -q, --quiet                   тыныш түрі\n"
+"  -r, --repository REPOSITORY   REPOSITORY репозиторийінде парольді өзгерту\n"
+"  -S, --status                  көрсетілген тіркелгі үшін пароль күйін "
+"шығару\n"
+"  -u, --unlock                  көрсетілген тіркелгіні оқшаулаудан босату\n"
+"  -w, --warndays WARN_DAYS      мерзімі аяқталуы туралы WARN_DAYS қалғанда "
+"ескерте бастау\n"
+"  -x, --maxdays MAX_DAYS        парольді өзгерту арасында ең көп рұқсат "
+"етілген күн санын\n"
+"                                MAX_DAYS мәніне орнату\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Ағымдағы пароль:"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Жаңа парольді енгізіңіз (минимум %d белгі болсын)\n"
+"Парольді бас, кіші әріптер және сандарды араластыра қолданып құраңыз.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Жаңа парольді енгізіңіз (минимум %d, максимум %d белгі болсын)\n"
+"Парольді бас, кіші әріптер және сандарды араластыра қолданып құраңыз.\n"
+
+msgid "New password: "
+msgstr "Жаңа пароль:"
+
+msgid "Try again."
+msgstr "Қайталап көріңіз."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Ескерту: өте оңай пароль (қолданам десеңіз қайта енгізіңіз)."
+
+msgid "They don't match; try again.\n"
+msgstr "Олар өзара сәйкес емес; қайтадан көріңіз.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s үшін парольді өзгертуге болмайды.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s үшін парольді қазір өзгертуге болмайды.\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: unlocking the user would result in a passwordless account.\n"
+#| "You should set a password with usermod -p to unlock this user account.\n"
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: пайдаланушыны оқшаулаудан босату парольсіз тіркелгіге әкелуі мүмкін.\n"
+"Осыны жасау үшін сіз оған парольді usermod -p қолданып орнатуыңыз керек.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: %s репозиторийіне қолдау жоқ\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr "%s: %s пайдаланушының %s үшін паролді өзгертуге құқығы жоқ\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Сізде%s үшін парольдік ақпаратты оқи не өзгерте алмайсыз.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s үшін парольді өзгерту\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s пайдаланушының паролі өзгертілмеді.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Пароль өзгертілді."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Мерзімі аяқталу туралы хабарламаны көрсету (күн саны)"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Қолданылуы: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s пен -r өзара үйлеспейді\n"
+
+msgid "invalid password file entry"
+msgstr "парольдер файлының қате жазбасы"
+
+msgid "duplicate password entry"
+msgstr "қайталанатын пароль жазбасы"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "қате пайдаланушы аты '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "қате пайдаланушы аты '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "пайдаланушы %s: %u тобы жоқ\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "пайдаланушы %s: %s бумасы жоқ\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "пайдаланушы %s: %s бағдарламасы жоқ\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "%s ішінде сәйкес парольдер файлының жазбасы жоқ\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "'%s' пайдаланушыны %s ішіне қосу керек пе? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "көлеңкелі парольдер файлының қате жазбасы"
+
+msgid "duplicate shadow password entry"
+msgstr "қайталанатын көлеңкелі пароль жазбасы"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "пайдаланушы %s: соңғы парольді өзгерту уақыты болашақта\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: %s файлын ашу мүмкін емес\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Қолданылуы: id\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not authorized to change the password of %s\n"
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: %s пайдаланушының %s үшін паролді өзгертуге құқығы жоқ\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Қолданылуы: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Осы тіркелгі үшін su орындауға РҰҚСАТ ЖОҚ.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Парольдік аутентификацияны аттап өтеміз.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Шындылықты тексеру үшін ӨЗІҢІЗДІҢ пароліңізді енгізіңіз.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Қолданылуы: su [опциялар] [ТІРКЕЛГІ]\n"
+"\n"
+"Опциялары:\n"
+"  -c, --command COMMAND         шақырылатын қоршамға COMMAND командасын "
+"беру\n"
+"  -h, --help                    осы көмек ақпаратын көрсету және шығу\n"
+"  -, -l, --login                қоршамды тіркелгі қоршамына ауыстыру\n"
+"  -m, -p,\n"
+"  --preserve-environment        орта айнымалыларының мәндерін мен қоршамды "
+"сақтау\n"
+"  -s, --shell SHELL             passwd-да көрсетілгеннің орнына SHELL "
+"қоршамын қолдану\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: терминалда орындалуы керек\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: қате %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Белгісіз id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Сізде su %s жасау үшін құқығыңыз жоқ\n"
+
+msgid "(Enter your own password)"
+msgstr "(Өзіңіздің пароліңізді енгізіңіз)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Елемеу)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM көмегімен шындылықты тексеру қатемен аяқталды\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Сізде su %s жасау үшін құқығыңыз жоқ\n"
+
+msgid "No shell\n"
+msgstr "Қоршам жоқ\n"
+
+msgid "No password file"
+msgstr "Парольдер файлы жоқ"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY қатесі"
+
+msgid "No password entry for 'root'"
+msgstr "'root' үшін пароль жазбасы жоқ"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Кәдімгі жүктелу үшін control-d басыңыз,\n"
+"(немесе жүйені жөндеу режиміне өту үшін root паролін енгізіңіз):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Жүйені жөндеу режиміне өту"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: жаңа defaults файлын жасау мүмкін емес\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: жаңа defaults файлын ашу мүмкін емес\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: жол %d: chown қатесі\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: атын ауыстыру: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: '%s' тобы NIS тобы болып тұр.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: шектен көп топ саны көрсетілген (максимум %d).\n"
+
+#, c-format
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* тектес алгоритмдер үшін SHA\n"
+"                                раундтар саны\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* тектес алгоритмдер үшін SHA\n"
+"                                раундтар саны\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* тектес алгоритмдер үшін SHA\n"
+"                                раундтар саны\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* тектес алгоритмдер үшін SHA\n"
+"                                раундтар саны\n"
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* тектес алгоритмдер үшін SHA\n"
+"                                раундтар саны\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* тектес алгоритмдер үшін SHA\n"
+"                                раундтар саны\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: '%s' негізгі бумасы қате\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: '%s' түсініктемесі қате\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: '%s' үй бумасы қате\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: -e үшін көлеңкелі парольдер керек\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: -f үшін көлеңкелі парольдер керек\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: '%s' жолы қате\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: '%s' қоршамы қате\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: %s пен %s опциялары өзара ерегіседі\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: %s бумасын жасау мүкін емес\n"
+
+msgid "Creating mailbox file"
+msgstr "Пошта файлын құру"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"'mail' тобы табылмады. Пайдаланушының пошта файлы 0600 түрінде құрылады.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Пошта файлға рұқсаттарды орнату"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: %s пайдаланушысы бар болып тұр\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: %s тобы бар болып тұр - егер оған жаңа пайдаланушыны қосқыңыз келсе, -g "
+"қолданыңыз.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: пайдаланушыны жасау мүмкін емес\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u бар болып тұр\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: топты құру мүмкін емес\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: ескерту: үй бумасы бар болып тұр.\n"
+"Оның ішіне skel бумасынан бірде-бір файл көшірілмеді.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Қолданылуы: userdel [опциялар] ТІРКЕЛГІ\n"
+"\n"
+"Опциялары:\n"
+"  -f, --force                   файлдарды өшіруді мәжбүрлеу,\n"
+"                                пайдаланушы иелігінде болмаса да\n"
+"  -h, --help                    осы көмек ақпаратын көрсету және шығу\n"
+"  -r, --remove                  үй бумасын мен поштасын өшіру\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: %s тобын өшіру мүмкін емес, ол басқа пайдалануы үшін басыңқы топ болып "
+"табылады.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: ексерту: өшіру мүмкін емес"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s қазір %s иелігінде емес, өшірілмейді\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: %s қазір NIS пайдаланушысы болып тұр\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: %s пайдаланушысы қазір жүйеге кіріп тұр\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: '%s' үй бумасы қате\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: %s бумасы өшірілмеді (%s пайдаланушының үй бумасын өшіру талабы)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: %s бумасын өшіру қатемен аяқталды\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: usermod [options] LOGIN\n"
+#| "\n"
+#| "Options:\n"
+#| "  -c, --comment COMMENT         new value of the GECOS field\n"
+#| "  -d, --home HOME_DIR           new home directory for the user account\n"
+#| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -g, --gid GROUP               force use GROUP as new primary group\n"
+#| "  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+#| "  -a, --append                  append the user to the supplemental "
+#| "GROUPS\n"
+#| "                                mentioned by the -G option without "
+#| "removing\n"
+#| "                                him/her from other groups\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -l, --login NEW_LOGIN         new value of the login name\n"
+#| "  -L, --lock                    lock the user account\n"
+#| "  -m, --move-home               move contents of the home directory to "
+#| "the\n"
+#| "                                new location (use only with -d)\n"
+#| "  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+#| "  -p, --password PASSWORD       use encrypted password for the new "
+#| "password\n"
+#| "  -s, --shell SHELL             new login shell for the user account\n"
+#| "  -u, --uid UID                 new UID for the user account\n"
+#| "  -U, --unlock                  unlock the user account\n"
+#| "\n"
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Қолданылуы: usermod [опциялар] ТІРКЕЛГІ\n"
+"\n"
+"Опциялары:\n"
+"  -c, --comment COMMENT         GECOS жазбасы үшін жаңа мәні\n"
+"  -d, --home HOME_DIR           пайдаланушы тіркелгісі үшін жаңа үй бумасы\n"
+"  -e, --expiredate EXPIRE_DATE  тіркелгінің аяқталу мерзімін EXPIRE_DATE "
+"күніне орнату\n"
+"  -f, --inactive INACTIVE       мерзімі аяқталғаннан кейін пароль "
+"сөндірілетін күн\n"
+"                                санын INACTIVE мәніне орнату\n"
+"  -g, --gid ТОП                 жаңа басыңқы топ ретінде ТОПты қолдануды "
+"мәжбүрлету\n"
+"  -G, --groups ТОПТАР           пайдаланушыны қосымша ТОПТАРға қосу\n"
+"  -a, --append                  пайдаланушыны қосымша ТОПТАР ішіне қосу\n"
+"                                -G опциясы сияқты, пайдаланушыны басқа "
+"топтардан\n"
+"                                өшірмейді\n"
+"  -h, --help                    осы көмек ақпаратын көрсету және шығу\n"
+"  -l, --login NEW_LOGIN         тіркелгі үшін жаңа аты\n"
+"  -L, --lock                    пайдаланушы тіркелгісін оқшаулау\n"
+"  -m, --move-home               үй бумасының құрамасын жаңа жерге ауыстыру\n"
+"                                (тек -d опциясымен бірге қолданыңыз)\n"
+"  -o, --non-unique              қайталанатын (ерекше емес) UID-тарды "
+"қолдануды рұқсат ету\n"
+"  -p, --password PASSWORD       жаңа пароль ретінде шифрленген парольді "
+"қолдану\n"
+"  -s, --shell SHELL             пайдаланушы тіркелгісі үшін жаңа қоршам\n"
+"  -u, --uid UID                 пайдаланушы тіркелгісі үшін жаңа UID\n"
+"  -U, --unlock                  пайдаланушы тіркелгісін оқшаулаудан босату\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: unlocking the user would result in a passwordless account.\n"
+#| "You should set a password with usermod -p to unlock this user account.\n"
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: пайдаланушыны оқшаулаудан босату парольсіз тіркелгіге әкелуі мүмкін.\n"
+"Осыны жасау үшін сіз оған парольді usermod -p қолданып орнатуыңыз керек.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: %s пайдаланушысы бар болып тұр\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: жалаушалар көрсетілмеген\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e пен -f үшін көлеңкелі парольдер керек\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L, -p және -U жалаушаларын бірге қолдануға болмайды\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Мүше бар болып тұр\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: %s бумасы бар болып тұр\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: %s құру мүмкін емес\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: %s үшін chown жасау мүмкін емес\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: ескерту: %s ескі үй бумасын толығымен өшіру мүмкін емес"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: %s бумасының атын %s атына ауыстыру мүмкін емес\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: ескерту: %s қазір %s иелігінде емес\n"
+
+msgid "failed to change mailbox owner"
+msgstr "mailbox иесін ауыстыру қатемен аяқталды"
+
+msgid "failed to rename mailbox"
+msgstr "mailbox атын ауыстыру қатемен аяқталды"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "You have modified %s.\n"
+#| "You may need to modify %s for consistency.\n"
+#| "Please use the command `%s' to do so.\n"
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Сіз %s түзеттіңіз.\n"
+"Сізге %s құрамасын түзетуге керек болуы мүмкін.\n"
+"Оны орындау үшін `%s' командасын қолданыңыз.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Қолданылуы: vipw [опциялар]\n"
+"\n"
+"Опциялары:\n"
+"  -g, --group                   топтар дерекқорын түзету\n"
+"  -h, --help                    осы көмек ақпаратын көрсету және шығу\n"
+"  -p, --passwd                  парольлдер дерекқорын түзету\n"
+"  -q, --quiet                   \"тыныш\" түрі\n"
+"  -s, --shadow                  shadow не gshadow дерекқорын түзету\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: привилегиялар деңгейін төмендету мүмкін емес (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s өзгертілмеді\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Файлды оқшаулау мүмкін емес"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Файлды оқшаулау мүмкін емес"
+
+msgid "Couldn't make backup"
+msgstr "Қор көшірмені жасау мүмкін емес"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s қайтару мүмкін емес: %s (сіздің өзгертулеріңіз %s ішінде)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Қолданылуы: faillog [опциялар]\n"
+#~ "\n"
+#~ "Опциялары:\n"
+#~ "  -a, --all                     барлық пайдаланушылар үшін faillog "
+#~ "жазбаларын көрсету\n"
+#~ "  -h, --help                    осы көмек ақпаратын көрсету және шығу\n"
+#~ "  -l, --lock-time SEC           сәтсіз талаптан кейін тіркелгіні SEC "
+#~ "секундқа оқшаулау\n"
+#~ "  -m, --maximum MAX             максимум сәтсіз жүйеге кіру талап шегін "
+#~ "MAX мәніне орнату\n"
+#~ "  -r, --reset                   сәтсіз жүйеге кіру талаптары жазбаларын "
+#~ "өшіру\n"
+#~ "  -t, --time DAYS               DAYS күнге дейінгі faillog жазбаларын "
+#~ "көрсету\n"
+#~ "  -u, --user ПАЙДАЛАНУШЫ              көрсетілген ПАЙДАЛАНУШЫ ушін "
+#~ "faillog жазбаларын\n"
+#~ "                                көрсету немесе шектеу (-r, -m не -l бірге "
+#~ "қолдану керек)\n"
+#~ "                                мәндерін баптау\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Қолданылуы: groupadd [опциялар] ТОП\n"
+#~ "\n"
+#~ "Опциялары:\n"
+#~ "  -f, --force                   көрсетілген топ бар болса да сәтті "
+#~ "нәтижені\n"
+#~ "                                қайтаруды мәжбүрлету\n"
+#~ "  -g, --gid GID                 жаңа топ үшін GID қолдану\n"
+#~ "  -h, --help                    осы көмек ақпаратын көрсету және шығу\n"
+#~ "  -K, --key KEY=МӘН           /etc/login.defs ішіндегісін елемеу(одан "
+#~ "басыңқы болу)\n"
+#~ "  -o, --non-unique              қайталанатын GID бар топтарды құруға "
+#~ "рұқсат беру\n"
+#~ "  -p, --password PASSWORD       жаңа топ үшін шифрленген парольді "
+#~ "қолдану\n"
+#~ "  -r, --system                  жүйелік тіркелгіні жасау\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Қолданылуы: groupmod [опциялар] ТОП\n"
+#~ "\n"
+#~ "Опциялары:\n"
+#~ "  -g, --gid GID                 ТОП үшін жаңа GID қолдануды мәжбүрлету\n"
+#~ "  -h, --help                    осы көмек ақпаратын көрсету және шығу\n"
+#~ "  -n, --new-name NEW_GROUP      ТОП үшін жаңа ТОП_АТЫ атын қолдануды "
+#~ "мәжбүрлету\n"
+#~ "  -o, --non-unique              ТОП үшін қайталанатын (ерекше емес) GID "
+#~ "қолдануға рұқсат беру\n"
+#~ "  -p, --password PASSWORD       жаңа пароль ретінде шифрленген парольді "
+#~ "қолдану\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~| "                                home directory\n"
+#~| "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~| "account\n"
+#~| "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~| "  -D, --defaults                print or save modified default useradd\n"
+#~| "                                configuration\n"
+#~| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~| "                                to INACTIVE\n"
+#~| "  -g, --gid GROUP               force use GROUP for the new user "
+#~| "account\n"
+#~| "  -G, --groups GROUPS           list of supplementary groups for the "
+#~| "new\n"
+#~| "                                user account\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~| "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~| "  -l,                           do not add the user to the lastlog and\n"
+#~| "                                faillog databases\n"
+#~| "  -m, --create-home             create home directory for the new user\n"
+#~| "                                account\n"
+#~| "  -N, --no-user-group           do not create a group with the same name "
+#~| "as\n"
+#~| "                                the user\n"
+#~| "  -o, --non-unique              allow create user with duplicate\n"
+#~| "                                (non-unique) UID\n"
+#~| "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~| "                                account\n"
+#~| "  -r, --system                  create a system account\n"
+#~| "  -s, --shell SHELL             the login shell for the new user "
+#~| "account\n"
+#~| "  -u, --uid UID                 force use the UID for the new user "
+#~| "account\n"
+#~| "  -U, --user-group              create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Қолданылуы: useradd [опциялар] ТІРКЕЛГІ\n"
+#~ "\n"
+#~ "Опциялары:\n"
+#~ "  -b, --base-dir BASE_DIR       жаңа пайдаланушы тіркелгісінің үй бумасы\n"
+#~ "                                үшін базалық бума\n"
+#~ "  -c, --comment COMMENT         жаңа пайдаланушы тіркелгісі үшін GECOS "
+#~ "мәнін орнату\n"
+#~ "  -d, --home-dir HOME_DIR       жаңа пайдаланушы тіркелгісі үшін үй "
+#~ "бумасы\n"
+#~ "  -D, --defaults                өзгертілген бастапқы useradd баптауларын\n"
+#~ "                                шығару немесе сақтау\n"
+#~ "  -e, --expiredate EXPIRE_DATE  тіркелгі мерзімі аяқталуын EXPIRE_DATE "
+#~ "күніне орнату\n"
+#~ "  -f, --inactive INACTIVE       мерзімі аяқталған соң тіркелгі сөндірілу "
+#~ "үшін өту керек\n"
+#~ "                                күн санын INACTIVE мәніне орнату\n"
+#~ "  -g, --gid GROUP               жаңа пайдаланушы тіркелгісі үшін GROUP "
+#~ "қолдануды мәжбүрлету\n"
+#~ "  -G, --groups GROUPS           жаңа пайдаланушы тіркелгісі үшін қосымша\n"
+#~ "                                топтар тізімін шығару\n"
+#~ "  -h, --help                    осы көмек ақпаратын көрсету және шығу\n"
+#~ "  -k, --skel SKEL_DIR           басақ skel бумасын қолдану\n"
+#~ "  -K, --key KEY=VALUE           /etc/login.defs ішіндегі мәндерін үстінен "
+#~ "жазу\n"
+#~ "  -l,                           пайдаланушыны lastlog пен faillog "
+#~ "дерекқорларына\n"
+#~ "                                 қоспау\n"
+#~ "  -m, --create-home             жаңа пайдаланушы үшін үй бумасын құру\n"
+#~ "  -N, --no-user-group           пайдаланушымен аттас жаңа топты құрмау\n"
+#~ "  -o, --non-unique              қайталанатын (ерекше емес) UID-тары бар\n"
+#~ "                                тіркелгілерді жасауға рұқсат ету\n"
+#~ "  -p, --password PASSWORD       жаңа тіркелгі үшін шифрленген парольді "
+#~ "қолдану\n"
+#~ "  -r, --system                  жүйелік тіркелгіні жасау\n"
+#~ "  -s, --shell SHELL             жаңа тіркелгі үшін қоршам\n"
+#~ "  -u, --uid UID                 жаңа тіркелгі үшін UID қолдануды "
+#~ "мәжбүрлету\n"
+#~ "  -U, --user-group              пайдаланушымен аттас топты құру\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Қолданылуы: %s [опциялар] [кіріс]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            шифрдеу тәсілі(%s біреу)\n"
+#~ "  -r, --system                  жүйелік тіркелгілерді жасау\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Пароль мерзімі аяқталған болып орнатылды."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: парольдер файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: парольдер файлын ашу мүмкін емес\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: көлеңкелі парольдер файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: көлеңкелі парольдер файлын ашу мүмкін емес\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: көлеңкелі парольдер файлын үстінен жазу мүмкін емес\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: парольдер файлын үстінен жазу мүмкін емес\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: парольдер файлын жаңарту мүмкін емес\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: көлеңкелі парольдер файлын жаңарту мүмкін емес\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tТолық аты: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tБөлме нөмірі: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tЖұмыс телефон нөмірі: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tҮй телефон нөмірі: %s\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Парольдер файлын ашу мүмкін емес.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: /etc/passwd файлында %s табылмады\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Парольдер файлында жазбаны жаңарту мүмкін емес.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Парольдер файлында өзгерістерді сақтау мүмкін емес.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Парольдер файлын оқшаулаудан босату мүмкін емес.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: group файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: group файлын ашу мүмкін емес\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: gshadow файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: shadow файлын ашу мүмкін емес\n"
+
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: gshadow файлын жаңарту қатесі\n"
+
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: group файлын жаңарту қатесі\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: жол %d: белгісіз топ %s\n"
+
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: жол %d: топ жазбасын жаңарту мүмкін емес\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: shadow файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: shadow файлын жаңарту қатесі\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: парольдер файлын жаңарту қатесі\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: жол %d: белгісіз пайдаланушы %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: жол %d: пароль жолын жаңарту мүмкін емес\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: белгісіз пайдаланушы\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Белгісіз пайдаланушы: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Қолданылуы: %s [-r|-R] топ\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a пайдаланушы] топ\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d пайдаланушы] топ\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A пайдаланушы,...] [-M пайдаланушы,...] топ\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M пайдаланушы,...] топ\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: shadow файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: файлды ашу мүмкін емес\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: файлды үстінен жазу мүмкін емес\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: shadow файлын үстінен жазу мүмкін емес\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: файлды оқшаулаудан босату мүмкін емес\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: жазбаны жаңарту мүмкін емес\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: shadow ішіндегі жазбасын жаңарту мүмкін емес\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "белгісіз топ: %s\n"
+
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: файлды жабу мүмкн емес\n"
+
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: shadow файлын жабу мүмкін емес\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Сіз кімсіз?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: белгісіз қатысушы %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: жаңа топты құру қатесі\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: group файлын үстінен жазу мүмкін емес\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: shadow group файлын үстінен жазу мүмкін емес\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: group файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: group файлын ашу мүмкін емес\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: shadow group файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: shadow group файлын ашу мүмкін емес\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u бар болып тұр\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: топ жазбасын өшіру қатесі\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: көлеңкелі топ жазбасын өшіру қатесі\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: пайдаланушының басыңқы тобын өшіру мүмкін емес.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Өшірілетін қатысушылар табылмады\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Қолданылуы: groupmems -a пайдаланушы_аты | -d пайдаланушы_аты | -D | -l [-"
+#~ "g пайдаланушы_аты]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Әр түрлі топтарға қатысушыларды тек root қоса алады\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Топтық рұқсат керек\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Ағымдағы топтың басыңқы иесі жоқ\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "Келесі үшін PAM шындылықты тексеру орындалмады:\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "group файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "group файлын ашу мүмкін емес\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "group файлын жабу мүмкін емес\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s жазбасы /etc/group ішінен табылмады\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u қайталанбайтын GID емес (бар болып тұр)\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s аты бар болып тұр\n"
+
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: passwd файлын үстінен жазу мүмкін емес\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: passwd файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: passwd файлын ашу мүмкін емес\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s:  '%s' пайдаланушының басыңқы тобын %u тобынан %u тобына ауыстыру "
+#~ "мүмкін емес, өйткені ол passwd файлында жоқ.\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: %s файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: %s үшін көлеңкелі жазбаны жаңарту мүмкін емес\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: %s тобы үшін жазбаны жаңарту мүмкін емес\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: shadow group файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: shadow group файлын ашу мүмкін емес\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: %s shadow group өшіру мүмкін емес\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: shadow group файлын жаңарту мүмкін емес\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: group файлын жаңарту мүмкін емес\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: shadow group файлын өшіру мүмкін емес\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "белгісіз UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "белгісіз GID: %lu\n"
+
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: топ ID `%s' дұрыс емес\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: топ %s құрылды, сәйкес келетін көлеңкелі топты жасау қатемен "
+#~ "аяқталды\n"
+
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: пайдаланушы ID `%s' дұрыс емес\n"
+
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: пайдаланушы аты `%s' қате\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: /etc/passwd оқшаулау мүмкін емес.\n"
+
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: /etc/shadow оқшаулау мүмкін емес.\n"
+
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: /etc/group оқшаулау мүмкін емес.\n"
+
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: /etc/gshadow оқшаулау мүмкін емес.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: файлдарды ашу мүмкін емес\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: файлдарды жаңарту мүмкін емес\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: жол %d: %s пайдаланушы табылмады\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: %s үшін пароль жазбасын жаңарту мүмкін емес\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: passwd файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: passwd файлын ашу мүмкін емес\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: %s үшін көлеңкелі жазбаны өшіру мүмкін емес\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: shadow файлын жаңарту мүмкін емес\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: passwd файлын жаңарту мүмкін емес\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: %s пайдаланушы үшін жазбаны жаңарту мүмкін емес\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: көлеңкелі парольдер файлын өшіру мүмкін емес\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: белгісіз GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: белгісіз топ %s\n"
+
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr ""
+#~ "%s: Жады жеткіліксіз. Көлеңкелі топтар дерекқорын жаңарту мүмкін емес.\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: парольдер файлын үстінен жазу мүмкін емес\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: көлеңкелі парольдер файлын үстінен жазу мүмкін емес\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: көлеңкелі парольдер файлын оқшаулау мүмкін емес\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: көлеңкелі парольдер файлын ашу мүмкін емес\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: топтар файлын оқшаулау қатесі\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: топтар файлын ашу қатесі\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: көлеңкелі топтар файлын оқшаулау қатесі\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: көлеңкелі топтар файлын ашу қатесі\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: жаңа пароль жазбасын қосу қатесі\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: жаңа көлеңкелі пароль жазбасын қосу қатесі\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: ескерту: CREATE_HOME үшін қолдау жоқ, оның орнына -m қолданыңыз.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: топ жазбасын жаңарту қатемен аяқталды\n"
+
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: көлеңкелі топ жазбасын жаңарту қатемен аяқталды\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: group файлын ашу мүмкін емес\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: көлеңкелі group файлын ашу мүмкін емес\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: пароль жазбасын өшіру мүмкін емес\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: көлеңкелі пароль жазбасын өшіру мүмкін емес\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: %s пайдаланушысы жоқ\n"
+
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: жаңа көлеңкелі топ жазбасын қосу қатемен аяқталды\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu қазір қолданылуда\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: пароль жазбасын өзгерту қатемен аяқталды\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: пароль жазбасын өшіру қатемен аяқталды\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: көлеңкелі пароль жазбасын өшіру қатемен аяқталды\n"
diff --git a/po/km.gmo b/po/km.gmo
new file mode 100644 (file)
index 0000000..51414d8
Binary files /dev/null and b/po/km.gmo differ
diff --git a/po/km.po b/po/km.po
new file mode 100644 (file)
index 0000000..5110315
--- /dev/null
+++ b/po/km.po
@@ -0,0 +1,2607 @@
+# translation of shadow_po_km.po to Khmer
+# translation of shadow_po_km.po to
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Khoem Sokhem <khoemsokhem@khmeros.info>, 2006.
+# Poch Sokun <sokun_poch@khmeros.info>, 2006.
+# auk piseth <piseth_dv@khmeros.info>, 2006.
+# Leang Chumsoben <soben@khmeros.info>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow_po_km\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2006-06-28 10:08+0700\n"
+"Last-Translator: Khoem Sokhem <khoemsokhem@khmeros.info>\n"
+"Language-Team: Khmer <support@khmeros.info>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "មិន​អាច​បម្រុង​ទុក​ទំហំ​សម្រាប់​ព័ត៌មាន​​កំណត់​រចនាសម្ព័ន្ធទេ​ ។\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "កំហុស​ការ​កំណត់​រចនាសម្ព័ន្ធ​ - មិន​ស្គាល់​ធាតុ '%s' (ជូន​ដំណឹង​អ្នក​គ្រប់គ្រង​)\n"
+
+msgid "Password: "
+msgstr "ពាក្យ​សម្ងាត់​ ៖ "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "ពាក្យសម្ងាត់​របស់ %sសម្ងាត់ ៖ "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "ការ​ព្រមាន ៖ មិន​ស្គាល់​ក្រុម %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "ការព្រមាន​ ៖ មាន​ច្រើន​ក្រុម​ពេក\n"
+
+msgid "Your password has expired."
+msgstr "ពាក្យ​សម្ងាត់​របស់​អ្នក​បាន​ផុត​កំណត់ហើយ​ ។"
+
+msgid "Your password is inactive."
+msgstr "ពាក្យ​សម្ងាត់​របស់​អ្នកអសកម្ម​ ។"
+
+msgid "Your login has expired."
+msgstr "ការចូល​របស់អ្នក​បាន​ផុត​កំណត់ហើយ​ ។"
+
+#, fuzzy
+msgid "  Contact the system administrator."
+msgstr "  ទាក់ទងទៅ​អ្នកគ្រប់គ្រងប្រព័ន្ធ​ ។\n"
+
+#, fuzzy
+msgid "  Choose a new password."
+msgstr "  ជ្រើស​ពាក្យ​សម្ងាត់​មួយ ។\n"
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "ពាក្យ​សម្ងាត់​របស់​អ្នក​នឹង​ផុត​កំណត់ក្នុងពេល​ %ld ថ្ងៃ ។\n"
+
+#, fuzzy
+msgid "Your password will expire tomorrow."
+msgstr "ពាក្យ​សម្ងាត់​របស់​អ្នក​នឹងផុត​កំណត់នៅ​ថ្ងៃ​ស្អែក​ ។​\n"
+
+#, fuzzy
+msgid "Your password will expire today."
+msgstr "ពាក្យ​សម្ងាត់​របស់​អ្នក​នឹងផុត​កំណត់នៅ​ថ្ងៃ​នេះ ។\n"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "មិន​អាច​ប្តូរ​ tty %s បានឡើយ"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s ៖ វាល គឺ​វែងវែងពេក​\n"
+
+msgid "Environment overflow\n"
+msgstr "​លើស​ចំណុះ​បរិស្ថាន\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "អ្នក​ប្រហែល​មិន​បាន​ប្តូរ​ $%s បានទេ\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d បានបរាជ័យ ចាប់តាំងពីចូលលើក​ចុងក្រោយ​គេមក​ ។\n"
+"ចុងក្រោយគេនៅ​ %s លើ %s ។\n"
+msgstr[1] ""
+"%d ចូល​ចុងក្រោយ​បានបរាជ័យ​ ។\n"
+"ចុងក្រោម​ %s  %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s ៖ មិនអាចយក​ UID ដែលមានតែមួយ​បានទេ\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s ៖ មិនអាច​យក​​ GID ​ដែលមានតែមួយ​បានឡើយ​\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s ៖ មិនអាចយក​ UID ដែលមានតែមួយ​បានទេ\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s ៖ មិនអាចយក​ UID ដែលមានតែមួយ​បានទេ\n"
+
+msgid "Too many logins.\n"
+msgstr "ចូល​ច្រើន​ពេក​ ។\n"
+
+msgid "You have new mail."
+msgstr "អ្នក​មានសំបុត្រ​ថ្មី​ ។​"
+
+msgid "No mail."
+msgstr "គ្មាន​សំបុត្រ​​​ទេ​ ។"
+
+msgid "You have mail."
+msgstr "អ្នក​មាន​សំបុត្រ ។"
+
+msgid "no change"
+msgstr "គ្មាន​​ផ្លាស់ប្តូរ​ "
+
+msgid "a palindrome"
+msgstr "ឃ្លាដែលអាច​អាន​ត្រឡប់​ចុះត្រឡប់ឡើងបាន"
+
+msgid "case changes only"
+msgstr "ករណី​បាន​តែ​ប្តូរ​"
+
+msgid "too similar"
+msgstr "ស្រដៀងគ្នា​ពេក"
+
+msgid "too simple"
+msgstr "ធម្មតា​ពេក"
+
+msgid "rotated"
+msgstr "បានបង្វិល​"
+
+msgid "too short"
+msgstr "ខ្លីពេក​"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "ពាក្យ​សម្ងាត់​មិន​ត្រឹមត្រូវ​ ៖ %s ។  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "ពាក្យ​សម្ងាត់​ ៖ pam_start() បាន​បរាជ័យ​, កំហុស​ %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "ពាក្យសម្ងាត់ ៖ %s\n"
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "ពាក្យ​សម្ងាត់​បាន​ប្តូរ​ ។\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "ពាក្យសម្ងាត់ ៖ ពាក្យ​សម្ងាត់​បាន​ធ្វើ​ឲ្យ​ទាន់​សម័យ​ដោយ​ជោគជ័យ​\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "ពាក្យ​សម្ងាត់​មិន​ត្រឹមត្រូវ​សម្រាប់​ %s ។\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "មិន​អាច​​ cd ចូលទៅ​ '%s' បានទេ\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "គ្មាន​ថត​ ការចូល​ជាមួយ​ HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "មិន​អាចប្រតិបត្តិ​ %s បានទេ"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "ថត​ root មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "មិន​អាច​ប្តូរ​ថត root ទៅ​ '%s'បាន​ទេ​\n"
+
+msgid "Unable to determine your tty name."
+msgstr "មិន​អាច​កំណត់​ឈ្មោះ​ tty របស់​អ្នកបានទេ​ ។"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s ៖ អស់​សតិ​\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) បាន​បរាជ័យ​\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "ទេ\n"
+
+#, fuzzy
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"ការ​ប្រើប្រាស់​ ៖ ប្តូរ​អ្នកប្រើ​ [options]​\n"
+"ជម្រើស​ ៖\n"
+"  -d, --ថ្ងៃ​មុន​ LAST_DAY\t កំណត់​ការប្ដូរ​ពាក្យ​សម្ងាត់​មុន ​ទៅ​ជា​ LAST_DAY\n"
+"  -E, --កាលបរិច្ឆេទ​ផុត​កំណត់​ EXPIRE_DATE\t កំណត់​កាលបរិច្ឆេទ​ការផុត​កំណត់​​របស់គណនីទៅ​ជា​ "
+"EXPIRE_DATE\n"
+"  -h, --ជំនួយ​\t\t\t បង្ហាញ​សារ​ជំនួយនេះ ហើយ​ ចេញ​\n"
+"  -I, --អសកម្ម​ INACTIVE\t កំណត់​ពាក្យ​សម្ងាត់​ឲ្យ​​អសកម្ម ​បន្ទាប់​ពី​ការផុត​កំណត់​\n"
+"\t\t\t\tទៅជា INACTIVE\n"
+"  -l, --បញ្ជី​\t\t\t បង្ហាញព័ត៌មាន​ចាស់​របស់​​គណនី​\n"
+"  -m, --ចំនួនថ្ងៃ​អប្បរមា MIN_DAYS\t កំណត់​ចំនួន​ថ្ងៃ​អប្បបរមា ​មុន​ពាក្យ​សម្ងាត់​ \n"
+"\t\t\t\tប្តូរទៅ​ជា​ MIN_DAYS\n"
+"  -M, --ចំនួនថ្ងៃ​អតិបរមា MAX_DAYS\t កំណត់​ចំនួន​ថ្ងៃ​អតិបរមា ​មុន​ពាក្យ​សម្ងាត់​\n"
+"\t\t\t\tប្តូរ​ទៅ​ជា​ MAX_DAYS\n"
+"  -W, --ថ្ងៃព្រមាន WARN_DAYS\tកំណត់ការព្រមាន​ថ្ងៃ​ផុត​កំណត់​ទៅជា​ WARN_DAYS\n"
+"\n"
+
+#, fuzzy
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "បញ្ចូល​តម្លៃ​ថ្មី​ ឬ ​សង្កត់​ បញ្ចូល សម្រាប់​លំនាំដើម​\n"
+
+msgid "Minimum Password Age"
+msgstr "អាយុ​ពាក្យសម្ងាត់​អប្បរមា"
+
+msgid "Maximum Password Age"
+msgstr "អាយុ​ពាក្យសម្ងាត់​អតិបរមាsword Age"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "ការប្ដូរ​ពាក្យ​សម្ងាត់​ជាលើកចុងក្រោយ (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "ការព្រមាន​ការផុត​កំណត់​នៃ​ពាក្យ​សម្ងាត់​"
+
+msgid "Password Inactive"
+msgstr "ពាក្យ​សម្ងាត់​អសកម្ម​"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "កាលបរិច្ឆេទ​ការផុត​កំណត់របស់​​គណនី​ (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "ការប្តូរ​ពាក្យ​សម្ងាត់​លើកចុង​ក្រោយ​\t\t\t\t\t ៖ "
+
+#, fuzzy
+msgid "never"
+msgstr "កុំ\n"
+
+#, fuzzy
+msgid "password must be changed"
+msgstr "ពាក្យ​សម្ងាត់​ត្រូវ​តែ​ប្តូរ​\n"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "ពាក្យ​សម្ងាត់​ផុត​កំណត់​\t\t\t\t\t ៖ "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "ពាក្យ​សម្ងាត់ អសកម្ម \t\t\t\t\t ៖ "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "គណនី​ផុត​កំណត់​\t\t\t\t\t\t ៖ "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "ចំនួន​ថ្ងៃ​អប្បបរមា​រវាង​ការផ្លាស់​ប្តូរ​ពាក្យ​សម្ងាត់​\t\t ៖ %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "ចំនួនថ្ងៃ​អតិបរមា​រវាង​ការផ្លាស់ប្តូរ​ពាក្យ​សម្ងាត់​\t\t ៖ %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "ចំនួន​ថ្ងៃ​នៃការព្រមាន​ មុនពេល​ពាក្យសម្ងាត់​ផុតកំណត់\t ៖ %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s ៖ កាលបរិច្ឆទ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s ៖ អាគុយម៉ង់​ជាលេខ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s ៖ មិន​រូមបញ្ចូល​ទាំង​ \"l\" ជាមួយ​ទង់​ដទៃទៀត​ទេ\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s ៖ សិទ្ធ​ត្រូវ​បាន​បដិសេធ ។\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s ៖ មិន​អាចកំណត់​ឈ្មោះ​អ្នកប្រើ​របស់​អ្នក​បាន​ទេ ។\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s ៖ PAM ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវបាន​បរាជ័យ​\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s ៖ មិន​អាច​ចាក់សោ​ឯកសារ​បានឡើយ សូមព្យាយាម​ម្តង​ទៀតនៅពេលក្រោយ​\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s ៖ មិនអាច​បើក​ឯកសារ​ %s បានទេ\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s ៖ ការចែកជាពីរវិធី​​បានបរាជ័យ​ ៖ %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s ៖ គ្មាន​វត្តមាន​​ឯកសារ​ពាក្យ​សម្ងាត់ស្រមោលទេ​\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "ការផ្លាស់​ប្តូរ​ព័ត៌មាន​ចាស់​សម្រាប់​ %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s ៖ កំហុស​ការផ្លាស់ប្តូរ​វាល​\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"កា​រប្រើប្រាស់​ ៖ %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "របៀបប្រើ ៖ %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+
+msgid "Full Name"
+msgstr "ឈ្មោះ​ពេញ"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s ៖ %s\n"
+
+msgid "Room Number"
+msgstr "លេខបន្ទប់​"
+
+msgid "Work Phone"
+msgstr "ទូរស័ព្ទ​​​កន្លែង​​​ធ្វើការ"
+
+msgid "Home Phone"
+msgstr "ទូរស័ព្ទនៅ​ផ្ទះ"
+
+msgid "Other"
+msgstr "ផ្សេងៗ"
+
+msgid "Cannot change ID to root.\n"
+msgstr "មិន​អាចផ្លាស់ប្តូរ​លេខ​សម្គាល់​ទៅ​ជា​ root បាន​ឡើយ​ ។\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s ៖ ឈ្មោះ​មិន​ត្រឹមត្រូវ​ ៖ '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s ៖ ចំនួន​បន្ទប់​មិន​ត្រឹមត្រូវ​ ៖ '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s ៖ លេខទូរស័ព្ទ​នៅ​កន្លែង​ធ្វើការ​មិន​ត្រឹមត្រូវ​ ៖ '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s ៖ លេខ​ទូរស័ព្ទនៅផ្ទះ​មិន​ត្រឹមត្រូវ​ ៖ '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s ៖ '%s' មាន​តួអក្សរ​មិន​ត្រឹមត្រូវ​\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s ៖ '%s' មាន​តួអក្សរ​មិន​ត្រឹមត្រូវ​\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s ៖ មិនអាចផ្លាស់​​ប្តូរ​អ្នក​ប្រើបានទេ​ '%s' លើ​ម៉ាស៊ីន​ភ្ញៀវ NIS បានទេ ។\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s ៖ '%s' ជាមេ​ NIS សម្រាប់​ម៉ាស៊ីន​ភ្ញៀវ​នេះ​ ។\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "កំពុងផ្លាស់​​ប្តូរ​ព័ត៌មាន​អ្នកប្រើ​សម្រាប់​ %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s ៖ វាល គឺ​វែងវែងពេក​\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"របៀបប្រើ ៖ chpasswd [ជម្រើស]\n"
+"\n"
+"ជម្រើស ៖\n"
+"  -e, --encrypted\tពាក្យសម្ងាត់​ដែល​បាន​ផ្ដល់​ត្រូវ​បាន​អ៊ិនគ្រីប\n"
+"  -h, --help\t\tបង្ហាញ​សារ​ជំនួយ​​នេះ និង​ចេញ\n"
+"  -m, --md5\t\tប្រើ​ការ​អ៊ិនគ្រីប MD5 ជំនួស​ឲ្យ DES នៅ​ពេល​ដែល​ពាក្យសម្ងាត់\n"
+"\t\t\tដែល​បាន​ផ្ដល់​មិន​ត្រូវបាន​អ៊ិនគ្រីប​ទេ\n"
+"\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: ទង់ -a គឺត្រូវបានអនុញ្ញាត​បានតែជាមួយទង់ -G ប៉ុណ្ណោះ\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ បន្ទាត់​វែងពេក​\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ បាត់បង់​ពាក្យ​សម្ងាត់​ថ្មី​\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s ៖ មិនមានក្រុម​ %sឡើយ​\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ មិនអាចធ្វើឲ្យ​ធាតុបញ្ចូល​ទាន់សម័យបានឡើយ\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s ៖ បានរកឃើញ​កំហុស មិនអើពើនឹងការផ្លាស់ប្ដូរ​\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, fuzzy
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"របៀបប្រើ ៖ userdel [ជម្រើស] LOGIN\n"
+"\n"
+"ជម្រើស ៖\n"
+"  -f, --force\t\t\tបង្ខំ​ឲ្យ​យក​ឯកសារ​ចេញ ទោះបី​ជា​មិន​បាន​គ្រប់គ្រង​ដោយ​អ្នកប្រើ​ក៏ដោយ\n"
+"  -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+"  -r, --remove\t\t\tយកថ​ត​ផ្ទះ  និង​ហុង​សំបុត្រ​ចេញ\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "សែលចូល"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "អ្នក​មិនអាច​​ប្តូរ​សែល​សម្រាប់​ %s បានទេ ។\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "កំពុង​ផ្លាស់ប្ដូរ​សែល​ចូល​សម្រាប់ %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s ៖ ធាតុបញ្ចូល​​មិន​ត្រឹមត្រូវ​ ៖ %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s គឺជា​សែល​មិន​ត្រឹមត្រូវ​ ។\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "របៀបប្រើ ៖ ការផុតកំណត់ {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "ចូល       ភាពបរាជ័យ​នៃការចូល​ចុងក្រោយ​ជាអតិបរមា                   លើ\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds នៅសល់]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds ជាប់សោ]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "មិន​ស្គាល់​អ្នក​ប្រើ ៖ %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s ៖ មិនអាច​បើក​ឯកសារ​ %s បានទេ\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "មិនអាចប្ដូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ %s បានឡើយ ។\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s ៖ បានទាមទារ​ពាក្យសម្ងាត់​ក្រុម​ស្រមោល​សម្រាប់​ -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s ៖ មិនមានក្រុម​ %sឡើយ​\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s ៖ ការចែកជាពីរវិធី​​បានបរាជ័យ​ ៖ %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "កំពុង​ប្តូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ក្រុម​ %s\n"
+
+msgid "New Password: "
+msgstr "ពាក្យសម្ងាត់​ថ្មី ៖ "
+
+msgid "Re-enter new password: "
+msgstr "បញ្ចូល​ពាក្យ​សម្ងាត់​ថ្មី​ឡើង​វិញ ៖ "
+
+msgid "They don't match; try again"
+msgstr "ពួកគេ​មិន​បាន​​ផ្គូរផ្គងទេ ។ សូមព្យាយាម​ម្តង​ទៀត​"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s ៖ សូមព្យាយាមម្ដងទៀត​នៅពេលក្រោយ\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "កំពុង​បន្ថែម​អ្នកប្រើ​ %s ទៅក្រុម​ %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "កំពុង​យក​អ្នក​ប្រើ​ %s ចេញពី​ក្រុម​ %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s ៖ មិនមែន​ tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s  ៖ %s ជា​ឈ្មោះ​ក្រុម​មិន​ត្រឹមត្រូវ​\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "ឈ្មោះ​ក្រុម​ '%s' មិនត្រឹមត្រូវ\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K ទាមទារ​ KEY=VALUE\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s ៖ មានក្រុម​ %s រួច​ហើយ​\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr "របៀបប្រើ​ ៖ ក្រុម​ groupdel \n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s ៖ មិនអាចប្ដូរឈ្មោះ​ថត​ %s ទៅ​ជា​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s ៖ មិនអាចផ្លាស់​​ប្តូរ​អ្នក​ប្រើបានទេ​ '%s' លើ​ម៉ាស៊ីន​ភ្ញៀវ NIS បានទេ ។\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s ៖ មិនមានក្រុម​ %sឡើយ​\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s ៖ ក្រុម​ '%s' គឺជាក្រុម​ NIS ។\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s ៖ %s គឺជា​មេ NIS\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s ៖ អ្នកប្រើ​ %s គឺជា​អ្នក​​ប្រើ​ NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: អស់​សតិ​ក្នុង​ក្នុងការធ្វើឲ្យ​ក្រុមទាន់សម័យ\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "ឈ្មោះ​ក្រុម​ '%s' មិនត្រឹមត្រូវ\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s ៖ ក្រុម​ %s គឺជា​ក្រុម NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s ៖ មិន​ស្គាល់​អ្នកប្រើ​ %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "របៀបប្រើ ៖​ %s [-r] [-s] [group [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "របៀបប្រើ ៖ %s [-r] [-s] [group]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s ៖ -s និង​ -r គឺមិន​ត្រូវ​គ្នាទេ​\n"
+
+#, fuzzy
+msgid "invalid group file entry"
+msgstr "ធាតុបញ្ចូល​ឯកសារក្រុម​មិនត្រឹមត្រូវ​\n"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "លុប​បន្ទាត់​ '%s' ឬ ? "
+
+#, fuzzy
+msgid "duplicate group entry"
+msgstr "ធាតុបញ្ចូល​​ក្រុម​ស្ទួន​\n"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ឈ្មោះ​ក្រុម​ '%s' មិនត្រឹមត្រូវ\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "ឈ្មោះ​ក្រុម​ '%s' មិនត្រឹមត្រូវ\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "ក្រុម​ %s ៖ គ្មាន​អ្នកប្រើ​ %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "លុប​សមាជិក​ '%s' ឬ ? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "គ្មាន​ធាតុបញ្ចូល​ឯកសារ​ក្រុមផ្គូរផ្គង​នៅក្នុង​​ %s ទេ\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "បន្ថែម​ក្រុម​ '%s' ទៅក្នុង​ %s ឬ ?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid shadow group file entry"
+msgstr "ធាតុ​ឯកសារ​ក្រុម​ស្រមោល​មិន​ត្រឹមត្រូវ\n"
+
+#, fuzzy
+msgid "duplicate shadow group entry"
+msgstr "ធាតុ​ក្រុម​ស្រមោល​ស្ទួន​\n"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "ក្រុម​ស្រមោល​ %s ៖ គ្មានអ្នកប្រើដែលគ្រប់គ្រង​ %s ទេ\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "លុប​សមាជិក​ដែល​គ្រប់គ្រង​ '%s' ឬ ? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "ក្រុម​ស្រមោល​ %s ៖ គ្មាន​អ្នក​ប្រើ​ %s ទេ\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s ៖ មិនបានធ្វើឲ្យ​ឯកសារទាន់សម័យឡើយ​\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s ៖គ្មាន​ការផ្លាស់ប្ដូរ​\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "របៀបប្រើ​ ៖ ក្រុម​ groupdel \n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "របៀបប្រើ​ ៖ ក្រុម​ groupdel \n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s ៖ មិនអាច​ធ្វើឲ្យឯកសារ %s ទាន់សម័យ​បានទេ\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "របៀបប្រើ ៖ លេខសម្គាល់ [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "របៀបប្រើ​ ៖ លេខសម្គាល់\n"
+
+msgid " groups="
+msgstr " ក្រុម​="
+
+#, fuzzy
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"របៀបប្រើ ៖ lastlog [ជម្រើស]\n"
+"\n"
+"ជម្រើស ៖\n"
+"  -b, --before DAYS\tបោះពុម្ពកំណត់កំណត់ហេតុចុងក្រោយចាស់ជាង DAYS\n"
+"  -h, --help\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+"  -t, --time DAYS\tបោះពុម្ព​តែ​កំណត់ត្រា​កំណត់​ហេតុ​ចុង​ក្រោយ​ដែល​ថ្មី​ជាង DAYS ប៉ុណ្ណោះ\n"
+"  -u, --user LOGIN\tបោះពុម្ព​កំណត់ត្រា​កំណត់ហេតុ​ចុង​ក្រោយ​សម្រាប់​អ្នក​ប្រើ​ដែល​មាន LOGIN ដែល​បាន​"
+"បញ្ជាក់\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+#, fuzzy
+msgid "Username         Port     From             Latest"
+msgstr "ឈ្មោះ​អ្នក​ប្រើ         ច្រក     ពី             ចុង​ក្រោយ​បំផុត\n"
+
+#, fuzzy
+msgid "Username                Port     Latest"
+msgstr "ឈ្មោះ​អ្នក​ប្រើ                ច្រក     ចុង​ក្រោយ​បំផុត​\n"
+
+msgid "**Never logged in**"
+msgstr "**មិន​ដែល​ចូល​សោះ**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "កំណត់ត្រាចុងក្រោយ ៖ អាគុយម៉ង់​មិន​រំពឹង​ទុក​ ៖ %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "របៀបប្រើ ៖ %s [-p] [name]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h ម៉ាស៊ីន] [-f ឈ្មោះ]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r ម៉ាស៊ីន​\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+#, fuzzy
+msgid "Invalid login time"
+msgstr "ពេលវេលា​ចូល​មិន​ត្រឹមត្រូវ​\n"
+
+#, fuzzy
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"ប្រព័ន្ធ​បាន​បិទ​សម្រាប់​តំហែទាំ​ទម្រង់ការ\n"
+
+#, fuzzy
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[បាន​វៀង​ការ​ផ្ដាច់ -- បាន​អនុញ្ញាត​ការ​ចូល​ជា root ។]\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"អស់​ពេល​ចូល​បន្ទាប់ពី %d វិនាទី ។\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr "គ្មាន​ធាតុ​ utmp ឡើយ ។ អ្នក​ត្រូវ​ប្រតិបត្តិ​ \"login\" ពី​កម្រិត​ទាប​បំផុត​ \"sh\""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "ចូល ៖ PAM បរាជ័យ​ កំពុង​បោះបង់​ ៖ %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s ចូល ៖ "
+
+msgid "login: "
+msgstr "ចូល​ ៖ "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "បាន​លើសពី​ចំនួន​អតិបរ​មា​នៃ​ការ​សាកល្បង​ (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "ចូល​ ៖  PAM បានស្នើឲ្យ​បោះបង់ចោល​\n"
+
+msgid "Login incorrect"
+msgstr "ចូល​មិន​ត្រឹមត្រូវ​"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s ចូល​ ៖ "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s ៖ ការចែកជាពីរវិធី​​បានបរាជ័យ​ ៖ %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+#, fuzzy
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "ការព្រមាន ៖ បាន​អនុញ្ញាតឲ្យចូល​ម្តង​ទៀត​បន្ទាប់​ពី ចេញ​បណ្តោះអាសន្ន​​\n"
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "ចូល​ចុងក្រោយ ៖​ %s លើ​ %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "ចូល​ចុងក្រោយ​ ៖ %.19s លើ​ %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr "ពី​ %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"បានហួសពេលវេលា​ចូល​​\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "របៀបប្រើ​ ៖ លេខសម្គាល់\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "របៀបប្រើ ៖ newgrp [-] [group]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "របៀបប្រើ​ ៖ ក្រុម sg [[-c] command]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "ពាក្យ​សម្ងាត់​ចាស់ ៖ "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s ៖ ការចែកជាពីរវិធី​​បានបរាជ័យ​ ៖ %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+msgid "too many groups\n"
+msgstr "ច្រើន​ក្រុមពេក​\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s ៖ មិនមានក្រុម​ %sឡើយ​\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s ៖ឈ្មោះ​អ្នក​ប្រើ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s ៖ឈ្មោះ​អ្នក​ប្រើ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ បន្ទាត់​មិន​ត្រឹមត្រូវ​\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s ៖ មិនអាច​ធ្វើឲ្យធាតុបញ្ចូល​ទាន់សម័យ​សម្រាប់ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​អាច​បង្កើត​ GID បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​អាច​បង្កើត​ GID បានឡើយ\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​អាច​ធ្វើ​ឲ្យ​ពាក្យ​សម្ងាត់​ទាន់សម័យ​បានឡើយ​\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ mkdir បានបរាជ័យ​\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ chown បានបរាជ័យ​\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s ៖ បន្ទាត់​ %d ៖ មិនអាចធ្វើឲ្យ​ធាតុបញ្ចូល​ទាន់សម័យបានឡើយ\n"
+
+#, fuzzy
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"របៀបប្រើ ៖ passwd [ជម្រើស] [ការចូល]\n"
+"\n"
+"ជម្រើស ៖\n"
+"  -a, --all\t\t\tរាយការណ៍​ស្ថានភាព​ពាក្យសម្ងាត់​អំពី​គណនី​ទាំងអស់\n"
+"  -d, --delete\t\t\tលុប​ពាក្យសម្ងាត់​សម្រាប់​គណនី​ដែល​មាន​ឈ្មោះ\n"
+"  -e, --expire\t\t\tបង្ហាញ​ឲ្យ​ពាក្យសម្ងាត់​ផុត​កំណត់​សម្រាប់​គណនី​ដែល​មាន​ឈ្មោះ\n"
+"  -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+"  -k, --keep-tokens\t\tផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់ ក្នុ​ង​ក​រណី​​ដែល​ផុត​កំណត់\n"
+"  -i, --inactive INACTIVE\tកំណត់​ពាក្យសម្ងាត់​ឲ្យ​អសកម្ម​បន្ទាប់​ពី​ផុត​កំណត់\n"
+"\t\t\t\tto INACTIVE\n"
+"  -l, --lock\t\t\tចាក់សោ​គណនី​ដែល​មាន​ឈ្មោះ\n"
+"  -n, --mindays MIN_DAYS\tកំណត់ចំនួន​ថ្ងៃ​អប្បបរមា​មុន​ពាក្យសម្ងាត់\n"
+"\t\t\t\tផ្លាស់ប្ដូរទៅ MIN_DAYS\n"
+"  -q, --quiet\t\t\tរបៀប​ស្ងាត់\n"
+"  -r, --repository REPOSITORY\tផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់​នៅ​ក្នុង​ឃ្លាំង REPOSITORY\n"
+"  -S, --status\t\t\tរាយការណ៍​ស្ថានភាព​ពាក្យសម្ងាត់​អំពី​គណនី​ដែល​មាន​ឈ្មោះ\n"
+"  -u, --unlock\t\t\tដោះសោ​គណនី​ដែល​មាន​ឈ្មោះ\n"
+"  -w, --warndays WARN_DAYS\tកំណត់​ថ្ងៃ​ព្រមាន​ផុត​កំណត់​ទៅ​ជា WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS\tកំណត់​ចំនួនថ្ងៃ​អតិបរមា​មុន​ពាក្យសម្ងាត់\n"
+"\t\t\t\tផ្លាស់ប្ដូរ​ទៅ​ជា MAX_DAYS\n"
+"\n"
+
+msgid "Old password: "
+msgstr "ពាក្យ​សម្ងាត់​ចាស់ ៖ "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"បញ្ចូល​ពាក្យ​សម្ងាត់​ថ្មី​ (តួអក្សរ​​អប្បបរមានៃ​ %d អតិបរមានៃ %d)\n"
+"សូម​ប្រើ​អក្សរ​ធំ​ អក្សរ​តូច​ ​និង លេខ​ចូល​គ្នា​ ។\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"បញ្ចូល​ពាក្យ​សម្ងាត់​ថ្មី​ (តួអក្សរ​​អប្បបរមានៃ​ %d អតិបរមានៃ %d)\n"
+"សូម​ប្រើ​អក្សរ​ធំ​ អក្សរ​តូច​ ​និង លេខ​ចូល​គ្នា​ ។\n"
+
+msgid "New password: "
+msgstr "ពាក្យ​សម្ងាត់​ថ្មី​ ៖ "
+
+#, fuzzy
+msgid "Try again."
+msgstr "សូមព្យាយាម​ម្តង​ទៀត​ ។\n"
+
+#, fuzzy
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"ការព្រមាន ៖ ពាក្យ​សម្ងាត់មិនសូវមានសុវត្ថិភាព​ (សូម​បញ្ចូល​វា​ម្តង​ទៀត​​ដើម្បី​ប្រើវា​) ។\n"
+
+msgid "They don't match; try again.\n"
+msgstr "ពួកវាមិនផ្គូរផ្គងគ្នាទេ ។ សូមព្យាយាម​ម្តង​ទៀត​ ។\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "មិនអាចប្ដូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ %s បានឡើយ ។\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "មិនអាចប្ដូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ %s បានឡើយ ។\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s ៖ ឃ្លាំង​ %s មិន​បាន​គាំទ្រឡើយ​\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s ៖ អ្នក​មិនអាច​មើល​ ឬ កែប្រែ​ព័ត៌មាន​ពាក្យ​សម្ងាត់​សម្រាប់​ %s បានឡើយ ។\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "កំពុង​ប្តូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "មិនបានប្ដូរ​ពាក្យ​សម្ងាត់​សម្រាប់​ %s ឡើយ ។\n"
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "ពាក្យ​សម្ងាត់​បាន​ប្តូរ​ ។\n"
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "ការព្រមាន​ការផុត​កំណត់​នៃ​ពាក្យ​សម្ងាត់​"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "របៀបប្រើ ៖ %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s ៖ -s និង​ -r គឺមិន​ត្រូវ​គ្នាទេ​\n"
+
+#, fuzzy
+msgid "invalid password file entry"
+msgstr "ធាតុបញ្ចូល​ឯកសារ​ពាក្យសម្ងាត់​មិនត្រឹមត្រូវ\n"
+
+#, fuzzy
+msgid "duplicate password entry"
+msgstr "ធាតុបញ្ចូល​ពាក្យ​សម្ងាត់​ស្ទួន​\n"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ឈ្មោះ​អ្នក​ប្រើ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "ឈ្មោះ​អ្នក​ប្រើ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "អ្នក​ប្រើ​ %s ៖ គ្មាន​ក្រុម​ %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "អ្នក​ប្រើ %s ៖ មិនទាន់មាន​ថត​ %s នៅ​ឡើយ​ទេ​\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "អ្នកប្រើ​ %s ៖ មិនទាន់មាន​កម្មវិធី​ %s នៅឡើយទេ\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "មិនមាន​ធាតុបញ្ចូល​ឯកសារ​ពាក្យសម្ងាត់​ដែលផ្គូរផ្គង​នៅក្នុង​ %s ឡើយ\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "បន្ថែម​អ្នក​ប្រើ​ '%s'ក្នុង​ %s ឬ ? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid shadow password file entry"
+msgstr "ធាតុបញ្ចូល​ឯកសារ​ពាក្យ​សម្ងាត់​ស្រមោល​មិនត្រឹមត្រូវ​\n"
+
+#, fuzzy
+msgid "duplicate shadow password entry"
+msgstr "ធាតុ​បញ្ចូល​ពាក្យសម្ងាត់​ស្រមោល​ស្ទួន​\n"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "អ្នកប្រើ​ %s ៖ ពាក្យ​សម្ងាត់​ចុងក្រោយ​​ប្ដូរនៅក្នុង​អនាគត\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s ៖ មិនអាច​បើក​ឯកសារ​ %s បានទេ\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "របៀបប្រើ​ ៖ លេខសម្គាល់\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "របៀបប្រើ​ ៖ លេខសម្គាល់\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "ដំណើរការ​ជា​ su ទៅ​កាន់​គណនី​នោះ​ DENIED ។\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវពាក្យ​សម្ងាត់ bypassed ។\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "សូម​បញ្ចូល​ពាក្យ​សម្ងាត់ផ្ទាល់ខ្លួន​របស់អ្នក​ ជា​ការផ្ទៀងផ្ទាត់ភាពត្រឹមត្រូវ​ ។\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s ៖ %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"របៀបប្រើ ៖ su [ជម្រើស] [ការចូល]\n"
+"\n"
+"ជម្រើស ៖\n"
+"  -c, --command COMMAND\t\tហុច COMMAND ទៅសែលដែលបានហៅ\n"
+"  -h, --help\t\t\tបង្ហាញ​​សា​រ​ជំ​នួយ​​នេះ និង​ចេញ\n"
+"  -, -l, --login\t\tធ្វើ​ឲ្យ​សែល​ជា​សែល​ចូល\n"
+"  -m, -p,\n"
+"  --preserve-environment\tកុំ​កំណត់​អថេរ​បរិស្ថាន និង​រក្សាទុក\n"
+"\t\t\t\tសែលដដែល\n"
+"  -s, --shell SHELL\t\tប្រើ SHELL ជំនួស​​ឲ្យលំនាំដើម​នៅ​ក្នុង passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s ៖ ត្រូវ​តែ​រត់​ពី ស្ថានីយមួយ\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s ៖ pam_start ៖ កំហុស​ %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "មិន​ស្គាល់​លេខ​សម្គាល់​ ៖ %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "អ្នកគ្មាន​ការ​អនុញ្ញាតឲ្យ​ចូល​ទៅ​កាន់​ su ទេ​ %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(បញ្ចូល​ពាក្យ​សម្ងាត់​ផ្ទាល់​ខ្លួនរបស់អ្នក​)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(មិន​អើពើ​)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s ៖ PAM ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវបាន​បរាជ័យ​\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "អ្នកគ្មាន​ការ​អនុញ្ញាតឲ្យ​ចូល​ទៅ​កាន់​ su ទេ​ %s\n"
+
+msgid "No shell\n"
+msgstr "គ្មានសែល​\n"
+
+#, fuzzy
+msgid "No password file"
+msgstr "គ្មាន​ឯកសារ​ពាក្យ​សម្ងាត់ឡើយ​\n"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+#, fuzzy
+msgid "No password entry for 'root'"
+msgstr "គ្មាន​ធាតុ​ពាក្យ​សម្ងាត់​សម្រាប់ 'root'​ ឡើយ\n"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"ចុចគ្រាប់ចុច បញ្ជា-d ដើម្បី​បន្ត​ជាមួយ​ការ​ចាប់ផ្ដើម​ធម្មតា\n"
+"(ឬ ផ្ដល់​ពាក្យសម្ងាត់ root ដើម្បី​ជួសជុល​ប្រព័ន្ធ) ៖"
+
+#, fuzzy
+msgid "Entering System Maintenance Mode"
+msgstr "កំពុង​បញ្ចូល​របៀប​តំហែទាំ​ប្រព័ន្ធ​\n"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ឯកសារ​លំនាំ​ដើម​ថ្មី​បានឡើយ​\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​លំនាំដើម​ថ្មី​​បានលឡើយ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s ៖ បន្ទាត់​ %d ៖ chown បានបរាជ័យ​\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s ៖​ ប្តូរ​ឈ្មោះ​ ៖ %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s ៖ ក្រុម​ '%s' គឺជាក្រុម​ NIS ។\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s ៖ ក្រុម​ដែលបានបញ្ជាក់​ច្រើនពេក​ (អតិ​ %d) ។\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "របៀបប្រើ ៖ %s [input]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s  ៖ ថត​មូលដ្ឋាន​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s ៖ សេចក្តី​អត្ថាធិប្បាយ​មិនត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s ៖ ថត​ផ្ទះ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s ៖ បានទាមទារ​ពាក្យ​សម្ងាត់​ស្រមោល​​សម្រាប់​-e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s ៖ បានទាមទារពាក្យ​សម្ងាត់​ស្រមោល​​សម្រាប់​ -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s ៖ វាល​មិនត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s ៖ សែល​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s ៖ មិន​​អាច​បង្កើត​ថត​ %s បានឡើយ\n"
+
+msgid "Creating mailbox file"
+msgstr "កំពុង​បង្កើត​ឯកសារ​ប្រអប់​សំបុត្រ​"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr "រក​ក្រុម​​ 'សំបុត្រ​' មិន​ឃើញ​ឡើយ ។ កំពុង​បង្កើត​ឯកសារប្រអប់​សំបុត្រ​អ្នក​ប្រើ​ជាមួយ​របៀប​ 0600 ។\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "ការកំណត់​សិទ្ធ​លើ​ឯកសារ​ប្រអប់​សំបុត្រ​"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s ៖ អ្នក​ប្រើ​ %s មាន​រួច​ហើយ​\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr "%s ៖ ក្រុម​ %s មាន​រួច​ហើយ​ - ប្រសិនបើ​អ្នក​ចង់​បន្ថែម​អ្នក​ប្រើទៅ​កាន់​ក្រុម​នោះ​ ប្រើ​ -g ។\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ %s បានឡើយ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s ៖ UID %u មិន​មែន​មាន​តែមួយទេ​\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ %s បានឡើយ\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s ៖ ការព្រមាន​ ៖ មានថតផ្ទះ​រួចហើយ ។\n"
+"មិនចម្លង​​ឯកសារណាមួយ​ពីថត​ skel ចូលក្នុង​វានោះទេ ។\n"
+
+#, fuzzy
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"របៀបប្រើ ៖ userdel [ជម្រើស] LOGIN\n"
+"\n"
+"ជម្រើស ៖\n"
+"  -f, --force\t\t\tបង្ខំ​ឲ្យ​យក​ឯកសារ​ចេញ ទោះបី​ជា​មិន​បាន​គ្រប់គ្រង​ដោយ​អ្នកប្រើ​ក៏ដោយ\n"
+"  -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+"  -r, --remove\t\t\tយកថ​ត​ផ្ទះ  និង​ហុង​សំបុត្រ​ចេញ\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr "%s ៖ មិនអាច​យកក្រុម %s ដែលជា​ក្រុម​ចម្បង​សម្រាប់​អ្នកប្រើដទៃទៀតចេញបានទេ ។\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s  ៖ ការព្រមាន​ ៖ មិន​អាច​យកចេញបានឡើយ "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s ៖ %s មិន​បានទទួលយក​​ %s ទេ, មិនយកចេញ​\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s ៖ អ្នកប្រើ​ %s គឺជា​អ្នក​​ប្រើ​ NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s ៖ បច្ចុប្បន្ន ​អ្នក​ប្រើ​ %s បាន​ចូលហើយ​\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s ៖ ថត​ផ្ទះ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s ៖ មិនយក​ថត​ %s ចេញ​ឡើយ (នឹងយក​ថតផ្ទះ​របស់អ្នកប្រើ %s ចេញ)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s ៖ មានកំហុស​ក្នុងការយក​ថត​ %s ចេញ\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"របៀបប្រើ ៖ usermod [ជម្រើស] LOGIN\n"
+"\n"
+"ជម្រើស ៖\n"
+"  -a, --append GROUP\t\tបន្ថែម​អ្នក​ប្រើ​ទៅ​ខាង​ចុង​ក្រុម​បន្ទាប់បន្សំ\n"
+"  -c, --comment COMMENT\t\tតម្លៃ​ថ្មី​របស់​វាល GECOS\n"
+"  -d, --home HOME_DIR\t\tថតផ្ទះ​ថ្មី​សម្រាប់​គណនី​អ្នកប្រើ​ថ្មី\n"
+"  -e, --expiredate EXPIRE_DATE\tកំណត់​កាលបរិច្ឆេទ​ផុត​កំណត់​ទៅ​ជា EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE\tកំណត់​ពាក្យសម្ងាត់​ឲ្យ​អសកម្ម​បន្ទាប់​ពី​ផុត​កំណត់\n"
+"\t\t\t\tto INACTIVE\n"
+"  -g, --gid GROUP\t\tបង្ខំ​ឲ្យ​ប្រើ GROUP ជា​ក្រុម​សំខាន់​ថ្មី\n"
+"  -G, --groups GROUPS\t\tបញ្ជី​ថ្មី​របស់​ក្រុម​បន្ទាប់បន្សំ\n"
+"  -h, --help\t\t\tបង្ហាញ​សារ​ជំនួ​យនេះ និង​ចេញ\n"
+"  -l, --login NEW_LOGIN\t\tតម្លៃ​ថ្មី​របស់​ឈ្មោះ​ចូល\n"
+"  -L, --lock\t\t\tចាក់សោ​គណនី​អ្នកប្រើ\n"
+"  -m, --move-home\t\tផ្លាស់ទី​មាតិកា​របស់​ថតផ្ទះ​ទៅ\n"
+"\t\t\t\tទីតាំង​ថ្មី (ប្រើ​តែជា​មួយ -d ប៉ុណ្ណោះ)\n"
+"  -o, --non-unique\t\tអនុញ្ញាត​ឲ្យ​ប្រើ UID (មិនមាន​តែ​មួយគត់) ស្ទួន\n"
+"  -p, --password PASSWORD\tប្រើ​​ពាក្យសម្ងា​ត់​​ដែ​ល​បាន​អ៊ិនគ្រីប​សម្រាប់​​ពាក្យសម្ងា​ត់​ថ្មី\n"
+"  -s, --shell SHELL\t\tសែល​​ចូ​ល​​ថ្មី​​សម្រាប់​​គណនី​អ្នកប្រើ\n"
+"  -u, --uid UID\t\t\t UID ថ្មី​សម្រាប់​គណនី​អ្នកប្រើ\n"
+"  -U, --unlock\t\t\tដោះសោ​គណនី​អ្នកប្រើ\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s ៖ អ្នក​ប្រើ​ %s មាន​រួច​ហើយ​\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s ៖ មិន​ផ្តល់​ទង់​ឲ្យឡើយ​\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s ៖ ពាក្យ​សម្ងាត់​ស្រមោល​បានត្រូវការ​​ -e និង -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s ៖ មានថត​ %s ​រួច​ហើយ​\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s ៖ មិន​អាច​បង្កើត​ %s បានឡើយ\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s ៖ មិន​អាច​ chown %s បានឡើយ\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s ៖ ការព្រមាន ៖ បរាជ័យ​ក្នុងការ​បញ្ចប់​ការយកថតផ្ទះ %s ចាស់ចេញ"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s ៖ មិនអាចប្ដូរឈ្មោះ​ថត​ %s ទៅ​ជា​ %s បានឡើយ\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s ៖ ការព្រមាន ៖​ %s មិនត្រូវបានទទួល​យក​ដោយ %s ឡើយ\n"
+
+msgid "failed to change mailbox owner"
+msgstr "បរាជ័យ​ក្នុងការ​ផ្លាស់ប្ដូរ​ម្ចាស់​ប្រអប់សំបុត្រ"
+
+msgid "failed to rename mailbox"
+msgstr "​បរាជ័យ​ក្នុងការប្ដូរឈ្មោះប្រអប់"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"របៀបប្រើ ៖ vipw [ជម្រើស]\n"
+"\n"
+"ជម្រើស ៖\n"
+"  -g, --group\t\t\tកែសម្រួល​មូលដ្ឋាន​ទិន្នន័យ​ក្រុម\n"
+"  -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+"  -p, --passwd\t\t\tកែសម្រួល​មូលដ្ឋាន​ទិន្នន័យ passwd\n"
+"  -q, --quiet\t\t\tរបៀប​ស្ងាត់\n"
+"  -s, --shadow\t\t\tកែសម្រួល​មូលដ្ឋាន​ទិន្នន័យ​ស្រមោល ឬ gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s ៖ បរាជ័យ​ក្នុងការ​ទម្លាក់​សិទ្ធ (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s ៖ %s មិនត្រូវបានប្ដូរឡើយ​\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "មិនអាច​ចាក់សោ​ឯកសារបានឡើយ"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "មិនអាច​ចាក់សោ​ឯកសារបានឡើយ"
+
+msgid "Couldn't make backup"
+msgstr "មិនអាច​បង្កើត​ព័ត៌មាន​បម្រុងទុក​បានឡើយ"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s ៖ មិន​អាច​ស្តារ %s ៖ %s (ការប្ដូរ​របស់អ្នក​គឺនៅក្នុង​ %s)\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀប​ប្រើ ៖ faillog [ជម្រើស]\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ "  -a, --all\t\t\tបង្ហាញ​កំណត់ត្រា​កំណត់ហេតុ​បរាជ័យ សម្រាប់​អ្នក​ប្រើ​ទាំងអស់\n"
+#~ "  -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ ហើយ​ចេញ\n"
+#~ "  -l, --lock-time វិ.\t\tបន្ទាប់​ពី​ចូល​បរាជ័យ ត្រូវ​ចាក់សោ​គណនី​រយៈពេល វិ. វិនាទី\n"
+#~ "  -m, --maximum អតិ.\t\tកំណត់​ចំនួន​អតិបរមា​នៃ​ការ​ចូល​ដែល​បរាជ័យ ចំនួន អតិ.\n"
+#~ "  -r, --reset\t\t\tកំណត់​អថេរ​រាប់​នៃ​ការ​ចូល​ដែល​បរាជ័យ​ឡើង​វិញ\n"
+#~ "  -t, --time ថ្ងៃ\t\tបង្ហាញ​កំណត់ត្រា​កំណត់ហេតុ​បរាជ័យ ថ្មីៗ​ជាង \"ថ្ងៃ\" ថ្ងៃ\n"
+#~ "  -u, --user ឈ្មោះចូល\t\tបង្ហាញ​កំណត់ត្រា​កំណត់ហេតុ​បរាជ័យ ឬ ថែទាំ​អថេរ​រាប់​ការ​បរាជ័យ\n"
+#~ "\t\t\t\tនិង កំណត់ (បើ​ប្រើ​ជាមួយ​ជម្រើស -r, -m ឬ -l) សម្រាប់​តែ\n"
+#~ "\t\t\t\tអ្នកប្រើ​ដែល​មាន​ឈ្មោះ​ចូល \"ឈ្មោះចូល\"\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ groupadd [ជម្រើស] ក្រុម\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ "  -f, --force\t\t\tបង្ខំឲ្យ​ចេញ​ជា​មួយ​នឹង​ស្ថានភាព​ជោគជ័យ ប្រសិន​បើ​ក្រុម\n"
+#~ "\t\t\t\tដែល​បាន​បញ្ជាក់​មាន​រួច​ហើយ\n"
+#~ "  -g, --gid GID\t\t\tប្រើ GID សម្រាប់​ក្រុមថ្មី\n"
+#~ "  -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+#~ "  -K, --key KEY=VALUE\t\tបដិសេធលំនាំដើមរបស់ /etc/login.defs \n"
+#~ "  -o, --non-unique\t\tអនុញ្ញាត​ឲ្យ​បង្កើត​ក្រុម​ដែល​មាន\n"
+#~ "\t\t\t\t GID (មិនមាន​តែមួយ​គត់) ស្ទួន\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ groupadd ក្រុម [options]​\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ "  -f, --បង្ខំ​ \t\t បង្ខំឲ្យ​​ចេញ​ជាមួយ​ស្ថានភាព​ជោគជ័យ​ ប្រសិនបើ​មាន​\n"
+#~ "\t\t\t\tក្រុមដែលបានបញ្ជាក់​​មាន​រួច​ហើយ​\n"
+#~ "  -g, --gid GID\t\tប្រើ​ GID សម្រាប់​ក្រុម​ថ្មី​\n"
+#~ "  -h, --ជំនួយ\t\t\tបង្ហាញ​សារជំនួយ​​នេះ​ ហើយ​ ចេញ​\n"
+#~ "  -K, --កូនសោ KEY=VALUE\t\tបដិសេធ​ /etc/login.defs លំនាំ​ដើម​\n"
+#~ "  -o, --មិនមែនមានតែមួយ\t\t អនុញ្ញាតឲ្យ​​បង្កើត​ក្រុម​ស្ទួន​\n"
+#~ "\t\t\t\t(មិនមែនមានតែមួយ) GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ useradd [ជម្រើស] LOGIN\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ "  -b, --base-dir BASE_DIR\tថត​មូលដ្ឋាន​សម្រាប់​គណនី​អ្នក​ប្រើ​ថ្មី\n"
+#~ "\t\t\t\tថតផ្ទះ\n"
+#~ "  -c, --comment COMMENT\t\tកំណត់វាល GECOS សម្រាប់​គណនី​អ្នកប្រើ​ថ្មី\n"
+#~ "  -d, --home-dir HOME_DIR\tថត​ផ្ទះ​សម្រាប់​គណនី​អ្នក​ប្រើ​ថ្មី\n"
+#~ "  -D, --defaults\t\tបោះពុម្ព ឬ​រក្សាទុក useradd លំនាំដើម​ដែល​បាន​កែប្រែ\n"
+#~ "\t\t\t\tconfiguration\n"
+#~ "  -e, --expiredate EXPIRE_DATE\tកំណត់​កាលបរិច្ឆេទ​គណនី​ទៅ​ជា EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE\tកំណត់​ពាក្យ​សម្ងាត់​ឲ្យ​អសកម្ម​បន្ទាប់​ពី​ផុតកំណត់\n"
+#~ "\t\t\t\tto INACTIVE\n"
+#~ "  -g, --gid GROUP\t\tបង្ខំ​ឲ្យ​ប្រើ GROUP សម្រាប់​គណនី​អ្នក​ប្រើ​ថ្មី\n"
+#~ "  -G, --groups GROUPS\t\tបញ្ជី​របស់​ក្រុម​ផ្ដល់​សម្រាប់\n"
+#~ "\t\t\t\tគណនី​អ្នក​ប្រើ​ថ្មី\n"
+#~ "  -h, --help\t\t\tបង្ហាញ​សារ​ជំនួយ​នេះ និង​ចេញ\n"
+#~ "  -k, --skel SKEL_DIR\t\tបញ្ជាក់ថត skel ជំនួស\n"
+#~ "  -K, --key KEY=VALUE\t\tបដិសេធលំនាំដើម /etc/login.defs\n"
+#~ "  -m, --create-home\t\tបង្កើត​ថត​ផ្ទះ​សម្រាប់​អ្នកប្រើ​ថ្មី\n"
+#~ "\t\t\t\taccount\n"
+#~ "  -o, --non-unique\t\tអនុញ្ញា​ឲ្យ​បង្កើត​អ្នកប្រើ​ដែល​មាន\n"
+#~ "\t\t\t\t UID(មិនមែន​តែ​មួយគត់) ស្ទួន \n"
+#~ "  -p, --password PASSWORD\tប្រើ​ពាក្យសម្ងាត់​ដែល​បាន​អ៊ិនគ្រីប​សម្រាប់\n"
+#~ "\t\t\t\tគណនី​អ្នកប្រើ​ថ្មី\n"
+#~ "  -s, --shell SHELL\t\tសែល​ចូល​សម្រាប់​គណនី​អ្នកប្រើ​ថ្មី\n"
+#~ "  -u, --uid UID\t\t\tបង្ខំឲ្យប្រើ UID សម្រាប់​គណនី​អ្នកប្រើ​ថ្មី\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Password set to expire."
+#~ msgstr "កំណត់​ពាក្យ​សម្ងាត់​ឲ្យ​ផុត​កំណត់​ ។\n"
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​ឯកសារ​ពាក្យ​សម្ងាត់​បានទេ​\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ពាក្យ​សម្ងាត់​\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​​ឯកសារ​ពាក្យ​សម្ងាត់ស្រមោល​បានទេ\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារពាក្យ​សម្ងាត់​ស្រមោលបានទេ\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s ៖ មិនអាច​សរសេរ​ឯកសារពាក្យសម្ងាត់ស្រមោល​ឡើងវិញ​បានទេ​\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s ៖ មិនអាច​សរសេរ​ឯកសារពាក្យសម្ងាត់​ឡើងវិញបានទេ​\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យ​ឯកសារ​ពាក្យ​សម្ងាត់​ទាន់សម័យ​បានទេ\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើ​ឲ្យ​ឯកសារពាក្យសម្ងាត់​ស្រមោលទាន់សម័យបានទេ\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tឈ្មោះពេញ​ ៖ %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tលេខ​បន្ទប់​ ៖ %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tទូរស័ព្ទ​​​កន្លែង​​​ធ្វើការ ៖ %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tទូរស័ព្ទនៅ​ផ្ទះ ៖ %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "មិន​អាច​ចាក់សោ​ឯកសារ​ពាក្យ​សម្ងាត់​បានទេ ។ សូមព្យាយាម​ម្តង​ទៀតនៅ​ពេល​ក្រោយ​ ។\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "មិនអាច​បើក​ឯកសារ​ពាក្យសម្ងាត់​បានឡើយ ។\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s ៖ %s រក​មិន​ឃើញ​ក្នុង​ /etc/passwd ទេ\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "មានកំហុស​ក្នុងការ​ធ្វើ​ឲ្យ​​ធាតុបញ្ចូល​​ពាក្យសម្ងាត់ទាន់សម័យ ។\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "មិនអាច​ដាក់ស្នើ​ការផ្លាស់ប្ដូរ​ឯកសារពាក្យសម្ងាត់​បានឡើយ​ ។\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "មិន​អាច​ដោះសោ​ឯកសារ​ពាក្យ​សម្ងាត់បានឡើយ​ ។\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​​​ឯកសារជា​​ក្រុម​បាន​ទេ\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ជា​ក្រុម​បាន​ទេ​\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s ៖មិន​អាច​ចាក់សោ​ឯកសារ​ gshadow បានទេ\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ស្រមោល​បានទេ\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​ធ្វើឲ្យឯកសារស្រមោល​ទាន់សម័យ​\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s  ៖ មានកំហុស​ក្នុងការ​ធ្វើឲ្យ​ធាតុ​បញ្ចូល​ក្រុម​​ទាន់សម័យ\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​ស្គាល់​ក្រុម​ %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s ៖ បន្ទាត់​ %d ៖ មិនអាចធ្វើឲ្យ​ធាតុបញ្ចូល​ទាន់សម័យបានឡើយ\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់​សោ​ឯកសារ​ស្រមោល​បានទេ​\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​ធ្វើឲ្យឯកសារស្រមោល​ទាន់សម័យ​\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s ៖ កំហុស​ក្នុងការធ្វើឲ្យ​ឯកសារពាក្យសម្ងាត់ទាន់សម័យ\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s ៖ បន្ទាត់​ %d ៖ មិនស្គាល់​អ្នកប្រើ​ %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s ៖ បន្ទាត់​ %d ៖ មិនអាច​ធ្វើឲ្យធាតុបញ្ចូល​ពាក្យសម្ងាត់​ទាន់សម័យ​បានឡើយ​\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s  ៖ មិន​ស្គាល់​អ្នក​ប្រើ​\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "មិន​ស្គាល់​អ្នក​ប្រើ ៖ %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "របៀបប្រើ ៖ %s ក្រុម [-r|-R] \n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s ក្រុម [-a user]​\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s ក្រុម [-d user]​\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s ក្រុម [-A user,...] [-M user,...]\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s ក្រុម [-M user,...]\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​បានឡើយ\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​ស្រមោល​បានឡើយ​\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​​ឯកសារ​បានទេ\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s ៖ មិន​អាច​សរសេរ​ឯកសារ​ឡើង​វិញបានទេ​\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s ៖ មិន​អាច​សរសេរ​​​​​ឯកសារ​ស្រមោល​ឡើង​វិញ បាន​ទេ​\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s ៖ មិនអាច​ដោះសោ​ឯកសារបានទេ\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s ៖ មិន​អាចធ្វើ​ឲ្យ​ធាតុបញ្ចូល​​ទាន់សម័យ​បានទេ​\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យ​​ធាតុបញ្ចូល​​ស្រមោល​ទាន់សម័យបានទេ​\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "មិន​ស្គាល់​ក្រុម​ ​ ៖ %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​​ឯកសារ​បានទេ\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ស្រមោល​បានទេ\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "តើអ្នក​ជា​នណា​ ?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s ៖ មិន​ស្គាល់​សមាជិក​ %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s ៖ កំហុស​ក្នុងការ​បន្ថែម​ធាតុបញ្ចូល​​ក្រុម​ថ្មី​\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s ៖​ មិនអាច​សរសេរ​ឯកសារក្រុមឡើងវិញ​បានទេ​\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​សរសេរ​ឯកសារក្រុម​ស្រមោល​ឡើងវិញ​បានទេ​\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​ឯកសារក្រុម​បានទេ\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s ៖ មិនអាច​បើក​ឯកសារក្រុម​បានទេ​\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​ឯកសារក្រុមស្រមោល​បានទេ\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​បើក​ឯកសារក្រុម​ស្រមោល​បានទេ​\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s ៖ GID %u គឺមិនមែន​មាន​តែមួយទេ​\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s ៖ កំហុស​ក្នុងការយក​ធាតុបញ្ចូល​ក្រុមចេញ\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s ៖ កំហុស​ក្នុងការយក​ធាតុបញ្ចូល​ក្រុម​ស្រមោល​ចេញ\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s ៖ មិនអាចយក​ក្រុម​ចម្បង​របស់អ្នកប្រើ​ចេញ​បានទេ ។\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s ៖ PAM ការ​ផ្ទៀងផ្ទាត់​ភាព​ត្រឹមត្រូវបាន​បរាជ័យ​\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​ឯកសារក្រុម​បានទេ\n"
+
+#, fuzzy
+#~ msgid "Unable to open group file\n"
+#~ msgstr "%s ៖ មិនអាច​បើក​ឯកសារក្រុម​បានទេ​\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s ៖ មិនអាចបើក​ឯកសារក្រុម​បានឡើយ​\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s ៖ %s រក​មិនឃើញ​នៅក្នុង​ /etc/group ទេ\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s ៖ %u មិនមែន​​ GID ដែលមានតែមួយ​ទេ\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s ៖ %s គឺមិនមែនជាឈ្មោះ​ដែលមានតែមួយទេ​\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s ៖ មិន​អាច​សរសេរ​ឯកសារ​ពាក្យ​សម្ងាត់​ឡើង​វិញ​បានឡើយ\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s ​៖ មិន​អាច​ចាក់​សោ​ឯកសារ​ពាក្យ​សម្ងាត់បានឡើយ​\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ពាក្យ​សម្ងាត់​បានឡើយ\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់សោ​ឯកសារ​ %s បានទេ\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s ៖ មិន​អាច​ធ្វើ​ឲ្យ​ធាតុ​ស្រមោល​សម្រាប់​​ %s ទាន់សម័យបានឡើយ\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យធាតុ​បញ្ចូល​សម្រាប់ក្រុម​ %s ទាន់សម័យ​បានទេ\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​ចាក់សោ​ឯកសារក្រុមស្រមោល​បានទេ​\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​បើក​ឯកសារក្រុមស្រមោល​បានទេ​\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s ៖ មិនអាច​យក​ក្រុម​ស្រមោល %s ចេញ​បានទេ\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យ​ឯកសារ​ក្រុម​ស្រមោល​ទាន់សម័យ​បានទេ​\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យ​ឯកសារក្រុម​ទាន់សម័យបានទេ​\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​លុប​ឯកសារក្រុម​ស្រមោលបានទេ​\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "មិន​ស្គាល់​ UID ៖ %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "មិន​ស្គាល់​ GID ៖ %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s ៖ មិនមានក្រុម​ %sឡើយ​\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s ៖ឈ្មោះ​អ្នក​ប្រើ​មិន​ត្រឹមត្រូវ​ '%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​ /etc/passwd បានឡើយ ។\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​ /etc/passwd បានឡើយ ។\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​ /etc/passwd បានឡើយ ។\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​ /etc/passwd បានឡើយ ។\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារបានឡើយ​\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s ៖ មានកំហុសក្នុងការ​ធ្វើឲ្យ​ឯកសារទាន់សម័យ\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​អាច​រក​អ្នកប្រើ​ %s ឃើញឡើយ\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យ​ធាតុបញ្ចូលពាក្យសម្ងាត់​ទាន់សម័យ​សម្រាប់​​ %s បានឡើយ\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​ឯកសារ​​ពាក្យសម្ងាត់បានឡើយ\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ឯកសារពាក្យសម្ងាត់បានឡើយ\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s ៖ មិន​អាច​យក​ធាតុបញ្ចូល​​ស្រមោលចេញ​​សម្រាប់ %s បានឡើយ\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យឯកសារស្រមោល​ទាន់សម័យបានឡើយ​\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យ​ឯកសារពាក្យសម្ងាត់​ទាន់សម័យបានឡើយ\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s ៖ មិនអាច​ធ្វើឲ្យធាតុបញ្ចូល​ទាន់សម័យ​សម្រាប់ %s បានឡើយ\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s ៖ មិន​អាច​លុប​ឯកសារ​ពាក្យ​សម្ងាត់​ស្រមោល​បានឡើយ\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s ៖ មិន​ស្គាល់​ GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s ៖ មិន​ស្គាល់​ក្រុម​ %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s ៖ អស់​សតិ​ក្នុងការធ្វើឲ្យ gshadow ទាន់សម័៧\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s ៖ មិន​អាច​សរសេរ​ឯកសារ​ពាក្យ​សម្ងាត់​ឡើង​វិញ​បានឡើយ\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s ៖ មិន​អាច​សរសេរ​ឯកសារ​ពាក្យ​សម្ងាត់​ស្រមោលឡើងវិញ​​បានឡើយ​\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s ៖ មិន​អាច​ចាក់​សោ​ឯកសារ​ពាក្យ​សម្ងាត់ស្រមោល​បានឡើយ\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s ៖ មិន​អាច​បើក​ឯកសារ​ពាក្យ​សម្ងាត់​ស្រមោលបានឡើយ\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s ៖ មានកំហុសក្នុងការ​ចាក់សោ​ឯកសារក្រុម​\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​បើក​ឯកសារក្រុម\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s ៖មានកំហុសក្នុងការ​ចាក់សោ​ឯកសារក្រុម​ស្រមោល​\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​បើក​ឯកសារក្រុម​ស្រមោល\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s ៖ មានកំហុសក្នុងការ​បន្ថែម​ធាតុបញ្ចូល​ពាក្យសម្ងាត់​ថ្មី​\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​បន្ថែម​ធាតុបញ្ចូល​ពាក្យសម្ងាត់​ស្រមោល​ថ្មី​\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s ៖ ការព្រមាន ៖ CREATE_HOME មិន​បាន​គាំទ្រទេ​ សូម​ប្រើ​ -m ជំនួសវិញ ។\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s  ៖ មានកំហុស​ក្នុងការ​ធ្វើឲ្យ​ធាតុ​បញ្ចូល​ក្រុម​​ទាន់សម័យ\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s  ៖ មានកំហុស​ក្នុងការ​ធ្វើឲ្យ​ធាតុ​បញ្ចូល​ក្រុម​​ទាន់សម័យ\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s ៖ មិនអាចបើក​ឯកសារក្រុម​បានឡើយ​\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s ៖ មិនអាច​បើក​ឯកសារក្រុម​ស្រមោល​បានឡើយ\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​លុប​ធាតុ​បញ្ចូល​ពាក្យសម្ងាត់​\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​លុប​ធាតុបញ្ចូល​ពាក្យសម្ងាត់​ស្រមោល​\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s ៖ មិនទាន់មានអ្នក​ប្រើ​ %s ទេ​\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s ៖ កំហុស​ក្នុងការ​បន្ថែម​ធាតុបញ្ចូល​​ក្រុម​ថ្មី​\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s ៖ uid %lu មិនមែន​មាន​តែ​មួយទេ​\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s  ​៖ មានកំហុស​ក្នុងការ​ផ្លាស់ប្ដូរ​ធាតុបញ្ចូល​ពាក្យសម្ងាត់​\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s ៖ មានកំហុស​ក្នុងការ​យក​ធាតុបញ្ចូល​ពាក្យសម្ងាត់ចេញ\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s ៖ មានកំហុសក្នុងការ​យក​ធាតុបញ្ចូល​ពាក្យសម្ងាត់​ស្រមោល​ចេញ\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s ៖ មិនអាច​យក​​ GID ​ដែលមានតែមួយ​បានឡើយ​\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " លើ '%.100s' ពី '%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " លើ '%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s ៖ បន្ទាត់​ %d ៖ មិន​អាច​បង្កើត​ UID បានឡើយ\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s ៖ ឈ្មោះ​ %s គឺមិន​មែន​មាន​តែមួយ​ទេ\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "របៀបប្រើ ៖ chgpasswd [ជម្រើស]\n"
+#~ "\n"
+#~ "ជម្រើស ៖\n"
+#~ "  -e, --encrypted\tពាក្យ​សម្ងាត់​ដែល​បាន​ផ្ដល់​ត្រូវ​បាន​អ៊ិនគ្រីប\n"
+#~ "  -h, --help\t\tបង្ហា​ញសារ​ជំនួយ​នេះ និង​ចេញ\n"
+#~ "  -m, --md5\t\tប្រើ​ការ​អ៊ិនគ្រីប MD5 ជំនួស​ឲ្យ DES នៅ​ពេល​បាន​ផ្ដល់​ឲ្យ\n"
+#~ "\t\t\tពាក្យសម្ងាត់​មិន​ត្រូវបាន​អ៊ិនគ្រីប\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "គ្មាន​ឯកសារ​ពាក្យ​សម្ងាត់ឡើយ​\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "សូមអភ័យទោស ។\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "សូមអភ័យទោស ពាក្យ​សម្ងាត់​សម្រាប់​ %s មិន​ទាន់​ប្តូរ​នូវ​ឡើយ​ទេ​ ។\n"
+
+#~ msgid "Sorry."
+#~ msgstr "សូមអភ័យទោស​ ។"
diff --git a/po/ko.gmo b/po/ko.gmo
new file mode 100644 (file)
index 0000000..1fdfeb3
Binary files /dev/null and b/po/ko.gmo differ
diff --git a/po/ko.po b/po/ko.po
new file mode 100644 (file)
index 0000000..8bfff55
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,2284 @@
+# shadow korean translations
+# Hwang, SangJin <accel@accellinux.org>, 1999.
+# Changwoo Ryu <cwryu@debian.org>, 2004, 2005, 2006, 2008, 2009.
+# Sunjae Park <darehanl@gmail.com>, 2006.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.1.1\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2009-04-19 21:32+0900\n"
+"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
+"Language-Team: Korean <debian-l10n-korean@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"이름이 '%s'인 항목이 %s 안에 여러 개 있습니다. pwck 혹은 grpck 명령으로 이 문"
+"제를 바로잡으십시오.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "libcrypt가 지원하지 않는 암호화 방법? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "설정 정보를 위한 공간을 확보할 수 없습니다.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "설정 오류 - 알 수 없는 항목 '%s'(관리자에게 알리시기 바랍니다)\n"
+
+msgid "Password: "
+msgstr "암호: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s의 암호: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "경고: 알 수 없는 그룹(%s)\n"
+
+msgid "Warning: too many groups\n"
+msgstr "경고: 그룹이 너무 많음\n"
+
+msgid "Your password has expired."
+msgstr "암호 사용기한이 지났습니다."
+
+msgid "Your password is inactive."
+msgstr "암호 사용기간 초과로 비활성화 되었습니다."
+
+msgid "Your login has expired."
+msgstr "로그인 사용기한이 지났습니다."
+
+msgid "  Contact the system administrator."
+msgstr "  시스템 관리자에게 연락하십시오."
+
+msgid "  Choose a new password."
+msgstr "  새로운 암호를 선택하십시오."
+
+msgid "You must change your password."
+msgstr "암호를 바꿔야 합니다."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "암호 사용기한이 %ld일 후에 끝납니다.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "암호 사용기한이 내일 끝납니다."
+
+msgid "Your password will expire today."
+msgstr "암호 사용기한이 오늘 끝납니다."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "검증 인터페이스를 열 수 없습니다. 중지합니다.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "TTY 표준 입력의 소유자 혹은 모드를 바꿀 수 없습니다: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: %s의 잠금을 푸는데 실패했습니다\n"
+
+msgid "Environment overflow\n"
+msgstr "환경 변수 오버플로우\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "$%s 변수를 바꿀 수 없습니다\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"마지막 로그인 이후 %d번 실패.\n"
+"마지막 로그인은 %s, %s에서.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: 유일한 UID를 얻을 수 없습니다 (UID가 남아 있지 않습니다)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: 유일한 GID를 얻을 수 없습니다 (GID가 남아 있지 않습니다)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: 유일한 UID를 얻을 수 없습니다 (UID가 남아 있지 않습니다)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: 유일한 UID를 얻을 수 없습니다 (UID가 남아 있지 않습니다)\n"
+
+msgid "Too many logins.\n"
+msgstr "로그인 횟수가 너무 많음.\n"
+
+msgid "You have new mail."
+msgstr "새 메일이 도착하였습니다."
+
+msgid "No mail."
+msgstr "메일 없습니다."
+
+msgid "You have mail."
+msgstr "메일이 있습니다."
+
+msgid "no change"
+msgstr "바뀐 점이 없습니다"
+
+msgid "a palindrome"
+msgstr "앞뒤로 같은 단어입니다"
+
+msgid "case changes only"
+msgstr "대소문자만 바뀌었습니다"
+
+msgid "too similar"
+msgstr "너무 비슷합니다"
+
+msgid "too simple"
+msgstr "너무 간단합니다"
+
+msgid "rotated"
+msgstr "순서만 순환되었습니다"
+
+msgid "too short"
+msgstr "너무 짧습니다"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "잘못된 암호: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "암호: pam_start() 실패했습니다, 오류 %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "암호: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: 암호를 바꿨습니다\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: 암호를 성공적으로 업데이트했습니다\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "'%s'의 암호가 맞지 않습니다.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"쓸 수 없는 ENCRYPT_METHOD 값: '%s'.\n"
+"기본값인 DES로 설정합니다.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "'%s' 디렉터리로 이동할 수 없습니다\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "디렉터리 없음, 루트 디렉터리(/)로 로그인합니다"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s을(를) 실행할 수 없습니다"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "루트 디렉터리 '%s'이(가) 잘못되었습니다\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "루트 디렉터리를 '%s'(으)로 바꿀 수 없습니다\n"
+
+msgid "Unable to determine your tty name."
+msgstr "TTY 이름을 확인할 수 없습니다."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: 메모리 부족\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d)에 실패\n"
+
+msgid "No"
+msgstr "아니오"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"사용법: chage [옵션] [로그인]\n"
+"\n"
+"옵션:\n"
+"  -d, --lastday <최근날짜>       최근 암호를 바꾼 날짜를 <최근날짜>로 합니"
+"다.\n"
+"  -E, --expiredate <만료날짜>    계정 만료날짜를 <만료날짜>로 합니다.\n"
+"  -h, --help                     이 도움말을 표시하고 끝냅니다.\n"
+"  -I, --inactive <비활성화기간>  만료된 후 비활성화 기간을 <비활성화기간>으"
+"로\n"
+"                                 합니다\n"
+"  -l, --list                     계정의 사용기한 정보를 표시합니다.\n"
+"  -m, --mindays <최소날수>       암호를 바꾸기 전의 최소 날짜 수를 <최소날수>"
+"로\n"
+"                                 합니다.\n"
+"  -M, --maxdays <최대날수>       암호를 바꾸기 전의 최대 날짜 수를 <최대날수>"
+"로\n"
+"                                 합니다.\n"
+"  -W, --warndays <경고날수>      만료 경고 기간을 <경고날수>으로 합니다.\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "새로운 값을 넣거나, 기본값을 원하시면 엔터를 치세요"
+
+msgid "Minimum Password Age"
+msgstr "암호의 최소 유효 기간"
+
+msgid "Maximum Password Age"
+msgstr "암호의 최대 유효 기간"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "마지막으로 암호를 바꾼 날 (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "암호 사용만료 예고"
+
+msgid "Password Inactive"
+msgstr "암호를 사용할 수 없음"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "계정 만료 날짜 (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "마지막으로 암호를 바꾼 날\t\t\t\t\t:"
+
+msgid "never"
+msgstr "안함"
+
+msgid "password must be changed"
+msgstr "암호를 바꿔야 합니다"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "암호 만료\t\t\t\t\t:"
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "암호가 비활성화 기간\t\t\t\t\t:"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "계정 만료\t\t\t\t\t\t:"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "암호를 바꿀 수 있는 최소 날 수\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "암호를 바꿔야 하는 최대 날 수\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "암호 만료 예고를 하는 날 수\t\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: 날짜 '%s'은(는) 잘못되었습니다\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: 잘못된 숫자 인자 '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: \"l\" 플래그를 다른 플래그와 함께 포함하지 말 것\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: 권한이 거부되었습니다.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: 사용자 이름을 인식할 수 없습니다.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM 인증이 실패했습니다\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: %s을(를) 잠글 수 없습니다. 나중에 다시 시도하십시오.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: %s을(를) 열 수 없습니다\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: 바뀐 사항을 %s에 쓰는 데 실패했습니다\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: 새 %s 항목 '%s'을(를) 준비하는데 실패했습니다\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: 셰도우 암호 파일이 없습니다\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: 관리자 권한을 버릴 수 없습니다 (%s)\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: '%s' 사용자가 %s에 없습니다\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s의 사용기한 정보를 바꿉니다\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: 항목을 변경하는 도중 오류가 발생했습니다\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"사용법: %s [-f 이름] [-r 방_번호] [-w 직장_전화번호]\n"
+"\t[-h 집_전화번호] [-o 기타] [사용자]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"사용법: %s [-f 이름] [-r 방_번호] [-w 직장_전화번호] [-h 집_전화번호]\n"
+
+msgid "Full Name"
+msgstr "이름"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "방 번호"
+
+msgid "Work Phone"
+msgstr "직장 번화번호"
+
+msgid "Home Phone"
+msgstr "집 전화번호"
+
+msgid "Other"
+msgstr "기타"
+
+msgid "Cannot change ID to root.\n"
+msgstr "아이디를 루트로 바꿀 수는 없습니다.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: 이름에 ASCII가 아닌 문자가 들어 있습니다: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: 잘못된 이름: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: 방 번호에 ASCII가 아닌 문자가 들어 있습니다: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: 잘못된 방 번호: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: 잘못된 직장 전화번호: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: 잘못된 집 전화번호: '%s'\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s'에 ASCII가 아닌 문자가 들어 있습니다\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s'에 사용할 수 없는 글자가 들어 있습니다\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: '%s' 사용자가 없습니다\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: NIS 클라이언트에서 '%s' 사용자를 바꿀 수 없습니다.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s'이(가) 현재의 클라이언트의 NIS 마스터입니다.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s의 사용자의 정보를 바꿉니다\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: 입력범위가 너무 깁니다\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"사용법: %s [옵션]\n"
+"\n"
+"옵션:\n"
+"  -c, --crypt-method            암호화 방법 (다음 중 하나: %s)\n"
+"  -e, --encrypted               입력하는 암호가 암호화되어 있습니다\n"
+"  -h, --help                    이 도움말 메시지를 표시하고 끝냅니다\n"
+"  -m, --md5                     일반 텍스트 암호를 MD5 알고리즘을 사용해\n"
+"                                암호화합니다\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr "  -s, --sha-rounds              SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s 플래그는 %s 플래그와 함께 사용해야 합니다\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: -c, -e, -m 옵션은 하나만 쓸 수 있습니다\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: 지원하지 않는 암호화 방법: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: %d번 줄: 너무 깁니다\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: %d번 줄: 새 암호가 없습니다\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: %d번 줄: '%s' 그룹이 없습니다\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: %d번 줄: 새 %s 항목 '%s'을(를) 준비하는 데 실패했습니다\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: 오류 발견, 바뀐 내역은 무시합니다\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr "  -s, --sha-rounds              SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: user '%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: %d번 줄: '%s' 사용자가 없습니다\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: %d번 줄: '%s' 사용자가 없습니다\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"사용법: chsh [옵션] [<로그인>]\n"
+"\n"
+"옵션:\n"
+"  -h, --help                    이 도움말 메시지를 표시하고 끝냅니다\n"
+"  -s, --shelll <쉘>             사용자 계정의 새 로그인 쉘\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "로그인 쉘"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "'%s'의 쉘을 바꿀 수 없습니다.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%s의 로그인 쉘을 변경하고 있습니다\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: 부적절한 입력: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s: %s은(는) 사용할 수 없는 쉘입니다.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "사용법: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to get the entry for UID %d\n"
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr "faillog: UID %d번의 항목을 읽는데 실패했습니다\n"
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "로그인       실패     최대값  최근                     사용\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lu초 남음]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%ld초 잠금]"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to reset fail count for UID %d\n"
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr "faillog: UID %d의 실패 횟수를 초기화하는데 실패했습니다\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set max for UID %d\n"
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr "faillog: UID %d의 최대값을 설정하는데 실패했습니다\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set locktime for UID %d\n"
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr "faillog: UID %d의 잠금시각을 설정하는데 실패했습니다\n"
+
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "lastlog: 알 수 없는 사용자 혹은 범위: %s\n"
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "faillog: %s을(를) 열 수 없습니다: %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr "faillog: %s의 크기를 얻을 수 없습니다: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+"사용법: %s [옵션] <그룹>\n"
+"\n"
+"옵션:\n"
+"  -a, --add <사용자>            <사용자>를 <그룹>에 추가합니다\n"
+"  -d, --delete <사용자>         <사용자>를 <그룹>에서 제거합니다\n"
+"  -r, --remove-password         <그룹>의 암호를 제거합니다\n"
+"  -R, --restrict                <그룹>에 접근하는 권한을 멤버로 제한합니다\n"
+"  -M, --members <사용자>,...    그룹의 멤버 목록을 설정합니다\n"
+"%s\n"
+"\n"
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"  -A, --administrators <관리자>,...\n"
+"                                <그룹>의 관리자 목록을 설정합니다\n"
+"이 옵션은 같이 쓸 수 없습니다. 예외로 -A와 -M 옵션은 같이 쓸 수 있습니다.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "이 옵션은 같이 쓸 수 없습니다.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -A를 사용할 때에는 셰도우 그룹 암호가 필요합니다\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: '%s' 그룹이 %s에 없습니다\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: 읽기 전용 %s을(를) 닫는데 실패했습니다\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "%s 그룹의 암호를 바꾸는 중\n"
+
+msgid "New Password: "
+msgstr "새 암호: "
+
+msgid "Re-enter new password: "
+msgstr "새 암호를 다시 입력하십시오: "
+
+msgid "They don't match; try again"
+msgstr "입력값이 일치하지 않습니다. 다시 시도하십시오"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: 나중에 다시 시도하십시오\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "사용자 %s을(를) %s 그룹에 등록 중\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "사용자 %s을(를) 그룹 %s에서 제거하는 중\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: `%s' 사용자는 '%s'의 멤버가 아닙니다\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: TTY가 아닙니다\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr "  -s, --sha-rounds              SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr "  -s, --sha-rounds              SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: '%s'은(는) 사용할 수 없는 그룹 이름입니다\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "'%s' `%s' 그룹 ID는 쓸 수 없습니다\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K 옵션에는 <키>=<값> 형태의 입력이 필요합니다\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: '%s' 그룹이 이미 있습니다\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: '%lu' GID가 이미 있습니다\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "사용법: groupdel 그룹\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: '%s' 항목을 %s에서 제거할 수 없습니다\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: '%s' 사용자의 주요 그룹을 제거할 수 없습니다\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: '%s' 그룹이 없습니다\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: '%s' 그룹은 NIS 그룹입니다\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s은(는) NIS 마스터입니다\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: '%s' 사용자는 이미 '%s'의 멤버입니다\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: 메모리가 부족합니다. %s을(를) 업데이트할 수 없습니다.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+"사용법: groupmems [옵션] [동작]\n"
+"\n"
+"옵션:\n"
+"  -g, --group <그룹이름>        사용자의 그룹이 아닌 <그룹이름>을 바꿉니다\n"
+"                                (root 전용)\n"
+"\n"
+"Actions:\n"
+"  -a, --add <사용자이름>        <사용자이름>을 그룹의 멤버로 추가합니다\n"
+"  -d, --delete <사용자이름>     그룹 멤버에서 <사용자이름>을 제거합니다\n"
+"  -p, --purge                   그룹에서 모든 멤버를 없앱니다\n"
+"  -l, --list                    그룹의 멤버 목록을 표시합니다\n"
+"\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: 그룹 이름이 사용자 이름과 맞지 않습니다\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: root만 -g/--group 옵션을 쓸 수 있습니다\n"
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: '%s' 그룹 이름은 쓸 수 없습니다\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: %s 그룹은 NIS 그룹입니다\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: 알 수 없는 사용자 %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "사용법: %s [-r] [-s] [그룹 [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "사용법: %s [-r] [-s] [그룹]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s 옵션과 -r 옵션을 동시에 쓸 수 없습니다\n"
+
+msgid "invalid group file entry"
+msgstr "쓸 수 없는 그룹 파일 입력값입니다"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "'%s' 줄을 삭제하시겠습니까?"
+
+msgid "duplicate group entry"
+msgstr "그룹 입력값 복제"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "'%s' 그룹 이름은 쓸 수 없습니다\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "'%lu' 그룹 ID는 쓸 수 없습니다\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "그룹 %s: %s 사용자가 없습니다\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "'%s' 그룹 멤버를 삭제하시겠습니까? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "%s에 일치하는 그룹 파일 입력값이 없습니다\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "%2$s 그룹을 %1$s 안에 추가하시겠습니까?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "쓸 수 없는 셰도우 그룹파일 입력값"
+
+msgid "duplicate shadow group entry"
+msgstr "셰도우 그룹 입력값 복제"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "셰도우 그룹 %s: 관리용 사용자 %s이(가) 없습니다\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "관리용 멤버 '%s'을(를) 삭제하시겠습니까? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "셰도우 그룹 %s: %s(이)라는 사용자가 없습니다\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: 파일이 업데이트 되었습니다\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: 바뀐 점이 없음\n"
+
+msgid "Usage: grpconv\n"
+msgstr "사용법: grpconv\n"
+
+msgid "Usage: grpunconv\n"
+msgstr "사용법: grpunconv\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: '%s'을(를) 삭제할 수 없습니다\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "사용법: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "사용법: id\n"
+
+msgid " groups="
+msgstr " 그룹 목록="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"사용법: lastlog [옵션]\n"
+"\n"
+"옵션:\n"
+"  -b, --before <날짜>           <날짜>일 이전의 최근 기록을 표시합니다\n"
+"  -h, --help                    이 도움말 메시지를 표시하고 끝냅니다\n"
+"  -t, --time <날짜>             <날짜>일 내의 최근 기록만 표시합니다\n"
+"  -u, --user <로그인>           <로그인> 사용자의 최근 기록만 표시합니다\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "lastlog: Failed to get the entry for UID %d\n"
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr "lastlog: UID %d번의 항목을 읽는데 실패했습니다\n"
+
+msgid "Username         Port     From             Latest"
+msgstr "사용자이름       포트     어디서           최근정보"
+
+msgid "Username                Port     Latest"
+msgstr "사용자이름              포트     최근정보"
+
+msgid "**Never logged in**"
+msgstr "**한번도 로그인한 적이 없습니다**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: 올 수 없는 인자입니다: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr "lastlog: %s의 크기를 읽을 수 없습니다: %s\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "사용법: %s [-p] [이름]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h 호스트이름] [-f 이름]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r 호스트\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "잘못된 로그인 시간"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"정기 점검을 위해 시스템이 종료되었습니다"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[접속해제가 무시되었습니다 -- 루트 로그인 허용.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"%d 초 후 로그인이 종료되었습니다.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"UTMP 항목이 없습니다. 가장 낮은 \"sh\"에서 \"login\"을 실행해야 합니다."
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM 실패. 중지 중: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s 로그인: "
+
+msgid "login: "
+msgstr "로그인: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "로그인 시도 횟수 최대값을 초과했습니다(%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM에서 종료를 요청했습니다\n"
+
+msgid "Login incorrect"
+msgstr "로그인이 맞지 않습니다"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s 로그인: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fork 실패: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY 실패, 위치는 %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "경고: 로그인이 일시적으로 폐쇄된 후 다시 로그인을 허용합니다."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "마지막 로그인: %s on %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "마지막 로그인: %.19s on %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " %.*s 에서"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"로그인 시간이 지나갔습니다\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "사용법: logoutd\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "사용법: newgrp [-] [그룹]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "사용법: sg group [[-c] 명령]\n"
+
+msgid "Invalid password.\n"
+msgstr "쓸 수 없는 암호입니다.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: 프로세스 만들기 실패: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: '%lu' GID가 없습니다\n"
+
+msgid "too many groups\n"
+msgstr "그룹이 너무 많습니다\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: '%s' 그룹은 셰도우 그룹이지만, /etc/group에 없습니다\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: 사용할 수 없는 사용자 ID '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: 쓸 수 없는 사용자 이름 '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: %d번 줄: 올바른 줄이 아닙니다\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: %s 사용자의 항목을 업데이트 할 수 없습니다 (passwd 데이터베이스에 없습니"
+"다)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: %d번 줄: 사용자를 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: %d번 줄: 그룹을 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: %d번 줄: `%s' 사용자가 %s 안에 없습니다\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: %d번 줄: 암호를 업데이트 할 수 없습니다\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: %d번 줄: 디렉터리 만들기에 실패했습니다\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: %d번 줄: chown 실패했습니다\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: %d번 줄: 입력값을 업데이트 할 수 없습니다\n"
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"사용법: passwd [옵션] [<로그인>]\n"
+"\n"
+"옵션:\n"
+"  -a, --all                     모든 계정의 암호 상태를 보고합니다\n"
+"  -d, --delete                  지정된 계정의 암호를 지웁니다\n"
+"  -e, --expire                  지정된 계정 암호를 강제로 만료시킵니다\n"
+"  -h, --help                    이 도움말 메시지를 표시하고 끝냅니다\n"
+"  -k, --keep-tokens             암호가 만료했을 때만 바꿉니다\n"
+"  -i, --inactive <비활성화기간> 만료된 후 비활성화 기간을 \n"
+"                                <비활성화기간>으로 합니다\n"
+"  -l, --lock                    지정된 계정의 암호를 잠급니다\n"
+"  -n, --mindays <최소날수>      암호를 다시 바꿀 수 있는 최소 일\n"
+"                                수를 <최소날수>로 합니다\n"
+"  -q, --quiet                   조용한 모드\n"
+"  -r, --repository <저장소>     <저장소> 저장소에 있는 암호를 바꿉니다\n"
+"  -S, --status                  지정된 계정의 암호 상태를 보고합니다\n"
+"  -u, --unlock                  지정된 계정의 암호 잠금을 해제합니다\n"
+"  -w, --warndays <경고날수>     암호 만료 예고를 <경고날수> 이전부터 합니다\n"
+"  -x, --maxdays <최대날수>      암호를 바꾸지 않을 수 있는 최대 일\n"
+"                                수를 <최대날수>로 합니다\n"
+"\n"
+
+msgid "Old password: "
+msgstr "예전 암호: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"새 암호를 입력하십시오 (최소 %d글자)\n"
+"대소문자와 숫자를 조합하여 사용하십시오.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"새 암호를 입력하십시오(최소 %d, 최대 %d 글자)\n"
+"영어 대소문자와 숫자를 조합하여 사용하십시오.\n"
+
+msgid "New password: "
+msgstr "새 암호: "
+
+msgid "Try again."
+msgstr "다시 시도하십시오."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"경고: 보안성이 없는 암호 (그래도 사용하길 원하신다면 다시 입력하십시오)."
+
+msgid "They don't match; try again.\n"
+msgstr "입력값이 일치하지 않습니다. 다시 시도하십시오.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s의 암호는 바꿀 수 없습니다.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s의 암호는 아직 바꿀 수 없습니다.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: 암호의 잠금을 해제하면 암호 없는 계정이 됩니다. 이 암호의 잠금을\n"
+"풀려면 usermod -p 명령으로 이 계정의 암호 잠금을 해제해야 합니다.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: %s 저장소는 지원하지 않습니다\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr "%s: %s 사용자는 %s의 암호를 바꿀 권한이 없습니다\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: %s의 암호 정보를 보거나 바꿀 수 없습니다.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s에 대한 암호를 바꾸는 중\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s의 암호를 바꾸지 않았습니다.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "암호를 바꿨습니다."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "암호 사용만료 예고"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "사용법: %s [-q] [-r] [-s] [암호 [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s 옵션과 -r 옵션을 동시에 쓸 수 없습니다\n"
+
+msgid "invalid password file entry"
+msgstr "올바르지 않은 암호 파일 항목"
+
+msgid "duplicate password entry"
+msgstr "암호 입력값 복제"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "올바르지 않은 사용자 이름 '%s'\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "올바르지 않은 사용자 ID '%lu'\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "사용자 '%s': %lu 그룹이 없습니다\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "사용자 '%s': '%s' 디렉터리가 없습니다\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "사용자 '%s': '%s' 프로그램이 없습니다\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "%s에 있는 암호 파일 입력값이 일치하지 않습니다\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "사용자 '%s'을(를) %s에 추가하시겠습니까?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "쓸 수 없는 셰도우 암호 파일 입력값입니다"
+
+msgid "duplicate shadow password entry"
+msgstr "셰도우 암호 입력값 복제"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "사용자 %s: 마지막 암호 바꾼 때가 미래입니다\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: %s 안의 항목을 정렬할 수 없습니다\n"
+
+msgid "Usage: pwconv\n"
+msgstr "사용법: pwconv\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: %s의 모드를 0600으로 바꾸는데 실패했습니다\n"
+
+msgid "Usage: pwunconv\n"
+msgstr "사용법: pwunconv\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "su를 통해 이 계정으로 접근하는 것이 거부되었습니다.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "암호 인증이 무시되었습니다.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "인증하기 위해 본인의 암호를 입력하십시오.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"사용법: su [옵션] [<로그인>]\n"
+"\n"
+"옵션:\n"
+"  -c, --command <명령어>        실행된 쉘에 <명령어>를 보냅니다\n"
+"  -h, --help                    이 도움말 메시지를 표시하고 끝냅니다\n"
+"  -, -l, --login                쉘을 로그인 쉘로 합니다\n"
+"  -m, -p,\n"
+"  --preserve-environment        환경변수를 초기화하지 않고 같을 쉘을\n"
+"                                사용합니다\n"
+"  -s, --shell <쉘>              암호 파일의 기본 쉘 대신 <쉘>를 사용합니다\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: 터미널에서 받드시 실행되어야 합니다\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: 오류 %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "알 수 없는 아이디: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "su %s을(를) 하도록 인증이 되지 않았습니다\n"
+
+msgid "(Enter your own password)"
+msgstr "(본인의 암호를 입력하십시오)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(무시됨)\n"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: 인증이 실패했습니다\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: 현재 su 명령을 실행할 권한이 없습니다\n"
+
+msgid "No shell\n"
+msgstr "쉘이 없음\n"
+
+msgid "No password file"
+msgstr "암호 파일 없음"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY 실패"
+
+msgid "No password entry for 'root'"
+msgstr "'루트'에 대한 암호 파일 입력값이 없음"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"일반적으로 시작(normal startup)을 하려면 control-d를 입력하십시오,\n"
+"(그렇지 않으면 시스템 정비를 위하여 루트 암호를 입력하십시오)"
+
+msgid "Entering System Maintenance Mode"
+msgstr "시스템 정비 모드로 들어가고 있습니다"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: 새로운 기본값 파일을 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: 새로운 기본값 파일을 만들 수 없습니다\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: %d번 줄: chown 실패했습니다\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: 이름 다시 설정: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: '%s' 그룹은 NIS 그룹입니다.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: 그룹이 너무 많이 명시되었습니다 (최대 %d).\n"
+
+#, c-format
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr "  -s, --sha-rounds              SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr "  -s, --sha-rounds              SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr "  -s, --sha-rounds              SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr "  -s, --sha-rounds              SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr "  -s, --sha-rounds              SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr "  -s, --sha-rounds              SHA* 암호화 알고리즘의 SHA 라운드 수\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: 기본 디렉터리 '%s' 잘못되었습니다\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: 주석 '%s'이(가) 잘못되었습니다\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: 홈 디렉터리 '%s'은(는) 잘못되었습니다\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: -e 옵션을 사용할 경우 셰도우 암호가 필요합니다\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: -f 옵션을 사용할 경우 셰도우 암호가 필요합니다\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: 올바르지 않은 필드 '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: 올바르지 않은 쉘 '%s'\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: %s 옵션 및 %s 충돌\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+"%s: UID %lu번의 로그인 실패 기록 항목을 초기화하는데 실패했습니다: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: UID %lu번의 최근 기록 항목을 초기화하는데 실패했습니다: %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: 디렉터리 %s을(를) 만들 수 없습니다\n"
+
+msgid "Creating mailbox file"
+msgstr "메일함 파일을 만드는 중"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr "'mail' 그룹이 없습니다. 사용자의 메일함 파일을 0600 모드로 만듭니다.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "메일함의 파일 권한을 설정 중"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: '%s' 사용자가 이미 있습니다\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: %s 그룹이 이미 있습니다. 이 사용자를 이 그룹에 추가하려면, -g 옵션을 사용"
+"하십시오.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: 사용자를 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu번은 유일하지 않습니다\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: 그룹을 만들 수 없습니다\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: 경고: 홈디렉터리가 이미 있습니다.\n"
+"skel 디렉터리에서 파일을 복사하지 않습니다.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"사용법: userdel [옵션] <로그인>\n"
+"\n"
+"옵션:\n"
+"  -f, --force                   파일이 사용자 소유자가 아니더라도 강제로\n"
+"                                지웁니다\n"
+"  -h, --help                    이 도움말 메시지를 표시하고 끝냅니다\n"
+"  -r, --remove                  홈 디렉터리와 메일 저장소을 지웁니다\n"
+"\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr "%s: %s 그룹은 다른 사용자의 주요 그룹이므로 제거하지 않습니다.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove %s: %s"
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: 경고: %s을(를) 제거할 수 없습니다: %s"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s은(는) %s의 소유가 아닙니다, 제거하지 않습니다\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: %s 사용자는 NIS 사용자 입니다\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: %s 사용자는 현재 로그인한 상태 입니다\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: 홈 디렉터리 '%s'은(는) 잘못되었습니다\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: 디렉터리 %s은(는) 제거하지 않습니다 (사용자 %s의 홈 디렉터리를\n"
+"제거하게 됩니다)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: 디렉터리 %s을(를) 제거하는 데 오류가 발생했습니다\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: usermod [options] LOGIN\n"
+#| "\n"
+#| "Options:\n"
+#| "  -c, --comment COMMENT         new value of the GECOS field\n"
+#| "  -d, --home HOME_DIR           new home directory for the user account\n"
+#| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -g, --gid GROUP               force use GROUP as new primary group\n"
+#| "  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+#| "  -a, --append                  append the user to the supplemental "
+#| "GROUPS\n"
+#| "                                mentioned by the -G option without "
+#| "removing\n"
+#| "                                him/her from other groups\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -l, --login NEW_LOGIN         new value of the login name\n"
+#| "  -L, --lock                    lock the user account\n"
+#| "  -m, --move-home               move contents of the home directory to "
+#| "the\n"
+#| "                                new location (use only with -d)\n"
+#| "  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+#| "  -p, --password PASSWORD       use encrypted password for the new "
+#| "password\n"
+#| "  -s, --shell SHELL             new login shell for the user account\n"
+#| "  -u, --uid UID                 new UID for the user account\n"
+#| "  -U, --unlock                  unlock the user account\n"
+#| "\n"
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"사용법: usermod [옵션] <로그인>\n"
+"\n"
+"옵션:\n"
+"  -c, --comment <설명>          GECOS필드의 값을 새로 설정합니다\n"
+"  -d, --home <홈디렉터리>       지정된 사용자 계정의 새 홈 디렉터리를\n"
+"                                지정합니다\n"
+"  -e, --expiredate <만료날짜>   계정 만료 날짜를 <만료날짜>로 합니다\n"
+"  -f, --inactive <비활성화기간> 만료된 후 비활성화 기간을 <비활성화기간>으"
+"로\n"
+"                                합니다\n"
+"  -g, --gid <그룹>              새 주요 그룹을 <그룹>으로 강제로 지정합니다\n"
+"  -G, --groups <그룹목록>       보조 그룹의 목록을 새로 지정합니다\n"
+"  -a, --append                  사용자를 보조 그룹 <그룹>에 추가합니다\n"
+"                                (그룹 목록은 -G 옵션에 나타나고 다른\n"
+"                                그룹의 추가 삭제 상태는 변하지 않습니다)\n"
+"  -h, --help                    이 도움말을 표시하고 끝냅니다\n"
+"  -l, --login <새로그인>        로그인 이름을 새로 지정합니다\n"
+"  -L, --lock                    지정된 사용자 계정을 잠급니다\n"
+"  -m, --move-home               홈 디렉터리의 내용을 새 홈 디렉터리로 옮깁니"
+"다\n"
+"                                (-d 옵션과 함께 사용해야 합니다)\n"
+"  -o, --non-unique              중복되는 UID도 허용합니다\n"
+"  -p, --password <암호>         새로 사용할 암호를 암호화하여 사용합니다\n"
+"  -s, --shell <쉘>              지정된 사용자 계정의 로그인 쉘을 지정합니다\n"
+"  -u, --uid <UID>               지정된 사용자 계정의 새 <UID> 값을 지정합니"
+"다\n"
+"  -U, --unlock                  사용자 계정의 잠금을 해제합니다\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: 사용자의 암호 잠금을 해제하면 암호 없는 계정이 됩니다. 이 사용자의\n"
+"암호 잠금을 풀려면 usermod -p 명령으로 암호 잠금을 해제해야 합니다.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: '%s' 사용자가 이미 %s 안에 있습니다\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: 주어진 플래그가 없습니다\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e 옵션과 -f 옵션은 셰도우 암호가 필요합니다\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L, -p, -U 옵션은 한 번에 하나만 쓸 수 있습니다\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: '%lu' UID가 이미 있습니다\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: 디렉터리 %s은(는) 이미 있습니다\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: %s을(를) 만들 수 없습니다\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: %s을(를) chown할 수 없습니다\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: 경고: 이전 홈 디렉터리 %s을(를) 완전히 제거하는 데 실패했습니다"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: 디렉터리 %s의 이름을 %s(으)로 바꿀 수 없습니다\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: 사용자 %lu의 최근 기록 항목을 사용자 %lu에 복사하는데 실패했습니다: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: 사용자 %lu의 로그인 실패 기록 항목을 사용자 %lu에 복사하는데 실패했습니"
+"다: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: 경고: %s은(는) %s이(가) 소유하고 있지 않습니다\n"
+
+msgid "failed to change mailbox owner"
+msgstr "메일함 소유자를 바꾸는 데 실패했습니다"
+
+msgid "failed to rename mailbox"
+msgstr "메일함의 이름을 바꾸는 데 실패했습니다"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"%s을(를) 수정했습니다.\n"
+"앞뒤가 맞으려면 %s도 바꿔야 합니다.\n"
+"수정하려면 '%s' 명령을 이용하십시오.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"사용법: vipw [옵션]\n"
+"\n"
+"옵션:\n"
+"  -g, --group                   그룹 데이터베이스를 편집합니다\n"
+"  -h, --help                    이 도움말 메시지를 표시하고 끝냅니다\n"
+"  -p, --passwd                  passwd 데이터베이스를 편집합니다\n"
+"  -q, --quiet                   조용한 모드\n"
+"  -s, --shadow                  셰도우 데이터베이스나 그룹 셰도우 \n"
+"                                데이터베이스를 수정합니다\n"
+"\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: %s을(를) 제거하는데 실패했습니다\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s은(는) 바뀌지 않았습니다\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "파일을 잠글 수 없습니다"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "파일을 잠글 수 없습니다"
+
+msgid "Couldn't make backup"
+msgstr "백업을 만들 수 없습니다"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s을(를) 복구할 수 없습니다: %s (바뀐 사항은 %s에 있습니다)\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: faillog [옵션]\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ "  -a, --all                  모든 사용자의 로그인 실패 기록을 표시합니다\n"
+#~ "  -h, --help                 이 도움말 메시지를 표시하고 끝냅니다\n"
+#~ "  -l, --lock-time <초>       로그인에 실패하면 <초>초 동안 계정을 잠급니"
+#~ "다\n"
+#~ "  -m, --maximum <최대값>     로그인 실패 횟수의 최대값을 <최대값>으로 합니"
+#~ "다\n"
+#~ "  -r, --reset                로그인 실패 횟수를 초기화합니다\n"
+#~ "  -t, --time <날짜>          <날짜>일 내의 로그인 실패 기록만 표시합니다\n"
+#~ "  -u, --user <로그인>        <로그인> 사용자의 로그인 실패 기록을 표시하거"
+#~ "나,\n"
+#~ "                             -r, -m, -l 옵션을 사용할 때에는 <로그인> 사용"
+#~ "자의\n"
+#~ "                             로그인 실패 횟수와 한계값만 관리합니다\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: groupadd [옵션] <그룹>\n"
+#~ "\n"
+#~ "옵션\n"
+#~ "  -f, --force                   지정한 그룹이 이미 있을 경우에도 끝내고 \n"
+#~ "                                성공한 것으로 표시합니다\n"
+#~ "  -g, --gid <GID>               새 그룹의 gid를 <GID>로 합니다\n"
+#~ "  -h, --help                    이 도움말 메시지를 표시하고 끝냅니다\n"
+#~ "  -K, --key <키>=<값>           /etc/login.defs의 기본값을 무시하고 설정합"
+#~ "니다\n"
+#~ "  -o, --non-unique              GID가 중복되더라도(유일하지 않더라도)\n"
+#~ "                                그룹 만들기를 허용합니다\n"
+#~ "  -p, --password <암호>         새 그룹에 암호화한 암호를 사용합니다\n"
+#~ "  -r, --system                  시스템 계정을 만듭니다\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "사용법: groupmod [옵션] <그룹>\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ "  -g, --gid <GID>               <그룹>에 새 <GID>를 사용합니다\n"
+#~ "  -h, --help                    이 도움말을 출력하고 끝납니다\n"
+#~ "  -n, --new-name <새그룹>       <그룹>에 <새그룹> 이름을 강제로 사용합니"
+#~ "다\n"
+#~ "  -o, --non-unique              <그룹>에 중복된 (유일하지 않은) GID로 그룹"
+#~ "을 \n"
+#~ "                                만듭니다\n"
+#~ "  -p, --password <암호>         새 암호에 암호화한 암호를 사용합니다\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~| "                                home directory\n"
+#~| "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~| "account\n"
+#~| "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~| "  -D, --defaults                print or save modified default useradd\n"
+#~| "                                configuration\n"
+#~| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~| "                                to INACTIVE\n"
+#~| "  -g, --gid GROUP               force use GROUP for the new user "
+#~| "account\n"
+#~| "  -G, --groups GROUPS           list of supplementary groups for the "
+#~| "new\n"
+#~| "                                user account\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~| "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~| "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~| "                                faillog databases\n"
+#~| "  -m, --create-home             create home directory for the new user\n"
+#~| "                                account\n"
+#~| "  -M, --no-create-home          do not create user's home directory\n"
+#~| "                                (overrides /etc/login.defs)\n"
+#~| "  -N, --no-user-group           do not create a group with the same name "
+#~| "as\n"
+#~| "                                the user\n"
+#~| "  -o, --non-unique              allow create user with duplicate\n"
+#~| "                                (non-unique) UID\n"
+#~| "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~| "                                account\n"
+#~| "  -r, --system                  create a system account\n"
+#~| "  -s, --shell SHELL             the login shell for the new user "
+#~| "account\n"
+#~| "  -u, --uid UID                 force use the UID for the new user "
+#~| "account\n"
+#~| "  -U, --user-group              create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "사용법: useradd [옵션] <로그인>\n"
+#~ "\n"
+#~ "옵션:\n"
+#~ "  -b, --base-dir <기본디렉터리>  새 사용자 계정의 홈 디렉터리의 기본 디렉"
+#~ "토리\n"
+#~ "  -c, --comment <설명>           새 사용자 계정의 GECOS 필드를 설정합니"
+#~ "다\n"
+#~ "  -d, --home-dir <홈디렉터리>    새 사용자 계정의 홈 디렉터리\n"
+#~ "  -D, --defaults                 기본 useradd 설정을 표시하거나 변경합니"
+#~ "다\n"
+#~ "  -e, --expiredate <만료일>      계정 만료 날짜를 <만료일>로 합니다\n"
+#~ "  -f, --inactive <비활성화기간>  만료된 후 비활성화 기간을 <비활성화기간>"
+#~ "으로\n"
+#~ "                                 합니다\n"
+#~ "  -g, --gid <그룹>               새 주요 그룹을 <그룹>으로 강제로 지정합니"
+#~ "다\n"
+#~ "  -G, --groups <그룹목록>        보조 그룹의 목록을 새로 지정합니다\n"
+#~ "  -h, --help                     이 도움말을 표시하고 끝냅니다\n"
+#~ "  -k, --skel <SKEL디렉터리>      다른 skel 디렉터리를 지정합니다\n"
+#~ "  -K, --key <키>=<값>            /etc/login.defs의 기본값을 무시하고 설정"
+#~ "합니다\n"
+#~ "  -l, --no-log-init              사용자를 최근 기록 및 로그인 실패\n"
+#~ "                                 데이터베이스에 추가하지 않습니다\n"
+#~ "  -m, --create-home              새 사용자 계정의 홈 디렉터리를 만듭니다\n"
+#~ "  -M, --no-create-home           홈 디렉터리를 만들지 않습니다\n"
+#~ "                                 (/etc/login.defs의 설정을 무시합니다)\n"
+#~ "  -o, --non-user-group           사용자와 같은 이름의 그룹을 만들지 않습니"
+#~ "다\n"
+#~ "  -o, --non-unique               중복되는 UID도 허용합니다\n"
+#~ "  -p, --password <암호>          새로 사용할 암호를 암호화하여 사용합니"
+#~ "다\n"
+#~ "  -s, --shell <쉘>               지정한 사용자 계정의 로그인 쉘을 지정합니"
+#~ "다\n"
+#~ "  -u, --uid <UID>                지정한 사용자 계정의 새 <UID> 값을 지정합"
+#~ "니다\n"
+#~ "  -U, --user-group               사용자와 같은 이름의 그룹을 만듭니다\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "사용법: %s [옵션] [입력]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            암호화 방법 (다음 중 하나: %s)\n"
+#~ "  -r, --system                  시스템 계정을 만듭니다\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "암호가 만료하도록 설정했습니다."
diff --git a/po/nb.gmo b/po/nb.gmo
new file mode 100644 (file)
index 0000000..ba772ab
Binary files /dev/null and b/po/nb.gmo differ
diff --git a/po/nb.po b/po/nb.po
new file mode 100644 (file)
index 0000000..607d50b
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,2826 @@
+# translation of shadow.po to Norwegian Bokmål
+# Copyright (C) 2004, 2006 Free Software Foundation, Inc.
+#
+# Knut Yrvin <knuty@skolelinux.no>, 2004.
+# Klaus Ade Johnstad <klaus.johnstad@holmlia.gs.oslo.no>, 2004.
+# Klaus Ade Johnstad <klaus@skolelinux.no>, 2004.
+# Håvard Korsvoll <korsvoll@skulelinux.no>, 2004.
+# Bjørn Steensrud <bjornst@powertech.no>, 2006.
+# Bjørn Steensrud <bjornst@skogkatt.homelinux.org>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.17\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2009-04-12 17:14+0200\n"
+"Last-Translator: Bjørn Steensrud <bjornst@skogkatt.homelinux.org>\n"
+"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.3\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Det er flere innslag med navnet «%s» i %s. Rett på dette med pwck eller "
+"grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "støtter ikke libcrypt crypt-metoden? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Fant ikke plass til config-info.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "feil med oppsettet - ukjent element «%s» (kontakt administrator)\n"
+
+msgid "Password: "
+msgstr "Passord: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s's Passord: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Advarsel: ukjent gruppe %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Advarsel: for mange grupper\n"
+
+msgid "Your password has expired."
+msgstr "Ditt passord har utgått på dato."
+
+msgid "Your password is inactive."
+msgstr "Ditt passord er ikke aktivert."
+
+msgid "Your login has expired."
+msgstr "Din login har utgått på dato."
+
+msgid "  Contact the system administrator."
+msgstr "  Kontakt systemadministrator."
+
+msgid "  Choose a new password."
+msgstr "  Velg et nytt passord."
+
+msgid "You must change your password."
+msgstr "Du må endre passordet ditt."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Ditt passord vil utløpe om %ld dager.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Ditt passord vil utløpe i morgen."
+
+msgid "Your password will expire today."
+msgstr "Ditt passord vil utløpe i dag."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Kan ikke åpne kontrollgrensesnitt – avbryter.\n"
+
+# , c-format
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Kan ikke endre eier eller rettigheter til tty stdin: %s"
+
+# , c-format
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: klarte ikke å låse opp %s\n"
+
+msgid "Environment overflow\n"
+msgstr "Miljøet er overfylt\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Du kan ikke endre $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d mislykket siden forrige innlogging.\n"
+"Forrige var %s på %s.\n"
+msgstr[1] ""
+"%d mislykte siden forrige innlogging.\n"
+"Forrige var %s på %s.\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: klarer ikke å få entydig UID (ingen flere UID-er tilgjengelig)\n"
+
+# , c-format
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: klarer ikke å få entydig GID (ingen flere GID-er tilgjengelig)\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: klarer ikke å få entydig UID (ingen flere UID-er tilgjengelig)\n"
+
+# , c-format
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: klarer ikke å få entydig UID (ingen flere UID-er tilgjengelig)\n"
+
+msgid "Too many logins.\n"
+msgstr "For mange innlogginger.\n"
+
+msgid "You have new mail."
+msgstr "Du har fått ny epost."
+
+msgid "No mail."
+msgstr "Ingen epost."
+
+msgid "You have mail."
+msgstr "Du har epost."
+
+msgid "no change"
+msgstr "ingen endring"
+
+msgid "a palindrome"
+msgstr "et palindrom"
+
+msgid "case changes only"
+msgstr "bare endring i store/små bokstaver"
+
+msgid "too similar"
+msgstr "for likt"
+
+msgid "too simple"
+msgstr "for enkelt"
+
+msgid "rotated"
+msgstr "rotert"
+
+msgid "too short"
+msgstr "for kort"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Dårlig passord: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() mislyktes, feil %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: passordet er uendret\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: passorder ble oppdatert\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Feil passord for «%s».\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Ugyldig verdi for ENCRYPT_METHOD: «%s»\n"
+"Faller tilbake til DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Klarte ikke endre mappe til «%s»\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Ingen hjemmemappe, logger inn med HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Kan ikke utføre %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Ugyldig rot-mappe «%s»\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Kan ikke endre rot-mappa til «%s»\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Kan ikke finne ut ditt terminalnavn."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: slapp opp for minne\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) mislyktes\n"
+
+msgid "No"
+msgstr "Nei"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Bruk: chage [valg] [bruker]\n"
+"\n"
+"Valg:\n"
+"  -d, --lastday SISTE_DAG       angi at siste passord-endring skjedde "
+"SISTE_DAG\n"
+"  -E, --expiredate UTLØPSDATO   angi at kontoen utløper UTLØPSDATO\n"
+"  -h, .--help                   vis denne hjelpeteksten og avslutt\n"
+"  -I, --inaktive INAKTIV        angi at passordet settes inaktivt etter "
+"utløp\n"
+"  -l, --list                    vis informasjon om kontoens aldring og "
+"utløp\n"
+"  m, --mindays MIN_DAGER        oppgir at passordet først kan endres etter\n"
+"                                MIN_DAGER\n"
+"  M, --maxdays MAKS_DAGER       oppgir at passordet må endres før det er\n"
+"                                gått MAKS_DAGER\n"
+"  -W, --warndays VARSLDAGER     etter VARSLDAGER varsles bruker om at\n"
+"                                passordet snart utløper\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"Skriv inn de nye verdiene, eller trykk ENTER for å bruke forvalgte verdier"
+
+msgid "Minimum Password Age"
+msgstr "Minimum gyldighetsperiode på passord"
+
+msgid "Maximum Password Age"
+msgstr "Maksimum gyldighetsperiode på passord"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Siste endring av passord (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Varsel når passordet snart går ut på dato"
+
+msgid "Password Inactive"
+msgstr "Inaktivt passord"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Konto utløper (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Siste endring av passord\t\t\t\t\t: "
+
+msgid "never"
+msgstr "aldri"
+
+msgid "password must be changed"
+msgstr "passordet må endres"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Passord utløper\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Passordet inaktivt\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Kontoen utløper\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minste antall dager mellom passord-endring\t\t\t:%ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Største antall dager mellom passord-endring\t\t\t:%ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Antall dager med varsling før passordet utløper:\t\t%ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: ugyldig dato «%s»\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: ugyldig numerisk argument «%s»\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: ikke ta med «l» sammen med andre valg\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Ikke tillatelse.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Kan ikke avgjøre ditt brukernavn.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM autentisering mislyktes\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: kan ikke låse %s; prøv igjen senere\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: kan ikke åpne %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: feilet mens endringer skrives til %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: klarte ikke lage det nye %s-innslaget «%s»\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: skyggepassordfila finnes ikke\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: klarte ikke minske privilegier (%s)\n"
+
+# , c-format
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: bruker «%s» finnes ikke i %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Endrer aldringsinformasjon for %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: feil ved endring i feltene\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Bruk: %s [-f fullt_navn] [-r rom_nr] [-w jobbtlf]\n"
+"\t[-h hjemmetlf] [-o annet] [bruker]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "Bruk: %s [-f fullt_navn] [-r rom_nr] [-w jobbtlf] [-h hjemmetlf]\n"
+
+msgid "Full Name"
+msgstr "Fullt navn"
+
+# , c-format
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Romnummer"
+
+msgid "Work Phone"
+msgstr "Jobbtelefon"
+
+msgid "Home Phone"
+msgstr "Hjemmetelefon"
+
+msgid "Other"
+msgstr "Annet"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Kan ikke endre ID til root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: navn med ikke-ASCII tegn: «%s»\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: ugyldig navn: «%s»\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: romnummer med ikke-ASCII tegn: «%s»\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: ugyldig romnummer: «%s»\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: ugyldig jobbtelefon: «%s»\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: ugyldig hjemmetelefon: «%s»\n"
+
+# , c-format
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: «%s» inneholder tegn som ikke er i ASCII\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: «%s» inneholder ugyldige tegn\n"
+
+# , c-format
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: bruker «%s» finnes ikke\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: kan ikke endre bruker «%s» på NIS-klienten.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: «%s» er NIS-sjefen for denne klienten.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Endrer brukerinformasjon for %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: feltene er for lange\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: %s [options]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -c, --crypt-method            the crypt method (one of %s)\n"
+#| "  -e, --encrypted               supplied passwords are encrypted\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -m, --md5                     encrypt the clear text password using\n"
+#| "                                the MD5 algorithm\n"
+#| "%s\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Bruk: %s [valg]\n"
+"\n"
+"Valg:\n"
+"  -c, --crypt-method        krypteringsmetode (en av %s)\n"
+"  -e, --encrypted               oppgitte passord er krypterte\n"
+"  h, --help                     vis denne hjelpeteksten og avslutt\n"
+"  -m, --md5                     krypter klartekst-passordene med\n"
+"                                 MD5-algoritmen\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds              antall SHA-runder for  SHA*\n"
+"                                kryptoalgoritmene\n"
+
+# , c-format
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s er bare tillatt sammen med %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: valgene -c, -e og -m utelukker hverandre\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: ikke støtte for krypteringsmetode: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linje %d: linja er for lang\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linje %d: mangler nytt passord\n"
+
+# , c-format
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: linje %d: gruppa «%s« finnes ikke\n"
+
+# , c-format
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linje %d: klarte ikke lage det nye %s-innslaget «%s»\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: feil funnet, endringer er ikke utført\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [input]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -s, --sha-rounds              antall SHA-runder for  SHA*\n"
+"                                kryptoalgoritmene\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: line %d: user '%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: linje %d: bruker «%s» finnes ikke\n"
+
+# , c-format
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: linje %d: bruker «%s» finnes ikke\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Bruk: chsh [valg] LOGIN\n"
+"\n"
+"Valg:\n"
+"  -h, --help        vis denne meldingen og avslutt\n"
+"  -s, --shell SKALL      nytt innloggingsskall for brukerkontoen\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Innloggingsskall"
+
+# , c-format
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Du kan ikke endre skallet til «%s».\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Endrer innloggingsskall for %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: ugyldig inntasting: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s: %s er et ugyldig skall.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Bruk: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to get the entry for UID %d\n"
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr "faillog: klarte ikke finne oppføring for UID %d\n"
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Logginn       Mislykt Maksimum Siste                   På\n"
+
+# , c-format
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus igjen]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lås]"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to reset fail count for UID %d\n"
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr "faillog: Klarte ikke tilbakestille feiltelling for UID %d\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set max for UID %d\n"
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr "faillog: Klarte ikke sette maksimum for UID %d\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set locktime for UID %d\n"
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr "faillog: Klarte ikke sette låsetid for UID %d\n"
+
+# , c-format
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "lastlog: Ukjent bruker eller område: %s\n"
+
+# , c-format
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "faillog: Kan ikke åpne %s:%s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr "faillog: Kan ikke finne størrelse av %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+"Bruk: %s [option] GRUPPE\n"
+"\n"
+"Valg:\n"
+"  -a, --add BRUKER             legg til BRUKER i GRUPPE\n"
+"  -d, --delete BRUKER         fjern BRUKER fra GRUPPE\n"
+"  -r, --remove-password      fjern GRUPPEs passord\n"
+"  -R, --restrict                     tilgang til GRUPPE bare for medlemmer\n"
+"  -M, --members BRUKER –  oppgi lista over medlemmer i GRUPPE\n"
+"%s\n"
+"\n"
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"  -A, --administrators ADMIN,...\n"
+"                                oppgi liste over administratorer for GRUPPE\n"
+"Valgene kan ikke kobles sammen, unntatt for -A og -M-\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Valgene kan ikke kombineres.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: shadow gruppepassord kreves for -A\n"
+
+# , c-format
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: gruppa «%s» finnes ikke i %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: feilet mens skrivebeskyttet %s ble lukket\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Endrer passordet for gruppa %s\n"
+
+msgid "New Password: "
+msgstr "Nytt passord: "
+
+msgid "Re-enter new password: "
+msgstr "Skriv inn passordet på nytt: "
+
+msgid "They don't match; try again"
+msgstr "Passordene var ikke like, prøv igjen"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Prøv igjen senere\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Legger til brukere i  %s gruppa %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Fjerner brukeren %s fra gruppa %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: bruker «%s» er ikke medlem i «%s»\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Ikke en tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [input]\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -s, --sha-rounds              antall SHA-runder for  SHA*\n"
+"                                kryptoalgoritmene\n"
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds              antall SHA-runder for  SHA*\n"
+"                                kryptoalgoritmene\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+# , c-format
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: «%s» er ikke et gyldig gruppenavn\n"
+
+# , c-format
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: ugyldig gruppe-ID «%s»\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K krever KEY=VALUE\n"
+
+# , c-format
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: gruppa «%s» finnes fra før\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s; GID «%lu» finnes fra før.\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Bruk: groupdel gruppe\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: kunne ikke fjerne innslaget «%s» fra %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: kan ikke fjerne hovedgruppa til bruker «%s».\n"
+
+# , c-format
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: gruppa «%s» finnes ikke\n"
+
+# , c-format
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: gruppe «%s» er en NIS gruppe\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s er NIS sjefen\n"
+
+# , c-format
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: bruker «%s» er allerede medlem av «%s»\n"
+
+# , c-format
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: slapp opp for minne. Kan ikke oppdatere %s.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+"Brul: groupmems [valg] [handling]\n"
+"\n"
+"Valg:\n"
+"  -g, --group gruppenavn         endre gruppenavn i stedet for brukerens "
+"gruppe\n"
+"                                (bare root)\n"
+"\n"
+"Handlinger:\n"
+"  -a, --add brukernavn           legg til brukernavn til medlemmer av "
+"gruppa\n"
+"  -d, --delete brukernavn        fjern brukernavn fra medlemmer av gruppa\n"
+"  -p, --purge                   slett alle medlemmer av gruppa\n"
+"  -l, --list                    list opp medlemmer av gruppa\n"
+"\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: gruppenavnet ditt passer ikke med brukernavnet ditt\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: bare root kan bruke valget -g/--group\n"
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+# , c-format
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: ugyldig gruppenavn «%s»\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: gruppa %s er en NIS gruppe\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: ukjent bruker %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Bruk: %s [-r] [-s] [gruppe [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Bruk: %s [-r] [-s] [gruppe]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s og -r kan ikke brukes samtidig\n"
+
+msgid "invalid group file entry"
+msgstr "ugyldig oppføring i gruppefila"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "slette linje «%s»? "
+
+msgid "duplicate group entry"
+msgstr "duplisert gruppeoppføring"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ugyldig gruppenavn «%s»\n"
+
+# , c-format
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ugyldig gruppe-ID «%lu»\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "gruppe %s: ingen bruker %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "slett medlem «%s»? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "fant ingen tilsvarende oppføring i %s\n"
+
+# , c-format
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "legg til gruppe «%s» i %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "ugyldig oppføring i shadow-gruppefila"
+
+msgid "duplicate shadow group entry"
+msgstr "duplisert shadow-gruppeoppføring"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "shadow-gruppe %s: ingen administrativ bruker %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "slett administrativt medlem «%s» ? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "shadow gruppe %s: ingen bruker %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: filene er blitt oppdatert\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: ingen endringer\n"
+
+msgid "Usage: grpconv\n"
+msgstr "Bruk: grpconv\n"
+
+msgid "Usage: grpunconv\n"
+msgstr "Bruk: grpunconv\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: kan ikke slette %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Bruk: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Bruk: id\n"
+
+msgid " groups="
+msgstr " grupper="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Bruk: lastlog [valg]\n"
+"\n"
+"Valg:\n"
+"  -b, --before DAGER            skriv bare oppføringer eldre enn DAGER\n"
+"  -h, --help                    vis denne hjelpeteksten og avslutt\n"
+"  -t, --time DAGER              skriv bare oppføringer nyere enn DAGER\n"
+"  -u, --user BRUKER             skriv oppføringer for bruker BRUKER\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "lastlog: Failed to get the entry for UID %d\n"
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr "lastlog: Klarte ikke hente innslag for UID %d\n"
+
+msgid "Username         Port     From             Latest"
+msgstr "Brukernavn         Port     Fra             Sist"
+
+msgid "Username                Port     Latest"
+msgstr "Brukernavn                Port     Sist"
+
+msgid "**Never logged in**"
+msgstr "**Aldri vært innlogget**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: uventet argument: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr "lastlog: Kan ikke finne størrelse på %s: %s\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Bruk: %s [-p] [navn]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "      %s [-p] [-h host] [-f navn]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "      %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Ugyldig tidspunkt for innlogging"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systemet stengt for rutinemessig vedlikehold"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Frakobling omgått - root-innlogging tillatt.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Innlogging avbrutt på tid etter %d sekunder.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr "Ingen oppføring i utmp. Du må kjøre «login» fra «sh» på laveste nivå"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM mislyktes, avbryter: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maks. antall forsøk er overskredet (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM ber om avbrytelse\n"
+
+msgid "Login incorrect"
+msgstr "Ugyldig innlogging"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: mislykket fork: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSTTY mislyktes på %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Advarsel: innlogging reaktivert etter midlertidig stenging."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Forrige login: %s på %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Forrige login: %.19s på %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " fra %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"innloggingstid overskredet\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Bruk: logoutd\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Bruk: newgrp [-] [gruppe]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Bruk: sg group [[-c] command]\n"
+
+msgid "Invalid password.\n"
+msgstr "Ugyldig passord.\n"
+
+# , c-format
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: mislykket fork: %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID «%lu» finnes ikke\n"
+
+msgid "too many groups\n"
+msgstr "for mange grupper\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+# , c-format
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: gruppa «%s» er en skyggegruppe, men finnes ikke i /etc/group\n"
+
+# , c-format
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ugyldig bruker-ID «%s»\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: ugyldig brukernavn «%s»\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linje %d: ugyldig linje\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: klarer ikke å oppdatere oppføring for bruker %s (ikke i passwd-"
+"databasen)\n"
+
+# , c-format
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linje %d: kan ikke opprette bruker\n"
+
+# , c-format
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linje %d: kan ikke opprette gruppe\n"
+
+# , c-format
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: linje %d: bruker «%s» finnes ikke i %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linje %d: kan ikke oppdatere passord\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linje %d: mkdir mislyktes\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linje %d: chown mislyktes\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linje %d: kan ikke oppdatere oppføring\n"
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Bruk: passwd [valg] [bruker]\n"
+"\n"
+"Valg:\n"
+"  -a, --all                     rapporter passordstatus for alle kontoer\n"
+"  -d, --delete                  slett passordet for oppgitt konto\n"
+"  -e, --expire                  angi at passordet for konten er utgått\n"
+"  -h, --help                    vis denne hjelpeteksten og avslutt\n"
+"  -k, --keep-tokens             endre passord bare hvis utgått\n"
+"  -i, --inactive INAKTIV        set passord inaktivt etter utløp til "
+"INAKTIV\n"
+"  -l, --lock                    lås oppgitt konto\n"
+"  -n, --mindays MIN_DAGER       angi at passord ikke kan endres før etter\n"
+"                                MIN_DAGER\n"
+"  -q, --quiet                   ordknapp kjøremåte\n"
+"  -r, --repository LAGER        endre passord i lageret LAGER\n"
+"  -S, --status                  rapporter passordstatus på oppgitt konto\n"
+"  -u, .--unlock                 lås opp oppgitt konto\n"
+"  -w, --warndays DAGER          varsle om utgått passord DAGER før utløp\n"
+"  -x, --maxdays MAX_DAGER           passordet må endres før det er gått "
+"MAX_DAGER\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Gammelt passord: "
+
+# , c-format
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Skriv inn det nye passordet (minst %d tegn)\n"
+"Bruk en kombinasjon av store og små bokstaver, og tall.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Skriv inn det nye passordet (minst %d, høyst %d tegn)\n"
+"Bruk en kombinasjon av store og små bokstaver, og tall.\n"
+
+msgid "New password: "
+msgstr "Nytt passord: "
+
+msgid "Try again."
+msgstr "Prøv igjen."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Advarsel: svakt passord (skriv det inn igjen for å bruke det likevel)."
+
+msgid "They don't match; try again.\n"
+msgstr "Passordene var ikke like, prøv igjen.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Passordet for %s kan ikke endres.\n"
+
+# , c-format
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Passordet for %s kan ikke endres ennå.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: om passordet låses opp dannes en konto uten passord.\n"
+"Du bør oppgi et passord med usermod -p for å låse opp passordet for denne "
+"kontoen.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: ikke støtte for lager %s\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr "%s: %s har ikke rett til å endre passord for %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Du kan ikke vise eller endre passordinformasjon for %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Endrer passordet for %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Passordet for %s er uendret.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Passordet er endret."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Varsel når passordet snart går ut på dato"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Bruk: %s [-q] [-r] [-s] [passord [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s og -r kan ikke brukes samtidig\n"
+
+msgid "invalid password file entry"
+msgstr "ugyldig oppføring i passordfila"
+
+msgid "duplicate password entry"
+msgstr "duplisert oppføring i passordfila"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ugyldig brukernavn «%s»\n"
+
+# , c-format
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "ugyldig bruker-ID  «%lu»\n"
+
+# , c-format
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "bruker «%s»: ingen gruppe %lu\n"
+
+# , c-format
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "bruker «%s»: mappe «%s» finnes ikke\n"
+
+# , c-format
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "bruker «%s»: programmet «%s» finnes ikke\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "fant ingen tilsvarende passordoppføring i %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "legg til bruker «%s» i %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "ugyldig oppføring i shadow-passordfila"
+
+msgid "duplicate shadow password entry"
+msgstr "duplisert oppføring i shadow-passordfila"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "bruker %s: seneste passordendring i fremtiden\n"
+
+# , c-format
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: kan ikke sortere oppføringer i %s\n"
+
+msgid "Usage: pwconv\n"
+msgstr "Bruk: pwconv\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: klarte ikke endre rettigheter på %s til 0600\n"
+
+msgid "Usage: pwunconv\n"
+msgstr "Bruk: pwunconv\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "NEKTET tilgang til su til den kontoen.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Passordautentisering forbi-koblet.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Oppgi ditt EGET passord som autentisering.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Bruk: su [valg] [konto]\n"
+"\n"
+"Valg:\n"
+"  -c, --command KOMMANDO        send KOMMANDO til det skallet som startes\n"
+"  -h, --help                    vis denne hjelpeteksten og avslutt\n"
+"  -, -l, --login                gjør det nye skallet til en login-skall\n"
+"  -m, -p,\n"
+"  --preserve-environment        ikke endre miljøvariabler, og behold\n"
+"                                det samme skalletn\n"
+"  -s, --shell SKALL             bruk SKALL i stedet for standardskallet i "
+"passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: må kjøres fra en terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: feil %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Ukjent id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Du har ikke adgang til å su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Oppgi ditt eget passord)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorert)\n"
+
+# , c-format
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Autentisering mislyktes\n"
+
+# , c-format
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Du har ikke adgang til å su på den tiden\n"
+
+msgid "No shell\n"
+msgstr "Mangler skall\n"
+
+msgid "No password file"
+msgstr "Ingen passordfil."
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSTTY mislyktes"
+
+msgid "No password entry for 'root'"
+msgstr "Ingen oppføring for «root» i passordfila"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Bruk control-d for å fortsette med normal oppstart,\n"
+"(eller skriv inn root passordet for å starte maskinen i vedlikeholdsmodus):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Starter systemvedlikeholds-modus"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: klarer ikke å opprette ny «defaults»-fil\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: klarer ikke å åpne ny «defaults»-fil\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linje %d: chown mislyktes\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: gi nytt navn: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: gruppe «%s» er en NIS gruppe.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: for mange grupper oppgitt (maks %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [input]\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds              antall SHA-runder for  SHA*\n"
+"                                kryptoalgoritmene\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              antall SHA-runder for  SHA*\n"
+"                                kryptoalgoritmene\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              antall SHA-runder for  SHA*\n"
+"                                kryptoalgoritmene\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds              antall SHA-runder for  SHA*\n"
+"                                kryptoalgoritmene\n"
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds              antall SHA-runder for  SHA*\n"
+"                                kryptoalgoritmene\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -s, --sha-rounds              antall SHA-runder for  SHA*\n"
+"                                kryptoalgoritmene\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ugyldig basismappe «%s»\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ugyldig kommentar «%s»\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ugyldig hjemmemappe «%s»\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: shadow-passord kreves for -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: shadow-passord kreves for -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ugyldig felt «%s»\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: ugyldig skall «%s»\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: konflikt mellom valgene %s og %s\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: klarte ikke nullstille faillog-innslaget for UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: klarte ikke nullstille lastlog-innslaget for UID %lu: %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: kan ikke opprette mappa %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Oppretter postkasse-fil"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Gruppa «mail» finnes ikke. Oppretter brukerens postkassefil med rettighet "
+"0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Setter rettigheter for postkassefil"
+
+# , c-format
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: bruker «%s» finnes fra før\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: gruppa %s finnes - hvis du vil legge til denne brukeren til denne "
+"gruppa, bruk -g.\n"
+
+# , c-format
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: kan ikke opprette bruker\n"
+
+# , c-format
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu er ikke entydig\n"
+
+# , c-format
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: kan ikke opprette gruppa\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: advarsel: hjemmemappa finnes fra før.\n"
+"Kopierer ikke filer dit fra skel-mappa.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Bruk: userdel [valg] LOGIN\n"
+"\n"
+"Valg:\n"
+"  -f, --force                   slett filer, selv om det ikke er\n"
+"                                brukeren som eier dem\n"
+"  -h, --help                    vis denne meldingen og avslutt\n"
+"  -r, --remove                  slett hjemmemappa og postkassa\n"
+"\n"
+
+# , c-format
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: gruppa %s er en primærgruppe for en annen bruker og blir ikke fjernet.\n"
+
+# , c-format
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove %s: %s"
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: advarsel: kan ikke fjerne %s: %s"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ikke eid av %s, ikke fjernet\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: bruker %s er en NIS bruker\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: brukeren %s er pålogget\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: ugyldig hjemmemappe «%s»\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: fjerner ikke mappa %s (det ville fjerne hjemmemappa til bruker %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: feil ved fjerning av mappe %s\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: usermod [options] LOGIN\n"
+#| "\n"
+#| "Options:\n"
+#| "  -c, --comment COMMENT         new value of the GECOS field\n"
+#| "  -d, --home HOME_DIR           new home directory for the user account\n"
+#| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -g, --gid GROUP               force use GROUP as new primary group\n"
+#| "  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+#| "  -a, --append                  append the user to the supplemental "
+#| "GROUPS\n"
+#| "                                mentioned by the -G option without "
+#| "removing\n"
+#| "                                him/her from other groups\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -l, --login NEW_LOGIN         new value of the login name\n"
+#| "  -L, --lock                    lock the user account\n"
+#| "  -m, --move-home               move contents of the home directory to "
+#| "the\n"
+#| "                                new location (use only with -d)\n"
+#| "  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+#| "  -p, --password PASSWORD       use encrypted password for the new "
+#| "password\n"
+#| "  -s, --shell SHELL             new login shell for the user account\n"
+#| "  -u, --uid UID                 new UID for the user account\n"
+#| "  -U, --unlock                  unlock the user account\n"
+#| "\n"
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Bruk: usermod [valg] konto\n"
+"\n"
+"Valg:\n"
+"  -a, --append                     legg til bruker i tilleggsgruppene "
+"GRUPPER\n"
+"                                         nevnt i valget -G uten å fjerne ham/"
+"henne fra\n"
+"                                         andre grupper\n"
+"   -c, --comment KOMMENTAR       ny verdi i GECOS-feltet\n"
+"  -d, --home HJEMME             hjemmemappe for den nye kontoen\n"
+"  -e, --expiredate DATO         kontoen utgår på datoen DATE\n"
+"  -f, --inactive INAKTIV        passordet settes inaktivt etter utløp\n"
+"  -g, --gid GRUPPE              bruk GRUPPE som ny primærgruppe\n"
+"  -G, --groups GRUPPER      ny  liste over tilleggsgrupper\n"
+"  -h, --help                         vis denne hjelpeteksten og avslutt\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: om brukerens passord låses opp oppstår det en passordløs konto.\n"
+"For å låse opp denne brukerens passord bør du bruke usermod -p.\n"
+
+# , c-format
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: bruker «%sx finnes fra før i %s\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: ingen flagg oppgitt\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: shadow-passord kreves for -e og -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: valgene -L, -p og -U utelukker hverandre\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID «%lu» finnes fra før\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: mappa %s finnes\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: kan ikke opprette %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: kan ikke chown %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: advarsel: klarte ikke å fullstendig fjerne den gamle hjemmemappa %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: kunne ikke endre navn på mappa %s til %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: klarte ikke å kopiere lastlog-innslaget for bruker %lu til bruker %lu: %"
+"s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: klarte ikke å kopiere faillog-innslaget for bruker %lu til bruker %lu: %"
+"s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: advarsel: %s er ikke eid av %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "klarte ikke å endre eier av mailbox"
+
+msgid "failed to rename mailbox"
+msgstr "klarte ikke å endre navn på mailbox"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Du har endret %s.\n"
+"Det kan være du må endre %s for sammenhengen.\n"
+"Bruk kommandoen «%s» til dette.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Bruk: vipw [valg]\n"
+"\n"
+"Valg:\n"
+"  -g, --group                   rediger gruppedatabasen\n"
+"  -h, --help                    vis denne hjelpeteksten og avslutt\n"
+"  -p, --passwd                  rediger passwd-databasen\n"
+"  -q., --quiet                  ordknapp kjøremåte\n"
+"  -s, --shadow                  rediger shadow- eller gshadow-databasen\n"
+"\n"
+
+# , c-format
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: klarte ikke fjerne %s\n"
+
+# , c-format
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s er ikke endret\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Kunne ikke låse fil"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Kunne ikke låse fil"
+
+msgid "Couldn't make backup"
+msgstr "Kunne ikke lage backup"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: kan ikke gjenopprette %s: %s (dine endringer befinner seg i %s)\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: faillog [valg]\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ "  -a, --all                     vis faillog-oppføringer for alle brukere\n"
+#~ "  -h, --help                    vis denne hjelpeteksten og avslutt\n"
+#~ "  -l, --lock-time SEK           etter mislykket innlogging, lås kontoen\n"
+#~ "                                i SEK sekunder\n"
+#~ "  -m, --maximum MAX             sett største antall mislykte "
+#~ "innlogginger\n"
+#~ "                                til MAX\n"
+#~ "  -r, --reset                   nullstill tellerne for mislykte "
+#~ "innlogginger\n"
+#~ "  -t, --time DAGER              vis mislykte innlogginger nyere enn "
+#~ "DAGER\n"
+#~ "  -u, --user BRUKER             vis mislykte innlogginger eller styr\n"
+#~ "                                tellene og grenseverdiene (med -r, -m\n"
+#~ "                                eller -l) bare for bruker BRUKER\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: groupadd [valg] GRUPPE\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ "  -f, --force                   tving fram normal avslutning hvis den\n"
+#~ "                                oppgitte gruppa finnes fra før\n"
+#~ "  -g, --gid GID                 bruk GID for den nye gruppa\n"
+#~ "  -h, --help                    vis denne hjelpeteksten og avslutt\n"
+#~ "  -K, --key NØKKEL=VERDI        overstyrer standardverdier\n"
+#~ "                                fra /etc/login.defs\n"
+#~ "  -o, --non-unique              tillat å opprette en gruppe med "
+#~ "duplisert\n"
+#~ "                                GID\n"
+#~ "  -p, --password PASSORD   bruk kryptert passord for den nye gruppa\n"
+#~ "  -r, --system               opprett en systemkonto\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: groupmod [valg] gruppe\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ "  -g, --gid GID                 bruk GID for den nye gruppa\n"
+#~ "  -h, --help                    vis denne hjelpeteksten og avslutt\n"
+#~ "  -n, --new-name NY_GRUPPE  tving fram nytt navn NY_GRUPPE\n"
+#~ "                                   på GRUPPE\n"
+#~ "  -o, --non-unique              tillat å opprette en gruppe med "
+#~ "duplisert\n"
+#~ "                                GID\n"
+#~ "  -p, --password PASSORD  bruk kryptert passord som nytt passord\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~| "                                home directory\n"
+#~| "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~| "account\n"
+#~| "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~| "  -D, --defaults                print or save modified default useradd\n"
+#~| "                                configuration\n"
+#~| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~| "                                to INACTIVE\n"
+#~| "  -g, --gid GROUP               force use GROUP for the new user "
+#~| "account\n"
+#~| "  -G, --groups GROUPS           list of supplementary groups for the "
+#~| "new\n"
+#~| "                                user account\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~| "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~| "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~| "                                faillog databases\n"
+#~| "  -m, --create-home             create home directory for the new user\n"
+#~| "                                account\n"
+#~| "  -M, --no-create-home          do not create user's home directory\n"
+#~| "                                (overrides /etc/login.defs)\n"
+#~| "  -N, --no-user-group           do not create a group with the same name "
+#~| "as\n"
+#~| "                                the user\n"
+#~| "  -o, --non-unique              allow create user with duplicate\n"
+#~| "                                (non-unique) UID\n"
+#~| "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~| "                                account\n"
+#~| "  -r, --system                  create a system account\n"
+#~| "  -s, --shell SHELL             the login shell for the new user "
+#~| "account\n"
+#~| "  -u, --uid UID                 force use the UID for the new user "
+#~| "account\n"
+#~| "  -U, --user-group              create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Bruk: useradd [valg] KONTO\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ "  -b, --base-dir BASIS          basis-mappe for hjemmemappa til den nye\n"
+#~ "                                brukerkontoen\n"
+#~ "  -c, --comment KOMMENTAR       sett i GECOS-feltet for den nye\n"
+#~ "                                brukerkontoen\n"
+#~ "  -d, --home-dir HJEMME         hjemmemappe for den nye brukerkontoen\n"
+#~ "  -D, --defaults                skriv ut eller lagre endret "
+#~ "standardoppsett\n"
+#~ "                                for useradd\n"
+#~ "  -e, --expiredate DATO         angi at kontoen utgår på DATO\n"
+#~ "  -f, --inactive INAKTIV        sett passordet inaktivt etter utløp til "
+#~ "INAKTIV\n"
+#~ "  -g, --gid GRUPPE              angi GRUPPE for den nye brukerkontoen\n"
+#~ "  -h, --help                    vis denne hjelpeteksten og avslutt\n"
+#~ "  -k, --skel SKJELETT           oppgi en annen skel-mappe\n"
+#~ "  -K, --key NØKKEL=VERDI        overstyrer oppsett fra /etc/login.defs\n"
+#~ "  -m, --create-home             opprett hjemmemappe for den nye "
+#~ "brukerkontoen\n"
+#~ "  -M, --no-create-home        ikke opprett hjemmemappe for den nye \n"
+#~ "                                   brukeren (overstyrer /etc/login.defs)\n"
+#~ "  -N, --no-user-group          ikke opprett en gruppe med samme navn som\n"
+#~ "                                   brukeren  -o, --non-"
+#~ "unique              tillat å opprette bruker med duplisert UID\n"
+#~ "  -p, --password PASSORD        bruk dette krypterte passordet for\n"
+#~ "                                den nye brukerkontoen\n"
+#~ "  -s, --shell SKALL             innloggingsskall for den nye "
+#~ "brukerkontoen\n"
+#~ "  -u, --uid UID                 bruk UID for den nye brukerkontoen\n"
+#~ "  -U, --user-group           opprett en gruppe med samme navn som\n"
+#~ "                                    brukeren\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Bruk: %s [valg] [inndata]\n"
+#~ "\n"
+#~ "  -c, --crypt-method           krypteringsmetode (en av %s)\n"
+#~ "  -r, --system                  opprett systemkontoer\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Passordet vil utgå på dato."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: kan ikke låse passordfila\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: kan ikke åpne passordfila\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: kan ikke låse skyggepassordfila\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: kan ikke åpne skyggepassordfila\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: kan ikke gjenskrive skyggepassordfila\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: kan ikke gjenskrive passordfila\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: kan ikke oppdatere passordfila\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: kan ikke oppdatere skyggepassordfila\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tFullstendig navn: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tRomnummer: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tJobbtelefon: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tHjemtelefon: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Kan ikke låse passordfila; forsøk senere.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Kan ikke åpne passordfila.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s ikke funnet i /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Feil ved oppdatering av passord.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Kan ikke sende inn endringer til passordfila.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Kan ikke låse opp passordfila.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: klarer ikke å låse gruppefila\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: klarer ikke å åpne gruppefila\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: klarer ikke å låse gshadow-fila\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: kan ikke åpne shadow-fila\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: feil ved oppdatering av shadow-fila\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: feil ved oppdatering av gruppe-oppføring\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: linje %d: ukjent gruppe %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: linje %d: kan ikke oppdatere oppføring\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: kan ikke låse shadow-fila\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: feil ved oppdatering av shadow-fila\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: feil ved oppdatering av passordfila\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: linje %d: ukjent bruker %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: linje %d: kan ikke oppdatere passordlinja\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: ukjent bruker\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Ukjent bruker: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Bruk: %s [-r|-R] gruppe\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "      %s [-a bruker] gruppe\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "      %s [-d bruker] gruppe\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "      %s [-A bruker,...] [-M bruker,...] gruppe\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "      %s [-M bruker,...] gruppe\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: kan ikke låse\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: klarer ikke å låse shadow-fila\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: kan ikke åpne fila\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: klarer ikke å omskrive fila\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: klarer ikke å omskrive shadow-fila\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: kan ikke låse opp filen\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: klarer ikke å oppdatere oppføringen\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: klarer ikke å oppdatere oppføringen i shadow-fila\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "ukjent gruppe: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: kan ikke åpne fila\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: kan ikke åpne shadow-fila\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Hvem er du?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: ukjent medlem %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: feil ved oppretting av ny gruppeoppføring\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: klarer ikke å omskrive gruppefila\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: klarer ikke å omskrive shadow-fila\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: klarer ikke å låse gruppefila\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: klarer ikke å åpne gruppefila\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: klarer ikke å låse shadow-gruppefila\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: klarer ikke å åpne shadow-gruppefila\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u er ikke entydig\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: feil ved fjerning av gruppeoppføring\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: feil ved sletting av shadow-gruppeoppføring\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: kan ikke fjerne brukerens primærgruppe.\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: PAM autentisering mislyktes\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: klarer ikke å låse gruppefila\n"
+
+#, fuzzy
+#~ msgid "Unable to open group file\n"
+#~ msgstr "%s: klarer ikke å åpne gruppefila\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: kan ikke åpne gruppefila\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s ikke funnet i /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u er ikke en entydig GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s er ikke et entydig navn\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: kan ikke skrive passordfila på nytt\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: klarte ikke å låse passordfila\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: klarte ikke å åpne passordfila\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: kan ikke låse fila %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: kan ikke oppdatere shadow-oppføringen for %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: kan ikke oppdatere oppføringen for gruppa %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: kan ikke låse shadow-gruppefila\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: kan ikke åpne shadow-gruppefila\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: kan ikke fjerne shadow-gruppe %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: kan ikke oppdatere shadow-gruppefila\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: kan ikke oppdatere gruppefila\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: kan ikke slette shadow-gruppefila\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "ukjent UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "ukjent GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: gruppa %s finnes ikke\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: bruker %s finnes ikke\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: ugyldig brukernavn «%s»\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: kan ikke låse /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: kan ikke låse /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: kan ikke låse /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: kan ikke låse /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: kan ikke åpne filer\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: feil ved oppdatering av filer\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: linje %d: kan ikke finne bruker %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: klarer ikke å endre passord-oppføringen for %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: klarte ikke å låse passordfila\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: klarte ikke å åpne passordfila\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: klarte ikke å fjerne shadow-oppføring for %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: klarer ikke å oppdatere shadow-fila\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: klarer ikke å oppdatere passordfila\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: klarer ikke å oppdatere oppføring for bruker %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: kan ikke slette shadow-passordfila\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: ukjent GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: ukjent gruppe %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: slapp opp for minne i update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: kan ikke skrive passordfila på nytt\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: kan ikke skrive shadow-passordfila på nytt\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: klarte ikke å låse shadow-passordfila\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: klarte ikke å åpne shadow-passordfila\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: feil ved låsing av gruppefila\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: feil ved åpning av gruppefila\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: feil ved låsing av shadow-gruppefila\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: feil ved åpning av shadow-gruppefila\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: feil ved innlegging av ny passord-oppføring\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: feil ved innlegging av ny shadow passord-oppføring\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: advarsel: CREATE_HOME ikke støttet, bruk -m istedenfor.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: feil ved oppdatering av gruppe-oppføring\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: feil ved oppdatering av gruppe-oppføring\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: kan ikke åpne gruppefila\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: kan ikke åpne shadow-gruppefila\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: feil ved sletting av passord-oppføring\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: feil ved sletting av shadow passordoppføring\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: bruker %s finnes ikke\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: feil ved oppretting av ny gruppeoppføring\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu er ikke entydig\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: feil ved endring av passordoppføring\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: feil ved sletting av passordoppføring\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: feil ved sletting av shadow passord-oppføring\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: klarer ikke å få entydig GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " på «%.100s» fra «%.200s»"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " på «%.100s»"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: linje %d: kan ikke opprette UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: navn %s er ikke entydig\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bruk: chgpasswd [valg]\n"
+#~ "\n"
+#~ "Valg:\n"
+#~ "  -e, --encrypted\toppgitte passord er krypterte\n"
+#~ "  h, --help\t\tvis denne hjelpeteksten og avslutt\n"
+#~ "  -m, --md5\t\tbruk MD5-kryptering i stedet for DES når de oppgitte\n"
+#~ "\t\t\tpassordene ikke er krypterte\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Ingen passordfil.\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Beklager.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Passordet for %s kan ikke endres ennå.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Beklager."
diff --git a/po/ne.gmo b/po/ne.gmo
new file mode 100644 (file)
index 0000000..b02ac3b
Binary files /dev/null and b/po/ne.gmo differ
diff --git a/po/ne.po b/po/ne.po
new file mode 100644 (file)
index 0000000..e018841
--- /dev/null
+++ b/po/ne.po
@@ -0,0 +1,2592 @@
+# translation of shadow_po.po to Nepali
+# translation of shadow_po.po to Nepali
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Shiva Pokharel <pokharelshiva@hotmail.com>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.17\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2006-06-16 14:30+0545\n"
+"Last-Translator: Shiva Pokharel <pokharelshiva@hotmail.com>\n"
+"Language-Team: Nepali <info@mpp.org.np>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2;plural=(n!=1)\n"
+"X-Generator: KBabel 1.10.2\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "कनफिगरेसन सूचनाको लागि खाली ठाऊँ बाँड्न सकिदैन ।\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "कन्फिगरेसन त्रुटि - अज्ञात वस्तु '%s' (प्रशासकलाई सूचना गर्नुहोस)\n"
+
+msgid "Password: "
+msgstr "पासवर्ड: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "'%s' को पासवर्ड: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "चेतावनी: अज्ञात समूह %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "चेतावनी: अति धेरै समूहहरू\n"
+
+msgid "Your password has expired."
+msgstr "तपाईँको पासवर्डको म्याद समाप्त भएको छ।"
+
+msgid "Your password is inactive."
+msgstr "तपाईँको पासवर्ड निष्क्रिय छ।"
+
+msgid "Your login has expired."
+msgstr "तपाईँको लगइनको म्याद समाप्त भएको छ।"
+
+msgid "  Contact the system administrator."
+msgstr "  प्रणाली प्रशासक संग सम्पर्क गर्नुहोस् ।"
+
+msgid "  Choose a new password."
+msgstr "  नयाँ पासवर्ड रोज्नुहोस् ।"
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "तपाईँको पासवर्डको म्याद %ld दिनमा समाप्त हुन्छ ।\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "तपाईँको पासवर्डको म्याद भोली समाप्त हुनेछ ।"
+
+msgid "Your password will expire today."
+msgstr "तपाईँको पासवर्डको म्याद आज समाप्त हुनेछ ।"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "tty %s लाई परिवर्तन गर्न असक्षम भयो"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: अति लामो फाँट\n"
+
+msgid "Environment overflow\n"
+msgstr "परिवेशको अतिप्रवाह\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "तपाईँले $%s परिवर्तन गर्न सक्नुहुन्न\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d अन्तिम लगइन देखिअसफल भयो ।\n"
+"अन्तिम %s मा %s थियो ।\n"
+msgstr[1] ""
+"%d अन्तिम लगइन देखिअसफल भयो ।\n"
+"अन्तिम %s मा %s थियो ।\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: अद्वितिय UID प्राप्त गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: अद्वितिय GID प्राप्त गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: अद्वितिय UID प्राप्त गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: अद्वितिय UID प्राप्त गर्न सकिएन\n"
+
+msgid "Too many logins.\n"
+msgstr "अति धेरै लगइनहरू ।\n"
+
+msgid "You have new mail."
+msgstr "तपाईँसँग नयाँ मेल छ।"
+
+msgid "No mail."
+msgstr "मेल छैन।"
+
+msgid "You have mail."
+msgstr "तपाईँको मेल छ।"
+
+msgid "no change"
+msgstr "परिवर्तन छैन"
+
+msgid "a palindrome"
+msgstr "एउटा श्लोक"
+
+msgid "case changes only"
+msgstr "केस परिवर्तनहरू मात्र"
+
+msgid "too similar"
+msgstr "अति मिल्दो"
+
+msgid "too simple"
+msgstr "अति सजिलो"
+
+msgid "rotated"
+msgstr "घुमिरहेको"
+
+msgid "too short"
+msgstr "अति छोटो"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "खराब पासवर्ड: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "पासवर्ड: pam_start() असफल भयो, त्रुटि %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "पासवर्ड: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "पासवर्ड परिवर्तन भयो ।"
+
+msgid "passwd: password updated successfully\n"
+msgstr "पासवर्ड: पासवर्ड सफलतापूर्वक अद्यावधिक भयो\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr " %s को लागि गलत पासवर्ड ।\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "'%s' मा सि डि गर्न असफल\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "डाइरेक्ट्री होइन, HOME=/ संगै लगइन भइरहेको"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s कार्यान्वयन गर्न सकिएन"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "अवैध मूल डाइरेकट्री '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "'%s' मा मूल डाइरेकट्री परिवर्तन गर्न सकिदैन\n"
+
+msgid "Unable to determine your tty name."
+msgstr "तपाईँको tty नाम निर्धारण गर्न सकिएन।"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: स्मृति भन्दा बाहिर\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) असफल भयो\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "होइन\n"
+
+#, fuzzy
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"उपयोग:प्रयोगकर्ता [विकल्पहरू] परिवर्तन गर्नुहोस्\n"
+"\n"
+" विकल्पहरू:\n"
+"  -d, --अन्तिम दिन LAST_DAY\t ले LAST_DAY मा परिवर्तन भएको अन्तिम पासवर्ड सेट\n"
+"\t\t\t\tगर्दछ\n"
+"  -E, --समाप्त मिति EXPIRE_DATE\t ले EXPIRE_DATE मा खाता समाप्त मिति सेट गर्दछ\n"
+"  -h, --help\t\t\t ले यो मद्दत संदेशलाई प्रदर्शित र बन्द गर्दछ\n"
+"  -I, --निष्क्रिय INACTIVE\t ले म्याद समाप्त भएपछि निष्क्रिय पासवर्ड सेट गर्दछ\n"
+"\t\t\t\tto INACTIVE\n"
+"  -l, --सूचि\t\t\t ले खाता अवधि सूचना देखाउँछ\n"
+"  -m, --न्युनतम दिन MIN_DAYS\tपासवर्ड अघि दिनहरुको न्युनतम संख्या सेट गर्दछ\n"
+"\t\t\t\tchange to MIN_DAYS\n"
+"  -M, --अधिकमत दिन MAX_DAYS\tपासवर्ड अघि दिनहरुको न्युनतम संख्या सेट गर्दछ\n"
+"\t\t\t\tchange to MAX_DAYS\n"
+"  -W, --चेतावनी दिन WARN_DAYS\t ले WARN_DAYS मा समाप्त भएको चेतावनी दिनहरू सेट \n"
+"\t\t\t\tगर्दछ\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "नयाँ मान प्रविष्टि गर्नुहोस्, वा पूर्वनिर्धारितको लागि ENTER थिच्नुहोस्"
+
+msgid "Minimum Password Age"
+msgstr "न्यूनतम पासवर्ड अवधि"
+
+msgid "Maximum Password Age"
+msgstr "अधिकतम पासवर्ड अवधि"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "अन्तिम पासवर्ड परिवर्तन गर्नुहोस् (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "पासवर्ड समाप्ति चेतावनी"
+
+msgid "Password Inactive"
+msgstr "पासवर्ड निष्क्रिय"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "लेखा समाप्ति मिति (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "अन्तिम पासवर्ड परिवर्तन भयो\t\t\t\t\t: "
+
+msgid "never"
+msgstr "कहिल्यै पनि"
+
+msgid "password must be changed"
+msgstr "पासवर्ड परिवर्तन हुनुपर्छ"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "पासवर्ड समाप्त हुन्छ\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "पासवर्ड निष्क्रिय पार्नुहोस्\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "लेखा समाप्त हुन्छ\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "पासवर्ड परिवर्तन बीचको दिनहरुको न्यूनतम संख्या\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "पासवर्ड परिवर्तन बीचको दिनहरुको अधिक्तम संख्या\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "पासवर्ड समाप्त हुनु अगाडि चेतावनीको दिनहरुको संख्या\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: अवैध मिति '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: अवैध संख्यात्मक तर्क '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: अन्य झण्डाहरू संग \"l\" समावेश भएन\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: अनुमति अस्वीकार गरियो ।\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: तपाईँको प्रयोगकर्ता नाम निर्धारण गर्न सकिएन ।\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM आधिकरण असफल भयो\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: फाइलहरू ताल्चा मार्न सकिएन, पछि फेरी प्रयास गर्नुहोस्\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: फाइल %s खोल्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: फोर्क गर्दा असफल: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: स्याडो पासवर्ड फाइल प्रस्तुत भएको छैन\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s का लागि अवधि सूचना परिवर्तन गरिदैछ\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: त्रुटि परिवर्तन फाँट\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"उपयोग: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "उपयोग: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+
+msgid "Full Name"
+msgstr "पुरा नाम"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "कोठा नम्बर"
+
+msgid "Work Phone"
+msgstr "कार्य फोन"
+
+msgid "Home Phone"
+msgstr "गृह फोन"
+
+msgid "Other"
+msgstr "अन्य"
+
+msgid "Cannot change ID to root.\n"
+msgstr "ID लाई मूलमा परिवर्तन गर्न सकिदैन ।\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: अवैध नाम: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: अवैध कोठा नम्बर: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: अवैध कार्य फोन: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: अवैध गृह फोन: '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' ले गैरकानूनी क्यारेक्टरहरू समाविष्ट गर्दछ\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' ले गैरकानूनी क्यारेक्टरहरू समाविष्ट गर्दछ\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: NIS ग्राहकमा प्रयोगकर्ता '%s' परिवर्तन गर्न सकिदैन ।\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' यो ग्राहकको लागि NIS मास्टर हो ।\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr " %s को लागि प्रयोगकर्ता सूचना परिवर्तन गरिदैछ\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: अति लामो फाँट\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"उपयोग: पासवर्ड परिवर्तन गर्नुहोस् [options]\n"
+"\n"
+"विकल्पहरू:\n"
+"  -e, --गुप्तिकृत\tआपूर्ति भएका पासवर्डहरू गुप्तिकृत छन\n"
+"  -h, --मद्दत\t\tले यो मद्दत संदेशलाई प्रदर्शित र बन्द गर्छ\n"
+"  -m, --md5\t\tले DES को सट्टामा MD5 प्रयोग गर्छ जब आपूर्ति भएको\n"
+"\t\t\tपासवर्डहरू गुप्तिकृत भएको हुदैन\n"
+"\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: -a फ्ल्याग -G फ्ल्याग संग मात्र अनुमति छ\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: रेखा %d: अति लामो रेखा\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: रेखा %d: नयाँ पासवर्ड हराइरहेको छ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: समूह %s अवस्थित छैन\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: रेखा %d: प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: त्रुटि पत्ता लाग्यो, परिवर्तनहरू उपेक्षा गरियो\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, fuzzy
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"उपयोग: userdel [options] LOGIN\n"
+"\n"
+"विकल्पहरू:\n"
+"  -f, --force\t\t\tप्रयोगकर्ताले प्राप्त नगरेता पनि, फाइलहरुको हटाईमा जोड गर्दछ\n"
+"  -h, --help\t\t\tयो मद्दत संदेशलाई प्रदर्शन गर्छ र बनद गर्दछ\n"
+"  -r, --remove\t\t\tगृह डाइरेक्ट्री र मेल स्पूललाई हटाउँछ \n"
+"\n"
+
+msgid "Login Shell"
+msgstr "शेल लगइन"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "तपाईँ यस को लागि शेल परिवर्तन गर्न सक्नुहुन्न %s ।\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr " %s को लागि शेलको लगइन परिवर्तन गरिदैछ\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: अवैध प्रविष्टि: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s अवैध शेल हो ।\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "उपयोग: अवधि {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "सबैभन्दा पछि                  असफल भएको                           लगइन\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds left]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lock]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "अज्ञात प्रयोगकर्ता: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: फाइल %s खोल्न सकिएन\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "%s को लागि पासवर्ड परिवर्तन गर्न सकिदैन ।\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: स्याडो समूह पासवर्डहरुलाई -A को आवश्यक छ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: समूह %s अवस्थित छैन\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: फोर्क गर्दा असफल: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "समूह %s को लागि पासवर्ड परिवर्तन गरिदैछ\n"
+
+msgid "New Password: "
+msgstr "नयाँ पासवर्ड: "
+
+msgid "Re-enter new password: "
+msgstr "नयाँ पासवर्ड पुन:प्रविष्ट गर्नुहोस्: "
+
+msgid "They don't match; try again"
+msgstr "तिनीहरू मेल खाँदैनन्, फेरी प्रयास गर्नुहोस्"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: पछि फेरी प्रयास गर्नुहोस्\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "समूह %s मा प्रयोगकर्ता %s थप गरिदैछ\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "समूह %s बाट प्रयोगकर्ता %s हटाइदैछ\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: tty होइन\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s वैध समूह नाम होइन\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "अवैध समूह नाम '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K लाई KEY=VALUE को आवश्यक पर्दछ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: समूह %s अवस्थित छ\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr "उपयोग: groupdel समूह नाम\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: डाइरेक्ट्री %s लाई %s मा पुन:नामकरण गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: NIS ग्राहकमा प्रयोगकर्ता '%s' परिवर्तन गर्न सकिदैन ।\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: समूह %s अवस्थित छैन\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: समूह '%s' NIS समूह हो ।\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s NIS मास्टर हो\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: प्रयोगकर्ता %s NIS प्रयोगकर्ता हो\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: update_group मा स्मृति भन्दा बाहिर\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "अवैध समूह नाम '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: समूह %s NIS समूह हो\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: अज्ञात प्रयोगकर्ता %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "उपयोग: %s [-r] [-s] [group [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "उपयोग: %s [-r] [-s] [group]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s र -r मिल्दोजुल्दो छैन\n"
+
+msgid "invalid group file entry"
+msgstr "अवैध समूह फाइल प्रविष्टि"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "लाइन '%s' मेट्नुहुन्छ ? "
+
+msgid "duplicate group entry"
+msgstr "नक्कली समूह प्रविष्टि"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "अवैध समूह नाम '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "अवैध समूह नाम '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "समूह %s: प्रयोगकर्ता छैन %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "सदस्य '%s' मेट्नुहुन्छ ? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "यो %s मा समूह फाइल प्रविष्टि मेल खाएको छैन\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "यस %s मा '%s' समूह थप्नुहुन्छ ?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "अवैध स्याडो समूह फाइल प्रविष्टि"
+
+msgid "duplicate shadow group entry"
+msgstr "नक्कली स्याडो समूह प्रविष्टि"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "स्याडो समूह %s: प्रशासनिक प्रयोगकर्ता छैन %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "प्रशासनिक सदस्य '%s' मेट्नुहुन्छ ? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "स्याडो समूह %s: प्रयोगकर्ता छैन %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: फाइलहरू अद्यावधिक हुनुपर्छ\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: कुनै परिवर्तनहरू छैन\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "उपयोग: groupdel समूह नाम\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "उपयोग: groupdel समूह नाम\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: फाइल %s अद्यावधिक गर्न सकिएन\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "उपयोग: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "उपयोग: id\n"
+
+msgid " groups="
+msgstr " समूहहरू="
+
+#, fuzzy
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"उपयोग: lastlog [options]\n"
+"\n"
+"विकल्पहरू:\n"
+"  -b, --DAYS अगाडि\t DAYS भन्दा पुरानो अन्तिम लग रेकर्ड मुद्रण गर्दछ\n"
+"  -h, --मद्दत\t\tयो मद्दत संदेशलाई प्रदर्शन गर्छ र बन्द गर्दछ\n"
+"  -t, --समय DAYS\t DAYS भन्दा धेरै नविन अन्तिम लग रेकर्डहरू मात्र मुद्रण गर्दछ\n"
+"  -u, --प्रयोगकर्ता LOGIN\t निर्दिष्ट गरिएको LOGIN संगै अन्तिम लग रेकर्डहरू मुद्रण गर्दछ\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "सबै भन्दा पछिल्लो        बाट                पोर्ट        प्रयोगकर्ता नाम"
+
+msgid "Username                Port     Latest"
+msgstr "सबैभन्दा पछिल्लो              पोर्ट            प्रयोगकर्ता नाम"
+
+msgid "**Never logged in**"
+msgstr "**Never logged in**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "अन्तिम लग: अनपेक्षित तर्क: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "उपयोग: %s [-p] [name]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h host] [-f name]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "अवैध लगइन समय"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"रुटिन संभारको लागि प्रणाली बन्द गरियो"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[बाइपास जडान विच्छेदन भयो --मूल लगइनलाई अनुमति छ । ]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"%d सेकेण्ड पछि लगइन समय समाप्त भयो ।\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"utmp प्रविष्टि भएन । तपाईँले \"login\" गर्दा ज्यादै न्यून तह \"sh\" बाट कार्यन्वयन "
+"गर्नुपर्छ"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "लगइन: PAM असफल भयो, परित्याग गरिदै: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s लगइन: "
+
+msgid "login: "
+msgstr "लगइन: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "बढेको प्रयासहरको अधिक्तम संख्या (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "लगइन: PAM द्वारा अनुरोध गरिएको परित्याग\n"
+
+msgid "Login incorrect"
+msgstr "लगइन गलत छ"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s लगइन: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: फोर्क गर्दा असफल: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "चेतावनी: अस्थायी लगआउट पछि लगइन पुन: सक्षम गर्नुहोस् ।"
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "अन्तिम लगइन: %s मा %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "अन्तिम लगइन: %s मा %.19s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " %.*s बाट"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"लगइन समय बढ्यो\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "उपयोग: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "उपयोग: newgrp [-] [group]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "उपयोग: sg group [[-c] आदेश]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "पुरानो पासवर्ड: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: फोर्क गर्दा असफल: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+msgid "too many groups\n"
+msgstr "अति धेरै समूहहरू\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: समूह %s अवस्थित छैन\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: अवैध प्रयोगकर्ता नाम '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: अवैध प्रयोगकर्ता नाम '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: रेखा %d: अवैध रेखा\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: प्रयोगकर्ता %s का लागि प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: रेखा %d: GID सिर्जना गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: रेखा %d: GID सिर्जना गर्न सकिएन\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: रेखा %d: पासवर्ड अद्यावधिक गर्न सकिएन\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: रेखा %d: mkdir असफल भयो\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: रेखा %d: chown असफल भयो\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: रेखा %d: प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#, fuzzy
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"उपयोग: पासवर्ड [विकल्पहरू] [लगइन]\n"
+"\n"
+"विकल्पहरू:\n"
+"  -a, --सबै\t\t\t सबै खातामा पासवर्ड स्थिति प्रतिवेदन गर्दछ\n"
+"  -d, --मेट्नुहोस्\t\t\t नामकरण गरिएको खाताको लागि पासवर्ड मेट्दछ\n"
+"  -e, --समाप्त हुनु\t\t\t नामकरण गरिएको खाताको लागि पासवर्ड समाप्त गर्न जोड गर्दछ\n"
+"  -h, --मद्दत\t\t\t यो मद्दत संदेशलाई प्रदर्शन गर्दछ र बन्द गर्दछ\n"
+"  -k, --टोकनहरू राख्नुहोस्\t\tयदि समाप्त भएमा मात्र पासवर्ड परिवर्तन गर्नुहोस्\n"
+"  -i, --निस्क्रिय INACTIVE\t समाप्ति पछ निस्क्रियमा निस्क्रिय पासवर्ड सेट गर्नुहोस्\n"
+"  -l, --ताल्चा मार्नुहोस्\t\t\t नामकरण गरिएको खाता ताल्चा मार्नुहोस्\n"
+"  -n, --न्युनतम दिनहरू MIN_DAYS\t ले MIN_DAYS मा पासवर्ड\n"
+"\t\t\t\t परिवर्तन गर्नु अघि दिनहरुको न्युनतम नम्बरलाई सेट गर्दछ\n"
+"  -q, --अन्त्य गर्नुहोस्\t\t\tअन्त्य मोड\n"
+"  -r, --रेपोजिटरी REPOSITORY\t रेपोजिटरीमा पासवर्ड परिवर्तन गर्नुहोस् REPOSITORY \n"
+"  -S, --वस्तुस्थिति\t\t\t नामकरण गरिएको खातामा पासवर्ड वस्तुस्थिति प्रतिवेदन गर्दछ\n"
+"  -u, --अनलग गर्नुहोस्\t\t\t नामकरण गरिएको खाता अनलग गर्नुहोस्\n"
+"  -w, --चेतावनी दिनहरू WARN_DAYS\t WARN_DAYS मा समाप्त भएको चेतावनी दिनहरू सेट\n"
+"\t\t\t\tगर्नुहोस्\n"
+"  -x, --अधिक्तम दिनहरू MAX_DAYS\t ले MAX_DAYS मा\n"
+"\t\t\t\tपासवरड परिवर्तन गर्नु अघि दिनहरुको अधिक्तम नम्बरलाई सेट गर्दछ\n"
+"\n"
+
+msgid "Old password: "
+msgstr "पुरानो पासवर्ड: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"नयाँ पासवर्ड प्रविष्ट गर्नुहोस् (%d को न्युनतम, %d को अधिक्तम क्यारेक्टरहरू)\n"
+"कृपया सानो र ठूलो अक्षरहरू र नम्बरहरुको मिलान प्रयोग गर्नुहोस् ।\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"नयाँ पासवर्ड प्रविष्ट गर्नुहोस् (%d को न्युनतम, %d को अधिक्तम क्यारेक्टरहरू)\n"
+"कृपया सानो र ठूलो अक्षरहरू र नम्बरहरुको मिलान प्रयोग गर्नुहोस् ।\n"
+
+msgid "New password: "
+msgstr "नयाँ पासवर्ड : "
+
+msgid "Try again."
+msgstr "फेरी प्रयास गर्नुहोस् ।"
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"चेतावनी: कम्जोर पासवर्ड (जे भए पनि यसलाई प्रयोग गर्न फेरी यसलाई प्रविष्ट गर्नुहोस्) ।"
+
+msgid "They don't match; try again.\n"
+msgstr "तिनीहरू मेल खाँदैनन्; फेरी प्रयास गर्नुहोस् ।\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s को लागि पासवर्ड परिवर्तन गर्न सकिदैन ।\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s को लागि पासवर्ड परिवर्तन गर्न सकिदैन ।\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: रेपोजिटरी %s समर्थित छैन\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: यस %s को लागि तपाईवले पासवर्ड सूचना दृश्य गर्न वा परिमार्जन गर्न सक्नुहुन्न ।\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s को लागि पासवर्ड परिवर्तन गरिदैछ\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s को लागि पासवर्ड परिवर्तन हुन सकिदैन ।\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "पासवर्ड परिवर्तन भयो ।"
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "पासवर्ड समाप्ति चेतावनी"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "उपयोग: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s र -r मिल्दोजुल्दो छैन\n"
+
+msgid "invalid password file entry"
+msgstr "अवैध पासवर्ड फाइल प्रविष्टि"
+
+msgid "duplicate password entry"
+msgstr "नक्कली पासवर्ड प्रविष्टि"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "अवैध प्रयोगकर्ता नाम '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "अवैध प्रयोगकर्ता नाम '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "प्रयोगकर्ता %s: समूह छैन %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "प्रयोगकर्ता %s: डाइरेक्ट्री %s अवस्थित छैन\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "प्रयोगकर्ता %s: कार्यक्रम %s अवस्थित छैन\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "यो %s मा मेल खाने पासवर्ड फाइल प्रविष्टि छैन\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "'%s' मा %s प्रयोगकर्ता थप्नुहुन्छ ? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "अवैध स्याडो पासवर्ड फाइल प्रविष्टि"
+
+msgid "duplicate shadow password entry"
+msgstr "नक्कलि स्याडो पासवर्ड प्रविष्टि"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "प्रयोगकर्ता %s: अन्तिम पासवर्ड भविष्यमा परिवर्तन हुनेछ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: फाइल %s खोल्न सकिएन\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "उपयोग: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "उपयोग: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "su बाट त्यो खातामा पहुँच गर्न अस्वीकार गरियो ।\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "पासवर्ड प्रमाणीकरण बाइपास गरियो ।\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr " कृपया प्रमाणीकरणको रुपमा तपाईँको आफ्नो पासवर्ड प्रविष्ट गर्नुहोस् ।\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"उपयोग: su [options] [login]\n"
+"\n"
+"विकल्पहरू:\n"
+"  -c, --आदेश COMMAND\t\t शेल आह्वान गर्न आदेश पास गर्नुहोस्\n"
+"  -h, --मद्दत\t\t\t ले यो मद्दत संदेशलाई प्रदर्शन गर्दछ र बन्द गर्दछ\n"
+"  -, -l, --लगइन\t\tशेललाई एउटा लगइन शेल बनाउँछ \n"
+"  -m, -p,\n"
+"  --preserve-environment\t ले परिवेश चलहरू पुन: सेट गर्दैन\n"
+" र उही शेल\t\t\t\t राख्दछ\n"
+"  -s, --शेल SHELL\t\t पूर्वनिर्धारित पासवर्डको सट्टामा SHELL प्रयोग गर्दछ\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: टर्मिनलबाट चल्नुपर्छ\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: त्रुटि %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "अज्ञात id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "तपाईँ su %s मा प्रमाणिकरण हुनुहुन्न\n"
+
+msgid "(Enter your own password)"
+msgstr "(तपाईँको आफ्नै पासवर्ड प्रविष्ट गर्नुहोस्)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(उपेक्षा गरियो)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM आधिकरण असफल भयो\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "तपाईँ su %s मा प्रमाणिकरण हुनुहुन्न\n"
+
+msgid "No shell\n"
+msgstr "शेल होइन\n"
+
+msgid "No password file"
+msgstr "पासवर्ड फाइल होइन"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "मूलको लागि पासवर्ड प्रविष्टि छैन'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"सामन्य सुरुवात संगै प्रक्रिया गर्न control-d टाइप गर्नुहोस्,\n"
+"(वा प्रणाली संभारको लागि मूल पासवर्ड दिनुहोस्):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "प्रणाली संभार मोड प्रविष्टि गरिदैछ"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: नयाँ पूर्वनिर्धारित फाइल सिर्जना गर्न सकिएन\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: नयाँ पूर्वनिर्धारित फाइल खोल्न सकिएन\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: रेखा %d: chown असफल भयो\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: पुन:नामकरण गर्नुहोस्: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: समूह '%s' NIS समूह हो ।\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: अति धेरै समूहरू निर्दिष्ट गरिएको छ (max %d) ।\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "उपयोग: %s [आगत]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: अवैध डाइरेक्ट्री '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: अवैध टिप्पणी '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: अवैध गृह डाइरेक्ट्री '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: स्याडो पासवर्डहरुको लागि -e को आवश्यक पर्दछ\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: स्याडो पासवर्डहरुको लागि -f को आवश्यक पर्दछ\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: अवैध फाँट '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: अवैध शेल '%s'\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: डाइरेकट्री सिर्जना गर्न सकिएन %s\n"
+
+msgid "Creating mailbox file"
+msgstr "मेल बाकस फाइल सिर्जना गर्दै"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr "समूह मेल फेला परेन । ०६०० मोड द्वारा प्रयोगकर्ता मेल बाकस फाइल सिर्जना गर्दैछ ।\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "मेल बाकस फाइल अनुमतिहरू मिलाउदै"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छ\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: समूह %s अवस्थित छ - यदि तपाईँ यो प्रयोगकर्तालाई त्यो समूहमा थप्न चाहनुहुन्छ भने, -g "
+"प्रयोग गर्नुहोस् ।\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: यो %s सिर्जना गर्न सकिदैन\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u अद्वितिय होइन\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: यो %s सिर्जना गर्न सकिदैन\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: चेतावनी: गृह डाइरेक्ट्री पहिल्यै अवस्थित छ ।\n"
+"यसमा स्केल डाइरेक्ट्रीबाट कुनै फाइल प्रतिलिपी भएको छैन ।\n"
+
+#, fuzzy
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"उपयोग: userdel [options] LOGIN\n"
+"\n"
+"विकल्पहरू:\n"
+"  -f, --force\t\t\tप्रयोगकर्ताले प्राप्त नगरेता पनि, फाइलहरुको हटाईमा जोड गर्दछ\n"
+"  -h, --help\t\t\tयो मद्दत संदेशलाई प्रदर्शन गर्छ र बनद गर्दछ\n"
+"  -r, --remove\t\t\tगृह डाइरेक्ट्री र मेल स्पूललाई हटाउँछ \n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr "%s: समूह %s हटाउन सकिदैन जुन अर्को प्रयोगकर्ताको लागि प्राथमिक समूह हो ।\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: चेतावनी: हट्न सक्दैन "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s चाँहि %s को स्वामित्वमा छैन, हटिरहेको छैन\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: प्रयोगकर्ता %s NIS प्रयोगकर्ता हो\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: प्रयोगकर्ता %s हालै लग गरियो\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: अवैध गृह डाइरेक्ट्री '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: हट्ने डाइरेक्ट्री होइन %s (प्रयोगकर्ता %s को गृह हटाउँछ)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: डाइरेक्ट्री हटाउँदा त्रुटि %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"उपयोगिता: usermod [options] LOGIN\n"
+"\n"
+"विकल्पहरू:\n"
+"  -a, --append GROUP\t\tबाँकि GROUP मा प्रयोगकर्ता थप गर्नुहोस् \n"
+"  -c, --comment COMMENT\t\t GECOS फाँटको नयाँ मान\n"
+"  -d, --home HOME_DIR\t\tप्रयोगकर्ता खाताका लागि नयाँ गृह डाइरेक्टरी\n"
+"  -e, --expiredate EXPIRE_DATE\tखाता म्याद समाप्ति EXPIRE_DATE मा सेट गर्नुहोस्\n"
+"  -f, --inactive INACTIVE\tम्याद समाप्ति पछि पासवर्ड निस्क्रिय पार्नुहोस्\n"
+"\t\t\t\tto INACTIVE\n"
+"  -g, --gid GROUP\t\t GROUP लाई नयाँ प्राथमिक समूहको रुपमा प्रयोग गर्न दवाद "
+"दिनुहोस्\n"
+"  -G, --groups GROUPS\t\tबाँकि GROUPS को नयाँ सूची\n"
+"  -h, --help\t\t\tयो मद्दत सन्देश प्रदर्शन गर्नुहोस् र निस्कनुहोस्\n"
+"  -l, --login NEW_LOGIN\t\tलगइन नामको नयाँ मान\n"
+"  -L, --lock\t\t\tप्रयोगकरता खाता ताल्चा मार्नुहोस्\n"
+"  -m, --move-home\t\tगृह डाइरेक्टरिको सामग्रिहरू नयाँ स्थानमा सार्नुहोस् \n"
+"\t\t\t\tlocation ( -d संग मात्रै प्रयोग गर्नुहोस्)\n"
+"  -o, --non-unique\t\tनक्कली प्रयोग गर्न अनुमति दिनुहोस् (अमौलिक) UID\n"
+"  -p, --password PASSWORD\tनयाँ पासवर्डका लागि गुप्तिकृत प्रयोग गर्नुहोस्\n"
+"  -s, --shell SHELL\t\tप्रयोगकर्ता खाताका लागि नयाँ लगइन शेल\n"
+"  -u, --uid UID\t\t\tप्रयोगकर्ता खाताका लागि नयाँ UID\n"
+"  -U, --unlock\t\t\tप्रयोगकर्ता खाताको ताल्चा खोल्नुहोस्\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: प्रयोगकर्ता %s अवस्थित छ\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: झण्डाहरू दिएको छैन\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e र -f को लागि स्याडो पासवर्डहरुको आवश्यक छ\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: डाइरेक्ट्री %s अवस्थित छ\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: यो %s सिर्जना गर्न सकिदैन\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: स्वामित्व परिवर्तन गर्न सकिदैन %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: चेतावनी: पुरानो गृह डाइरेक्ट्री पूर्णरुपले हटाउन असफल भयो %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: डाइरेक्ट्री %s लाई %s मा पुन:नामकरण गर्न सकिदैन\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: चेतावनी: %s चाँहि %s को स्वामित्वमा छैन\n"
+
+msgid "failed to change mailbox owner"
+msgstr "मेलबक्स प्रापक परिवर्तन गर्न असफल भयो"
+
+msgid "failed to rename mailbox"
+msgstr "मेल बक्सलाई पुन:नामकरण गर्न असफल भयो"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"उपयोग: vipw [options]\n"
+"\n"
+"विकल्पहरू:\n"
+"  -g, --group\t\t\tसमूह डेटाबेस सम्पादन गर्दछ\n"
+"  -h, --help\t\t\tयो मद्दत संदेशलाई प्रदर्शन गर्छ र बन्द गर्दछ\n"
+"  -p, --passwd\t\t\tपासवर्ड डेटाबेस सम्पादन गर्दछ\n"
+"  -q, --quiet \t\t\tअन्त्य मोड\n"
+"  -s, --shadow\t\t\t स्याडो वा जि स्याडो डेटाबेस सम्पादन गर्दछ\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: विशेषधिकारहरू छोड्न असफल भयो (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s परिवर्तन हुदैन\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "फाइल ताल्चा मार्न सकिदैन"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "फाइल ताल्चा मार्न सकिदैन"
+
+msgid "Couldn't make backup"
+msgstr "जगेडा बनाउँन सकिदैन"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: पुन:भण्डारण गर्न सकिदैन %s: %s (तपाईँको परिवर्तनहरू %s मा छ)\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: असफल लग [options]\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ "  -a, --सबै\t\t\t ले सबै प्रयोगकर्ताहरुको लागि असफल लगको रेकर्डहरू प्रदर्शन गर्दछ\n"
+#~ "  -h, --मद्दत\t\t\t ले यो मद्दत संदेशलाई प्रदर्शन गर्छ र बन्द गर्दछ\n"
+#~ "  -l, --ताल्चा मार्ने समय SEC\t\t ले SEC सेकेण्डमा लगइन लग खाता असफल भएपछि \n"
+#~ "  -m, --अधिक्तम MAX\t\t ले अधिक्तम असफल लगइन काउन्टरहरू MAX मा सेट गर्दछ\n"
+#~ "  -r, --पुन:सेट गर्नु\t\t\t ले असफल लगइनहरुको काउन्टरलाई पुन:सेट गर्दछ\n"
+#~ "  -t, --समय DAYS\t\t ले समयको भन्दा धेरै नयाँ असफल लग रेकर्डहरू प्रदर्शन गर्दछ\n"
+#~ "  -u, --प्रयोगकर्ता LOGIN\t\t ले असफल लगइन प्रदर्शन गर्छ वा असफल काउन्टरहरू\n"
+#~ "\t\t\t\tर सीमाहरू (यदि -r, -m वा -l विकल्पहरू संगै प्रयोग भयो भने) मात्र संभार "
+#~ "गर्दछ\n"
+#~ "\t\t\t\tप्रयोगकर्ताको लागि LOGIN संगै \n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: groupadd [विकल्प] समूह\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ "  -f, --जोड दिनुहोस्\t\t यदि निर्दिष्ट गरिएको छ भने सफल स्थिति सहित जोड दिन "
+#~ "बन्द \n"
+#~ "\t\t\t\tहुन्छ समूह पहिल्यै अवस्थित छ\n"
+#~ "  -g, --gid GID\t\tनयाँ समूहको लागि GID प्रयोग गर्नुहोस्\n"
+#~ "  -h, --मद्दत\t\t\t ले यो मद्दत संदेशलाई प्रदर्शन गर्छ र बन्द गर्छ\n"
+#~ "  -K, --key KEY=VALUE\t\toverrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique\t\t ले नक्कली संगै समूह सिर्जना गर्न अनुमति दिन्छ\n"
+#~ "\t\t\t\t(non-unique) GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: groupadd [विकल्प] समूह\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ "  -f, --जोड दिनुहोस्\t\t यदि निर्दिष्ट गरिएको छ भने सफल स्थिति सहित जोड दिन "
+#~ "बन्द \n"
+#~ "\t\t\t\tहुन्छ समूह पहिल्यै अवस्थित छ\n"
+#~ "  -g, --gid GID\t\tनयाँ समूहको लागि GID प्रयोग गर्नुहोस्\n"
+#~ "  -h, --मद्दत\t\t\t ले यो मद्दत संदेशलाई प्रदर्शन गर्छ र बन्द गर्छ\n"
+#~ "  -K, --key KEY=VALUE\t\toverrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique\t\t ले नक्कली संगै समूह सिर्जना गर्न अनुमति दिन्छ\n"
+#~ "\t\t\t\t(non-unique) GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "उपयोग: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ "  -b, --base-dir BASE_DIR\tनयाँ प्रयोगकर्ता खाताको लागि बेस डाइरेक्ट्री\n"
+#~ "\t\t\t\tगृह डाइरेक्ट्री\n"
+#~ "  -c, --comment COMMENT\t\tनयाँ प्रयोगकर्ता खाताको लागि GECOS फाँट सेट गर्दछ\n"
+#~ "  -d, --home-dir HOME_DIR\t नयाँ प्रयोगकर्ता खाताको लागि गृह डाइरेक्ट्री\n"
+#~ "  -D, --defaults\t\tपरिमार्जित पूर्वनिर्धारित थप प्रयोगकर्ता मुद्रण गर्नुहोस् वा "
+#~ "बचत\n"
+#~ "\t\t\t\tगर्नुहोस् कनफिगरेसन\n"
+#~ "  -e, --expiredate EXPIRE_DATE\t ले EXPIRE_DATE मा खाता समाप्ति मिति सेट "
+#~ "गर्दछ\n"
+#~ "  -f, --inactive INACTIVE\tले मिति समाप्ति पछि पासवर्डलाई INACTIVE मा सेट "
+#~ "गर्दछ\n"
+#~ "  -g, --gid GROUP\t\tनयाँ प्रयोगकर्ता खाताको लागि GROUP प्रयोग गर्न जोड गर्दछ\n"
+#~ "  -G, --groups GROUPS\t\t नयाँको लागि परिपूरक समूहहरुको सूचि\n"
+#~ "\t\t\t\tप्रयोगकर्ता खाता\n"
+#~ "  -h, --help\t\t\tयो मद्दत संदेशलाई प्रदर्शन गर्छ र बन्द गर्दछ\n"
+#~ "  -k, --skel SKEL_DIR\t\tएउटा वैकल्पिक स्केल डाइरेक्ट्री निर्दिष्ट गर्नुहोस्\n"
+#~ "  -K, --key KEY=VALUE\t\t /etc/login.defs पूर्वनिर्धारणहरू अधिलेखन गर्दछ\n"
+#~ "  -m, --create-home\t\tनयाँ प्रयोगकर्ताको लागि गृह डाइरेक्ट्री सिर्जना गर्दछ\n"
+#~ "\t\t\t\tखाता\n"
+#~ "  -o, --non-unique\t\tनक्कली संग प्रयोगकर्ता सिर्जना गर्न अनुमति दिन्छ\n"
+#~ "\t\t\t\t(non-unique) UID\n"
+#~ "  -p, --password PASSWORD\t नयाँ प्रयोगकर्ताको लागि गुप्तिकृत पासवर्ड प्रयोग "
+#~ "गर्दछ\n"
+#~ "\t\t\t\tखाता\n"
+#~ "  -s, --shell SHELL\t\t नयाँ प्रयोगकर्ता खाताको लागि लगइन शेल\n"
+#~ "  -u, --uid UID\t\t\t नयाँ प्रयोगकर्ता खाताको लागि UID प्रयोग गर्न जोड दिन्छ\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "समाप्तिलाई पासवर्ड सेट गरियो ।"
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: पासवर्ड फाइलमा ताल्चा मार्न सकिदैन\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: पासवर्ड फाइल खोल्न सकिएन\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल ताल्चा मार्न सकिएन\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल खोल्न सकिएन\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: पासवर्ड फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: पासवर्ड फाइल अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tपूरा नाम: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tकोठा नम्बर: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tकार्य फोन: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tगृह फोन: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "पासवर्ड फाइल ताल्चा मार्न सकिएन; फेरी पछि प्रयास गर्नुहोस् ।\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "पासवर्ड फाइल खोल्न सकिएन ।\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s /etc/passwd मा फेला परेन\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "पासवर्ड प्रविष्टिमा त्रुटि अद्यावधिक गरिदैछ ।\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "पासवर्ड फाइल परिवर्तनहरू कमिट गर्नु सकिएन ।\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "पासवर्ड फाइलबाट ताल्चा हटाउन सकिदैन ।\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: समूह फाइल ताल्चा मार्न सकिदैन\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: समूह फाइल खोल्न सकिदैन\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: जि स्याडो फाइल ताल्चा मार्न सकिएन\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: स्याडो फाइल खोल्न सकिएन\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: स्याडो फाइल अद्यावधिक गर्दा त्रुटि\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: समूह प्रविष्टि अद्यावधिक गर्दा त्रुटि\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: रेखा %d: अज्ञात समूह %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: रेखा %d: प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: स्याडो फाइल ताल्चा मार्न सकिएन\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: स्याडो फाइल अद्यावधिक गर्दा त्रुटि\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: पासवर्ड फाइल अद्यावधिक गर्दा त्रुटि\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: रेखा %d: अज्ञात प्रयोगकर्ता %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: रेखा %d: पासवर्ड प्रविष्टि अद्यावधिक गर्न सकिदैन\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: अज्ञात प्रयोगकर्ता\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "अज्ञात प्रयोगकर्ता: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "उपयोग: %s [-r|-R] समूह\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-एउटा प्रयोगकर्ता] समूह\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d प्रयोगकर्ता] समूह\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A प्रयोगकर्ता,...] [-M प्रयोगकर्ता,...] समूह\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M प्रयोगकर्ता,...] समूह\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: ताल्चा प्राप्त गर्न सकिएन\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: स्याडो ताल्चा प्राप्त गर्न सकिएन\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: फाइल खोल्न सकिएन\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: स्याडो फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: फाइल अनलग गर्न सकिएन\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: स्याडो प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "अज्ञात समूह: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: फाइल खोल्न सकिएन\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: स्याडो फाइल खोल्न सकिएन\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "तपाईँ को हो ?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: अज्ञात सदस्य %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: नयाँ समूह प्रविष्टि थप गर्दा त्रुटि\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: समूह फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: समूह फाइल ताल्चा मार्न असक्षम भयो\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: समूह फाइल खोल्न असक्षम भयो\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल ताल्चा मार्न असफल भयो\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल खोल्न असक्षम भयो\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u अद्वितिय होइन\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: समूह प्रविष्टि हटाउँदा त्रुटि\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: स्याडो समूह प्रविष्टि हटाउँदा त्रुटि\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: प्रयोगकर्ताको प्राइमेरी समूह हटाउन सकिएन ।\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: PAM आधिकरण असफल भयो\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: समूह फाइल ताल्चा मार्न असक्षम भयो\n"
+
+#, fuzzy
+#~ msgid "Unable to open group file\n"
+#~ msgstr "%s: समूह फाइल खोल्न असक्षम भयो\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: समूह फाइल खोल्न सकिदैन\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s /etc/group मा फेला परेन\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u अद्वितिय GID होइन\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s अद्वितिय नाम होइन\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: पासवर्ड फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: पासवर्ड फाइल ताल्चा मार्न असक्षम छ\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: पासवर्ड फाइल खोल्न असक्षम भयो\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: फाइल %s ताल्चा मार्न सकिदैन\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: यस %s का लागि स्याडो प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: यस %s समूहका लागि प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल ताल्चा मार्न सकिदैन\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल खोल्न सकिएन\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: स्याडो समूह %s हटाउन सकिएन\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: समूह फाइल अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल मेट्न सकिएन\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "अज्ञात UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "अज्ञात GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: समूह %s अवस्थित छैन\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: अवैध प्रयोगकर्ता नाम '%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: /etc/passwd ताल्चा मार्न सकिएन ।\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: /etc/passwd ताल्चा मार्न सकिएन ।\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: /etc/passwd ताल्चा मार्न सकिएन ।\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: /etc/passwd ताल्चा मार्न सकिएन ।\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: फाइलहरू खओल्न सकिएन\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: फाइलहरू अद्यावधिक गर्दा त्रुटि\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: रेखा %d: प्रयोगकर्ता फेला पार्न सकिएन %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: %s को लागि पासवर्ड प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: पासवर्ड फाइल ताल्चा मार्न सकिएन\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: पासवर्ड फाइल खोल्न सकिएन\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: यो %s का लागि स्याडो प्रविष्टि हटाउन सकिएन\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: स्याडो फाइल अद्यावधिक हुन सकेन\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: पासवर्ड फाइल अद्यावधिक हुन सकेन\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: प्रयोगकर्ता %s का लागि प्रविष्टि अद्यावधिक गर्न सकिएन\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल मेट्न सकिएन\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: अज्ञात GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: अज्ञात समूह %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: gshadow_group मा स्मृति भन्दा बाहिर\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: पासवर्ड फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल पुन:लेखन गर्न सकिएन\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल ताल्चा मार्न सकिएन\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: स्याडो पासवर्ड फाइल खोल्न सकिएन\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: समूह फाइल ताल्चा मार्दा त्रुटि\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: समूह फाइल खोल्दा त्रुटि\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल ताल्चा मार्दा त्रुटि\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल खोल्दा त्रुटि\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: नयाँ पासवर्ड प्रविष्टि थप्दा त्रुटि\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: नयाँ स्याडो पासवर्ड प्रविष्टि थप्दा त्रुटि\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: चेतावनी: CREATE_HOME समर्थित छैन, कृपया सट्टामा -m प्रयोग गर्नुहोस् ।\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: समूह प्रविष्टि अद्यावधिक गर्दा त्रुटि\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: समूह प्रविष्टि अद्यावधिक गर्दा त्रुटि\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: समूह फाइल खोल्न सकिदैन\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: स्याडो समूह फाइल खोल्न सकिदैन\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: पासवर्ड प्रविष्टि मेट्दा त्रुटि\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: स्याडो पासवर्ड प्रविष्टि मेट्दा त्रुटि\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: प्रयोगकर्ता %s अवस्थित छैन\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: नयाँ समूह प्रविष्टि थप गर्दा त्रुटि\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu अद्वितिय होइन\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: पासवर्ड प्रविष्टि परिवर्तन गर्दा त्रुटि\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: पासवर्ड प्रविष्टि हटाउँदा त्रुटि\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: स्याडो पासवर्ड प्रविष्टि हटाउँदा त्रुटि\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: अद्वितिय GID प्राप्त गर्न सकिएन\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr "'%'.200s' बाट %.100s'मा"
+
+#~ msgid " on '%.100s'"
+#~ msgstr "'%.100s' मा"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: रेखा %d: UID सिर्जना गर्न सकिएन\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: नाम %s अद्वितिय होइन\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "उपयोग: पासवर्ड परिवर्तन गर्नुहोस् [options]\n"
+#~ "\n"
+#~ "विकल्पहरू:\n"
+#~ "  -e, --गुप्तिकृत\tआपूर्ति भएका पासवर्डहरू गुप्तिकृत छन\n"
+#~ "  -h, --मद्दत\t\tले यो मद्दत संदेशलाई प्रदर्शित र बन्द गर्छ\n"
+#~ "  -m, --md5\t\tले DES को सट्टामा MD5 प्रयोग गर्छ जब आपूर्ति भएको\n"
+#~ "\t\t\tपासवर्डहरू गुप्तिकृत भएको हुदैन\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "पासवर्ड फाइल होइन\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "माफ दिनुहोस् ।\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "माफ दिनुहोस्, %s को लागि अहिले पासवर्ड परिवर्तन गर्न सकिदैन ।\n"
+
+#~ msgid "Sorry."
+#~ msgstr "माफ गर्नुहोस्।"
diff --git a/po/nl.gmo b/po/nl.gmo
new file mode 100644 (file)
index 0000000..d1c20d4
Binary files /dev/null and b/po/nl.gmo differ
diff --git a/po/nl.po b/po/nl.po
new file mode 100644 (file)
index 0000000..e7e7dc8
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,2702 @@
+# Translation of shadow to Dutch.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Bart Cornelis <cobaco@linux.be>, 2004, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-11-25 21:11+0100\n"
+"Last-Translator: Bart Cornelis <cobaco@skolelinux.no>\n"
+"Language-Team: debian-l10n-dutch <debian-l10n-dutch@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Kon geen ruimte toewijzen voor de configuratie-info.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"configuratiefout - onbekend item '%s' (waarschuw een systeembeheerder)\n"
+
+msgid "Password: "
+msgstr "Wachtwoord: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Wachtwoord van %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Waarschuwing: onbekende groep %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Waarschuwing: te veel groepen\n"
+
+msgid "Your password has expired."
+msgstr "Uw wachtwoord is vervallen."
+
+msgid "Your password is inactive."
+msgstr "Uw wachtwoord is niet actief."
+
+msgid "Your login has expired."
+msgstr "Uw gebruikersnaam is vervallen."
+
+msgid "  Contact the system administrator."
+msgstr "  U dient contact op te nemen met de systeembeheerder."
+
+msgid "  Choose a new password."
+msgstr "  U dient een nieuw wachtwoord te kiezen."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Uw wachtwoord vervalt binnen %ld dagen.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Uw wachtwoord vervalt morgen."
+
+msgid "Your password will expire today."
+msgstr "Uw wachtwoord vervalt vandaag."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Kan tty %s niet veranderen"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: velden zijn te lang\n"
+
+msgid "Environment overflow\n"
+msgstr "Omgeving wordt te groot\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "U mag $%s niet veranderen\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d mislukte poging sinds u zich de laatste keer aanmeldde.\n"
+"Die mislukte poging %s was op %s.\n"
+msgstr[1] ""
+"%d mislukte pogingen sinds u zich de laatste keer aanmeldde.\n"
+"De laatste mislukte poging %s was op %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: kan geen unieke UID verkrijgen\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: kan geen unieke GID verkrijgen\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: kan geen unieke UID verkrijgen\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: kan geen unieke UID verkrijgen\n"
+
+msgid "Too many logins.\n"
+msgstr "Te veel aanmeldingen.\n"
+
+msgid "You have new mail."
+msgstr "U heeft nieuwe e-mails ontvangen."
+
+msgid "No mail."
+msgstr "Geen e-mails."
+
+msgid "You have mail."
+msgstr "U heeft e-mail."
+
+msgid "no change"
+msgstr "geen veranderingen"
+
+msgid "a palindrome"
+msgstr "een palindroom"
+
+msgid "case changes only"
+msgstr "enkel veranderingen van grote naar kleine letters (of omgekeerd)"
+
+msgid "too similar"
+msgstr "te gelijkaardig"
+
+msgid "too simple"
+msgstr "te simpel"
+
+msgid "rotated"
+msgstr "geroteerd"
+
+msgid "too short"
+msgstr "te kort"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Slecht wachtwoord: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() is mislukt, fout %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Wachtwoord is veranderd."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: wachtwoord is met succes aangepast\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Onjuist wachtwoord voor '%s'.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Kan niet van map veranderen (cd) naar '%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Geen thuismap, er wordt aangemeld met HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Kan %s niet uitvoeren"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Ongeldige basismap '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Kan de basismap niet veranderen naar '%s'\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Kan de naam van uw tty niet bepalen"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: onvoldoende geheugen\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) is mislukt\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Nee\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Gebruik: chage [opties] [GEBRUIKERSNAAM]\n"
+"\n"
+"Opties:\n"
+"  -d, --lastday LAATSTE_DAG     stel 'laatste wachtwoordaanpassing' in op\n"
+"                                LAATSTE_DAG\n"
+"  -E, --expiredate VERVALDATUM  stel account-vervaldatum in op VERVALDATUM\n"
+"  -h, --help                    geef deze boodschap weer en sluit af\n"
+"  -I, --inactive INACTIEF       stel 'wachtwoord inactief na vervaldatum'\n"
+"                                in op INACTIEF\n"
+"  -l, --list                    geef account-verouderingsinformatie weer\n"
+"  -m, --mindays MIN_DAGEN       stel minimum aantal dagen tussen\n"
+"                                wachtwoordaanpassingen in op MIN_DAGEN\n"
+"  -M, --maxdays MAX_DAGEN       stel maximum aantal dagen tussen\n"
+"                                wachtwoordaanpassingen in op MAX_DAGEN\n"
+"  -W, --warndays WAARSCH_DAGEN  stel aantal dagen met waarschuwing voor\n"
+"                                vervallen account in op WAARSCH_DAGEN\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Voer een nieuwe waarde in of druk op Enter voor de standaardwaarde"
+
+msgid "Minimum Password Age"
+msgstr "Minimumleeftijd voor wachtwoord"
+
+msgid "Maximum Password Age"
+msgstr "Maximumleeftijd voor wachtwoord"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Laatste wachtwoordverandering (JJJJ-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Waarschuwing voor wachtwoordverval"
+
+msgid "Password Inactive"
+msgstr "Wachtwoord niet actief"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Vervaldatum van account (JJJJ-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Laatste wachtwoordverandering\t\t\t\t: "
+
+msgid "never"
+msgstr "nooit"
+
+msgid "password must be changed"
+msgstr "Wachtwoord veranderd"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Wachtwoord vervalt\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Wachtwoord niet actief\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Account vervalt\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimum aantal dagen tussen wachtwoordwijzigingen\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maximum aantal dagen tussen wachtwoordwijzigingen\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Aantal waarschuwingsdagen voor wachtwoordverval\t\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: ongeldige datum '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: ongeldig numeriek argument '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: gebruik '-l' niet samen met andere opties\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: toegang geweigerd.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Kan uw gebruikersnaam niet bepalen.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM-authentificatie is mislukt\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: kan bestanden niet vergrendelen; probeer het later nog eens\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: kan bestand %s niet openen\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: afsplisten van proces is mislukt: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: afgeven van rechten is mislukt (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: het schaduwwachtwoordenbestand is afwezig\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: afgeven van rechten is mislukt (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: gebruiker %s bestaat niet\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Verouderingsinformatie voor %s wordt aangepast\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: fout bij het aanpassen van de velden\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Gebruik: %s [-f volledige_naam] [-r kamer_nr] [-w tel_werk]\n"
+"         [-h tel_thuis] [-o varia] [gebruiker]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Gebruik: %s [-f volledige_naam] [-r kamer_nr] [-w tel_werk] [-h tel_thuis]\n"
+
+msgid "Full Name"
+msgstr "Volledige naam"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Kamernummer"
+
+msgid "Work Phone"
+msgstr "Telefoon werk"
+
+msgid "Home Phone"
+msgstr "Telefoon thuis"
+
+msgid "Other"
+msgstr "Varia"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Kan ID niet veranderen naar root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: ongeldige naam: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: ongeldig kamernummer '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: '%s' voor 'telefoon werk' is ongeldig\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: '%s' voor 'telefoon thuis' is ongeldig\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' bevat ongeldige tekens\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' bevat ongeldige tekens\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: gebruiker %s bestaat niet\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: kan gebruiker '%s' niet veranderen op NIS-client.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' is de NIS-master voor deze client.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "De gebruikersinformatie van %s wordt veranderd\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: velden zijn te lang\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Gebruik: chpasswd [opties]\n"
+"\n"
+"Opties:\n"
+"  -e, --encrypted     opgegeven wachtwoorden zijn versleuteld\n"
+"  -h, --help          toon dit bericht en sluit af\n"
+"  -m, --md5           maak gebruik van MD5-versleuteling i.p.v. DES wanneer\n"
+"                      opgegeven wachtwoorden niet versleuteld zijn\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: optie -a is ENKEL toegestaan in combinatie met optie -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: regel %d: regel is te lang\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: regel %d: nieuw wachtwoord ontbreekt\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: groep %s bestaan niet\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: regel %d: kan ingang niet bijwerken\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: fouten gedetecteerd, aanpassingen genegeerd\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Gebruik: %s [invoer]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: gebruiker %s bestaat niet\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: gebruiker %s bestaat niet\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Gebruik: chsh [opties] GEBRUIKERSNAAM\n"
+"\n"
+"Opties:\n"
+"  -h, --help                    toon deze boodschap en sluit af\n"
+"  -r, --shell SHELL             nieuwe aanmeld-shell voor gebruikersaccount\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Aanmeld-shell"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "U mag de shell voor %s niet aanpassen.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "De aanmeld-shell voor %s wordt aangepast\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: ongeldige ingang: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s is geen geldige shell.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Gebruik: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Gebruiker Missingen Maximum Laatste          Op\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds over]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds slot]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Onbekende gebruiker %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: kan bestand %s niet openen\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Het wachtwoord voor %s kan niet veranderd worden.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: schaduw groepwachtwoorden zijn vereist voor -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: groep %s bestaan niet\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: afsplisten van proces is mislukt: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Het wachtwoord voor groep %s wordt veranderd\n"
+
+msgid "New Password: "
+msgstr "Nieuw wachtwoord:"
+
+msgid "Re-enter new password: "
+msgstr "Nieuw wachtwoord bevestigen:"
+
+msgid "They don't match; try again"
+msgstr "Wachtwoorden komen niet overeen; probeer het nog eens"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: U kunt het later nog eens proberen\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Gebruiker %s wordt toegevoegd aan groep %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Gebruiker %s wordt verwijderd uit groep %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: gebruiker %s bestaat niet\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Is geen tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Gebruik: %s [invoer]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s is geen geldige groepsnaam\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "ongeldige groepsnaam '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K vereist SLEUTEL=WAARDE\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: groep %s bestaat reeds\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Lid bestaat reeds\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Gebruik: groupdel groep\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: kan map %s niet hernoemen naar %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: kan gebruiker '%s' niet veranderen op NIS-client.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: groep %s bestaan niet\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: groep '%s' is een NIS-groep.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s is de NIS-master\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: gebruiker %s is een NIS-gebruiker\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: onvoldoende geheugen in update_group()\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "ongeldige groepsnaam '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: groep %s is een NIS-groep\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: onbekende gebruiker %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Gebruik: %s [-r] [-s] [groep [gshaduw]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Gebruik: %s [-r] [-s] [groep]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s en -r zijn niet compatibel\n"
+
+msgid "invalid group file entry"
+msgstr "ongeldige ingang in het groepbestand"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "regel '%s' verwijderen?"
+
+msgid "duplicate group entry"
+msgstr "dubbele groepsingang"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ongeldige groepsnaam '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "ongeldige groepsnaam '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "groep %s: geen gebruiker %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "lid '%s' verwijderen?"
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "geen ingang in %s die overeenkomt met die in het 'group'-bestand\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "groep '%s' toevoegen in %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "ongeldige ingang in het schaduwgroepbestand"
+
+msgid "duplicate shadow group entry"
+msgstr "dubbele schaduwgroepingang"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "schaduwgroep %s: geen administratieve gebruiker %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "administratieve gebruiker '%s' verwijderen?"
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "schaduwgroep %s: geen gebruiker %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: de bestanden zijn bijgewerkt\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: geen aanpassingen\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Gebruik: groupdel groep\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Gebruik: groupdel groep\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: kan bestand %s niet bijwerken\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Gebruik: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Gebruik: id\n"
+
+msgid " groups="
+msgstr " groepen="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Gebruik: lastlog [opties]\n"
+"\n"
+"Opties:\n"
+"  -b, --before DAGEN  toon enkel de lastlog-ingangen die ouder zijn dan\n"
+"                      DAGEN\n"
+"  -h, --help          toon dit bericht en sluit af\n"
+"  -t, --time DAGEN    print enkel lastlog-records van de laatste DAGEN "
+"dagen\n"
+"  -u, --user LOGIN    print het lastlog-record van de gebruiker LOGIN\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Gebruikersnaam   Poort    Vanaf            Laatste"
+
+msgid "Username                Port     Latest"
+msgstr "Gebruikersnaam          Poort    Laatste"
+
+msgid "**Never logged in**"
+msgstr "**Heeft zich nog nooit aangemeld**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: onverwachte parameter: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Gebruik: %s [-p] [naam]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "         %s [-p] [-h computer] [-f naam]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "         %s [-p] -r computer\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Ongeldig aanmeldtijdstip"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systeem gesloten wegens routineonderhoud"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Verbinding verbreken omzeild -- aanmelden van root is toegelaten.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Aanmelding is na %d seconden verlopen.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Er is geen utmp-ingang. U dient 'login' uit te voeren vanaf de laagste "
+"niveau 'sh'"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM-fout, er wordt afgebroken: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s gebruikersnaam: "
+
+msgid "login: "
+msgstr "gebruikersnaam: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maximaal aantal pogingen overschreden (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: afgebroken op verzoek van PAM\n"
+
+msgid "Login incorrect"
+msgstr "Gebruikersnaam is onjuist"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s gebruikersnaam: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: afsplisten van proces is mislukt: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+"Waarschuwing: aanmelden is geheractiveerd na tijdelijke buitensluiting."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Laatst aangemeld: %s om %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Laatst aangemeld: %.19s om %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " vanaf %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"aanmeldtijd overschreden\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Gebruik: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Gebruik: newgrp [-] [groep]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Gebruik: sg groep [[-c] commando]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Oud wachtwoord: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: afsplisten van proces is mislukt: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: gebruiker %s bestaat niet\n"
+
+msgid "too many groups\n"
+msgstr "te veel groepen\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: groep %s bestaan niet\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ongeldige gebruikersnaam '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: ongeldige gebruikersnaam '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: regel %d: ongeldige regel\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: kan ingang voor gebruiker %s niet bijwerken\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: regel %d: kan geen GID aanmaken\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: regel %d: kan geen GID aanmaken\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: gebruiker %s bestaat niet\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: regel %d: kan wachtwoord niet bijwerken\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: regel %d: mkdir is mislukt\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: regel %d: chown is mislukt\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: regel %d: kan ingang niet bijwerken\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: passwd [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -a, --all                     report password status on all accounts\n"
+#| "  -d, --delete                  delete the password for the named "
+#| "account\n"
+#| "  -e, --expire                  force expire the password for the named "
+#| "account\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -k, --keep-tokens             change password only if expired\n"
+#| "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --lock                    lock the named account\n"
+#| "  -n, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -q, --quiet                   quiet mode\n"
+#| "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+#| "  -S, --status                  report password status on the named "
+#| "account\n"
+#| "  -u, --unlock                  unlock the named account\n"
+#| "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "  -x, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Gebruik: passwd [opties] [GEBRUIKERSNAAM]\n"
+"\n"
+"Opties:\n"
+"  -a, --all                     geef wachtwoordstatus van alle accounts "
+"weer\n"
+"  -d, --delete                  verwijder het wachtwoord voor de\n"
+"                                genoemde account\n"
+"  -e, --expire                  doe het wachtwoord vervallen voor de\n"
+"                                genoemde account\n"
+"  -h, --help                    toon deze boodschap en sluit af\n"
+"  -k, --keep-tokens             verander wachtwoord indien het vervallen is\n"
+"  -i, --inactive INACTIEF       maak wachtwoord inactief als INACTIEF\n"
+"                                wanneer het vervalt\n"
+"  -l, --lock                    vergrendel de genoemde account\n"
+"  -n, --mindays MIN_DAGEN       stel het minimum aantal dagen voor\n"
+"                                veranderen van het wachtwoord in op "
+"MIN_DAGEN\n"
+"  -q, --quiet                   stille modus\n"
+"  -r, --repository REPOSITORY   verander wachtwoord in REPOSITORY "
+"opslagplaats\n"
+"  -S, --status                  geef de wachtwoordstatus van de genoemde\n"
+"                                account weer\n"
+"  -u, --unlock                  ontgrendel de genoemde account\n"
+"  -w, --warndays WAARSCH_DAGEN  stel het aantal dagen met waarschuwing in\n"
+"                                op WAARSCH_DAGEN\n"
+"  -x, --maxdays MAX_DAGEN       stel het maximum aantal dagen voor\n"
+"                                wachtwoordverandering in op MAX_DAGEN\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Oud wachtwoord: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Wat is het nieuwe wachtwoord (minimaal %d en maximaal %d tekens)?\n"
+"Dit dient te bestaan uit een combinatie van grote letters, kleine letters en "
+"cijfers.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Wat is het nieuwe wachtwoord (minimaal %d en maximaal %d tekens)?\n"
+"Dit dient te bestaan uit een combinatie van grote letters, kleine letters en "
+"cijfers.\n"
+
+msgid "New password: "
+msgstr "Nieuw wachtwoord: "
+
+msgid "Try again."
+msgstr "Probeer het nog eens."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Waarschuwing: zwak wachtwoord (voer het nogmaals in om het toch te "
+"gebruiken)."
+
+msgid "They don't match; try again.\n"
+msgstr "Ze komen niet overeen; probeer het nog eens.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Het wachtwoord voor %s kan niet veranderd worden.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Het wachtwoord voor %s kan niet veranderd worden.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: opslagplaats %s wordt niet ondersteund\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: U mag wachtwoordinformatie van %s niet bekijken of aanpassen.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Wachtwoord van %s wordt veranderd\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Het wachtwoord voor %s is niet veranderd.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Wachtwoord is veranderd."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Waarschuwing voor wachtwoordverval"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Gebruik: %s [-q] [-r] [-s] [wachtwoord [shaduw]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s en -r zijn niet compatibel\n"
+
+msgid "invalid password file entry"
+msgstr "ongeldige ingang in het wachtwoordbestand"
+
+msgid "duplicate password entry"
+msgstr "dubbele wachtwoordingang"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ongeldige gebruikersnaam '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "ongeldige gebruikersnaam '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "gebruiker %s: geen groep %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "gebruiker %s: map %s bestaat niet\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "gebruiker %s: programma %s bestaat niet\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "geen ingang in %s die overeenkomt met die in het  'password'-bestand\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "gebruiker '%s' toevoegen in %s?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "ongeldige ingang in het schaduwwachtwoordbestand"
+
+msgid "duplicate shadow password entry"
+msgstr "dubbele schaduwwachtwoordingang"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "gebruiker %s: laatste wachtwoordverandering is in de toekomst\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: kan bestand %s niet openen\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Gebruik: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Gebruik: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Toegang van 'su' tot die account is GEWEIGERD.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Wachtwoordauthentificatie is omzeild.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Gelieve uw EIGEN wachtwoord in te voeren voor authentificatie.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Gebruik: su [opties] [gebruikersnaam]\n"
+"\n"
+"Opties:\n"
+"  -c, --command COMMANDO        geef COMMANDO mee aan de aangeroepen shell\n"
+"  -h, --help                    toon deze boodschap en sluit af\n"
+"  -, -l, --login                maak de shell een aanmeld-shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        stel de omgevingsvariabelen niet opnieuw\n"
+"                                in, en behoud dezelfde shell\n"
+"  -s, --shell SHELL             gebruik SHELL i.p.v. de standaardshell\n"
+"                                opgegeven in /etc/passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: dient uitgevoerd te worden vanaf een terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: fout %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Onbekend ID: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "U bent niet gerechtigd om 'su %s' uit te voeren\n"
+
+msgid "(Enter your own password)"
+msgstr "(U dient uw eigen wachtwoord in te voeren)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Genegeerd)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM-authentificatie is mislukt\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "U bent niet gerechtigd om 'su %s' uit te voeren\n"
+
+msgid "No shell\n"
+msgstr "Geen shell\n"
+
+msgid "No password file"
+msgstr "Geen wachtwoordbestand"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Geen wachtwoordingang voor 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"U dient control-d in te tikken om op de normale manier op te starten,\n"
+"(of het beheerderswachtwoord om de systeemonderhoudsmodus in te gaan):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Systeemonderhoudsmodus wordt opgestart"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: kan geen nieuw standaardwaardenbestand aanmaken\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: kan het nieuwe standaardwaardenbestand niet openen\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: regel %d: chown is mislukt\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: hernoemen: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: groep '%s' is een NIS-groep.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: te veel groepen gespecificeerd (max %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Gebruik: %s [invoer]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ongeldige basismap '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ongeldig commentaar '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ongeldige thuismap '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: schaduwwachtwoorden zijn vereist voor -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: schaduwwachtwoorden zijn vereist voor -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ongeldig veld '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: ongeldige shell '%s'\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: kan map %s niet aanmaken\n"
+
+msgid "Creating mailbox file"
+msgstr "mailbox-bestand wordt aangemaakt"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"De 'mail'-groep is niet gevonden. Het mailbox-bestand van de gebruiker wordt "
+"aangemaakt met rechten-modus 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Bestandsrechten van mailbox-bestand worden ingesteld"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: gebruiker %s bestaat al\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: groep %s bestaat al -- om deze gebruiker aan die groep toe te voegen "
+"dient u -g te gebruiken.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: kan %s niet aanmaken\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u is niet uniek\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: kan %s niet aanmaken\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: waarschuwing: de thuismap bestaat reeds.\n"
+"Er worden geen bestanden uit de skelet-map overgekopieerd.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Gebruik: userdel [opties] GEBRUIKERSNAAM\n"
+"\n"
+"Opties:\n"
+"  -f, --force                   dwing verwijderen van bestanden af,\n"
+"                                ook wanneer de gebruiker niet de eigenaar "
+"is\n"
+"  -h, --help                    toon deze helbboodschap en sluit af\n"
+"  -r, --remove                  verwijder de thuismap en het mailbox-"
+"bestand\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: kan de groep %s niet verwijderen, daar deze de primaire groep van een "
+"andere gebruiker is.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: waarschuwing: kan niet verwijderen "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s is niet van %s, wordt niet verwijderd\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: gebruiker %s is een NIS-gebruiker\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: gebruiker %s is momenteel aangemeld\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: ongeldige thuismap '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: map %s wordt niet verwijderd (het zou de thuismap van gebruiker %s "
+"verwijderen)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: fout tijdens verwijderen van map %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Gebruik: usermod [opties] GEBRUIKERSNAAM\n"
+"\n"
+"Opties:\n"
+"  -a, --append GROEP            voeg gebruiker toe aan de extra groep GROEP\n"
+"  -c, --comment OPMERKING       de nieuwe waarde voor het GECOS-veld\n"
+"  -d, --home-dir THUIS_MAP      nieuwe thuismap voor de gebruikersaccount\n"
+"  -e, --expiredate VERVALDATUM  stel de vervaldatum in op VERVALDATUM\n"
+"  -f, --inactive INACTIEF       stel het 'wachtwoord inactief na verval'\n"
+"                                in op INACTIEF\n"
+"  -g, --gid GROEP               dwing gebruik van GROEP af als de nieuwe\n"
+"                                aanmeldgroep\n"
+"  -G, --groups GROEPEN          lijst met aanvullende groepen\n"
+"  -h, --help                    geef deze boodschap weer en sluit af\n"
+"  -l, --login GEBRUIKERSNAAM    nieuwe gebruikersnaam\n"
+"  -L, --lock                    vergrendel de gebruikersaccount\n"
+"  -m, --move-home               verplaats de thuismap naar een nieuwe "
+"locatie\n"
+"                                (enkel gebruiken in combinatie met optie -"
+"d)\n"
+"  -o, --non-unique              laat dubbele (niet-unieke) UID toe\n"
+"  -p, --password WACHTWOORD     gebruik versleuteld wachtwoord als het\n"
+"                                nieuwe wachtwoord\n"
+"  -s, --shell SHELL             gebruik gegeven shell als aanmeld-shell\n"
+"                                voor de gebruikersaccount\n"
+"  -u, --uid UID                 nieuwe UID voor de gebruikersaccount\n"
+"  -U, --unlock                  ontgrendel de gebruikersaccount\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: gebruiker %s bestaat al\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: geen opties gegeven\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: schaduwwachtwoorden zijn vereist voor opties -e en -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Lid bestaat reeds\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: map %s bestaat al\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: kan %s niet aanmaken\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: kan chown %s niet uitvoeren\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: waarschuwing: volledig verwijderen van de oude thuismap '%s' is mislukt"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: kan map %s niet hernoemen naar %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: waarschuwing: %s is niet van %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "aanpassen van de eigenaar van de e-mailbox is mislukt"
+
+msgid "failed to rename mailbox"
+msgstr "hernoemen van de e-mailbox is mislukt"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Gebruik: vipw [opties]\n"
+"\n"
+"Opties:\n"
+"  -g, --group                   de groepdatabase bewerken\n"
+"  -h, --help                    toon deze boodschap en sluit af\n"
+"  -p, --passwd                  passwd-database bewerken\n"
+"  -q, --quiet                   stille modus\n"
+"  -s, --shadow                  shadow- of gshadow-database bewerken\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: afgeven van rechten is mislukt (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s is onveranderd\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Kon bestand niet vergrendelen"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Kon bestand niet vergrendelen"
+
+msgid "Couldn't make backup"
+msgstr "Kon geen reservekopie maken"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: kan %s niet herstellen: %s (uw aanpassingen staan in %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Gebruik: faillog [opties]\n"
+#~ "\n"
+#~ "Opties:\n"
+#~ "  -a, --all             toon de faillog-records van alle gebruikers\n"
+#~ "  -h, --help            toon dit bericht en sluit af\n"
+#~ "  -l, --lock-time SEC   Bevries accounts SEC seconden na mislukt "
+#~ "aanmelden\n"
+#~ "  -m, --maximum MAX     stel maximaal aantal mislukte aanmeldingen in op "
+#~ "MAX\n"
+#~ "  -r, --reset           herbegin de tellers voor mislukte aanmeldingen\n"
+#~ "  -t, --time AANTAL     geef alle faillog records van de laatste AANTAL\n"
+#~ "                        dagen weer\n"
+#~ "   -u, --user LOGIN     geef faillog-record weer en onderhoud "
+#~ "mislukking-\n"
+#~ "                        tellers en limieten (indien de -r, -m or -l "
+#~ "opties\n"
+#~ "                        gebruikt worden), maar enkel voor gebruiker "
+#~ "LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Gebruik: groupadd [opties] GROEP\n"
+#~ "\n"
+#~ "Opties:\n"
+#~ "  -f, --force                   succesvolle afsluitstatus afdwingen ook\n"
+#~ "                                als de opgegeven groep reeds bestaat\n"
+#~ "  -g, --gid GID                 nieuwe groep krijgt de opgegeven GID\n"
+#~ "  -h, --help                    geef deze boodschap weer en sluit af\n"
+#~ "  -K, --key SLEUTEL=WAARDE      overstijgt standaardwaarden\n"
+#~ "                                uit /etc/login.defs\n"
+#~ "  -o, --non-unique              laat aanmaken van groep met dubbele\n"
+#~ "                                (niet-unieke) GID toe\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Gebruik: groupmod [opties] GROEP\n"
+#~ "\n"
+#~ "Opties:\n"
+#~ "  -g, --gid GID                 groep krijgt deze nieuwe GID\n"
+#~ "  -h, --help                    geef deze boodschap weer en sluit af\n"
+#~ "  -n, --new-name NIEUWE_NAAM    groep krijgt deze nieuwe naam\n"
+#~ "  -o, --non-unique              laat aanmaken van groep met dubbele\n"
+#~ "                                (niet-unieke) GID toe\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Gebruik: useradd [opties] GEBRUIKERSNAAM\n"
+#~ "\n"
+#~ "Opties:\n"
+#~ "  -b, --base-dir BASIS_MAP      basismap voor de thuismap van de nieuwe\n"
+#~ "                                gebruikersaccount\n"
+#~ "  -c, --comment OPMERKING       stel het GECOS-veld voor de nieuwe\n"
+#~ "                                gebruikersaccount in\n"
+#~ "  -d, --home-dir THUIS_MAP      thuismap voor de nieuwe "
+#~ "gebruikersaccount\n"
+#~ "  -D, --defaults                print de aangepaste useradd-"
+#~ "configuratie,\n"
+#~ "                                of sla deze op\n"
+#~ "  -e, --expiredate VERVALDATUM  stel de vervaldatum in op VERVALDATUM\n"
+#~ "  -f, --inactive INACTIVE       stel het 'wachtwoord inactief na verval'\n"
+#~ "                                in op INACTIEF\n"
+#~ "  -g, --gid GROEP               dwing gebruik van GROEP voor de nieuwe\n"
+#~ "                                gebruikersaccount af\n"
+#~ "  -G, --groups GROEPEN          lijst met aanvullende groepen voor de\n"
+#~ "                                gebruikersaccount\n"
+#~ "  -h, --help                    geef deze boodschap weer en sluit af\n"
+#~ "  -k, --skel SKEL_MAP           gebruik een alternatief map-skelet\n"
+#~ "  -K, --key SLEUTEL=WAARDE      overstijg de standaardwaarden uit\n"
+#~ "                                /etc/login.defs\n"
+#~ "  -m, --create-home             maak een thuismap aan voor de nieuwe\n"
+#~ "                                gebruikersaccount\n"
+#~ "  -o, --non-unique              laat het aanmaken van gebruikersaccounts\n"
+#~ "                                met een dubbele (niet-unieke) UID toe\n"
+#~ "  -p, --password WACHTWOORD     gebruik versleuteld wachtwoord voor de\n"
+#~ "                                nieuwe gebruikersaccount\n"
+#~ "  -s, --shell SHELL             gebruik gegeven shell als aanmeld-shell\n"
+#~ "                                voor de gebruikersaccount\n"
+#~ "  -u, --uid UID                 gebruik UID voor de nieuwe "
+#~ "gebruikersaccount\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Uw wachtwoord gaat vervallen."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: kan wachtwoordbestand niet vergrendelen\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: kan wachtwoordbestand niet openen\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: kan schaduwwachtwoordenbestand niet vergrendelen\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: kan schaduwwachtwoordenbestand niet openen\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: kan het schaduwwachtwoordbestand niet herschrijven\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: kan het wachtwoordbestand niet herschrijven\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: kan wachtwoordbestand niet bijwerken\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: kan schaduwwachtwoordbestand niet bijwerken\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tVolledige naam: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tKamernummer: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelefoon werk: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelefoon thuis: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr ""
+#~ "Kan het wachtwoordbestand niet vergrendelen; probeer het later nog eens.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Kan het wachtwoordbestand niet openen.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s is niet gevonden in /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Fout tijdens het bijwerken van de wachtwoordingang.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Kan de aanpassingen aan het wachtwoordbestand niet vastleggen.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Kan het wachtwoordbestand niet ontgrendelen.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: kan groepbestand niet vergrendelen\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: kan groepbestand niet openen\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: kan het 'gshadow'-bestand niet vergrendelen\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: kan het schaduwbestand niet openen\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: fout tijdens bijwerken van schaduwbestand\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr ":%s: fout tijdens bijwerken groepingang\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: regel %d: onbekende groep %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: regel %d: kan ingang niet bijwerken\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: kan het 'shadow'-bestand niet vergrendelen\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: fout tijdens bijwerken van schaduwbestand\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: fout tijdens bijwerken van wachtwoordbestand\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: regel %d: onbekende gebruiker %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: regel %d: kan wachtwoordingang niet bijwerken\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: onbekende gebruiker\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Onbekende gebruiker %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Gebruik: %s [-r|-R] groep\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "         %s [-a gebruiker] groep\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "         %s [-d gebruiker] groep\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "         %s [-A gebruiker,...] [-M gebruiker,...] groep\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "         %s [-M gebruiker,...] groep\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: kan geen vergrendeling verkrijgen\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: kan geen schaduwvergrendeling verkrijgen\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: kan bestand niet openen\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: kan bestand niet herschrijven\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: kan schaduwbestand niet herschrijven\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: kan bestand niet ontgrendelen\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: kan ingang niet bijwerken\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: kan schaduwingang niet bijwerken\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "onbekende groep: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: kan bestand niet openen\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: kan het schaduwbestand niet openen\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Wie bent u?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: onbekende gebruiker %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: fout tijdens toevoegen nieuwe groepingang\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: kan groepbestand niet herschrijven\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: kan schaduwgroepbestand niet herschrijven\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: kan groepbestand niet vergrendelen\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: kan groepbestand niet openen\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: kan schaduwgroepbestand niet vergrendelen\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: kan schaduwgroepbestand niet openen\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u is niet uniek\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: fout bij het verwijderen van de groepingang\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: fout tijdens het verwijderen van de schaduwgroepingang\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: kan de primaire groep van een gebruiker niet verwijderen.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Te verwijderen lid kon niet gevonden worden\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Gebruik: groupmems -a GEBRUIKERSNAAM | -d GEBRUIKERSNAAM | -D | -l [-g "
+#~ "GROEPNAAM]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Alleen root kan gebruikers toevoegen aan verschillende groepen\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Groeptoegang is vereist\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Niet de primaire eigenaar van de huidige groep\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM-authentificatie is mislukt\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Kan groepbestand niet vergrendelen\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Kan groepbestand niet openen\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Kan groepbestand niet sluiten\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s is niet gevonden in /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u is geen unieke GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s is geen unieke naam\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: kan wachtwoordbestand niet herschrijven\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: kan wachtwoordbestand niet vergrendelen\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: kan wachtwoordbestand niet openen\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: kan bestand %s niet vergrendelen\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: kan schaduwingang voor %s niet bijwerken\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: kan ingang voor groep %s niet bijwerken\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: kan schaduwgroepbestand niet vergrendelen\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: kan schaduwgroepbestand niet openen\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: kan schaduwgroep %s niet verwijderen\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: kan schaduwgroepbestand niet bijwerken\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: kan groepbestand niet bijwerken\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: kan schaduwgroepbestand niet verwijderen\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "onbekende UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "onbekende GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: groep %s bestaan niet\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: gebruiker %s bestaat niet\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: ongeldige gebruikersnaam '%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: kan /etc/passwd niet vergrendelen.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: kan /etc/passwd niet vergrendelen.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: kan /etc/passwd niet vergrendelen.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: kan /etc/passwd niet vergrendelen.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: kan bestanden niet openen\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: fout tijdens bijwerken bestanden\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: regel %d: kan gebruiker %s niet vinden\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: kan 'passwd'-ingang voor %s niet bijwerken\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: kan 'passwd'-bestand niet vergrendelen\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: kan 'passwd'-bestand niet openen\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: kan schaduwingang voor %s niet verwijderen\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: kan schaduwbestand niet bijwerken\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: kan 'passwd'-bestand niet bijwerken\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: kan ingang voor gebruiker %s niet bijwerken\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: kan schaduwwachtwoordbestand niet verwijderen\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: onbekende GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: onbekende groep %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: onvoldoende geheugen in update_gshadow()\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: kan wachtwoordbestand niet herschrijven\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: kan schaduwwachtwoordbestand niet herschrijven\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: kan schaduwwachtwoordbestand niet vergrendelen\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: kan schaduwwachtwoordbestand niet openen\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: fout tijdens vergrendelen groepbestand\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: fout tijdens openen groepbestand\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: fout tijdens vergrendelen schaduwgroepbestand\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: fout tijdens openen schaduwgroepbestand\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: fout tijdens toevoegen nieuwe wachtwoordingang\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: fout tijdens toevoegen schaduwwachtwoordingang\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: waarschuwing: CREATE_HOME wordt niet ondersteund, u dient in plaats "
+#~ "hiervan -m te gebruiken.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr ":%s: fout tijdens bijwerken groepingang\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr ":%s: fout tijdens bijwerken groepingang\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: kan groepbestand niet openen\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: kan schaduwgroepbestand niet openen\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: fout tijdens verwijderen wachtwoordingang\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: fout tijdens verwijderen schaduwwachtwoordingang\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: gebruiker %s bestaat niet\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: fout tijdens toevoegen nieuwe groepingang\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: UID %lu is niet uniek\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: fout tijdens aanpassen wachtwoordingang\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: fout tijdens verwijderen wachtwoordingang\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: fout tijdens verwijderen schaduwwachtwoordingang\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: kan geen unieke GID verkrijgen\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " op `%.100s' vanaf `%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " op `%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: regel %d: kan geen UID aanmaken\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: naam %s is niet uniek\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Gebruik: chpasswd [opties]\n"
+#~ "\n"
+#~ "Opties:\n"
+#~ "  -e, --encrypted\topgegeven wachtwoorden zijn versleuteld\n"
+#~ "  -h, --help\t\ttoon dit bericht en sluit af\n"
+#~ "  -m, --md5\t\tmaak gebruik van MD5-versleuteling wanneer\n"
+#~ "\t\t\tde opgegeven wachtwoorden niet versleuteld zijn\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Geen wachtwoordbestand\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Sorry.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Sorry, het wachtwoord voor %s kan nog niet veranderd worden.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Sorry."
diff --git a/po/nn.gmo b/po/nn.gmo
new file mode 100644 (file)
index 0000000..51f7c8f
Binary files /dev/null and b/po/nn.gmo differ
diff --git a/po/nn.po b/po/nn.po
new file mode 100644 (file)
index 0000000..f04a46c
--- /dev/null
+++ b/po/nn.po
@@ -0,0 +1,2290 @@
+# translation of shadow.po to Norwegian (Nynorsk)
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Håvard Korsvoll <korsvoll@skulelinux.no>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2004-06-03 21:41+0200\n"
+"Last-Translator: Håvard Korsvoll <korsvoll@skulelinux.no>\n"
+"Language-Team: Norwegian (Nynorsk) <i18n-nn@lister.ping.uio.no>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Klarte ikkje finna plass for oppsettsinformasjon.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "oppsettsfeil - ukjent element «%s» (gje melding til administrator)\n"
+
+msgid "Password: "
+msgstr "Passord: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s sitt passord: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Åtvaring: ukjent gruppe %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Åtvaring: for mange grupper\n"
+
+msgid "Your password has expired."
+msgstr "Passordet ditt er utgått."
+
+msgid "Your password is inactive."
+msgstr "Passordet ditt er inaktivt."
+
+msgid "Your login has expired."
+msgstr "Innlogginga di er utgått."
+
+msgid "  Contact the system administrator."
+msgstr "  Ta kontakt med systemadministrator."
+
+msgid "  Choose a new password."
+msgstr "  Lag eit nytt passord."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Passordet ditt vil utgå om %ld dagar.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Passordet ditt vil utgå i morgon."
+
+msgid "Your password will expire today."
+msgstr "Passordet ditt vil utgå i dag."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Klarer ikkje skifta tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: felta er for lange\n"
+
+msgid "Environment overflow\n"
+msgstr "Miljø overflyt\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Du klarer ikkje endra $%s\n"
+
+#, fuzzy, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] "%d %s sidan førre innlogging. Førre var %s på %s.\n"
+msgstr[1] "%d %s sidan førre innlogging. Førre var %s på %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: klarer ikkje få unikt gid\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: klarer ikkje få unikt gid\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: klarer ikkje få unikt gid\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: klarer ikkje få unikt gid\n"
+
+msgid "Too many logins.\n"
+msgstr "For mange innloggingar.\n"
+
+msgid "You have new mail."
+msgstr "Du har ny e-post."
+
+msgid "No mail."
+msgstr "Ingen e-post."
+
+msgid "You have mail."
+msgstr "Du har e-post."
+
+#, fuzzy
+msgid "no change"
+msgstr "%s: ingen endringar\n"
+
+msgid "a palindrome"
+msgstr ""
+
+msgid "case changes only"
+msgstr ""
+
+msgid "too similar"
+msgstr ""
+
+msgid "too simple"
+msgstr ""
+
+msgid "rotated"
+msgstr ""
+
+msgid "too short"
+msgstr ""
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Feil passord: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() feila, feil %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Passord er endra."
+
+msgid "passwd: password updated successfully\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Feil passord for «%s»\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Klarer ikkje cd til «%s»\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Inga mappe, loggar inn med HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Klarer ikkje køyra %s"
+
+#, fuzzy, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Ugyldig rotmappe «%s»\n"
+
+#, fuzzy, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Klarer ikkje endra rotmappe til «%s»\n"
+
+#, fuzzy
+msgid "Unable to determine your tty name."
+msgstr "%s: Klarer ikkje avgjere brukarnamnet ditt.\n"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: tomt for minne\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) feila\n"
+
+#, fuzzy
+msgid "No"
+msgstr "Nei"
+
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Skriv inn den nye verdien eller trykk Enter for standard"
+
+msgid "Minimum Password Age"
+msgstr "Minimum alder på passord"
+
+msgid "Maximum Password Age"
+msgstr "Maksimum alder på passord"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Førre passordendring (ÅÅÅÅ-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Åtvaring for utgått passord"
+
+msgid "Password Inactive"
+msgstr "Passord inaktivt"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Dato for når kontoen utgår (ÅÅÅÅ-MM-DD)"
+
+#, fuzzy
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Førre passordendring (ÅÅÅÅ-MM-DD)"
+
+#, fuzzy
+msgid "never"
+msgstr "Aldri"
+
+msgid "password must be changed"
+msgstr "Passord er endra"
+
+#, fuzzy
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Passord utgår:\t"
+
+#, fuzzy
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Passord inaktiv:\t"
+
+#, fuzzy
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Konto utgår:\t"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: ugyldig dato «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: ugyldig nummerisk argument «%s»\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: ta ikkje med «l» med andre flagg\n"
+
+#, fuzzy, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: nekta tilgang\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Klarer ikkje avgjere brukarnamnet ditt.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM-autentisering feila\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: klarer ikkje låsa filer, prøv igjen seinare\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: klarer ikkje opna fila %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: klarer ikkje opna skuggepassordfila\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Endrar aldringsformasjonen for %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: feil ved endring av felt\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Bruk: %s [-f fullt_namn] [-r romnr] [-w tlf_arb]\n"
+"\t[-h tlf_heime] [-o anna] [brukar]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "Bruk: %s [-f fullt_namn] [-r romnr] [-w tlf_arb] [-h tlf_heime]\n"
+
+msgid "Full Name"
+msgstr "Fullt namn"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "Room Number"
+msgstr "Romnummer"
+
+msgid "Work Phone"
+msgstr "Telefon, arbeid"
+
+msgid "Home Phone"
+msgstr "Telefon, heime"
+
+msgid "Other"
+msgstr "Anna"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Klarer ikkje endra ID til root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: ugyldig namn: «%s»\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: ugyldig romnummer: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: ugyldig telefonnummer, heime: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: «%s» inneheld ulovlege teikn\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: «%s» inneheld ulovlege teikn\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: klarer ikkje endra brukar «%s» på NIS-klient.\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: «%s» er NIS-hovud for denne klienten.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Endrar brukarinformasjon for %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: felta er for lange\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: do not include \"l\" with other flags\n"
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: ta ikkje med «l» med andre flagg\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linje %d: linja er for lang\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linje %d: manglar nytt passord\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: gruppe %s eksisterer ikkje\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linje %d: kan ikkje oppdatere oppføring\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: feil funne, endringar er ikkje utført\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "Innloggingskal"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Du treng ikkje endra skal for %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Endra innloggingskal for %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Ugyldig inntasting: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s er eit ugyldig skal.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Bruk: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds igjen]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lås]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Ukjent brukar: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: klarer ikkje opna fila %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Passordet for %s kan ikkje endrast.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: skuggepassord for gruppe krevst for -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: gruppe %s eksisterer ikkje\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Endrar passordet for gruppa %s\n"
+
+msgid "New Password: "
+msgstr "Nytt passord: "
+
+msgid "Re-enter new password: "
+msgstr "Gjenta det nye passordet: "
+
+msgid "They don't match; try again"
+msgstr "Passorda er ikkje like, prøv igjen"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Prøv igjen seinare\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Legg brukaren %s til gruppa %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Fjernar brukaren %s frå gruppa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Ikkje ein tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s er ikkje eit gyldig gruppenamn\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "ugyldig gruppenamn «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -O krev NAME=VERDI\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: gruppa %s finst allereie\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr "Bruk: goupdel gruppe\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: klarte ikkje endra namn på mappa %s til %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: klarer ikkje endra brukar «%s» på NIS-klient.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: gruppe %s eksisterer ikkje\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: gruppe «%s» er ei NIS-gruppe.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s er NIS-hovudet\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: brukar %s er ikkje ein NIS brukar\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: slapp opp for minne i update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "ugyldig gruppenamn «%s»\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: gruppe %s er ei NIS-gruppe\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: ukjend brukar %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Bruk: %s [-r] [-s] [gruppe [gskugge]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Bruk: %s [-r] [-s] [gruppe]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s og -r er inkompatible\n"
+
+msgid "invalid group file entry"
+msgstr "ugyldig oppføring for gruppefil"
+
+#, fuzzy, c-format
+msgid "delete line '%s'? "
+msgstr "slett linja «%s»? "
+
+msgid "duplicate group entry"
+msgstr "duplisert gruppeoppføring"
+
+#, fuzzy, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ugyldig gruppenamn «%s»\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ugyldig gruppenamn «%s»\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "gruppe %s: ingen brukar %s\n"
+
+#, fuzzy, c-format
+msgid "delete member '%s'? "
+msgstr "slett medlem «%s»?"
+
+#, fuzzy, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "ingen passande oppføring for gruppefil\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "skuggegruppe %s: ingen brukar %s\n"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "ugyldig oppføring av skuggegruppefil"
+
+msgid "duplicate shadow group entry"
+msgstr "duplisert oppføring for skuggegruppe"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "skuggegruppe %s: ingen administratorbrukar %s\n"
+
+#, fuzzy, c-format
+msgid "delete administrative member '%s'? "
+msgstr "slett administratormedlem «%s»?"
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "skuggegruppe %s: ingen brukar %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: filene er oppdaterte\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: ingen endringar\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Bruk: goupdel gruppe\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Bruk: goupdel gruppe\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: klarer ikkje oppdatere fila %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Bruk: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Bruk: id\n"
+
+msgid " groups="
+msgstr " grupper="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Brukarnamn       Port     Frå              Siste"
+
+msgid "Username                Port     Latest"
+msgstr "Brukarnamn              Port     Siste"
+
+msgid "**Never logged in**"
+msgstr "**Aldri vore innlogga**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Bruk: %s [-p] [namn]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "      %s [-p] [-h vert] [-f namn]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "      %s [-p] -r vert\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Ugyldig innloggingstid"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systemet stengt for rutinemessig vedlikehald"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Fråkopling omgått -- innlogging av root er tillete.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Innlogging gjekk ut på tid etter %d sekund.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s login: "
+msgstr ""
+"\n"
+"%s brukarnamn: "
+
+#, fuzzy
+msgid "login: "
+msgstr ""
+"\n"
+"%s brukarnamn: "
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr ""
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr "Feil innlogging"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s brukarnamn: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr ""
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Åtvaring: innlogging gjort mogeleg igjen etter mellombels utestenging."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Førre innlogging: %s på %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Førre inlogging: %.19s på %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " frå %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Bruk: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Bruk: newgrp [-] [gruppe]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Bruk: sg gruppe [[-c] kommando]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Gamalt passord:"
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+msgid "too many groups\n"
+msgstr "for mange grupper\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: gruppe %s eksisterer ikkje\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ugyldig brukarnamn «%s»\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: ugyldig brukarnamn «%s»\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linje %d: ugyldig linje\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: klarer ikkje oppdatere oppføring for brukar %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linje %d: klarer ikkje laga GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linje %d: klarer ikkje laga GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: brukar %s finst ikkje\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linje %d: klarer ikkje oppdatere passord\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linje %d: mkdir feila\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linje %d: chown feila\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linje %d: kan ikkje oppdatere oppføring\n"
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr "Gamalt passord:"
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Skriv inn det nye passordet (minimum %d, maksimum %d teikn)\n"
+"Bruk ein kombinasjon av store og små bokstavar og tal.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Skriv inn det nye passordet (minimum %d, maksimum %d teikn)\n"
+"Bruk ein kombinasjon av store og små bokstavar og tal.\n"
+
+msgid "New password: "
+msgstr "Nytt passord: "
+
+msgid "Try again."
+msgstr "Prøv igjen."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Åtvaring: Svakt passord (skriv det inn ein gong til for å bruka det likevel)."
+
+msgid "They don't match; try again.\n"
+msgstr "Passorda er ikkje like, prøv igjen.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Passordet for %s kan ikkje endrast.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Passordet for %s kan ikkje endrast.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: arkiv %s er ikkje støtta\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "Du treng ikkje endra skal for %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Enrar passord for %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Passordet til %s er ikkje endra.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Passord er endra."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Åtvaring for utgått passord"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Bruk: %s [-q] [-r] [-s] [passord [skugge]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s og -r er inkompatible\n"
+
+msgid "invalid password file entry"
+msgstr "Ugyldig oppføring i passordfila"
+
+msgid "duplicate password entry"
+msgstr "duplisert oppføring i passordfila"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ugyldig brukarnamn «%s»\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "ugyldig brukarnamn «%s»\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "brukar %s: inga gruppe %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "brukar %s: mappe %s finst ikkje\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "brukar %s: program %s finst ikkje\n"
+
+#, fuzzy, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "ingen oppføringar i passordfila som passar\n"
+
+#, fuzzy, c-format
+msgid "add user '%s' in %s? "
+msgstr "skuggegruppe %s: ingen brukar %s\n"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "ugyldig oppføring i skuggepassordfila"
+
+msgid "duplicate shadow password entry"
+msgstr "duplisert oppføring i skuggepassordfila"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "brukar %s: siste passordendring i framtida\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: klarer ikkje opna fila %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Bruk: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Bruk: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Tilgang til su for den kontoen er AVVIST.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Passordautentisering er forbigått.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Oppgje ditt EIGE passord for autentisering.\n"
+
+#, fuzzy, c-format
+msgid "%s: %s\n"
+msgstr "passwd: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: må køyrast frå ein terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: feil %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Ukjent id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Du er ikkje autorisert til su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Skriv inn ditt eige passord)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorert)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM-autentisering feila\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Du er ikkje autorisert til su %s\n"
+
+msgid "No shell\n"
+msgstr "Ingen skal\n"
+
+msgid "No password file"
+msgstr "Inga passordfil"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Inga passordoppføring for «root»"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Trykk Ctrl-d for å halda fram med normal oppstart,\n"
+"(eller oppgje root-passord for systemvedlikehald):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Startar modus for systemvedlikehald"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: klarer ikkje opprette fil for standardverdiar\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: klarer ikkje opna fil for standardverdiar\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linje %d: chown feila\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: gje nytt namn: %s"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: gruppe «%s» er ei NIS-gruppe.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: for mange grupper spesifisert (maks %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Bruk: %s [inndata]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ugyldig startmappe «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ugyldig kommentar «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ugyldig heimemappe «%s»\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: skuggepassord krevst for -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: skuggepassord krevst for -f\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ugyldig felt «%s»\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: ugyldig skal «%s»\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: kan ikkje oppretta mappa %s\n"
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: brukar %s finst\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: gruppa %s finst - viss du ønskjer å leggja brukaren til denne gruppa, "
+"bruk -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: kan ikkje oppretta %s\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: gid %u er ikkje unikt\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: kan ikkje oppretta %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr "%s: klarer ikkje fjerna primærgruppa til brukaren.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: åtvaring: kan ikkje fjerna "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ikkje eigd av %s, ikkje fjerna\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: brukar %s er ikkje ein NIS brukar\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: brukaren %s er pålogga\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: ugyldig heimemappe «%s»\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: fjernar ikkje mappa %s (det ville fjerna heimemappa til brukar %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: feil ved fjerning av mappe %s\n"
+
+#, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: brukar %s finst\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: ingen flagg oppgjeve\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: skuggepassord krevst for -e og -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: mappa %s finst\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: kan ikkje oppretta %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: kan ikkje chown %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: klarte ikkje endra namn på mappa %s til %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: åtvaring: %s er ikkje eigd av %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "klarte ikke å endra eigar av mailbox"
+
+msgid "failed to rename mailbox"
+msgstr "klarte ikkje endra namn på mailbox"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: ugyldig telefonnummer, arbeid: «%s»\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s er ikkje endra\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Klarte ikkje låsa fil"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Klarte ikkje låsa fil"
+
+msgid "Couldn't make backup"
+msgstr "Klarte ikkje laga reservekopi"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: klarer ikkje gjenoppretta %s: %s (endringane dine er i %s)\n"
+
+#, fuzzy
+#~ msgid "Password set to expire."
+#~ msgstr "Passordet ditt er utgått."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: klarer ikkje låsa passordfil\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: klarer ikkje opna passordfil\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: klarer ikkje låsa skuggepassordfila\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: klarer ikkje opna skuggepassordfila\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: klarer ikkje skriva ny skuggepassordfil\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: klarer ikkje skriva ny passordfil\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: klarer ikkje oppdatere passordfil\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: klarer ikkje oppdatere skuggepassordfil\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tFullt namn: %s\n"
+
+#, fuzzy
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "Romnummer"
+
+#, fuzzy
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "Telefon, arbeid"
+
+#, fuzzy
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "Telefon, heime"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Klarer ikkje låsa passordfila, prøv igjen seinare.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Klarer ikkje opna passordfila.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s ikkje funne i /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Feil ved oppdatering av passordet.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Klarer ikkje utføra endringar i passordfila.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Klarer ikkje låsa opp passordfila.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: klarer ikkje låsa gruppefil\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: klarer ikkje opna gruppefil\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: klarer ikkje låsa skuggepassordfila\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: klarer ikkje opna skuggepassordfila\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: feil ved oppdatering av skuggepassordfila\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: feil ved oppdatering av gruppeoppføring\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: linje %d: ukjent brukar %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: linje %d: kan ikkje oppdatere oppføring\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: klarer ikkje låsa skuggepassordfila\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: feil ved oppdatering av skuggepassordfila\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: feil ved oppdatering av passordfila\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: linje %d: ukjent brukar %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: linje %d: klarer ikkje oppdatere passordet\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: ukjent brukar\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Ukjent brukar: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Bruk: %s [-r|-R] gruppe\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "      %s [-a brukar] gruppe\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "      %s [-d brukar] gruppe\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "      %s [-A brukar,...] [-M brukar,...] gruppe\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "      %s [-M brukar,...] gruppe\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: klarer ikkje få lås\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: klarer ikkje få lås på skuggefil\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: klarer ikkje opna fil\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: klarer ikkje skriva ny fila\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: klarer ikkje skriva ny skuggefil\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: klarer ikkje låsa opp fil\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: klarer ikkje oppdatere oppføring\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: klarer ikkje oppdatere skuggeoppføring\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "ukjent gruppe: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: klarer ikkje opna fil\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: klarer ikkje opna skuggepassordfila\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Kven er du?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: ukjent medlem %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: feil ved oppretting av ny gruppeoppføring\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: klarer ikkje skriva ny gruppefil\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: klarer ikkje skriva ny skuggegruppefil\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: klarer ikkje låsa gruppefil\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: klarer ikkje opna gruppefil\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: klarer ikkje låsa skuggegruppefil\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: klarer ikkje opna skuggegruppefil\n"
+
+#, fuzzy
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: gid %u er ikkje unikt\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: feil ved fjerning av gruppeoppføring\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: feil ved fjerning av oppføring for skuggegruppe\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: klarer ikkje fjerna primærgruppa til brukaren.\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: PAM-autentisering feila\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: klarer ikkje låsa gruppefil\n"
+
+#, fuzzy
+#~ msgid "Unable to open group file\n"
+#~ msgstr "%s: klarer ikkje opna gruppefil\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: klarer ikkje opna gruppefila\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s ikkje funne i /etc/group\n"
+
+#, fuzzy
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u er ikkje ein unik gid\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s er ikkje eit unikt namn\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: klarer ikkje skriva ny passordfil\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: klarer ikkje låsa passordfil\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: klarer ikkje opna passordfil\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: klarer ikkje låse fila %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: klarer ikkje oppdatere skuggeoppføring for %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: klarer ikkje oppdatere oppføring for gruppa %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: klarer ikkje låsa skuggegruppefil\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: klarer ikkje opna skuggegruppefil\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: klarer ikkje fjerna skuggegruppe %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: klarer ikkje oppdatere skuggegruppefil\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: klarer ikkje oppdatere gruppefil\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: klan ikkje slette skuggegruppefil\n"
+
+#, fuzzy
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "ukjent GID: %lu\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "ukjent GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: gruppe %s eksisterer ikkje\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: brukar %s finst ikkje\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: ugyldig brukarnamn «%s»\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: klarer ikkje låsa /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: klarer ikkje låsa /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: klarer ikkje låsa /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: klarer ikkje låsa /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: klarer ikkje opna filer\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: feil ved oppdatering av filer\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: linje %d: klarer ikkje finne brukar %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: klarer ikkje oppdatere oppføring i passordfila for %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: klarer ikkje låda passordfil\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: klarer ikkje opna passordfil\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: klarer ikkje fjerna oppføring for %s i skuggepassordfila\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: klarer ikkje oppdatere skuggepassordfil\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: klarer ikkje oppdatere passordfil\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: klarer ikkje oppdatere oppføring for brukar %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: klarer ikkje sletta skuggepassordfil\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: ukjent GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: ukjent gruppe %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: slapp opp for minne i update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: klarer ikkje skriva ny passordfil\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: klarer ikkje skriva ny skuggepassordfil\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: klarer ikkje låsa skuggepassordfil\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: klarer ikkje opna skuggepassordfil\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: feil ved låsing av gruppefil\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: feil ved opning av gruppefil\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: feil ved låsing av skuggegruppefil\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: feil ved opning av skuggegruppefil\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: feil når passordoppføring blei lagt til\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: feil når oppføring av skuggepassord blei lag til\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: åtvaring: CREATE_HOME ikkje støtta, bruk -m istaden.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: feil ved oppdatering av gruppeoppføring\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: feil ved oppdatering av gruppeoppføring\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: klarer ikkje opna gruppefila\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: klarer ikkje opna skuggepassordfila\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: feil ved sletting av passordoppføring\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: feil ved sletting av skuggepassordoppføring\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: brukar %s finst ikkje\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: feil ved oppretting av ny gruppeoppføring\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu er ikkje unik\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: feil ved endring av passordoppføring\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: feil ved sletting av passordoppføring\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: feil ved sletting av oppføring for skuggepassord\n"
+
+#, fuzzy
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: klarer ikkje få unikt gid\n"
+
+#, fuzzy
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " på «%.100s» frå «%.200s»"
+
+#, fuzzy
+#~ msgid " on '%.100s'"
+#~ msgstr " på «%.100s»"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: linje %d: klarer ikkje laga UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: namn %s er ikkje unikt\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Inga passordfil\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Årsak.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Passordet for %s kan ikkje endrast enno.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Årsak."
diff --git a/po/pl.gmo b/po/pl.gmo
new file mode 100644 (file)
index 0000000..b987d91
Binary files /dev/null and b/po/pl.gmo differ
diff --git a/po/pl.po b/po/pl.po
new file mode 100644 (file)
index 0000000..8d77c31
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,2699 @@
+# Polish translation for shadow.
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Arkadiusz Miśkiewicz <misiek@misiek.eu.org>, 1999.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2003-2004.
+# Tomasz Kłoczko <kloczek@pld.org.pl>, 2004-2006
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-11-25 20:53+0100\n"
+"Last-Translator: Tomasz Kłoczko <kloczek@pld.org.pl>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Nie można przydzielić miejsca dla informacji o konfiguracji.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"błąd w konfiguracji - nieznana pozycja '%s' (powiadom administratora)\n"
+
+msgid "Password: "
+msgstr "Hasło: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Hasło użytkownika %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Ostrzeżenie: nieznana grupa %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Ostrzeżenie: zbyt wiele grup\n"
+
+msgid "Your password has expired."
+msgstr "Twoje hasło straciło ważność."
+
+msgid "Your password is inactive."
+msgstr "Twoje hasło jest nieaktywne."
+
+msgid "Your login has expired."
+msgstr "Twoje konto straciło ważność."
+
+msgid "  Contact the system administrator."
+msgstr "  Skontaktuj się z administratorem systemu."
+
+msgid "  Choose a new password."
+msgstr "  Wybierz nowe hasło."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Twoje hasło straci ważność w ciągu %ld dni.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Jutro twoje hasło straci ważność."
+
+msgid "Your password will expire today."
+msgstr "Dziś twoje hasło straci ważność."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Nie można zmienić tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: pola zbyt długie\n"
+
+msgid "Environment overflow\n"
+msgstr "Przepełnienie środowiska\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Nie możesz zmieniać $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d nieudana próba logowania od ostatniego logowania.\n"
+"Ostatnie logowanie: dnia %s na terminalu %s.\n"
+msgstr[1] ""
+"%d nieudane próby logowania od ostatniego logowania.\n"
+"Ostatnie logowanie: dnia %s na terminalu %s.\n"
+msgstr[2] ""
+"%d nieudanych prób logowania od ostatniego logowania.\n"
+"Ostatnie logowanie: dnia %s na terminalu %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: nie można uzyskać niepowtarzalnego UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: nie można uzyskać niepowtarzalnego GID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: nie można uzyskać niepowtarzalnego UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: nie można uzyskać niepowtarzalnego UID\n"
+
+msgid "Too many logins.\n"
+msgstr "Zbyt wiele otwartych sesji.\n"
+
+msgid "You have new mail."
+msgstr "Masz nową pocztę."
+
+msgid "No mail."
+msgstr "Nie masz poczty."
+
+msgid "You have mail."
+msgstr "Masz pocztę."
+
+msgid "no change"
+msgstr "bez zmian"
+
+msgid "a palindrome"
+msgstr "palindrom"
+
+msgid "case changes only"
+msgstr "zmieniona tylko wielkości liter"
+
+msgid "too similar"
+msgstr "zbyt podobne"
+
+msgid "too simple"
+msgstr "za proste"
+
+msgid "rotated"
+msgstr "rotacja"
+
+msgid "too short"
+msgstr "za krótkie"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Złe hasło: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() nie powiodło się, błąd %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Hasło zmienione."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: hasło zostało zmienione\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Nieprawidłowe hasło %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Nie można zmienić katalogu na '%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Brak katalogu, loguję z HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Nie można uruchomić %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Nieprawidłowy katalog główny '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Nie można zmienić głównego katalogu na '%s'\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Nie można ustalić nazwy twojego terminala."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: brak pamięci\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) nie powiodło się\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Nie\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Użycie: chage [opcje] [LOGIN]\n"
+"\n"
+"Opcje:\n"
+"  -d, --lastday OSTATNI         ustawia date ostatniej zmiany hasła na "
+"OSTATNI\n"
+"  -E, --expiredate DATA_WAŻN    ustawia datę ważności konta na DATA_WAŻN\n"
+"  -h, --help                    wyświetlenie tego opisu i zakończenie "
+"działania\n"
+"  -I, --inactive NIEAKTYWNE     ustwia liczbę dni nieaktywności konta po\n"
+"                                których konta jest blokowane na NIEAKTYWNE\n"
+"  -l, --list                    wyświetlenie informacji o terminach "
+"ważności\n"
+"                                konta i hasła\n"
+"  -m, --mindays MIN_DNI         ustawia minimalną liczbę dni pomiędzy\n"
+"                                zmianami hasła na wartość MIN_DNI\n"
+"  -M, --maxdays MAX_DNI         ustawia maksymalną liczbę dni, przez jakie\n"
+"                                hasło jest ważne na wartość MAX_DNI\n"
+"  -W, --warndays DNI_OSTRZ      ustawia na DNI_OSTRZ liczbę dni przed\n"
+"                                upływem ważności hasła\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Wpisz nową wartość lub wciśnij ENTER by przyjąć wartość domyślną"
+
+msgid "Minimum Password Age"
+msgstr "Minimalny wiek hasła"
+
+msgid "Maximum Password Age"
+msgstr "Maksymalny wiek hasła"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Ostatnia zmiana hasła (RRRR-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Ostrzeżenie o utracie ważności hasła"
+
+msgid "Password Inactive"
+msgstr "Hasło nieaktywne"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data utraty ważności konta (RRRR-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Ostatnia zmiana hasła\t\t\t\t\t: "
+
+msgid "never"
+msgstr "nigdy"
+
+msgid "password must be changed"
+msgstr "Hasło musi zostać zmienione"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Hasło traci ważność\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Hasło nieaktywne\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Konto traci ważność\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimalna ilość dni pomiędzy zmianami hasła\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maksymalna ilość dni pomiędzy zmianami hasła\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Liczba dni ostrzeżenia, zanim ważność hasła upłynie\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: nieprawidłowa data '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: nieprawidłowy argument numeryczny '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: nie łącz \"l\" z innymi flagami\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Operacja niedozwolona.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Nie można ustalić twojej nazwy użytkownika.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: błąd podczas uwierzytelniania przez PAM\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: nie można zablokować plików, spróbuj później\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: nie można otworzyć pliku %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: failure forking: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: brak pliku z ukrytymi hasłami\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Zmieniam informację o użytkowniku %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: błąd podczas zmieniania pól\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Użycie: %s [-f imię_nazwisko] [-r nr_pokoju] [-w tel_praca]\n"
+"\t[-h tel_dom] [-o inne] [użytkownik]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Użycie: %s [-f imię_nazwisko] [-r nr_pokoju] [-w tel_praca] [-h tel_dom]\n"
+
+msgid "Full Name"
+msgstr "Imię i nazwisko"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Numer pokoju"
+
+msgid "Work Phone"
+msgstr "Telefon do pracy"
+
+msgid "Home Phone"
+msgstr "Telefon domowy"
+
+msgid "Other"
+msgstr "Inne"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Nie można zmienić ID na root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nieprawidłowa nazwa: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: nieprawidłowy numer pokoju: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: nieprawidłowy numer telefonu do pracy: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: nieprawidłowy numer telefonu domowego: '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' zawiera nieprawidłowe znaki\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' zawiera nieprawidłowe znaki\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: nie można zmienić użytkownika '%s' na kliencie NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' jest nadrzędnym serwerem NIS dla tego klienta.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Zmieniam informację o użytkowniku %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: pola zbyt długie\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Użycie: chpasswd [opcje]\n"
+"\n"
+"Opcje:\n"
+"  -e, --encrypted       przekazywane hasła są w postaci zakodowane\n"
+"  -h, --help            wyświetlenie tego opisu i zakończenie działania\n"
+"  -m, --md5             użyj kodowania MD5 zamiast DES w przypadku kiedy\n"
+"                        przekazywane hasła nie są zakodowane\n"
+"\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: opcja -a można użyć TYLKO z pcją -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linia %d: linia zbyt długa\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linia %d: brakuje nowego hasła\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: grupa %s nie istnieje\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linia %d: nie można zaktualizować wpisu\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: wykryto błąd, zignorowano modyfikacje\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Użycie: chsh [opcje] [LOGIN]\n"
+"\n"
+"Opcje:\n"
+"  -h, --help            wyświetlenie tego opisu i zakończenie działania\n"
+"  -s, --shell SHELL     nowy SHELL dla użytkownika LOGIN\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Powłoka logowania"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Nie możesz zmieniać powłoki dla %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Zmieniam powłokę logowania dla %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Nieprawidłowy wpis: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s jest nieprawidłową powłoką.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Użycie: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Login       Nieudane Maks.   Ostanio                  Na\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [pozostało %lds]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [blokada %lds]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Nieznany użytkownik: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: nie można otworzyć pliku %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Hasło dla %s nie może być zmienione.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: plik z ukrytymi hasłami grup wymagany dla -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: grupa %s nie istnieje\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: failure forking: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Zmieniam hasło dla grupy %s\n"
+
+msgid "New Password: "
+msgstr "Nowe hasło: "
+
+msgid "Re-enter new password: "
+msgstr "Wpisz hasło ponownie: "
+
+msgid "They don't match; try again"
+msgstr "Nie zgadzają się; spróbuj ponownie"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Spróbuj ponownie później\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Dodaję nowego użytkownika %s do grupy %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Usuwam użytkownika %s z grupy %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: To nie tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s: nie jest prawidłową nazwą grupy\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "nieprawidłowa nazwa grupy '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K wymaga KLUCZ=WARTOŚĆ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: grupa %s istnieje\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Członek grupy już istnieje\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Użycie: groupdel grupa\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: nie można zmienić nazwy katalogu z %s na %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: nie można zmienić użytkownika '%s' na kliencie NIS.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: grupa %s nie istnieje\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: grupa '%s' jest grupą NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s jest głównym serwerem NIS\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: użytkownik %s jest użytkownikiem NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: zabrakło pamięci w update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "nieprawidłowa nazwa grupy '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: grupa %s jest grupą NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: nieznany użytkownik %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Użycie: %s [-r] [-s] [grupa [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Użycie: %s [-r] [-s] [grupa]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s i -r są niekompatybilne\n"
+
+msgid "invalid group file entry"
+msgstr "nieprawidłowy wpis do pliku grup"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "usunąć linię '%s'? "
+
+msgid "duplicate group entry"
+msgstr "powtórzony wpis w pliku grup"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nieprawidłowa nazwa grupy '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "nieprawidłowa nazwa grupy '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupa %s: nie ma użytkownika %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "skasować członka '%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "brak pasującego wpisu w pliku group %s\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "dodać grupę '%s' w %s ?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "nieprawidłowy wpis w pliku z ukrytymi hasłami grup"
+
+msgid "duplicate shadow group entry"
+msgstr "powtórzony wpis w pliku z ukrytymi hasłami grup"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr ""
+"grupa %s: użytkownik administracyjny %s z pliku ukrytych haseł grup nie "
+"istnieje\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "usunąć członka administracyjnego '%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grupa %s: użytkownik %s z pliku ukrytych haseł grup nie istnieje\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: pliki zostały zaktualizowane\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: bez zmian\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Użycie: groupdel grupa\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Użycie: groupdel grupa\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: nie można zaktualizować pliku %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Użycie: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Użycie: id\n"
+
+msgid " groups="
+msgstr " grupy="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Użycie: lastlog [opcje]\n"
+"\n"
+"Opcje:\n"
+"  -b, --before DNI      wyświetl tylko rekordy lastlog starsze niż DNI\n"
+"  -h, --help            wyświetlenie tego opisu i zakończenie działania\n"
+"  -t, --time DNI        wyświetl tylko rekordy lastlog nie starsze niż DNI\n"
+"  -u, --user LOGIN      wyświetl rekord lastlog tylko dla użytkownika\n"
+"                        o loginie LOGIN\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Użytkownik       Port     Z                Ostatnio"
+
+msgid "Username                Port     Latest"
+msgstr "Użytkownik             Port     Ostatnio"
+
+msgid "**Never logged in**"
+msgstr "**Nigdy nie zalogowany**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: nieoczekiwany argument: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Użycie: %s [-p] [nazwa]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "        %s [-p] [-h host] [-f nazwa]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "        %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Nieprawidłowy czas logowania"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"System zamknięty do rutynowej konserwacji."
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Rozłączenie pominięte -- zezwolenie na logowanie się roota.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Limit czasu logowania przekroczony po %d sekundach.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Brak wpisu w utmp.  Musisz wykonać \"login\" z najniższego poziomu \"sh\""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM niepowodzenie, przerwane: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maksymalna ilość prób przekroczona (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: przerwanie wywołane przez PAM\n"
+
+msgid "Login incorrect"
+msgstr "Nieprawidłowe logowanie"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: failure forking: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Ostrzeżenie: logowanie ponownie odblokowanie po czasowej blokadzie."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Ostatnie logowanie: %s na %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Ostatnie logowanie: %s na %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " z %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"przekroczony czas logowania\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Użycie: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Użycie: newgrp [-] [grupa]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Użycie: sg grupa [[-c] polecenie]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Stare hasło: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: failure forking: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+msgid "too many groups\n"
+msgstr "zbyt wiele grup\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: grupa %s nie istnieje\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: nieprawidłowa nazwa użytkownika '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: nieprawidłowa nazwa użytkownika '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linia %d: nieprawidłowa linia\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: nie można zaktualizować wpisu dla użytkownika %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linia %d: nie można utworzyć GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linia %d: nie można utworzyć GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linia %d: nie można zaktualizować pliku z hasłami\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linia %d: mkdir nie powiodło się\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linia %d: chown nie powiodło się\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linia %d: nie można zaktualizować wpisu\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: passwd [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -a, --all                     report password status on all accounts\n"
+#| "  -d, --delete                  delete the password for the named "
+#| "account\n"
+#| "  -e, --expire                  force expire the password for the named "
+#| "account\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -k, --keep-tokens             change password only if expired\n"
+#| "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --lock                    lock the named account\n"
+#| "  -n, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -q, --quiet                   quiet mode\n"
+#| "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+#| "  -S, --status                  report password status on the named "
+#| "account\n"
+#| "  -u, --unlock                  unlock the named account\n"
+#| "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "  -x, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Użycie: passwd [opcje] [LOGIN]\n"
+"\n"
+"Opcje:\n"
+"  -a, --all                     raportuj status hasła dla wszystkich kont\n"
+"  -d, --delete                  kasuje hasło użytkowanika\n"
+"  -e, --expire                  wymuś przeterminowanie hasła\n"
+"  -h, --help                    wyświetlenie tego opisu i zakończenie "
+"działania\n"
+"  -k, --keep-tokens             zmiana hasła tylko w przypadku kiedy\n"
+"                                jest przeterminowane\n"
+"  -i, --inactive NIEAKTYWNE     konto przeterminowane po upływie NIEAKTYWNE\n"
+"                                dni po wygaśnięciu hasła\n"
+"  -l, --lock                    zablokuj konto\n"
+"  -n, --mindays MIN_DNI         ustaw minimalną ilość dni prezed kolejną\n"
+"                                zmianą hasła na MIN_DNI\n"
+"  -n, --mindays MIN_DNI         ustawia minimalną liczbę dni pomiędzy\n"
+"                                zmianami hasła na MIN_DNI\n"
+"  -q, --quiet                   cichy tryb pracy\n"
+"  -r, --repository REPOZYTORIUM zmień hasło w repozytorium REPOZYTORIUM\n"
+"  -S, --status                  raportuj status hasła\n"
+"  -u, --unlock                  odblokuj konto\n"
+"  -w, --warndays DNI_OSTRZ      ustawia na DNI_OSTRZ liczbę dni przed\n"
+"                                upływem ważności hasła\n"
+"  -x, --maxdays MAX_DNI         ustawia maksymalną liczbę dni, przez jakie\n"
+"                                hasło jest ważne na wartość MAX_DNI\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Stare hasło: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Wpisz nowe hasło (minimum %d, maksimum %d znaków)\n"
+"Proszę użyj kombinacji wielkich i małych znaków oraz cyfr.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Wpisz nowe hasło (minimum %d, maksimum %d znaków)\n"
+"Proszę użyj kombinacji wielkich i małych znaków oraz cyfr.\n"
+
+msgid "New password: "
+msgstr "Nowe hasło: "
+
+msgid "Try again."
+msgstr "Spróbuj ponownie."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Ostrzeżenie: słabe hasło (wpisz je ponowie jeśli jednak chcesz go użyć)."
+
+msgid "They don't match; try again.\n"
+msgstr "Nie zgadzają się; spróbuj ponownie.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Hasło dla %s nie może być zmienione.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Hasło dla %s nie może być zmienione.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: repozytorium %s nie jest obsługiwane\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Nie możesz przeglądać lub zmieniać informacji o haśle dla %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Zmieniam hasło dla %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Hasło dla %s pozostaje niezmienione.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Hasło zmienione."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Ostrzeżenie o utracie ważności hasła"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Użycie: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s i -r są niekompatybilne\n"
+
+msgid "invalid password file entry"
+msgstr "nieprawidłowy wpis do pliku z hasłami"
+
+msgid "duplicate password entry"
+msgstr "powtórzony wpis w pliku z hasłami"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nieprawidłowa nazwa użytkownika '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "nieprawidłowa nazwa użytkownika '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "użytkownik %s: brak grupy %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "użytkownik %s: katalog %s nie istnieje\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "użytkownik %s: program %s nie istnieje\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "brak pasującego wpisu w pliku z hasłami %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "dodać grupę '%s' w %s ?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "nieprawidłowy wpis w pliku z hasłami"
+
+msgid "duplicate shadow password entry"
+msgstr "powtórzony wpis w pliku z ukrytymi hasłami"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "użytkownik %s: ostatnia zmiana hasła w przyszłości\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: nie można otworzyć pliku %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Użycie: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Użycie: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Dostęp do polecenia su z tego konta ZABRONIONY.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Uwierzytelnianie na podstawie hasła pominięte.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Proszę wpisz swoje WŁASNE hasło jako hasło uwierzytelniające.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Użycie: su [opcje] [LOGIN]\n"
+"\n"
+"Opcje:\n"
+"  -c, --command POLECENIE   uruchom POLECENIE w to wywoływanym shellu\n"
+"  -h, --help                wyświetlenie tego opisu i zakończenie działania\n"
+"  -, -l, --login            uruchom z  powłoką z powłoką zgłoszeniową\n"
+"  -m, -p,\n"
+"  --preserve-environment    uruchomienie z zachowaniem zmiennych środowiska\n"
+"  -s, --shell SHELL         użyj SHELL zamiast domyślny shell z passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: musisz uruchamiać z terminala\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: błąd %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Nieznany id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Nie masz autoryzacji by używać su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Wpisz swoje własne hasło)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Zignorowano)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: błąd podczas uwierzytelniania przez PAM\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Nie masz autoryzacji by używać su %s\n"
+
+msgid "No shell\n"
+msgstr "Brak powłoki\n"
+
+msgid "No password file"
+msgstr "Brak pliku z hasłami"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Brak wpisu do bazy haseł dla 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Naciśnij control-d by kontynuować normalny start\n"
+"(lub podaj hasło roota by przejść do trybu konserwacji systemu):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Wchodzę w tryb konserwacji systemu"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: nie można utworzyć nowego pliku z ustawieniami domyślnymi\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: nie można otworzyć nowego pliku z ustawieniami domyślnymi\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linia %d: chown nie powiodło się\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: zmiana nazwy: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: grupa '%s' jest grupą NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: podano zbyt wiele grup (maks %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Użycie: %s [wejście]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: nieprawidłowy katalog bazowy '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: nieprawidłowy komentarz '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: nieprawidłowy katalog domowy '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: ukryte hasła wymagane dla -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: ukryte hasła wymagane dla -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: nieprawidłowe pole '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: nieprawidłowa powłoka '%s'\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: nie można utworzyć katalogu %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Tworzenie pliku mailbox"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Nie znaleziono grupy 'mail'. Tworzenie pliku mailbox użytkownika z prawami "
+"dostępu 600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Ustawianie praw dostępu do pliku mailbox"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: użytkownik %s istnieje\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: grupa %s istnieje - aby dodać tego użytkownika do tej grupy, użyj -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: nie można utworzyć %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u nie jest niepowtarzalny\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: nie można utworzyć %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: uwaga: katalog domowy już istnieje.\n"
+"Pliki z katalogu skel nie są kopiowane.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Użycie: userdel [opcje] LOGIN\n"
+"\n"
+"Opcje:\n"
+"  -f, --force               wymuś usunięcie plików nawet jeżeli nie należą\n"
+"                            do usuwanego użytkownika\n"
+"  -h, --help                wyświetlenie tego opisu i zakończenie działania\n"
+"  -r, --remove              usuń katalog domowy i spool pocztowy\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: nie można usunąć grupy %s która jest grupą podstawową\n"
+"dla innego użytkownika.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: ostrzeżenie: nie można usunąć "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: właścicielem %s nie jest %s, nie usuwam\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: użytkownik %s jest użytkownikiem NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: użytkownik %s jest aktualnie zalogowany\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: nieprawidłowy katalog domowy '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: nie usuwam katalogu %s (usunęłoby to katalog domowy użytkownika %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: błąd podczas usuwania katalogu %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Użycie: usermod [opcje] LOGIN\n"
+"\n"
+"Opcje:\n"
+"  -a, --append GRUPA          dołącz użytkownika do do dodatkowej grupy "
+"GRUPA\n"
+"  -c, --comment KOMENTARZ     ustaw pole komentarza (GECOS) dla konta\n"
+"  -d, --home-dir KAT_DOMOWY   nowy katalog domowy użytkownika\n"
+"  -e, --expiredate DATA_WAŻN  ustawia datę wazności dla konta na DATA_WAŻN\n"
+"  -f, --inactive NIEAKTYWNE   ustwia liczbę dni po których konto jest\n"
+"                              blokowane na NIEAKTYWNE\n"
+"  -g, --gid GRUPA             wymuś użycie grupy GRUPA jako grupy\n"
+"                              podstawowej użytkownika\n"
+"  -G, --groups GRUPY          lista dodatkowych grup uzytkownika\n"
+"  -h, --help                  wyświetlenie tego opisu i zakończenie "
+"działania\n"
+"  -l, --login NOWY_LOGIN      nowa nawana logina użytkownika\n"
+"  -L, --lock                  blokuj konto użytkowqnika\n"
+"  -m, --move-home             przenieś zawartość katalogu domowego\n"
+"                              użytkownika (może być użyte tylko z opcją -d)\n"
+"  -o, --non-unique            pozwól na użycie nieunikalnego UID dla konta\n"
+"  -p, --password HASŁO        użyj nowe zakodowane HASŁO dla użytkonta\n"
+"  -s, --shell SHELL           nowy SHELL dla użytkownika LOGIN\n"
+"  -U, --unlock                odblokuj konto użytkownika\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: użytkownik %s istnieje\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: nie podano flag\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: ukryte hasła wymagane dla -e i -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Członek grupy już istnieje\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: katalog %s istnieje\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: nie można utworzyć %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: nie można zmienić właściciela %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: uwaga: nie powiodło się całkowite usuniecie starego katalogu domovego %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: nie można zmienić nazwy katalogu z %s na %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: ostrzeżenie: właścicielem %s nie jest %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "zmiana właściciela skrzynki pocztowej nie powiodła się"
+
+msgid "failed to rename mailbox"
+msgstr "zmiana nazwy skrzynki pocztowej nie powiodła się"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Użycie: vipw [opcje]\n"
+"\n"
+"Opcje:\n"
+"  -g, --group           edycja bazy group\n"
+"  -h, --help            wyświetlenie tego opisu i zakończenie działania\n"
+"  -p, --passwd          edycja bazy passwd\n"
+"  -q, --quiet           cichy tryb pracy\n"
+"  -s, --shadow          edycja bazy shadow lub gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: niepowiodło się porzucenie uprawnień (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s jest niezmieniony\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Nie można zablokować pliku"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Nie można zablokować pliku"
+
+msgid "Couldn't make backup"
+msgstr "Nie można wykonać kopii zapasowej"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: nie można odzyskać %s: %s (twoje zmiany są w %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: faillog [opcje]\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ "  -a, --all             wyświetlaj rekordy failloga dla wszystkich "
+#~ "użytkowników\n"
+#~ "  -h, --help            wyświetlenie tego opisu i zakończenie działania\n"
+#~ "  -l, --lock-time SEK   ustaw na SEK sekund blokadę konta po nieudanym\n"
+#~ "                        logowaniu\n"
+#~ "  -m, --maximum MAX     ustaw maksymalną ilość niepoprawnych logowań na "
+#~ "MAX\n"
+#~ "  -r, --reset           wyzeruj licznik niepoprawnych logowań\n"
+#~ "  -t, --time DNI        wyświetlaj rekordy nie starsze niż DNI\n"
+#~ "  -u, --user LOGIN      wyświetlaj rekordy lub zarządzaj licznikami\n"
+#~ "                        i limitami faillog (w połaczeniu z opcjami -r,\n"
+#~ "                        -m lub -l) tylko dla użytkownika o loginie LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: groupadd [opcje] GRUPA\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ "  -f, --force                wymyś zakończenie programu z poprawnym\n"
+#~ "                             statusem jeżeli grupa już istnieje\n"
+#~ "  -g, --gid GID              użyj GID dla tworzonej grupy\n"
+#~ "  -h, --help                 wyświetlenie tego opisu i zakończenie "
+#~ "działania\n"
+#~ "  -K, --key KLUCZ=WARTOŚĆ    przysłoń wartość domyślną z /etc/login.defs\n"
+#~ "  -o, --non-unique           pozwól na utworzenie grupy z nieunikalnym "
+#~ "GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: groupmod [opcje] GRUPA\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ "  -g, --gid GID                 wymuś użycie nowego GID dla grupy GRUPA\n"
+#~ "  -h, --help                    wyświetlenie tego opisu i zakończenie "
+#~ "działania\n"
+#~ "  -n, --new-name NOWA_GRUPA     wymuś użycie nazwy grupy NOWA_GRUPA "
+#~ "zamiast\n"
+#~ "                                GRUPA\n"
+#~ "  -o, --non-unique              pozwól na utworzenie grupy z nieunikalnym "
+#~ "GID\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Użycie: useradd [opcje] LOGIN\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ "  -b, --base-dir KAT_BAZOWY     katalog bazowy dla katalogu domowego "
+#~ "nowo\n"
+#~ "                                tworzonego konta\n"
+#~ "  -c, --comment COMMENT         ustaw pole komentarza (GECOS) dla nowo\n"
+#~ "                                tworzonego konta\n"
+#~ "  -d, --home-dir KAT_DOMOWY     katalog domowy dla nowo tworzonego konta\n"
+#~ "  -D, --defaults                wypisz lub zapisz domyślną konfigurację\n"
+#~ "                                programu useradd\n"
+#~ "  -e, --expiredate DATA_WAŻN.   ustawia datę wazności dla nowo "
+#~ "tworzonego\n"
+#~ "                                konta na DATA_WAŻN.\n"
+#~ "  -f, --inactive NIEAKTYWNE     ustwia liczbę dni po których konto jest\n"
+#~ "                                blokowane na NIEAKTYWNE\n"
+#~ "  -h, --help                    wyświetlenie tego opisu i zakończenie\n"
+#~ "                                działania\n"
+#~ "  -g, --gid GROUP               wymuś użycie konkretnej grupy dla nowo\n"
+#~ "                                tworzonego konta\n"
+#~ "  -G, --groups GROUPS           lista dodatkowych grup dla nowo "
+#~ "tworzonego\n"
+#~ "                                konta\n"
+#~ "  -k, --skel SKEL_DIR           podaj alternatywną ścieżkę do katalogu "
+#~ "skel\n"
+#~ "  -K, --key KLUCZ=WARTOŚĆ       przysłoń wartość domyślną z /etc/login."
+#~ "defs\n"
+#~ "  -m, --create-home             twórz katalog domowy dla nowego "
+#~ "użytkownika\n"
+#~ "  -o, --non-unique              pozwól na utworzenie konta z nieunikalnym "
+#~ "UID\n"
+#~ "  -p, --password PASSWORD       użyj zakodowane hasło dla nowego "
+#~ "tworzonego\n"
+#~ "                                konta\n"
+#~ "  -s, --shell SHELL             tshell dla nowo tworzonego konta\n"
+#~ "  -u, --uid UID                 wymuś użycie konkretnego UID dla nowo\n"
+#~ "                                tworzonego konta\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Hasłu zaznaczone jako przeterminowane."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: nie można zablokować pliku z hasłami\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: nie można otworzyć pliku z hasłami\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: nie można zablokować pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: nie można przepisać pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: nie można przepisać pliku z hasłami\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: nie można zaktualizować pliku z hasłami\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: nie można zaktualizować pliku z ukrytymi hasłami\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tImię i nazwisko: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNumer pokoju: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelefon do pracy: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelefon domowy: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Nie można zablokować pliku z hasłami; spróbuj później.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Nie można otworzyć pliku z hasłami.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: nie znaleziono %s w /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Błąd podczas aktualizacji wpisu do bazy haseł.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Wprowadzenie zmian do pliku passwd jest niemożliwe.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Nie można usunąć blokady z pliku z hasłami.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: nie można zablokować pliku z grupami\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: nie można otworzyć pliku z grupami\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: nie można zablokować pliku gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: błąd podczas aktualizacji pliku z ukrytymi hasłami\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: błąd podczas aktualizacji wpisu grupy\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: linia %d: nieznana grupa %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: linia %d: nie można zaktualizować wpisu\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: nie można zablokować pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: błąd podczas aktualizacji pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: błąd podczas aktualizacji pliku z hasłami\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: linia %d: nieznany użytkownik %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: linia %d: nie można zaktualizować wpisu do bazy haseł\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: nieznany użytkownik\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Nieznany użytkownik: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Użycie: %s [-r|-R] grupa\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "        %s [-a użytkownik] grupa\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "        %s [-d użytkownik] grupa\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "        %s [-A użytkownik,...] [-M użytkownik,...] grupa\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "        %s [-M użytkownik,...] grupa\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: nie można zablokować\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: nie można zablokować pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: nie można otworzyć pliku\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: nie można przepisać pliku\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: nie można przepisać pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: nie można usunąć blokady z pliku\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: nie można zaktualizować wpisu\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: nie można zaktualizować wpisu do pliku z ukrytymi hasłami\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "nieznana grupa: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: nie można otworzyć pliku\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Kim jesteś?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: nieznany członek %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: błąd podczas dodawania nowej grupy\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: nie można przepisać pliku z grupami\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: nie można przepisać pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: nie można zablokować pliku z grupami\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: nie można otworzyć pliku z grupami\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: nie można zablokować pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u nie jest niepowtarzalny\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: błąd podczas usuwania grupy\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: błąd podczas usuwania wpisu z pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: nie można usunąć podstawowej grupy użytkowników.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Nie znaleziony członek grupy do usunięcia\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Tylko root może dodać członka do różnych grup\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Wymagane prawa dostępu do grupy\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Nie jesteś głównym właścicielem bieżącej grupy\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "Błąd uwierzytelniania przez PAM dla\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Nie można zablokować pliku z grupami\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Nie można otworzyć pliku z grupami\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Nie można zamknąć pliku z grupami\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: nie znaleziono %s w /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u nie jest niepowtarzalnym GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s nie jest niepowtarzalną nazwą\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: nie można przepisać pliku z hasłami\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: nie można zablokować pliku z hasłami\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: nie można otworzyć pliku z hasłami\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: nie można zablokować pliku %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr ""
+#~ "%s: nie można zaktualizować wpisu w pliku z ukrytymi hasłami dla %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: nie można zaktualizować wpisu dla grupy %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: nie można zablokować pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: nie można usunąć grupy %s z pliku ukrytych haseł grup\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: nie można zaktualizować pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: nie można zaktualizować pliku z grupami\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: nie można skasować pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "nieznany UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "nieznany GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: grupa %s nie istnieje\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: nieprawidłowa nazwa użytkownika '%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: nie można zablokować /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: nie można zablokować /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: nie można zablokować /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: nie można zablokować /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: nie można otworzyć plików\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: błąd podczas aktualizowania plików\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: linia %d: nie można znaleźć użytkownika %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: nie można zaktualizować wpisu w pliku z hasłami dla %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: nie można zablokować pliku z hasłami\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: nie można otworzyć pliku z hasłami\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: nie można usunąć wpisu z pliku z ukrytymi hasłami dla %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: nie można zaktualizować pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: nie można zaktualizować pliku z hasłami\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: nie można zaktualizować wpisu dla użytkownika %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: nie można skasować pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: nieznany GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: nieznana grupa %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: zabrakło pamięci w update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: nie można przepisać pliku z hasłami\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: nie można przepisać pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: nie można zablokować pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: błąd podczas blokowania pliku z grupami\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: błąd podczas otwierania pliku z grupami\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: błąd podczas blokowania pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: błąd podczas otwierania pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: błąd podczas dodawania nowego wpisu do pliku z hasłami\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr ""
+#~ "%s: błąd podczas dodawania nowego wpisu do pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: uwaga: CREATE_HOME nie jest obsługiwane, użyj opcji -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: błąd podczas aktualizacji wpisu grupy\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: błąd podczas aktualizacji wpisu grupy\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: nie można otworzyć pliku z grupami\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: nie można otworzyć pliku z ukrytymi hasłami grup\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: błąd podczas usuwania wpisu z pliku z hasłami\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: błąd podczas usuwania wpisu z pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: użytkownik %s nie istnieje\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: błąd podczas dodawania nowej grupy\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu nie jest niepowtarzalny\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: błąd podczas zmiany wpisu w pliku z hasłami\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: błąd podczas usuwania wpisu z pliku z hasłami\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: błąd podczas usuwania wpisu z pliku z ukrytymi hasłami\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: nie można uzyskać niepowtarzalnego GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " na '%.100s' z '%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " na '%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: linia %d: nie można utworzyć UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: nazwa %s nie jest niepowtarzalny\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Użycie: chgpasswd [opcje]\n"
+#~ "\n"
+#~ "Opcje:\n"
+#~ "  -e, --encrypted\tprzekazywane hasła są w postaci zakodowane\n"
+#~ "  -h, --help\t\twyświetlenie tego opisu i zakończenie działania\n"
+#~ "  -m, --md5\t\tużyj kodowania MD5 zamiast DES w przypadku kiedy "
+#~ "przekazywane\n"
+#~ "\t\t\thasła nie są zakodowane\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Brak pliku z hasłami\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Wybacz.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Wybacz, hasło dla %s nie może być jeszcze zmienione.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Wybacz."
diff --git a/po/pt.gmo b/po/pt.gmo
new file mode 100644 (file)
index 0000000..97ac945
Binary files /dev/null and b/po/pt.gmo differ
diff --git a/po/pt.po b/po/pt.po
new file mode 100644 (file)
index 0000000..5e5fa5f
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,2313 @@
+# Portuguese (Portugal) Translation Project (traduz@debianpt.org)
+# Nuno Sénica <njs@av.it.pt>, 2004
+# Miguel Figueiredo <elmig@debianpt.org>, 2005,2006, 2008, 2009
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2009-04-19 10:32+0100\n"
+"Last-Translator: Miguel Figueiredo <elmig@debianpt.org>\n"
+"Language-Team: Portuguese <traduz@debianpt.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Existem várias entradas chamadas '%s' em %s. Por favor corrija isto com pwck "
+"ou grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "método de encriptação não suportado por libcrypt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+"erro de configuração - não foi possível interpretar o valor de %s: '%s'"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Não foi possível alocar o espaço para a informação de configuração.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"erro de configuração - item '%s' desconhecido (notifique o administrador)\n"
+
+msgid "Password: "
+msgstr "Palavra-passe: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Palavra-passe de %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Aviso: grupo desconhecido %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Aviso: demasiados grupos\n"
+
+msgid "Your password has expired."
+msgstr "A sua palavra-passe caducou."
+
+msgid "Your password is inactive."
+msgstr "A sua palavra-passe está inactiva."
+
+msgid "Your login has expired."
+msgstr "O seu login caducou."
+
+msgid "  Contact the system administrator."
+msgstr "  Contacte o administrador do sistema."
+
+msgid "  Choose a new password."
+msgstr "  Escolha uma nova palavra-passe."
+
+msgid "You must change your password."
+msgstr "Tem de alterar a sua palavra-passe."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "A sua palavra-passe irá caducar em %ld dias.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "A sua palavra-passe irá caducar amanhã."
+
+msgid "Your password will expire today."
+msgstr "A sua palavra-passe irá caducar hoje."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Não é possível abrir o interface de auditoria - a abortar.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Foi impossível mudar o dono ou o modo do tty stdin: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: falha ao desbloquear %s\n"
+
+msgid "Environment overflow\n"
+msgstr "Overflow do ambiente\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Não pode alterar $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d falha desde o último login.\n"
+"O último foi %s em %s.\n"
+msgstr[1] ""
+"%d falhas desde o último login.\n"
+"O último foi %s em %s.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr ""
+"%s: Não foi possível obter um UID de sistema único (não existem mais UIDs "
+"disponíveis)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+"%s: Não foi possível obter um GID único (não existem mais GIDs disponíveis)\n"
+
+#, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr ""
+"%s: Não foi possível obter um UID de sistema único (não existem mais UIDs "
+"disponíveis)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+"%s: Não foi possível obter um UID único (não existem mais UIDs disponíveis)\n"
+
+msgid "Too many logins.\n"
+msgstr "Demasiados logins.\n"
+
+msgid "You have new mail."
+msgstr "Tem novo correio."
+
+msgid "No mail."
+msgstr "Não tem correio."
+
+msgid "You have mail."
+msgstr "Tem correio."
+
+msgid "no change"
+msgstr "sem alterações"
+
+msgid "a palindrome"
+msgstr "um palíndromo"
+
+msgid "case changes only"
+msgstr "apenas alteração de maiúsculas/minúsculas"
+
+msgid "too similar"
+msgstr "demasiado parecido"
+
+msgid "too simple"
+msgstr "demasiado simples"
+
+msgid "rotated"
+msgstr "rodado"
+
+msgid "too short"
+msgstr "demasiado curto"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Palavra-passe inválida: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() falhou, erro %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: Palavra-passe inalterada\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: a palavra-passe foi actualizada com sucesso\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Palavra-passe incorrecta para %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Valor inválido de ENCRYPT_METHOD: '%s'.\n"
+"A utilizar o valor predefinido DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Não foi possível mudar para o directório '%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Directório não encontrado, a entrar para HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Não foi possível executar %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Directório raiz inválido '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Não é possível mudar o directório raiz para '%s'\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Não é possível determinar o nome do seu tty."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: memória esgotada\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "O malloc(%d) falhou\n"
+
+msgid "No"
+msgstr "Não"
+
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Utilização: chage [opções] [LOGIN]\n"
+"\n"
+"Opções:\n"
+"  -d, --lastday ÚLTIMO_DIA      definir data da última alteração da\n"
+"\t\t\t\t palavra-passe para ÚLTIMO_DIA\n"
+"  -E, --expiredate DATA_EXPIRA  definir a data em que a conta caduca\n"
+"\t\t\t\t para DATA_EXPIRA  -h, --help                    mostrar esta "
+"mensagem de ajuda e sair\n"
+"  -I, --inactive INACTIVO       definir a palavra-passe como inactiva após\n"
+"\t\t\t\t expirar em INACTIVO\n"
+"  -l, --list                    mostrar informação de envelhecimento da \n"
+"                                conta\n"
+"  -m, --mindays MIN_DIAS        definir para MIN_DIAS o número mínimo de\n"
+"                                dias para alterar a palavra-passe\n"
+"  -M, --maxdays MAX_DIAS        definir para MAX_DIAS o número máximo de\n"
+"                                dias para alterar a palavra-passe\n"
+"  -W, --warndays DIAS_AVISO     definir para DIAS_AVISO o número de dias\n"
+"                                para aviso de caducar\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Introduza o novo valor, ou carregue em ENTER para o valor pré-definido"
+
+msgid "Minimum Password Age"
+msgstr "Idade Mínima da palavra-passe"
+
+msgid "Maximum Password Age"
+msgstr "Idade Máxima da palavra-passe"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Última Alteração da palavra-passe (AAAA-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Aviso de Caducidade da palavra-passe"
+
+msgid "Password Inactive"
+msgstr "Palavra-passe Inactiva"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data de Caducidade da Conta (AAAA-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Última alteração da palavra-passe\t\t\t\t\t: "
+
+msgid "never"
+msgstr "nunca"
+
+msgid "password must be changed"
+msgstr "a palavra-passe tem de ser alterada"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "A palavra-passe caduca em\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Palavra-passe inactiva\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "A conta caduca\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Número mínimo de dias entre alterações da palavra-passe\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Número máximo de dias entre alterações de palavra-passe\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Número de dias de aviso antes da palavra-passe caducar\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: a data '%s' é inválida\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argumento numérico inválido '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: não incluir \"l\" com outras flags\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Permissão negada.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Não é possível determinar o seu nome de utilizador.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: A autenticação PAM falhou\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: não é possível bloquear %s, tente novamente mais tarde\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: não é possível abrir %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: falha ao escrever as alterações em %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: falhou a preparação para a nova %s entrada '%s'\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: o ficheiro de palavras-passe shadow não está presente\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: falhou baixar privilégios (%s)\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: o utilizador `%s' não existe em %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "A alterar a informação de envelhecimento para %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: erro na alteração de campos\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Utilização: %s [-f nome_completo] [-r num_sala] [-w telefone_trabalho]\n"
+"\t[-h telefone_casa] [-o outra_info] [utilizador]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Utilização: %s [-f nome_completo] [-r num_sala] [-w telefone_trabalho] [-h "
+"telefone_casa]\n"
+
+msgid "Full Name"
+msgstr "Nome Completo"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Número da Sala"
+
+msgid "Work Phone"
+msgstr "Telefone do Emprego"
+
+msgid "Home Phone"
+msgstr "Telefone de Casa"
+
+msgid "Other"
+msgstr "Outra Informação"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Não é possível alterar o ID para root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: nome com caracteres não-ASCII: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nome inválido: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: número da sala com caracteres não-ASCII: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: número de sala inválido: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: telefone do emprego inválido: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: telefone de casa inválido: '%s'\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' contém caracteres não-ASCII\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' contém caracteres não permitidos.\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: o utilizador '%s' não existe\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: não é possível alterar o utilizador '%s' no cliente NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' é o mestre NIS para este cliente.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "A alterar a informação de utilizador de %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: valores demasiado grandes\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Utilização: %s [opções]\n"
+"\n"
+"Opções:\n"
+"  -c, --crypt-method            o método de encriptação (um de %s)\n"
+"  -e, --encrypted               as palavras-passe fornecidas são "
+"encriptadas\n"
+"  -h, --help                    mostrar esta mensagem de ajuda e terminar\n"
+"  -m, --md5                     encriptar a palavra-passe de texto com o\n"
+"\t\t\t\t algoritmo MD5\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds              número de iterações SHA para algoritmos\n"
+"                                de encriptação SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: a flag %s só é permitida com a flag %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: as flags -c, -e e -m são exclusivas\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: método de encriptação não suportado: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linha %d: linha demasiado comprida\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linha %d: falta a nova palavra-passe\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: linha %d: o grupo '%s' não existe\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linha %d: falhou preparar o novo %s registo '%s'\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: foi detectado um erro, as alterações foram ignoradas\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -s, --sha-rounds              número de iterações SHA para algoritmos\n"
+"                                de encriptação SHA*\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: user '%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: linha %d: o utilizador '%s' não existe\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: linha %d: o utilizador '%s' não existe\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Utilização: chsh [opções] [LOGIN]\n"
+"\n"
+"Opções:\n"
+"  -h, --help                    mostrar esta mensagem de ajuda e sair\n"
+"  -s, --shell SHELL             nova shell de login para a conta do\n"
+"                                utilizador\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Shell de Login"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Não pode alterar a shell para '%s'.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "A alterar a shell de entrada de %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Entrada inválida: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s: %s é uma shell inválida.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Utilização: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+"  -Z, --selinux-user\t\t novo mapeamento de utilizador SELinux para a conta "
+"do utilizador\n"
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to get the entry for UID %d\n"
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr "faillog: Falhou obter a entrada para UID %d\n"
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Login       Falhas   Máximo  Última                   Em\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [faltam %lus]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds bloqueio]"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to reset fail count for UID %d\n"
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr "faillog: Falhou reiniciar a contagem de falhas para o UID %d\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set max for UID %d\n"
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr "faillog: Falhou definir o máximo para UID %d\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set locktime for UID %d\n"
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr "faillog: Falhou definir a hora de bloqueio para UID %d\n"
+
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "lastlog: Utilizador ou gama desconhecida: %s\n"
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "faillog: Não é possível abrir %s: %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr "faillog: Não foi possível obter o tamanho de %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+"Utilização: %s [opção] GRUPO\n"
+"\n"
+"Opções:\n"
+"  -a, --add UTILIZADOR\t\tacrescentar UTILIZADOR ao GRUPO\n"
+"  -d, --delete UTILIZADOR\tremover UTILIZADOR do GRUPO\n"
+"  -r, --remove-password\tremover a palavra-passe do GRUPO\n"
+"  -R, --restrict\t\trestringir o acesso ao GRUPO aos seus membros\n"
+"  -M, --members UTILIZADOR,...\tdefinir a lista de membros do GRUPO\n"
+"%s\n"
+"\n"
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"  -A, --administrators ADMIN,...\n"
+"\t\t\t\tdefinir a lista de administradores do GRUPO\n"
+"Excepto para as opções -A e -M, as opções não podem ser combinadas.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "As opções não podem ser combinadas.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: são necessárias palavras-passe shadow de grupo para -A\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: o grupo '%s' não existe em %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: falha ao fechar %s de apenas leitura\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "A alterar a palavra-passe para o grupo %s\n"
+
+msgid "New Password: "
+msgstr "Nova Palavra-passe: "
+
+msgid "Re-enter new password: "
+msgstr "Introduza novamente a nova palavra-passe: "
+
+msgid "They don't match; try again"
+msgstr "Não coincidem; tente de novo"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Tente de novo mais tarde\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "A adicionar o utilizador %s ao grupo %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "A remover o utilizador %s do grupo %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: o utilizador '%s' não é membro de '%s'\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Não é um tty\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -s, --sha-rounds              número de iterações SHA para algoritmos\n"
+"                                de encriptação SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+"  -Z, --selinux-user\t\t novo mapeamento de utilizador SELinux para a conta "
+"do utilizador\n"
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds              número de iterações SHA para algoritmos\n"
+"                                de encriptação SHA*\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+"  -Z, --selinux-user\t\t novo mapeamento de utilizador SELinux para a conta "
+"do utilizador\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: '%s' não é um nome válido para o grupo\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: ID de grupo '%s' inválido\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K necessita de KEY=VALOR\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: o grupo '%s' já existe\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: o GID '%lu' já existe\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Utilização: groupdel grupo\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: não é possível remover a entrada '%s' de %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: não é possível remover o grupo primário do utilizador '%s'\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: o grupo '%s' não existe.\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: o grupo '%s' é um grupo NIS\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s é o mestre NIS\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: o utilizador '%s' já é um membro de '%s'\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Memória esgotada. Não é possível actualizar %s.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+"Utilização: groupmems [opções] [acção]\n"
+"\n"
+"Opções:\n"
+"  -g, --group nomegrupo\tmudar nomegrupo em vez do grupo do utilizador\n"
+"\t\t\t\t(apenas root)\n"
+"\n"
+"Acções:\n"
+"  -a, --add nomeutilizador\tacrescentar nomeutilizador aos membros do grupo\n"
+"  -d, --delete nomeutilizador\tremover nomeutilizador dos membros do grupo\n"
+"  -p, --purge\t\t\tpurgar todos os membros do grupo\n"
+"  -l, --list\t\t\tlistar todos os membros do grupo\n"
+"\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: o seu nome de grupo não coincide com o seu nome de utilizador\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: apenas o root pode utilizar a opção -g/--group\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+"  -Z, --selinux-user\t\t novo mapeamento de utilizador SELinux para a conta "
+"do utilizador\n"
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: nome de grupo '%s' inválido\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: o grupo %s é um grupo NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: utilizador desconhecido %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Utilização: %s [-r] [-s] [grupo [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Utilização: %s [-r] [-s] [grupo]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s e -r são incompatíveis\n"
+
+msgid "invalid group file entry"
+msgstr "entrada no ficheiro dos grupos inválida"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "apagar a linha '%s'? "
+
+msgid "duplicate group entry"
+msgstr "entrada de grupo duplicada"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "o nome de grupo '%s' é inválido\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "ID '%lu' de grupo é inválido\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupo %s: não existe o utilizador %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "apagar o membro '%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "nenhuma entrada coincidente de ficheiro de grupo em %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "adicionar o grupo '%s' em %s? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "a entrada no ficheiro de shadow dos grupos é inválida"
+
+msgid "duplicate shadow group entry"
+msgstr "entrada de grupo em shadow duplicada"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grupo shadow %s: nenhum utilizador administrador %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "apagar o membro administrativo '%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grupo shadow %s: o utilizador %s não existe\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: os ficheiros foram actualizados\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: sem alterações\n"
+
+msgid "Usage: grpconv\n"
+msgstr "Utilização: grpconv\n"
+
+msgid "Usage: grpunconv\n"
+msgstr "Utilização: grpunconv\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: não é possível apagar %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Utilização: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Utilização: id\n"
+
+msgid " groups="
+msgstr " grupos="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Utilização: lastlog [opções]\n"
+"\n"
+"Opções:\n"
+"  -b, --before DIAS             escrever apenas registos de lastlog mais\n"
+"                                antigos que DIAS\n"
+"  -h, --help                    mostrar esta mensagem e sai\n"
+"  -t, --time DIAS               escrever apenas registos de lastlog mais\n"
+"                                recentes que DIAS\n"
+"  -u, --user LOGIN              mostra o registo de lastlog para o\n"
+"                                utilizador LOGIN\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "lastlog: Failed to get the entry for UID %d\n"
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr "lastlog: Falhou obter a entrada para UID %d\n"
+
+msgid "Username         Port     From             Latest"
+msgstr "Utilizador       Porto    De               Último"
+
+msgid "Username                Port     Latest"
+msgstr "Utilizador              Porto     Último"
+
+msgid "**Never logged in**"
+msgstr "**Nunca entrou no sistema**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: argumento inesperado: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr "lastlog: Não conseguiu obter o tamanho de %s: %s\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Utilização: %s [-p] [nome]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "            %s [-p] [-h máquina] [-f nome]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "            %s [-p] -r máquina\n"
+
+#, fuzzy, c-format
+#| msgid "configuration error - cannot parse %s value: '%s'"
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+"erro de configuração - não foi possível interpretar o valor de %s: '%s'"
+
+msgid "Invalid login time"
+msgstr "Tempo de login inválido"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistema encerrado para manutenção de rotina"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Encerramento ultrapassado -- login de root permitido.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Tempo de login caducou após %d segundos de inactividade.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Sem entrada utmp.  Tem de executar \"login\" a partir do \"sh\" de nível "
+"mais baixo"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Falha de PAM, a abortar: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Número máximo de tentativas excedidas (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: abortar pedido por PAM\n"
+
+msgid "Login incorrect"
+msgstr "Login incorrecto"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: falha ao bifurcar: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSTTY falhou em %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Aviso: o login foi novamente permitido após um tempo de bloqueio."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Última entrada no sistema: %s em %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Última entrada no sistema: %.19s em %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " de %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"tempo para login excedido\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Utilização: logoutd\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Utilização: newgrp [-] [grupo]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Utilização: sg grupo [[-c] comando]\n"
+
+msgid "Invalid password.\n"
+msgstr "Palavra-passe inválida.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: falhou a bifurcação de: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: o GID '%lu' não existe\n"
+
+msgid "too many groups\n"
+msgstr "demasiados grupos\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+"  -Z, --selinux-user\t\t novo mapeamento de utilizador SELinux para a conta "
+"do utilizador\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: o grupo '%s' é um grupo shadow, mas não existe em /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ID '%s' de utilizador inválido\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: o nome de utilizador '%s' é inválido\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linha %d: linha inválida\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: não é possível actualizar a entrada do utilizador %s (não está na base "
+"de dados passwd)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linha %d: não é possível criar o utilizador\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linha %d: não é possível criar o grupo\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: linha %d: o utilizador '%s' não existe em %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linha %d: não é possível actualizar a palavra-passe\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linha %d: mkdir %s falhou: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linha %d: chown %s falhou: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linha %d: não é possível actualizar o registo\n"
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Utilização: passwd [opções] [LOGIN]\n"
+"\n"
+"Opções:\n"
+"  -a, --all                     reportar o estado das palavras-passe de\n"
+"                                todas as contas\n"
+"  -d, --delete                  apagar a palavra-passe para a conta "
+"indicada\n"
+"  -e, --expire                  forçar que a palavra-passe caduque para a\n"
+"\t\t\t\t conta indicada\n"
+"  -h, --help                    mostrar esta mensagem de ajuda e sair\n"
+"  -k, --keep-tokens             apenas mudar a palavra-passe se tiver\n"
+"\t\t\t\t caducado\n"
+"  -i, --inactive INACTIVA       definir a palavra-passe como inactiva após\n"
+"\t\t\t\t caducar para INACTIVA\n"
+"  -l, --lock                    bloquear a palavra-passe da conta indicada\n"
+"  -n, --mindays MIN_DIAS        definir para MIN_DIAS o número de dias\n"
+"                                antes de alterar a palavra-passe\n"
+"  -q, --quiet                   modo discreto\n"
+"  -r, --repository REPOSITÓRIO  mudar a palavra-passe no repositório\n"
+"\t\t\t\t REPOSITÓRIO\n"
+"  -S, --status                  reportar estado da palavra-passe na conta\n"
+"                                indicada\n"
+"  -u, --unlock                  desbloquear a palavra-passe da conta\n"
+"\t\t\t\t indicada\n"
+"  -w, --warndays AVISAR_DIAS    definir para AVISAR_DIAS o número de dias\n"
+"                                para alerta de caducar\n"
+"  -x, --maxdays MAX_DIAS        definir para MAX_DIAS o número de dias\n"
+"                                máximo antes de alterar a palavra-passe\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Palavra-passe antiga: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduza a nova palavra-passe (mínimo de %d caracteres)\n"
+"Por favor utilize uma combinação de letras maiúsculas e minúsculas e de "
+"números.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduza a nova palavra-passe (mínimo de %d, máximo de %d caracteres)\n"
+"Por favor utilize um combinação de letras maiúsculas e minúsculas e de "
+"números.\n"
+
+msgid "New password: "
+msgstr "Nova palavra-passe: "
+
+msgid "Try again."
+msgstr "Tente de novo."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Aviso: palavra-passe fraca (introduza-a de novo para usá-la mesmo assim)."
+
+msgid "They don't match; try again.\n"
+msgstr "Não coincidem; tente de novo.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "A palavra-passe para %s não pode ser alterada.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "A palavra-passe para %s ainda não pode ser alterada.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: desbloquear a palavra-passe iria resultar numa conta sem palavra-passe.\n"
+"Você deve definir a palavra-passe com usermod -p para desbloquear a palavra-"
+"passe desta conta.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: o repositório %s não é suportado\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr "%s: %s não está autorizado a alterar a palavra-passe de %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Não pode ver ou alterar a informação da palavra-passe para %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "A alterar a palavra-passe de %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "A palavra-passe de %s não foi alterada.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Palavra-passe alterada."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Aviso de Caducidade da palavra-passe"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Utilização: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s e -r são incompatíveis\n"
+
+msgid "invalid password file entry"
+msgstr "entrada no ficheiro de palavras-passe inválida"
+
+msgid "duplicate password entry"
+msgstr "entrada de palavra-passe duplicada"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "o nome de utilizador '%s' é inválido\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "ID '%lu' de utilizador inválido\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "utilizador '%s': grupo %lu não existe\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "utilizador '%s': o directório '%s' não existe\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "utilizador '%s': o programa '%s' não existe\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "nenhuma entrada de ficheiro de palavra-passe coincidente em %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "acrescentar utilizador '%s' em %s?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "entrada no ficheiro de shadow de palavras-passe inválida"
+
+msgid "duplicate shadow password entry"
+msgstr "entrada da palavra-passe shadow duplicada"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "utilizador %s: a última alteração de palavra-passe foi no futuro\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: não é possível ordenar registos em %s\n"
+
+msgid "Usage: pwconv\n"
+msgstr "Utilização: pwconv\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: falhou mudar o modo de %s para 0600\n"
+
+msgid "Usage: pwunconv\n"
+msgstr "Utilização: pwunconv\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Acesso a su para essa conta foi NEGADO.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Autenticação por palavra-passe foi contornada.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Por favor introduza a SUA palavra-passe como autenticação.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Utilização: su [opções] [LOGIN]\n"
+"\n"
+"Opções:\n"
+"  -c, --command COMANDO         passar COMANDO à shell invocada\n"
+"  -h, --help                    mostrar esta mensagem de ajuda e sair\n"
+"  -, -l, --login                tornar a shell numa shell de login\n"
+"  -m, -p,\n"
+"  --preserve-environment        não reiniciar as variáveis de ambiente, e\n"
+"                                manter a mesma shell\n"
+"  -s, --shell SHELL             utilizar SHELL em vez da omissão em passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: deve ser executado a partir de um terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: erro %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Id desconhecido: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Não está autorizado a fazer su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Introduza a sua palavra-passe)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorado)\n"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: A autenticação falhou\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Não está autorizado a fazer su nessa altura\n"
+
+msgid "No shell\n"
+msgstr "Sem shell\n"
+
+msgid "No password file"
+msgstr "Ficheiro de palavras-passe não existe"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY falhou"
+
+msgid "No password entry for 'root'"
+msgstr "Não está definida nenhuma palavra-passe para 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Pressione control-d para continuar com o arranque normal,\n"
+"(ou introduza a palavra-passe de root para manutenção do sistema):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "A Entrar no Modo de Manutenção do Sistema"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: a configuração %s em %s será ignorada\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+"%s: não é possível criar um novo ficheiro de configurações pré-definidas\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+"%s: não é possível abrir um novo ficheiro de configurações pré-definidas\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linha %d: chown %s falhou: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: renomear: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: o grupo '%s' é um grupo NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: estão especificados demasiados grupos (max %d).\n"
+
+#, c-format
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds              número de iterações SHA para algoritmos\n"
+"                                de encriptação SHA*\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              número de iterações SHA para algoritmos\n"
+"                                de encriptação SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              número de iterações SHA para algoritmos\n"
+"                                de encriptação SHA*\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds              número de iterações SHA para algoritmos\n"
+"                                de encriptação SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+"  -Z, --selinux-user\t\t novo mapeamento de utilizador SELinux para a conta "
+"do utilizador\n"
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds              número de iterações SHA para algoritmos\n"
+"                                de encriptação SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -s, --sha-rounds              número de iterações SHA para algoritmos\n"
+"                                de encriptação SHA*\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+"  -Z, --selinux-user\t\t novo mapeamento de utilizador SELinux para a conta "
+"do utilizador\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+"  -Z, --selinux-user\t\t novo mapeamento de utilizador SELinux para a conta "
+"do utilizador\n"
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+"  -Z, --selinux-user SEUSER\t utilizar um SELUSER especifico para o \t\t\t\t "
+"mapeamento do utilizador de SELinux\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: directório base inválido '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: o comentário '%s' é inválido\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: o directório home '%s' é inválida\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: são necessárias palavras-passe shadow para -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: são necessárias palavras-passes shadow para -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: o campo '%s' é inválido\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: a shell '%s' é inválida\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: -Z necessita de um kernel com SELinux activo\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: conflito entre as opções %s e %s\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: falhou apagar o registo faillog para o UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: falhou apagar o registo lastlog para o UID %lu: %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: aviso: falhou o mapeamento do nome de utilizador %s para o nome de "
+"utilizador SELinux %s.\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: não é possível criar o directório %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Criar ficheiro mailbox"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Não foi encontrado o grupo 'mail'.\n"
+"A criar o ficheiro mailbox do utilizador com o modo 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "A definir as permissões do ficheiro mailbox"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: o utilizador '%s' já existe\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: o grupo %s existe - se pretende adicionar este utilizador a esse grupo, "
+"utilize -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: não é possível criar o utilizador\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu não é único\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: não é possível criar grupo\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: aviso: o directório home já existe.\n"
+"Não irá copiar quaisquer ficheiros o directório skel para lá.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Utilização: userdel [opções] LOGIN\n"
+"\n"
+"Opções:\n"
+"  -f, --force                   forçar a remoção de ficheiros,\n"
+"                                mesmo que não pertençam ao utilizador\n"
+"  -h, --help                    mostrar esta mensagem de ajuda e sair\n"
+"  -r, --remove                  remover o directório home e o spool de mail\n"
+"\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: o grupo %s é o grupo primário de outro utilizador e não é removido.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove %s: %s"
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: aviso: não é possível remover %s: %s"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: o %s não pertence a %s, não será removido\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: o utilizador %s é um utilizador NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: o utilizador %s está actualmente no sistema\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: o directório home '%s' é inválida\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: o directório %s não será removido (iria remover a home do utilizador %"
+"s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: erro ao remover o directório %s\n"
+
+#, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Utilização: usermod [opções] LOGIN\n"
+"\n"
+"Opções:\n"
+"  -c, --comment COMENTÁRIO      novo valor do campo GECOS\n"
+"  -d, --home HOME_DIR           novo directório home para a conta do\n"
+"                                utilizador\n"
+"  -e, --expiredate DATA_EXPIRAR definir a data em que a conta caduca\n"
+"                                para DATA_EXPIRAR\n"
+"  -f, --inactive INACTIVA       definir para INACTIVA o número de dias após\n"
+"                                os quais uma palavra-passe caducada passa\n"
+"                                a inactiva\n"
+"  -g, --gid GRUPO               forçar a utilização do GRUPO como novo\n"
+"                                grupo primário\n"
+"  -G, --groups GRUPOS           nova lista de grupos adicionais\n"
+"  -a, --append                  juntar o utilizador aos GRUPOS\n"
+"\t\t\t\t suplementares mencionados pela opção -G\n"
+"\t\t\t\t sem o/a remover dos outros grupos\n"
+"  -h, --help                    mostrar esta mensagem de ajuda e sair\n"
+"  -l, --login NEW_LOGIN         novo valor para o nome de login\n"
+"  -L, --lock                    bloquear a conta do utilizador\n"
+"  -m, --move-home               mover o conteúdo do directório home para\n"
+"                                o novo local (usar apenas com -d)\n"
+"  -o, --non-unique              permitir utilizar UID duplicado\n"
+"\t\t\t\t (não único)\n"
+"  -p, --password PALAVRA-PASSE  utilizar PALAVRA-PASSE encriptada para a\n"
+"                                nova palavra-passe\n"
+"  -s, --shell SHELL             nova shell de login para a conta do\n"
+"\t\t\t\t utilizador\n"
+"  -u, --uid UID                 novo UID para a conta do utilizador\n"
+"  -U, --unlock                  desbloquear a conta do utilizador\n"
+"%s\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+"  -Z, --selinux-user\t\t novo mapeamento de utilizador SELinux para a conta "
+"do utilizador\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: desbloquear a palavra-passe do utilizador iria resultar numa conta sem "
+"palavra-passe.\n"
+"Você deve definir a palavra-passe com usermod -p para desbloquear a  palavra-"
+"passe deste utilizador.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: o utilizador %s já existe em %s\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: não foram especificadas flags\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: são necessárias palavras-passe shadow para -e e -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: as flags -L, -p e -U são exclusivas\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: O UID '%lu' já existe\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: o directório %s existe\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: não é possível criar %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: não é possível efectuar o chown a %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: aviso: falhou remover completamente remover o antigo directório home %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: não é possível renomear o directório %s para %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: falhou copiar o registo lastlog do utilizador %lu para o utilizador %lu: "
+"%s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: falhou copiar o registo faillog do utilizador %lu para o utilizador %lu: "
+"%s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: aviso: o %s não pertence a %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "a alteração do dono da caixa de correio falhou"
+
+msgid "failed to rename mailbox"
+msgstr "falha ao renomear a caixa do correio"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Você alterou %s.\n"
+"Poderá ter de modificar %s para manter a consistência.\n"
+"Por favor utilize o comando '%s' para o fazer.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Utilização: vipw [opções]\n"
+"  -g, --group                   editar a base de dados group\n"
+"  -h, --help                    mostrar esta mensagem de ajuda e terminar\n"
+"  -p, --passwd                  editar a base de dados passwd\n"
+"  -q, --quit                    modo silencioso\n"
+"  -s, --shadow                  editar a base de dados shadow ou gshadow\n"
+"\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: falhou remover %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s não foi alterado\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Não é possível obter acesso exclusivo ao ficheiro"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Não é possível obter acesso exclusivo ao ficheiro"
+
+msgid "Couldn't make backup"
+msgstr "Não é possível efectuar cópia de segurança"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: não é possível restaurar %s: %s (a suas alterações estão em %s)\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: faillog [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ "  -a, --all                     mostrar os registos de faillog para "
+#~ "todos\n"
+#~ "                                os utilizadores\n"
+#~ "  -h, --help                    mostrar esta mensagem de ajuda e sair\n"
+#~ "  -l, --lock-time SEG           após login falhado bloquear conta por\n"
+#~ "                                SEG segundos\n"
+#~ "  -m, --maximum MAX             definir contadores de máximo de logins\n"
+#~ "                                falhados para MAX\n"
+#~ "  -r, --reset                   esvaziar os contadores de login falhados\n"
+#~ "  -t, --time DIAS               mostrar registos do faillog mais "
+#~ "recentes\n"
+#~ "                                do que DIAS\n"
+#~ "  -u, --user LOGIN              mostra o registo de faillog ou "
+#~ "contadores\n"
+#~ "\t\t\t\t de falhas mantidos e limites (se utilizado\n"
+#~ "\t\t\t\t com as opções -r, -m ou -l) apenas para o\n"
+#~ "                                utilizador com LOGIN\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: groupadd [opções] GRUPO\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ "  -f, --force                   forçar sair com estado de sucesso se o\n"
+#~ "                                grupo especificado já existir\n"
+#~ "  -g, --gid GID                 utilizar GID para o novo grupo\n"
+#~ "  -h, --help                    mostrar esta mensagem de ajuda e sair\n"
+#~ "  -k, --key KEY=VALOR           ultrapassar os valores pré-definidos em\n"
+#~ "                                /etc/login.defs\n"
+#~ "  -o, --non-unique              permitir criar grupo com GID duplicado\n"
+#~ "                                (não-único)\n"
+#~ "  -p, --password PALAVRA-PASSE  utilizar a palavra-passe encriptada para "
+#~ "o\n"
+#~ "                                novo grupo\n"
+#~ "  -r, --system                  criar uma conta de sistema\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilização: groupmod [opções] GRUPO\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ "  -g, --gid GID                 forçar utilizar novo GID pelo GRUPO\n"
+#~ "  -h, --help                    mostrar esta mensagem de ajuda e sair\n"
+#~ "  -n, --new-name NOVO_GRUPO     forçar utilizar NOVO_GRUPO pelo GRUPO\n"
+#~ "  -o, --non-unique              permitir utilizar, pelo GRUPO, GIDs\n"
+#~ "                                duplicados (não-únicos)\n"
+#~ "  -p, --password PALAVRA-PASSE  utilizar palavra-passe encriptada para a\n"
+#~ "                                nova palavra-passe\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Utilização: useradd [opções] LOGIN\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ "  -b, --base-dir BASE_DIR       directório base para o directório home\n"
+#~ "                                da conta do novo utilizador\n"
+#~ "  -c, --comment COMENTÁRIO      define o campo GECOS para a conta do "
+#~ "novo\n"
+#~ "                                utilizador\n"
+#~ "  -d, --home-dir HOME_DIR       directório home para a conta do novo\n"
+#~ "                                utilizador\n"
+#~ "  -D, --defaults                mostrar ou gravar a configuração\n"
+#~ "                                pré-definida alterada do useradd\n"
+#~ "  -e, --expiredate EXPIRE_DATE  define para EXPIRE_DATE a data de \t\t\t"
+#~ "\t caducidade da conta\n"
+#~ "  -f, --inactive INACTIVA       definir para INACTIVA o número de dias "
+#~ "após\n"
+#~ "                                os quais uma palavra-passe caducada "
+#~ "passa\n"
+#~ "                                a inactiva\n"
+#~ "  -g, --gid GRUPO               forçar a utilização do GRUPO para a "
+#~ "conta\n"
+#~ "\t\t\t\t do novo utilizador\n"
+#~ "  -G, --groups GRUPOS           listar grupos adicionais para a conta\n"
+#~ "                                do novo utilizador\n"
+#~ "  -h, --help                    mostrar esta mensagem de ajuda e sair\n"
+#~ "  -k, --skel SKEL_DIR           especificar um directório SKEL "
+#~ "alternativo\n"
+#~ "  -K, --key KEY=VALUE           ultrapassar as pré-definições de\n"
+#~ "\t\t\t\t /etc/login.defs\n"
+#~ "  -l, --no-log-init             não acrescentar o utilizador às bases de\n"
+#~ "                                dados lastlog e faillog\n"
+#~ "  -m, --create-home             criar directório home para a conta\n"
+#~ "                                do novo utilizador\n"
+#~ "  -M, no-create-home\t\t não criar o directório home para o\n"
+#~ "\t\t\t \t utilizador (ultrapassa /etc/login.defs)\n"
+#~ "  -o, --non-unique              deixar criar utilizador com UID "
+#~ "duplicado\n"
+#~ "                                (não-único)\n"
+#~ "  -p, --password PALAVRA-PASSE  utilizar palavra-passe encriptada para a\n"
+#~ "                                conta do novo utilizador\n"
+#~ "  -r, --system                  criar uma conta de sistema\n"
+#~ "  -s, --shell SHELL             shell de login para a conta do novo\n"
+#~ "\t\t\t\t utilizador\n"
+#~ "  -u, --uid UID                 forçar a utilização do UID para a conta\n"
+#~ "\t\t\t\t do novo utilizador\n"
+#~ "  -U, --user-group              criar um grupo com o mesmo nome do\n"
+#~ "\t\t\t\t utilizador\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Utilização: %s [opções] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            o método de encriptação (um de %s)\n"
+#~ "  -r, --system                  criar contas de sistema\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Palavra-passe definida para caducar."
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
new file mode 100644 (file)
index 0000000..7196671
Binary files /dev/null and b/po/pt_BR.gmo differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644 (file)
index 0000000..67e2085
--- /dev/null
@@ -0,0 +1,2757 @@
+# Brazilian Portuguese translation of Debian's shadow package.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# André Luís Lopes <andrelop@debian.org>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.15\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2008-03-20 12:40-0300\n"
+"Last-Translator: leoblink182 <leorock182@gmail.com>\n"
+"Language-Team: Debian-BR Project <debian-l10n-portuguese@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Cadastro de nome multiplos '%s' in %s. Por Favor conserte-o com pwck ou "
+"grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "metodo de encriptacao não suportado por libcrypt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Não foi possível alocar espaço para a informação de configuração.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"erro de configuração - item '%s' desconhecido (notifique o administrador)\n"
+
+msgid "Password: "
+msgstr "Senha : "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Senha de %s : "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Aviso : grupo desconhecido %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Aviso : muitos grupos\n"
+
+msgid "Your password has expired."
+msgstr "Sua senha expirou."
+
+msgid "Your password is inactive."
+msgstr "Sua senha está inativa."
+
+msgid "Your login has expired."
+msgstr "Seu login expirou."
+
+msgid "  Contact the system administrator."
+msgstr "  Entre em contato com o adminisrador do sistema."
+
+msgid "  Choose a new password."
+msgstr "  Escolha uma nova senha."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Sua senha irá expirar em %ld dias.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Sua senha irá expirar amanhã."
+
+msgid "Your password will expire today."
+msgstr "Sua senha irá expirar hoje."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Não foi possível mudar tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s : campos muito extensos\n"
+
+msgid "Environment overflow\n"
+msgstr "Overflow de ambiente\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Você não pode mudar $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d falhas desde o último login.\n"
+"O último foi %s em %s.\n"
+msgstr[1] ""
+"%d falhas desde o último login.\n"
+"O último foi %s em %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s : não foi possível obter UID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s : não foi possível obter GID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s : não foi possível obter UID único\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s : não foi possível obter UID único\n"
+
+msgid "Too many logins.\n"
+msgstr "Muitos logins.\n"
+
+msgid "You have new mail."
+msgstr "Você possui novas mensagens."
+
+msgid "No mail."
+msgstr "Sem mensagens."
+
+msgid "You have mail."
+msgstr "Você possui mensagens."
+
+msgid "no change"
+msgstr "nenhuma mudança"
+
+msgid "a palindrome"
+msgstr "um palíndromo"
+
+msgid "case changes only"
+msgstr "mudanças de caixa somente"
+
+msgid "too similar"
+msgstr "muito similar"
+
+msgid "too simple"
+msgstr "muito simples"
+
+msgid "rotated"
+msgstr "rotacionado"
+
+msgid "too short"
+msgstr "muita pequena"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Senha ruim : %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd : pam_start() falhou, erro %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd : %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Senha modificada."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: senha atualizada com sucesso\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Senha incorreta para %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"inválido ENCRYPT_METHOD valor: '%s'.\n"
+"falta de DES.\n"
+
+#, fuzzy, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Não foi possível entrar em \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Sem diretório pessoal, logando com HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Não foi possível executar %s"
+
+#, fuzzy, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Diretório raíz \"%s\" inválido\n"
+
+#, fuzzy, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Não foi possível mudar o diretório raíz para \"%s\"\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Não foi possível determinar o nome de seu tty."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s : sem memória\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) falhou\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Não\n"
+
+#, fuzzy
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Uso: chage [opções] usuário\n"
+"\n"
+"Opções:\n"
+"  -d, --lastday ULTIMO_DIA         define última mudança de senha para "
+"ULTIMO_DIA\n"
+"  -E, --expiredate DATA_EXPIRAÇÂO  define data de expiração de senha para\n"
+"                                   DATA_EXPIRAÇÂO\n"
+"  -h, --help                       exibe esta mensagem de ajuda e finaliza\n"
+"  -I, --inactive INATIVO           define senha inativa após expiração\n"
+"                                   para INATIVO\n"
+"  -l, --list                       exibe informação sobre idade da conta\n"
+"  -m, --mindays MIN_DIAS           define números mínimo de dias antes da\n"
+"                                   troca de senha para MIN_DIAS\n"
+"  -M, --maxdays MAX_DIAS           define números máximo de dias antes da\n"
+"                                   troca de senha para MAX_DIAS\n"
+"  -W, --warndays AVISO_DIAS        define dias para aviso de expiração para\n"
+"                                   AVISO_DIAS\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Informe o novo valor ou pressione ENTER para aceitar o padrão"
+
+msgid "Minimum Password Age"
+msgstr "Idade Mínima da Senha"
+
+msgid "Maximum Password Age"
+msgstr "Idade Máxima da Senha"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Última Mudança de Senha (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Aviso de Expiração de Senha"
+
+msgid "Password Inactive"
+msgstr "Senha Inativa"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data de Expiração de Senha (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Última mudança de senha\t\t\t\t\t: "
+
+msgid "never"
+msgstr "nunca"
+
+msgid "password must be changed"
+msgstr "Senha modificada"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Senha expira\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Senha inativa\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Conta expira\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Número mínimo de dias entre troca de senhas\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Número máximo de dias entre troca de senhas\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Número de dias de avisos antes da expiração da senha\t: %ld\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s : data `%s' inválida\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s : argumento numérico `%s' inválido\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s : não inclua \"l\" com outras flags\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s : Permissão negada.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s : Não foi possível determinar seu nome de usuário.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s : autenticação PAM falhou\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr ""
+"%s : não foi possível obter lock de arquivos, tente novamente mais tarde\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s : não foi possível abrir arquivo %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: falha iniciando: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: falha ao abandonar privilégios (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s : o arquivo de senhas shadow não está presente\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: falha ao abandonar privilégios (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s : usuário %s não existe\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Mudando a informação de idade para %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s : erro modificando campos\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Uso : %s [-f nome_completo] [-r número_sala] [-w fone_trabalho]\n"
+"\t[-h fone_doméstico] [-o outro] [usuário]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Uso : %s [-f nome_completo] [-r número_sala] [-w fone_rabalho] [-h "
+"fone_doméstico]\n"
+
+msgid "Full Name"
+msgstr "Nome Completo"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Número da Sala"
+
+msgid "Work Phone"
+msgstr "Fone de Trabalho"
+
+msgid "Home Phone"
+msgstr "Fone Doméstico"
+
+msgid "Other"
+msgstr "Outro"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Não foi possível mudar o ID para root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s : nome inválido : \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s : número de sala inválido : \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s : fone de trabalho inválido : \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s : fone doméstico inválido : \"%s\"\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s : \"%s\" contém caracteres ilegais\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s : \"%s\" contém caracteres ilegais\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s : usuário %s não existe\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s : não foi possível mudar o usuário `%s' no cliente NIS.\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s : `%s' é o mestre NIS para este cliente.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Modificando as informações de usuário para %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s : campos muito extensos\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Uso: chpasswd [opções]\n"
+"\n"
+"Opções:\n"
+"  -e, --encrypted               senhas fornecidas estão encriptadas\n"
+"  -h, --help                    exibir esta mensagem de ajuda e finalizar\n"
+"  -m, --md5                     utilizar ecriptação MD5 ao invés de DES "
+"quando\n"
+"                                as senhas fornecidas não estiverem "
+"encriptadas\n"
+"\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"-s, --sha-rounds              Numeros de SHA rodadas para a SHA *\n"
+"                                algoritmos encriptados\n"
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: flag -a é permitida SOMENTE com a flag -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: the -c, -e, and -m flags são exclusivos\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: metodo de encriptação não suportado : %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s : linha %d : linha muito extensa\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s : linha %d : nova senha faltando\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s : grupo %s não existe\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s : linha %d : não foi possível atualizar entrada\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s : erro detectado, mudanças ignoradas\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Uso : %s [entrada]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"-s, --sha-rounds              Numeros de SHA rodadas para a SHA *\n"
+"                                algoritmos encriptados\n"
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s : usuário %s não existe\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s : usuário %s não existe\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Use: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    exibir a mensagem de ajuda e sair\n"
+"  -s, --shell SHELL             novo login shell para conta de usuario\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Shell de Login"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Você não pode mudar o shell para %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Mudando o shell de login para %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s : Entrada inválida : %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s é um shell inválido.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Uso : expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Login       Falhas   Máximo  Último                   Em\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds restante]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lock]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Usuário Desconhecido : %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s : não foi possível abrir arquivo %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "A senha para %s não pode ser modificada.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s : senhas de grupo shadow requeridas para -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s : grupo %s não existe\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: falha iniciando: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Mudando a senha para o grupo %s\n"
+
+msgid "New Password: "
+msgstr "Nova Senha : "
+
+msgid "Re-enter new password: "
+msgstr "Informe a nova senha novamente : "
+
+msgid "They don't match; try again"
+msgstr "As senhas não são iguais; tente novamente"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s : Tente novamente mais tarde\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Adicionando usuário %s ao grupo %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Removendo usuário %s do grupo %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s : usuário %s não existe\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s : Não é um tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Uso : %s [entrada]\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"-s, --sha-rounds              Numeros de SHA rodadas para a SHA *\n"
+"                                algoritmos encriptados\n"
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"-s, --sha-rounds              Numeros de SHA rodadas para a SHA *\n"
+"                                algoritmos encriptados\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s : %s não é um nome de grupo válido\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "nome de grupo `%s' inválido\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s : -K requer CHAVE=VALOR\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s : grupo %s existe\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Membros já existem\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Uso : groupdel grupo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s : não foi possível renomear diretório %s para %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s : não foi possível mudar o usuário `%s' no cliente NIS.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s : grupo %s não existe\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s : grupo `%s' é um grupo NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s : %s é o mestre NIS\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s : usuário %s é um usuário NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s : sem memória em update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "nome de grupo `%s' inválido\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s : grupo %s é um grupo NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s : usuário %s desconhecido\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Uso : %s [-r] [-s] [grupo [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Uso : %s [-r] [-s] [grupo]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s : -s e -r são incompatíveis\n"
+
+msgid "invalid group file entry"
+msgstr "entrada inválida no arquivo de grupo"
+
+#, fuzzy, c-format
+msgid "delete line '%s'? "
+msgstr "remover a linha `%s' ? "
+
+msgid "duplicate group entry"
+msgstr "entrada de grupo duplicada"
+
+#, fuzzy, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nome de grupo `%s' inválido\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "nome de grupo `%s' inválido\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupo %s : nenhum usuário %s\n"
+
+#, fuzzy, c-format
+msgid "delete member '%s'? "
+msgstr "remover membro `%s' ? "
+
+#, fuzzy, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "entrada no arquivo de grupo não casa\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "grupo shadow %s : nenhum usuário %s\n"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "entrada inválida no arquivo de grupo shadow"
+
+msgid "duplicate shadow group entry"
+msgstr "entrada de grupo shadow duplicada"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grupo shadow %s : nenhum usuário administrativo %s\n"
+
+#, fuzzy, c-format
+msgid "delete administrative member '%s'? "
+msgstr "remover membro administrativo `%s' ? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grupo shadow %s : nenhum usuário %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s : os arquivos foram atualizados\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s : nenhuma mudança\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Uso : groupdel grupo\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Uso : groupdel grupo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s : não foi possível atualizar arquivo %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Uso : id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Uso : id\n"
+
+msgid " groups="
+msgstr " grupos="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Uso: lastlog [opções]\n"
+"\n"
+"Opções:\n"
+"  -b, --before DIAS             imprime somente registros lastlog mais\n"
+"                                antigos que DIAS\n"
+"  -h, --help                    exibe esta mensagem de ajuda e finaliza\n"
+"  -t, --time DIAS               imprime somente registros lastlog mais\n"
+"                                recentes que DIAS\n"
+"  -u, --user LOGIN              imprime registro lastlog para usuário com\n"
+"                                LOGIN especificado\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Nome de Usuário         Porta     De             Último"
+
+msgid "Username                Port     Latest"
+msgstr "Nome de Usuário               Porta    Último"
+
+msgid "**Never logged in**"
+msgstr "**Nunca logou**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: argumento inesperado: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Uso : %s [-p] [nome]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "      %s [-p] [-h host] [-f nome]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "      %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Hora de login inválida"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistema fechado para manutenção de rotina"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Disconexão contornada -- login de root permitido.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Login falhou após %d segundos de espera.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Nenhuma entrada utmp. Voce deve executar \"login\" do \"sh\" de nível mais "
+"baixo"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Falha do PAM, abortando: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "Login %s: "
+
+msgid "login: "
+msgstr "login:"
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Número máximo de tentativas excedido (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: abortar requesitado pelo PAM\n"
+
+msgid "Login incorrect"
+msgstr "Login incorreto"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login : "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: falha iniciando: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY falha na %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Aviso : login rehabilitado após travamento temporário."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Último login : %s em %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Último login : %.19s em %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " de %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"tempo de login excedido\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Uso : id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Uso : newgrp [-] [grupo]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Uso : sg group [[-c] comando]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Senha antiga : "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: falha iniciando: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s : usuário %s não existe\n"
+
+msgid "too many groups\n"
+msgstr "muitos grupos\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s : grupo %s não existe\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s : nome de usuário '%s' inválido\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s : nome de usuário '%s' inválido\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s : linha %d : linha inválida\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s : não foi possível atualizar entrada para usuário %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s : linha %d : não foi possível criar GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s : linha %d : não foi possível criar GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s : usuário %s não existe\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s : linha %d : não foi possível atualizar a senha\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s : linha %d : mkdir falhou\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s : linha %d : chown falhou\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s : linha %d : não foi possível atualizar entrada\n"
+
+#, fuzzy
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Uso: passwd [opções] [login]\n"
+"\n"
+"Opções:\n"
+"  -a, --all                     reportar estado de senhas em toda as contas\n"
+"  -d, --delete                  remover a senha para a conta indicada\n"
+"  -e, --expire                  forcçar expiração da senha para a conta "
+"indicada\n"
+"  -h, --help                    exibir esta mensagem de ajuda e finalizar\n"
+"  -k, --keep-tokens             mudar senha somente caso expirada\n"
+"  -i, --inactive INATIVO        definir senha inativa após expiração para\n"
+"                                INATIVO\n"
+"  -l, --lock                    travar a conta indicada\n"
+"  -n, --mindays MIN_DIAS        define número mínimo de dias antes da troca\n"
+"                                de senhas para MIN_DIAS\n"
+"  -q, --quiet                   modo quieto\n"
+"  -r, --repository REPOSITÓRIO  mudar senha no repositório REPOSITÓRIO\n"
+"  -S, --status                  reportar estado de senha para a conta "
+"indicada\n"
+"  -u, --unlock                  destravar a conta indicada\n"
+"  -w, --warndays DIAS_AVISO     define dias de aviso de expiração para\n"
+"                                DIAS_AVISO\n"
+"  -x, --maxdays MAX_DIAS        define número máximo de dias antes da troca\n"
+"                                de senhas para MAX_DIAS\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Senha antiga : "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Informe a nova senha (mínimo de %d, máximo de %d caracteres)\n"
+"Por favor, use uma combinação de letras em maiúsculas e minúsculas\n"
+"e de números.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Informe a nova senha (mínimo de %d, máximo de %d caracteres)\n"
+"Por favor, use uma combinação de letras em maiúsculas e minúsculas\n"
+"e de números.\n"
+
+msgid "New password: "
+msgstr "Nova senha : "
+
+msgid "Try again."
+msgstr "Tente novamente."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Aviso : senha fraca (informe-a novamente para usá-la de qualquer forma)."
+
+msgid "They don't match; try again.\n"
+msgstr "As senhas não são iguais; tente novamente.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "A senha para %s não pode ser modificada.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "A senha para %s não pode ser modificada.\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: unlocking the user would result in a passwordless account.\n"
+#| "You should set a password with usermod -p to unlock this user account.\n"
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: Desbloqueio de usuario mostrará resultado em passwordless account.\n"
+"Você deve arrumar a senha com usermod-p  para desbloquear esta conta.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s : repositório %s não suportado\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: Você não pode visualizar ou modificar informações de senha para %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Modificando a senha para %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "A senha para %s não foi modificada.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Senha modificada."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Aviso de Expiração de Senha"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Uso : %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s : -s e -r são incompatíveis\n"
+
+msgid "invalid password file entry"
+msgstr "entrada de arquivo de senha inválida"
+
+msgid "duplicate password entry"
+msgstr "entrada de senha duplicada"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nome de usuário '%s' inválido\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "nome de usuário '%s' inválido\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "usuário %s : nenhum grupo %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "usuário %s : diretório %s não existe\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "usuário %s : programa %s não existe\n"
+
+#, fuzzy, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "entrada de arquivo de senha não casa\n"
+
+#, fuzzy, c-format
+msgid "add user '%s' in %s? "
+msgstr "grupo shadow %s : nenhum usuário %s\n"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "entrada de arquivos de senhas shadow inválida"
+
+msgid "duplicate shadow password entry"
+msgstr "entrada de senha shadow inválida"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "usuário %s : última mudança de senha no futuro\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s : não foi possível abrir arquivo %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Uso : id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Uso : id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Acesso ao su para esta conta NEGADO.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Autenticação por senha contornada.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Por favor, informe sua PRÓPRIA senha como autenticação.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Uso: su [opções] [login]\n"
+"\n"
+"Opções:\n"
+"  -c, --command COMANDO         passa COMANDO para o shell invocado\n"
+"  -h, --help                    exibe esta mensagem de ajuda e finaliza\n"
+"  -, -l, --login                torna o shell um shell de login\n"
+"  -m, -p,\n"
+"  --preserver-environment       não zera variáveis de ambiente e\n"
+"                                mantém o mesmo shell\n"
+"  -s, --shell SHELL             utiliza SHELL ao invés do padrão no passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s : deve ser executado a partir de um terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s : pam_start : erro %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Id desconhecido : %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Você não está autorizado a usar o su para %s\n"
+
+msgid "(Enter your own password)"
+msgstr "{Informe sua própria senha)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s : %s\n"
+"(Ignorado)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s : autenticação PAM falhou\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Você não está autorizado a usar o su para %s\n"
+
+msgid "No shell\n"
+msgstr "Sem shell\n"
+
+msgid "No password file"
+msgstr "Sem arquivo de senhas"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY falhou"
+
+msgid "No password entry for 'root'"
+msgstr "Nenhuma entrada de senha para 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Digite Control-D para continuar com a inicialização normal,\n"
+"(ou forneça a senha de root para administração do sistema) :"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Entrando em Modo de Manutenção do Sistema"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s : não foi possível criar novo arquivo de padrões\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s : não foi possível abrir novo arquivo de padrões\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s : linha %d : chown falhou\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s : rename : %s"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s : grupo `%s' é um grupo NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s : muitos grupos especificados *máimo %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Uso : %s [entrada]\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"-s, --sha-rounds              Numeros de SHA rodadas para a SHA *\n"
+"                                algoritmos encriptados\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"-s, --sha-rounds              Numeros de SHA rodadas para a SHA *\n"
+"                                algoritmos encriptados\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"-s, --sha-rounds              Numeros de SHA rodadas para a SHA *\n"
+"                                algoritmos encriptados\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"-s, --sha-rounds              Numeros de SHA rodadas para a SHA *\n"
+"                                algoritmos encriptados\n"
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"-s, --sha-rounds              Numeros de SHA rodadas para a SHA *\n"
+"                                algoritmos encriptados\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"-s, --sha-rounds              Numeros de SHA rodadas para a SHA *\n"
+"                                algoritmos encriptados\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s : diretório base `%s'inválido\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s : comentário `%s' inválido\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s : diretório home `%s' inválido\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s : senhas shadow necessárias para -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s : senhas shadow necessárias para -f\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s : campo `%s' inválido\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s : shell `%s' inválida\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: opções %s e %s conflito\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s : não foi possível criar diretório %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Criando caixa-postal"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Grupo 'mail' não encontrado.Criando o usuário caixa-postal arquivo no modo "
+"0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Configurando caixa-postal arquivos de permissao"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s : usuário %s existe\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s : grupo %s existe - caso você ueira adicionar esse usuário a esse\n"
+"grupo, utilize -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s : não foi possível criar %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s : UID %u não é único\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s : não foi possível criar %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: aviso: o diretório pessoal já existe.\n"
+"Não copiando nenhum arquivo do diretótio skel.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Uso: userdel [options] LOGIN\n"
+"\n"
+"Opções:\n"
+" -f, --force                   força remoção dos arquivos,\n"
+"                                mesmo senão forem do usuário\n"
+" -h, --help                    exibi a mensagem de ajudar e sai\n"
+"-r, --remove                remove o diretorio home e spool\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s : Não foi possível remover grupo %s, o qual é um grupo primário de outro "
+"usuário.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s : aviso : não foi possível remover "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s : %s não é propriedade de %s, não removendo\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s : usuário %s é um usuário NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s : o usuário %s está logado no momento\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s : diretório home `%s' inválido\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s : não removendo diretório %s (removeria o home do usuário %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s : erro removendo diretório %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Uso: usermod [opções] login\n"
+"\n"
+"Opções:\n"
+"  -a, --append GRUPO            inserir o usuário no grup suplementar GRUPO\n"
+"  -c, --comment COMENTÁRIO      novo valor do campo GECOS\n"
+"  -d, --home DIR_PESSOAL        novo diretório de login para a nova conta "
+"de\n"
+"                                usuário\n"
+"  -e, --expiredate DATA_EXPIRA  define data de expiração de conta para\n"
+"                                DATA_EXPIRA\n"
+"  -f, --inactive INATIVO        define inatividade de senha após expiração\n"
+"                                para INATIVO\n"
+"  -g, --gid GRUPO               forçar usar GRUPO como novo grupo de\n"
+"                                login inicial\n"
+"  -G, --groups GRUPOS           lista de GRUPOS suplementares\n"
+"  -h, --help                    exibe esta mensagem de ajuda e finaliza\n"
+"  -l, --login LOGIN             novo valor do nome de login\n"
+"  -L, --lock                    trava a conta de usuário\n"
+"  -m, --move-home               move o conteúdo do diretório pessoal para\n"
+"                                a novo localização (use somente com -d)\n"
+"  -o, --non-unique              permitir usar UID duplicados (não-únicos)\n"
+"  -p, --password SENHA          usar senha encriptada para a nova senha\n"
+"  -s, --shell SHELL             novo shell de login para a conta de usuário\n"
+"  -u, --uid UID                 novo UID para a conta de usuário\n"
+"  -U, --unlock                  destravar a conta de usuário\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: unlocking the user would result in a passwordless account.\n"
+#| "You should set a password with usermod -p to unlock this user account.\n"
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: Desbloqueio de usuario mostrará resultado em passwordless account.\n"
+"Você deve arrumar a senha com usermod-p  para desbloquear esta conta.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s : usuário %s existe\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s : nenhuma flag informada\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s : senhas shadow necessárias para -e e -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: the -L, -p, and -U flags são exclusivas\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Membros já existem\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s : diretório %s existe\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s : não foi possível criar %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s : não foi possível executar chown %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: aviso: falha completa ao remover antigo diretório pessoal %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s : não foi possível renomear diretório %s para %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s : aviso : %s não é propriedade de %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "falha au mudar o dono da caixa-postal"
+
+msgid "failed to rename mailbox"
+msgstr "falha ao renomear caixa-postal"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "You have modified %s.\n"
+#| "You may need to modify %s for consistency.\n"
+#| "Please use the command `%s' to do so.\n"
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Você modificou %s.\n"
+"Talvez você precise modificar %s para ter coerência.\n"
+"Por favor use o comando  '%s' para faze-lo.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Uso: vipw [opções]\n"
+"\n"
+"Opções:\n"
+"  -g, --group                   editar base de dados de grupo\n"
+"  -h, --help                    exibir esta mensagem de ajuda e finalizar\n"
+"  -p, --passwd                  editar base de dados de senhas\n"
+"  -q, --quiet                   modo quieto\n"
+"  -s, --shadow                  editar base de dados shadow ou gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: falha ao abandonar privilégios (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s : %s não foi modificado\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Não foi possível obter lock em arquivo"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Não foi possível obter lock em arquivo"
+
+msgid "Couldn't make backup"
+msgstr "Não foi possível fazer backup"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s : não foi possível restaurar %s : %s (suas mudanças estão em %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: faillog [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ "  -a, --all             exibir registros faillog para todos os usuários\n"
+#~ "  -h, --help            exibiri esta mensagem de ajuda e finalizar\n"
+#~ "  -l, --lock-time SEG   após falha de login travar conta por SEG "
+#~ "segundos\n"
+#~ "  -m, --maximum MAX     define contadores de logins falhos para MAX\n"
+#~ "  -r, --reset           zerar os contadores de falhas de login\n"
+#~ "  -t, --time DIAS       exibir registros faillog mais recentes que DIAS\n"
+#~ "  -u, --user LOGIN      exibir registros faillog ou manter somente\n"
+#~ "                        contadores de falhas e limites (caso usado com\n"
+#~ "                        as opções -r, -m ou -l) para usuário com LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: groupadd [opções] grupo\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ "  -f, --force                   forçar sair com estado de sucesso caso\n"
+#~ "                                grupo especificado já exista\n"
+#~ "  -g, --gid GID                 utilizar GID para o novo grupo\n"
+#~ "  -h, --help                    exibir esta mensagem de ajuda e "
+#~ "finalizar\n"
+#~ "  -K, --key CHAVE=VALOR         sobrepõe os padrões em /etc/login.defs\n"
+#~ "  -o, --non-unique              permiti criar grupo com GID duplicado\n"
+#~ "                                (não-único)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: groupadd [opções] grupo\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ "  -f, --force                   forçar sair com estado de sucesso caso\n"
+#~ "                                grupo especificado já exista\n"
+#~ "  -g, --gid GID                 utilizar GID para o novo grupo\n"
+#~ "  -h, --help                    exibir esta mensagem de ajuda e "
+#~ "finalizar\n"
+#~ "  -K, --key CHAVE=VALOR         sobrepõe os padrões em /etc/login.defs\n"
+#~ "  -o, --non-unique              permiti criar grupo com GID duplicado\n"
+#~ "                                (não-único)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Uso: useradd [opções] LOGIN\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ "  -b, --base-dir DIR_BASE       diretório base para o diretório pessoal\n"
+#~ "                                da nova conta de usuário\n"
+#~ "  -c, --comment COMENTÁRIO      define o campo GECOS para a nova conta "
+#~ "de\n"
+#~ "                                usuário\n"
+#~ "  -d, --home-dir DIR_PESSOAL    diretório pessoal para a nova conta de\n"
+#~ "                                usuário\n"
+#~ "  -D, --defaults                imprime ou salva configuração padrão do\n"
+#~ "                                useradd modificada\n"
+#~ "  -e, --expiredate DATA_EXPIRA  define data de expiração de conta para\n"
+#~ "                                DATA_EXPIRA\n"
+#~ "  -f, --inactive INATIVO        define inatividade de senha após "
+#~ "expiração\n"
+#~ "                                para INATIVO\n"
+#~ "  -g, --gid GRUPO               força utilização de GRUPO para nova "
+#~ "conta\n"
+#~ "                                de usuário\n"
+#~ "  -G, --groups GRUPOS           lista de grupos suplementares para a "
+#~ "nova\n"
+#~ "                                conta de usuário\n"
+#~ "  -h, --help                    exibe esta mensagem de ajuda e finaliza\n"
+#~ "  -k, --skel DIR_SKEL           especifica um diretório skel alternativo\n"
+#~ "  -K, --key CHAVE=VALOR         sobrepões os padrões do /etc/login.defs\n"
+#~ "  -m, --create-home             cria diretório pessoal para a nova conta "
+#~ "de\n"
+#~ "                                usuário\n"
+#~ "  -o, --non-unique              permite cirar usuário com UID duplicado\n"
+#~ "                                (não-único)\n"
+#~ "  -p, --password SENHA          utiliza senha encriptada para a nova "
+#~ "conta\n"
+#~ "                                de usuário\n"
+#~ "  -s, --shell SHELL             o shell de login para a nova conta\n"
+#~ "                                de usuário\n"
+#~ "  -u, --uid UID                 força o uso de UID para a nova conta\n"
+#~ "                                de usuário\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Use: %s [opções] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            metodo de criptacao (um de %s)\n"
+#~ "  -r, --system                  criar sistema de contas\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Senha configurada para expirar."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de senhas\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s : não foi possível abrir o arquivo de senhas\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivos de senhas shadow\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de senhas shadow\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s : não foi possível reescrever arquivo de senhas shadow\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s : não foi possível reescrever arquivo de senhas\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s : não foi possível atualizar arquivo de senhas\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s : não foi possível atualizar arquivos de senhas shadow\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNome Completo : %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNúmero da Sala: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tFone de Trabalho: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tFone Doméstico: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr ""
+#~ "Não foi possível fazer local em arquivo de senhas; tente novamente mais "
+#~ "tarde.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Não foi possível abrir arquivo de senhas.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s : %s não encontrado em /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Erro atualizando a entrada de senha.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Não foi possível gravar as mudanças no arquivo de senhas.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Não foi possível remover o locak do arquivo de senhas.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s : não foi possível obter lock no arquivo de grupo\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s : nao foi possível obter lock no arquivo gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s : não foi possível abrir arquivo shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s : erro atualizando arquivo shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s : erro atualizando entrada de grupo\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s : linha %d : grupo %s desconhecido\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s : linha %d : não foi possível atualizar entrada\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s : nao foi possível obter lock em arquivo shadow\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s : erro atualizando arquivo shadow\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s : erro atualizando arquivo de senhas\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s : linha %d : usuário %s desconhecido\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s : linha %d : não foi possível atualizar entrada de senha\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s : usuário desconhecido\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Usuário Desconhecido : %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Uso : %s [-r|-R] grupo\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "      %s [-a usuário] grupo\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "      %s [-d usuário] grupo\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "      %s [-A usuário,...] [-M usuário,...] grupo\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "      %s [-M usuário,...] grupo\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s : não foi possível obter lock\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s : nõ foi possível obter lock shadow\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s : não foi possível abrir arquivo\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s : não foi possível regravar arquivo\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s : não foi possível regravar arquivo shadow\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s : não foi possível remover o lock do arquivo\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s : não foi possível atualizar entrada\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s : não foi possível atualizar entrada shadow\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "grupo desconhecido : %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s : não foi possível abrir arquivo\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s : não foi possível abrir arquivo shadow\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Quem é você ?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s : membro %s desconhecido\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s : erro adicionando nova entrada de grupo\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s : não foi possível regravar arquivo de grupo\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s : não foi possível regravar arquivo de grupo shadow\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de grupo\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de grupo shadow\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo shadow\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s : GID %u não é único\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s : erro removendo entrada de grupo\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s : erro removendo entrada de grupo shadow\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s : não foi possível remover grupo primário do usuário.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Não foi possivel encontrar membro para remover\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Uso :  membrosdogrupo -a nomedousuario | -d nomedousuario | -D | -l [-g "
+#~ "nomedogrupo]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Somente o root pode adicionar membros para diferentes grupos\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Acesso ao grupo é necessário\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "proprietario do grupo atual\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s : autenticação PAM falhou\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de grupo\n"
+
+#, fuzzy
+#~ msgid "Unable to open group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s : %s não encontrado em /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s : %u não é um GID único\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s : %s não é um nome único\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s : não foi possível reescrever arquivo de senhas\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de senhas\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de senhas\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s: não foi possivel mudar o grupo primário do usuario '%s' de %u para %"
+#~ "u, uma vez que  não se encontra no arquivo passwd.\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s : não foi possível obter lock no arquivo %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s : não foi possível atualizar entrada shadow para %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s : não foi possível atualizar entrada para grupo %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de grupo shadow\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo shadow\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s : não foi possível remover grupo shadow %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s : não foi possível atualizar arquivo de grupo shadow\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s : não foi possível atualizar arquivo de grupo\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s : não foi possível remover arquivo de grupo shadow\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "GID desconhecido : %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "GID desconhecido : %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s : grupo %s não existe\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: grupo %s criado, falha durante a criação do grupo correspondente ao "
+#~ "gshadow\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s : usuário %s não existe\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s : nome de usuário '%s' inválido\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s : não foi possível obter de /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s : não foi possível obter de /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s : não foi possível obter de /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s : não foi possível obter de /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s : não foi possível abrir arquivos\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s : erro atualizando arquivos\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s : linha %d : não foi possível encontrar usuário %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s : não foi possível atualizar entrada passwd para %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s : não foi possível abrir arquivo passwd.\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s : não foi possível remover entrada shadow para %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s : não foi possível atualizar arquivo shadow\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s : não foi possível atualizar arquivo passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s : não foi possível atualizar entrada para usuário %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s : não foi possível remover arquivo de senhas shadow\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s : GID %s desconhecido\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s : grupo %s desconhecido\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s : sem memória em update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s : não foi possível reescrever arquivo de senhas\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s : não foi possível reescrever arquivo de senhas shadow\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s : não foi possível obter lock em arquivo de senhas shadow\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de senhas shadow\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s : erro obtendo lock em arquivo de grupo\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s : erro abrindo arquivo de grupo\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s : erro obtendo lock em arquivo de grupo shadow\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s : erro abrindo arquivo de grupo shadow\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s : erro adicionando nova entrada de senha\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s : erro adicionando nova entrada de senha shadow\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s : aviso CREATE_HOME não é suportado, por favor, utilize -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s : erro atualizando entrada de grupo\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s : erro atualizando entrada de grupo\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s : não foi possível abrir arquivo de grupo shadow\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s : erro removendo entrada de senha\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s : erro removendo entrada de senha shadow\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s : usuário %s não existe\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s : erro adicionando nova entrada de grupo\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s : o uid %lu não é único\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s : erro modificando entrada de senha\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s : erro removendo entrada de senha\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s erro removendo entrada de senha shadow\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s : não foi possível obter GID único\n"
+
+#, fuzzy
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " em `%.100s' de `%.200s'"
+
+#, fuzzy
+#~ msgid " on '%.100s'"
+#~ msgstr " em `%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s : linha %d : não foi possível criar UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s : o nome %s não é único\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Uso: chgpasswd [opções]\n"
+#~ "\n"
+#~ "Opções:\n"
+#~ "  -e, --encrypted\tsenhas fornecidas estão encriptadas\n"
+#~ "  -h, --help\t\texibir esta mensagem de ajuda e finalizar\n"
+#~ "  -m, --md5\t\tutilizar encriptação MD5 ao invés de DES quando as\n"
+#~ "\t\t\tsenhas fornecidas não estiverem encriptadas\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Sem arquivo de senhas\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Desculpe.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Desculpe, a senha para %s ainda não pode ser modificada.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Desculpe."
diff --git a/po/quot.sed b/po/quot.sed
new file mode 100644 (file)
index 0000000..0122c46
--- /dev/null
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100644 (file)
index 0000000..2436c49
--- /dev/null
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/ro.gmo b/po/ro.gmo
new file mode 100644 (file)
index 0000000..459f59e
Binary files /dev/null and b/po/ro.gmo differ
diff --git a/po/ro.po b/po/ro.po
new file mode 100644 (file)
index 0000000..6d4c22a
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,2654 @@
+# translation of shadow_ro.po to Romanian
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Sorin Batariuc <sorin@bonbon.net>, 2004, 2005, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.17\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-11-26 18:18+0100\n"
+"Last-Translator: Sorin Batariuc <sorin@bonbon.net>\n"
+"Language-Team: Romanian <debian-l10n-romanian@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1\n"
+"X-Generator: KBabel 1.10.2\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Nu pot aloca spaţiu pentru informaţiile despre configurare.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"eroare de configurare - element necunoscut '%s' (anunţaţi administratorul)\n"
+
+msgid "Password: "
+msgstr "Parola: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Parola pentru %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Avertisment: grup necunoscut %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Avertisment: prea multe grupuri\n"
+
+msgid "Your password has expired."
+msgstr "Parola dvs a expirat."
+
+msgid "Your password is inactive."
+msgstr "Parola dvs este inactivă."
+
+msgid "Your login has expired."
+msgstr "Autentificarea dvs a expirat."
+
+msgid "  Contact the system administrator."
+msgstr "  Contactaţi administratorul de sistem."
+
+msgid "  Choose a new password."
+msgstr "  Alegeţi o parolă nouă."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Parola dvs va expira în %ld zile.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Parola dvs va expira mâine."
+
+msgid "Your password will expire today."
+msgstr "Parola dvs va expira azi."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Nu pot schimba tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: câmpuri prea lungi\n"
+
+msgid "Environment overflow\n"
+msgstr "Inundaţie de mediu\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Nu puteţi schimba $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d eşuare de la ultima autentificare.\n"
+"Ultima oară a fost %s în %s.\n"
+msgstr[1] ""
+"%d eşuări de la ultima autentificare.\n"
+"Ultima oară a fost %s în %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: nu pot prelua UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: nu pot prelua GID unic\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: nu pot prelua UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: nu pot prelua UID\n"
+
+msgid "Too many logins.\n"
+msgstr "Prea multe autentificări.\n"
+
+msgid "You have new mail."
+msgstr "Aveţi mesaje noi."
+
+msgid "No mail."
+msgstr "N-aveţi mesaje."
+
+msgid "You have mail."
+msgstr "Aveţi mesaje."
+
+msgid "no change"
+msgstr "nici o schimbare"
+
+msgid "a palindrome"
+msgstr "palindrome"
+
+msgid "case changes only"
+msgstr "doar schimbări de caz"
+
+msgid "too similar"
+msgstr "prea asemănător"
+
+msgid "too simple"
+msgstr "prea simplu"
+
+msgid "rotated"
+msgstr "rotit"
+
+msgid "too short"
+msgstr "prea scurt"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Parolă incorectă: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() a eşuat, eroare %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Parolă schimbată."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: parolă actualizată cu succes\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Parolă incorectă pentru %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Nu pot schimba directorul către'%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Fără director personal, autentificare cu HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Nu pot executa %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Director rădăcină invalid '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Nu pot schimba directorul rădăcină la '%s'\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Nu vă pot determina numele tty."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: nu mai este memorie\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) a eşuat\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Nu\n"
+
+#, fuzzy
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Folosire: chage [opţiuni] utilizator\n"
+"\n"
+"Opţiuni:\n"
+"  -d, --lastday ULTIMA_ZI        setează ultima schimbare de parolă\n"
+"                                 la ULTIMA_ZI\n"
+"  -E, --expiredate DATA_EXPIRARE setează data expirării contului la\n"
+"                                 DATA_EXPIRARE\n"
+"  -h, --help                     afişează acest mesaj de ajutor şi ieşi\n"
+"  -I, --inactive INACTIVĂ        setează parolă inactivă după expirare\n"
+"                                 la INACTIVĂ\n"
+"  -l, --list                     arată informaţiile de temporalitate ale\n"
+"                                 contului\n"
+"  -m, --mindays MIN_ZILE         setează numărul minim de zile înainde de\n"
+"                                 schimbarea parolei to MIN_ZILE\n"
+"  -M, --maxdays MAX_ZILE         setează numărul maxim de zile înainte de\n"
+"                                 schimbarea parolei la MAX_ZILE\n"
+"  -W, --warndays AVERTIZ_ZILE    setează zilele de avertisment pentru\n"
+"                                 expirare la AVERTIZ_ZILE\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Introduceţi noua valoare, sau apăsaţi ENTER pentru cea implicită"
+
+msgid "Minimum Password Age"
+msgstr "Vârsta minimă a parolei"
+
+msgid "Maximum Password Age"
+msgstr "Vârsta maximă a parolei"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Ultima schimbare de parolă (AAAA-LL-ZZ)"
+
+msgid "Password Expiration Warning"
+msgstr "Avertisment de expirare a parolei"
+
+msgid "Password Inactive"
+msgstr "Parolă inactivă"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Data expirării contului (AAAA-LL-ZZ)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Ultima schimbare de parolă\t\t\t\t\t: "
+
+msgid "never"
+msgstr "Niciodată"
+
+msgid "password must be changed"
+msgstr "parola trebuie schimbată"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Parola expiră\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Parolă inactivă\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Contul expiră\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Numărul minim de zile dintre schimbările de parolă\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Numărul maxim de zile dintre schimbările de parolă\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Numărul de zile de avertismente înaintea expirării parolei\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: dată nevalidă '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: argument numeric nevalid '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: nu include \"l\" cu alte semnalizatoare\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Permisiune refuzată.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Nu vă pot determina numele de utilizator.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: autentificare PAM eşuată\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: nu pot încuia fişierele, încercaţi mai târziu\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: nu pot deschide fişierul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s : eşuare la bifurcare: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: fişierul shadow nu este prezent\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Modific informaţia de temporalitate pentru %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: eroare la modificarea câmpurilor\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Utilizare: %s [-f nume_complet] [-r nr_cameră] [-w cale_lucru]\n"
+"\t[-h cale_acasă] [-o altele] [utilizator]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Utilizare: %s [-f nume_complet] [-r nr_cameră] [-w cale_lucru] [-h "
+"cale_acasă]\n"
+
+msgid "Full Name"
+msgstr "Nume complet"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Număr cameră"
+
+msgid "Work Phone"
+msgstr "Telefon birou"
+
+msgid "Home Phone"
+msgstr "Telefon acasă"
+
+msgid "Other"
+msgstr "Altele"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Nu pot schimba identificatorul la root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: nume nevalid: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: număr de cameră nevalid: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: număr telefon de birou nevalid: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: număr telefon acasă nevalid: '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' conţine caractere ilegale\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' conţine caractere ilegale\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: nu pot schimba utilizatorul '%s' pe un client NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' este stăpânul NIS pentru acest client.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Modificare informaţii utilizator pentru %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: câmpuri prea lungi\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Folosire: chpasswd [opţiuni]\n"
+"\n"
+"Opţiuni:\n"
+"  -e, --encrypted               parolele oferite sunt criptate\n"
+"  -h, --help                    afişează acest mesaj de ajutor şi ieşi\n"
+"  -m, --md5                     foloseşte criptarea MD5 în loc de DES "
+"atunci\n"
+"                                când parolele oferite nu sunt criptate\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: semnalizatorul -a este permis DOAR împreună cu semnalizatorul -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linia %d: linie prea lungă\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linia %d: lipseşte noua parolă\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: grupul %s nu există\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linia %d: nu pot actualiza intrarea\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: a fost detectată o eroare, schimbările sunt ignorate\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+#, fuzzy
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Folosire: userdel [opţiuni] NUME\n"
+"\n"
+"Opţiuni:\n"
+"  -f, --force                   forţează ştergerea fişierelor, chiar\n"
+"                                dacă nu sunt proprietatea utilizatorului\n"
+"  -h, --help                    afişează acest mesaj de ajutor şi ieşi\n"
+"  -r, --remove                  şterge directorul personal şi cel pentru "
+"mesaje\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Autentificare consolă"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Nu puteţi schimba consola pentru %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Schimb consola de autentificare pentru %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Intrare nevalidă: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s este o consolă nevalidă.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Utilizare: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Autentificare       Eşuări Maximum Ultima dată                   La\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds rămase]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds rămase]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Utilizator necunoscut: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: nu pot deschide fişierul %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Parola pentru %s nu poate fi schimbată.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: sunt cerute parole criptate de grup pentru -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: grupul %s nu există\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s : eşuare la bifurcare: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Schimbare parolă pentru grupul %s\n"
+
+msgid "New Password: "
+msgstr "Parola nouă: "
+
+msgid "Re-enter new password: "
+msgstr "Reintroduceţi noua parolă: "
+
+msgid "They don't match; try again"
+msgstr "Acestea nu se potrivesc, mai încercaţi odată"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Mai încercaţi mai târziu\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Adaug utilizatorul %s la grupul %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Şterg utilizatorul %s din grupul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: nu este un tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s nu este un nume de grup valid\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "nume de grup nevalid '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K cere KEY=VALUE\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: grupul %s există\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr "Utilizare: groupdel grup\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: nu pot redenumi directorul %s în %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: nu pot schimba utilizatorul '%s' pe un client NIS.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: grupul %s nu există\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: grupul '%s' este un grup NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s este stăpân NIS\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: utilizatorul %s este un utilizator NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: nu mai este memorie pentru update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "nume de grup nevalid '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: grupul %s este un grup NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: utilizator necunoscut %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Utilizare: %s [-r] [-s] [grup [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Utilizare: %s [-r] [-s] [grup]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s şi -r sunt incompatibile\n"
+
+msgid "invalid group file entry"
+msgstr "intrare nevalidă în fişierul de grupuri"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "şterg linia '%s'? "
+
+msgid "duplicate group entry"
+msgstr "intrare de grup duplicată"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "nume de grup nevalid '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "nume de grup nevalid '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupul %s: nici un utilizator %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "şterg membrul '%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "nici o potrivire între intrările din fişierul de grupuri în %s\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "adaug grupul '%s' în '%s'?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "intrare nevalidă în fişierul gshadow"
+
+msgid "duplicate shadow group entry"
+msgstr "intrare duplicată în gshadow"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "gshadow %s: nici un utilizator administrativ %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "şterg membrul administrativ '%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "gshadow %s: nici un utilizator %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: fişierele au fost actualizate\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: nici o schimbare\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Utilizare: groupdel grup\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Utilizare: groupdel grup\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: nu pot actualiza fişierul %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Utilizare: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Utilizare: id\n"
+
+msgid " groups="
+msgstr " grupuri="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Utilizaree: lastlog [opţiuni]\n"
+"\n"
+"Opţiuni:\n"
+"  -b, --before ZILE             afişează doar înregistrările ultimului\n"
+"                                jurnal mai vechi de ZILE\n"
+"  -h, --help                    afişează acest mesaj de ajutor şi ieşi\n"
+"  -t, --time ZILE               afişează doar înregistrările ultimului\n"
+"                                jurnal mai recente de ZILE\n"
+"  -u, --user LOGIN              afişează înregistrarea ultimului jurnal "
+"pentru\n"
+"                                utilizatorul cu autentificarea specificată\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Nume utilizator       Port      De la          Cel mai recent"
+
+msgid "Username                Port     Latest"
+msgstr "Nume utilizator                Port      Cel mai recent"
+
+msgid "**Never logged in**"
+msgstr "**Niciodată autentificat**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: argument neaşteptat: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Utilizare: %s [-p] [nume]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h gazdă] [-f nume]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r gazdă\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Timp de autentificare nevalid"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistem închis pentru întreţinere de rutină"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Deconectare ocolită -- autentificare permisă pentru root.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Timp expirat pentru autentificare după %d secunde.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Nici o intrare utmp. Trebuie să executaţi \"login\" de la nivelul cel mai de "
+"jos \"sh\""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "autentificare: eşuare PAM, abandonare : %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s autentificare: "
+
+msgid "login: "
+msgstr "autentificare: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Numărul maxim de încercări a depăşit (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "autentificare: renunţare cerută de PAM\n"
+
+msgid "Login incorrect"
+msgstr "Autentificare incorectă"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s autentificare: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s : eşuare la bifurcare: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Avertisment: autentificare reactivată după blocarea temporară."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Ultima autentificare: %s în %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Ultima autentificare: %.19s în %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " de la %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"depăşirea timpului de autentificare\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Utilizare: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Utilizare: newgrp [-] [grup]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Utilizare: sg grup [[-c] comanda]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Parola veche: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s : eşuare la bifurcare: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+msgid "too many groups\n"
+msgstr "prea multe grupuri\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: grupul %s nu există\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: nume utilizator nevalid '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: nume utilizator nevalid '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linia %d: linie nevalidă\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: nu pot actualiza intrarea pentru utilizatorul %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linia %d: nu pot crea GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linia %d: nu pot crea GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: utilizatorul %s nu există\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linia %d: nu pot actualiza parola\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linia %d: eşuare mkdir\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linia %d: eşuare chown\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linia %d: nu pot actualiza intrarea\n"
+
+#, fuzzy
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Utilizare: passwd [opţiuni] [nume_cont]\n"
+"\n"
+"Opţiuni:\n"
+"  -a, --all                     afişează starea parolelor din toate "
+"conturile\n"
+"  -d, --delete                  şterge parola respectivului cont\n"
+"  -e, --expire                  forţează expirarea parolei pentru\n"
+"                                respectivul cont\n"
+"  -h, --help                    afisează acest mesaj de ajutor şi ieşi\n"
+"  -k, --keep-tokens             schimbă parola doar dacă este expirată\n"
+"  -i, --inactive INACTIV        fixează durata de inactivitate a parolei la\n"
+"                                INACTIV după expirarea sa\n"
+"  -l, --lock                    blochează respectivul cont\n"
+"  -n, --mindays ZILE_MIN        fixează numărul minim de zile la ZILE_MIN\n"
+"                                înainte de schimbarea parolei\n"
+"  -q, --quiet                   modul silenţios\n"
+"  -r, --repository DEPOZIT      schimbă parola în depozitul DEPOZIT\n"
+"  -S, --status                  raportează starea parolei respectivului "
+"cont\n"
+"  -u, --unlock                  deblochează respectivul cont\n"
+"  -w, --warndays ZILE_AVERT     fixează numărul de zile de avertisment de\n"
+"                                expirare la ZILE_AVERT\n"
+"  -x, --maxdays ZILE__MAX       fixează numărul maxim de zile înainde de\n"
+"                                schimbarea parolei la ZILE_MAX\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Parola veche: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduceţi noua parolă (minimum %d, maximum %d caractere)\n"
+"Vă rog utilizaţi o combinaţie de litere mari şi mici şi numere.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Introduceţi noua parolă (minimum %d, maximum %d caractere)\n"
+"Vă rog utilizaţi o combinaţie de litere mari şi mici şi numere.\n"
+
+msgid "New password: "
+msgstr "Parola nouă: "
+
+msgid "Try again."
+msgstr "Mai încercaţi."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Avertisment: parolă slabă (mai introduceţi-o odată pentru a o folosi oricum)."
+
+msgid "They don't match; try again.\n"
+msgstr "Nu se potrivesc, mai încercaţi odată.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Parola pentru %s nu poate fi schimbată.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Parola pentru %s nu poate fi schimbată.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: depozitul %s nu este suportat\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: Nu puteţi vizualiza sau modifica informaţiile despre parola lui %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Schimbare parolă pentru %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Parola pentru %s este neschimbată.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Parolă schimbată."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Avertisment de expirare a parolei"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Folosire: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s şi -r sunt incompatibile\n"
+
+msgid "invalid password file entry"
+msgstr "intrare nevalidă în fişierul passwd"
+
+msgid "duplicate password entry"
+msgstr "intrare duplicată în passwd"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "nume de utilizator nevalid '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "nume de utilizator nevalid '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "utilizatorul %s: fără grup %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "utilizatorul %s: directorul %s nu există\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "utilizatorul %s: programul %s nu există\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "nici o potrivire între intrările fişierului passwd în %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "adaug utilizatorul '%s' în '%s'?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "intrare nevalidă în fişierul shadow"
+
+msgid "duplicate shadow password entry"
+msgstr "intrare duplicată în shadow"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "utilizatorul %s: ultima schimbare de parolă s-a făcut în viitor\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: nu pot deschide fişierul %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Utilizare: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Utilizare: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Acces INTERZIS către su spre acest cont.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Autentificare cu parolă ocolită.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Vă rog introduceţi PROPRIA parolă pentru autentificare.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Utilizare: su [opţiuni] [autentificare]\n"
+"\n"
+"Opţiuni:\n"
+"  -c, --command COMANDA         trimite COMANDA la consola invocată\n"
+"  -h, --help                    afişează acest mesaj de ajutor şi ieşi\n"
+"  -, -l, --login                face din consolă una de autentificare\n"
+"  -m, -p,\n"
+"  --preserve-environment        nu reface variabilele de mediu, şi\n"
+"                                păstrează aceeaşi consolă\n"
+"  -s, --shell SHELL             foloseşte SHELL în locul celei implicite\n"
+"                                din passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: trebuie pornit de la un terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: eroare %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Identificator necunoscut: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Nu sunteţi autorizat pentru su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Introduceţi propria parolă)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorat)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: autentificare PAM eşuată\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Nu sunteţi autorizat pentru su %s\n"
+
+msgid "No shell\n"
+msgstr "Fără consolă\n"
+
+msgid "No password file"
+msgstr "Fără fişier passwd"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Fără intrare în passwd pentru 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Apăsaţi ctrl-D pentru pornire normală,\n"
+"(sau introduceţi parola de root pentru întreţinerea sistemului):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Intrare în modul de întreţinere sistem"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: nu pot crea noile fişiere implicite\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: nu pot deschide noile fişiere implicite\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linia %d: eşuare chown\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: redenumire: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: grupul '%s' este un grup NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: prea multe grupuri specificate (maximum %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Utilizare: %s [input]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: director de bază nevalid '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: comentariu nevalid '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: director personal nevalid '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: parole criptate cerute pentru -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s; parole criptate cerute pentru -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: fişier nevalid '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: consolă nevalidă '%s'\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: nu pot crea directorul %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Crearea fişierului căsuţă pentru mesaje"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Grupul 'mail' nu a fost găsit. Se crează fişierul căsuţă de mesaje pentru "
+"utilizator cu modul 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Se atribuie permisiunile fişierului căsuţă de mesaje"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: utilizatorul %s există\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: grupul %s există - dacă vreţi să adăugaţi un utilizator la acest grup, "
+"folosiţi -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: nu pot crea %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u nu este unic\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: nu pot crea %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: avertisment: directorul personal există deja.\n"
+"Nu se copiază nici un fişier în el din directorul schelet.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Folosire: userdel [opţiuni] NUME\n"
+"\n"
+"Opţiuni:\n"
+"  -f, --force                   forţează ştergerea fişierelor, chiar dacă\n"
+"                                nu sunt proprietatea utilizatorului\n"
+"  -h, --help                    afişează acest mesaj de ajutor şi ieşi\n"
+"  -r, --remove                  şterge directorul personal şi cel pentru "
+"mesaje\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Nu pot şterge grupul %s care este un grup primar pentru alt utilizator.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: avertisment: nu pot şterge "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s nu aparţine de %s, nu se şterge\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: utilizatorul %s este un utilizator NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: utilizatorul %s este autentificat în acest moment\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: director personal nevalid '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: nu se şterge directorul %s (s-ar şterge directorul personal al "
+"utilizatorului %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: eroare la ştergerea directorului %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Folosire: usermod [opţiuni] NUME\n"
+"\n"
+"Opţiuni:\n"
+"  -a, --append GRUP               tadaugă utilizatorul în GRUPUL "
+"suplimentar\n"
+"  -c, --comment COMENTARIU        valoarea nouă a câmpului GECOS\n"
+"  -d, --home DIR_ACASA            noul director personal pentru noul cont\n"
+"  -e, --expiredate DATA_EXPIRĂRII setează data expirării contului la\n"
+"                                  DATA_EXPIRĂRII\n"
+"  -f, --inactive INACTIVĂ         setează parola inactivă după expirare\n"
+"                                  la INACTIVĂ\n"
+"  -g, --gid GRUP                  forţează folosirea GRUPULUI ca nou\n"
+"                                  iniţial grup\n"
+"  -G, --groups GRUPURI            afişează grupurile suplimentare GRUPURI\n"
+"  -h, --help                      afişează acest mesaj de ajutor şi ieşi\n"
+"  -l, --login NUME_NOU            noua valoare a numelui de autentificare\n"
+"  -L, --lock                      blochează contul\n"
+"  -m, --move-home                 mută conţinutul directorului personal în\n"
+"                                  noua locaţie (foloseşte doar cu -d)\n"
+"  -o, --non-unique                permite folosirea UID-urilor duplicate\n"
+"                                  (non-unice)\n"
+"  -p, --password PAROLA           foloseşte criptarea pentru noua parolă\n"
+"  -s, --shell SHELL               noul mediu de autentificare pentru\n"
+"                                  contul utilizator\n"
+"  -u, --uid UID                   noul UID pentru contul utilizator\n"
+"  -U, --unlock                    deblochează contul utilizator\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: utilizatorul %s există\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: nu s-au atribuit semnalizatoare\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: sunt necesare parole criptate pentru -e şi -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: directorul %s există\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: nu pot crea %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: nu pot schimba proprietarul %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: avertisment: eşuare în a elimina complet vechiul director personal %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: nu pot redenumi directorul %s în %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: avertisment: %s nu este deţinut de către %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "eşuare în schimbarea proprietarului căsuţei poştale"
+
+msgid "failed to rename mailbox"
+msgstr "eşuare în redenumirea căsuţei poştale"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Utilizare: vipw [opţiuni]\n"
+"\n"
+"Opţiuni:\n"
+"  -g, --group                   editează baza de date de grupuri\n"
+"  -h, --help                    afişează acest mesaj de ajutor şi ieşi\n"
+"  -p, --passwd                  editează baza de date de conturi\n"
+"  -q, --quiet                   modul tăcut\n"
+"  -s, --shadow                  editează baza de date shadow sau gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s : eşuare în abandonarea privilegiilor (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s este neschimbat\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "N-am putut încuia fişierul"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "N-am putut încuia fişierul"
+
+msgid "Couldn't make backup"
+msgstr "N-am putut face o copie de rezervă"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: nu pot reface %s: %s (schimbările dvs. sunt în %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilizare: faillog [opţiuni]\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ "  -a, --all                     afişează jurnalul înregistrărilor de "
+#~ "eşuări\n"
+#~ "                                pentru toţi utilizatorii\n"
+#~ "  -h, --help                    afişează acest mesaj de ajutor şi ieşi\n"
+#~ "  -l, --lock-time SEC           blochează contul la SEC secunde după o\n"
+#~ "                                autentificare eşuată\n"
+#~ "  -m, --maximum MAX             setează numărul maxim de autentificări\n"
+#~ "                                eşuate la MAX\n"
+#~ "  -r, --reset                   resetează contorul de autentificări "
+#~ "eşuate\n"
+#~ "  -t, --time DAYS               afişează jurnalul înregistrărilor de "
+#~ "eşuări\n"
+#~ "                                mai recente de DAYS zile\n"
+#~ "  -u, --user LOGIN              afişează jurnalul înregistrărilor de "
+#~ "eşuări\n"
+#~ "                                sau menţine contoarele de eşuări şi "
+#~ "limite\n"
+#~ "                                (dacă este folosit cu opţiunile -r, -m "
+#~ "sau\n"
+#~ "                                -l) doar pentru utilizatorul LOGIN\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilizare: groupadd [opţiuni] grup\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ "  -f, --force                   forţează terminarea cu starea de succes\n"
+#~ "                                dacă grupul specificat există deja\n"
+#~ "  -g, --gid GID                 foloseşte GID pentru noul grup\n"
+#~ "  -h, --help                    afişează acest mesaj de ajutor şi ieşi\n"
+#~ "  -K, --key KEY=VALUE           înlocuieşte cu setările implicite\n"
+#~ "                                /etc/login.defs\n"
+#~ "  -o, --non-unique              permite crearea grupului cu GID duplicat\n"
+#~ "                                (ne-unic)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Utilizare: groupadd [opţiuni] grup\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ "  -f, --force           forţează terminarea cu starea de succes\n"
+#~ "                        dacă grupul specificat există deja\n"
+#~ "  -g, --gid GID         foloseşte GID pentru noul grup\n"
+#~ "  -h, --help            afişează acest mesaj de ajutor şi ieşi\n"
+#~ "  -K, --key KEY=VALUE   înlocuieşte cu setările implicite /etc/login."
+#~ "defs\n"
+#~ "  -o, --non-unique      permite crearea grupului cu GID duplicat\n"
+#~ "                        (ne-unic)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Folosire: useradd [opţiuni] LOGIN\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ "  -b, --base-dir DIR_BAZA         baza directorului pentru noul director\n"
+#~ "                                  personal al contului\n"
+#~ "  -c, --comment COMENTARIU        setează câmpul GECOS pentru noul cont\n"
+#~ "  -d, --home-dir DIR_ACASA        directorul personal pentru noul cont\n"
+#~ "  -D, --defaults                  afişează sau salvează configuraţia "
+#~ "useradd\n"
+#~ "                                  implicită modificată\n"
+#~ "  -e, --expiredate DATA_EXPIRĂRII setează data expirării contului la\n"
+#~ "                                  DATA_EXPIRĂRII\n"
+#~ "  -f, --inactive INACTIVĂ         setează parola inactivă după expirare\n"
+#~ "                                  la INACTIVĂ\n"
+#~ "  -g, --gid GRUP                  forţează folosirea GRUPULUI pentru noul "
+#~ "cont\n"
+#~ "  -G, --groups GRUPURI            afişează grupurile suplimentare pentru\n"
+#~ "                                  noul cont utilizator\n"
+#~ "  -h, --help                      afişează acest mesaj de ajutor şi ieşi\n"
+#~ "  -k, --skel DIR_SKELET           specifică un schelet director "
+#~ "alternativ\n"
+#~ "  -K, --key KEY=VALOARE           suprascrie valorile implicite ale\n"
+#~ "                                  /etc/login.defs\n"
+#~ "  -m, --create-home               crează directorul personal pentru noul\n"
+#~ "                                  cont utilizator\n"
+#~ "  -o, --non-unique                permite creare unui utilizator cu un "
+#~ "UID\n"
+#~ "                                  duplicat (non-unic)\n"
+#~ "  -p, --password PAROLA           foloseşte parola criptată pentru noul "
+#~ "cont\n"
+#~ "                                  utilizator\n"
+#~ "  -s, --shell SHELL               mediul de autentificare pentru noul\n"
+#~ "                                  cont utilizator\n"
+#~ "  -u, --uid UID                   forţează utilizarea UID pentru noul\n"
+#~ "                                  cont utilizator\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Parola setata pentru expirare."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: nu pot închide fişierul passwd\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: nu pot deschide fişierul passwd\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s nu pot încuia fişierul shadow\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: nu pot deschide fişierul shadow\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: nu pot rescrie fişierul shadow\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: nu pot rescrie fişierul passwd\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: nu pot actualiza fişierul passwd\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: nu pot actualiza fişierul shadow\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tNume complet: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tNumăr cameră: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelefon birou: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelefon acasă: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Nu pot încuia fişierul passwd; încercaţi mai târziu.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Nu pot deschide fişierul passwd.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s negăsit în /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Eroare la actualizarea intrării în passwd.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Nu pot face modificările în fişierul passwd.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Nu pot debloca fişierul passwd.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: nu pot încuia fişierul de grupuri\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: nu pot deschide fişierul de grupuri\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: nu pot închide fişierul gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: nu pot deschide fişierul shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: eroare la actualizarea fişierului shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: eroare la actualizarea intrărilor de grupuri\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: linia %d: grup necunoscut %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: linia %d: nu pot actualiza intrarea\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: nu pot închide fişierul shadow\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: eroare la actualizarea fişierului shadow\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: eroare la actualizarea fişierului passwd\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: linia %d: utilizator necunoscut %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: linia %d: nu pot actualiza intrarea în passwd\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: utilizator necunoscut\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Utilizator necunoscut: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Utilizare: %s [-r|-R] grup\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a utilizator] grup\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d utilizator] grup\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A utilizator,...] [-M utilizator,...] grup\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M utilizator,...] grup\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: nu pot obţine închiderea\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: nu pot obţine închiderea shadow\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: nu pot deschide fişierul\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: nu pot rescrie fişierul\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: nu pot rescrie fişierul shadow\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: nu pot descuia fişierul\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: nu pot actualiza intrarea\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: nu pot actualiza intrarea shadow\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "grup necunoscut: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: nu pot deschide fişierul\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: nu pot deschide fişierul shadow\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Cine sunteţi?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: membru necunoscut %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: eroare la adăugarea unei noi intrări de grup\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: nu pot rescrie fişierul de grupuri\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: nu pot rescrie fişierul gshadow\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: nu pot încuia fişierul de grupuri\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: nu pot deschide fişierul de grupuri\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: nu pot încuia fişierul gshadow\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: nu pot deschide fişierul gshadow\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u nu este unic\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: eroare la ştergerea intrării de grup\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: eroare la ştergerea intrării din gshadow\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: nu pot şterge grupul primar al utilizatorului.\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s: autentificare PAM eşuată\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s: nu pot încuia fişierul de grupuri\n"
+
+#, fuzzy
+#~ msgid "Unable to open group file\n"
+#~ msgstr "%s: nu pot deschide fişierul de grupuri\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s: nu pot deschide fişierul de grupuri\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s nu s-a găsit în /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u nu este un GID unic\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s nu este un nume unic\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: nu pot rescrie fişierul passwd\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: nu pot încuia fişierul passwd\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: nu pot deschide fişierul passwd\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: nu pot încuia fişierul %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: nu pot actualiza intrarea parolei criptate pentru %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: nu pot actualiza intrarea pentru grupul %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: nu pot încuia fişierul gshadow\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: nu pot deschide fişierul gshadow\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: nu pot şterge gshadow %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: nu pot actualiza fişierul gshadow\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: nu pot actualiza fişierul de grupuri\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: nu pot şterge fişierul gshadow\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "UID necunoscut: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "GID necunoscut: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: grupul %s nu există\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: utilizatorul %s nu există\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: nume utilizator nevalid '%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: nu pot încuia /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: nu pot încuia /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: nu pot încuia /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: nu pot încuia /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: nu pot deschide fişierele\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: eroare la actualizarea fişierelor\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: linia %d: nu pot găsi utilizatorul %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: nu pot actualiza intrarea passwd pentru %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: nu pot încuia fişierul passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: nu pot deschide fişierul passwd\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: nu pot şterge intrarea shadow pentru %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: nu pot actualiza fişierul shadow\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: nu pot actualiza fişierul passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: nu pot actualiza intrarea pentru utilizatorul %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: nu pot şterge fişierul shadow\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: GID necunoscut %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: grup necunoscut %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: nu mai este memorie pentru update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: nu pot rescrie fişierul passwd\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: nu pot rescrie fişierul shadow\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: nu pot încuia fişierul shadow\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: nu pot deschide fişierul shadow\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: eroare la închiderea fişierului de grupuri\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: eroare la deschiderea fişierului de grupuri\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: eroare la închiderea fişierului gshadow\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: eroare la deschiderea fişierului gshadow\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: eroare la adăugarea unei noi intrări în passwd\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: eroare la adăugarea unei noi intrări în shadow\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: avertisment: CREATE_HOME nu este suportat, vă rog folosiţi -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: eroare la actualizarea intrărilor de grupuri\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: eroare la actualizarea intrărilor de grupuri\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: nu pot deschide fişierul de grupuri\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: nu pot deschide fişierul gshadow\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: eroare la ştergerea intrării din passwd\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: eroare la ştergerea intrării din shadow\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: utilizatorul %s nu există\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: eroare la adăugarea unei noi intrări de grup\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu nu este unic\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: eroare la schimbarea intrării în passwd\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: eroare la ştergerea intrării passwd\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: eroare la ştergerea intrării din shadow\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: nu pot prelua GID unic\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " pe '%.100s' din '%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " pe '%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: linia %d: nu pot crea UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: numele %s nu este unic\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Folosire: chgpasswd [opţiuni]\n"
+#~ "\n"
+#~ "Opţiuni:\n"
+#~ "  -e, --encrypted\tparolele oferite sunt criptate\n"
+#~ "  -h, --help\t\tafişează acest mesaj de ajutor şi ieşi\n"
+#~ "  -m, --md5\t\tfoloseşte criptarea MD5 în loc de DES atunci când "
+#~ "parolele\n"
+#~ "\t\t\toferite nu sunt criptate\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Fără fişier passwd\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Scuze.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Scuze, parola pentru %s încă nu poate fi schimbată.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Scuze."
diff --git a/po/ru.gmo b/po/ru.gmo
new file mode 100644 (file)
index 0000000..acd3834
Binary files /dev/null and b/po/ru.gmo differ
diff --git a/po/ru.po b/po/ru.po
new file mode 100644 (file)
index 0000000..765810d
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,2314 @@
+# translation of ru.po to Russian
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# Nikolai Prokoschenko <nikolai@prokoschenko.de>, 2004.
+# Eugene Konev <ejka@imfi.kspu.ru>, 2004.
+# alyoshin.s@gmail.com <alyoshin.s@gmail.com>, 2008.
+# Yuri Kozlov <kozlov.y@gmail.com>, 2004, 2005, 2006, 2007, 2008.
+# Yuri Kozlov <yuray@komyakino.ru>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 1:4.1.1-6\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2009-05-08 22:36+0400\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\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"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Есть сразу несколько записей с именем '%s' в %s. Исправьте это с помощью "
+"pwck или grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "метод шифрования не поддерживается libcrypt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr "ошибка настройки: не удалось разобрать значение %s: '%s'"
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Не удалось выделить память для загрузки настроек.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "Ошибка настройки: неизвестный элемент '%s' (сообщите администратору)\n"
+
+msgid "Password: "
+msgstr "Пароль: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Пароль пользователя %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Внимание: неизвестная группа %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Внимание: слишком много групп\n"
+
+msgid "Your password has expired."
+msgstr "Срок действия вашего пароля истёк."
+
+msgid "Your password is inactive."
+msgstr "Действие вашего пароля приостановлено."
+
+msgid "Your login has expired."
+msgstr "Срок действия вашей учётной записи истёк."
+
+msgid "  Contact the system administrator."
+msgstr "  Обратитесь к системному администратору."
+
+msgid "  Choose a new password."
+msgstr "  Выберите и введите новый пароль."
+
+msgid "You must change your password."
+msgstr "Вы должны изменить свой пароль."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Срок действия вашего пароля истекает через %ld дней.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Срок действия вашего пароля истекает завтра."
+
+msgid "Your password will expire today."
+msgstr "Срок действия вашего пароля истекает сегодня."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+"Не удалось открыть интерфейс контрольной проверки (audit) -- прекращение "
+"работы.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Не удалось изменить владельца или права на tty stdin: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: не удалось разблокировать %s\n"
+
+msgid "Environment overflow\n"
+msgstr "Слишком большое количество переменных среды выполнения\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Вы не можете изменить $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d неудачная попытка входа в систему.\n"
+"Последняя была %s на %s.\n"
+msgstr[1] ""
+"%d неудачных попыток входа в систему.\n"
+"Последняя была %s на %s.\n"
+msgstr[2] "%d неудачных попыток входа в систему. Последняя была %s на %s.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr ""
+"%s: не удалось получить уникальный системный UID (кончились свободные UID-"
+"ы)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: не удалось получить уникальный GID (кончились свободные GID-ы)\n"
+
+#, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr ""
+"%s: не удалось получить уникальный системный UID (кончились свободные UID-"
+"ы)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: не удалось получить уникальный UID (кончились свободные UID-ы)\n"
+
+msgid "Too many logins.\n"
+msgstr "Слишком много попыток входа в систему.\n"
+
+msgid "You have new mail."
+msgstr "Для вас есть новые почтовые сообщения."
+
+msgid "No mail."
+msgstr "Для вас нет почтовых сообщений."
+
+msgid "You have mail."
+msgstr "Для вас есть почтовые сообщения."
+
+msgid "no change"
+msgstr "изменений не внесено"
+
+msgid "a palindrome"
+msgstr "палиндром"
+
+msgid "case changes only"
+msgstr "изменение только в регистре символов"
+
+msgid "too similar"
+msgstr "слишком похожий"
+
+msgid "too simple"
+msgstr "слишком простой"
+
+msgid "rotated"
+msgstr "перестановка символов"
+
+msgid "too short"
+msgstr "слишком короткий"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Неверный пароль: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: ошибка %d в pam_start()\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#
+msgid "passwd: password unchanged\n"
+msgstr "passwd: пароль не изменён\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: пароль успешно обновлён\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Неверный пароль для %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Неправильное значение для ENCRYPT_METHOD: '%s'.\n"
+"Используется значение по умолчанию DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Невозможно перейти в каталог '%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr ""
+"Каталог отсутствует или недоступен, вход в систему выполняется с HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Не удалось выполнить %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Неверный корневой каталог '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Не удалось изменить корневой каталог на '%s'\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Не удалось определить название вашего терминала."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: нехватка памяти\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "не удалось выделить %d байт памяти\n"
+
+msgid "No"
+msgstr "Нет"
+
+#
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Использование: chage [параметры] [имя пользователя]\n"
+"\n"
+"Параметры:\n"
+"  -d, --lastday LAST_DAY        установить последний день смены пароля\n"
+"                                в LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  установить дату окончания действия\n"
+"                                учётной записи в EXPIRE_DATE\n"
+"  -h, --help                    показать это сообщение и закончить работу\n"
+"  -I, --inactive INACTIVE       установить неактивность пароля после\n"
+"                                устаревания в значение INACTIVE\n"
+"  -l, --list                    показать \"возраст\" учётной записи\n"
+"  -m, --mindays MIN_DAYS        установить минимальное число дней перед\n"
+"                                сменой пароля в MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        установить максимальное число дней перед\n"
+"                                сменой пароля в MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      установить количество дней с выдачей\n"
+"                                предупреждения в WARN_DAYS\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"Введите новое значение или нажмите ВВОД для выбора значения по умолчанию"
+
+msgid "Minimum Password Age"
+msgstr "Минимальный срок действия пароля (дней)"
+
+msgid "Maximum Password Age"
+msgstr "Максимальный срок действия пароля (дней)"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Последний раз пароль был изменён (ГГГГ-ММ-ДД)"
+
+msgid "Password Expiration Warning"
+msgstr "Предупреждать об истечении срока действия пароля за (дней)"
+
+msgid "Password Inactive"
+msgstr "Деактивировать учётную запись через (дней)"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Дата истечения срока действия учётной записи (ГГГГ-ММ-ДД)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Последний раз пароль был изменён\t\t\t\t\t: "
+
+msgid "never"
+msgstr "никогда"
+
+msgid "password must be changed"
+msgstr "пароль должен быть изменён"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Срок действия пароля истекает\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Пароль будет деактивирован через (дней)\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Срок действия учётной записи истекает\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Минимальное количество дней между сменой пароля\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Максимальное количество дней между сменой пароля\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Количество дней с предупреждением перед деактивацией пароля\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: неверная дата '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: неверный числовой параметр '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: не используйте \"l\" совместно с другими ключами\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Доступ запрещён.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Не удалось определить имя пользователя.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: проверка подлинности PAM завершилась неудачно\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: не удалось заблокировать %s; попробуйте ещё раз позже.\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: не удалось открыть %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: ошибка при записи изменений в %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: не удалось подготовить новую %s запись '%s'\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: отсутствует теневой файл паролей\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: не удалось снизить уровень привилегий (%s)\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: пользователь '%s' не существует в %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Изменение информации о сроках действия для %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: ошибка при изменении полей\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Использование: %s [-f полное имя] [-r номер комнаты] [-w рабочий телефон]\n"
+"\t[-h домашний телефон] [-o другое] [имя пользователя]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Использование: %s [-f полное имя] [-r номер комнаты] [-w рабочий телефон] [-"
+"h домашний телефон]\n"
+
+msgid "Full Name"
+msgstr "Полное имя"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Номер комнаты"
+
+msgid "Work Phone"
+msgstr "Рабочий телефон"
+
+msgid "Home Phone"
+msgstr "Домашний телефон"
+
+msgid "Other"
+msgstr "Другое"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Не удалось получить права суперпользователя.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: имя содержит не ASCII-символы: '%s'\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: неверное имя: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: номер комнаты содержит не ASCII-символы: '%s'\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: неверный номер комнаты: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: неверный рабочий телефон: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: неверный домашний телефон: '%s'\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' содержит не ASCII-символы\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' содержит недопустимые символы\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: пользователь '%s' не существует\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: невозможно изменить пользователя '%s' на клиенте NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' -- сервер NIS для этого клиента.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Изменение информации о пользователе %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: поля слишком длинные\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Использование: %s [параметры]\n"
+"\n"
+"Параметры:\n"
+"  -c, --crypt-method    метод шифрования (один из %s)\n"
+"  -e, --encrypted       вводится уже шифрованный пароль\n"
+"  -h, --help            показать это сообщение и завершить работу программы\n"
+"  -m, --md5             использовать шифрование MD5 вместо DES, если пароль\n"
+"                        вводится не шифрованным\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds      количество раундов SHA для алгоритмов\n"
+"                        шифрования SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: флаг %s разрешено использовать только вместе с флагом %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: флаги -c, -e и -m являются взаимоисключающими\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: неподдерживаемый метод шифрования: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: строка %d: слишком длинная строка\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: строка %d: отсутствует новый пароль\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: строка %d: группа '%s' не существует\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: строка %d: не удалось подготовить новую %s запись '%s'\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: обнаружена ошибка, изменения не были сохранены\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -s, --sha-rounds      количество раундов SHA для алгоритмов\n"
+"                        шифрования SHA*\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: user '%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: line %d: пользователь '%s' не существует\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: line %d: пользователь '%s' не существует\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Использование: chsh [параметры] [имя пользователя]\n"
+"\n"
+"Параметры:\n"
+"  -h, --help            показать данное сообщение и закончить работу\n"
+"  -s, --shell SHELL     новая регистрационная оболочка для учётной записи\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Командная оболочка"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Вы не можете изменять командную оболочку для '%s'.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Изменение командной оболочки для %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Неверное значение: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s: %s не является командной оболочкой.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Использование: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+"  -Z, --selinux-user            новое SELinux-отображение учётной записи\n"
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to get the entry for UID %d\n"
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr "faillog: не удалось получить запись для UID %d\n"
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Уч.запись      Неуд. попыток  Максимум  Последний раз\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [осталось %lu]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%ld блокировок]"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to reset fail count for UID %d\n"
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr "faillog: не удалось сбросить счётчики неудачных попыток для UID %d\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set max for UID %d\n"
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr "faillog: не удалось установить максимальное число попыток для UID %d\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set locktime for UID %d\n"
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr "faillog: не удалось установить время блокировки для UID %d\n"
+
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "lastlog: неизвестный пользователь или диапазон: %s\n"
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "faillog: не удалось открыть %s: %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr "faillog: не удалось получить размер %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+"Использование: %s [параметр] ГРУППА\n"
+"\n"
+"Параметры:\n"
+"  -a, --add ПОЛЬЗОВАТЕЛЬ          добавить ПОЛЬЗОВАТЕЛЯ в ГРУППУ\n"
+"  -d, --delete ПОЛЬЗОВАТЕЛЬ       удалить ПОЛЬЗОВАТЕЛЯ из ГРУППЫ\n"
+"  -r, --remove-password           удалить пароль ГРУППЫ\n"
+"  -R, --restrict                  ограничить доступ к ГРУППЕ её членам\n"
+"  -M, --members ПОЛЬЗОВАТЕЛЬ,...  задать список членов ГРУППЫ\n"
+"%s\n"
+"\n"
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"  -A, --administrators АДМИН,...\n"
+"                                  задать список администраторов ГРУППЫ\n"
+"За исключением параметров -A и -M, остальные не могут указываться\n"
+"одновременно.\n"
+
+#
+msgid "The options cannot be combined.\n"
+msgstr "Параметры не могут быть указаны одновременно.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: для -A требуется поддержка теневого файла паролей групп\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: группа %s не существует в %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: ошибка при закрытии только для чтения %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Изменение пароля для группы %s\n"
+
+msgid "New Password: "
+msgstr "Новый пароль: "
+
+msgid "Re-enter new password: "
+msgstr "Повторите новый пароль: "
+
+msgid "They don't match; try again"
+msgstr "Пароли не совпадают, попробуйте ещё раз"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Попробуйте позже\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Добавление пользователя %s в группу %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Удаление пользователя %s из группы %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: пользователь %s не является членом %s\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Не терминал\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -s, --sha-rounds      количество раундов SHA для алгоритмов\n"
+"                        шифрования SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+"  -Z, --selinux-user            новое SELinux-отображение учётной записи\n"
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds      количество раундов SHA для алгоритмов\n"
+"                        шифрования SHA*\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+"  -Z, --selinux-user            новое SELinux-отображение учётной записи\n"
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s не может быть именем группы\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: неверный ID группы '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: для -К необходимо ИМЯ=ЗНАЧЕНИЕ\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: группа %s уже существует\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID '%lu' уже существует\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Использование: groupdel группа\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: не удалось удалить запись %s из %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: не удалось удалить первичную группу пользователя '%s'\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: группа %s не существует\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: группа '%s' является группой NIS\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s является мастер сервером NIS\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: пользователь %s является членом %s\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Недостаточно памяти. Не удалось обновить %s.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+"Использование: groupmems [параметры] [действие]\n"
+"\n"
+"Параметры:\n"
+"  -g, --group имя_группы          изменить имя_группы вместо "
+"пользовательской\n"
+"                                  группы (только для root)\n"
+"\n"
+"Действия:\n"
+"  -a, --add имя_польз             добавить имя_польз в члены группы\n"
+"  -d, --delete имя_польз          удалить имя_польз из членов группы\n"
+"  -p, --purge                     удалить всех членов из группы\n"
+"  -l, --list                      показать всех членов группы\n"
+"\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: ваше имя_группы не совпадает с вашим пользовательским именем\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: только root может использовать параметр -g/--group\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+"  -Z, --selinux-user            новое SELinux-отображение учётной записи\n"
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: неверное имя группы '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: группа %s является группой NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: неизвестный пользователь %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Использование: %s [-r] [-s] [group [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Использование: %s [-r] [-s] [group]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s и -r не могут использоваться одновременно\n"
+
+msgid "invalid group file entry"
+msgstr "неверная запись в файле групп"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "удалить строку '%s'? "
+
+msgid "duplicate group entry"
+msgstr "повторяющаяся запись в файле групп"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "неверное имя группы '%s'\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "неверный ID группы '%lu'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "группа %s: пользователь %s не существует\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "удалить члена группы '%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "отсутствует соответствующая группа в файле %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "добавить группу '%s' в %s ? "
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "неверная запись в теневом файле групп"
+
+msgid "duplicate shadow group entry"
+msgstr "повторяющаяся запись в теневом файле групп"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "теневая группа %s: административный пользователь %s не существует\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "удалить административного члена '%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "теневая группа %s: пользователь %s не существует\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: файлы были изменены\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: изменений не внесено\n"
+
+#
+msgid "Usage: grpconv\n"
+msgstr "Использование: grpconv\n"
+
+#
+msgid "Usage: grpunconv\n"
+msgstr "Использование: grpunconv\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: не удалось удалить %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Использование: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Использование: id\n"
+
+msgid " groups="
+msgstr " группы="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Использование: lastlog [параметры]\n"
+"\n"
+"Параметры:\n"
+"  -b, --before DAYS     показать записи lastlog за последние DAYS дней\n"
+"  -h, --help            показать это сообщение и завершить работу программы\n"
+"  -t, --time DAYS       показать записи lastlog за последние DAYS дней\n"
+"  -u, --user ИМЯ        показать запись lastlog для учётной записи ИМЯ\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "lastlog: Failed to get the entry for UID %d\n"
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr "lastlog: не удалось получить запись для UID %d\n"
+
+msgid "Username         Port     From             Latest"
+msgstr "Пользователь     Порт     С                Последний раз"
+
+msgid "Username                Port     Latest"
+msgstr "Пользователь            Порт     Последний раз"
+
+msgid "**Never logged in**"
+msgstr "**Никогда не входил в систему**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: неожиданный параметр: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr "lastlog: не удалось получить размер %s: %s\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Использование: %s [-p] [имя пользователя]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "                    %s [-p] [-h имя хоста] [-f имя пользователя]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "                    %s [-p] -r имя хоста\n"
+
+#, fuzzy, c-format
+#| msgid "configuration error - cannot parse %s value: '%s'"
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr "ошибка настройки: не удалось разобрать значение %s: '%s'"
+
+msgid "Invalid login time"
+msgstr "Вход в систему сейчас запрещён"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Система закрыта для проведения технического обслуживания"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Отключение не выполнено -- вход в систему для суперпользователя разрешён.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Время на выполнение входа в систему истекло после %d секунд.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Нет записи в utmp. Вы должны запускать \"login\" из самого первого уровня "
+"\"sh\""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: ошибка PAM, аварийное завершение работы: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s имя пользователя: "
+
+msgid "login: "
+msgstr "имя пользователя: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Превышено максимальное число попыток (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: аварийное завершение работы по запросу PAM\n"
+
+msgid "Login incorrect"
+msgstr "Неверное имя пользователя"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"Имя пользователя %s: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: ошибка при вызове fork: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "Не прошло TIOCSCTTY на %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Внимание: вход в систему снова возможен."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Последний вход в систему: %s на %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Последний вход в систему: %.19s на %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " с %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"время входа в систему истекло\n"
+"\n"
+
+#
+msgid "Usage: logoutd\n"
+msgstr "Использование: logoutd\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Использование: newgrp [-] [группа]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Использование: sg группа [[-c] команда]\n"
+
+msgid "Invalid password.\n"
+msgstr "Неправильный пароль.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: ошибка при вызове fork: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID '%lu' не существует\n"
+
+msgid "too many groups\n"
+msgstr "слишком много групп\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+"  -Z, --selinux-user            новое SELinux-отображение учётной записи\n"
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+"%s: группа %s является теневой группой, но не существует в /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: неверный ID пользователя '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: неверное имя пользователя '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: строка %d: ошибка в строке\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: не удалось обновить запись для пользователя %s (его нет в базе данных "
+"паролей)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: строка %d: не удалось создать пользователя\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: строка %d: не удалось создать группу\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: строка %d: пользователь '%s' не существует в %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: строка %d: не удалось обновить пароль\n"
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: строка %d: вызов mkdir %s завершился неудачно: %s\n"
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: строка %d: вызов chown %s завершился неудачно: %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: строка %d: не удалось обновить запись\n"
+
+#
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Использование: passwd [параметры] [имя пользователя]\n"
+"\n"
+"Параметры:\n"
+"  -a, --all                     показать состояние паролей всех учётных\n"
+"                                записей\n"
+"  -d, --delete                  удалить пароль заданной учётной записи\n"
+"  -e, --expire                  просрочить пароль заданной учётной записи\n"
+"  -h, --help                    показать это сообщение и завершить работу\n"
+"                                программы\n"
+"  -k, --keep-tokens             изменять пароль только с истёкшим сроком\n"
+"                                действия\n"
+"  -i, --inactive INACTIVE       установить неактивность пароля после\n"
+"                                истечения срока в значение INACTIVE\n"
+"  -l, --lock                    заблокировать заданную учётную запись\n"
+"  -n, --mindays MIN_DAYS        установить минимальное число дней перед\n"
+"                                сменой пароля в MIN_DAYS\n"
+"  -q, --quiet                   не показывать сообщений\n"
+"  -r, --repository REPOSITORY   изменить пароль в репозитории REPOSITORY\n"
+"  -S, --status                  показать состояние пароля заданной учётной\n"
+"                                записи\n"
+"  -u, --unlock                  разблокировать заданную учётную запись\n"
+"  -w, --warndays WARN_DAYS      установить количество дней с\n"
+"                                выдачей предупреждения в WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        установить максимальное число дней перед\n"
+"                                сменой пароля в MAX_DAYS\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Старый пароль: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Введите новый пароль (минимальная длина %d символов)\n"
+"Используйте комбинацию из символов в верхнем и нижнем регистре и цифры.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Введите новый пароль (минимальная длина %d, максимальная длина %d символов)\n"
+" Используйте комбинацию из символов в верхнем и нижнем регистре и цифры.\n"
+
+msgid "New password: "
+msgstr "Новый пароль: "
+
+msgid "Try again."
+msgstr "Попробуйте ещё раз."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Внимание: слишком простой пароль (чтобы всё равно использовать этот пароль, "
+"введите его ещё раз)."
+
+msgid "They don't match; try again.\n"
+msgstr "Пароли не совпадают, попробуйте ещё раз.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Пароль пользователя %s не может быть изменён.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Пароль для %s пока не может быть изменён.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: разблокировка пароля приведёт к появлению беспарольной учётной\n"
+"записи. Вы должны задать пароль с помощью usermod -p для разблокировки "
+"учётной записи пользователя.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: хранилище %s не поддерживается\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr "%s: у %s нет прав изменять пароль %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: вы не можете посмотреть или изменить пароль %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Изменение пароля для %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Пароль для %s не был изменён.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Пароль изменён."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Предупреждать об истечении срока действия пароля за (дней)"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr ""
+"Использование: %s [-q] [-r] [-s] [файл паролей [теневой файл паролей]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s и -r не могут использоваться одновременно\n"
+
+msgid "invalid password file entry"
+msgstr "неверная запись в файле паролей"
+
+msgid "duplicate password entry"
+msgstr "повторяющаяся запись в файле паролей"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "неверное имя пользователя '%s'\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "неверный ID пользователя '%lu'\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "пользователь %s: группа %lu не существует\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "пользователь '%s': каталог '%s' не существует\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "пользователь %s: программа %s не существует\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "отсутствует соответствующая запись %s в файле паролей\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "добавить пользователя '%s' в %s ? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "неверная запись в теневом файле паролей"
+
+msgid "duplicate shadow password entry"
+msgstr "повторяющаяся запись в теневом файле паролей"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "пользователь %s: время последнего изменения пароля в будущем\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: не удалось отсортировать записи в %s\n"
+
+#
+msgid "Usage: pwconv\n"
+msgstr "Использование: pwconv\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: не удалось изменить права %s на 0600\n"
+
+#
+msgid "Usage: pwunconv\n"
+msgstr "Использование: pwunconv\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Переключение на эту учётную запись ЗАПРЕЩЕНО.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Проверка подлинности по паролю пропущена.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Введите ваш СОБСТВЕННЫЙ пароль.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Использование: su [параметры] [имя пользователя]\n"
+"\n"
+"Параметры:\n"
+"  -c, --command COMMAND         передать команду COMMAND вызываемой "
+"оболочке\n"
+"  -h, --help                    показать данное сообщение и закончить "
+"работу\n"
+"  -, -l, --login                запускать оболочку как регистрационную\n"
+"  -m, -p,\n"
+"  --preserve-environment        не сбрасывать переменные окружения и\n"
+"                                сохранить запустившую оболочку\n"
+"  -s, --shell SHELL             использовать значение переменной SHELL\n"
+"                                вместо значения из файла passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: должен выполняться из терминала\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: ошибка %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Неизвестный id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "У вас нет права переключать учётную запись %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Введите ваш собственный пароль)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Игнорировано)\n"
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: не удалось пройти проверку подлинности\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: сейчас у вас нет прав выполнять su\n"
+
+msgid "No shell\n"
+msgstr "Отсутствует командная оболочка\n"
+
+msgid "No password file"
+msgstr "Отсутствует файл паролей"
+
+msgid "TIOCSCTTY failed"
+msgstr "Не прошло TIOCSCTTY"
+
+msgid "No password entry for 'root'"
+msgstr "Отсутствует запись для 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Нажмите control-d для продолжения загрузки в обычном режиме,\n"
+"(или введите пароль суперпользователя для выполнения системного "
+"обслуживания):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Вход в режим системного обслуживания"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr "%s: настройка %s в %s будет проигнорирована\n"
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: не удалось создать новый файл значений по умолчанию\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: не удалось открыть новый файл значений по умолчанию\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown %s failed: %s\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: строка %d: вызов chown %s завершился неудачно: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: переименовать: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: группа '%s' является группой NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: указано слишком много групп (максимум %d).\n"
+
+#, c-format
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds      количество раундов SHA для алгоритмов\n"
+"                        шифрования SHA*\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds      количество раундов SHA для алгоритмов\n"
+"                        шифрования SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds      количество раундов SHA для алгоритмов\n"
+"                        шифрования SHA*\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds      количество раундов SHA для алгоритмов\n"
+"                        шифрования SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+"  -Z, --selinux-user            новое SELinux-отображение учётной записи\n"
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds      количество раундов SHA для алгоритмов\n"
+"                        шифрования SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -s, --sha-rounds      количество раундов SHA для алгоритмов\n"
+"                        шифрования SHA*\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+"  -Z, --selinux-user            новое SELinux-отображение учётной записи\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -Z, --selinux-user            new SELinux user mapping for the user "
+#| "account\n"
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+"  -Z, --selinux-user            новое SELinux-отображение учётной записи\n"
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+"  -Z, --selinux-user SEUSER     использовать указанного SEUSER для\n"
+"                                отображения в пользователя SELinux\n"
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: неверный базовый каталог '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: неверный комментарий '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: неверный домашний каталог '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: для параметра -e необходима поддержка теневых паролей\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: для параметра -f необходима поддержка теневых паролей\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: неверное поле '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: неверная командная оболочка '%s'\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr "%s: для -Z в ядре требуется включить SELinux\n"
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: конфликт параметров %s и %s\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: не удалось сбросить запись в faillog для UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: не удалось сбросить запись в lastlog для UID %lu: %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+"%s: предупреждение: не удалось отобразить имя пользователя %s в %s из "
+"SELinux.\n"
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: не удалось создать каталог %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Создание почтового ящика"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Не найдена группа 'mail'. Создаётся пользовательский почтовый ящик с правами "
+"0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Установка прав на файл почтового ящика"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: пользователь %s уже существует\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: группа %s существует -- для добавления в неё этого пользователя, "
+"используйте -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: не удалось создать пользователя\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu не является уникальным\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: не удалось создать группу\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: внимание: домашний каталог уже существует.\n"
+"Никакие файлы из каталога skel копироваться не будут.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Использование: userdel [параметры] имя пользователя\n"
+"\n"
+"Параметры:\n"
+"  -f, --force                   удалять файлы, даже если они\n"
+"                                не принадлежат пользователю\n"
+"  -h, --help                    показать данное сообщение и закончить "
+"работу\n"
+"  -r, --remove                  удалить домашний каталог и почтовый ящик\n"
+"\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: группа %s является первичной для другого пользователя и не может быть "
+"удалена.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove %s: %s"
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: внимание: не удалось удалить %s: %s"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s не принадлежит %s, удаление не выполнено\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: пользователь %s является пользователем NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: пользователь %s находится в системе\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: неверный домашний каталог '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: каталог %s не удалён (является домашним каталогом пользователя %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: ошибка удаления каталога %s\n"
+
+#, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Использование: usermod [параметры] имя пользователя\n"
+"\n"
+"Параметры:\n"
+"  -c, --comment КОММЕНТАРИЙ     новое значение поля GECOS\n"
+"  -d, --home ДОМ_КАТ            новый домашний каталог учётной записи\n"
+"  -e, --expiredate EXPIRE_DATE  установить дату окончания действия\n"
+"                                учётной записи в EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       установить пароль после устаревания учётной\n"
+"                                записи в INACTIVE\n"
+"  -g, --gid ГРУППА              принудительно назначить первичную ГРУППУ\n"
+"  -G, --groups ГРУППЫ           список дополнительных ГРУПП\n"
+"  -a, --append                  добавить пользователя в дополнительные\n"
+"                                ГРУППЫ, указанные в параметре -G не удаляя\n"
+"                                пользователя из других групп\n"
+"  -h, --help                    показать данное сообщение и закончить "
+"работу\n"
+"  -l, --login НОВОЕ_ИМЯ         новое значение имени учётной записи\n"
+"  -L, --lock                    заблокировать учётную запись\n"
+"  -m, --move-home               переместить содержимое домашнего каталога\n"
+"                                в новое место (использовать только вместе с -"
+"d)\n"
+"  -o, --non-unique              разрешить создание учётной записи с уже\n"
+"                                имеющимся (не уникальным) UID\n"
+"  -p, --password ПАРОЛЬ         задать новый шифрованный пароль для\n"
+"                                учётной записи\n"
+"  -s, --shell ОБОЛОЧКА          задать новую оболочку для\n"
+"                                учётной записи\n"
+"  -u, --uid UID                 новый UID для учётной записи\n"
+"  -U, --unlock                  разблокировать учётную запись\n"
+"%s\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+"  -Z, --selinux-user            новое SELinux-отображение учётной записи\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: разблокировка пароля пользователя приведёт к появлению беспарольной\n"
+"учётной записи. Вы должны задать пароль с помощью usermod -p для "
+"разблокировки пароля пользователя.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: пользователь %s уже существует в %s\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: не заданы параметры\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr ""
+"%s: для параметров -e и -f требуется поддержка теневых файлов паролей\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: параметры -L, -p и -U взаимоисключающие\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID '%lu' уже существует\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: каталог %s существует\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: не удалось создать %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: не удалось сменить владельца %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: внимание: не удалось полностью удалить старый домашний каталог %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: не удалось переименовать каталог %s в %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: не удалось скопировать запись lastlog о пользователе %lu в пользователя %"
+"lu: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: не удалось скопировать запись faillog о пользователе %lu в пользователя %"
+"lu: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: внимание: %s не принадлежит %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "не удалось сменить владельца почтового ящика"
+
+msgid "failed to rename mailbox"
+msgstr "не удалось переименовать почтовый ящик"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Вы изменили %s.\n"
+"Для обеспечения согласованности вам может потребоваться изменить %s.\n"
+"Для этого используйте команду '%s'.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Использование: vipw [параметры]\n"
+"\n"
+"Параметры:\n"
+"  -g, --group                   редактировать базу данных групп\n"
+"  -h, --help                    показать данное сообщение и закончить "
+"работу\n"
+"  -p, --passwd                  редактировать базу данных паролей\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  редактировать базу данных теневых\n"
+"                                паролей пользователей или групп\n"
+"\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: не удалось удалить %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s не был изменён\n"
+
+#
+msgid "Couldn't get file context"
+msgstr "Не удалось получить файловый контекст"
+
+msgid "setfscreatecon () failed"
+msgstr "Вызов setfscreatecon () завершился неудачно"
+
+msgid "Couldn't lock file"
+msgstr "Не удалось заблокировать файл"
+
+msgid "Couldn't make backup"
+msgstr "Не удалось создать резервную копию"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: не удалось восстановить %s: %s (ваши изменения в %s)\n"
+
+#
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: faillog [параметры]\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ "  -a, --all             показать записи faillog обо всех пользователях\n"
+#~ "  -h, --help            показать это сообщение и завершить работу "
+#~ "программы\n"
+#~ "  -l, --lock-time СЕК   при неудачной попытке входа блокировать\n"
+#~ "                        учётную запись на СЕК секунд\n"
+#~ "  -m, --maximum МАКС    установить максимальное число неудачных попыток\n"
+#~ "                        входа равным МАКС\n"
+#~ "  -r, --reset           обнулить счётчики неудачных попыток входа\n"
+#~ "  -t, --time ДНЕЙ       показать записи faillog за последние ДНЕЙ дней\n"
+#~ "  -u, --user ИМЯ        показать запись faillog или настроить счётчики\n"
+#~ "                        неудачных попыток и ограничения (вместе с -r, -m\n"
+#~ "                        или -l) только для учётной записи с заданным "
+#~ "ИМЕНЕМ\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: groupadd [параметры] ГРУППА\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ "  -f, --force           закончить работу с успешным кодом возврата, если\n"
+#~ "                        заданная группа уже существует\n"
+#~ "  -g, --gid GID         для новой группы использовать GID\n"
+#~ "  -h, --help            показать данное сообщение и закончить работу\n"
+#~ "  -K, --key KEY=VALUE   изменить значения по умолчанию из /etc/login."
+#~ "defs\n"
+#~ "  -o, --non-unique      разрешить создание группы с уже имеющимся\n"
+#~ "                        (не уникальным) GID\n"
+#~ "  -p, --password PASS   использовать шифрованный пароль для новой группы\n"
+#~ "  -r, --system          создать системную учётную запись\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Использование: groupmod [параметры] ГРУППА\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ "  -g, --gid GID         для новой ГРУППЫ использовать GID\n"
+#~ "  -h, --help            показать данное сообщение и закончить работу\n"
+#~ "  -n, --new-name НОВ_ГР использовать имя НОВ_ГР для ГРУППЫ\n"
+#~ "  -o, --non-unique      разрешить создание ГРУППЫ с уже имеющимся\n"
+#~ "                        (не уникальным) GID\n"
+#~ "  -p, --password PASS   использовать шифрованный пароль для нового "
+#~ "пароля\n"
+#~ "\n"
+
+#
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Использование: useradd [параметры] имя пользователя\n"
+#~ "\n"
+#~ "Параметры:\n"
+#~ "  -b, --base-dir BASE_DIR       базовый каталог для домашнего каталога\n"
+#~ "                                новой учётной записи\n"
+#~ "  -c, --comment COMMENT         заполнить поле GECOS новой учётной "
+#~ "записи\n"
+#~ "  -d, --home-dir HOME_DIR       домашний каталог новой учётной записи\n"
+#~ "  -D, --defaults                показать или сохранить изменённые "
+#~ "настройки\n"
+#~ "                                useradd по умолчанию\n"
+#~ "  -e, --expiredate EXPIRE_DATE  установить дату окончания действия\n"
+#~ "                                учётной записи равной EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       установить пароль для устаревших учётных\n"
+#~ "                                записей в INACTIVE\n"
+#~ "  -g, --gid GROUP               принудительно назначить группу GROUP\n"
+#~ "                                для новой учётной записи\n"
+#~ "  -G, --groups GROUPS           задать список групп для новой\n"
+#~ "                                учётной записи\n"
+#~ "  -h, --help                    показать данное сообщение и закончить "
+#~ "работу\n"
+#~ "  -k, --skel SKEL_DIR           указать альтернативный каталог с "
+#~ "шаблонами\n"
+#~ "  -K, --key KEY=VALUE           изменить значения по умолчанию из\n"
+#~ "                                /etc/login.defs\n"
+#~ "  -l, --no-log-init             не добавлять пользователя в базы данных\n"
+#~ "                                lastlog и faillog\n"
+#~ "  -m, --create-home             создать домашний каталог для новой\n"
+#~ "                                учётной записи\n"
+#~ "  -M, --no-create-home          не создавать домашний каталог для новой\n"
+#~ "                                учётной записи (изменяет значение\n"
+#~ "                                 из /etc/login.defs)\n"
+#~ "  -N, --no-user-group           не создавать группу с именем как у\n"
+#~ "                                пользователя\n"
+#~ "  -o, --non-unique              разрешить создание учётной записи с уже\n"
+#~ "                                имеющимся (не уникальным) UID\n"
+#~ "  -p, --password PASSWORD       задать шифрованный пароль для новой\n"
+#~ "                                учётной записи\n"
+#~ "  -r, --system                  создать системную учётную запись\n"
+#~ "  -s, --shell SHELL             задать командную оболочку для новой\n"
+#~ "                                учётной записи\n"
+#~ "  -u, --uid UID                 принудительно назначить UID для новой\n"
+#~ "                                учётной записи\n"
+#~ "  -U, --user-group              создать группу с именем как у "
+#~ "пользователя\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Использование: %s [параметры] [ввод]\n"
+#~ "\n"
+#~ "  -c, --crypt-method    метод шифрования (один из %s)\n"
+#~ "  -r, --system          создать системную учётную запись\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Срок действия пароля истёк."
+
+#~ msgid "setfscreatecon() failed"
+#~ msgstr "Вызов setfscreatecon() завершился неудачно"
diff --git a/po/shadow.pot b/po/shadow.pot
new file mode 100644 (file)
index 0000000..4b31094
--- /dev/null
@@ -0,0 +1,1747 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+
+msgid "Password: "
+msgstr ""
+
+#, c-format
+msgid "%s's Password: "
+msgstr ""
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr ""
+
+msgid "Warning: too many groups\n"
+msgstr ""
+
+msgid "Your password has expired."
+msgstr ""
+
+msgid "Your password is inactive."
+msgstr ""
+
+msgid "Your login has expired."
+msgstr ""
+
+msgid "  Contact the system administrator."
+msgstr ""
+
+msgid "  Choose a new password."
+msgstr ""
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr ""
+
+msgid "Your password will expire tomorrow."
+msgstr ""
+
+msgid "Your password will expire today."
+msgstr ""
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr ""
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+
+msgid "Too many logins.\n"
+msgstr ""
+
+msgid "You have new mail."
+msgstr ""
+
+msgid "No mail."
+msgstr ""
+
+msgid "You have mail."
+msgstr ""
+
+msgid "no change"
+msgstr ""
+
+msgid "a palindrome"
+msgstr ""
+
+msgid "case changes only"
+msgstr ""
+
+msgid "too similar"
+msgstr ""
+
+msgid "too simple"
+msgstr ""
+
+msgid "rotated"
+msgstr ""
+
+msgid "too short"
+msgstr ""
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr ""
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr ""
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr ""
+
+msgid "passwd: password unchanged\n"
+msgstr ""
+
+msgid "passwd: password updated successfully\n"
+msgstr ""
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr ""
+
+msgid "No directory, logging in with HOME=/"
+msgstr ""
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr ""
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr ""
+
+msgid "Unable to determine your tty name."
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr ""
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+
+msgid "Minimum Password Age"
+msgstr ""
+
+msgid "Maximum Password Age"
+msgstr ""
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr ""
+
+msgid "Password Expiration Warning"
+msgstr ""
+
+msgid "Password Inactive"
+msgstr ""
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr ""
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr ""
+
+msgid "never"
+msgstr ""
+
+msgid "password must be changed"
+msgstr ""
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr ""
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr ""
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr ""
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr ""
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr ""
+
+msgid "Room Number"
+msgstr ""
+
+msgid "Work Phone"
+msgstr ""
+
+msgid "Home Phone"
+msgstr ""
+
+msgid "Other"
+msgstr ""
+
+msgid "Cannot change ID to root.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr ""
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr ""
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr ""
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr ""
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr ""
+
+#, c-format
+msgid " [%lus left]"
+msgstr ""
+
+#, c-format
+msgid " [%lds lock]"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+msgid "The options cannot be combined.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr ""
+
+msgid "New Password: "
+msgstr ""
+
+msgid "Re-enter new password: "
+msgstr ""
+
+msgid "They don't match; try again"
+msgstr ""
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr ""
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr ""
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr ""
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr ""
+
+msgid "invalid group file entry"
+msgstr ""
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr ""
+
+msgid "duplicate group entry"
+msgstr ""
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr ""
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr ""
+
+msgid "duplicate shadow group entry"
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr ""
+
+msgid "Usage: grpconv\n"
+msgstr ""
+
+msgid "Usage: grpunconv\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr ""
+
+msgid "Usage: id [-a]\n"
+msgstr ""
+
+msgid "Usage: id\n"
+msgstr ""
+
+msgid " groups="
+msgstr ""
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr ""
+
+msgid "Username                Port     Latest"
+msgstr ""
+
+msgid "**Never logged in**"
+msgstr ""
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr ""
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr ""
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr ""
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s login: "
+msgstr ""
+
+msgid "login: "
+msgstr ""
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr ""
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr ""
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr ""
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr ""
+
+#, c-format
+msgid " from %.*s"
+msgstr ""
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+
+msgid "Usage: logoutd\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr ""
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr ""
+
+msgid "Invalid password.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr ""
+
+msgid "too many groups\n"
+msgstr ""
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr ""
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+msgid "New password: "
+msgstr ""
+
+msgid "Try again."
+msgstr ""
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+
+msgid "They don't match; try again.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: password changed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr ""
+
+msgid "invalid password file entry"
+msgstr ""
+
+msgid "duplicate password entry"
+msgstr ""
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr ""
+
+msgid "duplicate shadow password entry"
+msgstr ""
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr ""
+
+msgid "Usage: pwconv\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Usage: pwunconv\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr ""
+
+msgid "Password authentication bypassed.\n"
+msgstr ""
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr ""
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr ""
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr ""
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr ""
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr ""
+
+msgid "(Enter your own password)"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr ""
+
+msgid "No shell\n"
+msgstr ""
+
+msgid "No password file"
+msgstr ""
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr ""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+
+msgid "Entering System Maintenance Mode"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr ""
+
+#, c-format
+msgid "%s: rename: %s: %s"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr ""
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr ""
+
+msgid "failed to change mailbox owner"
+msgstr ""
+
+msgid "failed to rename mailbox"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr ""
+
+msgid "Couldn't get file context"
+msgstr ""
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr ""
+
+msgid "Couldn't make backup"
+msgstr ""
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
diff --git a/po/sk.gmo b/po/sk.gmo
new file mode 100644 (file)
index 0000000..44cb2b1
Binary files /dev/null and b/po/sk.gmo differ
diff --git a/po/sk.po b/po/sk.po
new file mode 100644 (file)
index 0000000..7ccfd47
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,2795 @@
+# Slovak translation of shadow-utils.
+#
+# Ivan Masár <helix84@centrum.sk>, 2008, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.17\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2009-04-11 15:38+0100\n"
+"Last-Translator: Ivan Masár <helix84@centrum.sk>\n"
+"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural= (n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Existuje viac záznamov s názvom „%s“ v %s. Prosím, napravte to pomocou pwck "
+"alebo grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "libcrypt nepodporuje metódy šifrovania? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Na konfiguračné údaje sa nedá vyhradiť dostatok miesta.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"konfiguračná chyba - neznámy predmet „%s“ (informujte správcu systému)\n"
+
+msgid "Password: "
+msgstr "Heslo: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Heslo používateľa %s:"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Upozornenie: skupina %s je neznáma\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Upozornenie: príliš mnoho skupín\n"
+
+msgid "Your password has expired."
+msgstr "Uplynula platnosť vášho hesla."
+
+msgid "Your password is inactive."
+msgstr "Vaše heslo je neaktívne."
+
+msgid "Your login has expired."
+msgstr "Uplynula platnosť vášho účtu."
+
+msgid "  Contact the system administrator."
+msgstr "  Kontaktujte správcu systému."
+
+msgid "  Choose a new password."
+msgstr "  Zvoľte nové heslo."
+
+msgid "You must change your password."
+msgstr "Musíte si zmeniť heslo."
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "O %ld dní uplynie platnosť vášho hesla.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Zajtra uplynie platnosť vášho hesla."
+
+msgid "Your password will expire today."
+msgstr "Dnes uplynie platnosť vášho hesla."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr "Nie je možné otvoriť rozhranie pre audit - prerušuje sa.\n"
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Nedá sa zmeniť režim vlastníka TTY štandardného vstupu: %s"
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: nepodarilo sa odmknúť %s\n"
+
+msgid "Environment overflow\n"
+msgstr "Preplnenie prostredia\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Nemôžete zmeniť $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d chybný pokus o prihlásenie od posledného prihlásenia.\n"
+"Bol to %s na %s.\n"
+msgstr[1] ""
+"%d chybné pokusy o prihlásenie od posledného prihlásenia.\n"
+"Posledné bolo %s na %s.\n"
+msgstr[2] ""
+"%d chybných pokusov o prihlásenie od posledného prihlásenia.\n"
+"Posledné bolo %s na %s.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: Nedá sa získať jedinečný UID (už nie sú dostupné žiadne UID)\n"
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: Nedá sa získať jedinečný GID (už nie sú dostupné žiadne GID)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: Nedá sa získať jedinečný UID (už nie sú dostupné žiadne UID)\n"
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: Nedá sa získať jedinečný UID (už nie sú dostupné žiadne UID)\n"
+
+msgid "Too many logins.\n"
+msgstr "Príliš mnoho prihlásení.\n"
+
+msgid "You have new mail."
+msgstr "Máte novú poštu."
+
+msgid "No mail."
+msgstr "Nemáte žiadnu poštu."
+
+msgid "You have mail."
+msgstr "Máte poštu."
+
+msgid "no change"
+msgstr "žiadna zmena"
+
+msgid "a palindrome"
+msgstr "palindróm"
+
+msgid "case changes only"
+msgstr "iba zmeny vo veľkosti písmen"
+
+msgid "too similar"
+msgstr "veľmi podobné"
+
+msgid "too simple"
+msgstr "veľmi jednoduché"
+
+msgid "rotated"
+msgstr "opakované"
+
+msgid "too short"
+msgstr "veľmi krátke"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Heslo %s je chybné. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: volanie pam_start() zlyhalo, chyba %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+msgid "passwd: password unchanged\n"
+msgstr "passwd: heslo nezmenené\n"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: heslo bolo úspešne zmenené\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Chybné heslo pre %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"neplatná hodnota ENCRYPT_METHOD: „%s“.\n"
+"Používa sa štandardná hodnota DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Aktuálny adresár sa nedá nastaviť na „%s“\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Žiadny adresár, prihlásenie s HOME na /"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s sa nedá spustiť."
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Chybný koreňový adresár „%s“\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Koreňový adresár sa nedá zmeniť na „%s“\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Nedá sa zistiť názov vášho tty."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: nedostatok pamäti\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "volanie malloc(%d) zlyhalo\n"
+
+msgid "No"
+msgstr "Nie"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Použitie: chage [voľby] používateľ\n"
+"\n"
+"Options:\n"
+"  -d, --lastday POSL_DEN        nastaví dátum poslednej zmeny hesla na "
+"POSL_DEN\n"
+"  -E, --expiredate EXP_DATUM    nastaví dátum vypršania platnosti účtu na\n"
+"                                EXP_DATUM\n"
+"  -h, --help                    zobrazí tohto pomocníka a ukončí sa\n"
+"  -I, --inactive NEAKTIV        nastaví nefunkčnosť hesla na NEAKTIV dní\n"
+"                                po vypršaní platnosti účtu\n"
+"  -l, --list                    zobrazí časové údaje o účte\n"
+"  -m, --mindays MIN_DNÍ         nastaví minimálny počet dní pred zmenou\n"
+"                                hesla na MIN_DNÍ\n"
+"  -M, --maxdays MAX_DNÍ         nastaví maximálny počet dní pred zmenou\n"
+"                                hesla na MAX_DNÍ\n"
+"  -W, --warndays UPOZ_DNÍ       nastaví upozornenie o platnosti účtu na "
+"UPOZ_DNÍ\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+"Zadajte novú hodnotu alebo stlačte ENTER pre použitie predvolenej hodnoty"
+
+msgid "Minimum Password Age"
+msgstr "Minimálna doba platnosti hesla"
+
+msgid "Maximum Password Age"
+msgstr "Maximálna doba platnosti hesla"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Posledná zmena hesla (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Upozornenie o uplynutí doby platnosti hesla"
+
+msgid "Password Inactive"
+msgstr "Nečinné heslo"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Uplynutie platnosti účtu (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Posledná zmena hesla\t\t\t\t\t: "
+
+msgid "never"
+msgstr "nikdy"
+
+msgid "password must be changed"
+msgstr "heslo je potrebné zmeniť"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Platnosť hesla uplynie\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Neaktívne heslo\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Platnosť účtu uplynie\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimálny počet dní medzi zmenami hesla\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maximálny počet dní medzi zmenami hesla\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Počet dní upozornenia pred vypršaním platnosti hesla\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: chybný dátum „%s“\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: chybný číselný parameter „%s“\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: nepoužívajte „l“ s ostatnými príznakmi\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Odmietnutý prístup.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: vaše používateľské meno sa nedá zistiť.\n"
+
+#  c-format
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM autentifikácia zlyhala\n"
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: nedá sa zamknúť %s, skúste to opäť neskôr\n"
+
+#, c-format
+msgid "%s: cannot open %s\n"
+msgstr "%s: súbor %s sa nedá otvoriť\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: chyba pri zapisovaní zmien do %s\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: zlyhalo pripravenie novej položky %s „%s“\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: súbor s tieňovými heslami nie je dostupný\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: zlyhalo odstránenie právomocí (%s)\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: používateľ „%s“ neexistuje v %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Menia sa informácie vypršania platnosti pre používateľa %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: chyba pri zmene položiek\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Použitie: %s [-f celé_meno] [-r číslo_miestnosti] [-w "
+"telefón_do_zamestnania]\n"
+"\t[-h telefón_domov] [-o ostatné] [používateľ]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Použitie: %s [-f celé_meno] [-r číslo_miestnosti] [-w "
+"telefón_do_zamestnania]\n"
+"\t[-h telefón_domov]\n"
+
+msgid "Full Name"
+msgstr "Celé meno"
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr "\t%s: %s\n"
+
+msgid "Room Number"
+msgstr "Číslo miestnosti"
+
+msgid "Work Phone"
+msgstr "Telefón do zamestnania"
+
+msgid "Home Phone"
+msgstr "Telefón domov"
+
+msgid "Other"
+msgstr "Ostatné"
+
+msgid "Cannot change ID to root.\n"
+msgstr "ID sa nedá zmeniť na root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr "%s: meno so znakmi, ktoré nie sú v ASCII: „%s“\n"
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: chybné meno: „%s“\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr "%s: číslo miestnosti so znakmi, ktoré nie sú v ASCII: „%s“\n"
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: chybné číslo miestnosti: „%s“\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: chybné telefónne číslo do zamestnania: „%s“\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: chybné telefónne číslo domov: „%s“\n"
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: „%s“ obsahuje znaky, ktoré nie sú v ASCII\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: „%s“ obsahuje chybné znaky\n"
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: používateľ „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: na NIC klientovi sa nedá zmeniť používateľ „%s“.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: „%s“ je hlavným NIS serverom pre tohto klienta.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Mením informácie o používateľovi %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: položka je príliš dlhá\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Použitie: %s [voľby]\n"
+"\n"
+"Voľby:\n"
+"  -c, --crypt-method            metóda šifrovania (jedna z %s)\n"
+"  -e, --encrypted               zadané heslá sú zakódované\n"
+"  -h, --help                    vypíše tohto pomocníka a ukončí sa\n"
+"  -m, --md5                     použije MD5 kódovanie namiesto DES, ak\n"
+"                                zadané heslá nie sú zakódované\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds              počet cyklov šifrovacích\n"
+"                                algoritmov SHA*\n"
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: prepínač %s je povolený iba s prepínačom %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: voľby -c, -e a -m sa navzájom vylučujú\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: nepodporovaná metóda šifrovania: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: riadok %d je príliš dlhý\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: riadok %d: chýba nové heslo\n"
+
+#, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: riadok %d: skupina „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: riadok %d: nepodarilo sa pripraviť novú položku %s „%s“\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: zistená chyba, zmeny budú zamietnuté\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Použitie: %s [vstup]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -s, --sha-rounds              počet cyklov šifrovacích\n"
+"                                algoritmov SHA*\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: user '%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: riadok %d: používateľ „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: riadok %d: používateľ „%s“ neexistuje\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Použitie: chsh [voľby] ÚČET\n"
+"\n"
+"Voľby:\n"
+"  -h, --help                    zobrazí tohto pomocníka a ukončí sa\n"
+"  -s, --shell SHELL             nový prihlasovací shell používateľského "
+"účtu\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Predvolený shell"
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Nemôžete zmeniť shell pre „%s“.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Mením predvolený shell pre %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Chybná položka: %s\n"
+
+#, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s: %s je neplatný shell.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Použitie: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to get the entry for UID %d\n"
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr "faillog: Nepodarilo sa získať položku s UID %d\n"
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Login       Chybné   Najviac Posledné                 Na\n"
+
+#, c-format
+msgid " [%lus left]"
+msgstr " [%lus ostalo]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds zámok]"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to reset fail count for UID %d\n"
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr "faillog: Nepodarilo sa znulovať počet chýb pre UID %d\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set max for UID %d\n"
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr "faillog: Nepodarilo sa nastaviť max. pre UID %d\n"
+
+#, fuzzy, c-format
+#| msgid "faillog: Failed to set locktime for UID %d\n"
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr "faillog: Nepodarilo sa nastaviť čas zamknutia pre UID %d\n"
+
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "lastlog: Neznámy používateľ alebo rozsah: %s.\n"
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "faillog: Súbor %s sa nedá otvoriť: %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr "faillog: Nepodarilo sa zistiť veľkosť %s: %s\n"
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+"Použitie: %s [voľba] SKUPINA\n"
+"\n"
+"Voľby:\n"
+"  -a, --add POUŽ                pridať POUŽ do SKUPINY\n"
+"  -d, --delete POUŽ             odstrániť POUŽ zo SKUPINY\n"
+"  -r, --remove-password         odstrániť heslo SKUPINY\n"
+"  -R, --restrict                obmedziť prístup do SKUPINY iba na jej "
+"členov\n"
+"  -M, --members POUŽ,...        nastaviť zoznam členov SKUPINY\n"
+"%s\n"
+"\n"
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+"  -A, --administrators ADMIN,...\n"
+"                                nastaviť zoznam správcov SKUPINY\n"
+"Okrem volieb -A a -M nie je možné voľby kombinovať.\n"
+
+msgid "The options cannot be combined.\n"
+msgstr "Voľby nie je možné kombinovať.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: prepínač -A funguje iba s tieňovými heslami skupín\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: skupina „%s“ neexistuje v %s\n"
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: chyba pri zatváraní %s iba na čítanie\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Menísa heslo skupiny %s\n"
+
+msgid "New Password: "
+msgstr "Nové heslo: "
+
+msgid "Re-enter new password: "
+msgstr "Zadajte znova nové heslo: "
+
+msgid "They don't match; try again"
+msgstr "Nezhodujú sa; skúste to znova"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Skúste to neskôr\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Pridáva sa používateľ %s do skupiny %s.\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Odstraňuje sa používateľ %s zo skupiny %s\n"
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: používateľ „%s“ nie je členom „%s“\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Nejedná sa o tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Použitie: %s [vstup]\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -s, --sha-rounds              počet cyklov šifrovacích\n"
+"                                algoritmov SHA*\n"
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds              počet cyklov šifrovacích\n"
+"                                algoritmov SHA*\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: „%s“ nie je platným názvom skupiny\n"
+
+#, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: chybný ID skupiny „%s“\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: prepínač -K vyžaduje argument typu MENO=HODNOTA\n"
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: skupina „%s“ už existuje\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr "%s: GID „%lu“ už existuje\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Použitie: groupdel skupina\n"
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: nie je možné odstrániť položku „%s“ z %s\n"
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: nie je možné odstrniť primárnu skupinu používateľa „%s“.\n"
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: skupina „%s“ neexistuje\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: skupina „%s“ je skupinou NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s je hlavným NIS serverom\n"
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: používateľ „%s“ je členom „%s“\n"
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Nedostatok pamäte. Nie je možné aktualizovať %s.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+"Použitie: groupmems [voľby] [operácia]\n"
+"\n"
+"Voľby:\n"
+"  -g, --group groupname         zmeniť názov skupiny namiesto skupiny "
+"používateľa\n"
+"                                (iba root)\n"
+"\n"
+"Actions:\n"
+"  -a, --add používateľ           pridať používateľa medzi členov skupiny\n"
+"  -d, --delete používateľ       odobrať používateľa spomedzi členov skupiny\n"
+"  -p, --purge                   odstrániť všetkých členov skupiny\n"
+"  -l, --list                    vypísať členov skupiny\n"
+"\n"
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr "%s: meno vašej skupiny sa nezhoduje s vašim používateľským menom\n"
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr "%s: iba root môže používať voľbu -g/--group\n"
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: chybné pomenovanie skupiny „%s“\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: skupina %s je NIS skupinou\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: používateľ %s je neznámy\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr ""
+"Použitie: %s [-r] [-s] [súbor_so_skupinami [súbor_s_tieňovými_skupinami]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Použitie: %s [-r] [-s] [súbor_so_skupinami]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s a -r nie sú zlučiteľné\n"
+
+msgid "invalid group file entry"
+msgstr "chybná položka v súbore so skupinami"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "zmazať riadok „%s“? "
+
+msgid "duplicate group entry"
+msgstr "v súbore so skupinami sa vyskytuje zdvojená položka"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "chybné pomenovanie skupiny „%s“\n"
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "chybný ID skupiny „%lu“\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "skupina %s: používateľ %s neexistuje\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "zmazať člena „%s“? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "neexistuje zodpovedajúca položka skupiny v súbore %s\n"
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr "pridať skupinu „%s“ do %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "chybná položka v súbore s tieňovými skupinami"
+
+msgid "duplicate shadow group entry"
+msgstr "v súbore s tieňovými skupinami sa vyskytuje zdvojená položka"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "tieňová skupina %s: správca %s neexistuje\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "zmazať správcu „%s“? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "tieňová skupina %s: používateľ %s neexistuje\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: súbory boli aktualizované\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: bezo zmien\n"
+
+msgid "Usage: grpconv\n"
+msgstr "Použitie: grpconv\n"
+
+msgid "Usage: grpunconv\n"
+msgstr "Použitie: grpunconv\n"
+
+#, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "%s: nie je možné zmazať %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Použitie: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Použitie: id\n"
+
+msgid " groups="
+msgstr " skupiny="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Použitie: lastlog [voľby]\n"
+"\n"
+"Voľby:\n"
+"  -b, --before DAYS     vypíše posledné prihlásenia staršie ako DAYS dní\n"
+"  -h, --help            zobrazí tohto pomocníka a ukončí sa\n"
+"  -t, --time DAYS       vypíše posledné prihlásenia nie staršie ako DAYS "
+"dní\n"
+"  -u, --user LOGIN      vypíše posledné prihlásenia používateľa uvedeného\n"
+"                        ako LOGIN\n"
+
+#, fuzzy, c-format
+#| msgid "lastlog: Failed to get the entry for UID %d\n"
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr "lastlog: Nepodarilo sa získať položku s UID %d\n"
+
+msgid "Username         Port     From             Latest"
+msgstr "Používateľ       Port     Z                Naposledy"
+
+msgid "Username                Port     Latest"
+msgstr "Používateľ              Port     Naposledy"
+
+msgid "**Never logged in**"
+msgstr "**Nebol nikdy prihlásený**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: neočakávaný argument: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr "lastlog: Nepodarilo sa zistiť veľkosť %s: %s\n"
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Použitie: %s [-p] [meno]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "          %s [-p] [-h počítač] [-f meno]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "          %s [-p] -r počítač\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Chybný čas prihlásenia"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systém je uzavretý kvôli pravidelnej údržbe."
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Odpojenie vynechané -- používateľ root sa môže prihlásiť.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Uplynul časový limit (%d sekúnd) na prihlásenie.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr "Žiaden utmp záznam. Musíte spustiť „login“ z najnižšej inštancie „sh“"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "prihlásenie: Chyba PAM, ukončuje sa: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s prihlasovacie meno: "
+
+msgid "login: "
+msgstr "Prihlasovacie meno: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Prekročený maximálny počet pokusov (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "prihlásenie: PAM prerušenie\n"
+
+msgid "Login incorrect"
+msgstr "Chybné prihlásenie"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"Prihlasovacie meno na %s: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: chybné vetvenie: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY zlyhalo na %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Upozornenie: po dočasnom zákaze je prihlasovanie opäť povolené."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Posledné prihlásenie: %s na %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Posledné prihlásenie: %.19s na %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " z %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"čas na prihlásenie uplynul\n"
+"\n"
+
+msgid "Usage: logoutd\n"
+msgstr "Použitie: logout\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Použitie: newgrp [-] [skupina]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Použitie: sg skupina [[-c] príkaz]\n"
+
+msgid "Invalid password.\n"
+msgstr "Neplatné heslo.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: chybné vetvenie: %s\n"
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: GID „%lu“ neexistuje\n"
+
+msgid "too many groups\n"
+msgstr "príliš mnoho skupín\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: skupina „%s“ je tieňová skupina, ale neexistuje v /etc/group\n"
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: chybný ID používateľa „%s“\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: chybné používateľské meno „%s“\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: riadok %d: chybný riadok\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: záznam používateľa %s sa nedá aktualizovať (nie je v databáze passwd)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: riadok %d: nedá sa vytvoriť používateľ\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: riadok %d: nedá sa vytvoriť skupina\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: riadok %d: používateľ „%s“ neexistuje v %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: riadok %d: heslo sa nedá aktualizovať\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: riadok %d: volanie mkdir zlyhalo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: riadok %d: volanie chown zlyhalo\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: riadok %d: položka sa nedá aktualizovať\n"
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Použitie: passwd [voľby] [ÚČET]\n"
+"\n"
+"Voľby:\n"
+"  -a, --all                     zobrazí stav hesiel pre všetky účty\n"
+"  -d, --delete                  odstráni heslo pre zadaný účet\n"
+"  -e, --expire                  vynúti platnosť hesla pre zadaný účet\n"
+"  -h, --help                    zobrazí tohto pomocníka a ukončí sa\n"
+"  -k, --keep-tokens             zmení heslo iba v prípade vypršania času\n"
+"                                jeho platnosti\n"
+"  -i, --inactive INACTIVE       nastaví neplatnosť hesla po vypršaní času\n"
+"                                platnosti na INACTIVE dní\n"
+"  -l, --lock                    zablokuje zadaný účet\n"
+"  -n, --mindays MIN_DNÍ         nastaví minimálny počet dní pred zmenou\n"
+"                                hesla na MIN_DNÍ dní\n"
+"  -q, --quiet                   stručný režim\n"
+"  -r, --repository REPOSITORY   zmení heslo v repozitári REPOSITORY\n"
+"  -S, --status                  zobrazí stav hesla pre zadaný účet\n"
+"  -u, --unlock                  odblokuje zadaný účet\n"
+"  -w, --warndays WARN_DAYS      nastaví počet dní na upozornenie o vypršaní\n"
+"                                platnosti na WARN_DAYS dní\n"
+"  -x, --maxdays MAX_DNÍ         nastaví maximálny počet dní pred zmenou\n"
+"                                hesla na MAX_DNÍ dní\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Staré heslo: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Zadajte nové heslo (počet znakov najmenej %d).\n"
+"Použijte kombináciu veľkých a malých písmen s číslicami.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Zadajte nové heslo (počet znakov v intervale %d až %d).\n"
+"Použijte kombináciu veľkých a malých písmen s číslicami.\n"
+
+msgid "New password: "
+msgstr "Nové heslo: "
+
+msgid "Try again."
+msgstr "Skúste to znova."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Upozornenie: slabé heslo (ak ho chcete naozaj použiť, znova ho zadajte)."
+
+msgid "They don't match; try again.\n"
+msgstr "Nezhodujú sa; skúste to znova.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Heslo pre %s sa nedá zmeniť.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Heslo pre %s sa zatiaľ nedá zmeniť.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: odomknutie používateľa by malo za následok účet bez hesla.\n"
+"Tento účet by ste mali odomknúť nastavením hesla pomocou usermod -p.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: úložisko %s nie je podporované\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr "%s: %s nemá oprávnenie zmeniť heslo %s\n"
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Nemôžete prezerať alebo meniť informácie o hesle pre %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Mení sa heslo používateľovi %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Heslo používateľa %s nebolo zmenené.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Heslo bolo zmenené."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Upozornenie o uplynutí doby platnosti hesla"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr ""
+"Použitie: %s [-q] [-r] [-s] [súbor_s_heslami [súbor_s_tieňovými_heslami]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s a -r nie sú zlučiteľné\n"
+
+msgid "invalid password file entry"
+msgstr "chybná položka v súbore s heslami"
+
+msgid "duplicate password entry"
+msgstr "duplikovaná položka v súbore s heslami"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "chybné používateľské meno „%s“\n"
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr "chybný ID používateľa „%lu“\n"
+
+#, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "používateľ „%s“: skupina %lu neexistuje\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "používateľ „%s“: adresár „%s“ neexistuje\n"
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "používateľ „%s“: program „%s“ neexistuje\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "neexistuje zodpovedajúca položka hesla v súbore %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "pridať používateľa „%s“ do %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "chybná položka v súbore s tieňovými heslami"
+
+msgid "duplicate shadow password entry"
+msgstr "duplicitná položka v súbore s tieňovými heslami"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "používateľ %s: posledná zmena hesla v budúcnosti\n"
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: nie je možné zoradiť položdy v %s\n"
+
+msgid "Usage: pwconv\n"
+msgstr "Použitie: pwconv\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr "%s: lastlog: Nepodarilo sa zmeniť režim %s na 0600\n"
+
+msgid "Usage: pwunconv\n"
+msgstr "Použitie: pwunconv\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Z tohto účtu je prístup k su ZAKÁZANÝ.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Overenie hesla vynechané.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Pre overenie zadajte VAŠE vlastné heslo.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Použitie: su [voľby] [ÚČET]\n"
+"\n"
+"Voľby:\n"
+"  -c, --command PRÍKAZ          odovzdá PRÍKAZ vyvolanému shell-u\n"
+"  -h, --help                    zobrazí tohto pomocníka a ukončí sa\n"
+"  -, -l, --login                nastaví shell ako prihlasovací shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        zachová premenné prostredia a ponechá\n"
+"                                ten istý shell\n"
+"  -s, --shell SHELL             použije SHELL namiesto predvoleného v "
+"passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: musí byť spustené z terminálu\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: chyba %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Id %s je neznáme.\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Nie ste oprávnení používať su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Zadajte vaše heslo)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorujem)\n"
+
+#  c-format
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr "%s: Autentifikácia zlyhala\n"
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "%s: Nie ste momentálne oprávnení používať su\n"
+
+msgid "No shell\n"
+msgstr "Žiadny shell\n"
+
+msgid "No password file"
+msgstr "Súbor s heslami neexistuje"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY zlyhalo"
+
+msgid "No password entry for 'root'"
+msgstr "V súbore passwd nie je položka pre používateľa „root“"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Stlačte control-d pre normálne spustenie systému,\n"
+"(alebo zadajte heslo používateľa root pre údržbu systému):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Prepnutie do režimu údržby systému"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: nedá sa vytvoriť nový súbor s predvolenými hodnotami\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: nedá sa otvoriť nový súbor s predvolenými hodnotami\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: riadok %d: volanie chown zlyhalo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: premenovať: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: skupina „%s“ je skupinou NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: bolo zadaných príliš veľa skupín (max %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Použitie: %s [vstup]\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds              počet cyklov šifrovacích\n"
+"                                algoritmov SHA*\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              počet cyklov šifrovacích\n"
+"                                algoritmov SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              počet cyklov šifrovacích\n"
+"                                algoritmov SHA*\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds              počet cyklov šifrovacích\n"
+"                                algoritmov SHA*\n"
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds              počet cyklov šifrovacích\n"
+"                                algoritmov SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -s, --sha-rounds              počet cyklov šifrovacích\n"
+"                                algoritmov SHA*\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: chybný základný adresár „%s“\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: chybný komentár „%s“\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: chybný domovský adresár „%s“\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: prepínač -e vyžaduje tieňové heslá\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: prepínač -f vyžaduje tieňové heslá\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: chybná položka „%s“\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: chybný shell „%s“\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: voľby %s a %s sú v konflikte\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr "%s: Nepodarilo sa obnoviť položku faillog s UID %lu: %s\n"
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr "%s: Nepodarilo sa obnoviť položku lastlog s UID %lu: %s\n"
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: nedá sa vytvoriť adresár %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Vytvára sa súbor mailbox"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Nebola nájdená skupina „mail“. Používateľský mailbox súbor sa vytvára s "
+"oprávneniami 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Nastavujú sa prístupové práva súboru mailbox"
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: používateľ „%s“ už existuje\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: skupina %s už existuje - ak chcete pridať tohto používateľa do tejto "
+"skupiny, použijte -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: nie je možné vytvoriť používateľa\n"
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %lu nie je jedinečný\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: sa nedá vytvoriť skupina\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: upozornenie: domovský adresár už existuje.\n"
+"Zo skel adresára sa tam neskopíruje žiaden súbor.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Použitie: userdel [voľby] LOGIN\n"
+"\n"
+"Voľby:\n"
+"  -f, --force                   vynúti odstránenie súborov, aj keď\n"
+"                                používateľ nie je ich vlastníkom\n"
+"  -h, --help                    zobrazí tohto pomocníka a ukončí sa\n"
+"  -r, --remove                  odstráni domovský adresár a súbory s poštou\n"
+"\n"
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: skupina %s sa nedá odstrániť, pretože je primárnou skupinou iného "
+"používateľa.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove %s: %s"
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: upozornenie: nemôžem odstrániť %s: %s"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: vlastníkom %s nie je %s, nemažem ho\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: používateľ %s je NIS používateľom\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: používateľ %s je práve prihlásený\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: chybný domovský adresár „%s“\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: adresár %s nebudem mazať (je to domovský adresár používateľa %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: chyba pri mazaní adresára %s\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: usermod [options] LOGIN\n"
+#| "\n"
+#| "Options:\n"
+#| "  -c, --comment COMMENT         new value of the GECOS field\n"
+#| "  -d, --home HOME_DIR           new home directory for the user account\n"
+#| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -g, --gid GROUP               force use GROUP as new primary group\n"
+#| "  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+#| "  -a, --append                  append the user to the supplemental "
+#| "GROUPS\n"
+#| "                                mentioned by the -G option without "
+#| "removing\n"
+#| "                                him/her from other groups\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -l, --login NEW_LOGIN         new value of the login name\n"
+#| "  -L, --lock                    lock the user account\n"
+#| "  -m, --move-home               move contents of the home directory to "
+#| "the\n"
+#| "                                new location (use only with -d)\n"
+#| "  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+#| "  -p, --password PASSWORD       use encrypted password for the new "
+#| "password\n"
+#| "  -s, --shell SHELL             new login shell for the user account\n"
+#| "  -u, --uid UID                 new UID for the user account\n"
+#| "  -U, --unlock                  unlock the user account\n"
+#| "\n"
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Použitie: usermod [voľby] ÚČET\n"
+"\n"
+"Voľby:\n"
+"  -c, --comment KOMENTÁR        nová hodnota poľa GECOS\n"
+"  -d, --home DOM_ADR            nový domovský adresár pre nový "
+"používateľský\n"
+"                                účet\n"
+"  -e, --expiredate EXP_DATUM    nastaví čas vypršania platnosti účtu na\n"
+"                                EXP_DATUM\n"
+"  -f, --inactive NEAKTIV        zablokuje platnosť hesla po NEAKTIV dňoch\n"
+"                                od času vypršania platnosti\n"
+"  -g, --gid SKUPINA             vynúti použitie skupiny SKUPINA ako novej\n"
+"                                prvotnej prihlasovacej skupiny\n"
+"  -G, --groups SKUPINY          zobrazí prídavné skupiny\n"
+"  -a, --append SKUPINA          pridá používateľa do ďalšej skupiny\n"
+"  -h, --help                    zobrazí tohto pomocníka a ukončí sa\n"
+"  -l, --login LOGIN             nová hodnota prihlasovacieho mena\n"
+"  -L, --lock                    zablokuje používateľský účet\n"
+"  -m, --move-home               presunie obsah domovského adresára do "
+"nového\n"
+"                                umiestnenia (používať iba s -d)\n"
+"  -o, --non-unique              dovolí použitie duplicitného\n"
+"                                (nejedinečného) UID\n"
+"  -p, --password HESLO          ako nové heslo použije zadané zašifrované\n"
+"                                HESLO\n"
+"  -s, --shell SHELL             nový prihlasovací shell pre používateľský\n"
+"                                účet\n"
+"  -u, --uid UID                 nový UID pre používateľský účet\n"
+"  -U, --unlock                  odblokuje používateľský účet\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: odomknutie používateľa by malo za následok účet bez hesla.\n"
+"Tento účet by ste mali odomknúť nastavením hesla pomocou usermod -p.\n"
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: používateľ %s už existuje v %s\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: žiadne prepínače\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: prepínače -e a -f vyžadujú tieňové heslá\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: prepínače -L, -p a -U sa navzájom vylučujú\n"
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr "%s: UID „%lu“ už existuje\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: adresár %s už existuje\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: %s sa nedá vytvoriť\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: volanie chown pre %s zlyhalo\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: upozornenie: chyba pri úplnom odstraňovaní starého domovského adresára %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: adresár %s sa nedá premenovať na %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: Nepodarilo sa skopírovať položku lastlog používateľa %lu používateľovi %"
+"lu: %s\n"
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+"%s: Nepodarilo sa skopírovať položku faillog používateľa %lu používateľovi %"
+"lu: %s\n"
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: upozornenie: vlastníkom %s nie je %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "chyba pri zmene vlastníka schránky"
+
+msgid "failed to rename mailbox"
+msgstr "chyba pri premenovaní schránky"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Zmenili ste %s.\n"
+"Kvôli zachovaniu konzistentnosti budete možno musieť zmeniť %s.\n"
+"Prosím, urobte tak príkazom „%s“.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Použitie: vipw [voľby]\n"
+"\n"
+"Voľby:\n"
+"  -g, --group                   upraví databázu skupín\n"
+"  -h, --help                    zobrazí tohto pomocníka a ukončí sa\n"
+"  -p, --passwd                  upraví databázu passwd\n"
+"  -q, --quiet                   stručný režim\n"
+"  -s, --shadow                  upraví databázu shadow alebo gshadow\n"
+"\n"
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s: zlyhalo odstránenie %s\n"
+
+#, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "%s: %s je bez zmien\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Súbor sa nedá zamknúť"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Súbor sa nedá zamknúť"
+
+msgid "Couldn't make backup"
+msgstr "Nedá sa vytvoriť záloha"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s sa nedá obnoviť: %s (zmeny sú v %s)\n"
+
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: faillog [voľby]\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ "  -a, --all             zobrazí faillog záznamy všetkých používateľov\n"
+#~ "  -h, --help            zobrazí tohto pomocníka a ukončí sa\n"
+#~ "  -l, --lock-time SEC   po chybnom prihlásení zablokuje účet na SEC "
+#~ "sekúnd\n"
+#~ "  -m, --maximum MAX     nastaví maximálny počet chybných prihlásení na "
+#~ "MAX\n"
+#~ "  -r, --reset           vynuluje počítadlá chybných prihlásení\n"
+#~ "  -t, --time DAYS       zobrazí záznamy faillog nie staršie ako DAYS dní\n"
+#~ "  -u, --user LOGIN      zobrazí záznam faillog alebo nastaví počítadlá\n"
+#~ "                        chybných prihlásení a limitov (iba s použitím "
+#~ "volieb\n"
+#~ "                        -r, -m or -l) pre používateľa s loginom LOGIN\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: groupadd [voľby] SKUPINA\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ "  -f, --force                   vynúti úspešnú návratovú hodnotu aj "
+#~ "napriek\n"
+#~ "                                existencii zadanej skupiny\n"
+#~ "  -g, --gid GID                 pre novú skupinu použije GID\n"
+#~ "  -h, --help                    zobrazí tohto pomocníka a ukončí sa\n"
+#~ "  -K, --key KEY=VALUE           nahradí predvolené hodnoty z /etc/login."
+#~ "defs\n"
+#~ "  -o, --non-unique              povolí vytvorenie skupiny s duplicitným\n"
+#~ "                                (nejedinečným) GID\n"
+#~ "  -p, --password PASSWORD       použije pre novú skupinu šifrované heslo\n"
+#~ "  -r, --system                  vytvorí systémový účet\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: groupmod [voľby] SKUPINA\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ "  -g, --gid GID                 pre novú skupinu použije GID\n"
+#~ "  -h, --help                    zobrazí tohto pomocníka a ukončí sa\n"
+#~ "  -n, --new-name NOVÁ_SKUP      vynúti pre SKUPINu meno NOVÁ_SKUP\n"
+#~ "  -o, --non-unique              povolí vytvorenie skupiny s duplicitným\n"
+#~ "                                (nejedinečným) GID\n"
+#~ "  -p, --password PASSWORD       nové heslo bude šifrované\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~| "                                home directory\n"
+#~| "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~| "account\n"
+#~| "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~| "  -D, --defaults                print or save modified default useradd\n"
+#~| "                                configuration\n"
+#~| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~| "                                to INACTIVE\n"
+#~| "  -g, --gid GROUP               force use GROUP for the new user "
+#~| "account\n"
+#~| "  -G, --groups GROUPS           list of supplementary groups for the "
+#~| "new\n"
+#~| "                                user account\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~| "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~| "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~| "                                faillog databases\n"
+#~| "  -m, --create-home             create home directory for the new user\n"
+#~| "                                account\n"
+#~| "  -M, --no-create-home          do not create user's home directory\n"
+#~| "                                (overrides /etc/login.defs)\n"
+#~| "  -N, --no-user-group           do not create a group with the same name "
+#~| "as\n"
+#~| "                                the user\n"
+#~| "  -o, --non-unique              allow create user with duplicate\n"
+#~| "                                (non-unique) UID\n"
+#~| "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~| "                                account\n"
+#~| "  -r, --system                  create a system account\n"
+#~| "  -s, --shell SHELL             the login shell for the new user "
+#~| "account\n"
+#~| "  -u, --uid UID                 force use the UID for the new user "
+#~| "account\n"
+#~| "  -U, --user-group              create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Použitie: useradd [voľby] ÚČET\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ "  -b, --base-dir ZÁKL_ADR       základný adresár domovského adresára "
+#~ "nového\n"
+#~ "                                používateľského účtu\n"
+#~ "  -c, --comment KOMENTÁR        nastaví pole GECOS nového účtu\n"
+#~ "  -d, --home-dir DOM_ADR        domovský adresár nového účtu\n"
+#~ "  -D, --defaults                vypíše alebo nastaví predvolené "
+#~ "nastavenia\n"
+#~ "                                programu useradd\n"
+#~ "  -e, --expiredate EXP_DATUM    nastaví čas vypršania platnosti účtu na\n"
+#~ "                                EXP_DATUM\n"
+#~ "  -f, --inactive NEAKTIV        zablokuje účet po NEAKTIV dňoch od času\n"
+#~ "                                vypršania platnosti\n"
+#~ "  -g, --gid SKUPINA             vynúti použitie tejto skupiny pre nový "
+#~ "účet\n"
+#~ "  -G, --groups SKUPINY          zoznam ďalších skupín, do ktorých má\n"
+#~ "                                patriť nový účet\n"
+#~ "  -h, --help                    zobrazí tohto pomocníka a skončí\n"
+#~ "  -k, --skel VZOR_ADR           zadá alternatívny vzorový adresár\n"
+#~ "  -K, --key KĽÚČ=HODNOTA        nahradí predvolené nastavenia /etc/login."
+#~ "defs\n"
+#~ "  -l, --no-log-init             nepridávať používateľa do databáz\n"
+#~ "                                lastlog a faillog \n"
+#~ "  -m, --create-home             vytvorí domovský adresár pre nový\n"
+#~ "                                používateľský účet\n"
+#~ "  -N, --no-user-group           nevytvorí skupinu s rovnakým menom\n"
+#~ "                                ako má používateľ\n"
+#~ "  -o, --non-unique              povolí vytvorenie používateľa s "
+#~ "duplicitným\n"
+#~ "                                (nejedinečným) UID\n"
+#~ "  -p, --password HESLO          pre nový účet použije zadané zašifrované\n"
+#~ "                                heslo\n"
+#~ "  -r, --system                  vytvorí systémový účet\n"
+#~ "  -s, --shell SHELL             prihlasovací shell nového účtu\n"
+#~ "  -u, --uid UID                 vynúti použitie tohto UID pre nový účet\n"
+#~ "  -U, --user-group              vytvorí skupinu s rovnakým menom\n"
+#~ "                                ako má používateľ\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Použitie: %s [voľby] [vstup]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            metóda šifrovania (jedna z %s)\n"
+#~ "  -r, --system                  vytorí systémové účty\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Uplynula platnosť vášho hesla."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: súbor s heslami sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: súbor s heslami sa nedá otvoriť\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá otvoriť\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá prepísať\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: súbor s heslami sa nedá prepísať\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: súbor s heslami sa nedá aktualizovaťt\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá aktualizovať\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tCelé meno: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tČíslo miestnosti: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelefón do zamestnania: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelefón domov: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Nedá sa zamknúť súbor s heslami; skúste to neskôr.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Súbor s heslami sa nedá otvoriť.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s sa nenachádza v /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Chyba pri aktualizácii záznamu hesla.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Nedajú sa vykonať zmeny v súbore s heslami.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Súbor s heslami sa nedá odomknúť.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: súbor so skupinami sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: súbor so skupinami sa nedá otvoriť\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: súbor s tieňovými heslami skupín sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá otvoriť\n"
+
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: chyba pri aktualizácii súboru gshadow\n"
+
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: chyba pri aktualizácii súboru so skupinami\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: riadok %d: skupina %s je neznáma\n"
+
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: riadok %d: sa nedá aktualizovať položka súboru so skupinami\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá zamknúť\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: chyba pri aktualizácii súboru s tieňovými heslami\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: chyba pri aktualizácii súboru s heslami\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: riadok %d: používateľ %s je neznámy\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: riadok %d: záznam hesla sa nedá aktualizovať\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: neznámy používateľ\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Používateľ %s je neznámy.\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Použitie: %s [-r|-R] skupina\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a používateľ] skupina\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d používateľ] skupina\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A používateľ,...] [-M používateľ,...] skupina\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M používateľ,...] skupina\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: nedá sa získať zámok\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: nedá sa získať zámok pre súbor s tieňovými heslami\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: nedá sa otvoriť súbor\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: súbor sa nedá prepísať\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá prepísať\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: súbor sa nedá odomknúť\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: položka sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: položka súboru s tieňovými heslami sa nedá aktualizovať\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "skupina %s je neznáma\n"
+
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: nedá sa zatvoriť súbor\n"
+
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá zatvoriť\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Kto ste?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: člen %s je neznámy\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: chyba pri pridávaní položky do súboru so skupinami\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: súbor so skupinami sa nedá prepísať\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými skupinami sa nedá prepísať\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: súbor so skupinami sa nedá zamknúť\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: súbor so skupinami sa nedá otvoriť\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými skupinami sa nedá zamknúť\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými skupinami sa nedá otvoriť\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u nie je jedinečný\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: chyba pri odstraňovaní položky zo súboru so skupinami\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr ""
+#~ "%s: chyba pri odstraňovaní položky zo súboru s tieňovými skupinami\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: primárna skupina používateľa sa nedá odstrániť\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Nebolo možné nájsť člena, ktorého chcete odstrániť\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Použitie: groupmems -a používateľ | -d používateľ | -D | -l [-g skupina]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Iba root môže pridávať používateľov do rôznych skupín\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Vyžaduje sa prístup pre skupinu\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Nie ste primárnym vlastníkom aktuálnej skupiny\n"
+
+#  c-format
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "zlyhalo overenie PAM\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Súbor so skupinami sa nedá zamknúť\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Súbor so skupinami sa nedá otvoriť\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Súbor so skupinami sa nedá zatvoriť\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s sa nenachádza v /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: GID %u nie je jedinečný\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: meno %s nie je jedinečné\n"
+
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: súbor passwd sa nedá prepísať\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: súbor s heslami sa nedá zamknúť\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: súbor s heslami sa nedá otvoriť\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s: nie je možné zmeniť primárnu skupinu používateľa „%s“ z %u na %u, "
+#~ "pretože nie je v súbore passwd.\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: súbor %s sa nedá zamknúť\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: položka %s súboru s tieňovými heslami sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: položka skupiny %s sa nedá odstrániť\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými skupinami sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými skupinami sa nedá otvoriť\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: položka tieňovej skupiny %s sa nedá odstrániť\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: súbor s heslami sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými heslami skupín sa nedá zmazať\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "neznámy UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "neznámy GID %lu\n"
+
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: ID skupiny „%s“ nie je platn7\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: skupina %s bola vytvorená, zlyhalo vytvorenie zodpovedajúcej skupiny "
+#~ "gshadow\n"
+
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: ID používateľa „%s“ nie je platný\n"
+
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: chybné používateľské meno „%s“\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: súbor /etc/passwd sa nedá zamknúť\n"
+
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: súbor /etc/passwd sa nedá zamknúť\n"
+
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: súbor /etc/group sa nedá zamknúť\n"
+
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: súbor /etc/gshadow sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: súbory sa nedajú otvoriť\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: chyba pri aktualizácii súborov\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: riadok %d: nedá sa nájsť používateľ %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr ""
+#~ "%s: položka súboru s heslami pre používateľe %s sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: súbor s heslami sa nedá zamknúť\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: súbor s heslami sa nedá otvoriť\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: položka súboru s heslami pre používateľe %s sa nedá odstrániť\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: súbor s heslami sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: položka pre používateľa %s sa nedá aktualizovať\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: nemôžete zmazať súbor s tieňovými heslami\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: neznámy GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: neznáma skupina %s\n"
+
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr ""
+#~ "%s: Nedostatok pamäti. Nie je možné aktualizovať databázu tieňových "
+#~ "skupín.\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: súbor s heslami sa nedá prepísať\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá prepísať\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá zamknúť\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: súbor s tieňovými heslami sa nedá otvoriť\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: chyba pri zamykaní súboru so skupinami\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: chyba pri otváraní súboru so skupinami\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: chyba pri zamykaní súboru s tieňovými heslami\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: chyba pri otváraní súboru s tieňovými heslami\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: chyba pri vytváraní novej položky v súbore s heslami\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr ""
+#~ "%s: chyba pri vytváraní novej položky v súbore s tieňovými heslami\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: varovanie: CREATE_HOME nie je podporované, použijte prepínač -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: položka súboru so skupinami sa nedá aktualizovať\n"
+
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: chyba pri aktualizácii záznamu súboru so skupinami\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: súbor so skupinami sa nedá otvoriť\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: súbor s tieňovými skupinami sa nedá otvoriť\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: chyba pri odstraňovaní položky zo súboru s heslami\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: chyba pri odstraňovaní položky zo súboru s tieňovými heslami\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: používateľ %s neexistuje\n"
+
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: chyba pri pridávaní položky do súboru so skupinami\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s uid %lu nie je jedinečný\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: chyba pri zmene položky v súbore s heslami\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: chyba pri odstraňovaní položky zo súboru s heslami\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: chyba pri odstraňovaní položky zo súboru s tieňovými heslami\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: nedá sa vytvoriť jedinečný GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " na '%.100s' z '%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " na '%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: riadok %d: nedá sa vytvoriť UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: meno %s nie je jedinečné\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Použitie: chgpasswd [voľby]\n"
+#~ "\n"
+#~ "Voľby:\n"
+#~ "  -e, --encrypted\tzadané heslá sú zakódované\n"
+#~ "  -h, --help\t\tvypíše túto nápovedu a ukončí sa\n"
+#~ "  -m, --md5\t\tpoužije MD5 kódovanie namiesto DES, ak zadané\n"
+#~ "\t\t\theslá nie sú zakódované\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Súbor s heslami neexistuje\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Ľutujem.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Ľutujem, ale heslo pre %s sa ešte nedá zmeniť.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Ľutujem."
diff --git a/po/sq.gmo b/po/sq.gmo
new file mode 100644 (file)
index 0000000..65e6f54
Binary files /dev/null and b/po/sq.gmo differ
diff --git a/po/sq.po b/po/sq.po
new file mode 100644 (file)
index 0000000..f52274b
--- /dev/null
+++ b/po/sq.po
@@ -0,0 +1,1766 @@
+# Albanian translation of shadow.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Elian Myftiu <elian@lycos.com>, 2004.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.3\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2004-11-20 03:28+0100\n"
+"Last-Translator: Elian Myftiu <pinguini AT fastwebnet DOT it>\n"
+"Language-Team: Albanian <gnome-albanian-perkthyesit@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+
+msgid "Password: "
+msgstr ""
+
+#, c-format
+msgid "%s's Password: "
+msgstr ""
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Kujdes: ka shumë grupe\n"
+
+msgid "Your password has expired."
+msgstr "Fjalëkalimi yt ka skaduar."
+
+msgid "Your password is inactive."
+msgstr "Fjalëkalimi yt nuk është aktiv."
+
+msgid "Your login has expired."
+msgstr "Login-i yt ka skaduar."
+
+msgid "  Contact the system administrator."
+msgstr "   Kontakto administratorin e sistemit."
+
+msgid "  Choose a new password."
+msgstr "   Zgjidh një fjalëkalim të ri."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr ""
+
+#, fuzzy
+msgid "Your password will expire tomorrow."
+msgstr "Fjalëkalimi yt ka skaduar."
+
+#, fuzzy
+msgid "Your password will expire today."
+msgstr "Fjalëkalimi yt ka skaduar."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to unlock %s\n"
+msgstr ""
+
+msgid "Environment overflow\n"
+msgstr ""
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+msgstr[1] ""
+
+#, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr ""
+
+msgid "Too many logins.\n"
+msgstr ""
+
+msgid "You have new mail."
+msgstr ""
+
+msgid "No mail."
+msgstr ""
+
+msgid "You have mail."
+msgstr ""
+
+msgid "no change"
+msgstr ""
+
+msgid "a palindrome"
+msgstr ""
+
+msgid "case changes only"
+msgstr ""
+
+msgid "too similar"
+msgstr ""
+
+msgid "too simple"
+msgstr ""
+
+msgid "rotated"
+msgstr ""
+
+msgid "too short"
+msgstr ""
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr ""
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr ""
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr ""
+
+#, fuzzy
+msgid "passwd: password unchanged\n"
+msgstr "Fjalëkalimi yt ka skaduar."
+
+msgid "passwd: password updated successfully\n"
+msgstr ""
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr ""
+
+msgid "No directory, logging in with HOME=/"
+msgstr ""
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr ""
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr ""
+
+msgid "Unable to determine your tty name."
+msgstr ""
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr ""
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr ""
+
+msgid "Minimum Password Age"
+msgstr ""
+
+msgid "Maximum Password Age"
+msgstr ""
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr ""
+
+msgid "Password Expiration Warning"
+msgstr ""
+
+msgid "Password Inactive"
+msgstr ""
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr ""
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr ""
+
+msgid "never"
+msgstr ""
+
+msgid "password must be changed"
+msgstr ""
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr ""
+
+#, fuzzy
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Fjalëkalimi yt nuk është aktiv."
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr ""
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot open %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+
+msgid "Full Name"
+msgstr ""
+
+#, c-format
+msgid "\t%s: %s\n"
+msgstr ""
+
+msgid "Room Number"
+msgstr ""
+
+msgid "Work Phone"
+msgstr ""
+
+msgid "Home Phone"
+msgstr ""
+
+msgid "Other"
+msgstr ""
+
+msgid "Cannot change ID to root.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr ""
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr ""
+
+#, c-format
+msgid "You may not change the shell for '%s'.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is an invalid shell.\n"
+msgstr ""
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr ""
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr ""
+
+#, c-format
+msgid " [%lus left]"
+msgstr ""
+
+#, c-format
+msgid " [%lds lock]"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Cannot open %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+msgid "The options cannot be combined.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr ""
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr ""
+
+msgid "New Password: "
+msgstr ""
+
+msgid "Re-enter new password: "
+msgstr ""
+
+msgid "They don't match; try again"
+msgstr ""
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr ""
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr ""
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, c-format
+msgid "%s: '%s' is not a valid group name\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr ""
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr ""
+
+msgid "invalid group file entry"
+msgstr ""
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr ""
+
+#, fuzzy
+msgid "duplicate group entry"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr ""
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add group '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr ""
+
+msgid "duplicate shadow group entry"
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr ""
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr ""
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr ""
+
+msgid "Usage: grpconv\n"
+msgstr ""
+
+msgid "Usage: grpunconv\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: cannot delete %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr ""
+
+msgid "Usage: id\n"
+msgstr ""
+
+msgid " groups="
+msgstr ""
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr ""
+
+msgid "Username                Port     Latest"
+msgstr ""
+
+msgid "**Never logged in**"
+msgstr ""
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr ""
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr ""
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr ""
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s login: "
+msgstr ""
+
+msgid "login: "
+msgstr ""
+
+#, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr ""
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr ""
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr ""
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr ""
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr ""
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr ""
+
+#, c-format
+msgid " from %.*s"
+msgstr ""
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+
+msgid "Usage: logoutd\n"
+msgstr ""
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr ""
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr ""
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "   Zgjidh një fjalëkalim të ri.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr ""
+
+msgid "too many groups\n"
+msgstr ""
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user ID '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr ""
+
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+
+msgid "Old password: "
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+
+msgid "New password: "
+msgstr ""
+
+msgid "Try again."
+msgstr ""
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+
+msgid "They don't match; try again.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr ""
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: password changed.\n"
+msgstr "Fjalëkalimi yt ka skaduar."
+
+#, fuzzy, c-format
+msgid "%s: password expiry information changed.\n"
+msgstr "Fjalëkalimi yt ka skaduar."
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -s and -r are incompatible\n"
+msgstr ""
+
+#, fuzzy
+msgid "invalid password file entry"
+msgstr "   Zgjidh një fjalëkalim të ri.\n"
+
+msgid "duplicate password entry"
+msgstr ""
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "invalid user ID '%lu'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "user '%s': no group %lu\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "user '%s': program '%s' does not exist\n"
+msgstr ""
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr ""
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr ""
+
+msgid "duplicate shadow password entry"
+msgstr ""
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot sort entries in %s\n"
+msgstr ""
+
+msgid "Usage: pwconv\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+msgid "Usage: pwunconv\n"
+msgstr ""
+
+msgid "Access to su to that account DENIED.\n"
+msgstr ""
+
+msgid "Password authentication bypassed.\n"
+msgstr ""
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s\n"
+msgstr ""
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr ""
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr ""
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr ""
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr ""
+
+msgid "(Enter your own password)"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: Authentication failure\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You are not authorized to su at that time\n"
+msgstr ""
+
+msgid "No shell\n"
+msgstr ""
+
+#, fuzzy
+msgid "No password file"
+msgstr "Fjalëkalimi yt ka skaduar."
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr ""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+
+msgid "Entering System Maintenance Mode"
+msgstr ""
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: line too long in %s: %s..."
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy, c-format
+msgid "%s: rename: %s: %s"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr ""
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "Kujdes: grup i panjohur %s\n"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr ""
+
+#, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr ""
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: user '%s' already exists in %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr ""
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr ""
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr ""
+
+msgid "failed to change mailbox owner"
+msgstr ""
+
+msgid "failed to rename mailbox"
+msgstr ""
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to remove %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s is unchanged\n"
+msgstr "Fjalëkalimi yt ka skaduar."
+
+msgid "Couldn't get file context"
+msgstr ""
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr ""
+
+msgid "Couldn't make backup"
+msgstr ""
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Password set to expire."
+#~ msgstr "Fjalëkalimi yt ka skaduar."
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "Kujdes: grup i panjohur %s\n"
+
+#, fuzzy
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "Kujdes: grup i panjohur %s\n"
diff --git a/po/stamp-po b/po/stamp-po
new file mode 100644 (file)
index 0000000..9788f70
--- /dev/null
@@ -0,0 +1 @@
+timestamp
diff --git a/po/sv.gmo b/po/sv.gmo
new file mode 100644 (file)
index 0000000..8327617
Binary files /dev/null and b/po/sv.gmo differ
diff --git a/po/sv.po b/po/sv.po
new file mode 100644 (file)
index 0000000..76d1dde
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,2887 @@
+# Swedish translation of shadow.
+# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the shadow package.
+# Daniel Nylander <po@danielnylander.se>, 2006, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.1.1\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2008-03-26 12:23+0100\n"
+"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
+"Language-Team: Swedish <debian-l10n-swedish@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Flera poster med namnet \"%s\" finns i %s. Rätta till detta med pwck eller "
+"grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "krypteringsmetoden stöds inte av libcrypt? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Kunde inte allokera plats för konfigurationsinformationen.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "konfigurationsfel - okänd post \"%s\" (informera administratören)\n"
+
+msgid "Password: "
+msgstr "Lösenord: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s lösenord: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Varning: okänd grupp %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Varning: för många grupper\n"
+
+msgid "Your password has expired."
+msgstr "Ditt lösenord har upphört att gälla."
+
+msgid "Your password is inactive."
+msgstr "Ditt lösenord är inaktivt."
+
+msgid "Your login has expired."
+msgstr "Ditt inloggningskonto har upphört att gälla."
+
+msgid "  Contact the system administrator."
+msgstr "  Kontakta systemadministratören."
+
+msgid "  Choose a new password."
+msgstr "  Välj ett nytt lösenord."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Ditt lösenord upphör att gälla om %ld dagar.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Ditt lösenord upphör att gälla imorgon."
+
+msgid "Your password will expire today."
+msgstr "Ditt lösenord upphör att gälla idag."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Kunde inte ändra tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: fälten för långa\n"
+
+msgid "Environment overflow\n"
+msgstr "Överskott av miljövariabler\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Du får inte ändra $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d misslyckade sedan förra inloggningen\n"
+"Senast var %s den %s.\n"
+msgstr[1] ""
+"%d misslyckanden sedan förra inloggningen\n"
+"Senast var %s den %s.\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "Kan inte få tag i unikt UID (inga fler tillgängliga UID)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "Kan inte få tag i unikt GID (inga fler tillgängliga GID)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "Kan inte få tag i unikt UID (inga fler tillgängliga UID)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "Kan inte få tag i unikt UID (inga fler tillgängliga UID)\n"
+
+msgid "Too many logins.\n"
+msgstr "För många inloggningsförsök.\n"
+
+msgid "You have new mail."
+msgstr "Du har ny post."
+
+msgid "No mail."
+msgstr "Ingen post."
+
+msgid "You have mail."
+msgstr "Du har post."
+
+msgid "no change"
+msgstr "ingen ändring"
+
+msgid "a palindrome"
+msgstr "en palindrom"
+
+msgid "case changes only"
+msgstr "endast ändring av gemener/versaler"
+
+msgid "too similar"
+msgstr "för likt"
+
+msgid "too simple"
+msgstr "för enkelt"
+
+msgid "rotated"
+msgstr "roterat"
+
+msgid "too short"
+msgstr "för kort"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Felaktigt lösenord: %s. "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() misslyckades, fel %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Lösenordet ändrat."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: uppdatering av lösenord lyckades\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Felaktigt lösenord för %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Ogiltigt värde för ENCRYPT_METHOD: \"%s\".\n"
+"Faller tillbaka på DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Kunde inte byta katalog till \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Ingen katalog, loggar in med HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Kunde inte starta %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Felaktig rotkatalog \"%s\"\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Kan inte ändra rotkatalog till \"%s\"\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Kunde inte fastställa ditt tty-namn."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: slut på minne\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) misslyckades\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Nej\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Användning: chage [flaggor] [KONTO]\n"
+"\n"
+"Flaggor:\n"
+"  -d, --lastday DAG             ställ in senaste lösenordsändringen till "
+"DAG\n"
+"  -E, --expiredate DATUM        ställ in utgångsdatum för konto till DATUM\n"
+"  -h, --help                    visa detta hjälpmeddelande och avsluta\n"
+"  -I, --inactive INAKTIV        ställ in lösenordet till inaktivt efter\n"
+"                                utgångsdatum till INAKTIV\n"
+"  -l, --list                    visa åldringsinformation för konto\n"
+"  -m, --mindays MIN_DAG         ställ in minimum antal dagar innan "
+"lösenordet\n"
+"                                måste bytas till MIN_DAG\n"
+"  -M, --maxdays MAX_DAG         ställ in maximum antal dagar innan "
+"lösenordet\n"
+"                                måste bytas till MAX_DAG\n"
+"  -W, --warndays VARN_DAG       ställ in antal dagar för varning innan\n"
+"                                utgångsdatum till VARN_DAG\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Ange det nya värdet eller tryck ENTER för standardvärdet"
+
+msgid "Minimum Password Age"
+msgstr "Minimum lösenordsålder"
+
+msgid "Maximum Password Age"
+msgstr "Maximum lösenordsålder"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Senaste lösenordsändringen (ÅÅÅÅ-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Utlöpsvarning för lösenord"
+
+msgid "Password Inactive"
+msgstr "Lösenordet inaktivt"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Utlöpsdatum för kontot (ÅÅÅÅ-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Senaste lösenordsändringen\t\t\t\t: "
+
+msgid "never"
+msgstr "aldrig"
+
+msgid "password must be changed"
+msgstr "lösenordet måste ändras"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Lösenordet löper ut\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Lösenordet inaktivt\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Kontot löper ut\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Minimum antal dagar mellan lösenordsändringar\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maximum antal dagar mellan lösenordsändringar\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Antal dagar med varningar före lösenordet löper ut\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: ogiltigt datum \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: ogiltigt numeriskt argument \"%s\"\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: inkludera inte \"l\" med andra flaggor\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Åtkomst nekad.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Kan inte fastställa ditt användarnamn.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM autentisering misslyckades\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: kan inte låsa filer, försök igen senare\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: kan inte öppna filen %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failure forking: %s\n"
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: fel vid processgrening: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: misslyckades med att kasta rättigheterna (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: skugglösenordsfilen finns inte\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: misslyckades med att kasta rättigheterna (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: användaren \"%s\" finns inte\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Ändrar åldersinformationen för %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: fel vid ändring av fält\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Användning: %s [-f fullt_namn] [-r rums_nr] [-w arb_tel]\n"
+"\t[-h hem_tel] [-o annat] [användare]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Användning: %s [-f fullt_namn] [-r rums_nr] [-w arb_tel] [-h hem_tel]\n"
+
+msgid "Full Name"
+msgstr "Helt namn"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Rumsnummer"
+
+msgid "Work Phone"
+msgstr "Telefonnummer (arbete)"
+
+msgid "Home Phone"
+msgstr "Telefonnummer (hem)"
+
+msgid "Other"
+msgstr "Övrigt"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Kan inte ändra ID till root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: ogiltigt namn: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: ogiltigt rumsnummer: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: ogiltigt telefonnummer (arbete): \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: ogiltigt telefonnummer (hem): \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" innehåller ogiltiga tecken\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" innehåller ogiltiga tecken\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: användaren \"%s\" finns inte\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: kan inte ändra användare \"%s\" på en NIS-klient.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: \"%s\" är NIS-master för denna klient.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Ändrar användarinformationen för %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: fälten för långa\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Användning: %s [flaggor]\n"
+"\n"
+"Flaggor:\n"
+"  -c, --crypt-method            krypteringsmetoden (en av %s)\n"
+"  -e, --encrypted               angivna lösenord är krypterade\n"
+"  -h, --help                    visa detta hjälpmeddelande och avsluta.\n"
+"  -m, --md5                     kryptera klartextlösenordet med\n"
+"                                MD5-algoritmen\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds              antal SHA-rundor för SHA*-\n"
+"                                krypteringsalgoritmerna\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s flag is ONLY allowed with the %s flag\n"
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: flaggan %s tillåts ENDAST med flaggan %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: flaggorna -c, -e och -m är uteslutande\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: krypteringsmetoden stöds inte: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: rad %d: raden för lång\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: rad %d: saknar nytt lösenord\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: gruppen %s finns inte\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: rad %d: kan inte uppdatera post\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: ett fel upptäcktes, ändringar ignorerade\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Användning: %s [inmatning]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -s, --sha-rounds              antal SHA-rundor för SHA*-\n"
+"                                krypteringsalgoritmerna\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: användaren \"%s\" finns inte\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: användaren \"%s\" finns inte\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Användning: chsh [flaggor] [KONTO]\n"
+"\n"
+"Flaggor:\n"
+"  -h, --help                    visa detta hjälpmeddelande och avsluta\n"
+"  -s, --shell SHELL             nytt inloggningsskal för användarkontot\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Inloggningsskal"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Du får inte ändra skalet för %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Ändrar inloggningsskal för %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Ogiltig post: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s är ett ogiltigt skal.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Användning: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Användare       Fel      Max Senaste                  På\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds kvar]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds låsta]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unknown user or range: %s\n"
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Okänd användare eller intervall: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: kan inte öppna filen %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Lösenordet för %s kan inte ändras.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: lösenord för skuggrupper krävs för -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: gruppen %s finns inte\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failure forking: %s\n"
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: fel vid processgrening: %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Ändrar lösenordet för gruppen %s\n"
+
+msgid "New Password: "
+msgstr "Nytt lösenord: "
+
+msgid "Re-enter new password: "
+msgstr "Ange nytt lösenord igen: "
+
+msgid "They don't match; try again"
+msgstr "De stämde inte överens, försök igen"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Försök igen senare\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Lägger till användaren %s till gruppen %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Ta bort användaren %s från gruppen %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: användaren \"%s\" finns inte\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Inte en tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Användning: %s [inmatning]\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -s, --sha-rounds              antal SHA-rundor för SHA*-\n"
+"                                krypteringsalgoritmerna\n"
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds              antal SHA-rundor för SHA*-\n"
+"                                krypteringsalgoritmerna\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s är inte ett giltigt gruppnamn\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid group name `%s'\n"
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: ogiltigt gruppnamn \"%s\"\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K kräver KEY=VÄRDE\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: gruppen %s finns redan\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Medlemmen finns redan\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Användning: groupdel grupp\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: kunde inte byta namn på katalogen %s till %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot change the primary group of user '%s' from %u to %u.\n"
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+"%s: kan inte ändra primära gruppen för användaren \"%s\" från %u till %u.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: gruppen %s finns inte\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: gruppen \"%s\" är en NIS-grupp.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s är NIS master\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: användaren %s är en NIS-användare\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Out of memory. Cannot update the group database.\n"
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Slut på minne. Kan inte uppdatera gruppdatabasen.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid group name `%s'\n"
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: ogiltigt gruppnamn \"%s\"\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: gruppen %s är en NIS-grupp\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: okänd användare %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Användning: %s [-r] [-s] [grupp [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Användning: %s [-r] [-s] [grupp]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s och -r är inkompatibla\n"
+
+msgid "invalid group file entry"
+msgstr "ogiltig post i gruppfil"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "ta bort rad \"%s\"? "
+
+msgid "duplicate group entry"
+msgstr "dubblerade grupposter"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "ogiltigt gruppnamn \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "ogiltigt gruppnamn \"%s\"\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupp %s: ingen användare %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "ta bort medlem \"%s\"? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "ingen matchande gruppfilspost i %s\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "lägg till grupp \"%s\" i %s ?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "ogiltig post i fil för skuggrupper"
+
+msgid "duplicate shadow group entry"
+msgstr "duplikata poster i skuggrupp"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "skuggrupp %s: ingen administrativ användare %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "ta bort administrativ medlem \"%s\"? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "skuggrupp %s: ingen användare %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: filerna har uppdaterats\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: inga ändringar\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Användning: groupdel grupp\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Användning: groupdel grupp\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: kan inte uppdatera filen %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Usage: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Användning: id\n"
+
+msgid " groups="
+msgstr " grupper="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Användning: lastlog [flaggor]\n"
+"\n"
+"Flaggor:\n"
+"  -b, --before DAGAR    skriv endast ut lastlog information äldre än DAGAR\n"
+"  -h, --help            visa detta hjälpmeddelande och avsluta\n"
+"  -t, --time DAGAR      skriv endast ut lastlog information senare än DAGAR\n"
+"  -u, --user LOGIN      skriv ut lastlog information för användare\n"
+"                        angiven med LOGIN\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Användarnamn      Port     Från             Senast"
+
+msgid "Username                Port     Latest"
+msgstr "Användarnamn        Port     Senast"
+
+msgid "**Never logged in**"
+msgstr "**Aldrig varit inloggad**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: oväntat argument: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Användning: %s [-p] [namn]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h värd] [-f namn]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r värd\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Ogiltig inloggningstid"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Systemet nedstängt för rutinmässigt underhåll"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Nedkoppling kringgådd -- rootinloggning tillåten.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Inloggning tog slut efter %d sekunder.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr "Ingen utmp post.  Du måste köra \"login\" från den lägsta nivån \"sh\""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM misslyckades, avbryter: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s inloggning: "
+
+msgid "login: "
+msgstr "inloggning: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maximalt antal försök överskreds (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: avbryt begärdes av PAM\n"
+
+msgid "Login incorrect"
+msgstr "Inloggning misslyckad"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s inloggning: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: fel vid processdelning: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY misslyckades på %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Varning: inloggning återaktiverad efter temporär nedstängning."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Senast inloggad: %s på %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Senast inloggad: %.19s på %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " från %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"inloggningstid överskriden\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Användning: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Användning: newgrp [-] [grupp]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Användning: sg grupp [[-c] kommando]\n"
+
+msgid "Invalid password.\n"
+msgstr "Ogiltigt lösenord.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: fel vid processgrening: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: användaren \"%s\" finns inte\n"
+
+msgid "too many groups\n"
+msgstr "för många grupper\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: group %s is a shadow group, but does not exist in /etc/group\n"
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: gruppen %s är en skugg-grupp, men den finns inte i /etc/group\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: ogiltigt användarnamn \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: ogiltigt användarnamn \"%s\"\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: rad %d: ogiltig rad\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: kan inte uppdatera posten för användaren %s (finns inte i passwd-"
+"databasen)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: rad %d: kan inte skapa användare\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: rad %d: kan inte skapa grupp\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: användaren \"%s\" finns inte\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: rad %d: kan inte uppdatera lösenord\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: rad %d: mkdir misslyckades\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: rad %d: chown misslyckades\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: rad %d: kan inte uppdatera post\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: passwd [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -a, --all                     report password status on all accounts\n"
+#| "  -d, --delete                  delete the password for the named "
+#| "account\n"
+#| "  -e, --expire                  force expire the password for the named "
+#| "account\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -k, --keep-tokens             change password only if expired\n"
+#| "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --lock                    lock the named account\n"
+#| "  -n, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -q, --quiet                   quiet mode\n"
+#| "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+#| "  -S, --status                  report password status on the named "
+#| "account\n"
+#| "  -u, --unlock                  unlock the named account\n"
+#| "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "  -x, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Användning: passwd [flaggor] [KONTO]\n"
+"\n"
+"Flaggor:\n"
+"  -a, --all                     rapportera lösenordsstatus för alla konton\n"
+"  -d, --delete                  radera lösenordet för det angivna kontot\n"
+"  -e, --expire                  tvinga utlopp av lösenord för det angiva "
+"kontot\n"
+"  -h, --help                    visa detta hjälpmeddelande och avsluta\n"
+"  -k, --keep-tokens             ändra lösenord bara om det har löpt ut\n"
+"  -i, --inactive INAKTIVT       ställ in lösenordet till inaktivt efter\n"
+"                                utlöpsdatum till INAKTIVT\n"
+"  -l, --lock                    lås det angivna kontot\n"
+"  -n, --mindays MIN_DAG         ställ in minimum antal dagar innan "
+"lösenordet\n"
+"                                måste ändras till MIN_DAG\n"
+"  -q, --quiet                   tyst läge\n"
+"  -r, --repository REPOSITORY   ändra lösenordet i REPOSITORY repository\n"
+"  -S, --status                  rapportera lösenordsstatus för angivet "
+"konto\n"
+"  -u, --unlock                  lås upp det angivna kontot\n"
+"  -w, --warndays VARN_DAG       ställ in antal dagar för utlöpsvarning till "
+"VARN_DAG\n"
+"  -x, --maxdays MAX_DAG         ställ in maximum antal dagar innan "
+"lösenordet\n"
+"                                måste ändras till MAX_DAG\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Gammalt lösenord: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Ange det nya lösenordet (minimum %d tecken)\n"
+"Använd en kombination av stora och små bokstäver samt siffror.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Ange det nya lösenordet (minimum %d, maximum %d tecken)\n"
+"Använd en kombination av gemener, versaler och siffror.\n"
+
+msgid "New password: "
+msgstr "Nytt lösenord: "
+
+msgid "Try again."
+msgstr "Försök igen."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Varning: svagt lösenord (ange det igen för att använda det ändå)."
+
+msgid "They don't match; try again.\n"
+msgstr "De stämde inte, försök igen.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Lösenordet för %s kan inte ändras.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Lösenordet för %s kan inte ändras ännu.\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: unlocking the user would result in a passwordless account.\n"
+#| "You should set a password with usermod -p to unlock this user account.\n"
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: upplåsning av användaren skulle resultera i ett konto utan lösenord.\n"
+"Du bör ange ett lösenord med usermod -p för att låsa upp detta "
+"användarkonto.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: repository %s stöds inte\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Du kan inte visa eller modifiera lösenordsinformationen för %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Ändrar lösenord för %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Lösenordet för %s är oförändrat.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Lösenordet ändrat."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Utlöpsvarning för lösenord"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Användning: %s [-q] [-r] [-s] [lösenord [skugga]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s och -r är inkompatibla\n"
+
+msgid "invalid password file entry"
+msgstr "ogiltig post i lösenordsfil"
+
+msgid "duplicate password entry"
+msgstr "duplikata lösenordsposter"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "ogiltigt användarnamn \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "ogiltigt användarnamn \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "användare %s: ingen grupp %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "användare %s: katalogen %s finns inte\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "användare %s: programmet %s finns inte\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "ingen matchande lösenordfilpost i %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "lägg till grupp \"%s\" i %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "ogiltig post i skugglösenordsfil"
+
+msgid "duplicate shadow password entry"
+msgstr "duplikat post för skugglösenord"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "användare %s: senaste lösenordsändringen i framtiden\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: kan inte öppna filen %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Användning: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Användning: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Tillgång med su till det kontot NEKAS.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Lösenordsautentisering kringgådd.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Vänligen ange ditt EGNA lösenord för autentisering.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Användning: su [flaggor] [KONTO]\n"
+"\n"
+"Flaggor:\n"
+"  -c, --command KOMMANDO        skicka KOMMANDO till anropade skalet\n"
+"  -h, --help                    visa detta hjälpmeddelande och avsluta\n"
+"  -, -l, --login                gör skalet till inloggningsskal\n"
+"  -m, -p,\n"
+"  --preserve-environment        återställ inte miljövariabler och behåll\n"
+"                                samma skal\n"
+"  -s, --shell SKAL              använd SKAL istället för det angivna i "
+"passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: måste köras från en terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: fel %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Okänt id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Du är inte bemyndigad att su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Ange ditt egna lösenord)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ignorerad)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM autentisering misslyckades\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Du är inte bemyndigad att su %s\n"
+
+msgid "No shell\n"
+msgstr "Inget skal\n"
+
+msgid "No password file"
+msgstr "Ingen lösenordsfil"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY misslyckades"
+
+msgid "No password entry for 'root'"
+msgstr "Ingen lösenordspost för \"root\""
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Tryck Control-D för att fortsätta med normal uppstart,\n"
+"(eller ange root-lösenordet för systemunderhåll):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Går över till läge för systemunderhåll"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: kan inte skapa ny standardfil\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: kan inte öppna ny fil med standardvärden\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: rad %d: chown misslyckades\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: byt namn: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: gruppen \"%s\" är en NIS-grupp.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: för många grupper angivna (max %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Användning: %s [inmatning]\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds              antal SHA-rundor för SHA*-\n"
+"                                krypteringsalgoritmerna\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              antal SHA-rundor för SHA*-\n"
+"                                krypteringsalgoritmerna\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              antal SHA-rundor för SHA*-\n"
+"                                krypteringsalgoritmerna\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds              antal SHA-rundor för SHA*-\n"
+"                                krypteringsalgoritmerna\n"
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds              antal SHA-rundor för SHA*-\n"
+"                                krypteringsalgoritmerna\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -s, --sha-rounds              antal SHA-rundor för SHA*-\n"
+"                                krypteringsalgoritmerna\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: ogiltig baskatalog \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ogiltig kommentar \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: ogiltig hemkatalog \"%s\"\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: skugglösenord krävs för -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: skugglösenord krävs för -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: ogiltigt fält \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: ogiltigt skal \"%s\"\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: flaggorna %s och %s står i konflikt\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: kan inte skapa katalog %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Skapar postlådefil"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Gruppen \"mail\" hittades inte. Skapar användarens postlådefil med läget "
+"0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Ställer in rättigheter för postlådefil"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: användaren %s finns redan\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: gruppen %s finns redan - om du vill lägga till denna användare till den "
+"gruppen, använd -g.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: kan inte skapa användare\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u är inte unikt\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: kan inte skapa grupp\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: varning: hem-katalogen finns redan.\n"
+"Kopierar ingen fil från skel-katalogen till den.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Användning: userdel [flaggor] KONTO\n"
+"\n"
+"Flaggor:\n"
+"  -f, --force                   tvinga borttagning av filer, även om\n"
+"                                de inte ägs av användaren\n"
+"  -h, --help                    visa detta hjälpmeddelandet och avsluta\n"
+"  -r, --remove                  ta bort hemkatalog och postkö\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Kan inte ta bort gruppen %s som är en primär grupp för en annan "
+"användare.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: varning: kan inte ta bort "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ägs inte av %s, tar inte bort\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: användaren %s är en NIS-användare\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: användaren %s är för närvarande inloggad\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: ogiltig hemkatalog \"%s\"\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: tar inte bort katalogen %s (skulle ta bort hemmet för användaren %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: fel vid borttagning av katalogen %s\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: usermod [options] LOGIN\n"
+#| "\n"
+#| "Options:\n"
+#| "  -c, --comment COMMENT         new value of the GECOS field\n"
+#| "  -d, --home HOME_DIR           new home directory for the user account\n"
+#| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -g, --gid GROUP               force use GROUP as new primary group\n"
+#| "  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+#| "  -a, --append                  append the user to the supplemental "
+#| "GROUPS\n"
+#| "                                mentioned by the -G option without "
+#| "removing\n"
+#| "                                him/her from other groups\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -l, --login NEW_LOGIN         new value of the login name\n"
+#| "  -L, --lock                    lock the user account\n"
+#| "  -m, --move-home               move contents of the home directory to "
+#| "the\n"
+#| "                                new location (use only with -d)\n"
+#| "  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+#| "  -p, --password PASSWORD       use encrypted password for the new "
+#| "password\n"
+#| "  -s, --shell SHELL             new login shell for the user account\n"
+#| "  -u, --uid UID                 new UID for the user account\n"
+#| "  -U, --unlock                  unlock the user account\n"
+#| "\n"
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Användning: usermod [flaggor] KONTO\n"
+"\n"
+"Flaggor:\n"
+"  -a, --append GRUPP            lägg till användaren till tilläggsGRUPP\n"
+"                                (använd endast med -G)\n"
+"  -c, --comment KOMMENTAR       nytt värde för GECOS-fält\n"
+"  -d, --home HEMKATALOG         hemkatalog för nya användarkontot\n"
+"  -e, --expiredate UTGÅNGSDATUM ställ in kontots utgångsdatum till\n"
+"                                UTGÅNGSDATUM\n"
+"  -f, --inactive INAKTIV        ställ in lösenordet till inaktivt efter\n"
+"                                utgångsdatum till INAKTIV\n"
+"  -g, --gid GRUPP               tvinga använda GRUPP som ny initial\n"
+"                                inloggningsgrupp\n"
+"  -G, --groups GRUPPER          lista tilläggsgrupper\n"
+"  -h, --help                    visa detta hjälpmeddelande och avsluta\n"
+"  -l, --login KONTO             nytt värde för inloggningskontots namn\n"
+"  -L, --lock                    lås användarkontot\n"
+"  -m, --move-home               flytta innehållet i hemkatalogen till den\n"
+"                                nya platsen (använd endast med -d)\n"
+"  -o, --non-unique              tillåt dubblett av (icke-unikt) UID\n"
+"  -p, --password LÖSENORD       använd krypterat lösenord för det nya\n"
+"                                lösenordet\n"
+"  -s, --shell SKAL              nytt inloggningsskal för användarkontot\n"
+"  -u, --uid UID                 nytt UID för användarkontot\n"
+"  -U, --unlock                  lås upp användarkontot\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: unlocking the user would result in a passwordless account.\n"
+#| "You should set a password with usermod -p to unlock this user account.\n"
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: upplåsning av användaren skulle resultera i ett konto utan lösenord.\n"
+"Du bör ange ett lösenord med usermod -p för att låsa upp detta "
+"användarkonto.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: användaren %s finns redan\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: inga flaggor angivna\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: skugglösenord krävs för -e och -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: flaggorna -L, -p och -U är uteslutande\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Medlemmen finns redan\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: katalogen %s finns redan\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: kan inte skapa %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: kan inte chown %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: varning: misslyckades med att ta bort hela den gamla hemkatalogen %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: kunde inte byta namn på katalogen %s till %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: varning: %s ägs inte av %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "misslyckades med att byta ägare på postlåda"
+
+msgid "failed to rename mailbox"
+msgstr "misslyckades med att byta namn på postlåda"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "You have modified %s.\n"
+#| "You may need to modify %s for consistency.\n"
+#| "Please use the command `%s' to do so.\n"
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Du har ändrat %s.\n"
+"Du kan behöva att ändra %s för att stämma överens.\n"
+"Använd kommandot \"%s\" för att göra det.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Användning: vipw [flaggor]\n"
+"\n"
+"Flaggor:\n"
+"  -g, --group                   redigera gruppdatabas\n"
+"  -h, --help                    visa detta hjälpmeddelande och avsluta\n"
+"  -p, --passwd                  redigera lösenordsdatabas\n"
+"  -q, --quiet                   tyst läge\n"
+"  -s, --shadow                  redigera databaserna shadow eller gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: misslyckades med att kasta rättigheterna (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s är oförändrad\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Kunde inte låsa fil"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Kunde inte låsa fil"
+
+msgid "Couldn't make backup"
+msgstr "Kunde inte göra en säkerhetskopia"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: kan inte återställa %s: %s (dina ändringar finns i %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: faillog [flaggor]\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ "  -a, --all             visa faillog-information för alla användare\n"
+#~ "  -h, --help            visa detta hjälpmeddelande och avsluta\n"
+#~ "  -l, --lock-time SEK   lås kontot efter misslyckade inloggningar\n"
+#~ "                        i SEK sekunder\n"
+#~ "  -m, --maximum MAX     ställ in maximalt antal misslyckade inloggningar "
+#~ "till MAX\n"
+#~ "  -r, --reset           återställ räknaren för misslyckade inloggningar\n"
+#~ "  -t, --time DAGAR      visa faillog information för senare än DAGAR\n"
+#~ "  -u, --user KONTO      visa faillog information eller hantera räknare "
+#~ "för\n"
+#~ "                        misslyckade inloggningar och begränsa\n"
+#~ "                        (om använd med -r, -m eller -l flaggor) endast\n"
+#~ "                        för användaren KONTO\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: groupadd [flaggor] GRUPP\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ "  -f, --force                   tvinga avslut med lyckad status om den\n"
+#~ "                                angivna gruppen redan finns\n"
+#~ "  -g, --gid GID                 använd GID för den nya gruppen\n"
+#~ "  -h, --help                    visa detta hjälpmeddelandet och avsluta\n"
+#~ "  -K, --key KEY=VÄRDE           åsidosätter standardvärden från /etc/"
+#~ "login.defs\n"
+#~ "  -o, --non-unique              tillåter skapande av grupp med duplikat\n"
+#~ "                                (icke-unikt) GID\n"
+#~ "  -p, --password LÖSENORD       använd krypterat lösenord för nya "
+#~ "gruppen\n"
+#~ "  -r, --system                  skapa ett systemkonto\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: groupmod [flaggor] GRUPP\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ "  -g, --gid GID             tvinga användning av nytt GID för GRUPP\n"
+#~ "  -h, --help                visa detta hjälpmeddelande och avsluta\n"
+#~ "  -n, --new-name NY_GRUPP   tvinga användning av namnet NY_GRUPP för "
+#~ "GRUPP\n"
+#~ "  -o, --non-unique          tillåt användning av dubblett (icke-unikt) "
+#~ "GID för GRUPP\n"
+#~ "  -p, --password LÖSENORD       använd krypterat lösenord för nya "
+#~ "lösenordet\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~| "                                home directory\n"
+#~| "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~| "account\n"
+#~| "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~| "  -D, --defaults                print or save modified default useradd\n"
+#~| "                                configuration\n"
+#~| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~| "                                to INACTIVE\n"
+#~| "  -g, --gid GROUP               force use GROUP for the new user "
+#~| "account\n"
+#~| "  -G, --groups GROUPS           list of supplementary groups for the "
+#~| "new\n"
+#~| "                                user account\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~| "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~| "  -l,                           do not add the user to the lastlog and\n"
+#~| "                                faillog databases\n"
+#~| "  -m, --create-home             create home directory for the new user\n"
+#~| "                                account\n"
+#~| "  -N, --no-user-group           do not create a group with the same name "
+#~| "as\n"
+#~| "                                the user\n"
+#~| "  -o, --non-unique              allow create user with duplicate\n"
+#~| "                                (non-unique) UID\n"
+#~| "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~| "                                account\n"
+#~| "  -r, --system                  create a system account\n"
+#~| "  -s, --shell SHELL             the login shell for the new user "
+#~| "account\n"
+#~| "  -u, --uid UID                 force use the UID for the new user "
+#~| "account\n"
+#~| "  -U, --user-group              create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Användning: useradd [flaggor] KONTO\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ "  -b, --base-dir BAS_KATALOG    baskatalog för det nya användarkontots\n"
+#~ "                                hem-map\n"
+#~ "  -c, --comment KOMMENTAR       ställ in GECOS-fältet för det nya "
+#~ "användarkontot\n"
+#~ "  -d, --home-dir HEM_KATALOG    hemkatalog för det nya kontot\n"
+#~ "  -D, --defaults                skriv ut eller spara modifierad standard "
+#~ "för\n"
+#~ "                                useradd konfiguration\n"
+#~ "  -e, --expiredate UTLÖPSDATUM  ställ in kontots utgångsdatum till "
+#~ "UTLÖPSDATUM\n"
+#~ "  -f, --inactive INAKTIV        ställ in lösenordet till inaktivt efter "
+#~ "utlöpsdatum\n"
+#~ "                                till INAKTIV\n"
+#~ "  -g, --gid GRUPP               tvinga använda GRUPP för nya "
+#~ "användarkontot\n"
+#~ "  -G, --groups GRUPPER          lista över tilläggsgrupper för det nya\n"
+#~ "                                användarkontot\n"
+#~ "  -h, --help                    visa detta hjälpmeddelande och avsluta\n"
+#~ "  -k, --skel SKEL_KATALOG       ange en alternativ skelettkatalog\n"
+#~ "  -K, --key KEY=VÄRDE           åsidosätter standardvärden från /etc/"
+#~ "login.defs\n"
+#~ "  -l,                           lägg inte till användaren till "
+#~ "databaserna lastlog och\n"
+#~ "                                faillog\n"
+#~ "  -m, --create-home             skapa hem-katalog för det nya "
+#~ "användarkontot\n"
+#~ "  -N, --no-user-group           skapa inte en grupp med samma namn som\n"
+#~ "                                användaren\n"
+#~ "  -o, --non-unique              tillåt skapa användare med samma "
+#~ "dubblerat\n"
+#~ "                                (icke-unikt) UID\n"
+#~ "  -p, --password LÖSENORD       använd krypterat lösenord för det nya\n"
+#~ "                                användarkontot\n"
+#~ "  -r, --system                  skapa ett systemkonto\n"
+#~ "  -s, --shell SKAL              inloggningsskalet för det nya "
+#~ "användarkontot\n"
+#~ "  -u, --uid UID                 tvinga använda UID för det nya "
+#~ "användarkontot\n"
+#~ "  -U, --user-group              skapa en grupp med samma namn som "
+#~ "användaren\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Användning: %s [flaggor] [inmatning]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            krypteringsmetoden (en av %s)\n"
+#~ "  -r, --system                  skapa systemkonton\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Lösenord satt till att löpa ut."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: kan inte låsa lösenordsfilen\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: kan inte öppna lösenordsfilen\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: kan inte låsa skugglösenordsfilen\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: kan inte öppna skugglösenordsfilen\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: kan inte skriva om skugglösenordsfilen\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: kan inte skriva om lösenordsfilen\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: kan inte uppdatera lösenordsfilen\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: kan inte uppdatera skugglösenordsfilen\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tHelt namn: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tRumsnummer: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelefonnummer (arbete): %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelefonnummer (hem): %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Kan inte låsa lösenordsfilen, försök igen senare.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Kan inte öppna lösenordsfilen.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s finns inte i /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Fel vid uppdatering av lösenordsposten.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Kan inte genomföra ändringarna i lösenordsfilen.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Kan inte låsa upp lösenordsfilen.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: kan inte låsa gruppfilen\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: kan inte öppna gruppfilen\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: kan inte låsa gshadow-filen\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: kan inte öppna skuggfilen\n"
+
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: fel vid uppdatering av gshadow-filenl\n"
+
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: fel vid uppdatering av group-filen\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: rad %d: okänd grupp %s\n"
+
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: rad %d: kan inte uppdatera group-post\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: kan inte låsa skuggfilen\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: fel vid uppdatering av skuggfil\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: fel vid uppdatering av lösenordsfil\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: rad %d: okänd användare %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: rad %d: kan inte uppdatera lösenordsposten\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: okänd användare\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Okänd användare: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Användning: %s [-r|-R] grupp\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a användare] grupp\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d användare] grupp\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A användare,...] [-M användare,...] grupp\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M användare,...] grupp\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: kan inte hämta lås\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: kan inte få skugglås\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: kan inte öppna fil\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: kan inte skriva om fil\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: kan inte skriva om skuggfil\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: kan inte låsa upp fil\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: kan inte uppdatera post\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: kan inte uppdatera skuggpost\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "okänd grupp: %s\n"
+
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: kan inte stänga fil\n"
+
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: kan inte stänga skuggfilen\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Vem är du?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: okänd medlem %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: fel vid tilläggning av ny grupp-post\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: kan inte skriva om gruppfilen\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: kan inte skriva om skuggruppfilen\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: kunde inte låsa gruppfilen\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: kunde inte öppna gruppfilen\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: kunde inte låsa skuggruppfilen\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: kunde inte öppna skuggruppfilen\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u är inte unik\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: fel vid borttagning av grupp-post\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: kunde inte ta bort post från skuggrupp\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: kan inte ta bort användarens primära grupp.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Medlemmen som skulle tas bort kunde inte hittas\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Användning: groupmems -a användarnamn | -d användarnamn | -D | -l [-g "
+#~ "gruppnamn]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Endast root kan lägga till medlemmar till olika grupper\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Grupptillgång krävs\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Inte primär ägare av aktuell grupp\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM-autentisering misslyckades för\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Kunde inte låsa gruppfilen\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Kunde inte öppna gruppfilen\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Kan inte stänga gruppfilen\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s hittades inte i /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u är inte ett unikt GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s är inte ett unikt namn\n"
+
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: kan inte skriva om passwd-filen\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: kunde inte låsa lösenordsfilen\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: kan inte öppna lösenordsfilen\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s: kan inte ändra den primära gruppen för användaren \"%s\" från %u till "
+#~ "%u, eftersom den inte finns i passwd-filen.\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: kan inte låsa filen %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: kan inte uppdatera skuggpost för %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: kan inte uppdatera post för gruppen %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: kan inte låsa filen för skuggrupper\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: kan inte öppna filen för skuggrupper\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: kan inte ta bort skuggruppen %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: kan inte uppdatera filen för skuggrupper\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: kan inte uppdatera gruppfilen\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: kan inte radera shadowgruppfilen\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "okänt UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "okänt GID: %lu\n"
+
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: grupp-id \"%s\" är inte giltigt\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: gruppen %s skapades, fel under skapandet av motsvarande gshadow-"
+#~ "grupp\n"
+
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: användar-id \"%s\" är inte giltigt\n"
+
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: ogiltigt användarnamn \"%s\"\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: kan inte låsa /etc/passwd.\n"
+
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: kan inte låsa /etc/shadow.\n"
+
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: kan inte låsa /etc/group.\n"
+
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: kan inte låsa /etc/gshadow.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: kan inte öppna filer\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: fel vid uppdatering av filer\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: rad %d: kan inte hitta användaren %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: kan inte uppdatera lösenordspost för %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: kan inte låsa lösenordsfilen\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: kan inte öppna lösenordsfilen\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: kan inte ta bort skuggposten för %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: kan inte uppdatera skuggfilen\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: kan inte uppdatera lösenordsfilen\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: kan inte uppdatera post för användaren %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: kan inte ta bort skugglösenordsfilen\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: okänt GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: okänd grupp %s\n"
+
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr ""
+#~ "%s: Slut på minne. Kan inte uppdatera databasen för skugg-grupper.\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: kan inte skriva om lösenordsfilen\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: kan inte skriva om skuggruppfilen\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: kan inte låsa skugglösenordsfilen\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: kan inte öppna skugglösenordsfilen\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: fel vid låsning av gruppfil\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: fel vid öppning av gruppfil\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: fel vid låsning av skuggruppfil\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: fel vid öppning av skuggruppfil\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: fel vid tilläggning av ny lösenordspost\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: fel vid tilläggning av ny skugglösenordspost\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: varning: CREATE_HOME stöds inte, vänligen använd -m istället.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: fel vid uppdatering av grupp-post\n"
+
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: fel vid uppdatering av post för skugg-grupp\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: kan inte öppna gruppfilen\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: kunde inte öppna fil för skuggrupp\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: fel vid borttagning av lösenordspost\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: fel vid borttagning av skugglösenordspost\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: användaren %s finns inte\n"
+
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: fel när ny post för skugg-grupp lades till\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu är inte unikt\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: fel vid ändring av lösenordspost\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: fel vid borttagning av lösenordspost\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: fel vid borttagning av skugglösenordspost\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: kan inte hämta unikt GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " den \"%.100s\" från \"%.200s\""
+
+#~ msgid " on '%.100s'"
+#~ msgstr " den \"%.100s\""
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: rad %d: kan inte skapa UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: namnet %s är inte unikt\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Användning: chgpasswd [flaggor]\n"
+#~ "\n"
+#~ "Flaggor:\n"
+#~ "  -e, --encrypted\tangivna lösenord är krypterade\n"
+#~ "  -h, --help\t\tvisa detta hjälpmeddelande och avsluta\n"
+#~ "  -m, --md5\t\tanvänd MD5-kryptering istället för DES när de\n"
+#~ "\t\t\tangivna lösenorden inte är krypterade\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Ingen lösenordsfil\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Tyvärr.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Tyvärr, lösenordet för %s kan inte ändras ännu.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Tyvärr."
diff --git a/po/tl.gmo b/po/tl.gmo
new file mode 100644 (file)
index 0000000..ded753c
Binary files /dev/null and b/po/tl.gmo differ
diff --git a/po/tl.po b/po/tl.po
new file mode 100644 (file)
index 0000000..e3e0021
--- /dev/null
+++ b/po/tl.po
@@ -0,0 +1,2685 @@
+# Tagalog messages for shadow
+# shadow/po/tl.po 
+# Copyright (C) 2005 Software in the Public Interest, Inc.
+# This file is distributed under the same license as shadow
+# Itong talaksan ay ipinamamahagi sa parehong lisensya ng shadow
+# Eric Pareja <xenos@upm.edu.ph>, 2005
+# This file is maintained by Eric Pareja <xenos@upm.edu.ph>
+# Itong talaksan ay inaalagaan ni Eric Pareja <xenos@upm.edu.ph>
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-11-26 21:34+0100\n"
+"Last-Translator: Eric Pareja <xenos@upm.edu.ph>\n"
+"Language-Team: Tagalog <debian-tl@banwa.upm.edu.ph>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Hindi makapaglaan ng lugar para sa impormasyong pagsasaayos.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"may mali sa pagsasaayos - hindi kilalang item '%s' (ipaalam sa "
+"tagapangasiwa)\n"
+
+msgid "Password: "
+msgstr "Kontrasenyas: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Kontrasenyas ni %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Babala: hindi kilalang grupo %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Babala: labis ang dami ng mga grupo\n"
+
+msgid "Your password has expired."
+msgstr "Lumampas sa taning ang inyong kontrasenyas."
+
+msgid "Your password is inactive."
+msgstr "Ang inyong kontrasenyas ay hindi aktibo."
+
+msgid "Your login has expired."
+msgstr "Lumampas sa taning ang inyong login."
+
+msgid "  Contact the system administrator."
+msgstr "  Kausapin ang tagapangasiwa ng sistema."
+
+msgid "  Choose a new password."
+msgstr "  Pumili ng bagong kontrasenyas."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Ang inyong kontrasenyas ay may taning na %ld na araw.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Hanggang bukas ang taning ng inyong kontrasenyas."
+
+msgid "Your password will expire today."
+msgstr "Mapapaso ang inyong kontrasenyas ngayong araw na ito."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Hindi mabago ang tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: mahaba masyado ang mga field\n"
+
+msgid "Environment overflow\n"
+msgstr "Umapaw ang kapaligiran\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Hindi niyo maaaring baguhin ang $%s\n"
+
+#, fuzzy, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"May %d kabiguan magmula ng huling pagpasok.\n"
+"Ang huli ay %s noong %s.\n"
+"May %d na kabiguan magmula ng huling pagpasok.\n"
+"Ang huli ay %s noong %s.\n"
+msgstr[1] ""
+"May %d kabiguan magmula ng huling pagpasok.\n"
+"Ang huli ay %s noong %s.\n"
+"May %d na kabiguan magmula ng huling pagpasok.\n"
+"Ang huli ay %s noong %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: hindi makakuha ng kakaibang UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: hindi makakuha ng kakaibang GID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: hindi makakuha ng kakaibang UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: hindi makakuha ng kakaibang UID\n"
+
+msgid "Too many logins.\n"
+msgstr "Labis ang mga login.\n"
+
+msgid "You have new mail."
+msgstr "May bago kang email."
+
+msgid "No mail."
+msgstr "Walang email."
+
+msgid "You have mail."
+msgstr "Mayroon kang email."
+
+msgid "no change"
+msgstr "walang pagbabago"
+
+msgid "a palindrome"
+msgstr "isang palindromo"
+
+msgid "case changes only"
+msgstr "nagpalit lamang ng laki ng titik"
+
+msgid "too similar"
+msgstr "labis na magkatulad"
+
+msgid "too simple"
+msgstr "labis na simple"
+
+msgid "rotated"
+msgstr "inikot"
+
+msgid "too short"
+msgstr "labis ng ikli"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Maling kontrasenyas: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: bigo ang pam_start(), error %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Napalitan ang password."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: tagumpay sa pagpalit ng kontrasenyas\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Maling kontrasenyas para kay %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Hindi makalipat sa '%s'\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Walang directory, pumapasok na ang HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Hindi mapatakbo ang %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Hindi tanggap na root directory '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Hindi mapalitan ang root directory sa '%s'\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Hindi malaman ang pangalan ng tty ninyo."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: nagkulang ng memory\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "bigo ang malloc(%d)\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Hindi\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Pag-gamit: chage [mga opsiyon] [LOGIN]\n"
+"\n"
+"Mga opsiyon:\n"
+"  -d, --lastday HULING_ARAW     itakda ang huling pagpalit ng kontrasenyas\n"
+"                                sa HULING_ARAW\n"
+"  -E, --expiredate EXPIRE_DATE  itakda ang pagkapaso ng account sa\n"
+"                                EXPIRE_DATE\n"
+"  -h, --help                    ipakita ang tulong at lumabas\n"
+"  -I, --inactive INACTIVE       itakda ang kontrasenyas na inaktibo matapos\n"
+"                                mapaso at gawin itong INACTIVE\n"
+"  -l, --list                    ipakita ang impormasyon tungkol sa account\n"
+"  -m, --mindays MIN_DAYS        itakda na hindi kukulang sa MIN_DAYS\n"
+"                                bago palitan ang kontrasenyas\n"
+"  -M, --maxdays MAX_DAYS        itakda na hindi hihigit sa MAX_DAYS\n"
+"                                bago palitan ang kontrasenyas\n"
+"  -W, --warndays WARN_DAYS      itakda ang babala tungkol sa pagpaso sa\n"
+"                                WARN_DAYS\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Ibigay ang bagong halaga, o pindutin ang ENTER para sa default"
+
+msgid "Minimum Password Age"
+msgstr "Pinakamaliit na Tanda ng Password"
+
+msgid "Maximum Password Age"
+msgstr "Pinakamalaking Tanda ng Password"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Huling Pagpalit ng Password (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "Babala ng Paglipas ng Taning ng Password"
+
+msgid "Password Inactive"
+msgstr "Inaktibo ang Password"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Hangganan ng Account (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Huling Pagpalit ng Password : "
+
+msgid "never"
+msgstr "Hindi kailanman"
+
+msgid "password must be changed"
+msgstr "kailangan palitan ang password"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Taning ng Password:\t"
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Inaktibong Password:\t"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Mapapaso ang Account:\t"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Bilang ng mga araw bago magpalit ng password  : %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Bilang ng mga araw na dapat magpalit na ng password : %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Bilang ng mga araw bago mapaso ang password na may babala : %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: hindi tanggap na petsa '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: hindi tanggap na argumentong numero '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: huwag isama ang \"l\" sa ibang mga flag\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: Walang pahintulot.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Hindi makilala ang inyong pangalan.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: bigo ang pagpapakilalang PAM\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: hindi makapag-aldaba ng mga talaksan, subukan muli mamaya.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: hindi mabuksan ang talaksang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: bigo sa pag-fork: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: wala ang talaksan ng shadow password\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Pinapalitan ang impormasyong pagtanda para kay %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: error sa pagbabago ng mga field\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Pag-gamit: %s [-f buong_pangalan] [-r bilang_ng_silid] [-w "
+"telepono_trabaho]\n"
+"\t[-h telepono_bahay] [-o iba] [gumagamit]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Pag-gamit: %s [-f buong_pangalan] [-r bilang_ng_silid] [-w trabaho] [-h "
+"bahay]\n"
+
+msgid "Full Name"
+msgstr "Buong Pangalan"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Bilang ng Silid"
+
+msgid "Work Phone"
+msgstr "Telepono sa Trabaho"
+
+msgid "Home Phone"
+msgstr "Telepono sa Bahay"
+
+msgid "Other"
+msgstr "Iba pa"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Hindi mabago ang ID sa root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: hindi tanggap na pangalan: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: hindi tanggap na bilang ng silid: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: hindi tanggap na telepono sa trabaho: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: hindi tanggap na telepono sa bahay: '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' ay may hindi legal na mga karakter\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' ay may hindi legal na mga karakter\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: hindi mapalitan ang gumagamit '%s' sa NIS client.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: '%s' ay ang NIS master ng klienteng ito.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Pinapalitan ang impormasyon tungkol sa gumagamit na si %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: mahaba masyado ang mga field\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Pag-gamit: chpasswd [mga opsiyon]\n"
+"\n"
+"Mga opsiyon:\n"
+"  -e, --encrypted   ang mga bigay na mga kontrasenyas ay naka-encrypt\n"
+"  -h, --help        ipakita itong payo na ito at lumabas\n"
+"  -m, --md5         gamitin ang MD5 encryption imbes na DES kapag ang\n"
+"                    mga ibinigay na mga kontrasenyas ay hindi naka-encrypt\n"
+"\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: ang flag na -a ay pinapayagan LAMANG kung kasama ang flag na -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: linya %d: sobrang haba ng linya\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: linya %d: walang bagong password\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: walang grupong %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: linya %d: hindi ma-apdeyt ang ipinasok\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: may error na naganap, di pinansin ang mga pagbabago\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Pag-gamit: chsh [mga opsiyon] [LOGIN]\n"
+"\n"
+"Mga opsiyon:\n"
+"  -h, --help                    ipakita ito at lumabas\n"
+"  -s, --shell SHELL             bagong login shell para sa gumagamit\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Login Shell"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Hindi niyo mapapalitan ang shell para kay %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Pinapalitan ang login shell ni %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Hindi tanggap na entry: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "Ang %s ay hindi tanggap na shell.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Pag-gamit: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Login       Kabiguan Maximum Pinakahuli               On\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds naiwan]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds lock]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Di kilalang Gumagamit: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: hindi mabuksan ang talaksang %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Ang password ni %s ay hindi mapapalitan.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: kailangan ng password ng grupong shadow para sa -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: walang grupong %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: bigo sa pag-fork: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Pinapalitan ang password ng grupong %s\n"
+
+msgid "New Password: "
+msgstr "Bagong Password: "
+
+msgid "Re-enter new password: "
+msgstr "Ibigay muli ang bagong password: "
+
+msgid "They don't match; try again"
+msgstr "Hindi magkapareho; subukan muli"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Subukan muli mamaya\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Dinadagdag ang gumagamit na si %s sa grupong %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Tinatanggal ang gumagamit na si %s mula sa grupong %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Hindi tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: hindi tanggap na pangalan ng grupo ang %s\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "hindi tanggap na pangalan ng grupo '%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: kinakailangan ng -O ang PANGALAN=HALAGA\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: mayroon nang grupong %s\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Mayroon nang kasapi na ganito\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Pag-gamit: groupdel grupo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: hindi mapalitan ng pangalan ang directory %s sa %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: hindi mapalitan ang gumagamit '%s' sa NIS client.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: walang grupong %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: ang grupong '%s' ay grupong NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s ay ang NIS master\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: ang gumagamit na %s ay nasa NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: naubos ang memory sa update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "hindi tanggap na pangalan ng grupo '%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: ang grupong %s ay grupong NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: di kilalang gumagamit %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Pag-gamit: %s [-r] [-s] [grupo [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Pag-gamit: %s [-r] [-s] [grupo]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s at -r ay hindi maaring magkasabay\n"
+
+msgid "invalid group file entry"
+msgstr "hindi tanggap na entry ng talaksang grupo"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "burahin ang linyang '%s'? "
+
+msgid "duplicate group entry"
+msgstr "pangalawang entry ng grupo"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "hindi tanggap na pangalan ng grupo '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "hindi tanggap na pangalan ng grupo '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grupong %s: walang gumagamit %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "tanggalin ang miyembrong '%s'? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "walang katumbas na entry sa talaksang grupo sa %s\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "idagdag ang grupong '%s' sa %s ?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "hindi tanggap na entry sa talaksang shadow group"
+
+msgid "duplicate shadow group entry"
+msgstr "dalawahan ang shadow group entry"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "grupong shadow %s: walang tagapamahalang %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "tanggaling ang miyembrong tagapamahala '%s'? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "grupong shadow %s: walang gumagamit na %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: ang mga talaksan ay na-apdeyt\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: walang pagbabago\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Pag-gamit: groupdel grupo\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Pag-gamit: groupdel grupo\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: hindi ma-apdeyt ang talaksang %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Pag-gamit: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Pag-gamit: id\n"
+
+msgid " groups="
+msgstr " mga grupo="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Pag-gamit: lastlog [mga option]\n"
+"\n"
+"Mga option:\n"
+"  -b, --before ARAW     ipakita lamang ang lastlog record na mas-luma sa "
+"ARAW\n"
+"  -h, --help            ipakita ang tulong na ito at lumabas\n"
+"  -t, --time ARAW       ipakita lamang ang lastlog record na mas-bagos sa "
+"ARAW\n"
+"  -u, --user LOGIN      ipakita lamang ang gumagamit na LOGIN\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Pangalan         Puerta   Mula            Hulihan"
+
+msgid "Username                Port     Latest"
+msgstr "Pangalan                Puerta  Hulihan"
+
+msgid "**Never logged in**"
+msgstr "**Di pumasok kailanman**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: hindi inaasahang argumento: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Pag-gamit: %s [-p] [pangalan]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h host] [-f pangalan]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Di tamang oras ng pagpasok"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sarado ang sistema para sa kinagawiang pagtaguyod"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Nilaktawan ang pag-diskonek -- pinayagang makapasok ang root.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Lumipas ang taning ng pagpasok ng %d segundo.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Walang nakapasok sa utmp. Kailangan niyong mag-exec \"login\" mula sa "
+"pinakamababang antas ng \"sh\""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: kabiguan sa PAM, humihinto: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s login: "
+
+msgid "login: "
+msgstr "login: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Lumampas sa bilang ng maaaring pagsubok : (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: hiniling na mag-abort ng PAM\n"
+
+msgid "Login incorrect"
+msgstr "Maling pagpasok"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s login: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: bigo sa pag-fork: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Babala: pagpasok ay enabled muli matapos ng panandalian pagbawal."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Huling pagpasok: %s sa %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Huling pagpasok: %.19s sa %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " mula %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"lumampas sa taning ng pagpasok\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Pag-gamit: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Pag-gamit: newgrp [-] [grupo]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Pag-gamit: sg grupo [[-c] utos]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Lumang kontrasenyas:"
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: bigo sa pag-fork: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+msgid "too many groups\n"
+msgstr "labis ang dami ng mga grupo\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: walang grupong %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: hindi tanggap na pangalan `%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: hindi tanggap na pangalan `%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: linya %d: hindi tanggap na linya\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: hindi maapdeyt ang ipinasok para kay %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: linya %d: hindi makalikha ng GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: linya %d: hindi makalikha ng GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: linya %d: hindi ma-apdeyt ang kontrasenyas\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: linya %d: bigo ang mkdir\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: linya %d: bigo ang chown\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: linya %d: hindi ma-apdeyt ang ipinasok\n"
+
+#, fuzzy
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Pag-gamit: passwd [mga opsiyon] [login]\n"
+"\n"
+"Mga opsiyon:\n"
+"  -a, --all                     mag-ulat tungkol sa kalagayan ng\n"
+"                                kontrasenyas ng lahat\n"
+"  -d, --delete                  burahin ang kontrasenyas ng account\n"
+"  -e, --expire                  piliting mapaso ang kontrasenyas ng account\n"
+"  -h, --help                    ipakita ang tulong na ito at lumabas\n"
+"  -k, --keep-tokens             palitan ang kontrasenyas kung paso lamang\n"
+"  -i, --inactive INACTIVE       itakdang inaktibo matapos na mapaso\n"
+"                                sa INACTIVE\n"
+"  -l, --lock                    i-lock ang account\n"
+"  -n, --mindays MIN_ARAW\n"
+"  -q, --quiet                   tahimik lamang\n"
+"  -r, --repository REPOSITORYO  palitan ang kontrasenyas sa REPOSITORYO\n"
+"  -S, --status                  iulat ang kalagayan ng kontrasenyas ng\n"
+"                                ibinigay na account\n"
+"  -u, --unlock                  tanggalin ang pagkaaldaba ng account\n"
+"  -w, --warndays BABALA_ARAW    itakda ang pagbabala ng taning sa\n"
+"                                BABALA_ARAW\n"
+"  -x, --maxdays MAX_ARAW        itakda kung hanggang ilang araw bago\n"
+"                                magpalit ng kontrasenyas sa MAX_ARAW\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Lumang kontrasenyas:"
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Ibigay ang bagong kontrasenyas (minimum na %d, maximum na %d karakter)\n"
+"Gumamit ng kombinasyon ng malaki at maliit na titik at mga numero.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Ibigay ang bagong kontrasenyas (minimum na %d, maximum na %d karakter)\n"
+"Gumamit ng kombinasyon ng malaki at maliit na titik at mga numero.\n"
+
+msgid "New password: "
+msgstr "Bagong password: "
+
+msgid "Try again."
+msgstr "Subukan muli."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Babala: mahinang password (ibigay ito muli upang gamitin pa rin)."
+
+msgid "They don't match; try again.\n"
+msgstr "Hindi sila magkapareho; subukan muli.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Ang password ni %s ay hindi mapapalitan.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Ang password ni %s ay hindi mapapalitan.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: hindi suportado ang repositoryong %s\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: Hindi niyo matatanaw o mapapalitan ang impormasyong password ni %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Pinapalitan ang password ni %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Ang password ni %s ay hindi napalitan.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Napalitan ang password."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Babala ng Paglipas ng Taning ng Password"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Pag-gamit: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s at -r ay hindi maaring magkasabay\n"
+
+msgid "invalid password file entry"
+msgstr "hindi tanggap na ipinasok sa talaksang password"
+
+msgid "duplicate password entry"
+msgstr "nadobleng ipinasok sa password"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "hindi tanggap na pangalan '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "hindi tanggap na pangalan '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "gumagamit %s: walang grupo %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "gumagamit %s: walang directory na %s\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "gumagamit %s: walang programang %s\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "walang kaparehas na kontrasenyas sa %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "idagdag ang gumagamit na si '%s' sa %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "hindi tanggap na ipinasok sa talaksang password na shadow"
+
+msgid "duplicate shadow password entry"
+msgstr "nadobleng ipinasok sa talaksang password ng shadow"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "gumagamit %s: huling pagpalit ng password ay nasa hinaharap\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: hindi mabuksan ang talaksang %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Pag-gamit: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Pag-gamit: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Ang paggamit ng su sa account na iyan ay IPINAGBAWAL.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Linampasan ang password authentication.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Ibigay ang inyong SARILING kontrasenyas bilang authentication.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Pag-gamit: su [mga opsiyon] [login]\n"
+"\n"
+"Mga opsiyon:\n"
+"  -c, --command UTOS            ipasa ang UTOS sa tinawag na shell\n"
+"  -h, --help                    ipakita ang payo na ito\n"
+"  -, -l, --login                gawing login shell ang shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        huwag i-reset ang mga variable\n"
+"                                na pangkapaligiran at gamitin\n"
+"                                ang parehong shell\n"
+"  -s, --shell SHELL             gamitin ang SHELL sa halip ng\n"
+"                                default sa passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: kinakailangang patakbuhin mula sa isang terminal\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: error %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Di kilalang id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Hindi kayo awtorisadong gumamit ng su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Ibigay ang sarili niyong password.)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Di pinansin)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: bigo ang pagpapakilalang PAM\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Hindi kayo awtorisadong gumamit ng su %s\n"
+
+msgid "No shell\n"
+msgstr "Walang shell\n"
+
+msgid "No password file"
+msgstr "Walang talaksang password"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Walang ipinasok sa password para sa 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Itiklado ang control-d upang magpatuloy ng normal na startup,\n"
+"(o ibigay ang password ng root para sa pagtataguyod ng sistema):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Pumapasok sa Modang Pagtataguyod ng Sistema"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: hindi malikha ang bagong talaksan ng mga default\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: hindi mabuksan ang bagong talaksan ng mga default\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: linya %d: bigo ang chown\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: baguhin ang pangalan: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: ang grupong '%s' ay grupong NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: sobrang dami ng grupo ang nakatakda (max %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Pag-gamit: %s [input]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: hindi tanggap na batayang directory '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: hindi tanggap na komento '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: hindi tanggap na directory na tahanan '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: kailangan ng shadow password para sa -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: kailangan ng shadow password para sa -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: hindi tanggap na saklaw '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: hindi tanggap na shell '%s'\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: hindi malikha ang directory %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Inililikha ang talaksang mailbox"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Grupong 'mail' ay hindi nahanap. Inililikha ang talaksang mailbox ng "
+"gumagamit na may modong 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Itinatakda ang pahintulot sa talaksang mailbox"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: mayroon nang gumagamit na %s\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: mayroon nang grupong %s - kung nais niyong idagdag ang gumagamit na ito "
+"sa grupong iyon, gamitin ang -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: hindi malikha ang %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: hindi kakaiba ang UID %u\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: hindi malikha ang %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: babala: mayroon nang tahanang directory.\n"
+"Walang kokopyahing talaksan mula sa skel directory dito.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Paggamit: userdel [mga opsiyon] LOGIN\n"
+"\n"
+"Mga opsiyon:\n"
+"  -f, --force                   ipilit ang pagtanggal ng mga talaksan,\n"
+"                                kahit hindi pag-aari ng gumagamit\n"
+"  -h, --help                    ipakita ang patalastas na ito at lumabas\n"
+"  -r, --remove                  tanggalin ang home directory at mail spool\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: hindi matanggal ang grupong %s dahil ito'y pangunahing grupo ng ibang "
+"gumagamit.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: babala: hindi matanggal "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s ay hindi pag-aari ni %s, hindi tatanggalin\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: ang gumagamit na %s ay nasa NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: gumagamit na si %s ay kasalukuyang nakapasok\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: hindi tanggap na directory na tahanan '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: hindi tatanggalin ang directory %s (mawawalan ng bahay si %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: error sa pagtanggal ng directory %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Pag-gamit: usermod [mga opsiyon] LOGIN\n"
+"\n"
+"Mga opsiyon:\n"
+"  -a, --append GRUPO            idagdag ang gumagamit sa karagdagang GRUPO\n"
+"  -c, --comment KOMENTO         itakda ang GECOS field\n"
+"  -d, --home HOME_DIR           ang tahanang directory ng bagong account\n"
+"  -e, --expiredate EXPIRE_DATE  itakda ang petsa ng expiration ng account\n"
+"                                sa EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       itakda ang password na inaktibo matapos ng\n"
+"                                pagkapaso na INACTIVE\n"
+"  -g, --gid GRUPO               ipilit na gamitin ang GRUPO para sa bagong\n"
+"                                account\n"
+"  -G, --groups MGAGRUPO         idagdag ang mga grupo sa MGAGRUPO sa bagong\n"
+"                                account\n"
+"  -h, --help                    ipakita ang payo na ito\n"
+"  -l, --login LOGIN             bagong halaga ng pangalang panglogin\n"
+"  -L, --lock                    ialdaba ang account ng gumagamit\n"
+"  -m, --move-home               ilipat ang laman ng tahanang directory sa\n"
+"                                bagong lugar (gamitin lamang kasama ng -d)\n"
+"  -o, --non-unique              payagang lumikha ng user na may kaparehong "
+"UID\n"
+"  -p, --password PASSWOWRD      gumamit ng encrypted password para sa "
+"bagong\n"
+"                                account\n"
+"  -s, --shell SHELL             itakda ang login shell para sa bagong "
+"account\n"
+"  -u, --uid UID                 gamitin ang UID para sa bagong account\n"
+"  -U, --unlock                  tanggalin ang pagkaaldaba ng account ng\n"
+"                                gumagamit\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: mayroon nang gumagamit na %s\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: walang binigay na mga flag\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: kailangan ang shadow password para sa -e at -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Mayroon nang kasapi na ganito\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: mayroon nang directory na %s\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: hindi malikha ang %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: hindi ma-chown %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+"%s: babala: bigo sa pagtanggal ng buo ng lumang directory na tahanan %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: hindi mapalitan ng pangalan ang directory %s sa %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: babala: %s ay hindi pag-aari ni %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "bigo sa pagpalit ng may-ari ng mailbox"
+
+msgid "failed to rename mailbox"
+msgstr "bigo sa pagpalit ng pangalan ng mailbox"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Pag-gamit: vipw [mga opsiyon]\n"
+"\n"
+"Mga opsiyon:\n"
+"  -g, --group                   baguhin ang database ng mga grupo\n"
+"  -h, --help                    ipakita ang payo na ito\n"
+"  -p, --passwd                  baguhin ang database na passwd\n"
+"  -q, --quiet                   modong tahimik\n"
+"  -s, --shadow                  baguhin ang database na shadow o gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: bigo sa pagtanggal ng mga pribilehiyo (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s ay hindi binago\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Hindi maaldaba ang talaksan"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Hindi maaldaba ang talaksan"
+
+msgid "Couldn't make backup"
+msgstr "Hindi makagawa ng backup"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: hindi maibalik ang %s: %s (ang mga pagbabago ay nasa %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: faillog [mga opsiyon]\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ "  -a, --all             ipakita ang mga record ng faillog para sa lahat\n"
+#~ "  -h, --help            ipakita ang tulong na ito at lumabas\n"
+#~ "  -l, --lock-time SEG   matapos mabigo sa pagpasok, i-lock ng SEG "
+#~ "segundo\n"
+#~ "                        ang account\n"
+#~ "  -m, --maximum MAX     itakda ang maximum na bilang ng kabiguan sa "
+#~ "pagpasok\n"
+#~ "                        na hanggang MAX lamang\n"
+#~ "  -r, --reset           ireset ang mga tagabilang ng kabiguan sa "
+#~ "pagpasok\n"
+#~ "  -t, --time ARAW       ipakita ang faillog records na hindi tatanda sa "
+#~ "ARAW\n"
+#~ "  -u, --user LOGIN      ipakita ang faillog record o pangasiwaan ang "
+#~ "tagabilang\n"
+#~ "                        ng pagkabigo at mga palugit (kung gamit ang -r, -"
+#~ "m o\n"
+#~ "                        -l na opsiyon) para sa gumagamit ng LOGIN lamang\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: groupadd [mga opsiyon] GRUPO\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ "  -f, --force           ipilit ang paglabas na kalagayang matagumpay "
+#~ "kung\n"
+#~ "                        ang ibinigay na grupo ay mayroon na\n"
+#~ "  -g, --gid GID         gamitin ang GID para sa bagong grupo\n"
+#~ "  -h, --help            ipakita ang patalastas na ito at lumabas\n"
+#~ "  -K, --key KEY=HALAGA  nangingibabaw sa mga default sa /etc/login.defs\n"
+#~ "  -o, --non-unique      payagang gumawa ng grupo na may GID na kapareho\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: groupmod [mga opsiyon] GRUPO\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ "  -g, --gid GID                 gamitin ang bagong GID ng GRUPO\n"
+#~ "  -h, --help                    ipakita ang tulong na ito at lumabas\n"
+#~ "  -n, --new-name BAGONG_GRUPO   ipilit na gamitin ang BAGONG_GRUPO ng "
+#~ "GRUPO\n"
+#~ "  -o, --non-unique              payagang gumawa ng grupo na may "
+#~ "kaparehong\n"
+#~ "                                GID ng GRUPO\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Pag-gamit: useradd [mga opsiyon] LOGIN\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ "  -b, --base-dir BASE_DIR       punong directory para sa bagong mga "
+#~ "tahanang\n"
+#~ "                                directory ng account\n"
+#~ "  -c, --comment KOMENTO         itakda ang GECOS field ng bagong account\n"
+#~ "  -d, --home-dir HOME_DIR       ang tahanang directory ng bagong account\n"
+#~ "  -D, --defaults                ipakita o imbakin ang binagong default "
+#~ "na\n"
+#~ "                                pagkaayos ng useradd\n"
+#~ "  -e, --expiredate EXPIRE_DATE  itakda ang petsa ng expiration ng "
+#~ "account\n"
+#~ "                                sa EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       itakda ang password na inaktibo matapos "
+#~ "ng\n"
+#~ "                                pagkapaso na INACTIVE\n"
+#~ "  -g, --gid GRUPO               ipilit na gamitin ang GRUPO para sa "
+#~ "bagong\n"
+#~ "                                account\n"
+#~ "  -G, --groups MGAGRUPO         idagdag ang mga grupo sa MGAGRUPO sa "
+#~ "bagong\n"
+#~ "                                account\n"
+#~ "  -h, --help                    ipakita itong tulong na ito at lumabas\n"
+#~ "  -k, --skel SKEL_DIR           itakda ang alternatibong skel directory\n"
+#~ "  -K, --key KEY=HALAGA          nangingibabaw sa default sa /etc/login."
+#~ "defs\n"
+#~ "  -m, --create-home             likhain ang tahanang directory para sa\n"
+#~ "                                bagong account\n"
+#~ "  -o, --non-unique              payagang lumikha ng user na may "
+#~ "kaparehong UID\n"
+#~ "  -p, --password PASSWOWRD      gumamit ng encrypted password para sa "
+#~ "bagong\n"
+#~ "                                account\n"
+#~ "  -s, --shell SHELL             itakda ang login shell para sa bagong "
+#~ "account\n"
+#~ "  -u, --uid UID                 gamitin ang UID para sa bagong account\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Itinakdang lumampas sa taning ang password."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksan ng mga kontrasenyas\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang password\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang shadow password\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang shadow password\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: hindi maisulat-muli ang talaksang shadow password\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: hindi maisulat-muli ang talaksang password\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: hindi maapdeyt ang talaksang password\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: hindi maapdeyt ang talaksang shadow password\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tBuong Pangalan: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tBilang ng Silid: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tTelepono sa Trabaho: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tTelepono sa Bahay: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Hindi maaldaba ang talaksang password; subukan muli mamaya.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Hindi mabuksan ang talaksang password\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: hindi nahanap ang %s sa /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Error sa pag-apdeyt ng password entry.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Hindi maisulat ang pagbabago sa talaksang password.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Hindi maalis ang aldaba sa talaksang password.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang grupo\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang grupo\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: error sa pag-apdeyt ng talaksang shadow\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: error sa pag-apdeyt ng ipinasok sa grupo\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: linya %d: di kilalang grupo %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: linya %d: hindi ma-apdeyt ang ipinasok\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang shadow\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: error sa pag-apdeyt ng talaksang shadow\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: error sa pag-apdeyt ng talaksang password\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: linya %d: di kilalang gumagamit %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: linya %d: hindi ma-apdeyt password entry\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: hindi kilalang gumagamit\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Di kilalang Gumagamit: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Pag-gamit: %s [-r|-R] grupo\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a gumagamit] grupo\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d gumagamit] grupo\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A gumagamit,...] [-M gumagamit,...] grupo\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M gumagamit,...] grupo\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: hindi makakuha ng aldaba\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: hindi makuha ang aldaba ng shadow\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksan\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: hindi maisulat muli ang talaksan\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: hindi maisulat muli ang talaksang shadow\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: hindi matanggal ang aldaba ng talaksan\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: hindi ma-apdeyt ang entry\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: hindi ma-apdeyt ang entry na shadow\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "di kilalang grupo: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksan\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang shadow\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Sino ka?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: di kilalang miyembro %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: error sa pagdagdag ng entry ng bagong grupo\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: hindi maisulat muli ang talaksang grupo\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: hindi maisulat muli ang talaksang grupo ng shadow\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang grupo\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang grupo\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang grupo ng shadow\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang grupo ng shadow\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: hindi kakaiba ang gid na %u\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: error sa pagtanggal ng entry ng grupo\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: error sa pagtanggal ng entry ng grupong shadow\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: hindi matanggal ang pangunahing grupo ng gumagamit.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Hindi mahanap ang kasapi na tatanggalin\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Pag-gamit: groupmems -a pangalan | -d pangalan | -D | -l [-g pangalan-ng-"
+#~ "grupo]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr ""
+#~ "Ang root lamang ang maaaring magdagdag ng kasapi sa ibang mga grupo\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Kinakailangan ng akses sa grupo\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Hindi pangunahing may-ari ng kasalukuyang grupo\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "Bigo ang pagpapakilalang PAM para kay\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Hindi maaldaba ang talaksang grupo\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Hindi mabuksan ang talaksang grupo\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Hindi maisara ang talaksang grupo\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s hindi nahanap sa /etc/group\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: hindi kakaibang GID ang %u\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s ay hindi kakaibang pangalan\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: hindi maisulat muli ang talaksang password\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang password\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang password\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: hindi ma-apdeyt ang ipinasok sa shadow para kay %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: hindi ma-apdeyt ang ipinasok para sa grupong %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang grupo na shadow\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang grupo na shadow\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: hindi matanggal ang grupong shadow %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: hindi ma-apdeyt ang talaksang grupo na shadow\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: hindi ma-apdeyt ang talaksang grupo\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: hindi matanggal ang talaksang grupo na shadow\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "di kilalang GID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "di kilalang GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: walang grupong %s\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: hindi tanggap na pangalan `%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: hindi maaldaba ang /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: hindi maaldaba ang /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: hindi maaldaba ang /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: hindi maaldaba ang /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: hindi mabuksan ang mga talaksan\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: error sa pag-apdeyt ng mga talaksan\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: linya %d: hindi mahanap ang gumagamit %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: hindi maapdeyt ang ipinasok sa passwd para kay %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang passwd\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: hindi matanggal ang ipinasok sa shadow para kay %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: hindi maapdeyt ang talaksang shadow\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: hindi maapdeyt ang talaksang passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: hindi maapdeyt ang ipinasok para kay %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: hindi matanggal ang talaksang password ng shadow\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: di kilalang GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: di kilalang grupo %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: naubos ang memory sa update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: hindi maisulat muli ang talaksang password\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: hindi maisulat muli ang talaksang password na shadow\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: hindi maaldaba ang talaksang password ng shadow\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang password ng shadow\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: error sa pagaldaba ng talaksang grupo\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: error sa pagbukas ng talaksang grupo\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: error sa pagaldaba ng talaksang grupo ng shadow\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: error sa pagbukas ng talaksang grupo ng shadow\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: error sa pagdagdag ng bagong ipapasok sa password\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: error sa pagdagdag ng bagong ipinasok na password sa shadow\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: babala: CREATE_HOME hindi suportado, gamitin na lamang ang -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: error sa pag-apdeyt ng ipinasok sa grupo\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: error sa pag-apdeyt ng ipinasok sa grupo\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang grupo\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: hindi mabuksan ang talaksang grupo ng shadow\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: error sa pagtanggal ng ipinasok na password\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: error sa pagtanggal ng ipinasok na password sa shadow\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: walang gumagamit na nagngangalang %s\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: error sa pagdagdag ng entry ng bagong grupo\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu ay hindi kakaiba\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: error sa pagpalit ng ipinasok na password\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: error sa pagtanggal ng ipinasok na password\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: error sa pagtanggal ng ipinasok na shadow password\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: hindi makakuha ng kakaibang GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " noong '%.100s' mula sa '%.200s'"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " noong `%.100s'"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: linya %d: hindi makalikha ng UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: hindi kakaiba ang pangalang %s\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Pag-gamit: chpasswd [mga opsiyon]\n"
+#~ "\n"
+#~ "Mga opsiyon:\n"
+#~ "  -e, --encrypted\tang mga bigay na mga password ay naka-encrypt\n"
+#~ "  -h, --help\t\tipakita itong payo na ito at lumabas\n"
+#~ "  -m, --md5\t\tgamitin ang MD5 encryption imbes na DES kapag ang\n"
+#~ "\t\t\tmga ibinigay na mga password ay hindi naka-encrypt\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Walang talaksang password\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Ipagpaumanhin.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Ipagpaumanhin, ang password ni %s ay hindi pa mapapalitan.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Pasensya na."
diff --git a/po/tr.gmo b/po/tr.gmo
new file mode 100644 (file)
index 0000000..7fa9bc7
Binary files /dev/null and b/po/tr.gmo differ
diff --git a/po/tr.po b/po/tr.po
new file mode 100644 (file)
index 0000000..36dac26
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,2902 @@
+# translation of shadow.po to Türkçe
+# Turkish translation of shadow.
+# This file is distributed under the same license as the shadow package.
+#
+# Mehmet Türker <mturker@innova.com.tr>, 2004.
+# Murat Şenel <muratasenel@gmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2008-03-29 20:31+0200\n"
+"Last-Translator: Mehmet Türker <mturker@innova.com.tr>\n"
+"Language-Team: Türkçe <tr@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: KBabel 1.11.1\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"'%s' içinde '%s' isminde birden fazla giriş mevcut. Lütfen bunu pwck yada "
+"grpck kullanarak düzeltin.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "kripto medotu libcrypt tarafından desteklenmiyor? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Yapılandırma bilgileri için yer ayrılamadı.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"yapılandırma hatası - bilinmeyen öğe '%s' (sistem yöneticisine bildirin)\n"
+
+msgid "Password: "
+msgstr "Parola: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s kullanıcı parolası: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Uyarı: bilinmeyen grup %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Uyarı: grup sayısı çok fazla\n"
+
+msgid "Your password has expired."
+msgstr "Parolanızın kullanım süresi doldu."
+
+msgid "Your password is inactive."
+msgstr "Parolanız etkin değil."
+
+msgid "Your login has expired."
+msgstr "Hesabınızın kullanım süresi doldu."
+
+msgid "  Contact the system administrator."
+msgstr "  Sistem yöneticisine başvurunuz."
+
+msgid "  Choose a new password."
+msgstr "Yeni bir parola seçin."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Parolanızın kullanım süresi %ld gün sonra dolacaktır.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Parolanızın kullanım süresi yarın dolacaktır."
+
+msgid "Your password will expire today."
+msgstr "Parolanızın kullanım süresi bugün dolacaktır."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Geçilemeyen tty: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: alanlar çok uzun\n"
+
+msgid "Environment overflow\n"
+msgstr "Ortam taşması\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "$%s değiştirilemez\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"Son girişten beri %d başarısız girişim.  En sonuncusu %s üzerinde %s idi.\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "Benzersiz bir UID alınamıyor (mevcut UID yok)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "Tek (benzersiz) bir GID alınamadı (kullanılabilecek mevcut GID yok)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "Benzersiz bir UID alınamıyor (mevcut UID yok)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "Benzersiz bir UID alınamıyor (mevcut UID yok)\n"
+
+msgid "Too many logins.\n"
+msgstr "Çok fazla oturum.\n"
+
+msgid "You have new mail."
+msgstr "Yeni e-postanız var."
+
+msgid "No mail."
+msgstr "E-Posta yok."
+
+msgid "You have mail."
+msgstr "E-Postanız var."
+
+msgid "no change"
+msgstr "değişiklik yok"
+
+msgid "a palindrome"
+msgstr "bu bir palindrome (tersinden de aynı şekilde okunabilen kelime)"
+
+msgid "case changes only"
+msgstr "sadece durum değişiklikleri"
+
+msgid "too similar"
+msgstr "çok benzer"
+
+msgid "too simple"
+msgstr "çok basit"
+
+msgid "rotated"
+msgstr "döndürülmüş"
+
+msgid "too short"
+msgstr "çok kısa"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Hatalı parola: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() başarısız, hata %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Parola değişti "
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: şifre başarıyla güncellendi\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "`%s' için yanlış parola\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Geçersiz ENCRYPT_METHOD değeri: '%s'.\n"
+"Varsayılan olarak DES kullanılacak.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "\"%s\" dizinine geçilemiyor\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Dizin yok, HOME=/ ile giriş yapılıyor"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "%s çalıştırılamıyor"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Geçersiz kök dizin '%s'\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Kök dizin '%s' olarak değiştirilemiyor\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Kullanıcı isminiz belirlenemedi."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: yetersiz bellek\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) başarısız oldu\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Hayır\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Kullanım: chage [seçenekler] kullanıcı\n"
+"\n"
+"Seçenekler:\n"
+"  -d, --lastday SON_GÜN(LAST_DAY)\n"
+"                                son şifre değiştirme gününü SON_GÜN olarak\n"
+"                                belirle\n"
+"  -E, --expiredate GEÇERLİLİK_TARİHİ(EXPIRE_DATE)\n"
+"                                hesap geçerlilik tarihini GEÇERLİLİK_TARİHİ\n"
+"                                olarak belirle\n"
+"  -h, --help                    bu yardım mesajını görüntüle ve çık\n"
+"  -I, --inactive INACTIVE       kullanım süresi dolduktan sonra şifreyi\n"
+"                                INACTIVE olarak belirle\n"
+"  -l, --list                    hesap aging bilgisini göster\n"
+"  -m, --mindays ASGARİ_GÜN(MIN_DAYS)\n"
+"                                şifre değişikliği için asgari gün\n"
+"                                sayısını ASGARİ_GÜN olarak belirle\n"
+"  -M, --maxdays AZAMİ_GÜN(MAX_DAYS)\n"
+"                                şifre değişikliği için azami gün\n"
+"                                sayısını AZAMİ_GÜN olarak belirle\n"
+"  -W, --warndays UYARI_GÜN_SAYISI (WARN_DAYS)\n"
+"                                zorunlu şifre değişikliği uyarısından "
+"önceki\n"
+"                                gün sayısını UYARI_GÜN_SAYISI olarak "
+"belirle\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Yeni değeri girin, veya varsayılan değer için ENTER'a basın"
+
+msgid "Minimum Password Age"
+msgstr "Asgari Parola Ömrü"
+
+msgid "Maximum Password Age"
+msgstr "Azami Parola Ömrü"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Son Parola Değişimi (YYYY-AA-GG)"
+
+msgid "Password Expiration Warning"
+msgstr "Parola Kullanım Süresi Bitti Uyarısı"
+
+msgid "Password Inactive"
+msgstr "Parola Pasif"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Hesap Bitimi Tarihi (YYYY-AA-GG)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Son Parola Değişimi\t\t\t\t\t: "
+
+msgid "never"
+msgstr "Hiçbir zaman"
+
+msgid "password must be changed"
+msgstr "Parola değiştirilmeli"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Parola Kullanım Süresi Dolumu\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Parola Pasif\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Hesap Bitimi\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Şifre değişiklikleri arasındaki en az gün sayısı\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Maksimum giriş denemesi sayısı aşıldı \t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Şifre süresinin dolumundan önceki uyarı gün sayısı\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: geçersiz tarih '%s'\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: geçersiz sayısal argüman '%s'\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: diğer bayraklarla beraber \"l\" yi kullanmayınız\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: İzin verilmedi\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Kullanıcı isminiz belirlenemedi.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM yetkilendirmesi başarısız oldu\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: dosyalar kilitlenemiyor, daha sonra tekrar deneyin\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: %s dosyası açılamıyor\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failure forking: %s\n"
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: çatallama (fork) hatası: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: shadow parola dosyası açılamadı\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "%s için ömür bilgisi değiştiriliyor\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: alanları değiştirirken hata oluştu\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Kullanım: %s [-f tam_isim] [-r oda_no] [-w iş_tel]\n"
+"\t[-h ev_tel] [-o diğer] [kullanıcı]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "Kullanım: %s [-f tam_isim] [-r oda_no] [-w iş_tel] [-h ev_tel]\n"
+
+msgid "Full Name"
+msgstr "Tam İsim"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Oda Numarası"
+
+msgid "Work Phone"
+msgstr "İş Telefonu"
+
+msgid "Home Phone"
+msgstr "Ev Telefonu"
+
+msgid "Other"
+msgstr "Diğer"
+
+msgid "Cannot change ID to root.\n"
+msgstr "ID root kullanıcısı olarak değiştirilemiyor.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: geçersiz isim: '%s'\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: geçersiz oda numarası: '%s'\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: geçersiz iş telefonu: '%s'\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: geçersiz ev telefonu: '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: '%s' geçersiz karakterler içeriyor\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: '%s' geçersiz karakterler içeriyor\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: kullanıcı `%s' NIS istemcisinde değiştirilemedi.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: `%s' bu istemci için NIS efendisidir.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "%s için kullanıcı bilgileri değiştiriliyor\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: alanlar çok uzun\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Kullanım: %s [seçenekler]\n"
+"\n"
+"Seçenekler:\n"
+"  -c, --crypt-method           kripto metodu (bunlardan biri: %s)\n"
+"  -e, --encrypted              verilen parolalar kriptolu\n"
+"  -h, --help                   bu yardım dosyasını göster ve çık\n"
+"  -m, --md5                    şifresiz metin parolayı MD5 algoritması ile "
+"şifrele\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kripto algoritmaları için kullanılacak\n"
+"                                SHA yuvarlamaları sayısı\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s flag is ONLY allowed with the %s flag\n"
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: %s bayrağına SADECE %s bayrağı ile kullanıldığında izin verilir\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: -c, -e, ve -m bayrakları özel bayraklardır\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: desteklenmeyen kripto metodu: %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: satır %d: satır çok uzun\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: satır %d: yeni parola eksik\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: grup %s mevcut değil\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: satır %d: kayıt güncellenemiyor\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: hata algılandı, değişiklikler görmezden gelindi\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kripto algoritmaları için kullanılacak\n"
+"                                SHA yuvarlamaları sayısı\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Kullanım: chsh [seçenekler] [KULLANICI]\n"
+"\n"
+"Seçenekler:\n"
+"  -h, --help                    bu yardım mesajını göster ve çık\n"
+"  -s, --shell KABUK(SHELL)      kullanıcı hesabı için yeni kabuk\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Oturum Kabuğu"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "%s için kabuğu değiştiremezsiniz.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "%s için oturum kabuğu değiştiriliyor\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Geçersiz kayıt: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s geçersiz bir kabuk.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Kullanım: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Oturum Aç       Failures Maximum Latest                   Açık\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds kaldı]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds kilitli]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unknown user or range: %s\n"
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Bilinmeyen kullanıcı veya aralık: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: %s dosyası açılamıyor\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "%s için parola değiştirilemedi.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: -A için gölge grup parolaları gerekli\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: grup %s mevcut değil\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failure forking: %s\n"
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: çatallama (fork) hatası: %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "%s grubu için parola değiştiriliyor\n"
+
+msgid "New Password: "
+msgstr "Yeni parola: "
+
+msgid "Re-enter new password: "
+msgstr "Yeni parolayı tekrar girin: "
+
+msgid "They don't match; try again"
+msgstr "Eşleşmiyorlar; tekrar deneyin"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Daha sonra tekrar deneyin\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "%s kullanıcısı %s grubuna ekleniyor\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "%s kullanıcısı %s grubundan çıkarılıyor\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Bir tty değil\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kripto algoritmaları için kullanılacak\n"
+"                                SHA yuvarlamaları sayısı\n"
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kripto algoritmaları için kullanılacak\n"
+"                                SHA yuvarlamaları sayısı\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s geçerli bir grup adı değil\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid group name `%s'\n"
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: geçersiz grup adı `%s'\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K seçeneği ANAHTAR=DEĞER gerektirir\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: grup %s zaten var\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Üye zaten mevcut\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Kullanım: groupdel grup_adı\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: %s dizini %s olarak yeniden adlandırılamıyor\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot change the primary group of user '%s' from %u to %u.\n"
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+"%s: '%s' kullanıcısı için birincil grup %u grubundan %u grubuna "
+"değiştirilemiyor.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: grup %s mevcut değil\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: grup '%s' bir NIS grubu.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s NIS efendisidir\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: kullanıcı %s bir NIS kullanıcısı\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Out of memory. Cannot update the group database.\n"
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: Bellek yetersiz. Grup veritabanı güncellenemiyor.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid group name `%s'\n"
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: geçersiz grup adı `%s'\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: grup %s bir NIS grubudur\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: bilinmeyen kullanıcı %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Kullanım: %s [-r] [-s] [grup [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Kullanım: %s [-r] [-s] [grup]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s ve -r uyumsuz\n"
+
+msgid "invalid group file entry"
+msgstr "geçersiz grup dosyası kaydı"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "`%s' satırı silinsin mi? "
+
+msgid "duplicate group entry"
+msgstr "mükerrer grup kaydı"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "geçersiz grup adı '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "geçersiz grup adı '%s'\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "grup %s: %s kullanıcısı yok\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "'%s' üyesi silinsin mi? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "%s girişi içinde grup dosyası kaydı eşleşmedi\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "Grup %s, %s'in içine eklensin mi?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "geçersiz gölge grup dosyası kaydı"
+
+msgid "duplicate shadow group entry"
+msgstr "mükerrer gölge grup kaydı"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "gölge grubu %s: %s yönetici kullanıcı değil\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "yönetici üye '%s' silinsin mi? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "gölge grubu %s: kullanıcı %s mevcut değil\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: dosyalar güncellendi\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: değişiklik yok\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Kullanım: groupdel grup_adı\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Kullanım: groupdel grup_adı\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: %s dosyası güncellenemiyor\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Kullanım: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Kullanım: id\n"
+
+msgid " groups="
+msgstr ".gruplar="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Kullanım: lastlog [seçenekler]\n"
+"\n"
+"Seçenekler:\n"
+"  -b, --before GÜN_SAYISI(DAYS) GÜN_SAYISI kadar günden daha eski olan\n"
+"                                lastlog kayıtlarını gösterir\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time GÜN_SAYISI(DAYS)   GÜN_SAYISI kadar günden daha yeni olan\n"
+"                                lastlog kayıtlarını gösterir\n"
+"  -u, --user KULLANICI          KULLANICI ile belirtilen kullanıcının\n"
+"                                kastlog yıtlarını gösterir\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Kullanıcı adı         Port     Kimden             Sonuncu"
+
+msgid "Username                Port     Latest"
+msgstr "Kullanıcı adı                Port     Sonuncu"
+
+msgid "**Never logged in**"
+msgstr "**Hiç giriş yapmadı**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: bilinmeyen argüman: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Kullanım: %s [-p] [isim]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "          %s [-p] [-h host] [-f isim]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "          %s [-p] -r host\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Geçersiz giriş zamanı"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Sistem rutin bakımlar için kapalı"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Bağlantı kesilmesi atlandı -- root girişi olanaklı.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Giriş %d saniye sonra zaman aşımına uğradı.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Bu bir utmp girişi değil.  En düşük \"sh\" düzeyinde \"login\" i "
+"çalıştırmalısınız. "
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM başarısızlığa uğradı, çıkıyor: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s giriş: "
+
+msgid "login: "
+msgstr "giriş: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Maksimum giriş denemesi sayısı aşıldı (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "Giriş PAM tarafından iptal edildi\n"
+
+msgid "Login incorrect"
+msgstr "Giriş geçersiz"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s giriş: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: çatallama hatası: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY  %s için başarısız oldu"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Uyarı: geçici bir kilitlenme sonrasında giriş tekrar olanaklı kılındı."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Son giriş: %s üzerinden %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Son giriş: %s üzerinden %.19s"
+
+#, c-format
+msgid " from %.*s"
+msgstr "%.*s'den"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"oturum açma süresi aşıldı\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Kullanım: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Kullanım: newgrp [-] [grup]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Kullanım: sg grup [[-c] komut]\n"
+
+msgid "Invalid password.\n"
+msgstr "Geçersiz parola.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: çatallama (fork) hatası: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+msgid "too many groups\n"
+msgstr "çok fazla grup\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: group %s is a shadow group, but does not exist in /etc/group\n"
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: %s grubu bir shadow grubu, fakat /etc/group içinde mevcut değil\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: geçersiz kullanıcı adı '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: geçersiz kullanıcı adı '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: satır %d: geçersiz satır\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: kullanıcı %s için kayıt güncellenemiyor (passwd veritabanında mevcut "
+"değil)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: satır %d: kullanıcı yaratılamıyor\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: satır %d: grup yaratılamıyor\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: satır %d: parola güncellenemiyor\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: satır %d: mkdir başarısız oldu\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: satır %d: chown başarısız oldu\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: satır %d: kayıt güncellenemiyor\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: passwd [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -a, --all                     report password status on all accounts\n"
+#| "  -d, --delete                  delete the password for the named "
+#| "account\n"
+#| "  -e, --expire                  force expire the password for the named "
+#| "account\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -k, --keep-tokens             change password only if expired\n"
+#| "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --lock                    lock the named account\n"
+#| "  -n, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -q, --quiet                   quiet mode\n"
+#| "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+#| "  -S, --status                  report password status on the named "
+#| "account\n"
+#| "  -u, --unlock                  unlock the named account\n"
+#| "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "  -x, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Kullanım: passwd [seçenekler] [KULLANICI]\n"
+"\n"
+"Seçenekler:\n"
+"  -a, --all                 tüm hesaplardaki şifre durumunu bildirir\n"
+"  -d, --delete              ismi belirtilen hesabın şifresini siler\n"
+"  -e, --expire              ismi belirtilen hesaba ait şifrenin süresini "
+"bitirir\n"
+"  -h, --help                bu yardım dosyasını göster ve çık\n"
+"  -k, --keep-tokens         sadece süresi dolduğunda şifreleri değiştirir\n"
+"  -i, --inactive INACTIVE   şifre süresi dolduktan sonra, şifreyi INACTIVE\n"
+"                            olarak ayarlar\n"
+"  -l, --lock                ismi belirtilen hesabı kilitler\n"
+"  -n, --mindays ASGARİ_GÜN_SAYISI(MIN_DAYS)\n"
+"                            şifre değiştirilmeden önceki en az gün sayısını\n"
+"                            ASGARİ_GÜN_SAYISI olarak ayarlar\n"
+"  -q, --quiet               sessiz kip\n"
+"  -r, --repository DEPO(REPOSITORY)\n"
+"                            DEPO deposundaki şifreyi değiştirir\n"
+"  -S, --status              ismi belirtilen hesaptaki şifre durumunu "
+"bildirir\n"
+"  -u, --unlock              ismi belirtilen hesabın kilidini açar\n"
+"  -w, --warndays UYARI_GÜN_SAYISI(WARN_DAYS)\n"
+"                            şifre dolum uyarı gününü UYARI_GÜN_SAYISI\n"
+"                            olarak ayarlar\n"
+"  -x, --maxdays AZAMİ_GÜN_SAYISI(MAX_DAYS)\n"
+"                            şifre değiştirilmeden önceki en fazla gün\n"
+"                            sayısını AZAMİ_GÜN_SAYISI olarak ayarlar\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Eski parola: "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Yeni parolayı girin (en az %d karakter)\n"
+"Lütfen büyük, küçük harf ve rakamların bir kombinasyonunu kullanın.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Yeni parolayı girin (asgari %d, azami %d karakter)\n"
+"Lütfen büyük, küçük harf ve rakamların bir kombinasyonunu kullanın.\n"
+
+msgid "New password: "
+msgstr "Yeni parola: "
+
+msgid "Try again."
+msgstr "Yeniden deneyin."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Uyarı: zayıf parola (yine de kullanmak için aynısını tekrar girin)."
+
+msgid "They don't match; try again.\n"
+msgstr "Eşleşmediler, tekrar deneyin.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "%s için parola değiştirilemedi.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "%s için parola henüz değiştirilemiyor.\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: unlocking the user would result in a passwordless account.\n"
+#| "You should set a password with usermod -p to unlock this user account.\n"
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: kullanıcının kilidini kaldırmak şifresiz bir hesabın oluşmasına yol "
+"açacaktı.\n"
+"Bu kullanıcı hesabının kilidini kaldırmak için usermod -p ile bir parola "
+"belirlemelisiniz.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: depo %s desteklenmiyor\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: %s için şifre bilgisini göremez ve değiştiremezsiniz..\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "%s için parola değiştiriliyor\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s için parola değişmedi\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Parola değişti "
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Parola Kullanım Süresi Bitti Uyarısı"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Kullanım: %s [-q] [-r] [-s] [parola [gölge]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s ve -r uyumsuz\n"
+
+msgid "invalid password file entry"
+msgstr "geçersiz parola dosyası kaydı"
+
+msgid "duplicate password entry"
+msgstr "mükerrer parola kaydı"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "geçersiz kullanıcı adı '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "geçersiz kullanıcı adı '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "kullanıcı %s: %u grubu mevcut değil\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "kullanıcı %s: %s dizini mevcut değil\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "kullanıcı %s: uygulama %s mevcut değil\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "%s içinde eşleşen parola dosyası kaydı yok\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "'%s' adlı kullanıyı %s'e ekle?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "geçersiz gölge parola dosyası kaydı"
+
+msgid "duplicate shadow password entry"
+msgstr "mükerrer gölge parola kaydı"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "kullanıcı %s: gelecekteki son parola değişimi\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: %s dosyası açılamıyor\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Kullanım: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Kullanım: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Bu hesap için 'su'ya erişim ENGELLENDİ.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Parola yetkilendirmesi atlandı.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Lütfen yetkilendirme için KENDİ parolanızı girin.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Kullanım: su [seçenekler] [KULLANICI]\n"
+"\n"
+"Seçenekler:\n"
+"  -c  --command KOMUT           KOMUT u istenen kabuğa geçir\n"
+"  -h, --help                    bu yardım dosyasını göster ve çık\n"
+"  -, -l, --login                kabuğu oturum açma kabuğu haline getirir\n"
+"  -m, -p,\n"
+"  --preserve-environment        çevre değişkenlerini sıfırlama ve \n"
+"                                aynı kabuğu sakla\n"
+"  -s, --shell KABUK(SHELL)      passwd dosyasındaki öntanımlı kabuk yerine\n"
+"                                KABUK kabuğunu kullan\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: bir terminalden çalıştırılmalı\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: hata %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Bilinmeyen id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "su %s için yetkili değilsiniz\n"
+
+msgid "(Enter your own password)"
+msgstr "(Kendi parolanızı girin)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Dikkate alınmadı)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM yetkilendirmesi başarısız oldu\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "su %s için yetkili değilsiniz\n"
+
+msgid "No shell\n"
+msgstr "Kabuk yok\n"
+
+msgid "No password file"
+msgstr "Parola dosyası yok"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY başarısız oldu"
+
+msgid "No password entry for 'root'"
+msgstr "'root' için parola kaydı yok"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Normal başlangıç için control-d ye basın,\n"
+"(ya da sistem bakımı için root parolasını verin):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Sistem Bakımı Kipine Giriliyor"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: yeni varsayılanlar dosyası oluşturulamadı\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: yeni varsayılanlar dosyası açılamadı\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: satır %d: chown başarısız oldu\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: yeniden adlandırma: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: grup '%s' bir NIS grubu.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: çok fazla grup verildi (azami %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Kullanım: %s [girdi]\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kripto algoritmaları için kullanılacak\n"
+"                                SHA yuvarlamaları sayısı\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kripto algoritmaları için kullanılacak\n"
+"                                SHA yuvarlamaları sayısı\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kripto algoritmaları için kullanılacak\n"
+"                                SHA yuvarlamaları sayısı\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kripto algoritmaları için kullanılacak\n"
+"                                SHA yuvarlamaları sayısı\n"
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kripto algoritmaları için kullanılacak\n"
+"                                SHA yuvarlamaları sayısı\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -s, --sha-rounds              SHA* kripto algoritmaları için kullanılacak\n"
+"                                SHA yuvarlamaları sayısı\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: geçersiz ana dizin '%s'\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: geçersiz açıklama '%s'\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: geçersiz ev dizini '%s'\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: -e için gölge parolalar gerekli\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: -f için gölge parolalar gerekli\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: geçersiz alan '%s'\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: geçersiz kabuk '%s'\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: %s ve %s seçenekleri çakışıyor\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: %s dizini yaratılamıyor\n"
+
+msgid "Creating mailbox file"
+msgstr "Mesaj kutusu dosyası yaratılıyor"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"'mail' grubu bulunamadı. Kullanıcının mail kutusu dosyası 0600 dosya "
+"yetkileriyle yaratılıyor.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Mail kutusu dosyası için yetkiler ayarlanıyor"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: kullanıcı %s mevcut\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: grup %s mevcut - eğer bu kullanıcıyı bu gruba eklemek istiyorsanız, -g "
+"kullanın.\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: kullanıcı yaratılamıyor\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: GID %u tek değil\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: grup yaratılamıyor\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: uyarı: Ev dizini zaten mevcut.\n"
+"Temel dizinden hiçbir dosya kopyalanmıyor.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Kullanım: userdel [seçenekler] KULLANICI\n"
+"\n"
+"Seçenekler:\n"
+"  -f, --force                   dosyalar kullanıcıya ait değilse bile sil\n"
+"  -h, --help                    bu yardım mesajını göster ve çık\n"
+"  -r, --remove                  ev dizinini ve mesaj arşivini sil\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: Başka bir kullanıcı için birincil grub olan %s grubu kaldırılamıyor.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: uyarı: silinemiyor "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s %s kullanıcısına ait değil, silinmiyor\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: kullanıcı %s bir NIS kullanıcısı\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: kullanıcı %s şu an oturumda\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: geçersiz ev dizini '%s'\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: %s dizini silinmiyor (%s kullanıcısının ev dizinini silecekti)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: %s dizini silinirken hata oluştu\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: usermod [options] LOGIN\n"
+#| "\n"
+#| "Options:\n"
+#| "  -c, --comment COMMENT         new value of the GECOS field\n"
+#| "  -d, --home HOME_DIR           new home directory for the user account\n"
+#| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -g, --gid GROUP               force use GROUP as new primary group\n"
+#| "  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+#| "  -a, --append                  append the user to the supplemental "
+#| "GROUPS\n"
+#| "                                mentioned by the -G option without "
+#| "removing\n"
+#| "                                him/her from other groups\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -l, --login NEW_LOGIN         new value of the login name\n"
+#| "  -L, --lock                    lock the user account\n"
+#| "  -m, --move-home               move contents of the home directory to "
+#| "the\n"
+#| "                                new location (use only with -d)\n"
+#| "  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+#| "  -p, --password PASSWORD       use encrypted password for the new "
+#| "password\n"
+#| "  -s, --shell SHELL             new login shell for the user account\n"
+#| "  -u, --uid UID                 new UID for the user account\n"
+#| "  -U, --unlock                  unlock the user account\n"
+#| "\n"
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Kullanım: usermod [seçenekler] LOGIN\n"
+"\n"
+"Seçenekler:\n"
+"  -c, --comment YORUM           GECOS alanının yeni değeri\n"
+"  -d, --home EV_DIZINI          kullanıcı hesabı için yeni oturum açma "
+"dizini\n"
+"  -e, --expiredate GEÇERLİLİK_TARİHİ hesap dolum süresini GEÇERLİLİK_TARİHİ\n"
+"                                (EXPIRE_DATE) olarak ayarla\n"
+"  -f, --inactive PASIF          şifre süresi dolduktan sonra şifreyi\n"
+"                                PASIF olarak ayarla\n"
+"  -g, --gid GRUP                birincil grup olarak GRUP kullanımını zorla\n"
+"  -G, --groups GRUPLAR          ilave grupları yeni listesi\n"
+"  -a, --append                  kullanıcıyı ilave grupların sonuna ekle\n"
+"                                -G seçeneğinde bahsedildiği gibi\n"
+"                                diğer gruplardan çıkarmadan\n"
+"  -h, --help                    bu yardım dosyasını göster ve çık\n"
+"  -l, --login YENI_LOGIN        oturum açma ismi için yeni değer\n"
+"  -L, --lock                    kullanıcı hesabını kilitle\n"
+"  -m, --move-home               Ev dizininin içeriğini yeni bir\n"
+"                                dizine kopyalar(sadece -d ile kullanılır)\n"
+"  -o, --non-unique              aynı UID yi kullanmaya izin verir\n"
+"  -p, --password PAROLA         yeni parolalar için şifrelenmiş parola "
+"kullan\n"
+"  -s, --shell SHELL             kullanıcı hesabı için yeni oturum açma "
+"kabuğu\n"
+"  -u, --uid UID                 kullanıcı hesabı için yeni UID\n"
+"  -U, --unlock                  kullanıcı hesabı kilidini aç\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: unlocking the user would result in a passwordless account.\n"
+#| "You should set a password with usermod -p to unlock this user account.\n"
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: kullanıcının kilidini kaldırmak şifresiz bir hesabın oluşmasına yol "
+"açacaktı.\n"
+"Bu kullanıcı hesabının kilidini kaldırmak için usermod -p ile bir parola "
+"belirlemelisiniz.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: kullanıcı %s mevcut\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: herhangi bir bayrak verilmedi\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: -e ve -f için gölge parolalar gerekli\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: -L, -p, ve -U bayrakları özel bayraklardır\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Üye zaten mevcut\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: %s dizini mevcut\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: %s yaratılamıyor\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: chown %s gerçekleştirilemiyor\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: uyarı: eski Ev dizinindeki tüm dosyalar kaldırılamadı %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: %s dizini %s olarak yeniden adlandırılamıyor\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: uyarı: %s %s kullanıcısına ait değil\n"
+
+msgid "failed to change mailbox owner"
+msgstr "postakutusu sahibi değiştirilmedi"
+
+msgid "failed to rename mailbox"
+msgstr "postakutusu isim değişikliği başarısız"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "You have modified %s.\n"
+#| "You may need to modify %s for consistency.\n"
+#| "Please use the command `%s' to do so.\n"
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Değişiklik yapıldı: %s.\n"
+"Uyumu sağlamak için değiştirilmesi gerekiyor: %s.\n"
+"Bunu yapmak için lütfen `%s' komutunu kullanın.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Kullanım: vipw [seçenekler]\n"
+"\n"
+"Seçenekler:\n"
+"  -g, --group                   grub veri tabanını düzenler\n"
+"  -h, --help                    bu yardım dosyasını gösterir ve çıkar\n"
+"  -p, --passwd                  şifre veri tabanını düzenler\n"
+"  -q, --quiet                   sessiz kip\n"
+"  -s, --shadow                  shadow veya gshadow veri tabanını düzenler\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: ayrıcalıklar iptal edilemedi (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s değiştirilmedi\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Dosya kilitlenemedi"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Dosya kilitlenemedi"
+
+msgid "Couldn't make backup"
+msgstr "Yedek alınamadı"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: %s geri yüklenemiyor: %s (değişiklikleriniz %s içinde)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanım: faillog [seçenekler]\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ "  -a, --all                     tüm kullanıcılar için faillog "
+#~ "kayıtlarını\n"
+#~ "                                gösterir\n"
+#~ " -h, --help                     bu yardım dosyasını göster ve çık\n"
+#~ "  -l, --lock-time SANİYE(SEC)   hatalı oturum açılımından sonra, hesabı\n"
+#~ "                                SANİYE kadar saniye kilitler\n"
+#~ "  -m, --maximum AZAMİ(MAX)      en fazla hatalı oturum açılış sayacını "
+#~ "AZAMİ\n"
+#~ "                                değerine ayarlar\n"
+#~ "  -r, --reset                   oturum açılış sayacını sıfırlar\n"
+#~ "  -t, --time GÜN_SAYISI(DAYS)   GÜN_SAYISI kadar günden daha güncel olan\n"
+#~ "                                faillog kayıtlarını gösterir\n"
+#~ "  -u, --user KULLANICI(LOGIN)   faillog kaydını gösterir veya hata\n"
+#~ "                                sayacını onarır ve sadece KULLANICI ile\n"
+#~ "                                belirtilen kullanıcıları sınırlar (-r, -"
+#~ "m\n"
+#~ "                                veya -l seçenekleri ile kullanıldıysa)\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanım: groupadd [seçenekler] GRUP\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ "  -f, --force                   belirtilen grub mevcutsa bile, çıkışta\n"
+#~ "                                başarılı kodu verecek şekilde zorla\n"
+#~ "  -g, --gid GID                 yeni grub için bu GID yi kullan\n"
+#~ "  -h, --help                    bu yardım dosyasını göster ve çık\n"
+#~ "  -K, --key ANAHTAR=DEĞER       /etc/login.defs dosyasındaki\n"
+#~ "                                öntanımlı değerlerin üzerine yazar\n"
+#~ "  -o, --non-unique              aynı GID ile grub oluşturulmasına izin "
+#~ "ver\n"
+#~ "  -p, --password PAROLA         yeni grup için şifreli olarak PAROLA "
+#~ "kullan\n"
+#~ "  -r, --system                  bir sistem hesabı yarat\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Usage: groupmod [seçenekler] GRUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 bu grubu yeni GID ile kullanıma zorla\n"
+#~ "  -h, --help                    bu yardım dosyasını göster ve çık\n"
+#~ "  -n, --new-name YENİ_GRUP      grubu YENİ_GRUP ismini kullanmaya zorla\n"
+#~ "  -o, --non-unique              grubun aynı GID yi kullanmasına izin ver\n"
+#~ "  -p, --password PAROLA         yani parola için şifreli olarak PAROLA "
+#~ "kullan\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~| "                                home directory\n"
+#~| "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~| "account\n"
+#~| "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~| "  -D, --defaults                print or save modified default useradd\n"
+#~| "                                configuration\n"
+#~| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~| "                                to INACTIVE\n"
+#~| "  -g, --gid GROUP               force use GROUP for the new user "
+#~| "account\n"
+#~| "  -G, --groups GROUPS           list of supplementary groups for the "
+#~| "new\n"
+#~| "                                user account\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~| "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~| "  -l,                           do not add the user to the lastlog and\n"
+#~| "                                faillog databases\n"
+#~| "  -m, --create-home             create home directory for the new user\n"
+#~| "                                account\n"
+#~| "  -N, --no-user-group           do not create a group with the same name "
+#~| "as\n"
+#~| "                                the user\n"
+#~| "  -o, --non-unique              allow create user with duplicate\n"
+#~| "                                (non-unique) UID\n"
+#~| "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~| "                                account\n"
+#~| "  -r, --system                  create a system account\n"
+#~| "  -s, --shell SHELL             the login shell for the new user "
+#~| "account\n"
+#~| "  -u, --uid UID                 force use the UID for the new user "
+#~| "account\n"
+#~| "  -U, --user-group              create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Kullanım: useradd [seçenekler] KULLANICI\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ "  -b, --base-dir EV_DİZİNİ(BASE_DIR)\n"
+#~ "                                yeni kullanıcı hesabının ev dizini için\n"
+#~ "                                ana dizin\n"
+#~ "  -c, --comment YORUM(COMMENT)\n"
+#~ "                                yeni kullanıcı için GECOS alanını "
+#~ "ayarlar\n"
+#~ "  -d, --home-dir EV_DİZİNİ(HOME_DIR)\n"
+#~ "                                yeni kullanıcı hesabı için ev dizini\n"
+#~ "  -D, --defaults                değiştirilmiş öntanımlı "
+#~ "useradd                                 yapılandırmasını görüntüle veya "
+#~ "kaydet\n"
+#~ "  -e, --expiredate TARIH  hesap süresi dolumunu TARIH olarak\n"
+#~ "                                ayarla\n"
+#~ "  -f, --inactive PASIF          şifre süresi dolduktan sonra şifreyi\n"
+#~ "                                PASIF olarak ayarla\n"
+#~ "  -g, --gid GRUP                yeni kullanıcı hesabı için GRUP "
+#~ "kullanımını\n"
+#~ "                                zorla\n"
+#~ "  -G, --groups GRUPLAR          yeni kullanıcı hesabı için\n"
+#~ "                                ilave grubları listesi\n"
+#~ "  -h, --help                    bu yardım dosyasını göster ve çık\n"
+#~ "  -k, --skel TEMEL_DİZİN        farklı bir temel dizin belirtir\n"
+#~ "  -K, --key ANAHTAR=DEĞER       /etc/login.defs dosyasındaki öntanımlı\n"
+#~ "                                değerlerin üzerine yazar\n"
+#~ "  -l,                           kullanıcıyı lastlog ve faillog "
+#~ "veritabanlarına\n"
+#~ "                                ekleme\n"
+#~ "  -m, --create-home             yeni kullanıcı hesabı için ev dizini "
+#~ "yarat\n"
+#~ "  -N, --non-user-group          kullanıcı adıyla aynı isimde bir grup "
+#~ "yaratma\n"
+#~ "  -o, --non-unique              aynı UID ile kullanıcı yaratılmasına izin "
+#~ "ver\n"
+#~ "  -p, --password PAROLA         yeni kullanıcı hesabı için şifrelenmiş "
+#~ "parola\n"
+#~ "  -r, --system                  bir sistem hesabı yarat\n"
+#~ "  -s, --shell KABUK             yeni kullanıcı hesabı için oturum açma "
+#~ "kabuğu\n"
+#~ "  -u, --uid UID                 yeni kullanıcı hesabı için UID "
+#~ "kullanımını\n"
+#~ "                                zorla\n"
+#~ "  -U, --user-group              kullanıcı ile aynı isimde bir grup yarat\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Kullanım: %s [seçenekler] [girdi]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            kripto metodu (bunlardan biri: %s)\n"
+#~ "  -r, --system                  sistem hesaplarını yarat\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Parolanızın kullanım süresi doldu."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: parola dosyası kilitlenemedi\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: parola dosyası açılamadı\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası kilitlenemedi\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası açılamadı\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: gölge parola dosyasının üzerine yazılamadı\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: parola dosyasına yazılamadı\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: parola dosyası güncellenemedi\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası güncellenemedi\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tTam İsim: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tOda Numarası: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tİş Telefonu: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tEv Telefonu: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Parola dosyası kilitlenemiyor, daha sonra tekrar deneyin.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Parola dosyası açılamıyor.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s /etc/passwd içinde bulunamadı\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Parola kaydı güncellenmesinde hata.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Parola dosyası değişiklikleri işlenemiyor.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Parola dosyası kilidi açılamıyor.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: grup dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: grup dosyası açılamıyor\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: gölge dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: gölge dosyası açılamıyor\n"
+
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: gshadow dosyası güncellenmesinde hata\n"
+
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: grup dosyası güncellenirken hata oluştu\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: satır %d: bilinmeyen kullanıcı %s\n"
+
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: satır %d: grup kaydı güncellenemiyor\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: gölge dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: gölge (shadow9 dosyası güncellenmesinde hata\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: parola dosyası güncellenmesinde hata\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: satır %d: bilinmeyen kullanıcı %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: satır %d: parola kaydı güncellenemiyor\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: bilinmeyen kullanıcı\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Bilinmeyen Kullanıcı: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Kullanım: %s [-r|-R] grup\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a kullanıcı] grup\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d kullanıcı] grup\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "        %s [-A kullanıcı,...] [-M kullanıcı,...] grup\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M kullanıcı,...] grup\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: kilitlenemiyor\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: gölge kilidi koyulamıyor\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: dosya açılamıyor\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: dosya tekrar yazılamıyor\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: gölge dosyası tekrar yazılamıyor\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: dosya kilidi açılamıyor\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: kayıt güncellenemiyor\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: gölge kaydı güncellenemiyor\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "bilinmeyen grup: %s\n"
+
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: dosya kapatılamıyor\n"
+
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: shadow dosyası kapatılamıyor\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Siz kimsiniz?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: bilinmeyen üye %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: yeni grup kaydı eklenirken hata oluştu\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: grup dosyasına yazılamıyor\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: gölge grup dosyasına yazılamıyor\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: grup dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: grup dosyası açılamıyor\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası açılamıyor\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u tek değil\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: grup kaydını silerken hata oluştu\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: gölge grup kaydını silerken hata oluştu\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: kullanıcının birincil grubu silinemez\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Silinecek üye bulunamadı\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Kullanım: groupmems -a kullanıcıadı | -d kullanıcıadı | -D | -l[-g "
+#~ "grupadı]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Sadece root kullacısı üyeleri başka gruplara ekleyebilir\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Grup hakkı gerekli\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Şu anki grubun birincil sahibi değil\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM yetkilendirmesi başarısız oldu\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Grup dosyası kilitlenemiyor\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Grup dosyası açılamıyor\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Grup dosyası kapatılamıyor\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s /etc/group dosyasında bulunamadı\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u benzersiz bir GID değil\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s benzersiz bir isim değil\n"
+
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: passwd dosyasına yazılamıyor\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: parola dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: parola dosyası açılamıyor\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s: '%s' kullanıcısının birincil grubu %u grubundan %u grubuna\n"
+#~ "değiştirilemiyor, çünkü bu kullanıcı passwd dosyasında yok.\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: %s dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: %s için gölge kaydı güncellenemiyor\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: %s grubu için kayıt güncellenemiyor\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası açılamıyor\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s gölge grubu %s silinemiyor\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası güncellenemiyor\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: grup dosyası güncellenemiyor\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası silinemiyor\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "bilinmeyen UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "bilinmeyen GID: %lu\n"
+
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: grup `%s' geçerli değil\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: %s grubu yaratıldı, uygun olan gshadow grubu yaratılırken hata "
+#~ "oluştu\n"
+
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: kullanıcı `%s' mevcut değil\n"
+
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: geçersiz kullanıcı adı `%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: /etc/passwd kilitlenemiyor.\n"
+
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: /etc/shadow kilitlenemiyor.\n"
+
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: /etc/group kilitlenemiyor.\n"
+
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: /etc/gshadow kilitlenemiyor.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: dosyalar açılamıyor\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: dosyaların güncellenmesinde hata oluştu\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: satır %d: kullanıcı %s bulunamadı\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: %s için passwd kaydı güncellenemedi\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: passwd dosyası kilitlenemedi\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: passwd dosyası açılamadı\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: %s için gölge kaydı silinemedi\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: gölge dosyası güncellenemedi\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: passwd dosyası güncellenemedi\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: kullanıcı %s için kayıt güncellenemiyor\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası silinemiyor\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: bilinmeyen GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: bilinmeyen grup %s\n"
+
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: Bellek yetersiz. Shadow grup veritabanı güncellenemiyor.\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: parola dosyası yazılamıyor\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası yazılamıyor\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası kilitlenemiyor\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: gölge parola dosyası açılamıyor\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: grup dosyası kilitlenmesinde hata\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: grup dosyası açılırken hata\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası kilitlenirken hata\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası açılırken hata\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: yeni parola kaydı eklenirken hata\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: yeni gölge parola kaydı eklenirken hata\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: uyarı: CREATE_HOME desteklenmiyor, lütfen bunun yerine -m kullanın.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: grup kaydı güncellenirken hata oluştu\n"
+
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: shadow grup kaydı güncellenirken hata oluştu\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: grup dosyası açılamıyor\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: gölge grup dosyası açılamıyor\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: parola kaydı silinirken hata oluştu\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: gölge parola kaydı silinirken hata oluştu\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: kullanıcı %s mevcut değil\n"
+
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: yeni shadow grup kaydı eklenirken hata oluştu\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu benzersiz değil\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: parola kaydı değiştirilirken hata oluştu\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: parola kaydı silinirken hata oluştu\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: gölge parola kaydı silinirken hata oluştu\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: tek (benzersiz) bir GID alınamadı\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " '%.200s'den '%.100s' üzerinde"
+
+#~ msgid " on '%.100s'"
+#~ msgstr " '%.100s' üzerinde"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: satır %d: UID yaratılamıyor\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: %s ismi tek değil\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Kullanım: chgpasswd [seçenekler]\n"
+#~ "\n"
+#~ "Seçenekler:\n"
+#~ "  -e, --encrypted\tverilen parolalar, şifrelendirilir\n"
+#~ "  -h, --help\t\tbu yardım dosyasını gösterir ve çıkar\n"
+#~ "  -m, --md5\t\tgirilen parolalar şifrelenmediğinde, DES yerine MD5\n"
+#~ "\t\t\t\tşifrelemesi kullanır\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Parola dosyası yok\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Üzgünüm.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Üzgünüm, %s için parola henüz değiştirilemedi.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Üzgünüm."
diff --git a/po/uk.gmo b/po/uk.gmo
new file mode 100644 (file)
index 0000000..fdc9f35
Binary files /dev/null and b/po/uk.gmo differ
diff --git a/po/uk.po b/po/uk.po
new file mode 100644 (file)
index 0000000..7ee2c58
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,2694 @@
+# translation of uk.po to Ukrainian
+# Roman Festchook <linux@polesye.net>, 2001-2005.
+# Eugeniy Meshcheryakov <eugen@univ.kiev.ua>, 2005, 2006.
+# translation of uk.po to
+# shadow.pot Ukrainian translation.
+# Comments and bug-reports are welcomed
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.18\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-11-26 22:52+0100\n"
+"Last-Translator: Eugeniy Meshcheryakov <eugen@univ.kiev.ua>\n"
+"Language-Team: Ukrainian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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"
+"X-Generator: KBabel 1.11.2\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Не можу виділити ресурси для конфігураційних даних.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr ""
+"помилка у конфігурації - невідома позиція '%s' (повідомте адміністратора)\n"
+
+msgid "Password: "
+msgstr "Пароль: "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Пароль користувача %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Застереження: невідома група %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Застереження: забагато груп\n"
+
+msgid "Your password has expired."
+msgstr "Ваш пароль прострочено."
+
+msgid "Your password is inactive."
+msgstr "Ваш пароль є неактивним."
+
+msgid "Your login has expired."
+msgstr "Ваш логін прострочено."
+
+msgid "  Contact the system administrator."
+msgstr "  Зв'яжіться з системним адміністратором."
+
+msgid "  Choose a new password."
+msgstr "  Оберіть новий пароль."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Ваш пароль буде прострочено за %ld днів.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Ваш пароль буде прострочено завтра."
+
+msgid "Your password will expire today."
+msgstr "Ваш пароль буде прострочено сьогодні."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Не можу змінити tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: поля занадто довгі\n"
+
+msgid "Environment overflow\n"
+msgstr "Переповнення оточення\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Ви не можете змінити $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d помилка з часу останнього входу.\n"
+"Останній вхід: %s з %s.\n"
+msgstr[1] "%d помилки з часу останнього входу. Останній вхід: %s з %s.\n"
+msgstr[2] "%d помилок з часу останнього входу. Останній вхід: %s з %s.\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s: не можу отримати унікальний UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s: не можу отримати унікальний GID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s: не можу отримати унікальний UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s: не можу отримати унікальний UID\n"
+
+msgid "Too many logins.\n"
+msgstr "Забагато входів.\n"
+
+msgid "You have new mail."
+msgstr "Ви маєте нову пошту."
+
+msgid "No mail."
+msgstr "Пошти не має."
+
+msgid "You have mail."
+msgstr "Ви маєте пошту."
+
+msgid "no change"
+msgstr "без змін"
+
+msgid "a palindrome"
+msgstr "паліндром"
+
+msgid "case changes only"
+msgstr "тільки зміна регістру"
+
+msgid "too similar"
+msgstr "занадто подібні"
+
+msgid "too simple"
+msgstr "занадто простий"
+
+msgid "rotated"
+msgstr "переставлені літери"
+
+msgid "too short"
+msgstr "закороткий"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Поганий пароль: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() не виконано, помилка %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Пароль змінено."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: пароль вдало змінено\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Невірний пароль для %s.\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Неможливо перейти до теки \"%s\"\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Немає теки, входимо з HOME=/"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Не можу виконати %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Невірна коренева тека \"%s\"\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Неможливо змінити кореневу теку на \"%s\"\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Неможливо визначити назву вашого термінала."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: брак пам'яті\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) не виконано\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "Ні\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Використання: chage [параметри] [LOGIN]\n"
+"\n"
+"Параметри:\n"
+"  -d, --lastday ОСТАННІЙ_ДЕНЬ   встановити дату останньої зміни пароля в\n"
+"                                ОСТАННІЙ_ДЕНЬ\n"
+"  -E, --expiredate ДАТА_ПРОСТР  встановити дату прострочення облікового\n"
+"                                запису у ДАТА_ПРОСТР\n"
+"  -h, --help                    вивести це довідкове повідомлення та вийти\n"
+"  -I, --inactive НЕАКТИВНИЙ     зробити пароль неактивним після "
+"прострочення\n"
+"  -l, --list                    показати інформацію про вік облікового "
+"запису\n"
+"  -m, --mindays МІН_ДНІВ        встановити найменшу кількість днів перед "
+"зміною\n"
+"                                пароля у МІН_ДНІВ\n"
+"  -M, --maxdays МАКС_ДНІВ       встановити максимальну кількість днів перед\n"
+"                                зміною пароля у МАКС_ДНІВ\n"
+"  -W, --warndays ПОПЕРЕДЖЕНЯЯ   встоновити кількість днів перед\n"
+"                                попередженням про прострочення у "
+"ПОПЕРЕДЖЕННЯ\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Введіть нове значення або натисніть ENTER для значення за замовчанням"
+
+msgid "Minimum Password Age"
+msgstr "Мінімальний вік пароля"
+
+msgid "Maximum Password Age"
+msgstr "Максимальний вік пароля"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Остання зміна пароля (РРРР-ММ-ДД)"
+
+msgid "Password Expiration Warning"
+msgstr "Застереження про прострочення пароля"
+
+msgid "Password Inactive"
+msgstr "Пароль неактивний"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Дата прострочення рахунку (РРРР-ММ-ДД)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Остання зміна пароля\t\t\t\t\t: "
+
+msgid "never"
+msgstr "ніколи"
+
+msgid "password must be changed"
+msgstr "Пароль змінено"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Пароль стає простроченим\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Пароль неактивний\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Рахунок стає простроченим\t\t\t\t\t\t: "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Мінімальна кількість днів між змінами паролю\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Максимальна кількість днів між змінами паролю\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Кількість днів для застереження про прострочення паролю\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: невірна дата \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: невірний числовий аргумент \"%s\"\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: не використовуйте \"l\" з іншими прапорцями\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: У доступі відмовлено.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: Не можу визначити Ваше ім'я користувача.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: PAM автентифікація не пройшла\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s: не можу блокувати файли, спробуйте пізніше\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: не можу відкрити файл %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: помилка відгалудження: %s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: не можу відкрити файл прихованих паролів\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: користувач %s не існує\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Змінюю вікову інформацію для %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: помилка зміни полів\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Використання: %s [-f повне_ім'я] [-r номер_кімнати] [-w робочій_телефон]\n"
+"\t[-h домашній_телефон] [-o інше] [користувач]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Використання: %s [-f повне_ім'я] [-r номер_кімнати]\n"
+"\t[-w робочій_телефон] [-h домашній_телефон]\n"
+
+msgid "Full Name"
+msgstr "Повне ім'я"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Номер кімнати"
+
+msgid "Work Phone"
+msgstr "Робочій телефон"
+
+msgid "Home Phone"
+msgstr "Домашній телефон"
+
+msgid "Other"
+msgstr "Інше"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Не можу змінити ID на root.\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: невірне ім'я: \"%s\"\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: невірний номер кімнати: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: невірний робочий телефон: \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: невірний домашній телефон: \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: \"%s\" містить заборонені символи\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: \"%s\" містить заборонені символи\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: користувач %s не існує\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: неможливо змінити користувача \"%s\" у клієнті NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: \"%s\" є NIS-сервером для цього клієнта.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Зміна інформації про користувача %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: поля занадто довгі\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Використання: chpasswd [опції]\n"
+"\n"
+"Опції:\n"
+"  -e, --encrypted               вказаний пароль зашифровано\n"
+"  -h, --help                    показати цю допомогу та вийти\n"
+"  -m, --md5                     використовувати MD5 шифрування замість DES,\n"
+"                                якщо вказані паролі не зашифровано\n"
+"\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: прапорець -a можна використовувати ТІЛЬКИ з прапорцем -G\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: рядок %d: рядок занадто довгий\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: рядок %d: бракує нового пароля\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: група %s не існує\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: рядок %d: не можу оновити запис\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: виявлено помилку, зміни ігноруються\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: користувач %s не існує\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: користувач %s не існує\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Використання: chsh [параметри] [LOGIN]\n"
+"\n"
+"Параметри:\n"
+"  -h, --help                    вивести це довідкове повідомлення та вийти\n"
+"  -s, --shell ОБОЛОНКА          нова вхідна оболонка для облікового запису\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Логін-оболонка"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Не можна змінити оболонку для %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Змінюю оболонку для %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: Невірний запис: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s є невірна оболонка.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "Використання: expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Логін       Помилок Максимум Останнє                 На\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds залишилось]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds блоковано]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Невідомий користувач: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: не можу відкрити файл %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Пароль для %s не може бути змінений.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: приховані паролі груп потрібні для -A\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: група %s не існує\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: помилка відгалудження: %s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Зміна пароля для групи %s\n"
+
+msgid "New Password: "
+msgstr "Новий пароль: "
+
+msgid "Re-enter new password: "
+msgstr "Повторіть новий пароль: "
+
+msgid "They don't match; try again"
+msgstr "не співпадає; спробуйте знову"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: Спробуйте знову пізніше\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Додано нового користувача %s до групи %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Видалено користувача %s з групи %s\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: користувач %s не існує\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: Не є tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s: то не є вірне ім'я групи\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "невірна назва групи \"%s\"\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K вимагає ЗМІННА=ЗНАЧЕННЯ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: група %s існує\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Член вже існує\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "Використання: groupdel група\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: не можу перейменувати теку з %s на %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s: неможливо змінити користувача \"%s\" у клієнті NIS.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: група %s не існує\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: група \"%s\" є групою NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s є сервер NIS\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: користувач %s є користувачем NIS\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: бракує пам'яті у update_group\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "невірна назва групи \"%s\"\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: група %s є групою NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: невідомий користувач %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Використання: %s [-r] [-s] [група [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Використання: %s [-r] [-s] [група]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: -s та -r несумісні\n"
+
+msgid "invalid group file entry"
+msgstr "невірний запис у файлі груп"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "видалити рядок \"%s\"? "
+
+msgid "duplicate group entry"
+msgstr "дублюючий запис у базі груп"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "невірна назва групи \"%s\"\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "невірна назва групи \"%s\"\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "група %s: немає користувача %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "видалити члена \"%s\"? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "відповідний запис файлу груп відсутній у %s\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "додати групу \"%s\" у %s?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "невірний запис у файлі прихованих груп"
+
+msgid "duplicate shadow group entry"
+msgstr "дублюючий запис у файлі прихованих груп"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "прихована група %s: не має адміністратора %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "видалити адміністратора \"%s\"? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "прихована група %s: немає користувача %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: файли було оновлено\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: без змін\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "Використання: groupdel група\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "Використання: groupdel група\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: неможливо оновити файл %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Використання: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Використання: id\n"
+
+msgid " groups="
+msgstr " групи="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Використання: lastlog [параметри]\n"
+"\n"
+"Параметри:\n"
+"  -b, --before ДНІ              друкувати лише записи старіші за ДНІ\n"
+"  -h, --help                    вивести допомогу та вийти\n"
+"  -t, --time ДНІВ               вивести лише записи свіжіші за ДНІВ\n"
+"  -u, --user ЛОГІН              вивести записи останніх входів для\n"
+"                                користувача з ЛОГІНом\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Користувач       Порт  Звідки           Останній вхід"
+
+msgid "Username                Port     Latest"
+msgstr "Користувач             Порт     Останній вхід"
+
+msgid "**Never logged in**"
+msgstr "**Ніколи не входив**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: неочікуваний аргумент: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Використання: %s [-p] [ім'я]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "                %s [-p] [-h вузол] [-f ім'я]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "                %s [-p] -r вузол\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Невірний час для входу"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Систему закрито для профілактики."
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Сталося відключення -- дозволено лише вхід root-a.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Час логіну буде вичерпано за %d секунд.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Немає запису utmp.  Вам потрібно виконати \"login\" з \"sh\" найнижчого рівня"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: Помилка PAM, перервано: %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s логін: "
+
+msgid "login: "
+msgstr "логін: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Перевищено максимальну кількість спроб (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: система PAM запросила переривання\n"
+
+msgid "Login incorrect"
+msgstr "Невірний логін"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s логін: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: помилка відгалудження: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Застереження: login поновлено після тимчасового блокування."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Останній вхід в систему: %s на %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Останній вхід в систему: %.19s на %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " з %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"вичерпано час логіну\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Використання: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "Використання: newgrp [-] [група]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "Використання: sg група [[-c] команда]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "Старий пароль: "
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: помилка відгалудження: %s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: користувач %s не існує\n"
+
+msgid "too many groups\n"
+msgstr "занадто багато груп\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s: група %s не існує\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: невірне ім'я користувача '%s'\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: невірне ім'я користувача '%s'\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: рядок %d: невірний рядок\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s: не можу оновити запис для користувача %s\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: рядок %d: не можу створити GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: рядок %d: не можу створити GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: користувач %s не існує\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: рядок %d: не можу оновити пароль\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: рядок %d: mkdir не виконався\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: рядок %d: chown не виконався\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: рядок %d: не можу оновити запис\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: passwd [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -a, --all                     report password status on all accounts\n"
+#| "  -d, --delete                  delete the password for the named "
+#| "account\n"
+#| "  -e, --expire                  force expire the password for the named "
+#| "account\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -k, --keep-tokens             change password only if expired\n"
+#| "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --lock                    lock the named account\n"
+#| "  -n, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -q, --quiet                   quiet mode\n"
+#| "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+#| "  -S, --status                  report password status on the named "
+#| "account\n"
+#| "  -u, --unlock                  unlock the named account\n"
+#| "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "  -x, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Використання: passwd [параметри] [ЛОГІН]\n"
+"\n"
+"Параметри:\n"
+"  -a, --all                     звітувати про стан паролів усіх записів\n"
+"  -d, --delete                  видалити пароль для вказаного запису\n"
+"  -e, --expire                  прострочити пароль для вказаного запису\n"
+"  -h, --help                    вивести це довідкове повідомлення та вийти\n"
+"  -k, --keep-tokens             змінити пароль лише якщо його прострочено\n"
+"  -i, --inactive INACTIVE       зробити пароль неактивним після "
+"прострочення\n"
+"  -l, --lock                    заблокувати вказаний запис\n"
+"  -n, --mindays МІН_ДНІВ        встановити найменшу кількість днів перед\n"
+"                                зміною пароля у МІН_ДНІВ\n"
+"  -q, --quiet                   тихий режим\n"
+"  -r, --repository СХОВИЩЕ      змінити пароль у вказаному СХОВИЩІ\n"
+"  -S, --status                  звітувати про стан пароля вказаного запису\n"
+"  -u, --unlock                  розблокувати вказаний запис\n"
+"  -w, --warndays ПОП_ДНІВ       встановити кількість днів перед\n"
+"                                повідомленням про прострочення у ПОП_ДНІВ\n"
+"  -x, --maxdays МАКС_ДНІВ       встановити максимальну кількість днів перед\n"
+"                                зміною пароля у МАКС_ДНІВ\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Старий пароль: "
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Введіть новий пароль (від %d до %d знаків)\n"
+"Змішуйте великі та малі літери та цифри.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Введіть новий пароль (від %d до %d знаків)\n"
+"Змішуйте великі та малі літери та цифри.\n"
+
+msgid "New password: "
+msgstr "Новий пароль: "
+
+msgid "Try again."
+msgstr "Спробуйте ще."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Застереження: Поганий пароль (введіть його знову, якщо все одно бажаєте його "
+"використовувати)."
+
+msgid "They don't match; try again.\n"
+msgstr "Не співпадає; спробуйте знову.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Пароль для %s не може бути змінений.\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Пароль для %s не може бути змінений.\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: сховище %s не підтримується\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s: Ви не можете дивитися та змінювати парольну інформацію для %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Зміна пароля для %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Пароль для %s не змінено.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Пароль змінено."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Застереження про прострочення пароля"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "Використання: %s [-q] [-r] [-s] [пароль [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: -s та -r несумісні\n"
+
+msgid "invalid password file entry"
+msgstr "невірний запис у файлі паролів"
+
+msgid "duplicate password entry"
+msgstr "дублюючий запис у файлі паролів"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "невірне ім'я користувача '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "невірне ім'я користувача '%s'\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "користувач %s: не має групи %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "користувач %s: тека %s не існує\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "користувач %s: програма %s не існує\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "відсутній відповідний запис у файлі паролів %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "додати користувача \"%s\" в %s? "
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "невірний запис у файлі прихованих паролів"
+
+msgid "duplicate shadow password entry"
+msgstr "дублюючий запис у файлі прихованих паролів"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "користувач %s: остання зміна пароля у майбутньому\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: не можу відкрити файл %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Використання: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Використання: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Доступ цього користувача до su ЗАБОРОНЕНО.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Аутентифікацію пройдено.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Будь ласка введіть Ваш власний пароль для аутентифікації.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Використання: su [параметри] [ЛОГІН]\n"
+"\n"
+"Параметри:\n"
+"  -c, --command КОМАНДА     передати КОМАНДУ запущеній оболонці\n"
+"  -h, --help                вивести це довідкове повідомлення та вийти\n"
+"  -, -l, --login            зробити оболонку вхідною\n"
+"  -m, -p,\n"
+"  --preserve-environment    не скидувати змінні оточення і залишити\n"
+"                            таку саму оболонку\n"
+"  -s, --shell ОБОЛОНКА      використати ОБОЛОНКУ замість вказаної в passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: повинно бути запущено з терміналу\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: помилка %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Невідомий id: %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Ви не авторизовані для su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(Введіть ваш пароль)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Ігнорую)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: PAM автентифікація не пройшла\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Ви не авторизовані для su %s\n"
+
+msgid "No shell\n"
+msgstr "Немає оболонки\n"
+
+msgid "No password file"
+msgstr "Немає файлу паролів"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "Бракує запису у базі паролів для 'root'"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Натисніть control-d для виконання звичайного завантаження,\n"
+"(або введіть пароль адміністратора для відновлення системи):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Входимо у режим відновлення системи"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: не можу створити новий файл із значеннями по замовчуванню\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: не можу відкрити новий файл із значеннями по замовчуванню\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: рядок %d: chown не виконався\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: перейменування: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: група \"%s\" є групою NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: вказано забагато груп (макс %d).\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "Використання: %s [вхідні_данні]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: невірна базова тека \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: невірний коментар \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: невірна домашня тека \"%s\"\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: приховані паролі потрібні для -e\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: приховані паролі потрібні для -f\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: невірне поле \"%s\"\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: невірна оболонка \"%s\"\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: не можу створити теку %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Створюється файл поштової скриньки"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Групу \"mail\" не знайдено. Поштова скринька користувача створюється з "
+"правами доступу 0600\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Встановлюються права доступу на файл поштової скриньки"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: користувач %s існує\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: група %s існує - якщо ви бажаєте додати користувача до цієї групи, "
+"використовуйте -g.\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: не можу створити %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u не є унікальним\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: не можу створити %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: увага: домашня тека вже існує.\n"
+"Жоден файл з директорії кістяка не копіюється.\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Використання: userdel [параметри] ЛОГІН\n"
+"\n"
+"Параметри:\n"
+"  -f, --force                   видаляти файли навіть якщо вказаний\n"
+"                                користувач не є їх володарем\n"
+"  -h, --help                    вивести це довідкове повідомлення та вийти\n"
+"  -r, --remove                  видалити домашню теку і поштову скриньку\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr ""
+"%s: не можу видалити групу %s яка є первинною групою іншого користувача.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: застереження: не можу видалити "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s не належить %s, не видалено\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: користувач %s є користувачем NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: користувач %s на даний момент у системі\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: невірна домашня тека \"%s\"\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s: не видалено теку %s (можна видалити домашню теку користувача %s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: помилка видалення теки %s\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Використання: useradd [параметри] ЛОГІН\n"
+"\n"
+"Параметри:\n"
+"  -a, --append                  додати користувача до додаткових ГРУП\n"
+"                                (використовувати тільки з -G)\n"
+"  -c, --comment КОМЕНТАР        встановити поле GECOS для нового запису\n"
+"                                користувача\n"
+"  -d, --home ДОМ_ТЕКА           домашня тека для нового запису користувача\n"
+"  -e, --expiredate ДАТА_ПРОСТР  встановити дату прострочення запису\n"
+"  -f, --inactive НЕАКТИВНИЙ     зробити пароль неактивним після "
+"прострочення\n"
+"  -g, --gid ГРУПА               використовувати ГРУПУ для нового запису\n"
+"                                користувача\n"
+"  -G, --groups ГРУПИ            список додаткових груп для нового запису\n"
+"                                користувача\n"
+"  -h, --help                    показати це довідкове повідомлення і вийти\n"
+"  -l, --login НОВИЙ_ЛОГІН       нове значення реєстраційного імені\n"
+"  -L, --lock                    заблокувати обліковий запис користувача\n"
+"  -m, --move-home               перенести вміст домашньої теки в нове місце\n"
+"                                (використовувати тільки з -d)\n"
+"  -o, --non-unique              дозволювати створювати користувачів з UID "
+"що\n"
+"                                повторюються\n"
+"  -p, --password ПАРОЛЬ         використовувати зашифрований пароль для\n"
+"                                нового запису користувача\n"
+"  -s, --shell ОБОЛОНКА          вхідна оболонка для нового запису "
+"користувача\n"
+"  -u, --uid UID                 використовувати UID для нового запису\n"
+"                                користувача\n"
+"  -U, --unlock                  розблокувати обліковий запис користувача\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: користувач %s існує\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: не подано прапорців\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: приховані паролі потрібні для -e і -f\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Член вже існує\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: тека %s існує\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: не можу створити %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: не можу змінити власника %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: увага: не вдалося повністю видалити стару домашню теку %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: не можу перейменувати теку з %s на %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: застереження: %s не належить %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "не можу змінити власника поштової скриньки"
+
+msgid "failed to rename mailbox"
+msgstr "не можу перейменувати поштову скриньку"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Використання: vipw [параметри]\n"
+"\n"
+"Параметри:\n"
+"  -g, --group                   редагувати базу даних груп\n"
+"  -h, --help                    вивести це довідкове повідомлення та вийти\n"
+"  -p, --passwd                  редагувати базу даних паролів\n"
+"  -q, --quiet                   тихий режим\n"
+"  -s, --shadow                  редагувати базу даних shadow або gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: не вдалося скинути привілеї (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s не змінено\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Не можу блокувати файл"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Не можу блокувати файл"
+
+msgid "Couldn't make backup"
+msgstr "Не можу зробити резервну копію"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: не можу відновити %s: %s (ваші зміни у %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: faillog [опції]\n"
+#~ "\n"
+#~ "Опції:\n"
+#~ "  -a, --all             показати помилки входу для всіх користувачів\n"
+#~ "  -h, --help            показати цю допомогу та вийти\n"
+#~ "  -l, --lock-time СЕК   після помилки входу блокувати рахунок на СЕК\n"
+#~ "                        секунд\n"
+#~ " -m, --maximum МАКС     встановити максимальну кількість помилок входу "
+#~ "до\n"
+#~ "                        МАКС\n"
+#~ "  -r, --reset           перезавантажити лічільник помилок входу\n"
+#~ "  -t, --time ДНІВ       показати помилки входу новіші за ДНІВ\n"
+#~ "  -u, --user ЛОГІН      показати помилки входу або вести лічільники "
+#~ "помилок\n"
+#~ "                        та ліміти (якщо використовується з -r, -m або -l\n"
+#~ "                        опціями) лише для користувача з логіном ЛОГІН\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: groupadd [параметри] ГРУПА\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ "  -f, --force               примусити не повертати помилку якщо вказана\n"
+#~ "                            група вже існує\n"
+#~ "  -g, --gid GID             використати GID для нової групи\n"
+#~ "  -h, --help                показати це довідкове повідомлення та вийти\n"
+#~ "  -K, --key КЛЮЧ=ЗНАЧЕННЯ   змінити значення за замовченням\n"
+#~ "                            з /etc/login.defs\n"
+#~ "  -o, --non-unique          дозволити створювати групи з GID що "
+#~ "повторюються\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: groupmod [параметри] ГРУПА\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ "  -g, --gid GID                 встановити GID для групи\n"
+#~ "  -h, --help                    показати це довідкове повідомлення та "
+#~ "вийти\n"
+#~ "  -n, --new-name НОВА_ГРУПА     використовувати назву НОВА_ГРУПА для "
+#~ "ГРУПИ\n"
+#~ "  -o, --non-unique              дозволити створювати групи з GID що "
+#~ "повторюються\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Використання: useradd [параметри] ЛОГІН\n"
+#~ "\n"
+#~ "Параметри:\n"
+#~ "  -b, --base-dir БАЗОВА_ТЕКА    базова тека для домашніх тек нових\n"
+#~ "                                користувацьких облікових записів\n"
+#~ "  -c, --comment КОМЕНТАР        встановити поле GECOS для нового запису\n"
+#~ "                                користувача\n"
+#~ "  -d, --home-dir ДОМ_ТЕКА       домашня тека для нового запису "
+#~ "користувача\n"
+#~ "  -D, --defaults                друкувати або зберегти змінені "
+#~ "налаштування\n"
+#~ "                                useradd\n"
+#~ "  -e, --expiredate ДАТА_ПРОСТР  встановити дату прострочення запису\n"
+#~ "  -f, --inactive НЕАКТИВНИЙ     зробити пароль неактивним після "
+#~ "прострочення\n"
+#~ "  -g, --gid ГРУПА               використовувати ГРУПУ для нового запису\n"
+#~ "                                користувача\n"
+#~ "  -G, --groups ГРУПИ            список додаткових груп для нового запису\n"
+#~ "                                користувача\n"
+#~ "  -h, --help                    показати це довідкове повідомлення і "
+#~ "вийти\n"
+#~ "  -k, --skel ТЕКА_КІСТЯКА       вказати альтернативну теку для кістяка\n"
+#~ "  -K, --key КЛЮЧ=ЗНАЧЕННЯ       переписати значення з /etc/login.defs\n"
+#~ "  -m, --create-home             створити домашню теку для запису нового\n"
+#~ "                                користувача\n"
+#~ "  -o, --non-unique              дозволювати створювати користувачів з UID "
+#~ "що\n"
+#~ "                                повторюються\n"
+#~ "  -p, --password ПАРОЛЬ         використовувати зашифрований пароль для\n"
+#~ "                                нового запису користувача\n"
+#~ "  -s, --shell ОБОЛОНКА          вхідна оболонка для нового запису\n"
+#~ "                                користувача\n"
+#~ "  -u, --uid UID                 використовувати UID для нового запису\n"
+#~ "                                користувача\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Пароль прострочений."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: не можу заблокувати файл паролів\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: не можу відкрити файл паролів\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: не можу заблокувати файл прихованих паролів\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: не можу відкрити файл прихованих паролів\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: не можу переписати файл прихованих паролів\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: не можу переписати файл паролів\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: не можу оновити файл паролів\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: не можу оновити файл прихованих паролів\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tПовне ім'я: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tНомер кімнати: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tРобочій телефон: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tДомашній телефон: %s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "Не можу блокувати файл паролів; спробуйте пізніше.\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Не можу відкрити файл паролів.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: %s не знайдено у /etc/passwd\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Не можу оновити запис у файлі паролів.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Не можу записати зміни до файлу паролів.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Не можу розблокувати файл паролів.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: не можу блокувати файл груп\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: не можу відкрити файл груп\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: неможливо заблокувати файл gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: не можу відкрити файл з прихованими паролями\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: помилка оновлення файлу з прихованими паролями\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: помилка оновлення запису у базі груп\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: рядок %d: невідома група %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: рядок %d: не можу оновити запис\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: не можу заблокувати файл з прихованими паролями\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: помилка оновлення файлу з прихованими паролями\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: помилка оновлення файлу з паролями\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: рядок %d: невідомий користувач %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: рядок %d: не можу оновити запис у базі паролів\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: невідомий користувач\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Невідомий користувач: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Використання: %s [-r|-R] група\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "                %s [-a користувач] група\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "                %s [-d користувач] група\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "                %s [-A користувач,...] [-M користувач,...] група\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "                %s [-M користувач,...] група\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: не можу заблокувати\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: не можу заблокувати базу прихований паролів\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: не можу відкрити файл\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: не можу переписати файл\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: не можу переписати файл прихованих паролів\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: не можу розблокувати файл\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: не можу оновити запис\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: не можу оновити запис у базі прихованих паролів\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "невідома група: %s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: не можу відкрити файл\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: не можу відкрити файл з прихованими паролями\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Ви хто?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: невідомий член %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: помилка додання нового запису у файл груп\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: не можу переписати файл груп\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: не можу переписати файл прихованих груп\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: не можу заблокувати файл груп\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: не можу відкрити файл груп\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: не можу блокувати файл прихованих груп\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: не можу відкрити файл прихованих груп\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u не є унікальним\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: помилка видалення запису з бази груп\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: помилка видалення запису з бази прихованих груп\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: не можу видалити головну групу користувача.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Член, якого потрібно видалити, не знайдений\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Використання: groupmems -a користувач | -d користувач | -D | -l [-g "
+#~ "група]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Тільки root може додавати членів до інших груп\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Необхідний доступ до групи\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Не є первинним володарем поточної групи\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM автентифікація не пройшла\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Неможливо заблокувати файл груп\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Неможливо відкрити файл груп\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Неможливо закрити файл груп\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: %s не знайдено у /etc/passwd\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u не є унікальний GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s не є унікальне ім'я\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: не можу переписати файл паролів\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: не можу блокувати файл паролів\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: не можу відкрити файл паролів\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: не можу заблокувати файл %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: не можу оновити прихований запис для %s\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: не можу оновити запис для групи %s\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: не можу блокувати файл прихованих груп\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: не можу відкрити файл прихованих груп\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: не можу видалити приховану групу %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: не можу оновити файл прихованих груп\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: не можу оновити файл груп\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: не можу видалити файл прихованих груп\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "невідомий UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "невідомий GID: %lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: група %s не існує\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: користувач %s не існує\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: невірне ім'я користувача '%s'\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: не можу блокувати /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: не можу блокувати /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: не можу блокувати /etc/passwd.\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: не можу блокувати /etc/passwd.\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: не можу відкрити файл\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: помилка оновлення файлу\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: рядок %d: не можу знайти користувача %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: не можу оновити запис у файлі паролів для %s\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: не можу блокувати файл паролів\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: не можу відкрити файл паролів\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: не можу видалити запис у файлі прихованих паролів для %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: не можу оновити файл прихованих паролів\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: не можу оновити файл паролів\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: не можу оновити запис для користувача %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: не можу видалити файл прихованих паролів\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: невідомий GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: невідома група %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: бракує пам'яті у update_gshadow\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: не можу переписати файл паролів\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: не можу переписати файл прихованих паролів\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: не можу блокувати файл прихованих паролів\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: не можу відкрити файл прихованих паролів\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: не можу заблокувати файл груп\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: не можу відкрити файл груп\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: не можу заблокувати файл прихованих груп\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: не можу відкрити файл прихованих груп\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: помилка додання нового запису у базу паролів\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: помилка додання нового запису у базу прихованих паролів\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s: застереження: CREATE_HOME не підтримується, користуйтесь -m.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: помилка оновлення запису у базі груп\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: помилка оновлення запису у базі груп\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: не можу відкрити файл груп\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: не можу відкрити файл прихованих груп\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: помилка видалення запису з бази паролів\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: помилка видалення запису з бази прихованих паролів\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: користувач %s не існує\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: помилка додання нового запису у файл груп\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: uid %lu не є унікальним\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: помилка зміни запису в базі паролів\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: помилка видалення запису з бази паролів\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: помилка видалення запису з бази прихованих паролів\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s: не можу отримати унікальний GID\n"
+
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " на \"%.100s\" з \"%.200s\""
+
+#~ msgid " on '%.100s'"
+#~ msgstr " на \"%.100s\""
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s: рядок %d: не можу створити UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s: ім'я %s не є унікальним\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Використання: chpasswd [опції]\n"
+#~ "\n"
+#~ "Опції:\n"
+#~ "  -e, --encrypted\tвказані паролі зашифровано\n"
+#~ "  -h, --help\t\tпоказати цю допомогу та вийти\n"
+#~ "  -m, --md5\t\tвикористовувати MD5 шифрування замість DES, якщо вказані\n"
+#~ "\t\t\tпаролі не зашифровано\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "Немає файлу паролів\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "Вибачте.\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "Вибачте, пароль для %s не може бути змінено зараз.\n"
+
+#~ msgid "Sorry."
+#~ msgstr "Вибачте."
diff --git a/po/vi.gmo b/po/vi.gmo
new file mode 100644 (file)
index 0000000..c413d9b
Binary files /dev/null and b/po/vi.gmo differ
diff --git a/po/vi.po b/po/vi.po
new file mode 100644 (file)
index 0000000..c124ec7
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,2842 @@
+# Vietnamese translation for Shadow.
+# Copyright © 2008 Free Software Foundation, Inc.
+# Clytie Siddall <clytie@riverland.net.au>, 2005-2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.1.1\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2008-03-30 19:53+1030\n"
+"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
+"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: LocFactoryEditor 1.7b3\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+"Có nhiều mục nhập tên « %s » trong %s. Hãy sửa chữa trường hợp này, dùng pwck "
+"hoặc grpck.\n"
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr "Phương pháp mã hoá không được libcrypt hỗ trợ ? (%s)\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "Không thể cấp phát sức chứa cho thông tin cấu hình.\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "lỗi cấu hình: không rõ mục « %s » (báo quản trị).\n"
+
+msgid "Password: "
+msgstr "Mật khẩu : "
+
+#, c-format
+msgid "%s's Password: "
+msgstr "Mật khẩu của %s: "
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "Cảnh báo : không rõ nhóm %s.\n"
+
+msgid "Warning: too many groups\n"
+msgstr "Cảnh báo : quá nhiều nhóm\n"
+
+msgid "Your password has expired."
+msgstr "Mật khẩu của bạn đã hết hạn dùng."
+
+msgid "Your password is inactive."
+msgstr "Mật khẩu của bạn không phải hoạt động."
+
+msgid "Your login has expired."
+msgstr "Đăng nhập của bạn đã hết hạn dùng."
+
+msgid "  Contact the system administrator."
+msgstr "  Hãy liên lạc với quản trị hệ thống."
+
+msgid "  Choose a new password."
+msgstr "  Hãy chọn mật khẩu mới."
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "Mật khẩu của bạn sẽ hết hạn sau %ld ngày.\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "Mật khẩu của bạn sễ hết hạn vào ngày mai."
+
+msgid "Your password will expire today."
+msgstr "Mật khẩu của bạn sẽ hết hạn vào hôm nay."
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "Không thể thay đổi TTY %s."
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s: trường quá dài\n"
+
+msgid "Environment overflow\n"
+msgstr "Tràn môi trường\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "Không cho phép bạn thay đổi $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"%d lần bị lỗi sau khi đăng nhập cuối cùng.\n"
+"Lần gần nhất là %s vào %s.\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "Không thể lấy UID duy nhất (không còn có UID sẵn sàng lại)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique GID (no more available GIDs)\n"
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "Không thể lấy GID duy nhất (không còn có GID sẵn sàng lại)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "Không thể lấy UID duy nhất (không còn có UID sẵn sàng lại)\n"
+
+#, fuzzy, c-format
+#| msgid "Can't get unique UID (no more available UIDs)\n"
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "Không thể lấy UID duy nhất (không còn có UID sẵn sàng lại)\n"
+
+msgid "Too many logins.\n"
+msgstr "Quá nhiều việc đăng nhập.\n"
+
+msgid "You have new mail."
+msgstr "Bạn có thư mới."
+
+msgid "No mail."
+msgstr "Không có thư."
+
+msgid "You have mail."
+msgstr "Bạn có thư."
+
+msgid "no change"
+msgstr "chưa thay đổi gì"
+
+msgid "a palindrome"
+msgstr "từ đọc xuôi ngược đều giống như nhau"
+
+msgid "case changes only"
+msgstr "chỉ thay đổi chữ thường/hoa"
+
+msgid "too similar"
+msgstr "quá tương tự"
+
+msgid "too simple"
+msgstr "quá đơn giản"
+
+msgid "rotated"
+msgstr "đã xoay"
+
+msgid "too short"
+msgstr "quá ngắn"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "Mật khẩu sai: %s.  "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() (mật khẩu: bắt đầu pam) đã thất bại với lỗi %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd: (mật khẩu) %s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "Mật khẩu đã thay đổi."
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd: mật khẩu đã được cập nhật\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "Mật khẩu không đúng cho %s .\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+"Phương pháp mã hoá (ENCRYPT_METHOD) không hợp lệ: « %s »\n"
+"nên hoàn nguyên về giá trị mặc định: DES.\n"
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "Không thể cd (chuyển đổi thư mục) sang « %s ».\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "Không có thư mục nên đăng nhập với « HOME=/ »"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "Không thể thực hiện %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "Thư mục gốc kh\14ông hợp lệ « %s »\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "Không thể thay đổi thư mục gốc thành « %s »\n"
+
+msgid "Unable to determine your tty name."
+msgstr "Không thể quyết định tên TTY của bạn."
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s: tràn bộ nhớ\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) (cấp phát bộ nhớ) bị lỗi\n"
+
+msgid "No"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "Usage: chage [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -d, --lastday LAST_DAY        set last password change to LAST_DAY\n"
+#| "  -E, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --list                    show account aging information\n"
+#| "  -m, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -M, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"Sử dụng: chage [tùy_chọn...] ĐĂNG_NHẬP\n"
+"\n"
+"Tùy chọn:\n"
+"  -d, --lastday NGÀY    lập lần thay đổi mật khẩu cuối cùng thành ngày này\n"
+"                        (_ngày cuối cùng_)\n"
+"  -E, --expiredate NGÀY lập ngày hết hạn dùng tài khoản thành ngày này\n"
+"                        (_ngày hết hạn_)\n"
+"  -h, --help            hiển thị _trợ giúp_ này rồi thoát\n"
+"  -I, --inactive CHUỖI  Sau khi hết hạn dùng, lập mật khẩu thành chuỗi này\n"
+"                        và trạng thái _không hoạt động_\n"
+"  -l, --list            hiển thị thông tin về tài khoản cũ nào (_danh "
+"sách_)\n"
+"  -m, --mindays SỐ      Lập số _ngày tối thiểu_ trước khi mật khẩu thay đổi\n"
+"  -M, --maxdays SỐ      Lập số _ngày tối đa_ trước khi mật khẩu thay đổi\n"
+"  -W, --warndays SỐ     Lập số _ngày_ trước khi _cảnh báo_ bạn về sự mãn "
+"hạn\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "Nhập giá trị mới, hoạc bấm phím Enter đặt chọn giá trị mặc định"
+
+msgid "Minimum Password Age"
+msgstr "Thời gian hoạt động tối thiểu cho mật khẩu"
+
+msgid "Maximum Password Age"
+msgstr "Thời gian hoạt động tối đa cho mật khẩu"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "Thay đổi mật khẩu cuối cùng (NNNN-TT-Ng)"
+
+msgid "Password Expiration Warning"
+msgstr "Cảnh báo hết hạn dùng mật khẩu"
+
+msgid "Password Inactive"
+msgstr "Mật khẩu không hoạt động"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "Ngày hết hạn dùng tài khoản (NNNN-TT-Ng)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "Thay đổi mặt khẩu cuối cùng\t\t\t\t\t: "
+
+msgid "never"
+msgstr "chưa bao giờ"
+
+msgid "password must be changed"
+msgstr "mật khẩu phải thay đổi"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "Mật khẩu hết hạn dùng:\t\t\t\t\t: "
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "Mật khẩu không hoạt động\t\t\t\t\t: "
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "Tài khoản hết hạn dùng\t\t\t\t\t\t "
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "Số ngày tối thiểu giữa hai lần thay đổi mật khẩu\t\t: %ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "Số ngày tối đa giữa hai lần thay đổi mật khẩu\t\t: %ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "Số ngày cảnh báo trước khi mật khẩu hết hạn\t: %ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s: ngày không hợp lệ « %s »\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s: đối số thuộc số không hợp lệ « %s »\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s: đừng dùng « l » cùng với cờ khác\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s: không đủ quyền.\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s: không thể quyết định tên người dùng của bạn.\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s: lỗi xác thực PAM\n"
+
+#, fuzzy, c-format
+#| msgid "Cannot lock the password file; try again later.\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "Không thể khoá tập tin mật khẩu ; hãy thử lại sau.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s: không thể mở tập tin %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failure forking: %s\n"
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s: lỗi tạo tiến trình con: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: lỗi bỏ quyền truy cập (%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s: không có tập tin mật khẩu bóng\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s: lỗi bỏ quyền truy cập (%s)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s: người dùng « %s » không tồn tại\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "Đang thay đổi thông tin về thời gian hoạt động đối với %s\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s: gặp lỗi khi thay đổi trường\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"Sử dụng: %s [-f họ_tên] [-r số_phòng] [-w điện_thoại_chỗ_làm]\n"
+"\t[-h điện_thoại_ở_nhà] [-o khác] [người_dùng]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr ""
+"Sử dụng: %s [-f họ_tên] [-r số_phòng] [-w điện_thoại_chỗ_làm]\n"
+"\t[-h điện_thoại_ở_nhà]\n"
+
+msgid "Full Name"
+msgstr "Họ tên"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid "Room Number"
+msgstr "Số thứ tự phòng"
+
+msgid "Work Phone"
+msgstr "Điện thoại chỗ làm"
+
+msgid "Home Phone"
+msgstr "Điện thoại ở nhà"
+
+msgid "Other"
+msgstr "Khác"
+
+msgid "Cannot change ID to root.\n"
+msgstr "Không thể thay đổi mã số thành người chủ (root).\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s: tên không hợp lệ: « %s »\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s: số thứ tự phòng không hợp lệ: « %s »\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s: số điện thoại chỗ làm không hợp lệ: « %s »\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s: số điện thoại ở nhà không hợp lệ: « %s »\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s: « %s » chứa ký tự cấm\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s: « %s » chứa ký tự cấm\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s: người dùng « %s » không tồn tại\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s: không thể thay đổi người dùng « %s » trên ứng dụng khách NIS.\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s: « %s » là NIS cái cho ứng dụng khách này.\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "Đang thay đổi thông tin về người dùng đối với %s\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s: trường quá dài\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"Sử dụng: %s [tùy_chọn]\n"
+"\n"
+"Tùy chọn:\n"
+"  -c, --crypt-method            phương pháp mã hoá (một của %s)\n"
+"  -e, --encrypted               mã hoá mỗi mật khẩu đã cung cấp\n"
+"  -h, --help                    hiển thị trợ giúp này rồi thoát\n"
+"  -m, --md5           mã hoá mật khẩu nhập thô, dùng thuật toán MD5\n"
+"%s\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+"  -s, --sha-rounds              số vòng SHA cho thuật toán mã hoá SHA*\n"
+
+#, fuzzy, c-format
+#| msgid "%s: %s flag is ONLY allowed with the %s flag\n"
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s: cho phép cờ %s CHỈ với cờ %s\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr "%s: các cờ « -c », « -e » và « -m » loại từ lẫn nhau\n"
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr "%s: phương pháp mã hoá không được hỗ trợ : %s\n"
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s: dòng %d: dòng quá dài\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s: dòng %d: thiếu mật khẩu mới\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s: nhóm %s không tồn tại\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s: dòng %d: không thể cập nhật mục nhập\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s: gặp lỗi nên bỏ qua các thay đổi\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+"  -s, --sha-rounds              số vòng SHA cho thuật toán mã hoá SHA*\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s: người dùng « %s » không tồn tại\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s: người dùng « %s » không tồn tại\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"Sử dụng: chsh [tùy_chọn...] [ĐĂNG_NHẬP]\n"
+"\n"
+"Tùy chọn:\n"
+"  -h, --help                    hiện _trợ giúp_ này rồi thoát\n"
+"  -s, --shell TRÌNH_BAO        trình bao đăng nhập mới\n"
+"\t\t\t\t\t\tcho tài khoản người dùng\n"
+"\n"
+
+msgid "Login Shell"
+msgstr "Trình bao Đăng nhập"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "Không cho phép bạn thay đổi trình bao đối với %s.\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "Đang thay đổi trình bao đăng nhập đối với %s\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s: mục nhập không hợp lệ: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s là hệ vỏ không hợp lệ.\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr ""
+"Sử dụng: expiry {-f|-c}\n"
+"[expiry: mãn hạn]\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "Đăng nhập\t\tBị lỗi\tTối đa\tMới nhất        Vào\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [%lds còn lại]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [%lds khóa]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unknown user or range: %s\n"
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "Không rõ người dùng hoặc phạm vi: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s: không thể mở tập tin %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "Không thể thay đổi mật khẩu cho %s.\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s: mật khẩu nhóm bóng cần thiết cho tùy chọn « -A »\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s: nhóm %s không tồn tại\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failure forking: %s\n"
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s: lỗi tạo tiến trình con: %s\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "Đang thay đổi mật khẩu cho nhóm %s\n"
+
+msgid "New Password: "
+msgstr "Mật khẩu mới: "
+
+msgid "Re-enter new password: "
+msgstr "Nhập lại mật khẩu mới: "
+
+msgid "They don't match; try again"
+msgstr "Hai mật khẩu không trùng thì háy thử lại."
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s: hãy thử lại sau.\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "Đang thêm người dung %s vào nhóm %s\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "Đang gỡ bỏ người dùng %s khỏi nhóm %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s: người dùng « %s » không tồn tại\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s: không phải là TTY\n"
+
+#, c-format
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+"  -s, --sha-rounds              số vòng SHA cho thuật toán mã hoá SHA*\n"
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+"  -s, --sha-rounds              số vòng SHA cho thuật toán mã hoá SHA*\n"
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s: %s không phải là tên nhóm hợp lệ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid group name `%s'\n"
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s: tên nhóm không hợp lệ « %s »\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s: -K cần thiết cú pháp KHÓA=GIÁ_TRỊ\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s: nhóm %s đã có\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "Thành viên đã có\n"
+
+msgid "Usage: groupdel group\n"
+msgstr ""
+"Sử dụng: groupdel nhóm\n"
+"[groupdel: xóa nhóm]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s: không thể thay đổi lại tên thư mục %s thành %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot change the primary group of user '%s' from %u to %u.\n"
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr ""
+"%s: không thể thay đổi nhóm chính của người dùng « %s » từ %u thành %u.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s: nhóm %s không tồn tại\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s: nhóm « %s » là nhóm kiểu NIS.\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s: %s là NIS cái\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s: người dùng %s là người dùng kiểu NIS\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Out of memory. Cannot update the group database.\n"
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s: tràn bộ nhớ nên không thể cập nhật cơ sở dữ liệu nhóm.\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: invalid group name `%s'\n"
+msgid "%s: invalid group name '%s'\n"
+msgstr "%s: tên nhóm không hợp lệ « %s »\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s: nhóm %s là nhóm kiểu NIS\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s: không rõ người dùng %s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "Sử dụng: %s [-r] [-s] [nhóm [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "Cách sử dụng: %s [-r] [-s] [nhóm]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s: hai tùy chọn « -s » và « -r » không tương thích với nhau\n"
+
+msgid "invalid group file entry"
+msgstr "mục nhập tập tin nhóm không hợp lệ"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "xóa dòng « %s » không? "
+
+msgid "duplicate group entry"
+msgstr "mục nhập nhóm trùng"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "tên nhóm không hợp lệ « %s »\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "tên nhóm không hợp lệ « %s »\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "nhóm %s: không có người dùng %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "xóa thành viên « %s » không? "
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "không có mục nhập tập tin nhóm tương ứng trong %s\n"
+
+#, fuzzy, c-format
+#| msgid "add group '%s' in %s ?"
+msgid "add group '%s' in %s? "
+msgstr "thêm nhóm « %s » trong %s không?"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "mục nhập tập tin nhóm bóng không hợp lệ"
+
+msgid "duplicate shadow group entry"
+msgstr "mục nhập nhóm bóng trùng"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "nhóm bóng %s: không có người dùng quản trị %s\n"
+
+#, c-format
+msgid "delete administrative member '%s'? "
+msgstr "xóa thành viên quản trị « %s » không? "
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "nhóm bóng %s: không có người dùng %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s: các tập tin đã được cập nhật\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s: chưa thay đổi gì\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr ""
+"Sử dụng: groupdel nhóm\n"
+"[groupdel: xóa nhóm]\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr ""
+"Sử dụng: groupdel nhóm\n"
+"[groupdel: xóa nhóm]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s: không thể cập nhật tập tin %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "Cách sử dụng: id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "Cách sử dụng: id\n"
+
+msgid " groups="
+msgstr " nhóm="
+
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"Sử dụng: lastlog [tùy_chọn...]\n"
+"\n"
+"[lastlog: bản ghi cuối cùng]\n"
+"\n"
+"Tùy chọn:\n"
+"  -b, --before SỐ       hiển thị chỉ những bản ghi lastlog\n"
+"                        cũ hơn số ngày này (_trước_)\n"
+"  -h, --help            hiển thị _trợ giúp_ này rồi thoát\n"
+"  -t, --time SỐ         hiển thị chỉ những mục ghi lastlog\n"
+"                        mới hơn số ngày này (_thời gian_)\n"
+"  -u, --user ĐĂNG_NHẬP   hiển thị mục ghi lastlog cho _người dùng_ tên này\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "Tên dùng\t\t Cổng    Từ\t\tGần nhất"
+
+msgid "Username                Port     Latest"
+msgstr "Tên dùng\t\t\t Cổng   Gần nhất"
+
+msgid "**Never logged in**"
+msgstr "**Chưa bao giờ đăng nhập**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog: đối số bất thường: %s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "Cách sử dụng: %s [-p] [tên]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h máy] [-f tên]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r máy\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "Thời gian đăng nhập không hợp lệ"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"Hệ thông bị tắt với lý do bảo dưỡng theo thủ tục."
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[Chức năng ngắt kết nối đã bị vòng: cho phép người chủ đăng nhập.]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"Đăng nhập đã quá hạn sau %d giây.\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+"Không có mục nhập utmp. Vì thế bạn cần phải thực hiện « login » (đăng nhập) "
+"từ « sh » (trình bao) cấp dưới cùng."
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: (đăng nhập) PAM bị lỗi nên hủy bỏ : %s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s đăng nhập: "
+
+msgid "login: "
+msgstr "đăng nhập: "
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "Vượt quá số tối đa các lần thử lại (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: (đăng nhập) PAM đã yêu cầu hủy bỏ\n"
+
+msgid "Login incorrect"
+msgstr "Đăng nhập không đúng"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s đăng nhập: "
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s: lỗi tạo tiến trình con: %s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr "TIOCSCTTY bị lỗi vào %s"
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "Cảnh báo : đăng nhập đã bật lại sau bị khoá ra tạm thời."
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "Đang nhập cuối cùng: %s vào %s"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "Đang nhập cuối cùng: %.19s vào %s"
+
+#, c-format
+msgid " from %.*s"
+msgstr " từ %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"vượt quá thời gian đăng nhập\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "Cách sử dụng: id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr ""
+"Cách sử dụng: newgrp [-] [nhóm]\n"
+"[newgrp: nhóm mới]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr ""
+"Cách sử dụng: sg group [[-c] lệnh]\n"
+"[group: nhóm]\n"
+
+msgid "Invalid password.\n"
+msgstr "Mật khẩu không hợp lệ.\n"
+
+#, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s: lỗi tạo tiến trình con: %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s: người dùng « %s » không tồn tại\n"
+
+msgid "too many groups\n"
+msgstr "quá nhiều nhóm\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: group %s is a shadow group, but does not exist in /etc/group\n"
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr ""
+"%s: nhóm %s là một nhóm bóng, nhưng không tồn tại trong « /etc/group »\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s: tên dùng không hợp lệ « %s »\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s: tên dùng không hợp lệ « %s »\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s: dòng %d: dòng không hợp lệ\n"
+
+#, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr ""
+"%s: không thể cập nhật mục nhập của người dùng %s (không có trong cơ sở dữ "
+"liệu mật khẩu passwd)\n"
+
+#, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s: dòng %d: không thể tạo người dùng\n"
+
+#, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s: dòng %d: không thể tạo nhóm\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user `%s' does not exist\n"
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s: người dùng « %s » không tồn tại\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s: dòng %d: không thể cập nhật mật khẩu\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s: dòng %d: lỗi mkdir (tạo thư mục)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s: dòng %d: lỗi chown (thay đổi quyền sở hữu)\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s: dòng %d: không thể cập nhật mục nhập\n"
+
+#, fuzzy
+#| msgid ""
+#| "Usage: passwd [options] [LOGIN]\n"
+#| "\n"
+#| "Options:\n"
+#| "  -a, --all                     report password status on all accounts\n"
+#| "  -d, --delete                  delete the password for the named "
+#| "account\n"
+#| "  -e, --expire                  force expire the password for the named "
+#| "account\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -k, --keep-tokens             change password only if expired\n"
+#| "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -l, --lock                    lock the named account\n"
+#| "  -n, --mindays MIN_DAYS        set minimum number of days before "
+#| "password\n"
+#| "                                change to MIN_DAYS\n"
+#| "  -q, --quiet                   quiet mode\n"
+#| "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+#| "  -S, --status                  report password status on the named "
+#| "account\n"
+#| "  -u, --unlock                  unlock the named account\n"
+#| "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+#| "  -x, --maxdays MAX_DAYS        set maximim number of days before "
+#| "password\n"
+#| "                                change to MAX_DAYS\n"
+#| "\n"
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"Sử dụng: passwd [tùy_chọn...] [tên_người_dùng]\n"
+"\n"
+"[passwd: mật khẩu]\n"
+"\n"
+"Tùy chọn:\n"
+"  -a, --all             thông báo trạng thái mật khẩu về _mọi_ tài khoản\n"
+"  -d, --delete          _xóa_ mật khẩu cho tài khoản tên này\n"
+"  -e, --expire          buộc _hết hạn dùng_ tài khoản tên này\n"
+"  -h, --help            hiển thị _trợ giúp_ này rồi thoát\n"
+"  -k, --keep-tokens     thay đổi mật khẩu chỉ nếu bị hết hạn thôi\n"
+"                        (_giữ hiệu bài_)\n"
+"  -i, --inactive CHUỖI  lập mật khẩu mới _không hoạt động_ thành chuỗi này\n"
+"  -l, --lock            _khoá_ tài khoản tên này\n"
+"  -n, --mindays SỐ      lập số _ngày tối thiểu_ trước khi thay đổi mật khẩu\n"
+"  -q, --quiet           chế độ _im_ (không hiển thị chi tiết)\n"
+"  -r, --repository KHO  thay đổi mật khẩu của kho này\n"
+"  -S, --status          thông báo _trạng thái_ mật khẩu của tài khoản tên "
+"này\n"
+"  -u, --unlock          _bỏ khoá_ tài khoản tên này\n"
+"  -w, --warndays SỐ     lập số _ngày_ trước khi _cảnh báo_ về sự mãn hạn\n"
+"  -x, --maxdays SỐ      lập số _ngày tối đa_ trước khi thay đổi mật khẩu\n"
+"\n"
+
+msgid "Old password: "
+msgstr "Mật khẩu cũ : "
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Nhập mật khẩu mới (số ký tự tối thiểu %d).\n"
+"Hãy tổ hợp các chữ hoa, chữ thường và chữ số để tạo một mật khẩu mạnh.\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"Nhập mật khẩu mới (số ký tự tối thiểu %d, tối đa %d).\n"
+"Hãy tổ hợp các chữ hoa, chữ thường và chữ số để tạo một mật khẩu mạnh.\n"
+
+msgid "New password: "
+msgstr "Mật khẩu mới: "
+
+msgid "Try again."
+msgstr "Hãy thử lại."
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"Cảnh báo : mật khẩu yếu (nhập lại để vẫn chọn)"
+
+msgid "They don't match; try again.\n"
+msgstr "Hai mật khẩu không trùng: hãy thử lại.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "Không thể thay đổi mật khẩu cho %s.\n"
+
+#, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "Chưa có thể thay đổi mật khẩu cho %s.\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: unlocking the user would result in a passwordless account.\n"
+#| "You should set a password with usermod -p to unlock this user account.\n"
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+"%s: bỏ khoá người dùng thì gây ra một tài khoản không có mật khẩu.\n"
+"Khuyên bạn đặt một mật khẩu, dùng « usermod -p », để bỏ khoá tài khoản người "
+"dùng này.\n"
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s: kho lưu %s không được hỗ trợ\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr ""
+"%s: không cho phép bạn xem hoặc sửa đổi thông tin mật khẩu đối với %s.\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "Đang thay đổi mật khẩu cho %s\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "Mật khẩu cho %s chưa thay đổi.\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "Mật khẩu đã thay đổi."
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "Cảnh báo hết hạn dùng mật khẩu"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr ""
+"Cách sử dụng: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+"[passwd: mật khẩu\n"
+"shadow: bóng]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s: hai tùy chọn « -s » và « -r » không tương thích với nhau\n"
+
+msgid "invalid password file entry"
+msgstr "Mục nhập tập tin mật khẩu không hợp lệ"
+
+msgid "duplicate password entry"
+msgstr "mục nhập mật khẩu trùng"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "tên người dùng không hợp lệ « %s »\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "tên người dùng không hợp lệ « %s »\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "người dùng %s: không có nhóm %u\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "người dùng %s: thư mục %s không tồn tại\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "người dùng %s: chương trình %s không tồn tại\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "không có mục nhập tập tin mật khẩu tương ứng trong %s\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr "thêm người dùng « %s » trong %s không?"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "mục nhập tập tin mật khẩu bóng không hợp lệ"
+
+msgid "duplicate shadow password entry"
+msgstr "mục nhập mật khẩu bóng trùng"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "người dùng %s: lần thay đổi mật khẩu cuối cùng nằm trong tương lai\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s: không thể mở tập tin %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "Cách sử dụng: id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "Cách sử dụng: id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "Truy cập « su » vào tài khoản đó BỊ TỪ CHỐI.\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "Xác thực mật khẩu bị đi vòng.\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "Hãy nhập mật khẩu của MÌNH để xác thực.\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s: %s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"Sử dụng: su [tùy_chọn...] [đăng_nhập]\n"
+"\n"
+"[su: siêu người dùng]\n"
+"\n"
+"Tùy chọn:\n"
+"  -c, --command LỆNH        gởi lệnh này qua cho trình bao đã gọi\n"
+"  -h, --help                hiển thị _trợ giúp_ này rồi thoát\n"
+"  -, -l, --login            lập trình bao là trình bao _đăng nhập_\n"
+"  -m, -p,\n"
+"  --preserve-environment    đừng lập lại các biến _môi trường_, và _giữ_\n"
+"                            trình bao hiện có\n"
+"  -s, --shell TRÌNH_BAO         sử dụng trình bao này thay cho trình mặc "
+"định trong passwd\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s: phải chạy từ thiết bị cuối\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s: pam_start: (pam bắt đầu) lỗi %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "Không rõ mã số : %s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "Bạn không có quyền sử dụng lệnh « su » (siêu người dùng) với %s.\n"
+
+msgid "(Enter your own password)"
+msgstr "(Nhập mật khẩu của mình)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s: %s\n"
+"(Bị bo qua)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s: lỗi xác thực PAM\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "Bạn không có quyền sử dụng lệnh « su » (siêu người dùng) với %s.\n"
+
+msgid "No shell\n"
+msgstr "Không có hệ vỏ\n"
+
+msgid "No password file"
+msgstr "Không có tập tin mật khẩu"
+
+msgid "TIOCSCTTY failed"
+msgstr "TIOCSCTTY bị lỗi"
+
+msgid "No password entry for 'root'"
+msgstr "Không có mục nhập mật khẩu cho « root » (người chủ)"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"Hãy gõ tổ hợp phím Ctrl-D để tiếp tục khởi động bình thường,\n"
+"(hoặc nhập mật khẩu người chủ để bảo dưỡng hệ thống):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "Đang vào Chế độ Bảo dưỡng Hệ thống"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s: không thể tạo tập tin mặc định mới\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s: không thể mở tập tin mặc định mới\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s: dòng %d: lỗi chown (thay đổi quyền sở hữu)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s: thay tên: %s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s: nhóm « %s » là nhóm kiểu NIS.\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s: ghi rõ quá nhiều nhóm (tối đa %d).\n"
+
+#, c-format
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+"  -s, --sha-rounds              số vòng SHA cho thuật toán mã hoá SHA*\n"
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              số vòng SHA cho thuật toán mã hoá SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+"  -s, --sha-rounds              số vòng SHA cho thuật toán mã hoá SHA*\n"
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+"  -s, --sha-rounds              số vòng SHA cho thuật toán mã hoá SHA*\n"
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+"  -s, --sha-rounds              số vòng SHA cho thuật toán mã hoá SHA*\n"
+
+#, fuzzy
+#| msgid ""
+#| "  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+#| "                                crypt algorithms\n"
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+"  -s, --sha-rounds              số vòng SHA cho thuật toán mã hoá SHA*\n"
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s: thư mục cơ ban không hợp lệ « %s »\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s: ghi chú không hợp lệ « %s »\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s: thư mục chính không hợp lê « %s »\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s: cần thiết mật khẩu bóng cho tùy chọn « -e »\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s: cần thiết mật khẩu bóng cho tùy chọn « -f »\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s: trường không hợp lệ « %s »\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s: trình bao không hợp lệ « %s »\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr "%s: hai tùy chọn %s và %s xung đột với nhau\n"
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s: không thể tạo thư mục %s\n"
+
+msgid "Creating mailbox file"
+msgstr "Đang tạo tập tin hộp thư"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+"Không tìm thấy nhóm « mail » (thư tín). Vì thế đang tạo tập tin hộp thư người "
+"dùng với chế độ 0600.\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "Đang đặt quyền truy cập tập tin hộp thư"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s: người dùng %s đã có\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s: nhóm %s đã có.  Muốn thêm họ vào nhóm đó thì dùng tùy chọn « -g ».\n"
+
+#, c-format
+msgid "%s: can't create user\n"
+msgstr "%s: không thể tạo người dùng\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s: UID %u không phải duy nhất\n"
+
+#, c-format
+msgid "%s: can't create group\n"
+msgstr "%s: không thể tạo nhóm\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s: cảnh báo : thư mục chính đã có.\n"
+"Vì vậy không sao chép vào nó tập tin nào từ thư mục « skel ».\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+"Cách sử dụng: userdel [tùy_chọn...] ĐĂNG_NHẬP\n"
+"\n"
+"Tùy chọn:\n"
+"  -f, --force                   _ép buộc_ gỡ bỏ tập tin, thậm chí nếu không\n"
+"                                được sở hữu bởi người dùng\n"
+"  -h, --help                    hiển thị _trợ giúp_ này rồi thoát\n"
+"  -r, --remove                  _gỡ bỏ_ thư mục chính và ống chỉ thư tín\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr "%s: không thể gỡ bỏ nhóm %s (nhóm chính cho người dùng khác).\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s: cảnh báo : không thể gỡ bỏ "
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s: %s không phải được %s sở hữu nên không gỡ bỏ nó\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s: người dùng %s là người dùng kiểu NIS\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s: người dùng %s hiện thời đã đăng nhập\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s: thư mục chính không hợp lê « %s »\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr ""
+"%s: sẽ không gỡ bỏ thư mục %s (vì cũng gỡ bỏ thư mục chính của người dùng %"
+"s)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s: gặp lỗi khi gỡ bỏ thư mục %s\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "Usage: usermod [options] LOGIN\n"
+#| "\n"
+#| "Options:\n"
+#| "  -c, --comment COMMENT         new value of the GECOS field\n"
+#| "  -d, --home HOME_DIR           new home directory for the user account\n"
+#| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#| "EXPIRE_DATE\n"
+#| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#| "                                to INACTIVE\n"
+#| "  -g, --gid GROUP               force use GROUP as new primary group\n"
+#| "  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+#| "  -a, --append                  append the user to the supplemental "
+#| "GROUPS\n"
+#| "                                mentioned by the -G option without "
+#| "removing\n"
+#| "                                him/her from other groups\n"
+#| "  -h, --help                    display this help message and exit\n"
+#| "  -l, --login NEW_LOGIN         new value of the login name\n"
+#| "  -L, --lock                    lock the user account\n"
+#| "  -m, --move-home               move contents of the home directory to "
+#| "the\n"
+#| "                                new location (use only with -d)\n"
+#| "  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+#| "  -p, --password PASSWORD       use encrypted password for the new "
+#| "password\n"
+#| "  -s, --shell SHELL             new login shell for the user account\n"
+#| "  -u, --uid UID                 new UID for the user account\n"
+#| "  -U, --unlock                  unlock the user account\n"
+#| "\n"
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"Sử dụng: usermod [tùy_chọn...] ĐĂNG_NHẬP\n"
+"\n"
+"[usermod: sửa đổi người dùng]\n"
+"\n"
+"Tùy chọn:\n"
+"  -c, --comment CHUỖI       giá trị mới trong trường GECOS (_ghi chú_)\n"
+"  -d, --home THƯ_MỤC_CHÍNH\n"
+"                            thư mục chính mới cho tài khoản người dùng\n"
+"  -e, --expiredate NGÀY     đặt ngày hết hạn dùng tài khoản thành ngày này\n"
+"  -f, --inactive CHUỖI      đặt mật khẩu là _không hoạt động_ sau khi hết "
+"hạn\n"
+"                            dùng thành chuỗi này\n"
+"  -g, --gid NHÓM            buộc gán nhóm này là nhóm chính mới\n"
+"  -G, --groups NHÓM         danh sách mới _các nhóm_ phụ\n"
+"-a, --append                phụ thêm người dùng vào các NHÓM phụ\n"
+"\t\t\t\t\tđược ghi rõ với tùy chọn « -G », mà không\n"
+"\t\t\t\t\tgỡ bỏ họ khỏi nhóm khác\n"
+"  -h, --help                hiển thị _trợ giúp_ này rồi thoát\n"
+"  -l, --login TÊN_ĐĂNG_NHẬP\n"
+"                            tên _đăng nhập_ mới\n"
+"  -L, --lock                l_khoá_ tài khoản người dùng\n"
+"  -m, --move-home           _di chuyển_ nội dụng của _thư mục chính_\n"
+"                            sang địa điểm mới (chỉ dùng với tùy chọn « -d »)\n"
+"  -o, --non-unique          cho phép sử dụng UID trùng (_không duy nhất_)\n"
+"  -p, --password MẬT_KHẨU   sử dụng _mật khẩu_ đã mật mã cho mật\n"
+"                            khẩu mới\n"
+"  -s, --shell TRÌNH_BAO     _trình bao_ đăng nhập mới cho tài khoản\n"
+"                            người dùng\n"
+"  -u, --uid UID             _mã hiệu người dùng_ mới cho tài khoản người "
+"dùng\n"
+"  -U, --unlock              _mở khoá_ tài khoản người dùng\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: unlocking the user would result in a passwordless account.\n"
+#| "You should set a password with usermod -p to unlock this user account.\n"
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+"%s: bỏ khoá người dùng thì gây ra một tài khoản không có mật khẩu.\n"
+"Khuyên bạn đặt một mật khẩu, dùng « usermod -p », để bỏ khoá tài khoản người "
+"dùng này.\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s: người dùng %s đã có\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s: chưa đưa ra cờ\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s: mật khẩu bóng cần thiết cho hai tùy chọn « -e » và « -f »\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr "%s: các cờ « -L », « -p » và « -U » loại từ lẫn nhau\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "Thành viên đã có\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s: thư mục %s đã có\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s: không thể tạo %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s: không thể chown (thay đổi quyền sở hữu) %s\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s: cảnh báo : lỗi gỡ bỏ hoàn toàn thư mục chính cũ %s"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s: không thể thay đổi lại tên thư mục %s thành %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s: cảnh báo : %s không phải được %s sở hữu\n"
+
+msgid "failed to change mailbox owner"
+msgstr "lỗi thay đổi chủ hộp thư"
+
+msgid "failed to rename mailbox"
+msgstr "lỗi thay đổi tên của hộp thư"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "You have modified %s.\n"
+#| "You may need to modify %s for consistency.\n"
+#| "Please use the command `%s' to do so.\n"
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+"Bạn đã sửa đổi %s.\n"
+"Để thống nhất thì bạn cũng có thể cần phải sửa đổi %s.\n"
+"Hãy sử dụng câu lệnh « %s » để làm như thế.\n"
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"Sử dụng: vipw [tùy_chọn...]\n"
+"\n"
+"Tùy chọn:\n"
+"  -g, --group                   sửa đổi cơ sở dữ liệu _nhóm_\n"
+"  -h, --help                    hiển thị _trợ giúp_ này rồi thoát\n"
+"  -p, --passwd                  sửa đổi cơ sở dữ liệu passwd\n"
+"  -q, --quiet                   chế độ _im_ (không hiển thị chi tiết)\n"
+"  -s, --shadow                  sửa đổi cơ sở dữ liệu shadow hay gshadow\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s: lỗi bỏ quyền truy cập (%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s: %s chưa thay đổi\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "Không thể khoá tập tin"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "Không thể khoá tập tin"
+
+msgid "Couldn't make backup"
+msgstr "Không thể sao lưu"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s: không thể phục hồi %s: %s (các thay đổi của bạn nằm trong %s)\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: faillog [options]\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -a, --all                     display faillog records for all users\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -l, --lock-time SEC           after failed login lock accout to SEC "
+#~| "seconds\n"
+#~| "  -m, --maximum MAX             set maximum failed login counters to "
+#~| "MAX\n"
+#~| "  -r, --reset                   reset the counters of login failures\n"
+#~| "  -t, --time DAYS               display faillog records more recent than "
+#~| "DAYS\n"
+#~| "  -u, --user LOGIN              display faillog record or maintains "
+#~| "failure\n"
+#~| "                                counters and limits (if used with -r, -m "
+#~| "or -l\n"
+#~| "                                options) only for user with LOGIN\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Sử dụng: faillog [tùy_chọn...]\n"
+#~ "\n"
+#~ "[faillog: bản ghi việc bị lỗi]\n"
+#~ "\n"
+#~ "Tùy chọn:\n"
+#~ "  -a, --all             hiển thị các mục ghi faillog cho _mọi_ người "
+#~ "dùng\n"
+#~ "  -h, --help            hiển thị _trợ giúp_ này rồi thoát\n"
+#~ "  -l, --lock-time SỐ    sau việc đăng nhập bị lỗi\n"
+#~ "                        thì khoá tài khoản tại số giây này (_thời gian "
+#~ "khoá_)\n"
+#~ "  -m, --maximum SỐ      lập số việc đăng nhập bị lỗi _tối đa_ thành số "
+#~ "này\n"
+#~ "  -r, --reset           _lập lại_ số đếm việc đăng nhập bị lỗi\n"
+#~ "  -t, --time SỐ         hiển thị các mục ghi faillog mới hơn số ngày này\n"
+#~ "                        (_thời gian_)\n"
+#~ "  -u, --user ĐĂNG_NHẬP   hiển thị mục ghi faillog\n"
+#~ "                        hoặc bảo quản số đếm việc bị lỗi và sự hạn chế\n"
+#~ "                        (nếu dùng với tùy chọn -r, -m hay -l) chỉ cho "
+#~ "người\n"
+#~ "                        dùng này\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Sử dụng: groupadd [tùy_chọn] NHÓM\n"
+#~ "\n"
+#~ "Tùy chọn:\n"
+#~ "  -f, --force                  ép buộc thoát với trạng thái thành công\n"
+#~ "\t\t\t\t\tnếu nhóm đã ghi rõ đã có  -g, --gid GID                 dùng "
+#~ "GID này cho nhóm mới\n"
+#~ "  -h, --help                    hiển thị trạng thái này rồi thoát\n"
+#~ "  -K, --key KHOÁ=GIÁ_TRỊ          ghi đè lên các giá trị mặc định\n"
+#~ "\t\t\t\t\t\t\tcủa « /etc/login.defs »\n"
+#~ "  -o, --non-unique        cho phép tạo nhóm có GID trùng (không duy "
+#~ "nhất)\n"
+#~ "  -p, --password MẬT_KHẨU       dùng mật khẩu đã mã hoá cho nhóm mới\n"
+#~ "  -r, --system                  tạo một tài khoản hệ thống\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Sử dụng: groupmod [tùy_chọn...] NHÓM\n"
+#~ "\n"
+#~ "[groupmod: sửa đổi nhóm]\n"
+#~ "\n"
+#~ "Tùy chọn:\n"
+#~ "  -g, --gid GID                 ép buộc NHÓM dùng GID mới\n"
+#~ "  -h, --help                    hiển thị trợ giúp này rồi thoát\n"
+#~ "  -n, --new-name TÊN       ép buộc NHÓM dùng TÊN nhóm mới\n"
+#~ "  -o, --non-unique              cho phép NHÓM dùng GID trùng\n"
+#~ "                                (_không phải duy nhất_)\n"
+#~ " -p, --password MẬT_KHẨU       mật khẩu mới cũng được má hoá\n"
+#~ "\n"
+
+#, fuzzy
+#~| msgid ""
+#~| "Usage: useradd [options] LOGIN\n"
+#~| "\n"
+#~| "Options:\n"
+#~| "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~| "                                home directory\n"
+#~| "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~| "account\n"
+#~| "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~| "  -D, --defaults                print or save modified default useradd\n"
+#~| "                                configuration\n"
+#~| "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~| "EXPIRE_DATE\n"
+#~| "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~| "                                to INACTIVE\n"
+#~| "  -g, --gid GROUP               force use GROUP for the new user "
+#~| "account\n"
+#~| "  -G, --groups GROUPS           list of supplementary groups for the "
+#~| "new\n"
+#~| "                                user account\n"
+#~| "  -h, --help                    display this help message and exit\n"
+#~| "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~| "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~| "  -l,                           do not add the user to the lastlog and\n"
+#~| "                                faillog databases\n"
+#~| "  -m, --create-home             create home directory for the new user\n"
+#~| "                                account\n"
+#~| "  -N, --no-user-group           do not create a group with the same name "
+#~| "as\n"
+#~| "                                the user\n"
+#~| "  -o, --non-unique              allow create user with duplicate\n"
+#~| "                                (non-unique) UID\n"
+#~| "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~| "                                account\n"
+#~| "  -r, --system                  create a system account\n"
+#~| "  -s, --shell SHELL             the login shell for the new user "
+#~| "account\n"
+#~| "  -u, --uid UID                 force use the UID for the new user "
+#~| "account\n"
+#~| "  -U, --user-group              create a group with the same name as the "
+#~| "user\n"
+#~| "\n"
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Sử dụng: useradd [tùy_chon] ĐĂNG_NHẬP\n"
+#~ "\n"
+#~ "[useradd: thêm người dùng]\n"
+#~ "\n"
+#~ "Tùy chọn:\n"
+#~ "  -b, --base-dir THƯ_MỤC    _thư mục cơ bản_ cho thư mục chính\n"
+#~ "                            của tài khoản người dùng mới\n"
+#~ "  -c, --comment CHUỖI       lập trường GECOS cho tài khoản người dùng "
+#~ "mới\n"
+#~ "                            (_chú thích_)\n"
+#~ "  -d, --home-dir THƯ_MỤC    _thư mục chính_ cho tài khoản người dùng mới\n"
+#~ "  -D, --defaults            hiển thị hoặc lưu cấu hình useradd _mặc "
+#~ "định_\n"
+#~ "                            đã sửa đổi\n"
+#~ "  -e, --expiredate NGÀY     lập ngày hết hạn dùng tài khoản\n"
+#~ "  -f, --inactive CHUỖI      lập mật khẩu mới _không hoạt động_ thành "
+#~ "chuỗi này\n"
+#~ "  -g, --gid NHÓM            buộc gán nhóm này cho tài khoản người dùng "
+#~ "mới\n"
+#~ "                            (_mã nhóm_)\n"
+#~ "  -G, --groups NHÓM         danh sách _các nhóm_ phụ cho tài khoản người\n"
+#~ "                            dùng mới\n"
+#~ "  -h, --help                hiển thị _trợ giúp_ này rồi thoát\n"
+#~ "  -k, --skel THƯ_MỤC        ghi rõ thư mục « skel » thay thế\n"
+#~ "  -K, --key KHÓA=GIÁ_TRỊ    đè các mặc định của « /etc/login.defs "
+#~ "» (_khóa_)\n"
+#~ "  -m, --create-home     _tạo thư mục chính_ cho tài khoản người dùng mới\n"
+#~ "  -N, --no-user-group   đừng tạo một nhóm có cùng một tên với người dùng\n"
+#~ "  -o, --non-unique          cho phép tạo người dùng có UID trùng\n"
+#~ "\t\t\t\t\t(_không duy nhất_)\n"
+#~ "  -p, --password MẬT_KHẨU   sử dụng _mật khẩu_ đã mã hoá\n"
+#~ "                            cho tài khoản người dùng mới\n"
+#~ "  -r, --system                  tạo một tài khoản hệ thống\n"
+#~ "  -s, --shell TRÌNH_BAO         _trình bao_ đăng nhập cho tài khoản người "
+#~ "dùng mới\n"
+#~ "  -u, --uid UID             buộc sử dụng UID này cho tài khoản người dùng "
+#~ "mới\n"
+#~ " -U, --user-group              tạo một nhóm có cùng một tên với người "
+#~ "dùng\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Usage: %s [options] [input]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            the crypt method (one of %s)\n"
+#~ "  -r, --system                  create system accounts\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "Sử dụng: %s [tùy_chọn] [dữ_liệu_nhập]\n"
+#~ "\n"
+#~ "  -c, --crypt-method            phương pháp mã hoá (một của %s)\n"
+#~ "  -r, --system                  tạo tài khoản hệ thống\n"
+#~ "%s\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "Mật khẩu được lập để hết hạn dùng."
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s: không thể khoá tập tin mật khẩu\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s: không thể mở tập tin mật khẩu\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s: không thể khóa tập tin mật khẩu bóng\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s: không thể mở tập tin mật khẩu bóng\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s: không thể ghi lại tập tin mật khẩu bóng\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s: không thể ghi lại tập tin mật khẩu\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s: không thể cập nhật tập tin mật khẩu\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s: không thể cập nhật tập tin mật khẩu bóng\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\tHọ tên: %s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\tSố thứ tự phòng: %s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\tĐiện thoại chỗ làm: %s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\tĐiện thoại ở nhà: %s\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "Không thể mở tập tin mật khẩu.\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s: không tìm thấy %s trong « /etc/passwd »\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "Gặp lỗi khi cập nhật mục nhập mật khẩu.\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "Không thể đệ trình các thay đổi về tập tin mật khẩu.\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "Không thể bỏ khoá tập tin mật khẩu.\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s: không thể khóa tập tin nhóm\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s: không thể mở tập tin nhóm\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s: không thể khóa tập tin gshadow\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s: không thể mở tập tin bóng\n"
+
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s: gặp lỗi khi cập nhật tập tin gshadow\n"
+
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s: gặp lỗi khi cập nhật tập tin nhóm\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s: dòng %d: không rõ nhóm %s\n"
+
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s: dòng %d: không thể cập nhật mục nhập nhóm\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s: không thể khóa tập tin bóng\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s: gặp lỗi khi cập nhật tập tin bóng\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s: gặp lỗi khi cập nhật tập tin mật khẩu\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s: dòng %d: không rõ người dùng %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s: dòng %d: không thể câp nhật mục nhập mật khẩu\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s: không rõ người dùng\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "Không biết người dùng: %s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "Cách sử dụng: %s [-r|-R] nhóm\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a người_dùng] nhóm\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d người_dùng] nhóm\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A người_dùng,...] [-M người_dùng,...] nhóm\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M người_dùng,...] nhóm\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s: không thể lấy khóa\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s: không thể lấy khóa bóng\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s: không thể mở tập tin\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s: không thể ghi lại tập tin\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s: không thể ghi lại tập tin bóng\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s: không thể bỏ khóa tập tin\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s: không thể cập nhật mục nhập\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s: không thể cập nhật mục nhập bóng\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "không rõ nhóm: %s\n"
+
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s: không thể đóng tập tin\n"
+
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s: không thể đóng tập tin bóng\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "Ai đó?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s: không rõ thành viên %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s: gặp lỗi khi thêm mục nhập nhóm mới\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s: không thể ghi lại tập tin nhóm\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s: không thể ghi lại tập tin nhóm bóng\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s: không thể khóa tập tin nhóm\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s: không thể mở tập tin nhóm\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s: không thể khóa tập tin nhóm bóng\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s: không thể mở tập tin nhóm bóng\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s: GID %u không phải duy nhất\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s: gặp lỗi khi gỡ bỏ mục nhập nhóm\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s: gặp lỗi khi gỡ bỏ mục nhập nhóm bóng\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s: không thể gỡ bỏ nhóm chính của người dùng.\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "Không tìm thấy thành viên cần gỡ bỏ\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr ""
+#~ "Cách sử dụng: groupmems -a tên_người_dùng | -d tên_người_dùng | -D | -l [-"
+#~ "g tên_nhóm]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "Chỉ người chủ có quyền thêm thành viên vào nhóm khác nhau\n"
+
+#~ msgid "Group access is required\n"
+#~ msgstr "Cần thiết quyền truy cập nhóm\n"
+
+#~ msgid "Not primary owner of current group\n"
+#~ msgstr "Không phải chủ của nhóm hiện thời\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "Lỗi xác thực PAM đối với\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "Không thể khoá tập tin nhóm\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "Không thể mở tập tin nhóm\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "Không thể đóng tập tin nhóm\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s: không tìm thấy %s trong « /etc/group »\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s: %u không phải GID duy nhất\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s: %s không phải tên duy nhất\n"
+
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s: không thể ghi lại tập tin mật khẩu passwd\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s: không thể khoá tập tin mật khẩu\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s: không thể mở tập tin mật khẩu\n"
+
+#~ msgid ""
+#~ "%s: cannot change the primary group of user '%s' from %u to %u, since it "
+#~ "is not in the passwd file.\n"
+#~ msgstr ""
+#~ "%s: không thể thay đổi nhóm chính của người dùng « %s » từ %u thành %u, vì "
+#~ "nó không nằm trong tập tin mật khẩu passwd.\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s: không thể khóa tập tin %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s: không thể cập nhật mục nhập bóng đối với %s.\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s: không thể cập nhật mục nhập đối với nhóm %s.\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s: không thể khóa tập tin nhóm bóng\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s: không thể mở tập tin nhóm bóng\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s: không thể gỡ bỏ nhóm bóng %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s: không thể cập nhật tập tin nhóm bóng\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s: không thể cập nhật tập tin nhóm\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s: không thể xóa tập tin nhóm bóng\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "không rõ UID: %u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "không rõ GID: %lu\n"
+
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s: mã số nhóm (GID) « %s » không phải hợp lệ\n"
+
+#~ msgid ""
+#~ "%s: group %s created, failure during the creation of the corresponding "
+#~ "gshadow group\n"
+#~ msgstr ""
+#~ "%s: nhóm %s đã được tạo, nhưng không thành công khi tạo nhóm gshadow "
+#~ "tương ứng\n"
+
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s: mã số người dùng (UID) « %s » không phải hợp lệ\n"
+
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s: tên người dùng không hợp lệ « %s »\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s: không thể khoá « /etc/passwd ».\n"
+
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s: không thể khoá « /etc/shadow ».\n"
+
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s: không thể khoá « /etc/group ».\n"
+
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s: không thể khoá « /etc/gshadow ».\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s: không thể mở tập tin\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s: gặp lỗi khi cập nhật tập tin\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s: dòng %d: không tìm thấy người dùng %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s: không thể cập nhật mục nhập mật khẩu passwd đối với %s.\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s: không thể khoá tập tin mật khẩu passwd\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s: không thể mở tập tin mật khẩu passwd\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s: không thể gỡ bỏ mục nhập bóng đối với %s\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s: không thể cập nhật tập tin bóng\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s: không thể cập nhật tập tin mật khẩu passwd\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s: không thể cập nhật mục nhập đối với người dùng %s\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s: không thể xóa tập tin mật khẩu bóng\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s: không rõ GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s: không rõ nhóm %s\n"
+
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s: tràn bộ nhớ nên không thể cập nhật cơ sở dữ liệu nhóm bóng.\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s: không thể ghi lại tập tin mật khẩu\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s: không thể ghi lại tập tin mật khẩu bóng\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s: không thể khóa tin mật khẩu bóng\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s: không thể mở tập tin mật khẩu bóng\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s: gặp lỗi khi khóa tập tin nhóm\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s: gặp lỗi khi mở tập tin nhóm\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s: gặp lỗi khi khóa tập tin nhóm bóng\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s: gặp lỗi khi mở tập tin nhóm bóng\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s: gặp lỗi khi thêm mục nhập mật khẩu mới\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s: gặp lỗi khi thêm mục nhập mật khẩu bóng mới\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr ""
+#~ "%s: cảnh báo : « CREATE_HOME » (tạo thư mục chính) không được hỗ trợ\n"
+#~ "nên dùng tùy chọn « -m » thay vào đó.\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s: gặp lỗi khi cập nhật mục nhập nhóm.\n"
+
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s: gặp lỗi khi cập nhật mục nhập nhóm bóng\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s: không thể mở tập tin nhóm\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s: không thể mở tập tin nhóm bóng\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s: gặp lỗi khi xóa mục nhập mật khẩu\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s: gặp lỗi khi xóa mục nhập mật khẩu bóng\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s: người dùng %s không tồn tại\n"
+
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s: gặp lỗi khi thêm mục nhập nhóm bóng mới\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s: UID %lu không phải duy nhất\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s: gặp lỗi khi thay đổi mục nhập mật khẩu\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s: gặp lỗi khi gỡ bỏ mục nhập mật khẩu\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s: gặp lỗi khi gỡ bỏ mục nhập mật khẩu bóng\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
new file mode 100644 (file)
index 0000000..658b13f
Binary files /dev/null and b/po/zh_CN.gmo differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644 (file)
index 0000000..6dfe606
--- /dev/null
@@ -0,0 +1,2609 @@
+# Simplified Chinese translation to shadow
+# This file is distributed under the same license as the shadow package.
+# Copyright:
+# Ming Hua <minghua@ubuntu.com>, 2005,2006,2007.
+# Carlos Z.F. Liu <carlosliu@users.sourceforge.net>, 2004,2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.15\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2007-07-01 06:36-0500\n"
+"Last-Translator: Ming Hua <minghua@ubuntu.com>\n"
+"Language-Team: Debian Chinese [GB] <debian-chinese-gb@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "无法为配置信息分配空间。\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "配置错误 - 未知项目“%s”(请通知管理员)\n"
+
+msgid "Password: "
+msgstr "密码:"
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s 的密码:"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "警告:未知组 %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "警告:用户组过多\n"
+
+msgid "Your password has expired."
+msgstr "您的密码已过期。"
+
+msgid "Your password is inactive."
+msgstr "您的密码已失效。"
+
+msgid "Your login has expired."
+msgstr "您的帐户已过期。"
+
+msgid "  Contact the system administrator."
+msgstr "  请联系系统管理员。"
+
+msgid "  Choose a new password."
+msgstr "  请选择一个新密码。"
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "您的密码将在 %ld 天内过期。\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "您的密码将在明天过期。"
+
+msgid "Your password will expire today."
+msgstr "您的密码今天过期。"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "无法改变 tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s:字段太长\n"
+
+msgid "Environment overflow\n"
+msgstr "环境溢出\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "您不应该改变 $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"自上一次登录以来已有 %d 次登录失败。\n"
+"最后一次是 %s 在 %s 上。\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s:无法获取独有的 UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s:无法获取独有的 GID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s:无法获取独有的 UID\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s:无法获取独有的 UID\n"
+
+msgid "Too many logins.\n"
+msgstr "过多登录数量。\n"
+
+msgid "You have new mail."
+msgstr "您有新信件。"
+
+msgid "No mail."
+msgstr "无信件。"
+
+msgid "You have mail."
+msgstr "您有信件。"
+
+msgid "no change"
+msgstr "没有改变"
+
+msgid "a palindrome"
+msgstr "一个回文词"
+
+msgid "case changes only"
+msgstr "仅有大小写改动"
+
+msgid "too similar"
+msgstr "太相似"
+
+msgid "too simple"
+msgstr "太简单"
+
+msgid "rotated"
+msgstr "已轮转"
+
+msgid "too short"
+msgstr "太短"
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "错误的密码:%s。 "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() 失败,错误 %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd:%s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "密码未更改。"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd:已成功更新密码\n"
+
+#, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "%s 的密码不正确。\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "无法 cd 进入“%s”\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "没有目录,将以 HOME=/ 登录"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "无法执行 %s"
+
+#, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "无效的根目录“%s”\n"
+
+#, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "无法将根目录改变为“%s”\n"
+
+msgid "Unable to determine your tty name."
+msgstr "无法确定您的 tty 终端名。"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s:内存溢出\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) 失败\n"
+
+#, fuzzy
+#| msgid "No\n"
+msgid "No"
+msgstr "否\n"
+
+#, fuzzy
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"用法:chage [选项] 用户名\n"
+"\n"
+"选项:\n"
+"  -d, --lastday 最近日期\t将最近一次密码设置时间设为“最近日期”\n"
+"  -E, --expiredate 过期日期\t将帐户过期时间设为“过期日期”\n"
+"  -h, --help\t\t\t显示此帮助信息并退出\n"
+"  -I, --inactive 失效密码\t将因过期而失效的密码设为“失效密码”\n"
+"  -l, --list\t\t\t显示帐户年龄信息\n"
+"  -m, --mindays 最小天数\t将两次改变密码之间相距的最小天数设为“最小\n"
+"\t\t\t\t天数”\n"
+"  -M, --maxdays 最大天数\t将两次改变密码之间相距的最大天数设为“最大\n"
+"\t\t\t\t天数”\n"
+"  -W, --warndays 警告天数\t将过期警告天数设为“警告天数”\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "请输入新值,或直接敲回车键以使用默认值"
+
+msgid "Minimum Password Age"
+msgstr "最小密码年龄"
+
+msgid "Maximum Password Age"
+msgstr "最大密码年龄"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "最近一次密码修改时间 (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "密码过期警告"
+
+msgid "Password Inactive"
+msgstr "密码失效"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "帐户过期时间 (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "最近一次密码修改时间\t\t\t\t\t:"
+
+msgid "never"
+msgstr "从不"
+
+msgid "password must be changed"
+msgstr "密码未更改。"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "密码过期时间\t\t\t\t\t:"
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "密码失效时间\t\t\t\t\t:"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "帐户过期时间\t\t\t\t\t\t:"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "两次改变密码之间相距的最小天数\t\t:%ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "两次改变密码之间相距的最大天数\t\t:%ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "在密码过期之前警告的天数\t:%ld\n"
+
+#, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s:无效的日期“%s”\n"
+
+#, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s:无效的数字参数“%s”\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s:请不要与其它标志一同使用“l”\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s:没有权限。\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s:无法确定您的用户名。\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s:PAM 验证失败\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s:无法锁定文件,请稍后再试。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s:无法打开文件 %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s:fork 失败:%s"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr "%s:无法降低权限(%s)\n"
+
+#, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s:影子密码文件不存在\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr "%s:无法降低权限(%s)\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s:用户 %s 不存在\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "正在为 %s 修改年龄信息\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s:改变字段时出错\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"用法:%s [-f 全名] [-r 房间号] [-w 工作电话]\n"
+"\t[-h 家庭电话] [-o 其它] [用户]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "用法:%s [-f 全名] [-r 房间号] [-w 工作电话] [-h 家庭电话]\n"
+
+msgid "Full Name"
+msgstr "全名"
+
+#, fuzzy, c-format
+#| msgid "%s: %s\n"
+msgid "\t%s: %s\n"
+msgstr "%s:%s\n"
+
+msgid "Room Number"
+msgstr "房间号码"
+
+msgid "Work Phone"
+msgstr "工作电话"
+
+msgid "Home Phone"
+msgstr "家庭电话"
+
+msgid "Other"
+msgstr "其它"
+
+msgid "Cannot change ID to root.\n"
+msgstr "无法改变 ID 到 root。\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s:无效的名称:“%s”\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s:无效的房间号码:“%s”\n"
+
+#, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s:无效的工作电话:“%s”\n"
+
+#, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s:无效的家庭电话:“%s”\n"
+
+#, fuzzy, c-format
+#| msgid "%s: '%s' contains illegal characters\n"
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s:“%s”包含非法字符\n"
+
+#, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s:“%s”包含非法字符\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s:用户 %s 不存在\n"
+
+#, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s:不能在 NIS 客户端上修改用户“%s”。\n"
+
+#, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s:“%s”是此客户端的 NIS 管理员。\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "正在改变 %s 的用户信息\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s:字段太长\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"用法:chpasswd [选项]\n"
+"\n"
+"选项:\n"
+"  -e, --encrypted\t所提供的密码是加密过的\n"
+"  -h, --help\t\t显示此帮助信息并退出\n"
+"  -m, --md5\t\t如果所提供的密码没有加密过,使用 MD5 而非 DES 进行加密\n"
+"\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s:-a 标志只允许和 -G 标志一起使用\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s:第 %d 行:此行太长\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s:第 %d 行:缺少新密码\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s:%s 组不存在\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s:第 %d 行:无法更新条目\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s:发现错误,忽略改动\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "用法:%s [输入]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s:用户 %s 不存在\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s:用户 %s 不存在\n"
+
+#, fuzzy
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+"用法:chsh [选项] [LOGIN]\n"
+"\n"
+"选项:\n"
+"  -h, --help\t\t\t\t显示此帮助信息并退出\n"
+"  -s, --shell SHELL\t\t\t该用户帐号的新登录 shell\n"
+
+msgid "Login Shell"
+msgstr "登录 Shell"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "您不能为 %s 更改 shell。\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "正在更改 %s 的 shell\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s:无效的条目:%s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s 是无效的 shell。\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "用法:expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "登录        失败次数  最多   最近                     于\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [还剩 %lds]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [锁定 %lds]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "未知用户:%s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s:无法打开文件 %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "无法更改 %s 的密码。\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s:-A 需要影子组密码\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s:%s 组不存在\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s:fork 失败:%s"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "正在修改 %s 组的密码\n"
+
+msgid "New Password: "
+msgstr "新密码:"
+
+msgid "Re-enter new password: "
+msgstr "请重新输入新密码:"
+
+msgid "They don't match; try again"
+msgstr "他们并不匹配;请重试"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s:请稍后重试\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "正在将用户“%s”加入到“%s”组中\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "正在将用户“%s”从“%s”组中删除\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s:用户 %s 不存在\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s:不是 tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "用法:%s [输入]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s:%s 不是有效的组名\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid group %s\n"
+msgid "%s: invalid group ID '%s'\n"
+msgstr "%s:无效组名 %s\n"
+
+#, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s:-K 需要 KEY=VALUE\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s:%s 组已存在\n"
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: GID '%lu' already exists\n"
+msgstr "成员已经存在\n"
+
+msgid "Usage: groupdel group\n"
+msgstr "用法:groupdel 组\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s:无法将目录 %s 改名为 %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s:不能在 NIS 客户端上修改用户“%s”。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s:%s 组不存在\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group '%s' is a NIS group.\n"
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s:“%s”组是一个 NIS 组。\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s:%s 是 NIS 管理员\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s:用户 %s 是 NIS 用户\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s:update_group 内存溢出\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "无效的组名“%s”\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s:%s 组是一个 NIS 组\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s:未知用户:%s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "用法:%s [-r] [-s] [组 [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "用法:%s [-r] [-s] [组]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s:-s 和 -r 是互不兼容的\n"
+
+msgid "invalid group file entry"
+msgstr "无效的组文件条目"
+
+#, c-format
+msgid "delete line '%s'? "
+msgstr "删除“%s”一行?"
+
+msgid "duplicate group entry"
+msgstr "复制组条目"
+
+#, c-format
+msgid "invalid group name '%s'\n"
+msgstr "无效的组名“%s”\n"
+
+#, fuzzy, c-format
+#| msgid "invalid group name '%s'\n"
+msgid "invalid group ID '%lu'\n"
+msgstr "无效的组名“%s”\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "%s 组:无用户 %s\n"
+
+#, c-format
+msgid "delete member '%s'? "
+msgstr "删除成员“%s”吗?"
+
+#, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "在 %s 中没有找到匹配的组文件条目\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "%s 影子组:无用户 %s\n"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "无效的影子组文件条目"
+
+msgid "duplicate shadow group entry"
+msgstr "复制影子组条目"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "%s 影子组:无管理员用户 %s\n"
+
+#, fuzzy, c-format
+msgid "delete administrative member '%s'? "
+msgstr "删除管理员用户“%s”吗?"
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "%s 影子组:无用户 %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s:文件已被更新\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s:无改变\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "用法:groupdel 组\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "用法:groupdel 组\n"
+
+#, fuzzy, c-format
+#| msgid "%s: Cannot execute %s"
+msgid "%s: cannot delete %s\n"
+msgstr "%s:无法执行 %s"
+
+msgid "Usage: id [-a]\n"
+msgstr "用法:id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "用法:id\n"
+
+msgid " groups="
+msgstr " 组="
+
+#, fuzzy
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"用法:lastlog [选项]\n"
+"\n"
+"选项:\n"
+"  -b, --before DAYS\t仅打印早于 DAYS 的 lastlog 记录\n"
+"  -h, --help\t\t显示此帮助信息并退出\n"
+"  -t, --time DAYS\t仅打印晚于 DAYS 的 lastlog 记录\n"
+"  -u, --user LOGIN\t打印 LOGIN 用户的 lastlog 记录\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "用户名           端口     来自             最后登陆时间"
+
+msgid "Username                Port     Latest"
+msgstr "用户名                  端口     最后登陆时间"
+
+msgid "**Never logged in**"
+msgstr "**从未登录过**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr "lastlog:意外的参数:%s\n"
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "用法:%s [-p] [名称]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h 主机] [-f 名称]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r 主机\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "无效的登录时间"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"系统关闭,例行维护"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[忽略断线要求 -- 允许 root 登录。]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"登录超时 %d 秒\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr "没有 utmp 条目。您必须在最底层的“sh”里执行“login”"
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr "login: PAM 错误,正在退出:%s\n"
+
+#, c-format
+msgid "%s login: "
+msgstr "%s 用户名:"
+
+msgid "login: "
+msgstr "用户名:"
+
+#, fuzzy, c-format
+#| msgid "Maximum number of tries exceeded (%d)\n"
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "已经超过最大尝试次数 (%d)\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr "login: PAM 中止请求\n"
+
+msgid "Login incorrect"
+msgstr "登录错误"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+"%s 用户名:"
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr "%s:fork 失败:%s"
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "警告:在短暂的锁定后将恢复登录。"
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "上次登录:%s 在 %s 上"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "上次登录:%.19s 在 %s 上"
+
+#, c-format
+msgid " from %.*s"
+msgstr " 来自 %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+"超过登录时间\n"
+"\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "用法:id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "用法:newgrp [-] [组]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "用法:sg 组 [[-c] 命令]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "旧密码:"
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s:fork 失败:%s"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s:用户 %s 不存在\n"
+
+msgid "too many groups\n"
+msgstr "用户组过多\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s:%s 组不存在\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s:无效的用户名“%s”\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s:无效的用户名“%s”\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s:第 %d 行:无效行\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s:不能更新用户 %s 的条目\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s:第 %d 行:无法创建 GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s:第 %d 行:无法创建 GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s:用户 %s 不存在\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s:第 %d 行:无法更新密码\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s:第 %d 行:创建目录失败\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s:第 %d 行:改变所有者或组别失败\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s:第 %d 行:无法更新条目\n"
+
+#, fuzzy
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"用法:passwd [选项] [用户名]\n"
+"\n"
+"用法:\n"
+"  -a, --all\t\t\t报告所有帐户密码的状态\n"
+"  -d, --delete\t\t\t删除指定帐户的密码\n"
+"  -e, --expire\t\t\t强制使指定帐户的密码过期\n"
+"  -h, --help\t\t\t显示此帮助信息并退出\n"
+"  -k, --keep-tokens\t\t仅在过期后修改密码\n"
+"  -i, --inactive INACTIVE\t过期 INACTIVE 天数后设置密码为失效\n"
+"  -l, --lock\t\t\t锁定指定的帐户\n"
+"  -n, --mindays MIN_DAYS\t设置到下次修改密码所须等待的最短天数\n"
+"\t\t\t\t为 MIN_DAYS\n"
+"  -q, --quiet\t\t\t安静模式\n"
+"  -r, --repository REPOSITORY\t在 REPOSITORY 库中改变密码\n"
+"  -S, --status\t\t\t报告指定帐户密码的状态\n"
+"  -u, --unlock\t\t\t解锁被指定帐户\n"
+"  -w, --warndays WARN_DAYS\t设置过期警告天数为 WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS\t设置到下次修改密码所须等待的最多天数\n"
+"\t\t\t\t为 MAX_DAYS\n"
+"\n"
+
+msgid "Old password: "
+msgstr "旧密码:"
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"请输入新密码(最少 %d 最多 %d 个字符)\n"
+"请混合使用大小写字母和数字。\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"请输入新密码(最少 %d 最多 %d 个字符)\n"
+"请混合使用大小写字母和数字。\n"
+
+msgid "New password: "
+msgstr "新密码:"
+
+msgid "Try again."
+msgstr "再试试。"
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"警告:脆弱的密码(重新输入以强制使用它)。"
+
+msgid "They don't match; try again.\n"
+msgstr "他们并不匹配;请重试。\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "无法更改 %s 的密码。\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "无法更改 %s 的密码。\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s:不支持 %s 存储。\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s:您不能查看或更改 %s 的密码信息。\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "正在为 %s 修改密码\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s 的密码未被改变。\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "密码未更改。"
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "密码过期警告"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "用法:%s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s:-s 和 -r 是互不兼容的\n"
+
+msgid "invalid password file entry"
+msgstr "无效的密码文件项"
+
+msgid "duplicate password entry"
+msgstr "重复的密码项"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "无效的用户名“%s”\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "无效的用户名“%s”\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "用户 %s:无 %u 组\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "用户 %s:目录 %s 不存在\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "用户 %s:程序 %s 不存在\n"
+
+#, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "在 %s 中没有匹配的密码文件项\n"
+
+#, c-format
+msgid "add user '%s' in %s? "
+msgstr ""
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "无效的影子密码文件项"
+
+msgid "duplicate shadow password entry"
+msgstr "重复的影子密码文项"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "用户 %s:最近一次密码改动\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s:无法打开文件 %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "用法:id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "用法:id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "su 到该帐户被拒。\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "忽略密码认证\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "请输入您自己的密码作为验证。\n"
+
+#, c-format
+msgid "%s: %s\n"
+msgstr "%s:%s\n"
+
+#, fuzzy
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+"用法:su [选项] [用户名]\n"
+"\n"
+"选项:\n"
+"  -c, --command COMMAND\t\t将 COMMAND 传递至启动的 shell\n"
+"  -h, --help\t\t\t显示此帮助信息并退出\n"
+"  -, -l, --login\t\t将 shell 设为登录 shell\n"
+"  -m, -p,\n"
+"  --preserve-environment\t不重置环境变量并保持同一 shell\n"
+"  -s, --shell SHELL\t\t使用 SHELL 而非 passwd 中的默认值\n"
+"\n"
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s:必须从终端中执行\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s:pam_start:错误 %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "未知 id:%s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "您没有被授权 su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(请输入您自己的密码)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s:%s\n"
+"(忽略)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s:PAM 验证失败\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "您没有被授权 su %s\n"
+
+msgid "No shell\n"
+msgstr "没有 shell\n"
+
+msgid "No password file"
+msgstr "没有密码文件"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "没有“root”的密码项"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"敲击 control-d 即可继续使用普通帐户环境,\n"
+"(或者输入 root 密码以进行系统维护):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "正在进入系统维护模式"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s:无法创建新的默认文件\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s:无法打开新的默认文件\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s:第 %d 行:改变所有者或组别失败\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s:改名:%s"
+
+#, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s:“%s”组是一个 NIS 组。\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s:指定了过多组(最多 %d)。\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "用法:%s [输入]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s:无效的主目录“%s”\n"
+
+#, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s:无效的注释“%s”\n"
+
+#, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s:无效的家目录“%s”\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s:-e 参数需要有影子密码\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s:-f 参数需要有影子密码\n"
+
+#, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s:无效的字段“%s”\n"
+
+#, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s:无效的 shell“%s”\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s:无法创建目录 %s\n"
+
+msgid "Creating mailbox file"
+msgstr "正在创建信箱文件"
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr "没有找到“mail”组。以 0600 权限模式创建用户的信箱文件。\n"
+
+msgid "Setting mailbox file permissions"
+msgstr "正在设置信箱文件访问权限"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s:用户 %s 已存在\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr "%s:%s 组已经存在 - 如果您想将此用户加入到该组,请使用 -g 参数。\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s:无法创建 %s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: UID %u is not unique\n"
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s:UID %u 并不唯一\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s:无法创建 %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+"%s:警告:此主目录已经存在。\n"
+"不从 skel 目录里向其中复制任何文件。\n"
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid ""
+#| "%s: Cannot remove group %s which is a primary group for another user.\n"
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr "%s:不能删除 %s 组,因为它是另外一个用户的主组。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s:警告:无法删除"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s:%s 并不属于 %s,所以不会删除\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s:用户 %s 是 NIS 用户\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s:用户 %s 目前已登录\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid home directory '%s'\n"
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s:无效的家目录“%s”\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s:不能删除目录 %s (因为这将删除用户 %s 的主目录)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s:删除目录 %s 时出错\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+"用法:usermod [选项] 用户名\n"
+"\n"
+"选项:\n"
+"  -a, --append GROUP\t\t将用户追加至增补的组 GROUP 中\n"
+"  -c, --comment 注释\t\t重新设置“注释”栏\n"
+"  -d, --home HOME_DIR\t\t用户的新登录目录(家目录)\n"
+"  -e, --expiredate EXPIRE_DATE\t设定帐户过期的日期为 EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE\t过期 INACTIVE 天数后,设定密码为失效状态\n"
+"  -g, --gid GROUP\t\t强制使用 GROUP 为初始登录组\n"
+"  -G, --groups GROUPS\t\t增补组 GROUPS 列表\n"
+"  -h, --help\t\t\t显示此帮助信息并退出\n"
+"  -l, --login LOGIN\t\t新的登录名称\n"
+"  -L, --lock\t\t\t锁定用户帐号\n"
+"  -m, --move-home\t\t将家目录内容移至新位置 (仅于 -d 一起使用)\n"
+"  -o, --non-unique\t\t允许使用重复的(非唯一的) UID\n"
+"  -p, --password PASSWORD\t将加密过的密码 (PASSWORD) 设为新密码\n"
+"  -s, --shell SHELL\t\t用户帐号的新登录 shell\n"
+"  -u, --uid UID\t\t\t用户帐号的新 UID\n"
+"  -U, --unlock\t\t\t解锁用户帐号\n"
+"\n"
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s:用户 %s 已存在\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s:没有指定标志\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s:-e 和 -f 参数需要影子密码\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Member already exists\n"
+msgid "%s: UID '%lu' already exists\n"
+msgstr "成员已经存在\n"
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s:目录 %s 不存在\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s:无法创建 %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s:无法改变 %s 的所有者和组别\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr "%s:警告:无法将旧的主目录 %s 完全删除"
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s:无法将目录 %s 改名为 %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s:警告:%s 不属于 %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "改变信箱所有者失败"
+
+msgid "failed to rename mailbox"
+msgstr "无法为信箱改名"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+#, fuzzy
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+"用法:vipw [选项]\n"
+"\n"
+"选项:\n"
+"  -g, --group\t\t\t编辑组数据库\n"
+"  -h, --help\t\t\t显示此帮助信息并退出\n"
+"  -p, --passwd\t\t\t编辑 passwd 数据库\n"
+"  -q, --quiet\t\t\t安静模式\n"
+"  -s, --shadow\t\t\t编辑 shadow 或 gshadow 数据库\n"
+"\n"
+
+#, fuzzy, c-format
+#| msgid "%s: failed to drop privileges (%s)\n"
+msgid "%s: failed to remove %s\n"
+msgstr "%s:无法降低权限(%s)\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s:%s 没有更改\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "无法锁定文件"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "无法锁定文件"
+
+msgid "Couldn't make backup"
+msgstr "无法备份"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s:无法恢复 %s:%s (您的修改在 %s 中)\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:faillog [选项]\n"
+#~ "\n"
+#~ "选项:\n"
+#~ "  -a, --all\t\t\t显示所有用户的登录失败记录\n"
+#~ "  -h, --help\t\t\t显示本帮助信息并退出\n"
+#~ "  -l, --lock-time 秒数\t\t在登录失败后锁定帐户“秒数”秒\n"
+#~ "  -m, --maximum 最大值\t\t将最大登录失败次数设为“最大值”\n"
+#~ "  -r, --reset\t\t\t将登录失败计数器归零\n"
+#~ "  -t, --time 天数\t\t显示最近“天数”天以来的登录失败记录\n"
+#~ "  -u, --user 登录\t\t仅显示用户“登录”的登录失败记录,或设置用户“登\n"
+#~ "\t\t\t\t录”的登录失败计数器及限制(如果和 -r、-m 或 -l 选\n"
+#~ "\t\t\t\t项合用)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupadd [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -f, --force                   force exit with success status if the\n"
+#~ "                                specified group already exists\n"
+#~ "  -g, --gid GID                 use GID for the new group\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -o, --non-unique              allow create group with duplicate\n"
+#~ "                                (non-unique) GID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new group\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:groupadd [选项] 组\n"
+#~ "\n"
+#~ "选项:\n"
+#~ "  -f, --force\t\t如果指组已经存在,则强制以正常状态退出\n"
+#~ "  -g, --gid GID\t\t新组使用 GID\n"
+#~ "  -h, --help\t\t\t显示此帮助信息并退出\n"
+#~ "  -K, --key KEY=VALUE\t\t覆盖 /etc/login.defs 默认值\n"
+#~ "  -o, --non-unique\t\t允许使用重复的(非唯一的) GID 创建组\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: groupmod [options] GROUP\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -g, --gid GID                 force use new GID by GROUP\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -n, --new-name NEW_GROUP      force use NEW_GROUP name by GROUP\n"
+#~ "  -o, --non-unique              allow using duplicate (non-unique) GID by "
+#~ "GROUP\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new "
+#~ "password\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:groupadd [选项] 组\n"
+#~ "\n"
+#~ "选项:\n"
+#~ "  -f, --force\t\t如果指组已经存在,则强制以正常状态退出\n"
+#~ "  -g, --gid GID\t\t新组使用 GID\n"
+#~ "  -h, --help\t\t\t显示此帮助信息并退出\n"
+#~ "  -K, --key KEY=VALUE\t\t覆盖 /etc/login.defs 默认值\n"
+#~ "  -o, --non-unique\t\t允许使用重复的(非唯一的) GID 创建组\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: useradd [options] LOGIN\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR       base directory for the new user account\n"
+#~ "                                home directory\n"
+#~ "  -c, --comment COMMENT         set the GECOS field for the new user "
+#~ "account\n"
+#~ "  -d, --home-dir HOME_DIR       home directory for the new user account\n"
+#~ "  -D, --defaults                print or save modified default useradd\n"
+#~ "                                configuration\n"
+#~ "  -e, --expiredate EXPIRE_DATE  set account expiration date to "
+#~ "EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+#~ "                                to INACTIVE\n"
+#~ "  -g, --gid GROUP               force use GROUP for the new user account\n"
+#~ "  -G, --groups GROUPS           list of supplementary groups for the new\n"
+#~ "                                user account\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -k, --skel SKEL_DIR           specify an alternative skel directory\n"
+#~ "  -K, --key KEY=VALUE           overrides /etc/login.defs defaults\n"
+#~ "  -l, --no-log-init             do not add the user to the lastlog and\n"
+#~ "                                faillog databases\n"
+#~ "  -m, --create-home             create home directory for the new user\n"
+#~ "                                account\n"
+#~ "  -M, --no-create-home          do not create user's home directory\n"
+#~ "                                (overrides /etc/login.defs)\n"
+#~ "  -N, --no-user-group           do not create a group with the same name "
+#~ "as\n"
+#~ "                                the user\n"
+#~ "  -o, --non-unique              allow create user with duplicate\n"
+#~ "                                (non-unique) UID\n"
+#~ "  -p, --password PASSWORD       use encrypted password for the new user\n"
+#~ "                                account\n"
+#~ "  -r, --system                  create a system account\n"
+#~ "  -s, --shell SHELL             the login shell for the new user account\n"
+#~ "  -u, --uid UID                 force use the UID for the new user "
+#~ "account\n"
+#~ "  -U, --user-group              create a group with the same name as the "
+#~ "user\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "用法:useradd [选项] 用户名\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -b, --base-dir BASE_DIR\t新用户帐号家目录的主目录(base directory)\n"
+#~ "  -c, --comment 注释\t\t为新用户帐号设置“注释”栏\n"
+#~ "  -d, --home-dir HOME_DIR\t新用户帐号的家目录\n"
+#~ "  -D, --defaults\t\t打印或保存修改过的 useradd 默认设置\n"
+#~ "  -e, --expiredate EXPIRE_DATE\t设定帐户过期的日期为 EXPIRE_DATE\n"
+#~ "  -f, --inactive INACTIVE\t过期 INACTIVE 天数后,设定密码为失效状态\n"
+#~ "  -g, --gid GROUP\t\t强制将新用户帐号的组设置为 GROUP\n"
+#~ "  -G, --groups GROUPS\t\t新用户帐号的补充组列表\n"
+#~ "  -h, --help\t\t\t显示此帮助信息并退出\n"
+#~ "  -k, --skel SKEL_DIR\t\t指定另一替代的 skel 目录\n"
+#~ "  -K, --key KEY=VALUE\t\t覆盖 /etc/login.defs 默认值\n"
+#~ "  -m, --create-home\t\t为新用户帐号创建家目录\n"
+#~ "  -o, --non-unique\t\t允许以重复的(非唯一的) UID 创建用户\n"
+#~ "  -p, --password PASSWORD\t为新用户帐号设定加密过的密码 (PASSWORD)\n"
+#~ "  -s, --shell SHELL\t\t新用户帐号的登录 shell\n"
+#~ "  -u, --uid UID\t\t\t强制将新用户帐号的 id 设为 UID\n"
+#~ "\n"
+
+#~ msgid "Password set to expire."
+#~ msgstr "已设定密码过期时间。"
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s:无法锁定密码文件\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s:无法打开密码文件\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s:无法锁定影子密码文件\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s:无法打开影子密码文件\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s:无法重写影子密码文件\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s:无法重写密码文件\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s:无法更新密码文件\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s:无法更新影子密码文件\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\t全名:%s\n"
+
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "\t房间号码:%s\n"
+
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "\t工作电话:%s\n"
+
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "\t家庭电话:%s\n"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "无法锁定密码文件;稍后再试。\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "无法打开密码文件。\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s:未在 /etc/passwd 中找到 %s\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "更改密码条目时出错。\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "无法提交密码文件改动。\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "无法解锁密码文件。\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s:无法锁定组文件\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s:无法打开组文件\n"
+
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s:无法锁定 gshadow 文件\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s:无法打开影子文件\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s:更新影子文件时出错。\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s:更新组条目时出错\n"
+
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s:第 %d 行:未知组 %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s:第 %d 行:无法更新条目\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s:无法锁定影子文件\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s:更新影子文件时出错。\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s:更新密码文件时出错。\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s:第 %d 行:未知用户 %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s:第 %d 行:无法更新密码条目\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s:未知用户\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "未知用户:%s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "用法:%s [-r|-R] 组\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a 用户] 组\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d 用户] 组\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A 用户,...] [-M 用户,...] 组\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M 用户,...] 组\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s:无法获得锁\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s:无法获得影子锁\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s:无法打开文件\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s:无法重写文件\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s:无法重写影子文件\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s 无法解锁文件。\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s:无法更新条目\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s:无法更新影子条目\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "未知组:%s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s:无法打开文件\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s:无法打开影子文件\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "你是谁?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s:未知成员 %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s:增加新组条目时出错\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s:无法重写组文件\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s:无法重写影子组文件\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s:无法锁定组文件\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s:无法打开组文件\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s:无法锁定影子组文件\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s:无法打开影子组文件\n"
+
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s:GID %u 并不唯一\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s:删除组条目时出错\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s:删除影子组条目时出错\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s:不能删除用户的主组。\n"
+
+#~ msgid "Member to remove could not be found\n"
+#~ msgstr "没有找到要删除的成员\n"
+
+#~ msgid ""
+#~ "Usage: groupmems -a username | -d username | -D | -l [-g groupname]\n"
+#~ msgstr "用法:groupmems -a 用户名 | -d 用户名 | -D | -l [-g 组名]\n"
+
+#~ msgid "Only root can add members to different groups\n"
+#~ msgstr "只有 root 能向不同的组里添加成员\n"
+
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "PAM 验证失败于\n"
+
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "无法锁定组文件\n"
+
+#~ msgid "Unable to open group file\n"
+#~ msgstr "无法打开组文件\n"
+
+#~ msgid "Cannot close group file\n"
+#~ msgstr "无法关闭组文件\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s:未在 /etc/group 中找到 %s\n"
+
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s:%u 不是一个独有的 GID\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s:%s 不是一个独有的名称\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s:无法重写密码文件\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s:无法锁定密码文件\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s:无法打开密码文件\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s:无法锁定文件 %s\n"
+
+#~ msgid "%s: cannot update file %s\n"
+#~ msgstr "%s:无法更新文件 %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s:无法为 %s 更新影子条目\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s:无法更新 %s 组的条目\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s:无法锁定影子组文件\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s:无法打开影子组文件\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s:无法删除影子组 %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s:无法更新影子组文件\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s 无法更新组文件\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s:无法删除影子组文件\n"
+
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "未知的 UID:%u\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "未知的 GID:%lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s:%s 组不存在\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s:用户 %s 不存在\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s:无效的用户名“%s”\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s:无法锁定 /etc/passwd。\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s:无法锁定 /etc/passwd。\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s:无法锁定 /etc/passwd。\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s:无法锁定 /etc/passwd。\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s:无法打开文件\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s:更新文件出错\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s:第 %d 行:无法找到用户 %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s:无法为 %s 更新密码条目\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s:无法锁定密码文件\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s:无法打开密码文件\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s:无法为 %s 删除影子条目\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s:无法更新影子文件\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s:无法更新密码文件\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s:不能更新用户 %s 的条目\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s:无法删除影子密码文件\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s:未知的 GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s:未知的组 %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s:update_gshadow 内存溢出\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s:无法重写密码文件\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s:无法重写影子密码文件\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s:无法锁定影子密码文件\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s:无法打开影子密码文件\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s:锁定组文件时出错\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s:打开组文件时出错\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s:锁定影子组文件时出错\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s:打开影子组文件时出错\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s:加入新密码项时出错\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s:加入新影子密码项时出错\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s:警告:CREATE_HOME 未被支持,请使用 -m 参数。\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s:更新组条目时出错\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s:更新组条目时出错\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s:无法打开组文件\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s:无法打开影子组文件\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s:删除密码项时出错\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s:删除影子密码项时出错\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s:用户 %s 不存在\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s:增加新组条目时出错\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s:uid %lu 不唯一\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s:改变密码项时出错\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s:删除密码项时出错\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s:删除影子密码项时出错\n"
+
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s:无法获取独有的 GID\n"
+
+#, fuzzy
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " 在“%.100s”上,来自“%.200s”"
+
+#, fuzzy
+#~ msgid " on '%.100s'"
+#~ msgstr "在“%.100s”上"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s:第 %d 行:无法创建 UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s:名称 %s 并不唯一\n"
+
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:chpasswd [选项]\n"
+#~ "\n"
+#~ "选项:\n"
+#~ "  -e, --encrypted\t所提供的密码是加密过的\n"
+#~ "  -h, --help\t\t显示此帮助信息并退出\n"
+#~ "  -m, --md5\t\t如果所提供的密码尚未被加密,使用 MD5 而非 DES 进行加密\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "没有密码文件\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "抱歉。\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "抱歉,无法更改 %s 的密码。\n"
+
+#~ msgid "Sorry."
+#~ msgstr "抱歉"
+
+#~ msgid "Usage: %s [-s shell] [name]\n"
+#~ msgstr "用法:%s [-s shell] [名称]\n"
+
+#~ msgid "Usage: groupmod [-g gid [-o]] [-n name] group\n"
+#~ msgstr "用法:groupmod [-g gid [-o]] [-n 名称] 组\n"
+
+#~ msgid ""
+#~ "No group named \"mail\" exists, creating mail spool with mode 0600.\n"
+#~ msgstr "不存在叫做“mail”的组,将以 0600 的文件权限创建邮件 spool。\n"
+
+#~ msgid "Can't create mail spool for user %s.\n"
+#~ msgstr "不能为用户 %s 创建邮件 spool。\n"
+
+#~ msgid "Usage: %s [-r] name\n"
+#~ msgstr "用法:%s [-r] 名称\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Login incorrect\n"
+#~ msgstr ""
+#~ "\n"
+#~ "登录错误\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage:\n"
+#~ "`vipw' edits /etc/passwd        `vipw -s' edits /etc/shadow\n"
+#~ "`vigr' edits /etc/group         `vigr -s' edits /etc/gshadow\n"
+#~ "`{vipw|vigr} -q' quiet mode\n"
+#~ msgstr ""
+#~ "用法:\n"
+#~ "“vipw” 编辑 /etc/passwd      “vipw -s” 编辑 /etc/shadow\n"
+#~ "“vigr” 编辑 /etc/group       “vigr -s” 编辑 /etc/gshadow\n"
+
+#~ msgid "%s: PAM chauthtok failed\n"
+#~ msgstr "%s:PAM chauthtok 失败\n"
+
+#, fuzzy
+#~ msgid "Usage: %s\t[-u uid [-o]] [-g group] [[-G group,...] [-a]] \n"
+#~ msgstr "用法:%s\t[-u uid [-o]] [-g 组] [-G 组,...] \n"
+
+#~ msgid "\t\t[-d home [-m]] [-s shell] [-c comment] [-l new_name]\n"
+#~ msgstr "\t\t[-d 主目录 [-m]] [-s shell] [-c 注释] [-l 新名称]\n"
+
+#~ msgid "[-f inactive] [-e expire] "
+#~ msgstr "[-f 失效日] [-e 过期日] "
+
+#~ msgid "[-p passwd] [-L|-U] name\n"
+#~ msgstr "[-p 密码] [-L|-U] 名称\n"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
new file mode 100644 (file)
index 0000000..291c69c
Binary files /dev/null and b/po/zh_TW.gmo differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644 (file)
index 0000000..aa7df91
--- /dev/null
@@ -0,0 +1,2381 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Asho S.Y. Yeg <asho@debian.org.tw>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: shadow 4.0.9\n"
+"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
+"POT-Creation-Date: 2009-07-24 03:02+0200\n"
+"PO-Revision-Date: 2005-06-02 22:20+0800\n"
+"Last-Translator: Asho Yeh <asho@debian.org.tw>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Poedit-Language: Chinese\n"
+"X-Poedit-Country: TAIWAN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#, c-format
+msgid ""
+"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
+msgstr ""
+
+#, c-format
+msgid "crypt method not supported by libcrypt? (%s)\n"
+msgstr ""
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%s'"
+msgstr ""
+
+msgid "Could not allocate space for config info.\n"
+msgstr "無法為設定訊息配置空間。\n"
+
+#, c-format
+msgid "configuration error - unknown item '%s' (notify administrator)\n"
+msgstr "配置錯誤 - 未知項目“%s”(請通知管理員)\n"
+
+msgid "Password: "
+msgstr "密碼:"
+
+#, c-format
+msgid "%s's Password: "
+msgstr "%s 的密碼:"
+
+#, c-format
+msgid "Warning: unknown group %s\n"
+msgstr "警告:未知群組 %s\n"
+
+msgid "Warning: too many groups\n"
+msgstr "警告:使用者群組過多\n"
+
+msgid "Your password has expired."
+msgstr "您的密碼已過期。"
+
+msgid "Your password is inactive."
+msgstr "您的密碼已失效。"
+
+msgid "Your login has expired."
+msgstr "您的帳戶已過期。"
+
+msgid "  Contact the system administrator."
+msgstr "  請聯繫系統管理員。"
+
+msgid "  Choose a new password."
+msgstr "  請選擇一個新密碼。"
+
+msgid "You must change your password."
+msgstr ""
+
+#, c-format
+msgid "Your password will expire in %ld days.\n"
+msgstr "您的密碼將在 %ld 天內過期。\n"
+
+msgid "Your password will expire tomorrow."
+msgstr "您的密碼將在明天過期。"
+
+msgid "Your password will expire today."
+msgstr "您的密碼今天過期。"
+
+msgid "Cannot open audit interface - aborting.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "Unable to change tty %s"
+msgid "Unable to change owner or mode of tty stdin: %s"
+msgstr "無法改變 tty %s"
+
+#, fuzzy, c-format
+#| msgid "%s: fields too long\n"
+msgid "%s: failed to unlock %s\n"
+msgstr "%s:字段太長\n"
+
+msgid "Environment overflow\n"
+msgstr "環境溢位\n"
+
+#, c-format
+msgid "You may not change $%s\n"
+msgstr "您不應該改變 $%s\n"
+
+#, c-format
+msgid ""
+"%d failure since last login.\n"
+"Last was %s on %s.\n"
+msgid_plural ""
+"%d failures since last login.\n"
+"Last was %s on %s.\n"
+msgstr[0] ""
+"距離上一次登錄已有 %d 次登錄失敗。\n"
+"最後一次是 %s 在 %s 上。\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system GID (no more available GIDs)\n"
+msgstr "%s:無法獲取獨有的 gid\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique GID (no more available GIDs)\n"
+msgstr "%s:無法獲取獨有的 gid\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique system UID (no more available UIDs)\n"
+msgstr "%s:無法獲取獨有的 gid\n"
+
+#, fuzzy, c-format
+msgid "%s: Can't get unique UID (no more available UIDs)\n"
+msgstr "%s:無法獲取獨有的 gid\n"
+
+msgid "Too many logins.\n"
+msgstr "過多登錄數量。\n"
+
+msgid "You have new mail."
+msgstr "您有新信件。"
+
+msgid "No mail."
+msgstr "無信件。"
+
+msgid "You have mail."
+msgstr "您有信件。"
+
+#, fuzzy
+msgid "no change"
+msgstr "%s:無改變\n"
+
+msgid "a palindrome"
+msgstr ""
+
+msgid "case changes only"
+msgstr ""
+
+msgid "too similar"
+msgstr ""
+
+msgid "too simple"
+msgstr ""
+
+msgid "rotated"
+msgstr ""
+
+msgid "too short"
+msgstr ""
+
+#, c-format
+msgid "Bad password: %s.  "
+msgstr "錯誤的密碼:%s。 "
+
+#, c-format
+msgid "passwd: pam_start() failed, error %d\n"
+msgstr "passwd: pam_start() 失敗,錯誤 %d\n"
+
+#, c-format
+msgid "passwd: %s\n"
+msgstr "passwd:%s\n"
+
+#, fuzzy
+#| msgid "Password changed."
+msgid "passwd: password unchanged\n"
+msgstr "密碼已更改。"
+
+msgid "passwd: password updated successfully\n"
+msgstr "passwd:密碼已成功地變更\n"
+
+#, fuzzy, c-format
+msgid "Incorrect password for %s.\n"
+msgstr "“%s”的密碼不正確\n"
+
+#, c-format
+msgid ""
+"Invalid ENCRYPT_METHOD value: '%s'.\n"
+"Defaulting to DES.\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Unable to cd to '%s'\n"
+msgstr "無法進入“%s”目錄\n"
+
+msgid "No directory, logging in with HOME=/"
+msgstr "沒有目錄,將以 HOME=/ 登入"
+
+#, c-format
+msgid "Cannot execute %s"
+msgstr "無法執行 %s"
+
+#, fuzzy, c-format
+msgid "Invalid root directory '%s'\n"
+msgstr "無效的根目錄“%s”\n"
+
+#, fuzzy, c-format
+msgid "Can't change root directory to '%s'\n"
+msgstr "無法將根目錄改變為“%s”\n"
+
+#, fuzzy
+msgid "Unable to determine your tty name."
+msgstr "%s:無法確定您的使用者名稱。\n"
+
+#, c-format
+msgid "%s: out of memory\n"
+msgstr "%s:記憶體不足\n"
+
+#, c-format
+msgid "malloc(%d) failed\n"
+msgstr "malloc(%d) 失敗\n"
+
+#, fuzzy
+msgid "No"
+msgstr "取消"
+
+#, fuzzy
+msgid ""
+"Usage: chage [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -d, --lastday LAST_DAY        set date of last password change to "
+"LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -h, --help                    display this help message and exit\n"
+"  -I, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --list                    show account aging information\n"
+"  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+"                                change to MAX_DAYS\n"
+"  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"\n"
+msgstr ""
+"用法:chage [選項] 使用者\n"
+"\n"
+"選項:\n"
+"  -d, --lastday LAST_DAY\t設定密碼的最後修改日期為 LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE\t設定帳號過期的日期為 EXPIRE\n"
+"  -h, --help\t\t\t顯示這份說明文字然後結束\n"
+"  -I, --inactive INACTIVE\t設定密碼在 INACTIVE 天後失效\n"
+"  -l, --list\t\t\t顯示帳號期限的相關資訊\n"
+"  -m, --mindays MIN_DAYS\t最少必須相隔 MIN_DAYS 天才能改變密碼\n"
+"  -M, --maxdays MAX_DAYS\t最多必須相隔 MIN_DAYS 天才能改變密碼\n"
+"  -W, --warndays WARN_DAYS\t密碼在過期前 WARN_DAYS 天會發出警告\n"
+"\n"
+
+msgid "Enter the new value, or press ENTER for the default"
+msgstr "請輸入新值,或直接按 ENTER 鍵以使用預設值"
+
+msgid "Minimum Password Age"
+msgstr "密碼期限最小值"
+
+msgid "Maximum Password Age"
+msgstr "密碼期限最大值"
+
+msgid "Last Password Change (YYYY-MM-DD)"
+msgstr "最近一次密碼修改時間 (YYYY-MM-DD)"
+
+msgid "Password Expiration Warning"
+msgstr "密碼過期警告"
+
+msgid "Password Inactive"
+msgstr "密碼失效"
+
+msgid "Account Expiration Date (YYYY-MM-DD)"
+msgstr "帳戶過期時間 (YYYY-MM-DD)"
+
+msgid "Last password change\t\t\t\t\t: "
+msgstr "最近一次密碼修改時間\t\t\t\t\t:"
+
+msgid "never"
+msgstr "從不"
+
+msgid "password must be changed"
+msgstr "密碼已更改。"
+
+msgid "Password expires\t\t\t\t\t: "
+msgstr "密碼過期\t\t\t\t\t:"
+
+msgid "Password inactive\t\t\t\t\t: "
+msgstr "密碼失效\t\t\t\t\t:"
+
+msgid "Account expires\t\t\t\t\t\t: "
+msgstr "帳戶過期\t\t\t\t\t:"
+
+#, c-format
+msgid "Minimum number of days between password change\t\t: %ld\n"
+msgstr "最少必須相隔幾天才能改變密碼\t\t\t\t:%ld\n"
+
+#, c-format
+msgid "Maximum number of days between password change\t\t: %ld\n"
+msgstr "最多必須相隔幾天才能改變密碼\t\t\t\t:%ld\n"
+
+#, c-format
+msgid "Number of days of warning before password expires\t: %ld\n"
+msgstr "在密碼將要過期之前多少天會發出警告\t\t\t\t:%ld\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid date '%s'\n"
+msgstr "%s:無效日期“%s”\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid numeric argument '%s'\n"
+msgstr "%s:無效的數字參數“%s”\n"
+
+#, c-format
+msgid "%s: do not include \"l\" with other flags\n"
+msgstr "%s:請不要與其它標誌一同使用“l”\n"
+
+#, c-format
+msgid "%s: Permission denied.\n"
+msgstr "%s:權限被拒。\n"
+
+#, c-format
+msgid "%s: Cannot determine your user name.\n"
+msgstr "%s:無法確定您的使用者名稱。\n"
+
+#, c-format
+msgid "%s: PAM authentication failed\n"
+msgstr "%s:PAM 驗証失敗\n"
+
+#, fuzzy, c-format
+#| msgid "%s: can't lock files, try again later\n"
+msgid "%s: cannot lock %s; try again later.\n"
+msgstr "%s:無法鎖定檔案,請稍後再試。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot open %s\n"
+msgstr "%s:無法打開檔案 %s\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while writing changes to %s\n"
+msgstr "%s:無效的工作電話:“%s”\n"
+
+#, c-format
+msgid "%s: failed to prepare the new %s entry '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: the shadow password file is not present\n"
+msgstr "%s:無法打開影子密碼文件\n"
+
+#, c-format
+msgid "%s: failed to drop privileges (%s)\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist in %s\n"
+msgstr "%s:使用者 %s 不存在\n"
+
+#, c-format
+msgid "Changing the aging information for %s\n"
+msgstr "正在為 %s 修改年齡訊息\n"
+
+#, c-format
+msgid "%s: error changing fields\n"
+msgstr "%s:改變字段時出錯\n"
+
+#, c-format
+msgid ""
+"Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
+"\t[-h home_ph] [-o other] [user]\n"
+msgstr ""
+"用法:%s [-f 全名] [-r 房間號] [-w 工作電話]\n"
+"\t[-h 住家電話] [-o 其它] [使用者]\n"
+
+#, c-format
+msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
+msgstr "用法:%s [-f 全名] [-r 房間號] [-w 工作電話] [-h 住家電話]\n"
+
+msgid "Full Name"
+msgstr "全名"
+
+#, fuzzy, c-format
+msgid "\t%s: %s\n"
+msgstr "passwd:%s\n"
+
+msgid "Room Number"
+msgstr "房間號碼"
+
+msgid "Work Phone"
+msgstr "工作電話"
+
+msgid "Home Phone"
+msgstr "住家電話"
+
+msgid "Other"
+msgstr "其它"
+
+msgid "Cannot change ID to root.\n"
+msgstr "無法改變 ID 成 root。\n"
+
+#, c-format
+msgid "%s: name with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid name: '%s'\n"
+msgstr "%s:無效的名稱:“%s”\n"
+
+#, c-format
+msgid "%s: room number with non-ASCII characters: '%s'\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid room number: '%s'\n"
+msgstr "%s:無效的房間號碼:“%s”\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid work phone: '%s'\n"
+msgstr "%s:無效的工作電話:“%s”\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home phone: '%s'\n"
+msgstr "%s:無效的住家電話:“%s”\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains non-ASCII characters\n"
+msgstr "%s:“%s”包含無效字元\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' contains illegal characters\n"
+msgstr "%s:“%s”包含無效字元\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' does not exist\n"
+msgstr "%s:使用者 %s 不存在\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot change user '%s' on NIS client.\n"
+msgstr "%s:不能在 NIS 用戶端上修改使用者“%s”。\n"
+
+#, fuzzy, c-format
+msgid "%s: '%s' is the NIS master for this client.\n"
+msgstr "%s:“%s”是用戶端的 NIS 管理員。\n"
+
+#, c-format
+msgid "Changing the user information for %s\n"
+msgstr "正在改變 %s 的使用者訊息\n"
+
+#, c-format
+msgid "%s: fields too long\n"
+msgstr "%s:字段太長\n"
+
+#, fuzzy, c-format
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+"  -c, --crypt-method            the crypt method (one of %s)\n"
+"  -e, --encrypted               supplied passwords are encrypted\n"
+"  -h, --help                    display this help message and exit\n"
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+"%s\n"
+msgstr ""
+"用法:chpasswd [選項]\n"
+"\n"
+"選項:\n"
+"  -e, --encrypted\t所提供的密碼已經過加密\n"
+"  -h, --help\t\t顯示這份說明文字然後結束\n"
+"  -m,  --md5\t\t如果所提供的密碼沒有加密,則使用 MD5 加密法\n"
+"\t\t\t來替代 DES。\n"
+
+msgid ""
+"  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+"                                crypt algorithms\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: do not include \"l\" with other flags\n"
+msgid "%s: %s flag is only allowed with the %s flag\n"
+msgstr "%s:請不要與其它標誌一同使用“l”\n"
+
+#, c-format
+msgid "%s: the -c, -e, and -m flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: unsupported crypt method: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: line %d: line too long\n"
+msgstr "%s:第 %d 行:此行太長\n"
+
+#, c-format
+msgid "%s: line %d: missing new password\n"
+msgstr "%s:第 %d 行:缺少新密碼\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: line %d: group '%s' does not exist\n"
+msgstr "%s:%s 群組不存在\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: can't update entry\n"
+msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
+msgstr "%s:第 %d 行:無法更新項目\n"
+
+#, c-format
+msgid "%s: error detected, changes ignored\n"
+msgstr "%s:發現錯誤,忽略更動\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options]\n"
+"\n"
+"Options:\n"
+msgstr "用法:%s [輸入]\n"
+
+#, c-format
+msgid "  -c, --crypt-method            the crypt method (one of %s)\n"
+msgstr ""
+
+msgid "  -e, --encrypted               supplied passwords are encrypted\n"
+msgstr ""
+
+msgid "  -h, --help                    display this help message and exit\n"
+msgstr ""
+
+msgid ""
+"  -m, --md5                     encrypt the clear text password using\n"
+"                                the MD5 algorithm\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: (line %d, user %s) password not changed\n"
+msgstr "%s:使用者 %s 不存在\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist\n"
+msgstr "%s:使用者 %s 不存在\n"
+
+msgid ""
+"Usage: chsh [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -h, --help                    display this help message and exit\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"\n"
+msgstr ""
+
+msgid "Login Shell"
+msgstr "登入 Shell"
+
+#, fuzzy, c-format
+#| msgid "You may not change the shell for %s.\n"
+msgid "You may not change the shell for '%s'.\n"
+msgstr "您不能為 %s 更改 shell。\n"
+
+#, c-format
+msgid "Changing the login shell for %s\n"
+msgstr "正在更改 %s 的 shell\n"
+
+#, c-format
+msgid "%s: Invalid entry: %s\n"
+msgstr "%s:無效的項目:%s\n"
+
+#, fuzzy, c-format
+#| msgid "%s is an invalid shell.\n"
+msgid "%s: %s is an invalid shell.\n"
+msgstr "%s 是無效的 shell。\n"
+
+msgid "Usage: expiry {-f|-c}\n"
+msgstr "用法:expiry {-f|-c}\n"
+
+msgid "  -a, --all                     display faillog records for all users\n"
+msgstr ""
+
+msgid ""
+"  -l, --lock-time SEC           after failed login lock account for SEC "
+"seconds\n"
+msgstr ""
+
+msgid ""
+"  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+msgstr ""
+
+msgid "  -r, --reset                   reset the counters of login failures\n"
+msgstr ""
+
+msgid ""
+"  -t, --time DAYS               display faillog records more recent than "
+"DAYS\n"
+msgstr ""
+
+msgid ""
+"  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+"                                counters and limits (if used with -r, -m,\n"
+"                                or -l) only for the specified LOGIN(s)\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Login       Failures Maximum Latest                   On\n"
+msgstr "登入        失敗     最多    最後                     在\n"
+
+#, fuzzy, c-format
+#| msgid " [%lds left]"
+msgid " [%lus left]"
+msgstr " [還剩 %lds]"
+
+#, c-format
+msgid " [%lds lock]"
+msgstr " [鎖定 %lds]"
+
+#, c-format
+msgid "faillog: Failed to reset fail count for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set max for UID %lu\n"
+msgstr ""
+
+#, c-format
+msgid "faillog: Failed to set locktime for UID %lu\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "lastlog: Unknown user or range: %s\n"
+msgstr "未知使用者:%s\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "faillog: Cannot open %s: %s\n"
+msgstr "%s:無法打開檔案 %s\n"
+
+#, c-format
+msgid "faillog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"Usage: %s [option] GROUP\n"
+"\n"
+"Options:\n"
+"  -a, --add USER                add USER to GROUP\n"
+"  -d, --delete USER             remove USER from GROUP\n"
+"  -r, --remove-password         remove the GROUP's password\n"
+"  -R, --restrict                restrict access to GROUP to its members\n"
+"  -M, --members USER,...        set the list of members of GROUP\n"
+"%s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"  -A, --administrators ADMIN,...\n"
+"                                set the list of administrators for GROUP\n"
+"Except for the -A and -M options, the options cannot be combined.\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "The password for %s cannot be changed.\n"
+msgid "The options cannot be combined.\n"
+msgstr "無法更改 %s 的密碼。\n"
+
+#, c-format
+msgid "%s: shadow group passwords required for -A\n"
+msgstr "%s:-A 需要shadow群組密碼\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist in %s\n"
+msgstr "%s:%s 群組不存在\n"
+
+#, fuzzy, c-format
+msgid "%s: failure while closing read-only %s\n"
+msgstr "%s:無效的工作電話:“%s”\n"
+
+#, c-format
+msgid "Changing the password for group %s\n"
+msgstr "正在修改 %s 群組的密碼\n"
+
+msgid "New Password: "
+msgstr "新密碼:"
+
+msgid "Re-enter new password: "
+msgstr "請重新輸入新密碼:"
+
+msgid "They don't match; try again"
+msgstr "他們並不匹配﹔請重試"
+
+#, c-format
+msgid "%s: Try again later\n"
+msgstr "%s:請稍後重試\n"
+
+#, c-format
+msgid "Adding user %s to group %s\n"
+msgstr "正在將使用者“%s”加入到“%s”群組中\n"
+
+#, c-format
+msgid "Removing user %s from group %s\n"
+msgstr "正在將使用者“%s”從“%s”群組中刪除\n"
+
+#, fuzzy, c-format
+msgid "%s: user '%s' is not a member of '%s'\n"
+msgstr "%s:使用者 %s 不存在\n"
+
+#, c-format
+msgid "%s: Not a tty\n"
+msgstr "%s:不是 tty\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: %s [options] GROUP\n"
+"\n"
+"Options:\n"
+msgstr "用法:%s [輸入]\n"
+
+msgid ""
+"  -f, --force                   exit successfully if the group already "
+"exists,\n"
+"                                and cancel -g if the GID is already used\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 use GID for the new group\n"
+msgstr ""
+
+msgid "  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create groups with duplicate\n"
+"                                (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       use this encrypted password for the new "
+"group\n"
+msgstr ""
+
+msgid "  -r, --system                  create a system account\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: %s is not a valid group name\n"
+msgid "%s: '%s' is not a valid group name\n"
+msgstr "%s:%s 不是有效的群組名\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid group ID '%s'\n"
+msgstr "無效的群組名“%s”\n"
+
+#, fuzzy, c-format
+msgid "%s: -K requires KEY=VALUE\n"
+msgstr "%s:-O 需要 NAME=VALUE\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s exists\n"
+msgid "%s: group '%s' already exists\n"
+msgstr "%s:%s 群組已存在\n"
+
+#, c-format
+msgid "%s: GID '%lu' already exists\n"
+msgstr ""
+
+msgid "Usage: groupdel group\n"
+msgstr "用法:groupdel 群組\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot rename directory %s to %s\n"
+msgid "%s: cannot remove entry '%s' from %s\n"
+msgstr "%s:無法將目錄 %s 改名為 %s\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot remove the primary group of user '%s'\n"
+msgstr "%s:不能在 NIS 用戶端上修改使用者“%s”。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: group %s does not exist\n"
+msgid "%s: group '%s' does not exist\n"
+msgstr "%s:%s 群組不存在\n"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group\n"
+msgstr "%s:“%s”群組是一個 NIS 群組。\n"
+
+#, c-format
+msgid "%s: %s is the NIS master\n"
+msgstr "%s:%s 是 NIS 管理員\n"
+
+#, fuzzy, c-format
+#| msgid "%s: user %s is a NIS user\n"
+msgid "%s: user '%s' is already a member of '%s'\n"
+msgstr "%s:使用者 %s 是 NIS 使用者\n"
+
+#, fuzzy, c-format
+msgid "%s: Out of memory. Cannot update %s.\n"
+msgstr "%s:update_group 時記憶體不足\n"
+
+msgid ""
+"Usage: groupmems [options] [action]\n"
+"\n"
+"Options:\n"
+"  -g, --group groupname         change groupname instead of the user's "
+"group\n"
+"                                (root only)\n"
+"\n"
+"Actions:\n"
+"  -a, --add username            add username to the members of the group\n"
+"  -d, --delete username         remove username from the members of the "
+"group\n"
+"  -p, --purge                   purge all members from the group\n"
+"  -l, --list                    list the members of the group\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: your groupname does not match your username\n"
+msgstr ""
+
+#, c-format
+msgid "%s: only root can use the -g/--group option\n"
+msgstr ""
+
+msgid "  -g, --gid GID                 change the group ID to GID\n"
+msgstr ""
+
+msgid "  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"
+msgstr ""
+
+msgid ""
+"  -p, --password PASSWORD       change the password to this (encrypted)\n"
+"                                PASSWORD\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid group name '%s'\n"
+msgstr "無效的群組名“%s”\n"
+
+#, c-format
+msgid "%s: group %s is a NIS group\n"
+msgstr "%s:%s 群組是一個 NIS 群組\n"
+
+#, c-format
+msgid "%s: unknown user %s\n"
+msgstr "%s:未知使用者:%s\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
+msgstr "用法:%s [-r] [-s] [群組 [gshadow]]\n"
+
+#, c-format
+msgid "Usage: %s [-r] [-s] [group]\n"
+msgstr "用法:%s [-r] [-s] [群組]\n"
+
+#, c-format
+msgid "%s: -s and -r are incompatibile\n"
+msgstr "%s:-s 和 -r 是互不相容的\n"
+
+msgid "invalid group file entry"
+msgstr "無效的群組檔案項目"
+
+#, fuzzy, c-format
+msgid "delete line '%s'? "
+msgstr "刪除“%s”行?\""
+
+msgid "duplicate group entry"
+msgstr "複製群組項目"
+
+#, fuzzy, c-format
+msgid "invalid group name '%s'\n"
+msgstr "無效的群組名“%s”\n"
+
+#, fuzzy, c-format
+msgid "invalid group ID '%lu'\n"
+msgstr "無效的群組名“%s”\n"
+
+#, c-format
+msgid "group %s: no user %s\n"
+msgstr "%s 群組:無使用者 %s\n"
+
+#, fuzzy, c-format
+msgid "delete member '%s'? "
+msgstr "刪除使用者成員“%s”嗎?"
+
+#, fuzzy, c-format
+msgid "no matching group file entry in %s\n"
+msgstr "沒有找到匹配的群組檔案項目\n"
+
+#, fuzzy, c-format
+msgid "add group '%s' in %s? "
+msgstr "%s shadow群組:無使用者 %s\n"
+
+#, c-format
+msgid ""
+"group %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow group file entry"
+msgstr "無效的shadow群組檔案項目"
+
+msgid "duplicate shadow group entry"
+msgstr "複製shadow群組項目"
+
+#, c-format
+msgid "shadow group %s: no administrative user %s\n"
+msgstr "%s shadow群組:無系統管理者 %s\n"
+
+#, fuzzy, c-format
+msgid "delete administrative member '%s'? "
+msgstr "刪除系統管理者“%s”嗎?"
+
+#, c-format
+msgid "shadow group %s: no user %s\n"
+msgstr "%s shadow群組:無使用者 %s\n"
+
+#, c-format
+msgid "%s: the files have been updated\n"
+msgstr "%s:檔案已被更新\n"
+
+#, c-format
+msgid "%s: no changes\n"
+msgstr "%s:無改變\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpconv\n"
+msgstr "用法:groupdel 群組\n"
+
+#, fuzzy
+#| msgid "Usage: groupdel group\n"
+msgid "Usage: grpunconv\n"
+msgstr "用法:groupdel 群組\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot update file %s\n"
+msgid "%s: cannot delete %s\n"
+msgstr "%s:無法更新檔案 %s\n"
+
+msgid "Usage: id [-a]\n"
+msgstr "用法:id [-a]\n"
+
+msgid "Usage: id\n"
+msgstr "用法:id\n"
+
+msgid " groups="
+msgstr " 群組="
+
+#, fuzzy
+msgid ""
+"Usage: lastlog [options]\n"
+"\n"
+"Options:\n"
+"  -b, --before DAYS             print only lastlog records older than DAYS\n"
+"  -h, --help                    display this help message and exit\n"
+"  -t, --time DAYS               print only lastlog records more recent than "
+"DAYS\n"
+"  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+"\n"
+msgstr ""
+"用法:lastlog [選項]\n"
+"\n"
+"選項:\n"
+"  -h, --help\t\t顯示這份說明文字然後結束\n"
+"  -t, --time DAYS\t只列出 DAYS 天內的歷史記錄\n"
+"  -u, --user LOGIN\t根據指定的 LOGIN 列出該使用者最後的歷史記錄\n"
+"\n"
+
+#, c-format
+msgid "lastlog: Failed to get the entry for UID %lu\n"
+msgstr ""
+
+msgid "Username         Port     From             Latest"
+msgstr "使用者名         埠號     來自             最後登入時間"
+
+msgid "Username                Port     Latest"
+msgstr "使用者名                  埠號     最後登入時間"
+
+msgid "**Never logged in**"
+msgstr "**從未登入過**"
+
+#, c-format
+msgid "lastlog: unexpected argument: %s\n"
+msgstr ""
+
+#, c-format
+msgid "lastlog: Cannot get the size of %s: %s\n"
+msgstr ""
+
+#, c-format
+msgid "Usage: %s [-p] [name]\n"
+msgstr "用法:%s [-p] [名稱]\n"
+
+#, c-format
+msgid "       %s [-p] [-h host] [-f name]\n"
+msgstr "       %s [-p] [-h 主機] [-f 名稱]\n"
+
+#, c-format
+msgid "       %s [-p] -r host\n"
+msgstr "       %s [-p] -r 主機\n"
+
+#, c-format
+msgid "configuration error - cannot parse %s value: '%d'"
+msgstr ""
+
+msgid "Invalid login time"
+msgstr "無效的登入時間"
+
+msgid ""
+"\n"
+"System closed for routine maintenance"
+msgstr ""
+"\n"
+"系統關閉,例行維護"
+
+msgid ""
+"\n"
+"[Disconnect bypassed -- root login allowed.]"
+msgstr ""
+"\n"
+"[忽略斷線要求 -- 允許 root 登入。]"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "Login timed out after %d seconds.\n"
+msgid ""
+"\n"
+"Login timed out after %u seconds.\n"
+msgstr ""
+"\n"
+"登入逾時 %d 秒\n"
+
+#, c-format
+msgid "%s: Cannot possibly work without effective root\n"
+msgstr ""
+
+msgid "No utmp entry.  You must exec \"login\" from the lowest level \"sh\""
+msgstr ""
+
+#, c-format
+msgid "login: PAM Failure, aborting: %s\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s login: "
+msgstr ""
+"\n"
+" %s 使用者名稱:"
+
+#, fuzzy
+msgid "login: "
+msgstr ""
+"\n"
+" %s 使用者名稱:"
+
+#, fuzzy, c-format
+msgid "Maximum number of tries exceeded (%u)\n"
+msgstr "最多必須相隔幾天才能改變密碼\t\t\t\t:%ld\n"
+
+msgid "login: abort requested by PAM\n"
+msgstr ""
+
+msgid "Login incorrect"
+msgstr "登入錯誤"
+
+#, c-format
+msgid ""
+"\n"
+"%s login: "
+msgstr ""
+"\n"
+" %s 使用者名稱:"
+
+#, c-format
+msgid "%s: failure forking: %s"
+msgstr ""
+
+#, c-format
+msgid "TIOCSCTTY failed on %s"
+msgstr ""
+
+msgid "Warning: login re-enabled after temporary lockout."
+msgstr "警告:在短暫的鎖定後將恢復登入。"
+
+#, c-format
+msgid "Last login: %s on %s"
+msgstr "上次登入:%s 在 %s 上"
+
+#, c-format
+msgid "Last login: %.19s on %s"
+msgstr "上次登入:%.19s 在 %s 上"
+
+#, c-format
+msgid " from %.*s"
+msgstr " 來自 %.*s"
+
+msgid ""
+"login time exceeded\n"
+"\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: logoutd\n"
+msgstr "用法:id\n"
+
+msgid "Usage: newgrp [-] [group]\n"
+msgstr "用法:newgrp [-] [群組]\n"
+
+msgid "Usage: sg group [[-c] command]\n"
+msgstr "用法:sg 群組 [[-c] 命令]\n"
+
+#, fuzzy
+msgid "Invalid password.\n"
+msgstr "舊密碼:"
+
+#, fuzzy, c-format
+msgid "%s: failure forking: %s\n"
+msgstr "%s:無效的工作電話:“%s”\n"
+
+#, fuzzy, c-format
+msgid "%s: GID '%lu' does not exist\n"
+msgstr "%s:使用者 %s 不存在\n"
+
+msgid "too many groups\n"
+msgstr "使用者群組過多\n"
+
+msgid "  -r, --system                  create system accounts\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
+msgstr "%s:%s 群組不存在\n"
+
+#, fuzzy, c-format
+#| msgid "%s: invalid user name '%s'\n"
+msgid "%s: invalid user ID '%s'\n"
+msgstr "%s:無效使用者名稱“%s”\n"
+
+#, c-format
+msgid "%s: invalid user name '%s'\n"
+msgstr "%s:無效使用者名稱“%s”\n"
+
+#, c-format
+msgid "%s: line %d: invalid line\n"
+msgstr "%s:第 %d 行:無效行\n"
+
+#, fuzzy, c-format
+msgid "%s: cannot update the entry of user %s (not in the passwd database)\n"
+msgstr "%s:不能更新使用者 %s 的項目\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create user\n"
+msgstr "%s:第 %d 行:無法建立 GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: can't create group\n"
+msgstr "%s:第 %d 行:無法建立 GID\n"
+
+#, fuzzy, c-format
+msgid "%s: line %d: user '%s' does not exist in %s\n"
+msgstr "%s:使用者 %s 不存在\n"
+
+#, c-format
+msgid "%s: line %d: can't update password\n"
+msgstr "%s:第 %d 行:無法更新密碼\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: mkdir failed\n"
+msgid "%s: line %d: mkdir %s failed: %s\n"
+msgstr "%s:第 %d 行:建立目錄失敗\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line %d: chown %s failed: %s\n"
+msgstr "%s:第 %d 行:改變擁有者或群組失敗\n"
+
+#, c-format
+msgid "%s: line %d: can't update entry\n"
+msgstr "%s:第 %d 行:無法更新項目\n"
+
+#, fuzzy
+msgid ""
+"Usage: passwd [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -a, --all                     report password status on all accounts\n"
+"  -d, --delete                  delete the password for the named account\n"
+"  -e, --expire                  force expire the password for the named "
+"account\n"
+"  -h, --help                    display this help message and exit\n"
+"  -k, --keep-tokens             change password only if expired\n"
+"  -i, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -l, --lock                    lock the password of the named account\n"
+"  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+"                                change to MIN_DAYS\n"
+"  -q, --quiet                   quiet mode\n"
+"  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+"  -S, --status                  report password status on the named account\n"
+"  -u, --unlock                  unlock the password of the named account\n"
+"  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+"  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+"                                change to MAX_DAYS\n"
+"\n"
+msgstr ""
+"用法:chage [選項] 使用者\n"
+"\n"
+"選項:\n"
+"  -d, --lastday LAST_DAY\t設定密碼的最後修改日期為 LAST_DAY\n"
+"  -E, --expiredate EXPIRE_DATE\t設定帳號過期的日期為 EXPIRE\n"
+"  -h, --help\t\t\t顯示這份說明文字然後結束\n"
+"  -I, --inactive INACTIVE\t設定密碼在 INACTIVE 天後失效\n"
+"  -l, --list\t\t\t顯示帳號期限的相關資訊\n"
+"  -m, --mindays MIN_DAYS\t最少必須相隔 MIN_DAYS 天才能改變密碼\n"
+"  -M, --maxdays MAX_DAYS\t最多必須相隔 MIN_DAYS 天才能改變密碼\n"
+"  -W, --warndays WARN_DAYS\t密碼在過期前 WARN_DAYS 天會發出警告\n"
+"\n"
+
+msgid "Old password: "
+msgstr "舊密碼:"
+
+#, fuzzy, c-format
+msgid ""
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"請輸入新密碼(最少 %d 最多 %d 個字元)\n"
+"請混合使用大小寫字母和數字。\n"
+
+#, c-format
+msgid ""
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"
+msgstr ""
+"請輸入新密碼(最少 %d 最多 %d 個字元)\n"
+"請混合使用大小寫字母和數字。\n"
+
+msgid "New password: "
+msgstr "新密碼:"
+
+msgid "Try again."
+msgstr "重試。"
+
+msgid ""
+"\n"
+"Warning: weak password (enter it again to use it anyway)."
+msgstr ""
+"\n"
+"警告:脆弱的密碼(重新輸入以強制使用它)。"
+
+msgid "They don't match; try again.\n"
+msgstr "他們並不匹配﹔請重試。\n"
+
+#, c-format
+msgid "The password for %s cannot be changed.\n"
+msgstr "無法更改 %s 的密碼。\n"
+
+#, fuzzy, c-format
+msgid "The password for %s cannot be changed yet.\n"
+msgstr "無法更改 %s 的密碼。\n"
+
+#, c-format
+msgid ""
+"%s: unlocking the password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock the password of this "
+"account.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: repository %s not supported\n"
+msgstr "%s:不支持 %s 套件存庫。\n"
+
+#, c-format
+msgid "%s: %s is not authorized to change the password of %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: You may not view or modify password information for %s.\n"
+msgstr "%s:您無法替 %s 檢視或修改密碼資訊。\n"
+
+#, c-format
+msgid "Changing password for %s\n"
+msgstr "正在為 %s 修改密碼\n"
+
+#, c-format
+msgid "The password for %s is unchanged.\n"
+msgstr "%s 的密碼未被改變。\n"
+
+#, fuzzy, c-format
+#| msgid "Password changed."
+msgid "%s: password changed.\n"
+msgstr "密碼已更改。"
+
+#, fuzzy, c-format
+#| msgid "Password Expiration Warning"
+msgid "%s: password expiry information changed.\n"
+msgstr "密碼過期警告"
+
+#, c-format
+msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
+msgstr "用法:%s [-q] [-r] [-s] [passwd [shadow]]\n"
+
+#, fuzzy, c-format
+#| msgid "%s: -s and -r are incompatibile\n"
+msgid "%s: -s and -r are incompatible\n"
+msgstr "%s:-s 和 -r 是互不相容的\n"
+
+msgid "invalid password file entry"
+msgstr "無效的密碼檔案項目"
+
+msgid "duplicate password entry"
+msgstr "重復的密碼項目"
+
+#, c-format
+msgid "invalid user name '%s'\n"
+msgstr "無效的使用者名稱“%s”\n"
+
+#, fuzzy, c-format
+#| msgid "invalid user name '%s'\n"
+msgid "invalid user ID '%lu'\n"
+msgstr "無效的使用者名稱“%s”\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: no group %u\n"
+msgid "user '%s': no group %lu\n"
+msgstr "使用者 %s:無 %u 群組\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: directory %s does not exist\n"
+msgid "user '%s': directory '%s' does not exist\n"
+msgstr "使用者 %s:目錄 %s 不存在\n"
+
+#, fuzzy, c-format
+#| msgid "user %s: program %s does not exist\n"
+msgid "user '%s': program '%s' does not exist\n"
+msgstr "使用者 %s:程式 %s 不存在\n"
+
+#, fuzzy, c-format
+msgid "no matching password file entry in %s\n"
+msgstr "無匹配的密碼檔案項目\n"
+
+#, fuzzy, c-format
+msgid "add user '%s' in %s? "
+msgstr "%s shadow群組:無使用者 %s\n"
+
+#, c-format
+msgid ""
+"user %s has an entry in %s, but its password field in %s is not set to 'x'\n"
+msgstr ""
+
+msgid "invalid shadow password file entry"
+msgstr "無效的shadow密碼檔案項目"
+
+msgid "duplicate shadow password entry"
+msgstr "重復的shadow密碼項目"
+
+#, c-format
+msgid "user %s: last password change in the future\n"
+msgstr "使用者 %s:最近一次密碼更動\n"
+
+#, fuzzy, c-format
+#| msgid "%s: cannot open file %s\n"
+msgid "%s: cannot sort entries in %s\n"
+msgstr "%s:無法打開檔案 %s\n"
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwconv\n"
+msgstr "用法:id\n"
+
+#, c-format
+msgid "%s: failed to change the mode of %s to 0600\n"
+msgstr ""
+
+#, fuzzy
+#| msgid "Usage: id\n"
+msgid "Usage: pwunconv\n"
+msgstr "用法:id\n"
+
+msgid "Access to su to that account DENIED.\n"
+msgstr "su 到該帳戶被拒。\n"
+
+msgid "Password authentication bypassed.\n"
+msgstr "忽略密碼認証\n"
+
+msgid "Please enter your OWN password as authentication.\n"
+msgstr "請輸入您自己的密碼作為驗証。\n"
+
+#, fuzzy, c-format
+msgid "%s: %s\n"
+msgstr "passwd:%s\n"
+
+msgid ""
+"Usage: su [options] [LOGIN]\n"
+"\n"
+"Options:\n"
+"  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+"  -h, --help                    display this help message and exit\n"
+"  -, -l, --login                make the shell a login shell\n"
+"  -m, -p,\n"
+"  --preserve-environment        do not reset environment variables, and\n"
+"                                keep the same shell\n"
+"  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+"\n"
+msgstr ""
+
+#, c-format
+msgid "%s: must be run from a terminal\n"
+msgstr "%s:必須從終端中執行\n"
+
+#, c-format
+msgid "%s: pam_start: error %d\n"
+msgstr "%s:pam_start:錯誤 %d\n"
+
+#, c-format
+msgid "Unknown id: %s\n"
+msgstr "未知 id:%s\n"
+
+#, c-format
+msgid "You are not authorized to su %s\n"
+msgstr "您沒有被授權 su %s\n"
+
+msgid "(Enter your own password)"
+msgstr "(請輸入您自己的密碼)"
+
+#, c-format
+msgid ""
+"%s: %s\n"
+"(Ignored)\n"
+msgstr ""
+"%s:%s\n"
+"(忽略)\n"
+
+#, fuzzy, c-format
+#| msgid "%s: PAM authentication failed\n"
+msgid "%s: Authentication failure\n"
+msgstr "%s:PAM 驗証失敗\n"
+
+#, fuzzy, c-format
+#| msgid "You are not authorized to su %s\n"
+msgid "%s: You are not authorized to su at that time\n"
+msgstr "您沒有被授權 su %s\n"
+
+msgid "No shell\n"
+msgstr "沒有 shell\n"
+
+msgid "No password file"
+msgstr "沒有密碼檔案"
+
+msgid "TIOCSCTTY failed"
+msgstr ""
+
+msgid "No password entry for 'root'"
+msgstr "沒有“root”的密碼項目"
+
+msgid ""
+"\n"
+"Type control-d to proceed with normal startup,\n"
+"(or give root password for system maintenance):"
+msgstr ""
+"\n"
+"按下 control-d 即可繼續使用普通帳戶環境,\n"
+"(或者輸入 root 密碼以進行系統維護):"
+
+msgid "Entering System Maintenance Mode"
+msgstr "正在進入系統維護模式"
+
+#, c-format
+msgid "%s: the %s configuration in %s will be ignored\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create new defaults file\n"
+msgstr "%s:無法建立新的預設檔案\n"
+
+#, c-format
+msgid "%s: cannot open new defaults file\n"
+msgstr "%s:無法打開新的預設檔案\n"
+
+#, fuzzy, c-format
+#| msgid "%s: line %d: chown failed\n"
+msgid "%s: line too long in %s: %s..."
+msgstr "%s:第 %d 行:改變擁有者或群組失敗\n"
+
+#, fuzzy, c-format
+#| msgid "%s: rename: %s"
+msgid "%s: rename: %s: %s"
+msgstr "%s:更名:%s"
+
+#, fuzzy, c-format
+msgid "%s: group '%s' is a NIS group.\n"
+msgstr "%s:“%s”群組是一個 NIS 群組。\n"
+
+#, c-format
+msgid "%s: too many groups specified (max %d).\n"
+msgstr "%s:指定了過多群組(最多 %d)。\n"
+
+#, fuzzy, c-format
+#| msgid "Usage: %s [input]\n"
+msgid ""
+"Usage: useradd [options] LOGIN\n"
+"\n"
+"Options:\n"
+msgstr "用法:%s [輸入]\n"
+
+msgid ""
+"  -b, --base-dir BASE_DIR       base directory for the home directory of "
+"the\n"
+"                                new account\n"
+msgstr ""
+
+msgid "  -c, --comment COMMENT         GECOS field of the new account\n"
+msgstr ""
+
+msgid "  -d, --home-dir HOME_DIR       home directory of the new account\n"
+msgstr ""
+
+msgid ""
+"  -D, --defaults                print or change default useradd "
+"configuration\n"
+msgstr ""
+
+msgid "  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"
+msgstr ""
+
+msgid ""
+"  -f, --inactive INACTIVE       password inactivity period of the new "
+"account\n"
+msgstr ""
+
+msgid ""
+"  -g, --gid GROUP               name or ID of the primary group of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -G, --groups GROUPS           list of supplementary groups of the new\n"
+"                                account\n"
+msgstr ""
+
+msgid ""
+"  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"
+msgstr ""
+
+msgid ""
+"  -l, --no-log-init             do not add the user to the lastlog and\n"
+"                                faillog databases\n"
+msgstr ""
+
+msgid "  -m, --create-home             create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -M, --no-create-home          do not create the user's home directory\n"
+msgstr ""
+
+msgid ""
+"  -N, --no-user-group           do not create a group with the same name as\n"
+"                                the user\n"
+msgstr ""
+
+msgid ""
+"  -o, --non-unique              allow to create users with duplicate\n"
+"                                (non-unique) UID\n"
+msgstr ""
+
+msgid "  -p, --password PASSWORD       encrypted password of the new account\n"
+msgstr ""
+
+msgid "  -s, --shell SHELL             login shell of the new account\n"
+msgstr ""
+
+msgid "  -u, --uid UID                 user ID of the new account\n"
+msgstr ""
+
+msgid ""
+"  -U, --user-group              create a group with the same name as the "
+"user\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user "
+"mapping\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: invalid base directory '%s'\n"
+msgstr "%s:無效的主目錄“%s”\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid comment '%s'\n"
+msgstr "%s:無效注釋“%s”\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid home directory '%s'\n"
+msgstr "%s:無效的主目錄“%s”\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e\n"
+msgstr "%s:-e 參數需要有shadow密碼\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -f\n"
+msgstr "%s:-f 參數需要有shadow密碼\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid field '%s'\n"
+msgstr "%s:無效字段 “%s”\n"
+
+#, fuzzy, c-format
+msgid "%s: invalid shell '%s'\n"
+msgstr "%s:無效 shell“%s”\n"
+
+#, c-format
+msgid "%s: -Z requires SELinux enabled kernel\n"
+msgstr ""
+
+#, c-format
+msgid "%s: options %s and %s conflict\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the faillog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot create directory %s\n"
+msgstr "%s:無法建立目錄 %s\n"
+
+msgid "Creating mailbox file"
+msgstr ""
+
+msgid ""
+"Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"
+msgstr ""
+
+msgid "Setting mailbox file permissions"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists\n"
+msgstr "%s:使用者 %s 已存在\n"
+
+#, c-format
+msgid ""
+"%s: group %s exists - if you want to add this user to that group, use -g.\n"
+msgstr ""
+"%s:%s 群組已經存在 - 如果您想將此使用者加入到該群組,請使用 -g 參數。\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create user\n"
+msgstr "%s:無法建立 %s\n"
+
+#, fuzzy, c-format
+msgid "%s: UID %lu is not unique\n"
+msgstr "%s:gid %u 並不唯一\n"
+
+#, fuzzy, c-format
+msgid "%s: can't create group\n"
+msgstr "%s:無法建立 %s\n"
+
+#, c-format
+msgid ""
+"%s: warning: the home directory already exists.\n"
+"Not copying any file from skel directory into it.\n"
+msgstr ""
+
+msgid ""
+"Usage: userdel [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -f, --force                   force removal of files,\n"
+"                                even if not owned by user\n"
+"  -h, --help                    display this help message and exit\n"
+"  -r, --remove                  remove home directory and mail spool\n"
+"\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: group %s is the primary group of another user and is not removed.\n"
+msgstr "%s:不能刪除使用者的主群組。\n"
+
+#, fuzzy, c-format
+#| msgid "%s: warning: can't remove "
+msgid "%s: warning: can't remove %s: %s\n"
+msgstr "%s:警告:無法刪除"
+
+#, c-format
+msgid "%s: %s not owned by %s, not removing\n"
+msgstr "%s:%s 並不屬於 %s,所以不會刪除\n"
+
+#, c-format
+msgid "%s: user %s is a NIS user\n"
+msgstr "%s:使用者 %s 是 NIS 使用者\n"
+
+#, c-format
+msgid "%s: user %s is currently logged in\n"
+msgstr "%s:使用者 %s 目前已登入\n"
+
+#, fuzzy, c-format
+msgid "%s: %s home directory (%s) not found\n"
+msgstr "%s:無效的主目錄“%s”\n"
+
+#, c-format
+msgid "%s: not removing directory %s (would remove home of user %s)\n"
+msgstr "%s:不能刪除目錄 %s (因為這將刪除使用者 %s 的主目錄)\n"
+
+#, c-format
+msgid "%s: error removing directory %s\n"
+msgstr "%s:刪除目錄 %s 時出錯\n"
+
+#, c-format
+msgid ""
+"Usage: usermod [options] LOGIN\n"
+"\n"
+"Options:\n"
+"  -c, --comment COMMENT         new value of the GECOS field\n"
+"  -d, --home HOME_DIR           new home directory for the user account\n"
+"  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+"  -f, --inactive INACTIVE       set password inactive after expiration\n"
+"                                to INACTIVE\n"
+"  -g, --gid GROUP               force use GROUP as new primary group\n"
+"  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+"  -a, --append                  append the user to the supplemental GROUPS\n"
+"                                mentioned by the -G option without removing\n"
+"                                him/her from other groups\n"
+"  -h, --help                    display this help message and exit\n"
+"  -l, --login NEW_LOGIN         new value of the login name\n"
+"  -L, --lock                    lock the user account\n"
+"  -m, --move-home               move contents of the home directory to the\n"
+"                                new location (use only with -d)\n"
+"  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+"  -p, --password PASSWORD       use encrypted password for the new password\n"
+"  -s, --shell SHELL             new login shell for the user account\n"
+"  -u, --uid UID                 new UID for the user account\n"
+"  -U, --unlock                  unlock the user account\n"
+"%s\n"
+msgstr ""
+
+msgid ""
+"  -Z, --selinux-user            new SELinux user mapping for the user "
+"account\n"
+msgstr ""
+
+#, c-format
+msgid ""
+"%s: unlocking the user's password would result in a passwordless account.\n"
+"You should set a password with usermod -p to unlock this user's password.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#| msgid "%s: user %s exists\n"
+msgid "%s: user '%s' already exists in %s\n"
+msgstr "%s:使用者 %s 已存在\n"
+
+#, c-format
+msgid "%s: no flags given\n"
+msgstr "%s:沒有指定標誌\n"
+
+#, c-format
+msgid "%s: shadow passwords required for -e and -f\n"
+msgstr "%s:-e 和 -f 參數需要shadow密碼\n"
+
+#, c-format
+msgid "%s: the -L, -p, and -U flags are exclusive\n"
+msgstr ""
+
+#, c-format
+msgid "%s: UID '%lu' already exists\n"
+msgstr ""
+
+#, c-format
+msgid "%s: directory %s exists\n"
+msgstr "%s:目錄 %s 不存在\n"
+
+#, c-format
+msgid "%s: can't create %s\n"
+msgstr "%s:無法建立 %s\n"
+
+#, c-format
+msgid "%s: can't chown %s\n"
+msgstr "%s:無法改變 %s 的所有者和群組\n"
+
+#, c-format
+msgid "%s: warning: failed to completely remove old home directory %s"
+msgstr ""
+
+#, c-format
+msgid "%s: cannot rename directory %s to %s\n"
+msgstr "%s:無法將目錄 %s 改名為 %s\n"
+
+#, c-format
+msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
+msgstr ""
+
+#, c-format
+msgid "%s: warning: %s not owned by %s\n"
+msgstr "%s:警告:%s 不屬於 %s\n"
+
+msgid "failed to change mailbox owner"
+msgstr "改變信箱所有者失敗"
+
+msgid "failed to rename mailbox"
+msgstr "無法為信箱改名"
+
+#, c-format
+msgid ""
+"You have modified %s.\n"
+"You may need to modify %s for consistency.\n"
+"Please use the command '%s' to do so.\n"
+msgstr ""
+
+msgid ""
+"Usage: vipw [options]\n"
+"\n"
+"Options:\n"
+"  -g, --group                   edit group database\n"
+"  -h, --help                    display this help message and exit\n"
+"  -p, --passwd                  edit passwd database\n"
+"  -q, --quiet                   quiet mode\n"
+"  -s, --shadow                  edit shadow or gshadow database\n"
+"\n"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "%s: failed to remove %s\n"
+msgstr "%s:無效的工作電話:“%s”\n"
+
+#, fuzzy, c-format
+#| msgid ""
+#| "\n"
+#| "%s: %s is unchanged\n"
+msgid "%s: %s is unchanged\n"
+msgstr ""
+"\n"
+"%s:%s 沒有更改\n"
+
+#, fuzzy
+#| msgid "Couldn't lock file"
+msgid "Couldn't get file context"
+msgstr "無法鎖定檔案"
+
+msgid "setfscreatecon () failed"
+msgstr ""
+
+msgid "Couldn't lock file"
+msgstr "無法鎖定檔案"
+
+msgid "Couldn't make backup"
+msgstr "無法備份"
+
+#, c-format
+msgid "%s: can't restore %s: %s (your changes are in %s)\n"
+msgstr "%s:無法復原 %s:%s (您的修改在 %s 中)\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: faillog [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -a, --all                     display faillog records for all users\n"
+#~ "  -h, --help                    display this help message and exit\n"
+#~ "  -l, --lock-time SEC           after failed login lock account to SEC "
+#~ "seconds\n"
+#~ "  -m, --maximum MAX             set maximum failed login counters to MAX\n"
+#~ "  -r, --reset                   reset the counters of login failures\n"
+#~ "  -t, --time DAYS               display faillog records more recent than "
+#~ "DAYS\n"
+#~ "  -u, --user LOGIN              display faillog record or maintains "
+#~ "failure\n"
+#~ "                                counters and limits (if used with -r, -m "
+#~ "or -l\n"
+#~ "                                options) only for user with LOGIN\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:faillog [選項]\n"
+#~ "\n"
+#~ "選項:\n"
+#~ "  -a, --all\t\t\t顯示所有的使用者的失敗記錄\n"
+#~ "  -h, --help\t\t\t顯示這份說明文字然後結束\n"
+#~ "  -l, --lock-time SEC\t\t在登入失敗後,關閉帳號 SEC 秒\n"
+#~ "  -m, --maximum MAX\t\t設定最多能登入失敗 MAX 次\n"
+#~ "  -r, --reset\t\t\t重新設定登入失敗計數\n"
+#~ "  -t, --time DAYS\t\t顯示最近 DAYS 內的失敗記錄。\n"
+#~ "  -u, --user LOGIN\t\t根據指定的 LOGIN 顯示其失敗記錄及目前的失敗計數\n"
+#~ "\t\t\t\t及限制(當和 -r、-m 或 -l 選項搭配使用時)\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "Password set to expire."
+#~ msgstr "您的密碼已過期。"
+
+#~ msgid "%s: can't lock password file\n"
+#~ msgstr "%s:無法鎖定密碼檔\n"
+
+#~ msgid "%s: can't open password file\n"
+#~ msgstr "%s:無法打開密碼文件\n"
+
+#~ msgid "%s: can't lock shadow password file\n"
+#~ msgstr "%s:無法鎖定shadow密碼文件\n"
+
+#~ msgid "%s: can't open shadow password file\n"
+#~ msgstr "%s:無法打開影子密碼文件\n"
+
+#~ msgid "%s: can't rewrite shadow password file\n"
+#~ msgstr "%s:無法重寫shadow密碼檔案\n"
+
+#~ msgid "%s: can't rewrite password file\n"
+#~ msgstr "%s:無法重寫密碼檔案\n"
+
+#~ msgid "%s: can't update password file\n"
+#~ msgstr "%s:無法更新密碼檔案\n"
+
+#~ msgid "%s: can't update shadow password file\n"
+#~ msgstr "%s:無法更新shadow密碼檔案\n"
+
+#~ msgid "\tFull Name: %s\n"
+#~ msgstr "\t全名:%s\n"
+
+#, fuzzy
+#~ msgid "\tRoom Number: %s\n"
+#~ msgstr "房間號碼"
+
+#, fuzzy
+#~ msgid "\tWork Phone: %s\n"
+#~ msgstr "工作電話"
+
+#, fuzzy
+#~ msgid "\tHome Phone: %s\n"
+#~ msgstr "住家電話"
+
+#~ msgid "Cannot lock the password file; try again later.\n"
+#~ msgstr "無法鎖定密碼檔案﹔稍後再試。\n"
+
+#~ msgid "Cannot open the password file.\n"
+#~ msgstr "無法打開密碼檔案。\n"
+
+#~ msgid "%s: %s not found in /etc/passwd\n"
+#~ msgstr "%s:未在 /etc/passwd 中找到 %s\n"
+
+#~ msgid "Error updating the password entry.\n"
+#~ msgstr "更改密碼項目時出錯。\n"
+
+#~ msgid "Cannot commit password file changes.\n"
+#~ msgstr "無法提交密碼檔案變動。\n"
+
+#~ msgid "Cannot unlock the password file.\n"
+#~ msgstr "無法解鎖密碼檔案。\n"
+
+#~ msgid "%s: can't lock group file\n"
+#~ msgstr "%s:無法鎖定群組檔案\n"
+
+#~ msgid "%s: can't open group file\n"
+#~ msgstr "%s:無法打開群組檔案\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock gshadow file\n"
+#~ msgstr "%s:無法鎖定 shadow 檔\n"
+
+#~ msgid "%s: can't open shadow file\n"
+#~ msgstr "%s:無法打開 shadow 檔\n"
+
+#, fuzzy
+#~ msgid "%s: error updating gshadow file\n"
+#~ msgstr "%s:更新shadow檔案時出錯。\n"
+
+#, fuzzy
+#~ msgid "%s: error updating group file\n"
+#~ msgstr "%s:更新群組項目時出錯\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: unknown group %s\n"
+#~ msgstr "%s:第 %d 行:未知使用者 %s\n"
+
+#, fuzzy
+#~ msgid "%s: line %d: cannot update group entry\n"
+#~ msgstr "%s:第 %d 行:無法更新項目\n"
+
+#~ msgid "%s: can't lock shadow file\n"
+#~ msgstr "%s:無法鎖定 shadow 檔\n"
+
+#~ msgid "%s: error updating shadow file\n"
+#~ msgstr "%s:更新shadow檔案時出錯。\n"
+
+#~ msgid "%s: error updating password file\n"
+#~ msgstr "%s:更新密碼檔案時出錯。\n"
+
+#~ msgid "%s: line %d: unknown user %s\n"
+#~ msgstr "%s:第 %d 行:未知使用者 %s\n"
+
+#~ msgid "%s: line %d: cannot update password entry\n"
+#~ msgstr "%s:第 %d 行:無法更新密碼項目\n"
+
+#~ msgid "%s: unknown user\n"
+#~ msgstr "%s:未知使用者\n"
+
+#~ msgid "Unknown User: %s\n"
+#~ msgstr "未知使用者:%s\n"
+
+#~ msgid "Usage: %s [-r|-R] group\n"
+#~ msgstr "用法:%s [-r|-R] 群組\n"
+
+#~ msgid "       %s [-a user] group\n"
+#~ msgstr "       %s [-a 使用者] 群組\n"
+
+#~ msgid "       %s [-d user] group\n"
+#~ msgstr "       %s [-d 使用者] 群組\n"
+
+#~ msgid "       %s [-A user,...] [-M user,...] group\n"
+#~ msgstr "       %s [-A 使用者,...] [-M 使用者,...] 群組\n"
+
+#~ msgid "       %s [-M user,...] group\n"
+#~ msgstr "       %s [-M 使用者,...] 群組\n"
+
+#~ msgid "%s: can't get lock\n"
+#~ msgstr "%s:無法獲得鎖定\n"
+
+#~ msgid "%s: can't get shadow lock\n"
+#~ msgstr "%s:無法獲得shadow鎖定\n"
+
+#~ msgid "%s: can't open file\n"
+#~ msgstr "%s:無法打開檔案\n"
+
+#~ msgid "%s: can't re-write file\n"
+#~ msgstr "%s:無法重寫檔案\n"
+
+#~ msgid "%s: can't re-write shadow file\n"
+#~ msgstr "%s:無法重寫shadow檔案\n"
+
+#~ msgid "%s: can't unlock file\n"
+#~ msgstr "%s 無法解鎖檔案。\n"
+
+#~ msgid "%s: can't update entry\n"
+#~ msgstr "%s:無法更新項目\n"
+
+#~ msgid "%s: can't update shadow entry\n"
+#~ msgstr "%s:無法更新shadow項目\n"
+
+#~ msgid "unknown group: %s\n"
+#~ msgstr "未知群組:%s\n"
+
+#, fuzzy
+#~ msgid "%s: can't close file\n"
+#~ msgstr "%s:無法打開檔案\n"
+
+#, fuzzy
+#~ msgid "%s: can't close shadow file\n"
+#~ msgstr "%s:無法打開 shadow 檔\n"
+
+#~ msgid "Who are you?\n"
+#~ msgstr "你是誰?\n"
+
+#~ msgid "%s: unknown member %s\n"
+#~ msgstr "%s:未知成員 %s\n"
+
+#~ msgid "%s: error adding new group entry\n"
+#~ msgstr "%s:增加新群組項目時出錯\n"
+
+#~ msgid "%s: cannot rewrite group file\n"
+#~ msgstr "%s:無法重寫群組檔案\n"
+
+#~ msgid "%s: cannot rewrite shadow group file\n"
+#~ msgstr "%s:無法重寫shadow群組檔案\n"
+
+#~ msgid "%s: unable to lock group file\n"
+#~ msgstr "%s:無法鎖定群組檔案\n"
+
+#~ msgid "%s: unable to open group file\n"
+#~ msgstr "%s:無法打開群組檔案\n"
+
+#~ msgid "%s: unable to lock shadow group file\n"
+#~ msgstr "%s:無法鎖定shadow群組檔案\n"
+
+#~ msgid "%s: unable to open shadow group file\n"
+#~ msgstr "%s:無法打開shadow群組檔案\n"
+
+#, fuzzy
+#~ msgid "%s: GID %u is not unique\n"
+#~ msgstr "%s:gid %u 並不唯一\n"
+
+#~ msgid "%s: error removing group entry\n"
+#~ msgstr "%s:刪除群組項目時出錯\n"
+
+#~ msgid "%s: error removing shadow group entry\n"
+#~ msgstr "%s:刪除shadow群組項目時出錯\n"
+
+#~ msgid "%s: cannot remove user's primary group.\n"
+#~ msgstr "%s:不能刪除使用者的主群組。\n"
+
+#, fuzzy
+#~ msgid "PAM authentication failed for\n"
+#~ msgstr "%s:PAM 驗証失敗\n"
+
+#, fuzzy
+#~ msgid "Unable to lock group file\n"
+#~ msgstr "%s:無法鎖定群組檔案\n"
+
+#, fuzzy
+#~ msgid "Unable to open group file\n"
+#~ msgstr "%s:無法打開群組檔案\n"
+
+#, fuzzy
+#~ msgid "Cannot close group file\n"
+#~ msgstr "%s:無法打開群組檔案\n"
+
+#~ msgid "%s: %s not found in /etc/group\n"
+#~ msgstr "%s:未在 /etc/group 中找到 %s\n"
+
+#, fuzzy
+#~ msgid "%s: %u is not a unique GID\n"
+#~ msgstr "%s:%u 不是一個唯一的 gid\n"
+
+#~ msgid "%s: %s is not a unique name\n"
+#~ msgstr "%s:%s 不是一個唯一的名稱\n"
+
+#, fuzzy
+#~ msgid "%s: cannot rewrite passwd file\n"
+#~ msgstr "%s:無法重寫密碼檔案\n"
+
+#~ msgid "%s: unable to lock password file\n"
+#~ msgstr "%s:無法鎖定密碼檔案\n"
+
+#~ msgid "%s: unable to open password file\n"
+#~ msgstr "%s:無法打開密碼檔案\n"
+
+#~ msgid "%s: cannot lock file %s\n"
+#~ msgstr "%s:無法鎖定檔案 %s\n"
+
+#~ msgid "%s: can't update shadow entry for %s\n"
+#~ msgstr "%s:無法為 %s 更新shadow項目\n"
+
+#~ msgid "%s: can't update entry for group %s\n"
+#~ msgstr "%s:無法更新 %s 群組的項目\n"
+
+#~ msgid "%s: can't lock shadow group file\n"
+#~ msgstr "%s:無法鎖定shadow群組檔案\n"
+
+#~ msgid "%s: can't open shadow group file\n"
+#~ msgstr "%s:無法打開shadow群組檔案\n"
+
+#~ msgid "%s: can't remove shadow group %s\n"
+#~ msgstr "%s:無法移除shadow群組 %s\n"
+
+#~ msgid "%s: can't update shadow group file\n"
+#~ msgstr "%s:無法更新shadow群組檔案\n"
+
+#~ msgid "%s: can't update group file\n"
+#~ msgstr "%s 無法更新群組檔案\n"
+
+#~ msgid "%s: can't delete shadow group file\n"
+#~ msgstr "%s:無法刪除shadow群組檔案\n"
+
+#, fuzzy
+#~ msgid "unknown UID: %u\n"
+#~ msgstr "未知的 GID:%lu\n"
+
+#~ msgid "unknown GID: %lu\n"
+#~ msgstr "未知的 GID:%lu\n"
+
+#, fuzzy
+#~ msgid "%s: group ID `%s' is not valid\n"
+#~ msgstr "%s:%s 群組不存在\n"
+
+#, fuzzy
+#~ msgid "%s: user ID `%s' is not valid\n"
+#~ msgstr "%s:使用者 %s 不存在\n"
+
+#, fuzzy
+#~ msgid "%s: invalid user name `%s'\n"
+#~ msgstr "%s:無效使用者名稱“%s”\n"
+
+#~ msgid "%s: can't lock /etc/passwd.\n"
+#~ msgstr "%s:無法鎖定 /etc/passwd。\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/shadow.\n"
+#~ msgstr "%s:無法鎖定 /etc/passwd。\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/group.\n"
+#~ msgstr "%s:無法鎖定 /etc/passwd。\n"
+
+#, fuzzy
+#~ msgid "%s: can't lock /etc/gshadow.\n"
+#~ msgstr "%s:無法鎖定 /etc/passwd。\n"
+
+#~ msgid "%s: can't open files\n"
+#~ msgstr "%s:無法打開檔案\n"
+
+#~ msgid "%s: error updating files\n"
+#~ msgstr "%s:更新檔案出錯\n"
+
+#~ msgid "%s: line %d: cannot find user %s\n"
+#~ msgstr "%s:第 %d 行:無法找到使用者 %s\n"
+
+#~ msgid "%s: can't update passwd entry for %s\n"
+#~ msgstr "%s:無法為 %s 更新密碼項目\n"
+
+#~ msgid "%s: can't lock passwd file\n"
+#~ msgstr "%s:無法鎖定密碼檔案\n"
+
+#~ msgid "%s: can't open passwd file\n"
+#~ msgstr "%s:無法打開密碼檔案\n"
+
+#~ msgid "%s: can't remove shadow entry for %s\n"
+#~ msgstr "%s:無法為 %s 刪除shadow項目\n"
+
+#~ msgid "%s: can't update shadow file\n"
+#~ msgstr "%s:無法更新shadow檔案\n"
+
+#~ msgid "%s: can't update passwd file\n"
+#~ msgstr "%s:無法更新密碼檔案\n"
+
+#~ msgid "%s: can't update entry for user %s\n"
+#~ msgstr "%s:不能更新使用者 %s 的項目\n"
+
+#~ msgid "%s: can't delete shadow password file\n"
+#~ msgstr "%s:無法刪除shadow密碼檔案\n"
+
+#~ msgid "%s: unknown GID %s\n"
+#~ msgstr "%s:未知的 GID %s\n"
+
+#~ msgid "%s: unknown group %s\n"
+#~ msgstr "%s:未知的群組 %s\n"
+
+#, fuzzy
+#~ msgid "%s: Out of memory. Cannot update the shadow group database.\n"
+#~ msgstr "%s:update_gshadow 時記憶體不足\n"
+
+#~ msgid "%s: cannot rewrite password file\n"
+#~ msgstr "%s:無法重寫密碼檔案\n"
+
+#~ msgid "%s: cannot rewrite shadow password file\n"
+#~ msgstr "%s:無法重寫shadow密碼檔案\n"
+
+#~ msgid "%s: cannot lock shadow password file\n"
+#~ msgstr "%s:無法鎖定shadow密碼檔案\n"
+
+#~ msgid "%s: cannot open shadow password file\n"
+#~ msgstr "%s:無法打開shadow密碼檔案\n"
+
+#~ msgid "%s: error locking group file\n"
+#~ msgstr "%s:鎖定群組檔案時出錯\n"
+
+#~ msgid "%s: error opening group file\n"
+#~ msgstr "%s:打開群組檔案時出錯\n"
+
+#~ msgid "%s: error locking shadow group file\n"
+#~ msgstr "%s:鎖定shadow群組檔案時出錯\n"
+
+#~ msgid "%s: error opening shadow group file\n"
+#~ msgstr "%s:打開shadow群組檔案時出錯\n"
+
+#~ msgid "%s: error adding new password entry\n"
+#~ msgstr "%s:加入新密碼項目時出錯\n"
+
+#~ msgid "%s: error adding new shadow password entry\n"
+#~ msgstr "%s:加入新shadow密碼項時出錯\n"
+
+#~ msgid "%s: warning: CREATE_HOME not supported, please use -m instead.\n"
+#~ msgstr "%s:警告:CREATE_HOME 不支援,請使用 -m 參數。\n"
+
+#~ msgid "%s: error updating group entry\n"
+#~ msgstr "%s:更新群組項目時出錯\n"
+
+#, fuzzy
+#~ msgid "%s: error updating shadow group entry\n"
+#~ msgstr "%s:更新群組項目時出錯\n"
+
+#~ msgid "%s: cannot open group file\n"
+#~ msgstr "%s:無法打開群組檔案\n"
+
+#~ msgid "%s: cannot open shadow group file\n"
+#~ msgstr "%s:無法打開shadow群組檔案\n"
+
+#~ msgid "%s: error deleting password entry\n"
+#~ msgstr "%s:刪除密碼項目時出錯\n"
+
+#~ msgid "%s: error deleting shadow password entry\n"
+#~ msgstr "%s:刪除shadow密碼項目時出錯\n"
+
+#~ msgid "%s: user %s does not exist\n"
+#~ msgstr "%s:使用者 %s 不存在\n"
+
+#, fuzzy
+#~ msgid "%s: error adding new shadow group entry\n"
+#~ msgstr "%s:增加新群組項目時出錯\n"
+
+#~ msgid "%s: uid %lu is not unique\n"
+#~ msgstr "%s:uid %lu 不唯一\n"
+
+#~ msgid "%s: error changing password entry\n"
+#~ msgstr "%s:改變密碼項目時出錯\n"
+
+#~ msgid "%s: error removing password entry\n"
+#~ msgstr "%s:移除密碼項時出錯\n"
+
+#~ msgid "%s: error removing shadow password entry\n"
+#~ msgstr "%s:刪除shadow密碼項目時出錯\n"
+
+#, fuzzy
+#~ msgid "%s: can't get unique GID\n"
+#~ msgstr "%s:無法獲取獨有的 gid\n"
+
+#, fuzzy
+#~ msgid " on '%.100s' from '%.200s'"
+#~ msgstr " 在“%.100s”上,來自“%.200s”"
+
+#, fuzzy
+#~ msgid " on '%.100s'"
+#~ msgstr "在“%.100s”上"
+
+#~ msgid "%s: line %d: can't create UID\n"
+#~ msgstr "%s:第 %d 行:無法建立 UID\n"
+
+#~ msgid "%s: name %s is not unique\n"
+#~ msgstr "%s:名稱 %s 並不唯一\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: chgpasswd [options]\n"
+#~ "\n"
+#~ "Options:\n"
+#~ "  -e, --encrypted\tsupplied passwords are encrypted\n"
+#~ "  -h, --help\t\tdisplay this help message and exit\n"
+#~ "  -m, --md5\t\tuse MD5 encryption instead DES when the supplied\n"
+#~ "\t\t\tpasswords are not encrypted\n"
+#~ "\n"
+#~ msgstr ""
+#~ "用法:chpasswd [選項]\n"
+#~ "\n"
+#~ "選項:\n"
+#~ "  -e, --encrypted\t所提供的密碼已經過加密\n"
+#~ "  -h, --help\t\t顯示這份說明文字然後結束\n"
+#~ "  -m,  --md5\t\t如果所提供的密碼沒有加密,則使用 MD5 加密法\n"
+#~ "\t\t\t來替代 DES。\n"
+#~ "\n"
+
+#, fuzzy
+#~ msgid "No password.\n"
+#~ msgstr "沒有密碼檔案\n"
+
+#~ msgid "Sorry.\n"
+#~ msgstr "抱歉。\n"
+
+#~ msgid "Sorry, the password for %s cannot be changed yet.\n"
+#~ msgstr "抱歉,無法更改 %s 的密碼。\n"
+
+#~ msgid "Sorry."
+#~ msgstr "抱歉"
diff --git a/shadow.spec.in b/shadow.spec.in
new file mode 100644 (file)
index 0000000..44cacae
--- /dev/null
@@ -0,0 +1,93 @@
+# shadow-utils.spec generated automatically from shadow-utils.spec.in
+# $Id: shadow.spec.in 2333 2008-08-31 17:30:45Z nekral-guest $
+
+Summary:       Shadow password file utilities for Linux
+Name:          shadow-utils
+Version:       @VERSION@
+Release:       1
+Copyright:     Free
+Group:         Utilities/System
+Source:                ftp://pkg-shadow.alioth.debian.org/pub/pkg-shadow/%{name}-%{version}.tar.gz
+BuildRoot:     %{_tmppath}/%{name}-%{version}-root
+Obsoletes:     adduser
+
+%description
+This package includes the programs necessary to convert traditional
+V7 UNIX password files to the SVR4 shadow password format and additional
+tools to work with shadow passwords.
+       - 'pwconv' converts everything to the shadow password format.
+       - 'pwunconv' converts back to non-shadow passwords.
+       - 'pwck' checks the integrity of the password and shadow files.
+       - 'lastlog' prints out the last login times of all users.
+       - 'useradd', 'userdel', 'usermod' to manage user accounts.
+       - 'groupadd', 'groupdel', 'groupmod' to manage groups.
+
+A number of man pages are also included that relate to these utilities,
+and shadow passwords in general.
+
+%prep
+%setup
+
+%build
+%configure \
+       --disable-shared \
+       --prefix=/usr \
+       --exec-prefix=/usr
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+make install DESTDIR=$RPM_BUILD_ROOT
+
+mkdir -p $RPM_BUILD_ROOT/etc/default
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%doc doc/ANNOUNCE doc/CHANGES doc/HOWTO
+%doc doc/LICENSE doc/README doc/README.linux
+%dir /etc/default
+%config /etc/default/useradd
+%config /etc/login.defs
+%{_bindir}/chage
+%{_bindir}/gpasswd
+%{_bindir}/lastlog
+%{_mandir}/man1/chage.1*
+%{_mandir}/man1/gpasswd.1*
+%{_mandir}/man3/shadow.3*
+%{_mandir}/man5/shadow.5*
+%{_mandir}/man8/chpasswd.8*
+%{_mandir}/man8/groupadd.8*
+%{_mandir}/man8/groupdel.8*
+%{_mandir}/man8/groupmod.8*
+%{_mandir}/man8/grpck.8*
+%{_mandir}/man8/lastlog.8*
+%{_mandir}/man8/newusers.8*
+%{_mandir}/man8/pwck.8*
+%{_mandir}/man8/pwconv.8*
+%{_mandir}/man8/useradd.8*
+%{_mandir}/man8/userdel.8*
+%{_mandir}/man8/usermod.8*
+%{_sbindir}/chpasswd
+%{_sbindir}/groupadd
+%{_sbindir}/groupdel
+%{_sbindir}/groupmod
+%{_sbindir}/grpck
+%{_sbindir}/grpconv
+%{_sbindir}/grpunconv
+%{_sbindir}/newusers
+%{_sbindir}/pwck
+%{_sbindir}/pwconv
+%{_sbindir}/pwunconv
+%{_sbindir}/useradd
+%{_sbindir}/userdel
+%{_sbindir}/usermod
+
+%changelog
+* Sun Dec 14 1997 Marek Michalkiewicz <marekm@piast.t19.ds.pwr.wroc.pl>
+- Lots of changes, see doc/CHANGES for more details
+
+* Sun Jun 08 1997 Timo Karjalainen <timok@iki.fi>
+- Initial release
diff --git a/src/.indent.pro b/src/.indent.pro
new file mode 100644 (file)
index 0000000..fe572bb
--- /dev/null
@@ -0,0 +1,5 @@
+-kr
+-i8
+-bad
+-pcs
+-l80
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..6a3b4c5
--- /dev/null
@@ -0,0 +1,116 @@
+
+EXTRA_DIST = \
+       .indent.pro
+
+ubindir = ${prefix}/bin
+usbindir = ${prefix}/sbin
+suidperms = 4755
+
+INCLUDES = \
+       -I${top_srcdir}/lib \
+       -I$(top_srcdir)/libmisc
+
+# XXX why are login and su in /bin anyway (other than for
+# historical reasons)?
+#
+# if the system is screwed so badly that it can't mount /usr,
+# you can (hopefully) boot single user, and then you're root
+# so you don't need these programs for recovery.
+#
+# also /lib/libshadow.so.x.xx (if any) could be moved to /usr/lib
+# and installation would be much simpler (just two directories,
+# $prefix/bin and $prefix/sbin, no install-data hacks...)
+
+bin_PROGRAMS   = groups login su
+sbin_PROGRAMS  = nologin
+ubin_PROGRAMS  = faillog lastlog chage chfn chsh expiry gpasswd newgrp passwd
+usbin_PROGRAMS = \
+       chgpasswd \
+       chpasswd \
+       groupadd \
+       groupdel \
+       groupmems \
+       groupmod \
+       grpck \
+       grpconv \
+       grpunconv \
+       logoutd \
+       newusers \
+       pwck \
+       pwconv \
+       pwunconv \
+       useradd \
+       userdel \
+       usermod \
+       vipw
+
+# id and groups are from gnu, sulogin from sysvinit
+noinst_PROGRAMS = id sulogin
+
+suidbins       = su
+suidubins      = chage chfn chsh expiry gpasswd newgrp passwd
+if ACCT_TOOLS_SETUID
+       suidubins += chage chgpasswd chpasswd groupadd groupdel groupmod newusers useradd userdel usermod
+endif
+
+LDADD          = $(INTLLIBS) \
+                $(top_builddir)/libmisc/libmisc.a \
+                $(top_builddir)/lib/libshadow.la
+AM_CPPFLAGS    = -DLOCALEDIR=\"$(datadir)/locale\"
+
+if ACCT_TOOLS_SETUID
+LIBPAM_SUID  = $(LIBPAM)
+else
+LIBPAM_SUID  =
+endif
+
+if USE_PAM
+LIBCRYPT_NOPAM =
+else
+LIBCRYPT_NOPAM = $(LIBCRYPT)
+endif
+
+chage_LDADD    = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+chfn_LDADD     = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD)
+chgpasswd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBSELINUX) $(LIBCRYPT)
+chsh_LDADD     = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD)
+chpasswd_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT)
+gpasswd_LDADD  = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT)
+groupadd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+groupdel_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+groupmems_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX)
+groupmod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+grpck_LDADD    = $(LDADD) $(LIBSELINUX)
+grpconv_LDADD  = $(LDADD) $(LIBSELINUX)
+grpunconv_LDADD = $(LDADD) $(LIBSELINUX)
+login_SOURCES  = \
+       login.c \
+       login_nopam.c
+login_LDADD    = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD)
+newgrp_LDADD   = $(LDADD) $(LIBAUDIT) $(LIBCRYPT)
+newusers_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT)
+nologin_LDADD  =
+passwd_LDADD   = $(LDADD) $(LIBPAM) $(LIBCRACK) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT_NOPAM)
+pwck_LDADD     = $(LDADD) $(LIBSELINUX)
+pwconv_LDADD   = $(LDADD) $(LIBSELINUX)
+pwunconv_LDADD = $(LDADD) $(LIBSELINUX)
+su_SOURCES     = \
+       su.c \
+       suauth.c
+su_LDADD       = $(LDADD) $(LIBPAM) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD)
+sulogin_LDADD  = $(LDADD) $(LIBCRYPT)
+useradd_LDADD  = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+userdel_LDADD  = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+usermod_LDADD  = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+vipw_LDADD     = $(LDADD) $(LIBSELINUX)
+
+install-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+       ln -sf newgrp   $(DESTDIR)$(ubindir)/sg
+       ln -sf vipw     $(DESTDIR)$(usbindir)/vigr
+       for i in $(suidbins); do \
+               chmod -f $(suidperms) $(DESTDIR)$(bindir)/$$i; \
+       done
+       for i in $(suidubins); do \
+               chmod -f $(suidperms) $(DESTDIR)$(ubindir)/$$i; \
+       done
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644 (file)
index 0000000..3554f68
--- /dev/null
@@ -0,0 +1,954 @@
+# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = groups$(EXEEXT) login$(EXEEXT) su$(EXEEXT)
+sbin_PROGRAMS = nologin$(EXEEXT)
+ubin_PROGRAMS = faillog$(EXEEXT) lastlog$(EXEEXT) chage$(EXEEXT) \
+       chfn$(EXEEXT) chsh$(EXEEXT) expiry$(EXEEXT) gpasswd$(EXEEXT) \
+       newgrp$(EXEEXT) passwd$(EXEEXT)
+usbin_PROGRAMS = chgpasswd$(EXEEXT) chpasswd$(EXEEXT) \
+       groupadd$(EXEEXT) groupdel$(EXEEXT) groupmems$(EXEEXT) \
+       groupmod$(EXEEXT) grpck$(EXEEXT) grpconv$(EXEEXT) \
+       grpunconv$(EXEEXT) logoutd$(EXEEXT) newusers$(EXEEXT) \
+       pwck$(EXEEXT) pwconv$(EXEEXT) pwunconv$(EXEEXT) \
+       useradd$(EXEEXT) userdel$(EXEEXT) usermod$(EXEEXT) \
+       vipw$(EXEEXT)
+noinst_PROGRAMS = id$(EXEEXT) sulogin$(EXEEXT)
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" \
+       "$(DESTDIR)$(ubindir)" "$(DESTDIR)$(usbindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+ubinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+usbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(sbin_PROGRAMS) \
+       $(ubin_PROGRAMS) $(usbin_PROGRAMS)
+chage_SOURCES = chage.c
+chage_OBJECTS = chage.$(OBJEXT)
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libmisc/libmisc.a \
+       $(top_builddir)/lib/libshadow.la
+@ACCT_TOOLS_SETUID_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1)
+chage_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+chfn_SOURCES = chfn.c
+chfn_OBJECTS = chfn.$(OBJEXT)
+@USE_PAM_FALSE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1)
+chfn_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+chgpasswd_SOURCES = chgpasswd.c
+chgpasswd_OBJECTS = chgpasswd.$(OBJEXT)
+chgpasswd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+chpasswd_SOURCES = chpasswd.c
+chpasswd_OBJECTS = chpasswd.$(OBJEXT)
+chpasswd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+chsh_SOURCES = chsh.c
+chsh_OBJECTS = chsh.$(OBJEXT)
+chsh_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+expiry_SOURCES = expiry.c
+expiry_OBJECTS = expiry.$(OBJEXT)
+expiry_LDADD = $(LDADD)
+expiry_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libmisc/libmisc.a \
+       $(top_builddir)/lib/libshadow.la
+faillog_SOURCES = faillog.c
+faillog_OBJECTS = faillog.$(OBJEXT)
+faillog_LDADD = $(LDADD)
+faillog_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libmisc/libmisc.a \
+       $(top_builddir)/lib/libshadow.la
+gpasswd_SOURCES = gpasswd.c
+gpasswd_OBJECTS = gpasswd.$(OBJEXT)
+gpasswd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+groupadd_SOURCES = groupadd.c
+groupadd_OBJECTS = groupadd.$(OBJEXT)
+groupadd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+groupdel_SOURCES = groupdel.c
+groupdel_OBJECTS = groupdel.$(OBJEXT)
+groupdel_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+groupmems_SOURCES = groupmems.c
+groupmems_OBJECTS = groupmems.$(OBJEXT)
+groupmems_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
+groupmod_SOURCES = groupmod.c
+groupmod_OBJECTS = groupmod.$(OBJEXT)
+groupmod_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+groups_SOURCES = groups.c
+groups_OBJECTS = groups.$(OBJEXT)
+groups_LDADD = $(LDADD)
+groups_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libmisc/libmisc.a \
+       $(top_builddir)/lib/libshadow.la
+grpck_SOURCES = grpck.c
+grpck_OBJECTS = grpck.$(OBJEXT)
+grpck_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
+grpconv_SOURCES = grpconv.c
+grpconv_OBJECTS = grpconv.$(OBJEXT)
+grpconv_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
+grpunconv_SOURCES = grpunconv.c
+grpunconv_OBJECTS = grpunconv.$(OBJEXT)
+grpunconv_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
+id_SOURCES = id.c
+id_OBJECTS = id.$(OBJEXT)
+id_LDADD = $(LDADD)
+id_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libmisc/libmisc.a \
+       $(top_builddir)/lib/libshadow.la
+lastlog_SOURCES = lastlog.c
+lastlog_OBJECTS = lastlog.$(OBJEXT)
+lastlog_LDADD = $(LDADD)
+lastlog_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libmisc/libmisc.a \
+       $(top_builddir)/lib/libshadow.la
+am_login_OBJECTS = login.$(OBJEXT) login_nopam.$(OBJEXT)
+login_OBJECTS = $(am_login_OBJECTS)
+login_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+logoutd_SOURCES = logoutd.c
+logoutd_OBJECTS = logoutd.$(OBJEXT)
+logoutd_LDADD = $(LDADD)
+logoutd_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libmisc/libmisc.a \
+       $(top_builddir)/lib/libshadow.la
+newgrp_SOURCES = newgrp.c
+newgrp_OBJECTS = newgrp.$(OBJEXT)
+newgrp_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
+newusers_SOURCES = newusers.c
+newusers_OBJECTS = newusers.$(OBJEXT)
+newusers_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+nologin_SOURCES = nologin.c
+nologin_OBJECTS = nologin.$(OBJEXT)
+nologin_DEPENDENCIES =
+passwd_SOURCES = passwd.c
+passwd_OBJECTS = passwd.$(OBJEXT)
+passwd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4)
+pwck_SOURCES = pwck.c
+pwck_OBJECTS = pwck.$(OBJEXT)
+pwck_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
+pwconv_SOURCES = pwconv.c
+pwconv_OBJECTS = pwconv.$(OBJEXT)
+pwconv_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
+pwunconv_SOURCES = pwunconv.c
+pwunconv_OBJECTS = pwunconv.$(OBJEXT)
+pwunconv_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
+am_su_OBJECTS = su.$(OBJEXT) suauth.$(OBJEXT)
+su_OBJECTS = $(am_su_OBJECTS)
+su_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
+sulogin_SOURCES = sulogin.c
+sulogin_OBJECTS = sulogin.$(OBJEXT)
+sulogin_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
+useradd_SOURCES = useradd.c
+useradd_OBJECTS = useradd.$(OBJEXT)
+useradd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+userdel_SOURCES = userdel.c
+userdel_OBJECTS = userdel.$(OBJEXT)
+userdel_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+usermod_SOURCES = usermod.c
+usermod_OBJECTS = usermod.$(OBJEXT)
+usermod_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+vipw_SOURCES = vipw.c
+vipw_OBJECTS = vipw.$(OBJEXT)
+vipw_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = chage.c chfn.c chgpasswd.c chpasswd.c chsh.c expiry.c \
+       faillog.c gpasswd.c groupadd.c groupdel.c groupmems.c \
+       groupmod.c groups.c grpck.c grpconv.c grpunconv.c id.c \
+       lastlog.c $(login_SOURCES) logoutd.c newgrp.c newusers.c \
+       nologin.c passwd.c pwck.c pwconv.c pwunconv.c $(su_SOURCES) \
+       sulogin.c useradd.c userdel.c usermod.c vipw.c
+DIST_SOURCES = chage.c chfn.c chgpasswd.c chpasswd.c chsh.c expiry.c \
+       faillog.c gpasswd.c groupadd.c groupdel.c groupmems.c \
+       groupmod.c groups.c grpck.c grpconv.c grpunconv.c id.c \
+       lastlog.c $(login_SOURCES) logoutd.c newgrp.c newusers.c \
+       nologin.c passwd.c pwck.c pwconv.c pwunconv.c $(su_SOURCES) \
+       sulogin.c useradd.c userdel.c usermod.c vipw.c
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBAUDIT = @LIBAUDIT@
+LIBCRACK = @LIBCRACK@
+LIBCRYPT = @LIBCRYPT@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMD = @LIBMD@
+LIBOBJS = @LIBOBJS@
+LIBPAM = @LIBPAM@
+LIBS = @LIBS@
+LIBSELINUX = @LIBSELINUX@
+LIBSKEY = @LIBSKEY@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+U = @U@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLCATALOG = @XMLCATALOG@
+XML_CATALOG_FILE = @XML_CATALOG_FILE@
+XSLTPROC = @XSLTPROC@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = \
+       .indent.pro
+
+ubindir = ${prefix}/bin
+usbindir = ${prefix}/sbin
+suidperms = 4755
+INCLUDES = \
+       -I${top_srcdir}/lib \
+       -I$(top_srcdir)/libmisc
+
+suidbins = su
+suidubins = chage chfn chsh expiry gpasswd newgrp passwd
+LDADD = $(INTLLIBS) \
+                $(top_builddir)/libmisc/libmisc.a \
+                $(top_builddir)/lib/libshadow.la
+
+AM_CPPFLAGS = -DLOCALEDIR=\"$(datadir)/locale\"
+@ACCT_TOOLS_SETUID_FALSE@LIBPAM_SUID = 
+@ACCT_TOOLS_SETUID_TRUE@LIBPAM_SUID = $(LIBPAM)
+@USE_PAM_FALSE@LIBCRYPT_NOPAM = $(LIBCRYPT)
+@USE_PAM_TRUE@LIBCRYPT_NOPAM = 
+chage_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+chfn_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD)
+chgpasswd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBSELINUX) $(LIBCRYPT)
+chsh_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD)
+chpasswd_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT)
+gpasswd_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT)
+groupadd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+groupdel_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+groupmems_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX)
+groupmod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+grpck_LDADD = $(LDADD) $(LIBSELINUX)
+grpconv_LDADD = $(LDADD) $(LIBSELINUX)
+grpunconv_LDADD = $(LDADD) $(LIBSELINUX)
+login_SOURCES = \
+       login.c \
+       login_nopam.c
+
+login_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD)
+newgrp_LDADD = $(LDADD) $(LIBAUDIT) $(LIBCRYPT)
+newusers_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT)
+nologin_LDADD = 
+passwd_LDADD = $(LDADD) $(LIBPAM) $(LIBCRACK) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT_NOPAM)
+pwck_LDADD = $(LDADD) $(LIBSELINUX)
+pwconv_LDADD = $(LDADD) $(LIBSELINUX)
+pwunconv_LDADD = $(LDADD) $(LIBSELINUX)
+su_SOURCES = \
+       su.c \
+       suauth.c
+
+su_LDADD = $(LDADD) $(LIBPAM) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD)
+sulogin_LDADD = $(LDADD) $(LIBCRYPT)
+useradd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+userdel_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+usermod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX)
+vipw_LDADD = $(LDADD) $(LIBSELINUX)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(bindir)/$$f"; \
+       done
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+
+clean-noinstPROGRAMS:
+       @list='$(noinst_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
+       @list='$(sbin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-sbinPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(sbin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(sbindir)/$$f"; \
+       done
+
+clean-sbinPROGRAMS:
+       @list='$(sbin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+install-ubinPROGRAMS: $(ubin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(ubindir)" || $(MKDIR_P) "$(DESTDIR)$(ubindir)"
+       @list='$(ubin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(ubinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(ubindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(ubinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(ubindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-ubinPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(ubin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(ubindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(ubindir)/$$f"; \
+       done
+
+clean-ubinPROGRAMS:
+       @list='$(ubin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+install-usbinPROGRAMS: $(usbin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(usbindir)" || $(MKDIR_P) "$(DESTDIR)$(usbindir)"
+       @list='$(usbin_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+            || test -f $$p1 \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(usbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(usbindir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(usbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(usbindir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-usbinPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(usbin_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(usbindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(usbindir)/$$f"; \
+       done
+
+clean-usbinPROGRAMS:
+       @list='$(usbin_PROGRAMS)'; for p in $$list; do \
+         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         echo " rm -f $$p $$f"; \
+         rm -f $$p $$f ; \
+       done
+chage$(EXEEXT): $(chage_OBJECTS) $(chage_DEPENDENCIES) 
+       @rm -f chage$(EXEEXT)
+       $(LINK) $(chage_OBJECTS) $(chage_LDADD) $(LIBS)
+chfn$(EXEEXT): $(chfn_OBJECTS) $(chfn_DEPENDENCIES) 
+       @rm -f chfn$(EXEEXT)
+       $(LINK) $(chfn_OBJECTS) $(chfn_LDADD) $(LIBS)
+chgpasswd$(EXEEXT): $(chgpasswd_OBJECTS) $(chgpasswd_DEPENDENCIES) 
+       @rm -f chgpasswd$(EXEEXT)
+       $(LINK) $(chgpasswd_OBJECTS) $(chgpasswd_LDADD) $(LIBS)
+chpasswd$(EXEEXT): $(chpasswd_OBJECTS) $(chpasswd_DEPENDENCIES) 
+       @rm -f chpasswd$(EXEEXT)
+       $(LINK) $(chpasswd_OBJECTS) $(chpasswd_LDADD) $(LIBS)
+chsh$(EXEEXT): $(chsh_OBJECTS) $(chsh_DEPENDENCIES) 
+       @rm -f chsh$(EXEEXT)
+       $(LINK) $(chsh_OBJECTS) $(chsh_LDADD) $(LIBS)
+expiry$(EXEEXT): $(expiry_OBJECTS) $(expiry_DEPENDENCIES) 
+       @rm -f expiry$(EXEEXT)
+       $(LINK) $(expiry_OBJECTS) $(expiry_LDADD) $(LIBS)
+faillog$(EXEEXT): $(faillog_OBJECTS) $(faillog_DEPENDENCIES) 
+       @rm -f faillog$(EXEEXT)
+       $(LINK) $(faillog_OBJECTS) $(faillog_LDADD) $(LIBS)
+gpasswd$(EXEEXT): $(gpasswd_OBJECTS) $(gpasswd_DEPENDENCIES) 
+       @rm -f gpasswd$(EXEEXT)
+       $(LINK) $(gpasswd_OBJECTS) $(gpasswd_LDADD) $(LIBS)
+groupadd$(EXEEXT): $(groupadd_OBJECTS) $(groupadd_DEPENDENCIES) 
+       @rm -f groupadd$(EXEEXT)
+       $(LINK) $(groupadd_OBJECTS) $(groupadd_LDADD) $(LIBS)
+groupdel$(EXEEXT): $(groupdel_OBJECTS) $(groupdel_DEPENDENCIES) 
+       @rm -f groupdel$(EXEEXT)
+       $(LINK) $(groupdel_OBJECTS) $(groupdel_LDADD) $(LIBS)
+groupmems$(EXEEXT): $(groupmems_OBJECTS) $(groupmems_DEPENDENCIES) 
+       @rm -f groupmems$(EXEEXT)
+       $(LINK) $(groupmems_OBJECTS) $(groupmems_LDADD) $(LIBS)
+groupmod$(EXEEXT): $(groupmod_OBJECTS) $(groupmod_DEPENDENCIES) 
+       @rm -f groupmod$(EXEEXT)
+       $(LINK) $(groupmod_OBJECTS) $(groupmod_LDADD) $(LIBS)
+groups$(EXEEXT): $(groups_OBJECTS) $(groups_DEPENDENCIES) 
+       @rm -f groups$(EXEEXT)
+       $(LINK) $(groups_OBJECTS) $(groups_LDADD) $(LIBS)
+grpck$(EXEEXT): $(grpck_OBJECTS) $(grpck_DEPENDENCIES) 
+       @rm -f grpck$(EXEEXT)
+       $(LINK) $(grpck_OBJECTS) $(grpck_LDADD) $(LIBS)
+grpconv$(EXEEXT): $(grpconv_OBJECTS) $(grpconv_DEPENDENCIES) 
+       @rm -f grpconv$(EXEEXT)
+       $(LINK) $(grpconv_OBJECTS) $(grpconv_LDADD) $(LIBS)
+grpunconv$(EXEEXT): $(grpunconv_OBJECTS) $(grpunconv_DEPENDENCIES) 
+       @rm -f grpunconv$(EXEEXT)
+       $(LINK) $(grpunconv_OBJECTS) $(grpunconv_LDADD) $(LIBS)
+id$(EXEEXT): $(id_OBJECTS) $(id_DEPENDENCIES) 
+       @rm -f id$(EXEEXT)
+       $(LINK) $(id_OBJECTS) $(id_LDADD) $(LIBS)
+lastlog$(EXEEXT): $(lastlog_OBJECTS) $(lastlog_DEPENDENCIES) 
+       @rm -f lastlog$(EXEEXT)
+       $(LINK) $(lastlog_OBJECTS) $(lastlog_LDADD) $(LIBS)
+login$(EXEEXT): $(login_OBJECTS) $(login_DEPENDENCIES) 
+       @rm -f login$(EXEEXT)
+       $(LINK) $(login_OBJECTS) $(login_LDADD) $(LIBS)
+logoutd$(EXEEXT): $(logoutd_OBJECTS) $(logoutd_DEPENDENCIES) 
+       @rm -f logoutd$(EXEEXT)
+       $(LINK) $(logoutd_OBJECTS) $(logoutd_LDADD) $(LIBS)
+newgrp$(EXEEXT): $(newgrp_OBJECTS) $(newgrp_DEPENDENCIES) 
+       @rm -f newgrp$(EXEEXT)
+       $(LINK) $(newgrp_OBJECTS) $(newgrp_LDADD) $(LIBS)
+newusers$(EXEEXT): $(newusers_OBJECTS) $(newusers_DEPENDENCIES) 
+       @rm -f newusers$(EXEEXT)
+       $(LINK) $(newusers_OBJECTS) $(newusers_LDADD) $(LIBS)
+nologin$(EXEEXT): $(nologin_OBJECTS) $(nologin_DEPENDENCIES) 
+       @rm -f nologin$(EXEEXT)
+       $(LINK) $(nologin_OBJECTS) $(nologin_LDADD) $(LIBS)
+passwd$(EXEEXT): $(passwd_OBJECTS) $(passwd_DEPENDENCIES) 
+       @rm -f passwd$(EXEEXT)
+       $(LINK) $(passwd_OBJECTS) $(passwd_LDADD) $(LIBS)
+pwck$(EXEEXT): $(pwck_OBJECTS) $(pwck_DEPENDENCIES) 
+       @rm -f pwck$(EXEEXT)
+       $(LINK) $(pwck_OBJECTS) $(pwck_LDADD) $(LIBS)
+pwconv$(EXEEXT): $(pwconv_OBJECTS) $(pwconv_DEPENDENCIES) 
+       @rm -f pwconv$(EXEEXT)
+       $(LINK) $(pwconv_OBJECTS) $(pwconv_LDADD) $(LIBS)
+pwunconv$(EXEEXT): $(pwunconv_OBJECTS) $(pwunconv_DEPENDENCIES) 
+       @rm -f pwunconv$(EXEEXT)
+       $(LINK) $(pwunconv_OBJECTS) $(pwunconv_LDADD) $(LIBS)
+su$(EXEEXT): $(su_OBJECTS) $(su_DEPENDENCIES) 
+       @rm -f su$(EXEEXT)
+       $(LINK) $(su_OBJECTS) $(su_LDADD) $(LIBS)
+sulogin$(EXEEXT): $(sulogin_OBJECTS) $(sulogin_DEPENDENCIES) 
+       @rm -f sulogin$(EXEEXT)
+       $(LINK) $(sulogin_OBJECTS) $(sulogin_LDADD) $(LIBS)
+useradd$(EXEEXT): $(useradd_OBJECTS) $(useradd_DEPENDENCIES) 
+       @rm -f useradd$(EXEEXT)
+       $(LINK) $(useradd_OBJECTS) $(useradd_LDADD) $(LIBS)
+userdel$(EXEEXT): $(userdel_OBJECTS) $(userdel_DEPENDENCIES) 
+       @rm -f userdel$(EXEEXT)
+       $(LINK) $(userdel_OBJECTS) $(userdel_LDADD) $(LIBS)
+usermod$(EXEEXT): $(usermod_OBJECTS) $(usermod_DEPENDENCIES) 
+       @rm -f usermod$(EXEEXT)
+       $(LINK) $(usermod_OBJECTS) $(usermod_LDADD) $(LIBS)
+vipw$(EXEEXT): $(vipw_OBJECTS) $(vipw_DEPENDENCIES) 
+       @rm -f vipw$(EXEEXT)
+       $(LINK) $(vipw_OBJECTS) $(vipw_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chage.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chfn.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chgpasswd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chpasswd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chsh.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expiry.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/faillog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpasswd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupadd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupdel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupmems.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupmod.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groups.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpck.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpconv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpunconv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lastlog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/login.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/login_nopam.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logoutd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newgrp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newusers.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nologin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/passwd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwck.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwconv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwunconv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/su.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/suauth.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sulogin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/useradd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/userdel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usermod.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vipw.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(ubindir)" "$(DESTDIR)$(usbindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+       clean-noinstPROGRAMS clean-sbinPROGRAMS clean-ubinPROGRAMS \
+       clean-usbinPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-ubinPROGRAMS install-usbinPROGRAMS
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS install-sbinPROGRAMS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-sbinPROGRAMS \
+       uninstall-ubinPROGRAMS uninstall-usbinPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+       clean-generic clean-libtool clean-noinstPROGRAMS \
+       clean-sbinPROGRAMS clean-ubinPROGRAMS clean-usbinPROGRAMS \
+       ctags distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-binPROGRAMS \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-sbinPROGRAMS \
+       install-strip install-ubinPROGRAMS install-usbinPROGRAMS \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am uninstall-binPROGRAMS \
+       uninstall-sbinPROGRAMS uninstall-ubinPROGRAMS \
+       uninstall-usbinPROGRAMS
+
+@ACCT_TOOLS_SETUID_TRUE@       suidubins += chage chgpasswd chpasswd groupadd groupdel groupmod newusers useradd userdel usermod
+
+install-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+       ln -sf newgrp   $(DESTDIR)$(ubindir)/sg
+       ln -sf vipw     $(DESTDIR)$(usbindir)/vigr
+       for i in $(suidbins); do \
+               chmod -f $(suidperms) $(DESTDIR)$(bindir)/$$i; \
+       done
+       for i in $(suidubins); do \
+               chmod -f $(suidperms) $(DESTDIR)$(ubindir)/$$i; \
+       done
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/chage.c b/src/chage.c
new file mode 100644 (file)
index 0000000..67a5c1d
--- /dev/null
@@ -0,0 +1,942 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: chage.c 2851 2009-04-30 21:39:38Z nekral-guest $"
+
+#include <ctype.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <time.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+#include <pwd.h>
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#include <selinux/av_permissions.h>
+#endif
+#include "prototypes.h"
+#include "defines.h"
+#include "pwio.h"
+#include "shadowio.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+char *Prog;
+
+static bool
+    dflg = false,              /* set last password change date */
+    Eflg = false,              /* set account expiration date */
+    Iflg = false,              /* set password inactive after expiration */
+    lflg = false,              /* show account aging information */
+    mflg = false,              /* set minimum number of days before password change */
+    Mflg = false,              /* set maximum number of days before password change */
+    Wflg = false;              /* set expiration warning days */
+static bool amroot = false;
+
+static bool pw_locked  = false;        /* Indicate if the password file is locked */
+static bool spw_locked = false;        /* Indicate if the shadow file is locked */
+/* The name and UID of the user being worked on */
+static char user_name[BUFSIZ] = "";
+static uid_t user_uid = -1;
+
+static long mindays;
+static long maxdays;
+static long lstchgdate;
+static long warndays;
+static long inactdays;
+static long expdate;
+
+#define        EPOCH           "1969-12-31"
+
+/* local function prototypes */
+static bool isnum (const char *s);
+static void usage (void);
+static void date_to_str (char *buf, size_t maxsize, time_t date);
+static int new_fields (void);
+static void print_date (time_t date);
+static void list_fields (void);
+static void process_flags (int argc, char **argv);
+static void check_flags (int argc, int opt_index);
+static void check_perms (void);
+static void open_files (bool readonly);
+static void close_files (void);
+static void fail_exit (int code);
+
+/*
+ * fail_exit - do some cleanup and exit with the given error code
+ */
+static void fail_exit (int code)
+{
+       if (spw_locked) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+       }
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+       closelog ();
+
+#ifdef WITH_AUDIT
+       if (E_SUCCESS != code) {
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "change age",
+                             user_name, (unsigned int) user_uid, 0);
+       }
+#endif
+
+       exit (code);
+}
+
+/*
+ * isnum - determine whether or not a string is a number
+ */
+static bool isnum (const char *s)
+{
+       while ('\0' != *s) {
+               if (!isdigit (*s)) {
+                       return false;
+               }
+               s++;
+       }
+       return true;
+}
+
+/*
+ * usage - print command line syntax and exit
+ */
+static void usage (void)
+{
+       fputs (_("Usage: chage [options] [LOGIN]\n"
+                "\n"
+                "Options:\n"
+                "  -d, --lastday LAST_DAY        set date of last password change to LAST_DAY\n"
+                "  -E, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+                "  -h, --help                    display this help message and exit\n"
+                "  -I, --inactive INACTIVE       set password inactive after expiration\n"
+                "                                to INACTIVE\n"
+                "  -l, --list                    show account aging information\n"
+                "  -m, --mindays MIN_DAYS        set minimum number of days before password\n"
+                "                                change to MIN_DAYS\n"
+                "  -M, --maxdays MAX_DAYS        set maximim number of days before password\n"
+                "                                change to MAX_DAYS\n"
+                "  -W, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+                "\n"), stderr);
+       exit (E_USAGE);
+}
+
+static void date_to_str (char *buf, size_t maxsize, time_t date)
+{
+       struct tm *tp;
+
+       tp = gmtime (&date);
+#ifdef HAVE_STRFTIME
+       (void) strftime (buf, maxsize, "%Y-%m-%d", tp);
+#else
+       (void) snprintf (buf, maxsize, "%04d-%02d-%02d",
+                        tp->tm_year + 1900, tp->tm_mon + 1, tp->tm_mday);
+#endif                         /* HAVE_STRFTIME */
+}
+
+/*
+ * new_fields - change the user's password aging information interactively.
+ *
+ * prompt the user for all of the password age values. set the fields
+ * from the user's response, or leave alone if nothing was entered. The
+ * value (-1) is used to indicate the field should be removed if possible.
+ * any other negative value is an error. very large positive values will
+ * be handled elsewhere.
+ */
+static int new_fields (void)
+{
+       char buf[200];
+
+       (void) puts (_("Enter the new value, or press ENTER for the default"));
+       (void) puts ("");
+
+       snprintf (buf, sizeof buf, "%ld", mindays);
+       change_field (buf, sizeof buf, _("Minimum Password Age"));
+       if (   (getlong (buf, &mindays) == 0)
+           || (mindays < -1)) {
+               return 0;
+       }
+
+       snprintf (buf, sizeof buf, "%ld", maxdays);
+       change_field (buf, sizeof buf, _("Maximum Password Age"));
+       if (   (getlong (buf, &maxdays) == 0)
+           || (maxdays < -1)) {
+               return 0;
+       }
+
+       date_to_str (buf, sizeof buf, lstchgdate * SCALE);
+
+       change_field (buf, sizeof buf, _("Last Password Change (YYYY-MM-DD)"));
+
+       if (strcmp (buf, EPOCH) == 0) {
+               lstchgdate = -1;
+       } else {
+               lstchgdate = strtoday (buf);
+               if (lstchgdate == -1) {
+                       return 0;
+               }
+       }
+
+       snprintf (buf, sizeof buf, "%ld", warndays);
+       change_field (buf, sizeof buf, _("Password Expiration Warning"));
+       if (   (getlong (buf, &warndays) == 0)
+           || (warndays < -1)) {
+               return 0;
+       }
+
+       snprintf (buf, sizeof buf, "%ld", inactdays);
+       change_field (buf, sizeof buf, _("Password Inactive"));
+       if (   (getlong (buf, &inactdays) == 0)
+           || (inactdays < -1)) {
+               return 0;
+       }
+
+       date_to_str (buf, sizeof buf, expdate * SCALE);
+
+       change_field (buf, sizeof buf,
+                     _("Account Expiration Date (YYYY-MM-DD)"));
+
+       if (strcmp (buf, EPOCH) == 0) {
+               expdate = -1;
+       } else {
+               expdate = strtoday (buf);
+               if (expdate == -1) {
+                       return 0;
+               }
+       }
+
+       return 1;
+}
+
+static void print_date (time_t date)
+{
+#ifdef HAVE_STRFTIME
+       struct tm *tp;
+       char buf[80];
+
+       tp = gmtime (&date);
+       if (NULL == tp) {
+               (void) printf ("time_t: %lu\n", date);
+       } else {
+               (void) strftime (buf, sizeof buf, "%b %d, %Y", tp);
+               (void) puts (buf);
+       }
+#else
+       struct tm *tp;
+       char *cp = NULL;
+
+       tp = gmtime (&date);
+       if (NULL != tp) {
+               cp = asctime (tp);
+       }
+       if (NULL != cp) {
+               (void) printf ("%6.6s, %4.4s\n", cp + 4, cp + 20);
+       } else {
+               (void) printf ("time_t: %lu\n", date);
+       }
+#endif
+}
+
+/*
+ * list_fields - display the current values of the expiration fields
+ *
+ * display the password age information from the password fields. Date
+ * values will be displayed as a calendar date, or the word "never" if
+ * the date is 1/1/70, which is day number 0.
+ */
+static void list_fields (void)
+{
+       long changed = 0;
+       long expires;
+
+       /*
+        * The "last change" date is either "never" or the date the password
+        * was last modified. The date is the number of days since 1/1/1970.
+        */
+       (void) fputs (_("Last password change\t\t\t\t\t: "), stdout);
+       if (lstchgdate < 0) {
+               (void) puts (_("never"));
+       } else if (lstchgdate == 0) {
+               (void) puts (_("password must be changed"));
+       } else {
+               changed = lstchgdate * SCALE;
+               print_date ((time_t) changed);
+       }
+
+       /*
+        * The password expiration date is determined from the last change
+        * date plus the number of days the password is valid for.
+        */
+       (void) fputs (_("Password expires\t\t\t\t\t: "), stdout);
+       if (lstchgdate == 0) {
+               (void) puts (_("password must be changed"));
+       } else if (   (lstchgdate < 0)
+                  || (maxdays >= (10000 * (DAY / SCALE)))
+                  || (maxdays < 0)) {
+               (void) puts (_("never"));
+       } else {
+               expires = changed + maxdays * SCALE;
+               print_date ((time_t) expires);
+       }
+
+       /*
+        * The account becomes inactive if the password is expired for more
+        * than "inactdays". The expiration date is calculated and the
+        * number of inactive days is added. The resulting date is when the
+        * active will be disabled.
+        */
+       (void) fputs (_("Password inactive\t\t\t\t\t: "), stdout);
+       if (lstchgdate == 0) {
+               (void) puts (_("password must be changed"));
+       } else if (   (lstchgdate < 0)
+                  || (inactdays < 0)
+                  || (maxdays >= (10000 * (DAY / SCALE)))
+                  || (maxdays < 0)) {
+               (void) puts (_("never"));
+       } else {
+               expires = changed + (maxdays + inactdays) * SCALE;
+               print_date ((time_t) expires);
+       }
+
+       /*
+        * The account will expire on the given date regardless of the
+        * password expiring or not.
+        */
+       (void) fputs (_("Account expires\t\t\t\t\t\t: "), stdout);
+       if (expdate < 0) {
+               (void) puts (_("never"));
+       } else {
+               expires = expdate * SCALE;
+               print_date ((time_t) expires);
+       }
+
+       /*
+        * Start with the easy numbers - the number of days before the
+        * password can be changed, the number of days after which the
+        * password must be chaged, the number of days before the password
+        * expires that the user is told, and the number of days after the
+        * password expires that the account becomes unusable.
+        */
+       printf (_("Minimum number of days between password change\t\t: %ld\n"),
+               mindays);
+       printf (_("Maximum number of days between password change\t\t: %ld\n"),
+               maxdays);
+       printf (_("Number of days of warning before password expires\t: %ld\n"),
+               warndays);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ *     It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+       /*
+        * Parse the command line options.
+        */
+       int option_index = 0;
+       int c;
+       static struct option long_options[] = {
+               {"lastday", required_argument, NULL, 'd'},
+               {"expiredate", required_argument, NULL, 'E'},
+               {"help", no_argument, NULL, 'h'},
+               {"inactive", required_argument, NULL, 'I'},
+               {"list", no_argument, NULL, 'l'},
+               {"mindays", required_argument, NULL, 'm'},
+               {"maxdays", required_argument, NULL, 'M'},
+               {"warndays", required_argument, NULL, 'W'},
+               {NULL, 0, NULL, '\0'}
+       };
+
+       while ((c =
+               getopt_long (argc, argv, "d:E:hI:lm:M:W:", long_options,
+                            &option_index)) != -1) {
+               switch (c) {
+               case 'd':
+                       dflg = true;
+                       if (!isnum (optarg)) {
+                               lstchgdate = strtoday (optarg);
+                       } else if (   (getlong (optarg, &lstchgdate) == 0)
+                                  || (lstchgdate < -1)) {
+                               fprintf (stderr,
+                                        _("%s: invalid date '%s'\n"),
+                                        Prog, optarg);
+                               usage ();
+                       }
+                       break;
+               case 'E':
+                       Eflg = true;
+                       if (!isnum (optarg)) {
+                               expdate = strtoday (optarg);
+                       } else if (   (getlong (optarg, &expdate) == 0)
+                                  || (expdate < -1)) {
+                               fprintf (stderr,
+                                        _("%s: invalid date '%s'\n"),
+                                        Prog, optarg);
+                               usage ();
+                       }
+                       break;
+               case 'h':
+                       usage ();
+                       break;
+               case 'I':
+                       Iflg = true;
+                       if (   (getlong (optarg, &inactdays) == 0)
+                           || (inactdays < -1)) {
+                               fprintf (stderr,
+                                        _("%s: invalid numeric argument '%s'\n"),
+                                        Prog, optarg);
+                               usage ();
+                       }
+                       break;
+               case 'l':
+                       lflg = true;
+                       break;
+               case 'm':
+                       mflg = true;
+                       if (   (getlong (optarg, &mindays) == 0)
+                           || (mindays < -1)) {
+                               fprintf (stderr,
+                                        _("%s: invalid numeric argument '%s'\n"),
+                                        Prog, optarg);
+                               usage ();
+                       }
+                       break;
+               case 'M':
+                       Mflg = true;
+                       if (   (getlong (optarg, &maxdays) == 0)
+                           || (maxdays < -1)) {
+                               fprintf (stderr,
+                                        _("%s: invalid numeric argument '%s'\n"),
+                                        Prog, optarg);
+                               usage ();
+                       }
+                       break;
+               case 'W':
+                       Wflg = true;
+                       if (   (getlong (optarg, &warndays) == 0)
+                           || (warndays < -1)) {
+                               fprintf (stderr,
+                                        _("%s: invalid numeric argument '%s'\n"),
+                                        Prog, optarg);
+                               usage ();
+                       }
+                       break;
+               default:
+                       usage ();
+               }
+       }
+
+       check_flags (argc, optind);
+}
+
+/*
+ * check_flags - check flags and parameters consistency
+ *
+ *     It will not return if an error is encountered.
+ */
+static void check_flags (int argc, int opt_index)
+{
+       /*
+        * Make certain the flags do not conflict and that there is a user
+        * name on the command line.
+        */
+
+       if (argc != opt_index + 1) {
+               usage ();
+       }
+
+       if (lflg && (mflg || Mflg || dflg || Wflg || Iflg || Eflg)) {
+               fprintf (stderr,
+                        _("%s: do not include \"l\" with other flags\n"),
+                        Prog);
+               usage ();
+       }
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ *     Non-root users are only allowed to display their aging information.
+ *     (we will later make sure that the user is only listing her aging
+ *     information)
+ *
+ *     With PAM support, the setuid bit can be set on chage to allow
+ *     non-root users to groups.
+ *     Without PAM support, only users who can write in the group databases
+ *     can add groups.
+ *
+ *     It will not return if the user is not allowed.
+ */
+static void check_perms (void)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       pam_handle_t *pamh = NULL;
+       struct passwd *pampw;
+       int retval;
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+
+       /*
+        * An unprivileged user can ask for their own aging information, but
+        * only root can change it, or list another user's aging
+        * information.
+        */
+
+       if (!amroot && !lflg) {
+               fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+               fail_exit (E_NOPERM);
+       }
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+       if (NULL == pampw) {
+               fprintf (stderr,
+                        _("%s: Cannot determine your user name.\n"),
+                        Prog);
+               exit (E_NOPERM);
+       }
+
+       retval = pam_start ("chage", pampw->pw_name, &conv, &pamh);
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_authenticate (pamh, 0);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_acct_mgmt (pamh, 0);
+       }
+
+       if (NULL != pamh) {
+               (void) pam_end (pamh, retval);
+       }
+       if (PAM_SUCCESS != retval) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               fail_exit (E_NOPERM);
+       }
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+}
+
+/*
+ * open_files - open the shadow database
+ *
+ *     In read-only mode, the databases are not locked and are opened
+ *     only for reading.
+ */
+static void open_files (bool readonly)
+{
+       /*
+        * Lock and open the password file. This loads all of the password
+        * file entries into memory. Then we get a pointer to the password
+        * file entry for the requested user.
+        */
+       if (!readonly) {
+               if (pw_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, pw_dbname ());
+                       fail_exit (E_NOPERM);
+               }
+               pw_locked = true;
+       }
+       if (pw_open (readonly ? O_RDONLY: O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_WARN, "cannot open %s", pw_dbname ()));
+               fail_exit (E_NOPERM);
+       }
+
+       /*
+        * For shadow password files we have to lock the file and read in
+        * the entries as was done for the password file. The user entries
+        * does not have to exist in this case; a new entry will be created
+        * for this user if one does not exist already.
+        */
+       if (!readonly) {
+               if (spw_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, spw_dbname ());
+                       fail_exit (E_NOPERM);
+               }
+               spw_locked = true;
+       }
+       if (spw_open (readonly ? O_RDONLY: O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"), Prog, spw_dbname ());
+               SYSLOG ((LOG_WARN, "cannot open %s", spw_dbname ()));
+               fail_exit (E_NOPERM);
+       }
+}
+
+/*
+ * close_files - close and unlock the password/shadow databases
+ */
+static void close_files (void)
+{
+       /*
+        * Now close the shadow password file, which will cause all of the
+        * entries to be re-written.
+        */
+       if (spw_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"), Prog, spw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+               fail_exit (E_NOPERM);
+       }
+
+       /*
+        * Close the password file. If any entries were modified, the file
+        * will be re-written.
+        */
+       if (pw_close () == 0) {
+               fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+               fail_exit (E_NOPERM);
+       }
+       if (spw_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+               /* continue */
+       }
+       spw_locked = false;
+       if (pw_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+               /* continue */
+       }
+       pw_locked = false;
+}
+
+/*
+ * update_age - update the aging information in the database
+ *
+ *     It will not return in case of error
+ */
+static void update_age (const struct spwd *sp, const struct passwd *pw)
+{
+       struct spwd spwent;
+
+       /*
+        * There was no shadow entry. The new entry will have the encrypted
+        * password transferred from the normal password file along with the
+        * aging information.
+        */
+       if (NULL == sp) {
+               struct passwd pwent = *pw;
+
+               memzero (&spwent, sizeof spwent);
+               spwent.sp_namp = xstrdup (pw->pw_name);
+               spwent.sp_pwdp = xstrdup (pw->pw_passwd);
+               spwent.sp_flag = SHADOW_SP_FLAG_UNSET;
+
+               pwent.pw_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+               if (pw_update (&pwent) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"), Prog, pw_dbname (), pwent.pw_name);
+                       fail_exit (E_NOPERM);
+               }
+       } else {
+               spwent.sp_namp = xstrdup (sp->sp_namp);
+               spwent.sp_pwdp = xstrdup (sp->sp_pwdp);
+               spwent.sp_flag = sp->sp_flag;
+       }
+
+       /*
+        * Copy the fields back to the shadow file entry and write the
+        * modified entry back to the shadow file. Closing the shadow and
+        * password files will commit any changes that have been made.
+        */
+       spwent.sp_max = maxdays;
+       spwent.sp_min = mindays;
+       spwent.sp_lstchg = lstchgdate;
+       spwent.sp_warn = warndays;
+       spwent.sp_inact = inactdays;
+       spwent.sp_expire = expdate;
+
+       if (spw_update (&spwent) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"), Prog, spw_dbname (), spwent.sp_namp);
+               fail_exit (E_NOPERM);
+       }
+
+}
+
+/*
+ * get_defaults - get the value of the fields not set from the command line
+ */
+static void get_defaults (const struct spwd *sp)
+{
+       /*
+        * Set the fields that aren't being set from the command line from
+        * the password file.
+        */
+       if (NULL != sp) {
+               if (!Mflg) {
+                       maxdays = sp->sp_max;
+               }
+               if (!mflg) {
+                       mindays = sp->sp_min;
+               }
+               if (!dflg) {
+                       lstchgdate = sp->sp_lstchg;
+               }
+               if (!Wflg) {
+                       warndays = sp->sp_warn;
+               }
+               if (!Iflg) {
+                       inactdays = sp->sp_inact;
+               }
+               if (!Eflg) {
+                       expdate = sp->sp_expire;
+               }
+       } else {
+               /*
+                * Use default values that will not change the behavior of the
+                * account.
+                */
+               if (!Mflg) {
+                       maxdays = -1;
+               }
+               if (!mflg) {
+                       mindays = -1;
+               }
+               if (!dflg) {
+                       lstchgdate = -1;
+               }
+               if (!Wflg) {
+                       warndays = -1;
+               }
+               if (!Iflg) {
+                       inactdays = -1;
+               }
+               if (!Eflg) {
+                       expdate = -1;
+               }
+       }
+}
+
+/*
+ * chage - change a user's password aging information
+ *
+ *     This command controls the password aging information.
+ *
+ *     The valid options are
+ *
+ *     -d      set last password change date (*)
+ *     -E      set account expiration date (*)
+ *     -I      set password inactive after expiration (*)
+ *     -l      show account aging information
+ *     -M      set maximim number of days before password change (*)
+ *     -m      set minimum number of days before password change (*)
+ *     -W      set expiration warning days (*)
+ *
+ *     (*) requires root permission to execute.
+ *
+ *     All of the time fields are entered in the internal format which is
+ *     either seconds or days.
+ */
+
+int main (int argc, char **argv)
+{
+       const struct spwd *sp;
+       uid_t ruid;
+       gid_t rgid;
+       const struct passwd *pw;
+
+#ifdef WITH_AUDIT
+       audit_help_open ();
+#endif
+       sanitize_env ();
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       ruid = getuid ();
+       rgid = getgid ();
+       amroot = (ruid == 0);
+#ifdef WITH_SELINUX
+       if (amroot && (is_selinux_enabled () > 0)) {
+               amroot = (selinux_check_passwd_access (PASSWD__ROOTOK) == 0);
+       }
+#endif
+
+       /*
+        * Get the program name so that error messages can use it.
+        */
+       Prog = Basename (argv[0]);
+
+       process_flags (argc, argv);
+
+       OPENLOG ("chage");
+
+       check_perms ();
+
+       if (!spw_file_present ()) {
+               fprintf (stderr,
+                        _("%s: the shadow password file is not present\n"),
+                        Prog);
+               SYSLOG ((LOG_WARN, "can't find the shadow password file"));
+               closelog ();
+               exit (E_SHADOW_NOTFOUND);
+       }
+
+       open_files (lflg);
+       /* Drop privileges */
+       if (lflg && (   (setregid (rgid, rgid) != 0)
+                    || (setreuid (ruid, ruid) != 0))) {
+               fprintf (stderr, _("%s: failed to drop privileges (%s)\n"),
+                        Prog, strerror (errno));
+               fail_exit (E_NOPERM);
+       }
+
+       pw = pw_locate (argv[optind]);
+       if (NULL == pw) {
+               fprintf (stderr, _("%s: user '%s' does not exist in %s\n"),
+                        Prog, argv[optind], pw_dbname ());
+               closelog ();
+               exit (E_NOPERM);
+       }
+
+       STRFCPY (user_name, pw->pw_name);
+       user_uid = pw->pw_uid;
+
+       sp = spw_locate (argv[optind]);
+       get_defaults(sp);
+
+       /*
+        * Print out the expiration fields if the user has requested the
+        * list option.
+        */
+       if (lflg) {
+               if (!amroot && (ruid != user_uid)) {
+                       fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+                       fail_exit (E_NOPERM);
+               }
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "display aging info",
+                             user_name, (unsigned int) user_uid, 1);
+#endif
+               list_fields ();
+               fail_exit (E_SUCCESS);
+       }
+
+       /*
+        * If none of the fields were changed from the command line, let the
+        * user interactively change them.
+        */
+       if (!mflg && !Mflg && !dflg && !Wflg && !Iflg && !Eflg) {
+               printf (_("Changing the aging information for %s\n"),
+                       user_name);
+               if (new_fields () == 0) {
+                       fprintf (stderr, _("%s: error changing fields\n"),
+                                Prog);
+                       fail_exit (E_NOPERM);
+               }
+#ifdef WITH_AUDIT
+               else {
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "change all aging information",
+                                     user_name, (unsigned int) user_uid, 1);
+               }
+#endif
+       } else {
+#ifdef WITH_AUDIT
+               if (Mflg) {
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "change max age",
+                                     user_name, (unsigned int) user_uid, 1);
+               }
+               if (mflg) {
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "change min age",
+                                     user_name, (unsigned int) user_uid, 1);
+               }
+               if (dflg) {
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "change last change date",
+                                     user_name, (unsigned int) user_uid, 1);
+               }
+               if (Wflg) {
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "change passwd warning",
+                                     user_name, (unsigned int) user_uid, 1);
+               }
+               if (Iflg) {
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "change inactive days",
+                                     user_name, (unsigned int) user_uid, 1);
+               }
+               if (Eflg) {
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "change passwd expiration",
+                                     user_name, (unsigned int) user_uid, 1);
+               }
+#endif
+       }
+
+       update_age (sp, pw);
+
+       close_files ();
+
+       SYSLOG ((LOG_INFO, "changed password expiry for %s", user_name));
+
+       closelog ();
+       exit (E_SUCCESS);
+}
+
diff --git a/src/chfn.c b/src/chfn.c
new file mode 100644 (file)
index 0000000..915202d
--- /dev/null
@@ -0,0 +1,727 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: chfn.c 2851 2009-04-30 21:39:38Z nekral-guest $"
+
+#include <fcntl.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#include <selinux/av_permissions.h>
+#endif
+#include "defines.h"
+#include "getdef.h"
+#include "nscd.h"
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif
+#include "prototypes.h"
+#include "pwauth.h"
+#include "pwio.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables.
+ */
+char *Prog;
+static char fullnm[BUFSIZ];
+static char roomno[BUFSIZ];
+static char workph[BUFSIZ];
+static char homeph[BUFSIZ];
+static char slop[BUFSIZ];
+static bool amroot;
+/* Flags */
+static bool fflg = false;              /* -f - set full name                */
+static bool rflg = false;              /* -r - set room number              */
+static bool wflg = false;              /* -w - set work phone number        */
+static bool hflg = false;              /* -h - set home phone number        */
+static bool oflg = false;              /* -o - set other information        */
+static bool pw_locked = false;
+
+/*
+ * External identifiers
+ */
+
+/* local function prototypes */
+static void fail_exit (int code);
+static void usage (void);
+static bool may_change_field (int);
+static void new_fields (void);
+static char *copy_field (char *, char *, char *);
+static void process_flags (int argc, char **argv);
+static void check_perms (const struct passwd *pw);
+static void update_gecos (const char *user, char *gecos);
+static void get_old_fields (const char *gecos);
+
+/*
+ * fail_exit - exit with an error and do some cleanup
+ */
+static void fail_exit (int code)
+{
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+       pw_locked = false;
+
+       closelog ();
+
+       exit (code);
+}
+
+/*
+ * usage - print command line syntax and exit
+ */
+static void usage (void)
+{
+       if (amroot) {
+               fprintf (stderr,
+                        _("Usage: %s [-f full_name] [-r room_no] "
+                          "[-w work_ph]\n"
+                          "\t[-h home_ph] [-o other] [user]\n"), Prog);
+       } else {
+               fprintf (stderr,
+                        _("Usage: %s [-f full_name] [-r room_no] "
+                          "[-w work_ph] [-h home_ph]\n"), Prog);
+       }
+       exit (E_USAGE);
+}
+
+/*
+ * may_change_field - indicate if the user is allowed to change a given field
+ *                    of her gecos information
+ *
+ *     root can change any field.
+ *
+ *     field should be one of 'f', 'r', 'w', 'h'
+ *
+ *     Return true if the user can change the field and false otherwise.
+ */
+static bool may_change_field (int field)
+{
+       const char *cp;
+
+       /*
+        * CHFN_RESTRICT can now specify exactly which fields may be changed
+        * by regular users, by using any combination of the following
+        * letters:
+        *  f - full name
+        *  r - room number
+        *  w - work phone
+        *  h - home phone
+        *
+        * This makes it possible to disallow changing the room number
+        * information, for example - this feature was suggested by Maciej
+        * 'Tycoon' Majchrowski.
+        *
+        * For backward compatibility, "yes" is equivalent to "rwh",
+        * "no" is equivalent to "frwh". Only root can change anything
+        * if the string is empty or not defined at all.
+        */
+       if (amroot) {
+               return true;
+       }
+
+       cp = getdef_str ("CHFN_RESTRICT");
+       if (NULL == cp) {
+               cp = "";
+       } else if (strcmp (cp, "yes") == 0) {
+               cp = "rwh";
+       } else if (strcmp (cp, "no") == 0) {
+               cp = "frwh";
+       }
+
+       if (strchr (cp, field) != NULL) {
+               return true;
+       }
+
+       return false;
+}
+
+/*
+ * new_fields - change the user's GECOS information interactively
+ *
+ * prompt the user for each of the four fields and fill in the fields from
+ * the user's response, or leave alone if nothing was entered.
+ */
+static void new_fields (void)
+{
+       puts (_("Enter the new value, or press ENTER for the default"));
+
+       if (may_change_field ('f')) {
+               change_field (fullnm, sizeof fullnm, _("Full Name"));
+       } else {
+               printf (_("\t%s: %s\n"), _("Full Name"), fullnm);
+       }
+
+       if (may_change_field ('r')) {
+               change_field (roomno, sizeof roomno, _("Room Number"));
+       } else {
+               printf (_("\t%s: %s\n"), _("Room Number"), fullnm);
+       }
+
+       if (may_change_field ('w')) {
+               change_field (workph, sizeof workph, _("Work Phone"));
+       } else {
+               printf (_("\t%s: %s\n"), _("Work Phone"), fullnm);
+       }
+
+       if (may_change_field ('h')) {
+               change_field (homeph, sizeof homeph, _("Home Phone"));
+       } else {
+               printf (_("\t%s: %s\n"), _("Home Phone"), fullnm);
+       }
+
+       if (amroot) {
+               change_field (slop, sizeof slop, _("Other"));
+       }
+}
+
+/*
+ * copy_field - get the next field from the gecos field
+ *
+ * copy_field copies the next field from the gecos field, returning a
+ * pointer to the field which follows, or NULL if there are no more fields.
+ *
+ *     in - the current GECOS field
+ *     out - where to copy the field to
+ *     extra - fields with '=' get copied here
+ */
+static char *copy_field (char *in, char *out, char *extra)
+{
+       char *cp = NULL;
+
+       while (NULL != in) {
+               cp = strchr (in, ',');
+               if (NULL != cp) {
+                       *cp++ = '\0';
+               }
+
+               if (strchr (in, '=') == NULL) {
+                       break;
+               }
+
+               if (NULL != extra) {
+                       if ('\0' != extra[0]) {
+                               strcat (extra, ",");
+                       }
+
+                       strcat (extra, in);
+               }
+               in = cp;
+       }
+       if ((NULL != in) && (NULL != out)) {
+               strcpy (out, in);
+       }
+
+       return cp;
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ *     It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+       int flag;               /* flag currently being processed    */
+
+       /* 
+        * The remaining arguments will be processed one by one and executed
+        * by this command. The name is the last argument if it does not
+        * begin with a "-", otherwise the name is determined from the
+        * environment and must agree with the real UID. Also, the UID will
+        * be checked for any commands which are restricted to root only.
+        */
+       while ((flag = getopt (argc, argv, "f:r:w:h:o:")) != EOF) {
+               switch (flag) {
+               case 'f':
+                       if (!may_change_field ('f')) {
+                               fprintf (stderr,
+                                        _("%s: Permission denied.\n"), Prog);
+                               exit (E_NOPERM);
+                       }
+                       fflg = true;
+                       STRFCPY (fullnm, optarg);
+                       break;
+               case 'h':
+                       if (!may_change_field ('h')) {
+                               fprintf (stderr,
+                                        _("%s: Permission denied.\n"), Prog);
+                               exit (E_NOPERM);
+                       }
+                       hflg = true;
+                       STRFCPY (homeph, optarg);
+                       break;
+               case 'r':
+                       if (!may_change_field ('r')) {
+                               fprintf (stderr,
+                                        _("%s: Permission denied.\n"), Prog);
+                               exit (E_NOPERM);
+                       }
+                       rflg = true;
+                       STRFCPY (roomno, optarg);
+                       break;
+               case 'o':
+                       if (!amroot) {
+                               fprintf (stderr,
+                                        _("%s: Permission denied.\n"), Prog);
+                               exit (E_NOPERM);
+                       }
+                       oflg = true;
+                       STRFCPY (slop, optarg);
+                       break;
+               case 'w':
+                       if (!may_change_field ('w')) {
+                               fprintf (stderr,
+                                        _("%s: Permission denied.\n"), Prog);
+                               exit (E_NOPERM);
+                       }
+                       wflg = true;
+                       STRFCPY (workph, optarg);
+                       break;
+               default:
+                       usage ();
+               }
+       }
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ *     Non-root users are only allowed to change their gecos field.
+ *     (see also may_change_field())
+ *
+ *     Non-root users must be authenticated.
+ *
+ *     It will not return if the user is not allowed.
+ */
+static void check_perms (const struct passwd *pw)
+{
+#ifdef USE_PAM
+       pam_handle_t *pamh = NULL;
+       int retval;
+       struct passwd *pampw;
+#endif
+
+       /*
+        * Non-privileged users are only allowed to change the gecos field
+        * if the UID of the user matches the current real UID.
+        */
+       if (!amroot && pw->pw_uid != getuid ()) {
+               fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+               closelog ();
+               exit (E_NOPERM);
+       }
+#ifdef WITH_SELINUX
+       /*
+        * If the UID of the user does not match the current real UID,
+        * check if the change is allowed by SELinux policy.
+        */
+       if ((pw->pw_uid != getuid ())
+           && (is_selinux_enabled () > 0)
+           && (selinux_check_passwd_access (PASSWD__CHFN) != 0)) {
+               fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+               closelog ();
+               exit (E_NOPERM);
+       }
+#endif
+
+#ifndef USE_PAM
+       /*
+        * Non-privileged users are optionally authenticated (must enter the
+        * password of the user whose information is being changed) before
+        * any changes can be made. Idea from util-linux chfn/chsh. 
+        * --marekm
+        */
+       if (!amroot && getdef_bool ("CHFN_AUTH")) {
+               passwd_check (pw->pw_name, pw->pw_passwd, "chfn");
+       }
+
+#else                          /* !USE_PAM */
+       pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+       if (NULL == pampw) {
+               fprintf (stderr,
+                        _("%s: Cannot determine your user name.\n"),
+                        Prog);
+               exit (E_NOPERM);
+       }
+
+       retval = pam_start ("chfn", pampw->pw_name, &conv, &pamh);
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_authenticate (pamh, 0);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_acct_mgmt (pamh, 0);
+       }
+
+       if (NULL != pamh) {
+               (void) pam_end (pamh, retval);
+       }
+       if (PAM_SUCCESS != retval) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               exit (E_NOPERM);
+       }
+#endif                         /* USE_PAM */
+}
+
+/*
+ * update_gecos - update the gecos fields in the password database
+ *
+ *     Commit the user's entry after changing her gecos field.
+ */
+static void update_gecos (const char *user, char *gecos)
+{
+       const struct passwd *pw;        /* The user's password file entry */
+       struct passwd pwent;            /* modified password file entry */
+
+       /*
+        * Before going any further, raise the ulimit to prevent colliding
+        * into a lowered ulimit, and set the real UID to root to protect
+        * against unexpected signals. Any keyboard signals are set to be
+        * ignored.
+        */
+       if (setuid (0) != 0) {
+               fputs (_("Cannot change ID to root.\n"), stderr);
+               SYSLOG ((LOG_ERR, "can't setuid(0)"));
+               fail_exit (E_NOPERM);
+       }
+       pwd_init ();
+
+       /*
+        * The passwd entry is now ready to be committed back to the
+        * password file. Get a lock on the file and open it.
+        */
+       if (pw_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, pw_dbname ());
+               fail_exit (E_NOPERM);
+       }
+       pw_locked = true;
+       if (pw_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"), Prog, pw_dbname ());
+               fail_exit (E_NOPERM);
+       }
+
+       /*
+        * Get the entry to update using pw_locate() - we want the real one
+        * from /etc/passwd, not the one from getpwnam() which could contain
+        * the shadow password if (despite the warnings) someone enables
+        * AUTOSHADOW (or SHADOW_COMPAT in libc).  --marekm
+        */
+       pw = pw_locate (user);
+       if (NULL == pw) {
+               fprintf (stderr,
+                        _("%s: user '%s' does not exist in %s\n"),
+                        Prog, user, pw_dbname ());
+               fail_exit (E_NOPERM);
+       }
+
+       /*
+        * Make a copy of the entry, then change the gecos field. The other
+        * fields remain unchanged.
+        */
+       pwent = *pw;
+       pwent.pw_gecos = gecos;
+
+       /*
+        * Update the passwd file entry. If there is a DBM file, update that
+        * entry as well.
+        */
+       if (pw_update (&pwent) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, pw_dbname (), pwent.pw_name);
+               fail_exit (E_NOPERM);
+       }
+
+       /*
+        * Changes have all been made, so commit them and unlock the file.
+        */
+       if (pw_close () == 0) {
+               fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+               fail_exit (E_NOPERM);
+       }
+       if (pw_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+               /* continue */
+       }
+       pw_locked = false;
+}
+
+/*
+ * get_old_fields - parse the old gecos and use the old value for the fields
+ *                  which are not set on the command line
+ */
+static void get_old_fields (const char *gecos)
+{
+       char *cp;               /* temporary character pointer       */
+       char old_gecos[BUFSIZ]; /* buffer for old GECOS fields       */
+       STRFCPY (old_gecos, gecos);
+
+       /*
+        * Now get the full name. It is the first comma separated field in
+        * the GECOS field.
+        */
+       cp = copy_field (old_gecos, fflg ? (char *) 0 : fullnm, slop);
+
+       /*
+        * Now get the room number. It is the next comma separated field,
+        * if there is indeed one.
+        */
+       if (NULL != cp) {
+               cp = copy_field (cp, rflg ? (char *) 0 : roomno, slop);
+       }
+
+       /*
+        * Now get the work phone number. It is the third field.
+        */
+       if (NULL != cp) {
+               cp = copy_field (cp, wflg ? (char *) 0 : workph, slop);
+       }
+
+       /*
+        * Now get the home phone number. It is the fourth field.
+        */
+       if (NULL != cp) {
+               cp = copy_field (cp, hflg ? (char *) 0 : homeph, slop);
+       }
+
+       /*
+        * Anything left over is "slop".
+        */
+       if ((NULL != cp) && !oflg) {
+               if ('\0' != slop[0]) {
+                       strcat (slop, ",");
+               }
+
+               strcat (slop, cp);
+       }
+}
+
+/*
+ * check_fields - check all of the fields for valid information
+ *
+ *     It will not return if a field is not valid.
+ */
+static void check_fields (void)
+{
+       int err;
+       err = valid_field (fullnm, ":,=");
+       if (err > 0) {
+               fprintf (stderr, _("%s: name with non-ASCII characters: '%s'\n"), Prog, fullnm);
+       } else if (err < 0) {
+               fprintf (stderr, _("%s: invalid name: '%s'\n"), Prog, fullnm);
+               fail_exit (E_NOPERM);
+       }
+       err = valid_field (roomno, ":,=");
+       if (err > 0) {
+               fprintf (stderr, _("%s: room number with non-ASCII characters: '%s'\n"), Prog, roomno);
+       } else if (err < 0) {
+               fprintf (stderr, _("%s: invalid room number: '%s'\n"),
+                        Prog, roomno);
+               fail_exit (E_NOPERM);
+       }
+       if (valid_field (workph, ":,=") != 0) {
+               fprintf (stderr, _("%s: invalid work phone: '%s'\n"),
+                        Prog, workph);
+               fail_exit (E_NOPERM);
+       }
+       if (valid_field (homeph, ":,=") != 0) {
+               fprintf (stderr, _("%s: invalid home phone: '%s'\n"),
+                        Prog, homeph);
+               fail_exit (E_NOPERM);
+       }
+       err = valid_field (slop, ":");
+       if (err > 0) {
+               fprintf (stderr, _("%s: '%s' contains non-ASCII characters\n"), Prog, slop);
+       } else if (err < 0) {
+               fprintf (stderr,
+                        _("%s: '%s' contains illegal characters\n"),
+                        Prog, slop);
+               fail_exit (E_NOPERM);
+       }
+}
+
+/*
+ * chfn - change a user's password file information
+ *
+ *     This command controls the GECOS field information in the password
+ *     file entry.
+ *
+ *     The valid options are
+ *
+ *     -f      full name
+ *     -r      room number
+ *     -w      work phone number
+ *     -h      home phone number
+ *     -o      other information (*)
+ *
+ *     (*) requires root permission to execute.
+ */
+int main (int argc, char **argv)
+{
+       const struct passwd *pw;        /* password file entry               */
+       char new_gecos[BUFSIZ]; /* buffer for new GECOS fields       */
+       char *user;
+
+       sanitize_env ();
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       /*
+        * This command behaves different for root and non-root
+        * users.
+        */
+       amroot = (getuid () == 0);
+
+       /*
+        * Get the program name. The program name is used as a
+        * prefix to most error messages.
+        */
+       Prog = Basename (argv[0]);
+
+       OPENLOG ("chfn");
+
+       /* parse the command line options */
+       process_flags (argc, argv);
+
+       /*
+        * Get the name of the user to check. It is either the command line
+        * name, or the name getlogin() returns.
+        */
+       if (optind < argc) {
+               user = argv[optind];
+               pw = xgetpwnam (user);
+               if (NULL == pw) {
+                       fprintf (stderr, _("%s: user '%s' does not exist\n"), Prog,
+                                user);
+                       fail_exit (E_NOPERM);
+               }
+       } else {
+               pw = get_my_pwent ();
+               if (NULL == pw) {
+                       fprintf (stderr,
+                                _("%s: Cannot determine your user name.\n"),
+                                Prog);
+                       SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+                                (unsigned long) getuid ()));
+                       fail_exit (E_NOPERM);
+               }
+               user = xstrdup (pw->pw_name);
+       }
+
+#ifdef USE_NIS
+       /*
+        * Now we make sure this is a LOCAL password entry for this user ...
+        */
+       if (__ispwNIS ()) {
+               char *nis_domain;
+               char *nis_master;
+
+               fprintf (stderr,
+                        _("%s: cannot change user '%s' on NIS client.\n"),
+                        Prog, user);
+
+               if (!yp_get_default_domain (&nis_domain) &&
+                   !yp_master (nis_domain, "passwd.byname", &nis_master)) {
+                       fprintf (stderr,
+                                _
+                                ("%s: '%s' is the NIS master for this client.\n"),
+                                Prog, nis_master);
+               }
+               fail_exit (E_NOPERM);
+       }
+#endif
+
+       /* Check that the caller is allowed to change the gecos of the
+        * specified user */
+       check_perms (pw);
+
+       /* If some fields were not set on the command line, load the value from
+        * the old gecos fields. */
+       get_old_fields (pw->pw_gecos);
+
+       /*
+        * If none of the fields were changed from the command line, let the
+        * user interactively change them.
+        */
+       if (!fflg && !rflg && !wflg && !hflg && !oflg) {
+               printf (_("Changing the user information for %s\n"), user);
+               new_fields ();
+       }
+
+       /*
+        * Check all of the fields for valid information
+        */
+       check_fields ();
+
+       /*
+        * Build the new GECOS field by plastering all the pieces together,
+        * if they will fit ...
+        */
+       if ((strlen (fullnm) + strlen (roomno) + strlen (workph) +
+            strlen (homeph) + strlen (slop)) > (unsigned int) 80) {
+               fprintf (stderr, _("%s: fields too long\n"), Prog);
+               fail_exit (E_NOPERM);
+       }
+       snprintf (new_gecos, sizeof new_gecos, "%s,%s,%s,%s%s%s",
+                 fullnm, roomno, workph, homeph,
+                 ('\0' != slop[0]) ? "," : "", slop);
+
+       /* Rewrite the user's gecos in the passwd file */
+       update_gecos (user, new_gecos);
+
+       SYSLOG ((LOG_INFO, "changed user '%s' information", user));
+
+       nscd_flush_cache ("passwd");
+
+       closelog ();
+       exit (E_SUCCESS);
+}
+
diff --git a/src/chgpasswd.c b/src/chgpasswd.c
new file mode 100644 (file)
index 0000000..7d5fd52
--- /dev/null
@@ -0,0 +1,544 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 2006       , Tomasz Kłoczko
+ * Copyright (c) 2006       , Jonas Meurer
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: chgpasswd.c 2851 2009-04-30 21:39:38Z nekral-guest $"
+
+#include <fcntl.h>
+#include <getopt.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+#include "defines.h"
+#include "nscd.h"
+#include "prototypes.h"
+#include "groupio.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+char *Prog;
+static bool cflg   = false;
+static bool eflg   = false;
+static bool md5flg = false;
+#ifdef USE_SHA_CRYPT
+static bool sflg   = false;
+#endif
+
+static const char *crypt_method = NULL;
+#ifdef USE_SHA_CRYPT
+static long sha_rounds = 5000;
+#endif
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+static bool sgr_locked = false;
+#endif
+static bool gr_locked = false;
+
+/* local function prototypes */
+static void fail_exit (int code);
+static void usage (void);
+static void process_flags (int argc, char **argv);
+static void check_flags (void);
+static void check_perms (void);
+static void open_files (void);
+static void close_files (void);
+
+/*
+ * fail_exit - exit with a failure code after unlocking the files
+ */
+static void fail_exit (int code)
+{
+       if (gr_locked) {
+               if (gr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+                       /* continue */
+               }
+       }
+
+#ifdef SHADOWGRP
+       if (sgr_locked) {
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                       /* continue */
+               }
+       }
+#endif
+
+       exit (code);
+}
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (void)
+{
+       fprintf (stderr, _("Usage: %s [options]\n"
+                          "\n"
+                          "Options:\n"
+                          "  -c, --crypt-method            the crypt method (one of %s)\n"
+                          "  -e, --encrypted               supplied passwords are encrypted\n"
+                          "  -h, --help                    display this help message and exit\n"
+                          "  -m, --md5                     encrypt the clear text password using\n"
+                          "                                the MD5 algorithm\n"
+                          "%s"
+                          "\n"),
+                        Prog,
+#ifndef USE_SHA_CRYPT
+                        "NONE DES MD5", ""
+#else
+                        "NONE DES MD5 SHA256 SHA512",
+                        _("  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+                          "                                crypt algorithms\n")
+#endif
+                        );
+       exit (E_USAGE);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ *     It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+       int option_index = 0;
+       int c;
+       static struct option long_options[] = {
+               {"crypt-method", required_argument, NULL, 'c'},
+               {"encrypted", no_argument, NULL, 'e'},
+               {"help", no_argument, NULL, 'h'},
+               {"md5", no_argument, NULL, 'm'},
+#ifdef USE_SHA_CRYPT
+               {"sha-rounds", required_argument, NULL, 's'},
+#endif
+               {NULL, 0, NULL, '\0'}
+       };
+
+       while ((c = getopt_long (argc, argv,
+#ifdef USE_SHA_CRYPT
+                                "c:ehms:",
+#else
+                                "c:ehm",
+#endif
+                                long_options, &option_index)) != -1) {
+               switch (c) {
+               case 'c':
+                       cflg = true;
+                       crypt_method = optarg;
+                       break;
+               case 'e':
+                       eflg = true;
+                       break;
+               case 'h':
+                       usage ();
+                       break;
+               case 'm':
+                       md5flg = true;
+                       break;
+#ifdef USE_SHA_CRYPT
+               case 's':
+                       sflg = true;
+                       if (getlong(optarg, &sha_rounds) == 0) {
+                               fprintf (stderr,
+                                        _("%s: invalid numeric argument '%s'\n"),
+                                        Prog, optarg);
+                               usage ();
+                       }
+                       break;
+#endif
+               default:
+                       usage ();
+                       break;
+               }
+       }
+
+       /* validate options */
+       check_flags ();
+}
+
+/*
+ * check_flags - check flags and parameters consistency
+ *
+ *     It will not return if an error is encountered.
+ */
+static void check_flags (void)
+{
+#ifdef USE_SHA_CRYPT
+       if (sflg && !cflg) {
+               fprintf (stderr,
+                        _("%s: %s flag is only allowed with the %s flag\n"),
+                        Prog, "-s", "-c");
+               usage ();
+       }
+#endif
+
+       if ((eflg && (md5flg || cflg)) ||
+           (md5flg && cflg)) {
+               fprintf (stderr,
+                        _("%s: the -c, -e, and -m flags are exclusive\n"),
+                        Prog);
+               usage ();
+       }
+
+       if (cflg) {
+               if (   (0 != strcmp (crypt_method, "DES"))
+                   && (0 != strcmp (crypt_method, "MD5"))
+                   && (0 != strcmp (crypt_method, "NONE"))
+#ifdef USE_SHA_CRYPT
+                   && (0 != strcmp (crypt_method, "SHA256"))
+                   && (0 != strcmp (crypt_method, "SHA512"))
+#endif
+                   ) {
+                       fprintf (stderr,
+                                _("%s: unsupported crypt method: %s\n"),
+                                Prog, crypt_method);
+                       usage ();
+               }
+       }
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ *     With PAM support, the setuid bit can be set on chgpasswd to allow
+ *     non-root users to groups.
+ *     Without PAM support, only users who can write in the group databases
+ *     can add groups.
+ *
+ *     It will not return if the user is not allowed.
+ */
+static void check_perms (void)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       pam_handle_t *pamh = NULL;
+       int retval;
+       struct passwd *pampw;
+
+       pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+       if (NULL == pampw) {
+               fprintf (stderr,
+                        _("%s: Cannot determine your user name.\n"),
+                        Prog);
+               exit (1);
+       }
+
+       retval = pam_start ("chgpasswd", pampw->pw_name, &conv, &pamh);
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_authenticate (pamh, 0);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_acct_mgmt (pamh, 0);
+       }
+
+       if (NULL != pamh) {
+               (void) pam_end (pamh, retval);
+       }
+       if (PAM_SUCCESS != retval) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               exit (1);
+       }
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+}
+
+/*
+ * open_files - lock and open the group databases
+ */
+static void open_files (void)
+{
+       /*
+        * Lock the group file and open it for reading and writing. This will
+        * bring all of the entries into memory where they may be updated.
+        */
+       if (gr_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, gr_dbname ());
+               fail_exit (1);
+       }
+       gr_locked = true;
+       if (gr_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"), Prog, gr_dbname ());
+               fail_exit (1);
+       }
+
+#ifdef SHADOWGRP
+       /* Do the same for the shadowed database, if it exist */
+       if (is_shadow_grp) {
+               if (sgr_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, sgr_dbname ());
+                       fail_exit (1);
+               }
+               sgr_locked = true;
+               if (sgr_open (O_RDWR) == 0) {
+                       fprintf (stderr, _("%s: cannot open %s\n"),
+                                Prog, sgr_dbname ());
+                       fail_exit (1);
+               }
+       }
+#endif
+}
+
+/*
+ * close_files - close and unlock the group databases
+ */
+static void close_files (void)
+{
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"),
+                                Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+                       fail_exit (1);
+               }
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                       /* continue */
+               }
+               sgr_locked = false;
+       }
+#endif
+
+       if (gr_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+               fail_exit (1);
+       }
+       if (gr_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+               /* continue */
+       }
+       gr_locked = false;
+}
+
+int main (int argc, char **argv)
+{
+       char buf[BUFSIZ];
+       char *name;
+       char *newpwd;
+       char *cp;
+
+#ifdef SHADOWGRP
+       const struct sgrp *sg;
+       struct sgrp newsg;
+#endif
+
+       const struct group *gr;
+       struct group newgr;
+       int errors = 0;
+       int line = 0;
+
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       process_flags (argc, argv);
+
+       OPENLOG ("chgpasswd");
+
+       check_perms ();
+
+#ifdef SHADOWGRP
+       is_shadow_grp = sgr_file_present ();
+#endif
+
+       open_files ();
+
+       /*
+        * Read each line, separating the group name from the password. The
+        * group entry for each group will be looked up in the appropriate
+        * file (gshadow or group) and the password changed.
+        */
+       while (fgets (buf, (int) sizeof buf, stdin) != (char *) 0) {
+               line++;
+               cp = strrchr (buf, '\n');
+               if (NULL != cp) {
+                       *cp = '\0';
+               } else {
+                       fprintf (stderr, _("%s: line %d: line too long\n"),
+                                Prog, line);
+                       errors++;
+                       continue;
+               }
+
+               /*
+                * The group's name is the first field. It is separated from
+                * the password with a ":" character which is replaced with a
+                * NUL to give the new password. The new password will then
+                * be encrypted in the normal fashion with a new salt
+                * generated, unless the '-e' is given, in which case it is
+                * assumed to already be encrypted.
+                */
+
+               name = buf;
+               cp = strchr (name, ':');
+               if (NULL != cp) {
+                       *cp = '\0';
+                       cp++;
+               } else {
+                       fprintf (stderr,
+                                _("%s: line %d: missing new password\n"),
+                                Prog, line);
+                       errors++;
+                       continue;
+               }
+               newpwd = cp;
+               if (!eflg &&
+                   (NULL == crypt_method ||
+                    0 != strcmp(crypt_method, "NONE"))) {
+                       void *arg = NULL;
+                       if (md5flg) {
+                               crypt_method = "MD5";
+                       } else if (crypt_method != NULL) {
+#ifdef USE_SHA_CRYPT
+                               if (sflg) {
+                                       arg = &sha_rounds;
+                               }
+#endif
+                       } else {
+                               crypt_method = NULL;
+                       }
+                       cp = pw_encrypt (newpwd,
+                                        crypt_make_salt(crypt_method, arg));
+               }
+
+               /*
+                * Get the group file entry for this group. The group must
+                * already exist.
+                */
+               gr = gr_locate (name);
+               if (NULL == gr) {
+                       fprintf (stderr,
+                                _("%s: line %d: group '%s' does not exist\n"), Prog,
+                                line, name);
+                       errors++;
+                       continue;
+               }
+#ifdef SHADOWGRP
+               if (is_shadow_grp) {
+                       sg = sgr_locate (name);
+               } else {
+                       sg = NULL;
+               }
+#endif
+
+               /*
+                * The freshly encrypted new password is merged into the
+                * group's entry.
+                */
+#ifdef SHADOWGRP
+               if (NULL != sg) {
+                       newsg = *sg;
+                       newsg.sg_passwd = cp;
+               } else
+#endif
+               {
+                       newgr = *gr;
+                       newgr.gr_passwd = cp;
+               }
+
+               /* 
+                * The updated group file entry is then put back and will
+                * be written to the group file later, after all the
+                * other entries have been updated as well.
+                */
+#ifdef SHADOWGRP
+               if (NULL != sg) {
+                       if (sgr_update (&newsg) == 0) {
+                               fprintf (stderr,
+                                        _("%s: line %d: failed to prepare the new %s entry '%s'\n"),
+                                        Prog, line, sgr_dbname (), newsg.sg_name);
+                               errors++;
+                               continue;
+                       }
+               } else
+#endif
+               {
+                       if (gr_update (&newgr) == 0) {
+                               fprintf (stderr,
+                                        _("%s: line %d: failed to prepare the new %s entry '%s'\n"),
+                                        Prog, line, gr_dbname (), newgr.gr_name);
+                               errors++;
+                               continue;
+                       }
+               }
+       }
+
+       /*
+        * Any detected errors will cause the entire set of changes to be
+        * aborted. Unlocking the group file will cause all of the
+        * changes to be ignored. Otherwise the file is closed, causing the
+        * changes to be written out all at once, and then unlocked
+        * afterwards.
+        */
+       if (0 != errors) {
+               fprintf (stderr,
+                        _("%s: error detected, changes ignored\n"), Prog);
+               fail_exit (1);
+       }
+
+       close_files ();
+
+       nscd_flush_cache ("group");
+
+       return (0);
+}
+
diff --git a/src/chpasswd.c b/src/chpasswd.c
new file mode 100644 (file)
index 0000000..3a0c6bf
--- /dev/null
@@ -0,0 +1,585 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: chpasswd.c 2892 2009-05-10 13:49:03Z nekral-guest $"
+
+#include <fcntl.h>
+#include <getopt.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif                         /* USE_PAM */
+#include "defines.h"
+#include "nscd.h"
+#include "prototypes.h"
+#include "pwio.h"
+#include "shadowio.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+char *Prog;
+#ifndef USE_PAM
+static bool cflg   = false;
+static bool eflg   = false;
+static bool md5flg = false;
+#ifdef USE_SHA_CRYPT
+static bool sflg   = false;
+#endif                         /* USE_SHA_CRYPT */
+
+static const char *crypt_method = NULL;
+#ifdef USE_SHA_CRYPT
+static long sha_rounds = 5000;
+#endif                         /* USE_SHA_CRYPT */
+
+static bool is_shadow_pwd;
+static bool pw_locked = false;
+static bool spw_locked = false;
+#endif                         /* !USE_PAM */
+
+/* local function prototypes */
+static void fail_exit (int code);
+static void usage (void);
+static void process_flags (int argc, char **argv);
+static void check_flags (void);
+static void check_perms (void);
+#ifndef USE_PAM
+static void open_files (void);
+static void close_files (void);
+#endif                         /* !USE_PAM */
+
+/*
+ * fail_exit - exit with a failure code after unlocking the files
+ */
+static void fail_exit (int code)
+{
+#ifndef USE_PAM
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+
+       if (spw_locked) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+       }
+#endif                         /* !USE_PAM */
+
+       exit (code);
+}
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (void)
+{
+       (void) fprintf (stderr,
+                       _("Usage: %s [options]\n"
+                         "\n"
+                         "Options:\n"),
+                       Prog);
+#ifndef USE_PAM
+       (void) fprintf (stderr,
+                       _("  -c, --crypt-method            the crypt method (one of %s)\n"),
+#ifndef USE_SHA_CRYPT
+                       "NONE DES MD5"
+#else                          /* USE_SHA_CRYPT */
+                       "NONE DES MD5 SHA256 SHA512"
+#endif                         /* USE_SHA_CRYPT */
+                      );
+       (void) fputs (_("  -e, --encrypted               supplied passwords are encrypted\n"), stderr);
+#endif                         /* !USE_PAM */
+       (void) fputs (_("  -h, --help                    display this help message and exit\n"), stderr);
+#ifndef USE_PAM
+       (void) fputs (_("  -m, --md5                     encrypt the clear text password using\n"
+                       "                                the MD5 algorithm\n"),
+                     stderr);
+#ifdef USE_SHA_CRYPT
+       (void) fputs (_("  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+                       "                                crypt algorithms\n"),
+                     stderr);
+#endif                         /* USE_SHA_CRYPT */
+#endif                         /* !USE_PAM */
+       (void) fputs ("\n", stderr);
+
+       exit (E_USAGE);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ *     It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+       int option_index = 0;
+       int c;
+       static struct option long_options[] = {
+#ifndef USE_PAM
+               {"crypt-method", required_argument, NULL, 'c'},
+               {"encrypted", no_argument, NULL, 'e'},
+               {"md5", no_argument, NULL, 'm'},
+#ifdef USE_SHA_CRYPT
+               {"sha-rounds", required_argument, NULL, 's'},
+#endif                         /* USE_SHA_CRYPT */
+#endif                         /* !USE_PAM */
+               {"help", no_argument, NULL, 'h'},
+               {NULL, 0, NULL, '\0'}
+       };
+
+       while ((c = getopt_long (argc, argv,
+#ifndef USE_PAM
+# ifdef USE_SHA_CRYPT
+                                "c:ehms:",
+# else                         /* !USE_SHA_CRYPT */
+                                "c:ehm",
+# endif                                /* !USE_SHA_CRYPT */
+#else
+                                "h",
+#endif                         /* !USE_PAM */
+                                long_options, &option_index)) != -1) {
+               switch (c) {
+               case 'h':
+                       usage ();
+                       break;
+#ifndef USE_PAM
+               case 'c':
+                       cflg = true;
+                       crypt_method = optarg;
+                       break;
+               case 'e':
+                       eflg = true;
+                       break;
+               case 'm':
+                       md5flg = true;
+                       break;
+#ifdef USE_SHA_CRYPT
+               case 's':
+                       sflg = true;
+                       if (getlong(optarg, &sha_rounds) == 0) {
+                               fprintf (stderr,
+                                        _("%s: invalid numeric argument '%s'\n"),
+                                        Prog, optarg);
+                               usage ();
+                       }
+                       break;
+#endif                         /* USE_SHA_CRYPT */
+#endif                         /* !USE_PAM */
+               default:
+                       usage ();
+                       break;
+               }
+       }
+
+       /* validate options */
+       check_flags ();
+}
+
+/*
+ * check_flags - check flags and parameters consistency
+ *
+ *     It will not return if an error is encountered.
+ */
+static void check_flags (void)
+{
+#ifndef USE_PAM
+#ifdef USE_SHA_CRYPT
+       if (sflg && !cflg) {
+               fprintf (stderr,
+                        _("%s: %s flag is only allowed with the %s flag\n"),
+                        Prog, "-s", "-c");
+               usage ();
+       }
+#endif
+
+       if ((eflg && (md5flg || cflg)) ||
+           (md5flg && cflg)) {
+               fprintf (stderr,
+                        _("%s: the -c, -e, and -m flags are exclusive\n"),
+                        Prog);
+               usage ();
+       }
+
+       if (cflg) {
+               if (   (0 != strcmp (crypt_method, "DES"))
+                   && (0 != strcmp (crypt_method, "MD5"))
+                   && (0 != strcmp (crypt_method, "NONE"))
+#ifdef USE_SHA_CRYPT
+                   && (0 != strcmp (crypt_method, "SHA256"))
+                   && (0 != strcmp (crypt_method, "SHA512"))
+#endif
+                   ) {
+                       fprintf (stderr,
+                                _("%s: unsupported crypt method: %s\n"),
+                                Prog, crypt_method);
+                       usage ();
+               }
+       }
+#endif                         /* USE_PAM */
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ *     With PAM support, the setuid bit can be set on chpasswd to allow
+ *     non-root users to groups.
+ *     Without PAM support, only users who can write in the group databases
+ *     can add groups.
+ *
+ *     It will not return if the user is not allowed.
+ */
+static void check_perms (void)
+{
+#ifdef USE_PAM
+#ifdef ACCT_TOOLS_SETUID
+       pam_handle_t *pamh = NULL;
+       int retval;
+       struct passwd *pampw;
+
+       pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+       if (NULL == pampw) {
+               fprintf (stderr,
+                        _("%s: Cannot determine your user name.\n"),
+                        Prog);
+               exit (1);
+       }
+
+       retval = pam_start ("chpasswd", pampw->pw_name, &conv, &pamh);
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_authenticate (pamh, 0);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_acct_mgmt (pamh, 0);
+       }
+
+       if (NULL != pamh) {
+               (void) pam_end (pamh, retval);
+       }
+       if (PAM_SUCCESS != retval) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               exit (1);
+       }
+#endif                         /* ACCT_TOOLS_SETUID */
+#endif                         /* USE_PAM */
+}
+
+#ifndef USE_PAM
+/*
+ * open_files - lock and open the password databases
+ */
+static void open_files (void)
+{
+       /*
+        * Lock the password file and open it for reading and writing. This
+        * will bring all of the entries into memory where they may be updated.
+        */
+       if (pw_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, pw_dbname ());
+               fail_exit (1);
+       }
+       pw_locked = true;
+       if (pw_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"), Prog, pw_dbname ());
+               fail_exit (1);
+       }
+
+       /* Do the same for the shadowed database, if it exist */
+       if (is_shadow_pwd) {
+               if (spw_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, spw_dbname ());
+                       fail_exit (1);
+               }
+               spw_locked = true;
+               if (spw_open (O_RDWR) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot open %s\n"),
+                                Prog, spw_dbname ());
+                       fail_exit (1);
+               }
+       }
+}
+
+/*
+ * close_files - close and unlock the password databases
+ */
+static void close_files (void)
+{
+       if (is_shadow_pwd) {
+               if (spw_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"),
+                                Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+                       fail_exit (1);
+               }
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+               spw_locked = false;
+       }
+
+       if (pw_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+               fail_exit (1);
+       }
+       if (pw_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+               /* continue */
+       }
+       pw_locked = false;
+}
+#endif
+
+int main (int argc, char **argv)
+{
+       char buf[BUFSIZ];
+       char *name;
+       char *newpwd;
+       char *cp;
+
+#ifndef USE_PAM
+       const struct spwd *sp;
+       struct spwd newsp;
+
+       const struct passwd *pw;
+       struct passwd newpw;
+#endif                         /* !USE_PAM */
+
+       int errors = 0;
+       int line = 0;
+
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       process_flags (argc, argv);
+
+       OPENLOG ("chpasswd");
+
+       check_perms ();
+
+#ifndef USE_PAM
+       is_shadow_pwd = spw_file_present ();
+
+       open_files ();
+#endif
+
+       /*
+        * Read each line, separating the user name from the password. The
+        * password entry for each user will be looked up in the appropriate
+        * file (shadow or passwd) and the password changed. For shadow
+        * files the last change date is set directly, for passwd files the
+        * last change date is set in the age only if aging information is
+        * present.
+        */
+       while (fgets (buf, (int) sizeof buf, stdin) != (char *) 0) {
+               line++;
+               cp = strrchr (buf, '\n');
+               if (NULL != cp) {
+                       *cp = '\0';
+               } else {
+                       if (feof (stdin) == 0) {
+                               fprintf (stderr,
+                                        _("%s: line %d: line too long\n"),
+                                        Prog, line);
+                               errors++;
+                               continue;
+                       }
+               }
+
+               /*
+                * The username is the first field. It is separated from the
+                * password with a ":" character which is replaced with a
+                * NUL to give the new password. The new password will then
+                * be encrypted in the normal fashion with a new salt
+                * generated, unless the '-e' is given, in which case it is
+                * assumed to already be encrypted.
+                */
+
+               name = buf;
+               cp = strchr (name, ':');
+               if (NULL != cp) {
+                       *cp = '\0';
+                       cp++;
+               } else {
+                       fprintf (stderr,
+                                _("%s: line %d: missing new password\n"),
+                                Prog, line);
+                       errors++;
+                       continue;
+               }
+               newpwd = cp;
+
+#ifdef USE_PAM
+               if (do_pam_passwd_non_interractive ("chpasswd", name, newpwd) != 0) {
+                       fprintf (stderr,
+                                _("%s: (line %d, user %s) password not changed\n"),
+                                Prog, line, name);
+                       errors++;
+               }
+#else                          /* !USE_PAM */
+               if (   !eflg
+                   && (   (NULL == crypt_method)
+                       || (0 != strcmp (crypt_method, "NONE")))) {
+                       void *arg = NULL;
+                       if (md5flg) {
+                               crypt_method = "MD5";
+                       } else if (crypt_method != NULL) {
+#ifdef USE_SHA_CRYPT
+                               if (sflg) {
+                                       arg = &sha_rounds;
+                               }
+#endif
+                       } else {
+                               crypt_method = NULL;
+                       }
+                       cp = pw_encrypt (newpwd,
+                                        crypt_make_salt(crypt_method, arg));
+               }
+
+               /*
+                * Get the password file entry for this user. The user must
+                * already exist.
+                */
+               pw = pw_locate (name);
+               if (NULL == pw) {
+                       fprintf (stderr,
+                                _("%s: line %d: user '%s' does not exist\n"), Prog,
+                                line, name);
+                       errors++;
+                       continue;
+               }
+               if (is_shadow_pwd) {
+                       sp = spw_locate (name);
+               } else {
+                       sp = NULL;
+               }
+
+               /*
+                * The freshly encrypted new password is merged into the
+                * user's password file entry and the last password change
+                * date is set to the current date.
+                */
+               if (NULL != sp) {
+                       newsp = *sp;
+                       newsp.sp_pwdp = cp;
+                       newsp.sp_lstchg = (long) time ((time_t *)NULL) / SCALE;
+                       if (0 == newsp.sp_lstchg) {
+                               /* Better disable aging than requiring a
+                                * password change */
+                               newsp.sp_lstchg = -1;
+                       }
+               } else {
+                       newpw = *pw;
+                       newpw.pw_passwd = cp;
+               }
+
+               /* 
+                * The updated password file entry is then put back and will
+                * be written to the password file later, after all the
+                * other entries have been updated as well.
+                */
+               if (NULL != sp) {
+                       if (spw_update (&newsp) == 0) {
+                               fprintf (stderr,
+                                        _("%s: line %d: failed to prepare the new %s entry '%s'\n"),
+                                        Prog, line, spw_dbname (), newsp.sp_namp);
+                               errors++;
+                               continue;
+                       }
+               } else {
+                       if (pw_update (&newpw) == 0) {
+                               fprintf (stderr,
+                                        _("%s: line %d: failed to prepare the new %s entry '%s'\n"),
+                                        Prog, line, pw_dbname (), newpw.pw_name);
+                               errors++;
+                               continue;
+                       }
+               }
+#endif                         /* !USE_PAM */
+       }
+
+       /*
+        * Any detected errors will cause the entire set of changes to be
+        * aborted. Unlocking the password file will cause all of the
+        * changes to be ignored. Otherwise the file is closed, causing the
+        * changes to be written out all at once, and then unlocked
+        * afterwards.
+        *
+        * With PAM, it is not possible to delay the update of the
+        * password database.
+        */
+       if (0 != errors) {
+#ifndef USE_PAM
+               fprintf (stderr,
+                        _("%s: error detected, changes ignored\n"), Prog);
+#endif
+               fail_exit (1);
+       }
+
+#ifndef USE_PAM
+       /* Save the changes */
+       close_files ();
+#endif
+
+       nscd_flush_cache ("passwd");
+
+       return (0);
+}
+
diff --git a/src/chsh.c b/src/chsh.c
new file mode 100644 (file)
index 0000000..25e4fb7
--- /dev/null
@@ -0,0 +1,551 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: chsh.c 2851 2009-04-30 21:39:38Z nekral-guest $"
+
+#include <fcntl.h>
+#include <getopt.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#include <selinux/av_permissions.h>
+#endif
+#include "defines.h"
+#include "getdef.h"
+#include "nscd.h"
+#include "prototypes.h"
+#include "pwauth.h"
+#include "pwio.h"
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+#ifndef SHELLS_FILE
+#define SHELLS_FILE "/etc/shells"
+#endif
+/*
+ * Global variables
+ */
+char *Prog;            /* Program name */
+static bool amroot;            /* Real UID is root */
+static char loginsh[BUFSIZ];   /* Name of new login shell */
+/* command line options */
+static bool sflg = false;      /* -s - set shell from command line  */
+static bool pw_locked = false;
+
+/* external identifiers */
+
+/* local function prototypes */
+static void fail_exit (int code);
+static void usage (void);
+static void new_fields (void);
+static bool shell_is_listed (const char *);
+static bool is_restricted_shell (const char *);
+static void process_flags (int argc, char **argv);
+static void check_perms (const struct passwd *pw);
+static void update_shell (const char *user, char *loginsh);
+
+/*
+ * fail_exit - do some cleanup and exit with the given error code
+ */
+static void fail_exit (int code)
+{
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+
+       closelog ();
+
+       exit (code);
+}
+
+/*
+ * usage - print command line syntax and exit
+ */
+static void usage (void)
+{
+       fputs (_("Usage: chsh [options] [LOGIN]\n"
+                "\n"
+                "Options:\n"
+                "  -h, --help                    display this help message and exit\n"
+                "  -s, --shell SHELL             new login shell for the user account\n"
+                "\n"), stderr);
+       exit (E_USAGE);
+}
+
+/*
+ * new_fields - change the user's login shell information interactively
+ *
+ * prompt the user for the login shell and change it according to the
+ * response, or leave it alone if nothing was entered.
+ */
+static void new_fields (void)
+{
+       puts (_("Enter the new value, or press ENTER for the default"));
+       change_field (loginsh, sizeof loginsh, _("Login Shell"));
+}
+
+/*
+ * is_restricted_shell - return true if the shell is restricted
+ *
+ */
+static bool is_restricted_shell (const char *sh)
+{
+       /*
+        * Shells not listed in /etc/shells are considered to be restricted.
+        * Changed this to avoid confusion with "rc" (the plan9 shell - not
+        * restricted despite the name starting with 'r').  --marekm
+        */
+       return !shell_is_listed (sh);
+}
+
+/*
+ * shell_is_listed - see if the user's login shell is listed in /etc/shells
+ *
+ * The /etc/shells file is read for valid names of login shells.  If the
+ * /etc/shells file does not exist the user cannot set any shell unless
+ * they are root.
+ *
+ * If getusershell() is available (Linux, *BSD, possibly others), use it
+ * instead of re-implementing it.
+ */
+static bool shell_is_listed (const char *sh)
+{
+       char *cp;
+       bool found = false;
+
+#ifndef HAVE_GETUSERSHELL
+       char buf[BUFSIZ];
+       FILE *fp;
+#endif
+
+#ifdef HAVE_GETUSERSHELL
+       setusershell ();
+       while ((cp = getusershell ())) {
+               if (*cp == '#') {
+                       continue;
+               }
+
+               if (strcmp (cp, sh) == 0) {
+                       found = true;
+                       break;
+               }
+       }
+       endusershell ();
+#else
+       fp = fopen (SHELLS_FILE, "r");
+       if (NULL == fp) {
+               return false;
+       }
+
+       while (fgets (buf, sizeof (buf), fp) == buf) {
+               cp = strrchr (buf, '\n');
+               if (NULL != cp) {
+                       *cp = '\0';
+               }
+
+               if (buf[0] == '#') {
+                       continue;
+               }
+
+               if (strcmp (buf, sh) == 0) {
+                       found = true;
+                       break;
+               }
+       }
+       fclose (fp);
+#endif
+       return found;
+}
+
+/*
+ *  * process_flags - parse the command line options
+ *
+ *     It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+       int option_index = 0;
+       int c;
+       static struct option long_options[] = {
+               {"help", no_argument, NULL, 'h'},
+               {"shell", required_argument, NULL, 's'},
+               {NULL, 0, NULL, '\0'}
+       };
+
+       while ((c =
+               getopt_long (argc, argv, "hs:", long_options,
+                            &option_index)) != -1) {
+               switch (c) {
+               case 'h':
+                       usage ();
+                       break;
+               case 's':
+                       sflg = true;
+                       STRFCPY (loginsh, optarg);
+                       break;
+               default:
+                       usage ();
+               }
+       }
+
+       /*
+        * There should be only one remaining argument at most and it should
+        * be the user's name.
+        */
+       if (argc > (optind + 1)) {
+               usage ();
+       }
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ *     Non-root users are only allowed to change their shell, if their current
+ *     shell is not a restricted shell.
+ *
+ *     Non-root users must be authenticated.
+ *
+ *     It will not return if the user is not allowed.
+ */
+static void check_perms (const struct passwd *pw)
+{
+#ifdef USE_PAM
+       pam_handle_t *pamh = NULL;
+       int retval;
+       struct passwd *pampw;
+#endif
+
+       /*
+        * Non-privileged users are only allowed to change the shell if the
+        * UID of the user matches the current real UID.
+        */
+       if (!amroot && pw->pw_uid != getuid ()) {
+               SYSLOG ((LOG_WARN, "can't change shell for '%s'", pw->pw_name));
+               fprintf (stderr,
+                        _("You may not change the shell for '%s'.\n"),
+                        pw->pw_name);
+               fail_exit (1);
+       }
+
+       /*
+        * Non-privileged users are only allowed to change the shell if it
+        * is not a restricted one.
+        */
+       if (!amroot && is_restricted_shell (pw->pw_shell)) {
+               SYSLOG ((LOG_WARN, "can't change shell for '%s'", pw->pw_name));
+               fprintf (stderr,
+                        _("You may not change the shell for '%s'.\n"),
+                        pw->pw_name);
+               fail_exit (1);
+       }
+#ifdef WITH_SELINUX
+       /*
+        * If the UID of the user does not match the current real UID,
+        * check if the change is allowed by SELinux policy.
+        */
+       if ((pw->pw_uid != getuid ())
+           && (is_selinux_enabled () > 0)
+           && (selinux_check_passwd_access (PASSWD__CHSH) != 0)) {
+               SYSLOG ((LOG_WARN, "can't change shell for '%s'", pw->pw_name));
+               fprintf (stderr,
+                        _("You may not change the shell for '%s'.\n"),
+                        pw->pw_name);
+               fail_exit (1);
+       }
+#endif
+
+#ifndef USE_PAM
+       /*
+        * Non-privileged users are optionally authenticated (must enter
+        * the password of the user whose information is being changed)
+        * before any changes can be made. Idea from util-linux
+        * chfn/chsh.  --marekm
+        */
+       if (!amroot && getdef_bool ("CHSH_AUTH")) {
+               passwd_check (pw->pw_name, pw->pw_passwd, "chsh");
+        }
+
+#else                          /* !USE_PAM */
+       pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+       if (NULL == pampw) {
+               fprintf (stderr,
+                        _("%s: Cannot determine your user name.\n"),
+                        Prog);
+               exit (E_NOPERM);
+       }
+
+       retval = pam_start ("chsh", pampw->pw_name, &conv, &pamh);
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_authenticate (pamh, 0);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_acct_mgmt (pamh, 0);
+       }
+
+       if (NULL != pamh) {
+               (void) pam_end (pamh, retval);
+       }
+       if (PAM_SUCCESS != retval) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               exit (E_NOPERM);
+       }
+#endif                         /* USE_PAM */
+}
+
+/*
+ * update_shell - update the user's shell in the passwd database
+ *
+ *     Commit the user's entry after changing her shell field.
+ *
+ *     It will not return in case of error.
+ */
+static void update_shell (const char *user, char *newshell)
+{
+       const struct passwd *pw;        /* Password entry from /etc/passwd   */
+       struct passwd pwent;            /* New password entry                */
+
+       /*
+        * Before going any further, raise the ulimit to prevent
+        * colliding into a lowered ulimit, and set the real UID
+        * to root to protect against unexpected signals. Any
+        * keyboard signals are set to be ignored.
+        */
+       if (setuid (0) != 0) {
+               SYSLOG ((LOG_ERR, "can't setuid(0)"));
+               fputs (_("Cannot change ID to root.\n"), stderr);
+               fail_exit (1);
+       }
+       pwd_init ();
+
+       /*
+        * The passwd entry is now ready to be committed back to
+        * the password file. Get a lock on the file and open it.
+        */
+       if (pw_lock () == 0) {
+               fprintf (stderr, _("%s: cannot lock %s; try again later.\n"),
+                        Prog, pw_dbname ());
+               fail_exit (1);
+       }
+       pw_locked = true;
+       if (pw_open (O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_WARN, "cannot open %s", pw_dbname ()));
+               fail_exit (1);
+       }
+
+       /*
+        * Get the entry to update using pw_locate() - we want the real
+        * one from /etc/passwd, not the one from getpwnam() which could
+        * contain the shadow password if (despite the warnings) someone
+        * enables AUTOSHADOW (or SHADOW_COMPAT in libc).  --marekm
+        */
+       pw = pw_locate (user);
+       if (NULL == pw) {
+               fprintf (stderr,
+                        _("%s: user '%s' does not exist in %s\n"),
+                        Prog, user, pw_dbname ());
+               fail_exit (1);
+       }
+
+       /*
+        * Make a copy of the entry, then change the shell field. The other
+        * fields remain unchanged.
+        */
+       pwent = *pw;
+       pwent.pw_shell = newshell;
+
+       /*
+        * Update the passwd file entry. If there is a DBM file, update
+        * that entry as well.
+        */
+       if (pw_update (&pwent) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, pw_dbname (), pwent.pw_name);
+               fail_exit (1);
+       }
+
+       /*
+        * Changes have all been made, so commit them and unlock the file.
+        */
+       if (pw_close () == 0) {
+               fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+               fail_exit (1);
+       }
+       if (pw_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+               /* continue */
+       }
+       pw_locked= false;
+}
+
+/*
+ * chsh - this command controls changes to the user's shell
+ *
+ *     The only supported option is -s which permits the the login shell to
+ *     be set from the command line.
+ */
+int main (int argc, char **argv)
+{
+       char *user;             /* User name                         */
+       const struct passwd *pw;        /* Password entry from /etc/passwd   */
+
+       sanitize_env ();
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       /*
+        * This command behaves different for root and non-root users.
+        */
+       amroot = (getuid () == 0);
+
+       /*
+        * Get the program name. The program name is used as a prefix to
+        * most error messages.
+        */
+       Prog = Basename (argv[0]);
+
+       OPENLOG ("chsh");
+
+       /* parse the command line options */
+       process_flags (argc, argv);
+
+       /*
+        * Get the name of the user to check. It is either the command line
+        * name, or the name getlogin() returns.
+        */
+       if (optind < argc) {
+               user = argv[optind];
+               pw = xgetpwnam (user);
+               if (NULL == pw) {
+                       fprintf (stderr,
+                                _("%s: user '%s' does not exist\n"), Prog, user);
+                       fail_exit (1);
+               }
+       } else {
+               pw = get_my_pwent ();
+               if (NULL == pw) {
+                       fprintf (stderr,
+                                _("%s: Cannot determine your user name.\n"),
+                                Prog);
+                       SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+                                (unsigned long) getuid ()));
+                       fail_exit (1);
+               }
+               user = xstrdup (pw->pw_name);
+       }
+
+#ifdef USE_NIS
+       /*
+        * Now we make sure this is a LOCAL password entry for this user ...
+        */
+       if (__ispwNIS ()) {
+               char *nis_domain;
+               char *nis_master;
+
+               fprintf (stderr,
+                        _("%s: cannot change user '%s' on NIS client.\n"),
+                        Prog, user);
+
+               if (!yp_get_default_domain (&nis_domain) &&
+                   !yp_master (nis_domain, "passwd.byname", &nis_master)) {
+                       fprintf (stderr,
+                                _("%s: '%s' is the NIS master for this client.\n"),
+                                Prog, nis_master);
+               }
+               fail_exit (1);
+       }
+#endif
+
+       check_perms (pw);
+
+       /*
+        * Now get the login shell. Either get it from the password
+        * file, or use the value from the command line.
+        */
+       if (!sflg) {
+               STRFCPY (loginsh, pw->pw_shell);
+       }
+
+       /*
+        * If the login shell was not set on the command line, let the user
+        * interactively change it.
+        */
+       if (!sflg) {
+               printf (_("Changing the login shell for %s\n"), user);
+               new_fields ();
+       }
+
+       /*
+        * Check all of the fields for valid information. The shell
+        * field may not contain any illegal characters. Non-privileged
+        * users are restricted to using the shells in /etc/shells.
+        * The shell must be executable by the user.
+        */
+       if (valid_field (loginsh, ":,=") != 0) {
+               fprintf (stderr, _("%s: Invalid entry: %s\n"), Prog, loginsh);
+               fail_exit (1);
+       }
+       if (   !amroot
+           && (   is_restricted_shell (loginsh)
+               || (access (loginsh, X_OK) != 0))) {
+               fprintf (stderr, _("%s: %s is an invalid shell.\n"), Prog, loginsh);
+               fail_exit (1);
+       }
+
+       update_shell (user, loginsh);
+
+       SYSLOG ((LOG_INFO, "changed user '%s' shell to '%s'", user, loginsh));
+
+       nscd_flush_cache ("passwd");
+
+       closelog ();
+       exit (E_SUCCESS);
+}
+
diff --git a/src/expiry.c b/src/expiry.c
new file mode 100644 (file)
index 0000000..e5b2553
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 1994       , Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: expiry.c 2650 2009-04-11 18:37:08Z nekral-guest $"
+
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "defines.h"
+#include "prototypes.h"
+
+/* Global variables */
+char *Prog;
+
+/* local function prototypes */
+static RETSIGTYPE catch_signals (int);
+static void usage (void);
+
+/*
+ * catch_signals - signal catcher
+ */
+static RETSIGTYPE catch_signals (unused int sig)
+{
+       exit (10);
+}
+
+/*
+ * usage - print syntax message and exit
+ */
+static void usage (void)
+{
+       fputs (_("Usage: expiry {-f|-c}\n"), stderr);
+       exit (10);
+}
+
+/* 
+ * expiry - check and enforce password expiration policy
+ *
+ *     expiry checks (-c) the current password expiration and forces (-f)
+ *     changes when required. It is callable as a normal user command.
+ */
+int main (int argc, char **argv)
+{
+       struct passwd *pwd;
+       struct spwd *spwd;
+
+       Prog = Basename (argv[0]);
+
+       sanitize_env ();
+
+       /* 
+        * Start by disabling all of the keyboard signals.
+        */
+       (void) signal (SIGHUP, catch_signals);
+       (void) signal (SIGINT, catch_signals);
+       (void) signal (SIGQUIT, catch_signals);
+#ifdef SIGTSTP
+       (void) signal (SIGTSTP, catch_signals);
+#endif
+
+       /*
+        * expiry takes one of two arguments. The default action is to give
+        * the usage message.
+        */
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       OPENLOG ("expiry");
+
+       if (   (argc != 2)
+           || (   (strcmp (argv[1], "-f") != 0)
+               && (strcmp (argv[1], "-c") != 0))) {
+               usage ();
+       }
+
+       /*
+        * Get user entries for /etc/passwd and /etc/shadow
+        */
+       pwd = get_my_pwent ();
+       if (NULL == pwd) {
+               fprintf (stderr, _("%s: Cannot determine your user name.\n"),
+                        Prog);
+               SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+                        (unsigned long) getuid ()));
+               exit (10);
+       }
+       spwd = getspnam (pwd->pw_name); /* !USE_PAM, No need for xgetspnam */
+
+       /*
+        * If checking accounts, use agecheck() function.
+        */
+       if (strcmp (argv[1], "-c") == 0) {
+
+               /*
+                * Print out number of days until expiration.
+                */
+               agecheck (spwd);
+
+               /*
+                * Exit with status indicating state of account.
+                */
+               exit (isexpired (pwd, spwd));
+       }
+
+       /*
+        * If forcing password change, use expire() function.
+        */
+       if (strcmp (argv[1], "-f") == 0) {
+
+               /*
+                * Just call expire(). It will force the change or give a
+                * message indicating what to do. And it doesn't return at
+                * all unless the account is unexpired.
+                */
+               expire (pwd, spwd);
+               exit (0);
+       }
+
+       /*
+        * Can't get here ...
+        */
+       usage ();
+       exit (1);
+}
+
diff --git a/src/faillog.c b/src/faillog.c
new file mode 100644 (file)
index 0000000..f9f22c8
--- /dev/null
@@ -0,0 +1,617 @@
+/*
+ * Copyright (c) 1989 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: faillog.c 3015 2009-06-05 22:16:56Z nekral-guest $"
+
+#include <getopt.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <time.h>
+#include <assert.h>
+#include "defines.h"
+#include "faillog.h"
+#include "prototypes.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+static FILE *fail;             /* failure file stream */
+static time_t seconds;         /* that number of days in seconds */
+static unsigned long umin;     /* if uflg and has_umin, only display users with uid >= umin */
+static bool has_umin = false;
+static unsigned long umax;     /* if uflg and has_umax, only display users with uid <= umax */
+static bool has_umax = false;
+static bool errors = false;
+
+static bool aflg = false;      /* set if all users are to be printed always */
+static bool uflg = false;      /* set if user is a valid user id */
+static bool tflg = false;      /* print is restricted to most recent days */
+static bool lflg = false;      /* set the locktime */
+static bool mflg = false;      /* set maximum failed login counters */
+static bool rflg = false;      /* reset the counters of login failures */
+
+static struct stat statbuf;    /* fstat buffer for file size */
+
+#define        NOW     (time((time_t *) 0))
+
+static void usage (void)
+{
+       (void) fprintf (stderr,
+                       _("Usage: %s [options]\n"
+                         "\n"
+                         "Options:\n"),
+                       "faillog");
+       (void) fputs (_("  -a, --all                     display faillog records for all users\n"), stderr);
+       (void) fputs (_("  -h, --help                    display this help message and exit\n"), stderr);
+       (void) fputs (_("  -l, --lock-time SEC           after failed login lock account for SEC seconds\n"), stderr);
+       (void) fputs (_("  -m, --maximum MAX             set maximum failed login counters to MAX\n"), stderr);
+       (void) fputs (_("  -r, --reset                   reset the counters of login failures\n"), stderr);
+       (void) fputs (_("  -t, --time DAYS               display faillog records more recent than DAYS\n"), stderr);
+       (void) fputs (_("  -u, --user LOGIN/RANGE        display faillog record or maintains failure\n"
+                       "                                counters and limits (if used with -r, -m,\n"
+                       "                                or -l) only for the specified LOGIN(s)\n"), stderr);
+       (void) fputs ("\n", stderr);
+       exit (E_USAGE);
+}
+
+static void print_one (/*@null@*/const struct passwd *pw, bool force)
+{
+       static bool once = false;
+       struct tm *tm;
+       off_t offset;
+       struct faillog fl;
+       time_t now;
+
+#ifdef HAVE_STRFTIME
+       char *cp;
+       char ptime[80];
+#endif
+
+       if (NULL == pw) {
+               return;
+       }
+
+       offset = pw->pw_uid * sizeof (fl);
+       if (offset <= (statbuf.st_size - sizeof (fl))) {
+               /* fseeko errors are not really relevant for us. */
+               int err = fseeko (fail, offset, SEEK_SET);
+               assert (0 == err);
+               /* faillog is a sparse file. Even if no entries were
+                * entered for this user, which should be able to get the
+                * empty entry in this case.
+                */
+               if (fread ((char *) &fl, sizeof (fl), 1, fail) != 1) {
+                       fprintf (stderr,
+                                _("faillog: Failed to get the entry for UID %lu\n"),
+                                (unsigned long int)pw->pw_uid);
+                       return;
+               }
+       } else {
+               /* Outsize of the faillog file.
+                * Behave as if there were a missing entry (same behavior
+                * as if we were reading an non existing entry in the
+                * sparse faillog file).
+                */
+               memzero (&fl, sizeof (fl));
+       }
+
+       /* Nothing to report */
+       if (!force && (0 == fl.fail_time)) {
+               return;
+       }
+
+       (void) time(&now);
+
+       /* Filter out entries that do not match with the -t option */
+       if (tflg && ((now - fl.fail_time) > seconds)) {
+               return;
+       }
+
+       /* Print the header only once */
+       if (!once) {
+               puts (_("Login       Failures Maximum Latest                   On\n"));
+               once = true;
+       }
+
+       tm = localtime (&fl.fail_time);
+#ifdef HAVE_STRFTIME
+       strftime (ptime, sizeof (ptime), "%D %H:%M:%S %z", tm);
+       cp = ptime;
+#endif
+       printf ("%-9s   %5d    %5d   ",
+               pw->pw_name, fl.fail_cnt, fl.fail_max);
+       /* FIXME: cp is not defined ifndef HAVE_STRFTIME */
+       printf ("%s  %s", cp, fl.fail_line);
+       if (0 != fl.fail_locktime) {
+               if (   ((fl.fail_time + fl.fail_locktime) > now)
+                   && (0 != fl.fail_cnt)) {
+                       printf (_(" [%lus left]"),
+                               (unsigned long) fl.fail_time + fl.fail_locktime - now);
+               } else {
+                       printf (_(" [%lds lock]"),
+                               fl.fail_locktime);
+               }
+       }
+       putchar ('\n');
+}
+
+static void print (void)
+{
+       if (uflg && has_umin && has_umax && (umin==umax)) {
+               print_one (getpwuid ((uid_t)umin), true);
+       } else {
+               /* We only print records for existing users.
+                * Loop based on the user database instead of reading the
+                * whole file. We will have to query the database anyway
+                * so except for very small ranges and large user
+                * database, this should not be a performance issue.
+                */
+               struct passwd *pwent;
+
+               setpwent ();
+               while ( (pwent = getpwent ()) != NULL ) {
+                       if (   uflg
+                           && (   (has_umin && (pwent->pw_uid < (uid_t)umin))
+                               || (has_umax && (pwent->pw_uid > (uid_t)umax)))) {
+                               continue;
+                       }
+                       print_one (pwent, aflg);
+               }
+               endpwent ();
+       }
+}
+
+/*
+ * reset_one - Reset the fail count for one user
+ *
+ * This returns a boolean indicating if an error occurred.
+ */
+static bool reset_one (uid_t uid)
+{
+       off_t offset;
+       struct faillog fl;
+
+       offset = uid * sizeof (fl);
+       if (offset <= (statbuf.st_size - sizeof (fl))) {
+               /* fseeko errors are not really relevant for us. */
+               int err = fseeko (fail, offset, SEEK_SET);
+               assert (0 == err);
+               /* faillog is a sparse file. Even if no entries were
+                * entered for this user, which should be able to get the
+                * empty entry in this case.
+                */
+               if (fread ((char *) &fl, sizeof (fl), 1, fail) != 1) {
+                       fprintf (stderr,
+                                _("faillog: Failed to get the entry for UID %lu\n"),
+                                (unsigned long int)uid);
+                       return true;
+               }
+       } else {
+               /* Outsize of the faillog file.
+                * Behave as if there were a missing entry (same behavior
+                * as if we were reading an non existing entry in the
+                * sparse faillog file).
+                */
+               memzero (&fl, sizeof (fl));
+       }
+
+       if (0 == fl.fail_cnt) {
+               /* If the count is already null, do not write in the file.
+                * This avoids writing 0 when no entries were present for
+                * the user.
+                */
+               return false;
+       }
+
+       fl.fail_cnt = 0;
+
+       if (   (fseeko (fail, offset, SEEK_SET) == 0)
+           && (fwrite ((char *) &fl, sizeof (fl), 1, fail) == 1)) {
+               (void) fflush (fail);
+               return false;
+       }
+
+       fprintf (stderr,
+                _("faillog: Failed to reset fail count for UID %lu\n"),
+                (unsigned long int)uid);
+       return true;
+}
+
+static void reset (void)
+{
+       if (uflg && has_umin && has_umax && (umin==umax)) {
+               if (reset_one ((uid_t)umin)) {
+                       errors = true;
+               }
+       } else {
+               /* Reset all entries in the specified range.
+                * Non existing entries will not be touched.
+                * Entries for non existing users are also reset.
+                */
+               uid_t uid = 0;
+               uid_t uidmax = statbuf.st_size / sizeof (struct faillog);
+
+               /* Make sure we stay in the umin-umax range if specified */
+               if (has_umin) {
+                       uid = (uid_t)umin;
+               }
+               if (has_umax && (uid_t)umax < uidmax) {
+                       uidmax = (uid_t)umax;
+               }
+
+               while (uid < uidmax) {
+                       if (reset_one (uid)) {
+                               errors = true;
+                       }
+                       uid++;
+               }
+       }
+}
+
+/*
+ * setmax_one - Set the maximum failed login counter for one user
+ *
+ * This returns a boolean indicating if an error occurred.
+ */
+static bool setmax_one (uid_t uid, int max)
+{
+       off_t offset;
+       struct faillog fl;
+
+       offset = (off_t) uid * sizeof (fl);
+       if (offset <= (statbuf.st_size - sizeof (fl))) {
+               /* fseeko errors are not really relevant for us. */
+               int err = fseeko (fail, offset, SEEK_SET);
+               assert (0 == err);
+               /* faillog is a sparse file. Even if no entries were
+                * entered for this user, which should be able to get the
+                * empty entry in this case.
+                */
+               if (fread ((char *) &fl, sizeof (fl), 1, fail) != 1) {
+                       fprintf (stderr,
+                                _("faillog: Failed to get the entry for UID %lu\n"),
+                                (unsigned long int)uid);
+                       return true;
+               }
+       } else {
+               /* Outsize of the faillog file.
+                * Behave as if there were a missing entry (same behavior
+                * as if we were reading an non existing entry in the
+                * sparse faillog file).
+                */
+               memzero (&fl, sizeof (fl));
+       }
+
+       if (max == fl.fail_max) {
+               /* If the max is already set to the right value, do not
+                * write in the file.
+                * This avoids writing 0 when no entries were present for
+                * the user and the max argument is 0.
+                */
+               return false;
+       }
+
+       fl.fail_max = max;
+
+       if (   (fseeko (fail, offset, SEEK_SET) == 0)
+           && (fwrite ((char *) &fl, sizeof (fl), 1, fail) == 1)) {
+               (void) fflush (fail);
+               return false;
+       }
+
+       fprintf (stderr,
+                _("faillog: Failed to set max for UID %lu\n"),
+                (unsigned long int)uid);
+       return true;
+}
+
+static void setmax (int max)
+{
+       if (uflg && has_umin && has_umax && (umin==umax)) {
+               if (setmax_one ((uid_t)umin, max)) {
+                       errors = true;
+               }
+       } else {
+               /* Set max for all entries in the specified range.
+                * If max is unchanged for an entry, the entry is not touched.
+                * If max is null, and no entries exist for this user, no
+                * entries will be created.
+                * Entries for non existing user are also taken into
+                * account (in order to define policy for future users).
+                */
+               uid_t uid = 0;
+               uid_t uidmax = statbuf.st_size / sizeof (struct faillog);
+
+               /* Make sure we stay in the umin-umax range if specified */
+               if (has_umin) {
+                       uid = (uid_t)umin;
+               }
+               if (has_umax && (uid_t)umax < uidmax) {
+                       uidmax = (uid_t)umax;
+               }
+
+               while (uid < uidmax) {
+                       if (setmax_one (uid, max)) {
+                               errors = true;
+                       }
+                       uid++;
+               }
+       }
+}
+
+/*
+ * set_locktime_one - Set the locktime for one user
+ *
+ * This returns a boolean indicating if an error occurred.
+ */
+static bool set_locktime_one (uid_t uid, long locktime)
+{
+       off_t offset;
+       struct faillog fl;
+
+       offset = (off_t) uid * sizeof (fl);
+       if (offset <= (statbuf.st_size - sizeof (fl))) {
+               /* fseeko errors are not really relevant for us. */
+               int err = fseeko (fail, offset, SEEK_SET);
+               assert (0 == err);
+               /* faillog is a sparse file. Even if no entries were
+                * entered for this user, which should be able to get the
+                * empty entry in this case.
+                */
+               if (fread ((char *) &fl, sizeof (fl), 1, fail) != 1) {
+                       fprintf (stderr,
+                                _("faillog: Failed to get the entry for UID %lu\n"),
+                                (unsigned long int)uid);
+                       return true;
+               }
+       } else {
+               /* Outsize of the faillog file.
+                * Behave as if there were a missing entry (same behavior
+                * as if we were reading an non existing entry in the
+                * sparse faillog file).
+                */
+               memzero (&fl, sizeof (fl));
+       }
+
+       if (locktime == fl.fail_locktime) {
+               /* If the max is already set to the right value, do not
+                * write in the file.
+                * This avoids writing 0 when no entries were present for
+                * the user and the max argument is 0.
+                */
+               return false;
+       }
+
+       fl.fail_locktime = locktime;
+
+       if (   (fseeko (fail, offset, SEEK_SET) == 0)
+           && (fwrite ((char *) &fl, sizeof (fl), 1, fail) == 1)) {
+               (void) fflush (fail);
+               return false;
+       }
+
+       fprintf (stderr,
+                _("faillog: Failed to set locktime for UID %lu\n"),
+                (unsigned long int)uid);
+       return true;
+}
+
+static void set_locktime (long locktime)
+{
+       if (uflg && has_umin && has_umax && (umin==umax)) {
+               if (set_locktime_one ((uid_t)umin, locktime)) {
+                       errors = true;
+               }
+       } else {
+               /* Set locktime for all entries in the specified range.
+                * If locktime is unchanged for an entry, the entry is not touched.
+                * If locktime is null, and no entries exist for this user, no
+                * entries will be created.
+                * Entries for non existing user are also taken into
+                * account (in order to define policy for future users).
+                */
+               uid_t uid = 0;
+               uid_t uidmax = statbuf.st_size / sizeof (struct faillog);
+
+               /* Make sure we stay in the umin-umax range if specified */
+               if (has_umin) {
+                       uid = (uid_t)umin;
+               }
+               if (has_umax && (uid_t)umax < uidmax) {
+                       uidmax = (uid_t)umax;
+               }
+
+               while (uid < uidmax) {
+                       if (set_locktime_one (uid, locktime)) {
+                               errors = true;
+                       }
+                       uid++;
+               }
+       }
+}
+
+int main (int argc, char **argv)
+{
+       long fail_locktime;
+       long fail_max;
+       long days;
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       {
+               int option_index = 0;
+               int c;
+               static struct option long_options[] = {
+                       {"all", no_argument, NULL, 'a'},
+                       {"help", no_argument, NULL, 'h'},
+                       {"lock-secs", required_argument, NULL, 'l'},
+                       {"maximum", required_argument, NULL, 'm'},
+                       {"reset", no_argument, NULL, 'r'},
+                       {"time", required_argument, NULL, 't'},
+                       {"user", required_argument, NULL, 'u'},
+                       {NULL, 0, NULL, '\0'}
+               };
+               while ((c = getopt_long (argc, argv, "ahl:m:rt:u:",
+                                        long_options, &option_index)) != -1) {
+                       switch (c) {
+                       case 'a':
+                               aflg = true;
+                               break;
+                       case 'h':
+                               usage ();
+                               break;
+                       case 'l':
+                               if (getlong (optarg, &fail_locktime) == 0) {
+                                       fprintf (stderr,
+                                                _("%s: invalid numeric argument '%s'\n"),
+                                                "faillog", optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               lflg = true;
+                               break;
+                       case 'm':
+                               if (getlong (optarg, &fail_max) == 0) {
+                                       fprintf (stderr,
+                                                _("%s: invalid numeric argument '%s'\n"),
+                                                "faillog", optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               mflg = true;
+                               break;
+                       case 'r':
+                               rflg = true;
+                               break;
+                       case 't':
+                               if (getlong (optarg, &days) == 0) {
+                                       fprintf (stderr,
+                                                _("%s: invalid numeric argument '%s'\n"),
+                                                "faillog", optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               seconds = (time_t) days * DAY;
+                               tflg = true;
+                               break;
+                       case 'u':
+                       {
+                               /*
+                                * The user can be:
+                                *  - a login name
+                                *  - numerical
+                                *  - a numerical login ID
+                                *  - a range (-x, x-, x-y)
+                                */
+                               struct passwd *pwent;
+
+                               uflg = true;
+                               /* local, no need for xgetpwnam */
+                               pwent = getpwnam (optarg);
+                               if (NULL != pwent) {
+                                       umin = (unsigned long) pwent->pw_uid;
+                                       has_umin = true;
+                                       umax = umin;
+                                       has_umax = true;
+                               } else {
+                                       if (getrange (optarg,
+                                                     &umin, &has_umin,
+                                                     &umax, &has_umax) == 0) {
+                                               fprintf (stderr,
+                                                        _("lastlog: Unknown user or range: %s\n"),
+                                                        optarg);
+                                               exit (E_BAD_ARG);
+                                       }
+                               }
+
+                               break;
+                       }
+                       default:
+                               usage ();
+                       }
+               }
+       }
+
+       if (aflg && uflg) {
+               usage ();
+       }
+       if (tflg && (lflg || mflg || rflg)) {
+               usage ();
+       }
+
+       /* Open the faillog database */
+       if (lflg || mflg || rflg) {
+               fail = fopen (FAILLOG_FILE, "r+");
+       } else {
+               fail = fopen (FAILLOG_FILE, "r");
+       }
+       if (NULL == fail) {
+               fprintf (stderr,
+                        _("faillog: Cannot open %s: %s\n"),
+                        FAILLOG_FILE, strerror (errno));
+               exit (E_NOPERM);
+       }
+
+       /* Get the size of the faillog */
+       if (fstat (fileno (fail), &statbuf) != 0) {
+               fprintf (stderr,
+                        _("faillog: Cannot get the size of %s: %s\n"),
+                        FAILLOG_FILE, strerror (errno));
+               exit (E_NOPERM);
+       }
+
+       if (lflg) {
+               set_locktime (fail_locktime);
+       }
+
+       if (mflg) {
+               setmax (fail_max);
+       }
+
+       if (rflg) {
+               reset ();
+       }
+
+       if (!(lflg || mflg || rflg)) {
+               print ();
+       }
+
+       fclose (fail);
+
+       exit (errors ? E_NOPERM : E_SUCCESS);
+}
+
diff --git a/src/gpasswd.c b/src/gpasswd.c
new file mode 100644 (file)
index 0000000..a94d26c
--- /dev/null
@@ -0,0 +1,1198 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: gpasswd.c 2851 2009-04-30 21:39:38Z nekral-guest $"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "defines.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "prototypes.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+/* The name of this command, as it is invoked */
+char *Prog;
+
+#ifdef SHADOWGRP
+/* Indicate if shadow groups are enabled on the system
+ * (/etc/gshadow present) */
+static bool is_shadowgrp;
+#endif
+
+/* Flags set by options */
+static bool aflg = false;
+static bool Aflg = false;
+static bool dflg = false;
+static bool Mflg = false;
+static bool rflg = false;
+static bool Rflg = false;
+/* The name of the group that is being affected */
+static char *group = NULL;
+/* The name of the user being added (-a) or removed (-d) from group */
+static char *user = NULL;
+/* The new list of members set with -M */
+static char *members = NULL;
+#ifdef SHADOWGRP
+/* The new list of group administrators set with -A */
+static char *admins = NULL;
+#endif
+/* The name of the caller */
+static char *myname = NULL;
+/* The UID of the caller */
+static uid_t bywho;
+/* Indicate if gpasswd was called by root */
+#define amroot (0 == bywho)
+
+/* The number of retries for th user to provide and repeat a new password */
+#ifndef        RETRIES
+#define        RETRIES 3
+#endif
+
+/* local function prototypes */
+static void usage (void);
+static RETSIGTYPE catch_signals (int killed);
+static bool is_valid_user_list (const char *users);
+static void process_flags (int argc, char **argv);
+static void check_flags (int argc, int opt_index);
+static void open_files (void);
+static void close_files (void);
+#ifdef SHADOWGRP
+static void get_group (struct group *gr, struct sgrp *sg);
+static void check_perms (const struct group *gr, const struct sgrp *sg);
+static void update_group (struct group *gr, struct sgrp *sg);
+static void change_passwd (struct group *gr, struct sgrp *sg);
+#else
+static void get_group (struct group *gr);
+static void check_perms (const struct group *gr);
+static void update_group (struct group *gr);
+static void change_passwd (struct group *gr);
+#endif
+static void log_gpasswd_failure (const char *suffix);
+static void log_gpasswd_failure_system (unused void *arg);
+static void log_gpasswd_failure_group (unused void *arg);
+#ifdef SHADOWGRP
+static void log_gpasswd_failure_gshadow (unused void *arg);
+#endif
+static void log_gpasswd_success (const char *suffix);
+static void log_gpasswd_success_system (unused void *arg);
+static void log_gpasswd_success_group (unused void *arg);
+#ifdef SHADOWGRP
+static void log_gpasswd_success_gshadow (unused void *arg);
+#endif
+
+/*
+ * usage - display usage message
+ */
+static void usage (void)
+{
+       fprintf (stderr,
+                _("Usage: %s [option] GROUP\n"
+                  "\n"
+                  "Options:\n"
+                  "  -a, --add USER                add USER to GROUP\n"
+                  "  -d, --delete USER             remove USER from GROUP\n"
+                  "  -r, --remove-password         remove the GROUP's password\n"
+                  "  -R, --restrict                restrict access to GROUP to its members\n"
+                  "  -M, --members USER,...        set the list of members of GROUP\n"
+                  "%s\n"
+                  "\n"),
+                Prog,
+#ifdef SHADOWGRP
+                _("  -A, --administrators ADMIN,...\n"
+                  "                                set the list of administrators for GROUP\n"
+                  "Except for the -A and -M options, the options cannot be combined.\n")
+#else
+                _("The options cannot be combined.\n")
+#endif
+               );
+       exit (E_USAGE);
+}
+
+/*
+ * catch_signals - set or reset termio modes.
+ *
+ *     catch_signals() is called before processing begins. signal() is then
+ *     called with catch_signals() as the signal handler. If signal later
+ *     calls catch_signals() with a signal number, the terminal modes are
+ *     then reset.
+ */
+static RETSIGTYPE catch_signals (int killed)
+{
+       static TERMIO sgtty;
+
+       if (0 != killed) {
+               STTY (0, &sgtty);
+       } else {
+               GTTY (0, &sgtty);
+       }
+
+       if (0 != killed) {
+               (void) putchar ('\n');
+               (void) fflush (stdout);
+               exit (killed);
+       }
+}
+
+/*
+ * is_valid_user_list - check a comma-separated list of user names for validity
+ *
+ *     is_valid_user_list scans a comma-separated list of user names and
+ *     checks that each listed name exists is the user database.
+ *
+ *     It returns true if the list of users is valid.
+ */
+static bool is_valid_user_list (const char *users)
+{
+       char *username, *end;
+       bool is_valid = true;
+       char *tmpusers = xstrdup (users);
+
+       for (username = tmpusers;
+            (NULL != username) && ('\0' != *username);
+            username = end) {
+               end = strchr (username, ',');
+               if (NULL != end) {
+                       *end = '\0';
+                       end++;
+               }
+
+               /*
+                * This user must exist.
+                */
+
+               /* local, no need for xgetpwnam */
+               if (getpwnam (username) == NULL) {
+                       fprintf (stderr, _("%s: user '%s' does not exist\n"),
+                                Prog, username);
+                       is_valid = false;
+               }
+       }
+
+       free (tmpusers);
+
+       return is_valid;
+}
+
+static void failure (void)
+{
+       fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+       log_gpasswd_failure (": Permission denied");
+       exit (E_NOPERM);
+}
+
+/*
+ * process_flags - process the command line options and arguments
+ */
+static void process_flags (int argc, char **argv)
+{
+       int flag;
+       int option_index = 0;
+       static struct option long_options[] = {
+               {"add", required_argument, NULL, 'a'},
+               {"delete", required_argument, NULL, 'd'},
+               {"remove-password", no_argument, NULL, 'r'},
+               {"restrict", no_argument, NULL, 'R'},
+               {"administrators", required_argument, NULL, 'A'},
+               {"members", required_argument, NULL, 'M'},
+               {NULL, 0, NULL, '\0'}
+               };
+
+       while ((flag = getopt_long (argc, argv, "a:A:d:gM:rR", long_options, &option_index)) != -1) {
+               switch (flag) {
+               case 'a':       /* add a user */
+                       aflg = true;
+                       user = optarg;
+                       /* local, no need for xgetpwnam */
+                       if (getpwnam (user) == NULL) {
+                               fprintf (stderr,
+                                        _("%s: user '%s' does not exist\n"),
+                                        Prog, user);
+                               exit (E_BAD_ARG);
+                       }
+                       break;
+#ifdef SHADOWGRP
+               case 'A':       /* set the list of administrators */
+                       if (!is_shadowgrp) {
+                               fprintf (stderr,
+                                        _("%s: shadow group passwords required for -A\n"),
+                                        Prog);
+                               exit (E_GSHADOW_NOTFOUND);
+                       }
+                       admins = optarg;
+                       if (!is_valid_user_list (admins)) {
+                               exit (E_BAD_ARG);
+                       }
+                       Aflg = true;
+                       break;
+#endif                         /* SHADOWGRP */
+               case 'd':       /* delete a user */
+                       dflg = true;
+                       user = optarg;
+                       break;
+               case 'g':       /* no-op from normal password */
+                       break;
+               case 'M':       /* set the list of members */
+                       members = optarg;
+                       if (!is_valid_user_list (members)) {
+                               exit (E_BAD_ARG);
+                       }
+                       Mflg = true;
+                       break;
+               case 'r':       /* remove group password */
+                       rflg = true;
+                       break;
+               case 'R':       /* restrict group password */
+                       Rflg = true;
+                       break;
+               default:
+                       usage ();
+               }
+       }
+
+       /* Get the name of the group that is being affected. */
+       group = argv[optind];
+
+       check_flags (argc, optind);
+}
+
+/*
+ * check_flags - check the validity of options
+ */
+static void check_flags (int argc, int opt_index)
+{
+       int exclusive = 0;
+       /*
+        * Make sure exclusive flags are exclusive
+        */
+       if (aflg) {
+               exclusive++;
+       }
+       if (dflg) {
+               exclusive++;
+       }
+       if (rflg) {
+               exclusive++;
+       }
+       if (Rflg) {
+               exclusive++;
+       }
+       if (Aflg || Mflg) {
+               exclusive++;
+       }
+       if (exclusive > 1) {
+               usage ();
+       }
+
+       /*
+        * Make sure one (and only one) group was provided
+        */
+       if ((argc != (opt_index+1)) || (NULL == group)) {
+               usage ();
+       }
+}
+
+/*
+ * open_files - lock and open the group databases
+ *
+ *     It will call exit in case of error.
+ */
+static void open_files (void)
+{
+       if (gr_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, gr_dbname ());
+               exit (E_NOPERM);
+       }
+       add_cleanup (cleanup_unlock_group, NULL);
+
+#ifdef SHADOWGRP
+       if (is_shadowgrp) {
+               if (sgr_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, sgr_dbname ());
+                       exit (E_NOPERM);
+               }
+               add_cleanup (cleanup_unlock_gshadow, NULL);
+       }
+#endif                         /* SHADOWGRP */
+
+       add_cleanup (log_gpasswd_failure_system, NULL);
+
+       if (gr_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"),
+                        Prog, gr_dbname ());
+               SYSLOG ((LOG_WARN, "cannot open %s", gr_dbname ()));
+               exit (E_NOPERM);
+       }
+
+#ifdef SHADOWGRP
+       if (is_shadowgrp) {
+               if (sgr_open (O_RDWR) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot open %s\n"),
+                                Prog, sgr_dbname ());
+                       SYSLOG ((LOG_WARN, "cannot open %s", sgr_dbname ()));
+                       exit (E_NOPERM);
+               }
+               add_cleanup (log_gpasswd_failure_gshadow, NULL);
+       }
+#endif                         /* SHADOWGRP */
+
+       add_cleanup (log_gpasswd_failure_group, NULL);
+       del_cleanup (log_gpasswd_failure_system);
+}
+
+static void log_gpasswd_failure (const char *suffix)
+{
+#ifdef WITH_AUDIT
+       char buf[1024];
+#endif
+       if (aflg) {
+               SYSLOG ((LOG_ERR,
+                        "%s failed to add user %s to group %s%s",
+                        myname, user, group, suffix));
+#ifdef WITH_AUDIT
+               snprintf (buf, 1023,
+                         "%s failed to add user %s to group %s%s",
+                         myname, user, group, suffix);
+               buf[1023] = '\0';
+               audit_logger (AUDIT_USER_ACCT, Prog,
+                             buf,
+                             group, AUDIT_NO_ID,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+       } else if (dflg) {
+               SYSLOG ((LOG_ERR,
+                        "%s failed to remove user %s from group %s%s",
+                        myname, user, group, suffix));
+#ifdef WITH_AUDIT
+               snprintf (buf, 1023,
+                         "%s failed to remove user %s from group %s%s",
+                         myname, user, group, suffix);
+               buf[1023] = '\0';
+               audit_logger (AUDIT_USER_ACCT, Prog,
+                             buf,
+                             group, AUDIT_NO_ID,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+       } else if (rflg) {
+               SYSLOG ((LOG_ERR,
+                        "%s failed to remove password of group %s%s",
+                        myname, group, suffix));
+#ifdef WITH_AUDIT
+               snprintf (buf, 1023,
+                         "%s failed to remove password of group %s%s",
+                         myname, group, suffix);
+               buf[1023] = '\0';
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             buf,
+                             group, AUDIT_NO_ID,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+       } else if (Rflg) {
+               SYSLOG ((LOG_ERR,
+                        "%s failed to restrict access to group %s%s",
+                        myname, group, suffix));
+#ifdef WITH_AUDIT
+               snprintf (buf, 1023,
+                         "%s failed to restrict access to group %s%s",
+                         myname, group, suffix);
+               buf[1023] = '\0';
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             buf,
+                             group, AUDIT_NO_ID,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+       } else if (Aflg || Mflg) {
+#ifdef SHADOWGRP
+               if (Aflg) {
+                       SYSLOG ((LOG_ERR,
+                                "%s failed to set the administrators of group %s to %s%s",
+                                myname, group, admins, suffix));
+#ifdef WITH_AUDIT
+                       snprintf (buf, 1023,
+                                 "%s failed to set the administrators of group %s to %s%s",
+                                 myname, group, admins, suffix);
+                       buf[1023] = '\0';
+                       audit_logger (AUDIT_USER_ACCT, Prog,
+                                     buf,
+                                     group, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+               }
+#endif                         /* SHADOWGRP */
+               if (Mflg) {
+                       SYSLOG ((LOG_ERR,
+                                "%s failed to set the members of group %s to %s%s",
+                                myname, group, members, suffix));
+#ifdef WITH_AUDIT
+                       snprintf (buf, 1023,
+                                 "%s failed to set the members of group %s to %s%s",
+                                 myname, group, members, suffix);
+                       buf[1023] = '\0';
+                       audit_logger (AUDIT_USER_ACCT, Prog,
+                                     buf,
+                                     group, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+               }
+       } else {
+               SYSLOG ((LOG_ERR,
+                        "%s failed to change password of group %s%s",
+                        myname, group, suffix));
+#ifdef WITH_AUDIT
+               snprintf (buf, 1023,
+                         "%s failed to change password of group %s%s",
+                         myname, group, suffix);
+               buf[1023] = '\0';
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             buf,
+                             group, AUDIT_NO_ID,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+       }
+}
+
+static void log_gpasswd_failure_system (unused void *arg)
+{
+       log_gpasswd_failure ("");
+}
+
+static void log_gpasswd_failure_group (unused void *arg)
+{
+       char buf[1024];
+       snprintf (buf, 1023, " in %s", gr_dbname ());
+       buf[1023] = '\0';
+       log_gpasswd_failure (buf);
+}
+
+#ifdef SHADOWGRP
+static void log_gpasswd_failure_gshadow (unused void *arg)
+{
+       char buf[1024];
+       snprintf (buf, 1023, " in %s", sgr_dbname ());
+       buf[1023] = '\0';
+       log_gpasswd_failure (buf);
+}
+#endif                         /* SHADOWGRP */
+
+static void log_gpasswd_success (const char *suffix)
+{
+#ifdef WITH_AUDIT
+       char buf[1024];
+#endif
+       if (aflg) {
+               SYSLOG ((LOG_INFO,
+                        "user %s added by %s to group %s%s",
+                        user, myname, group, suffix));
+#ifdef WITH_AUDIT
+               snprintf (buf, 1023,
+                         "user %s added by %s to group %s%s",
+                         user, myname, group, suffix);
+               buf[1023] = '\0';
+               audit_logger (AUDIT_USER_ACCT, Prog,
+                             buf,
+                             group, AUDIT_NO_ID,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+       } else if (dflg) {
+               SYSLOG ((LOG_INFO,
+                        "user %s removed by %s from group %s%s",
+                        user, myname, group, suffix));
+#ifdef WITH_AUDIT
+               snprintf (buf, 1023,
+                         "user %s removed by %s from group %s%s",
+                         user, myname, group, suffix);
+               buf[1023] = '\0';
+               audit_logger (AUDIT_USER_ACCT, Prog,
+                             buf,
+                             group, AUDIT_NO_ID,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+       } else if (rflg) {
+               SYSLOG ((LOG_INFO,
+                        "password of group %s removed by %s%s",
+                        group, myname, suffix));
+#ifdef WITH_AUDIT
+               snprintf (buf, 1023,
+                         "password of group %s removed by %s%s",
+                         group, myname, suffix);
+               buf[1023] = '\0';
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             buf,
+                             group, AUDIT_NO_ID,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+       } else if (Rflg) {
+               SYSLOG ((LOG_INFO,
+                        "access to group %s restricted by %s%s",
+                        group, myname, suffix));
+#ifdef WITH_AUDIT
+               snprintf (buf, 1023,
+                         "access to group %s restricted by %s%s",
+                         group, myname, suffix);
+               buf[1023] = '\0';
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             buf,
+                             group, AUDIT_NO_ID,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+       } else if (Aflg || Mflg) {
+#ifdef SHADOWGRP
+               if (Aflg) {
+                       SYSLOG ((LOG_INFO,
+                                "administrators of group %s set by %s to %s%s",
+                                group, myname, admins, suffix));
+#ifdef WITH_AUDIT
+                       snprintf (buf, 1023,
+                                 "administrators of group %s set by %s to %s%s",
+                                 group, myname, admins, suffix);
+                       buf[1023] = '\0';
+                       audit_logger (AUDIT_USER_ACCT, Prog,
+                                     buf,
+                                     group, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_SUCCESS);
+#endif
+               }
+#endif                         /* SHADOWGRP */
+               if (Mflg) {
+                       SYSLOG ((LOG_INFO,
+                                "members of group %s set by %s to %s%s",
+                                group, myname, members, suffix));
+#ifdef WITH_AUDIT
+                       snprintf (buf, 1023,
+                                 "members of group %s set by %s to %s%s",
+                                 group, myname, members, suffix);
+                       buf[1023] = '\0';
+                       audit_logger (AUDIT_USER_ACCT, Prog,
+                                     buf,
+                                     group, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_SUCCESS);
+#endif
+               }
+       } else {
+               SYSLOG ((LOG_INFO,
+                        "password of group %s changed by %s%s",
+                        group, myname, suffix));
+#ifdef WITH_AUDIT
+               snprintf (buf, 1023,
+                         "password of group %s changed by %s%s",
+                         group, myname, suffix);
+               buf[1023] = '\0';
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             buf,
+                             group, AUDIT_NO_ID,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+       }
+}
+
+static void log_gpasswd_success_system (unused void *arg)
+{
+       log_gpasswd_success ("");
+}
+
+static void log_gpasswd_success_group (unused void *arg)
+{
+       char buf[1024];
+       snprintf (buf, 1023, " in %s", gr_dbname ());
+       buf[1023] = '\0';
+       log_gpasswd_success (buf);
+}
+
+#ifdef SHADOWGRP
+static void log_gpasswd_success_gshadow (unused void *arg)
+{
+       char buf[1024];
+       snprintf (buf, 1023, " in %s", sgr_dbname ());
+       buf[1023] = '\0';
+       log_gpasswd_success (buf);
+}
+#endif                         /* SHADOWGRP */
+
+/*
+ * close_files - close and unlock the group databases
+ *
+ *     This cause any changes in the databases to be committed.
+ *
+ *     It will call exit in case of error.
+ */
+static void close_files (void)
+{
+       if (gr_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, gr_dbname ());
+               exit (E_NOPERM);
+       }
+       add_cleanup (log_gpasswd_success_group, NULL);
+       del_cleanup (log_gpasswd_failure_group);
+
+       cleanup_unlock_group (NULL);
+       del_cleanup (cleanup_unlock_group);
+
+#ifdef SHADOWGRP
+       if (is_shadowgrp) {
+               if (sgr_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"),
+                                Prog, sgr_dbname ());
+                       exit (E_NOPERM);
+               }
+               add_cleanup (log_gpasswd_success_gshadow, NULL);
+               del_cleanup (log_gpasswd_failure_gshadow);
+
+               cleanup_unlock_gshadow (NULL);
+               del_cleanup (cleanup_unlock_gshadow);
+       }
+#endif                         /* SHADOWGRP */
+
+       log_gpasswd_success_system (NULL);
+       del_cleanup (log_gpasswd_success_group);
+#ifdef SHADOWGRP
+       if (is_shadowgrp) {
+               del_cleanup (log_gpasswd_success_gshadow);
+       }
+#endif
+}
+
+/*
+ * check_perms - check if the user is allowed to change the password of
+ *               the specified group.
+ *
+ *     It only returns if the user is allowed.
+ */
+#ifdef SHADOWGRP
+static void check_perms (const struct group *gr, const struct sgrp *sg)
+#else
+static void check_perms (const struct group *gr)
+#endif
+{
+       /*
+        * Only root can use the -M and -A options.
+        */
+       if (!amroot && (Aflg || Mflg)) {
+               failure ();
+       }
+
+#ifdef SHADOWGRP
+       if (is_shadowgrp) {
+               /*
+                * The policy here for changing a group is that
+                * 1) you must be root or
+                * 2) you must be listed as an administrative member.
+                * Administrative members can do anything to a group that
+                * the root user can.
+                */
+               if (!amroot && !is_on_list (sg->sg_adm, myname)) {
+                       failure ();
+               }
+       } else
+#endif                         /* SHADOWGRP */
+       {
+#ifdef FIRST_MEMBER_IS_ADMIN
+               /*
+                * The policy here for changing a group is that
+                * 1) you must be root or
+                * 2) you must be the first listed member of the group.
+                * The first listed member of a group can do anything to
+                * that group that the root user can. The rationale for
+                * this hack is that the FIRST user is probably the most
+                * important user in this entire group.
+                *
+                * This feature enabled by default could be a security
+                * problem when installed on existing systems where the
+                * first group member might be just a normal user.
+                * --marekm
+                */
+               if (!amroot) {
+                       if (gr->gr_mem[0] == (char *) 0) {
+                               failure ();
+                       }
+
+                       if (strcmp (gr->gr_mem[0], myname) != 0) {
+                               failure ();
+                       }
+               }
+#else                          /* ! FIRST_MEMBER_IS_ADMIN */
+               if (!amroot) {
+                       failure ();
+               }
+#endif
+       }
+}
+
+/*
+ * update_group - Update the group information in the databases
+ */
+#ifdef SHADOWGRP
+static void update_group (struct group *gr, struct sgrp *sg)
+#else
+static void update_group (struct group *gr)
+#endif
+{
+       if (gr_update (gr) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, gr_dbname (), gr->gr_name);
+               exit (1);
+       }
+#ifdef SHADOWGRP
+       if (is_shadowgrp && (sgr_update (sg) == 0)) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, sgr_dbname (), sg->sg_name);
+               exit (1);
+       }
+#endif                         /* SHADOWGRP */
+}
+
+/*
+ * get_group - get the current information for the group
+ *
+ *     The information are copied in group structure(s) so that they can be
+ *     modified later.
+ *
+ *     Note: If !is_shadowgrp, *sg will not be initialized.
+ */
+#ifdef SHADOWGRP
+static void get_group (struct group *gr, struct sgrp *sg)
+#else
+static void get_group (struct group *gr)
+#endif
+{
+       struct group const*tmpgr = NULL;
+#ifdef SHADOWGRP
+       struct sgrp const*tmpsg = NULL;
+#endif
+
+       if (gr_open (O_RDONLY) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+               SYSLOG ((LOG_WARN, "cannot open %s", gr_dbname ()));
+               exit (E_NOPERM);
+       }
+
+       tmpgr = gr_locate (group);
+       if (NULL == tmpgr) {
+               fprintf (stderr,
+                        _("%s: group '%s' does not exist in %s\n"),
+                        Prog, group, gr_dbname ());
+               exit (E_BAD_ARG);
+       }
+
+       *gr = *tmpgr;
+       gr->gr_name = xstrdup (tmpgr->gr_name);
+       gr->gr_passwd = xstrdup (tmpgr->gr_passwd);
+       gr->gr_mem = dup_list (tmpgr->gr_mem);
+
+       if (gr_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while closing read-only %s\n"),
+                        Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR,
+                        "failure while closing read-only %s",
+                        gr_dbname ()));
+               exit (E_NOPERM);
+       }
+
+#ifdef SHADOWGRP
+       if (is_shadowgrp) {
+               if (sgr_open (O_RDONLY) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot open %s\n"),
+                                Prog, sgr_dbname ());
+                       SYSLOG ((LOG_WARN, "cannot open %s", sgr_dbname ()));
+                       exit (E_NOPERM);
+               }
+               tmpsg = sgr_locate (group);
+               if (NULL != tmpsg) {
+                       *sg = *tmpsg;
+                       sg->sg_name = xstrdup (tmpsg->sg_name);
+                       sg->sg_passwd = xstrdup (tmpsg->sg_passwd);
+
+                       sg->sg_mem = dup_list (tmpsg->sg_mem);
+                       sg->sg_adm = dup_list (tmpsg->sg_adm);
+               } else {
+                       sg->sg_name = xstrdup (group);
+                       sg->sg_passwd = gr->gr_passwd;
+                       gr->gr_passwd = SHADOW_PASSWD_STRING;   /* XXX warning: const */
+
+                       sg->sg_mem = dup_list (gr->gr_mem);
+
+                       sg->sg_adm = (char **) xmalloc (sizeof (char *) * 2);
+#ifdef FIRST_MEMBER_IS_ADMIN
+                       if (sg->sg_mem[0]) {
+                               sg->sg_adm[0] = xstrdup (sg->sg_mem[0]);
+                               sg->sg_adm[1] = NULL;
+                       } else
+#endif
+                       {
+                               sg->sg_adm[0] = NULL;
+                       }
+
+               }
+               if (sgr_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while closing read-only %s\n"),
+                                Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR,
+                                "failure while closing read-only %s",
+                                sgr_dbname ()));
+                       exit (E_NOPERM);
+               }
+       }
+#endif                         /* SHADOWGRP */
+}
+
+/*
+ * change_passwd - change the group's password
+ *
+ *     Get the new password from the user and update the password in the
+ *     group's structure.
+ *
+ *     It will call exit in case of error.
+ */
+#ifdef SHADOWGRP
+static void change_passwd (struct group *gr, struct sgrp *sg)
+#else
+static void change_passwd (struct group *gr)
+#endif
+{
+       char *cp;
+       static char pass[BUFSIZ];
+       int retries;
+
+       /*
+        * A new password is to be entered and it must be encrypted, etc.
+        * The password will be prompted for twice, and both entries must be
+        * identical. There is no need to validate the old password since
+        * the invoker is either the group owner, or root.
+        */
+       printf (_("Changing the password for group %s\n"), group);
+
+       for (retries = 0; retries < RETRIES; retries++) {
+               cp = getpass (_("New Password: "));
+               if (NULL == cp) {
+                       exit (1);
+               }
+
+               STRFCPY (pass, cp);
+               strzero (cp);
+               cp = getpass (_("Re-enter new password: "));
+               if (NULL == cp) {
+                       exit (1);
+               }
+
+               if (strcmp (pass, cp) == 0) {
+                       strzero (cp);
+                       break;
+               }
+
+               strzero (cp);
+               memzero (pass, sizeof pass);
+
+               if (retries + 1 < RETRIES) {
+                       puts (_("They don't match; try again"));
+               }
+       }
+
+       if (retries == RETRIES) {
+               fprintf (stderr, _("%s: Try again later\n"), Prog);
+               exit (1);
+       }
+
+       cp = pw_encrypt (pass, crypt_make_salt (NULL, NULL));
+       memzero (pass, sizeof pass);
+#ifdef SHADOWGRP
+       if (is_shadowgrp) {
+               sg->sg_passwd = cp;
+       } else
+#endif
+       {
+               gr->gr_passwd = cp;
+       }
+}
+
+/*
+ * gpasswd - administer the /etc/group file
+ */
+int main (int argc, char **argv)
+{
+       struct group grent;
+#ifdef SHADOWGRP
+       struct sgrp sgent;
+#endif
+       struct passwd *pw = NULL;
+
+#ifdef WITH_AUDIT
+       audit_help_open ();
+#endif
+
+       sanitize_env ();
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       /*
+        * Make a note of whether or not this command was invoked by root.
+        * This will be used to bypass certain checks later on. Also, set
+        * the real user ID to match the effective user ID. This will
+        * prevent the invoker from issuing signals which would interfere
+        * with this command.
+        */
+       bywho = getuid ();
+       Prog = Basename (argv[0]);
+
+       OPENLOG ("gpasswd");
+       setbuf (stdout, NULL);
+       setbuf (stderr, NULL);
+
+#ifdef SHADOWGRP
+       is_shadowgrp = sgr_file_present ();
+#endif
+
+       /*
+        * Determine the name of the user that invoked this command. This
+        * is really hit or miss because there are so many ways that command
+        * can be executed and so many ways to trip up the routines that
+        * report the user name.
+        */
+       pw = get_my_pwent ();
+       if (NULL == pw) {
+               fprintf (stderr, _("%s: Cannot determine your user name.\n"),
+                        Prog);
+               SYSLOG ((LOG_WARN,
+                        "Cannot determine the user name of the caller (UID %lu)",
+                        (unsigned long) getuid ()));
+               exit (E_NOPERM);
+       }
+       myname = xstrdup (pw->pw_name);
+
+       /*
+        * Register an exit function to warn for any inconsistency that we
+        * could create.
+        */
+       if (atexit (do_cleanups) != 0) {
+               fprintf(stderr, "%s: cannot set exit function\n", Prog);
+               exit (1);
+       }
+
+       /* Parse the options */
+       process_flags (argc, argv);
+
+       /*
+        * Replicate the group so it can be modified later on.
+        */
+#ifdef SHADOWGRP
+       get_group (&grent, &sgent);
+#else
+       get_group (&grent);
+#endif
+
+       /*
+        * Check if the user is allowed to change the password of this group.
+        */
+#ifdef SHADOWGRP
+       check_perms (&grent, &sgent);
+#else
+       check_perms (&grent);
+#endif
+
+       /*
+        * Removing a password is straight forward. Just set the password
+        * field to a "".
+        */
+       if (rflg) {
+               grent.gr_passwd = "";   /* XXX warning: const */
+#ifdef SHADOWGRP
+               sgent.sg_passwd = "";   /* XXX warning: const */
+#endif
+               goto output;
+       } else if (Rflg) {
+               /*
+                * Same thing for restricting the group. Set the password
+                * field to "!".
+                */
+               grent.gr_passwd = "!";  /* XXX warning: const */
+#ifdef SHADOWGRP
+               sgent.sg_passwd = "!";  /* XXX warning: const */
+#endif
+               goto output;
+       }
+
+       /*
+        * Adding a member to a member list is pretty straightforward as
+        * well. Call the appropriate routine and split.
+        */
+       if (aflg) {
+               printf (_("Adding user %s to group %s\n"), user, group);
+               grent.gr_mem = add_list (grent.gr_mem, user);
+#ifdef SHADOWGRP
+               if (is_shadowgrp) {
+                       sgent.sg_mem = add_list (sgent.sg_mem, user);
+               }
+#endif
+               goto output;
+       }
+
+       /*
+        * Removing a member from the member list is the same deal as adding
+        * one, except the routine is different.
+        */
+       if (dflg) {
+               bool removed = false;
+
+               printf (_("Removing user %s from group %s\n"), user, group);
+
+               if (is_on_list (grent.gr_mem, user)) {
+                       removed = true;
+                       grent.gr_mem = del_list (grent.gr_mem, user);
+               }
+#ifdef SHADOWGRP
+               if (is_shadowgrp) {
+                       if (is_on_list (sgent.sg_mem, user)) {
+                               removed = true;
+                               sgent.sg_mem = del_list (sgent.sg_mem, user);
+                       }
+               }
+#endif
+               if (!removed) {
+                       fprintf (stderr,
+                                _("%s: user '%s' is not a member of '%s'\n"),
+                                Prog, user, group);
+                       exit (E_BAD_ARG);
+               }
+               goto output;
+       }
+#ifdef SHADOWGRP
+       /*
+        * Replacing the entire list of administrators is simple. Check the
+        * list to make sure everyone is a real user. Then slap the new list
+        * in place.
+        */
+       if (Aflg) {
+               sgent.sg_adm = comma_to_list (admins);
+               if (!Mflg) {
+                       goto output;
+               }
+       }
+#endif                         /* SHADOWGRP */
+
+       /*
+        * Replacing the entire list of members is simple. Check the list to
+        * make sure everyone is a real user. Then slap the new list in
+        * place.
+        */
+       if (Mflg) {
+#ifdef SHADOWGRP
+               sgent.sg_mem = comma_to_list (members);
+#endif
+               grent.gr_mem = comma_to_list (members);
+               goto output;
+       }
+
+       /*
+        * If the password is being changed, the input and output must both
+        * be a tty. The typical keyboard signals are caught so the termio
+        * modes can be restored.
+        */
+       if ((isatty (0) == 0) || (isatty (1) == 0)) {
+               fprintf (stderr, _("%s: Not a tty\n"), Prog);
+               exit (E_NOPERM);
+       }
+
+       catch_signals (0);      /* save tty modes */
+
+       (void) signal (SIGHUP, catch_signals);
+       (void) signal (SIGINT, catch_signals);
+       (void) signal (SIGQUIT, catch_signals);
+       (void) signal (SIGTERM, catch_signals);
+#ifdef SIGTSTP
+       (void) signal (SIGTSTP, catch_signals);
+#endif
+
+       /* Prompt for the new password */
+#ifdef SHADOWGRP
+       change_passwd (&grent, &sgent);
+#else
+       change_passwd (&grent);
+#endif
+
+       /*
+        * This is the common arrival point to output the new group file.
+        * The freshly crafted entry is in allocated space. The group file
+        * will be locked and opened for writing. The new entry will be
+        * output, etc.
+        */
+      output:
+       if (setuid (0) != 0) {
+               fputs (_("Cannot change ID to root.\n"), stderr);
+               SYSLOG ((LOG_ERR, "can't setuid(0)"));
+               closelog ();
+               exit (E_NOPERM);
+       }
+       pwd_init ();
+
+       open_files ();
+
+#ifdef SHADOWGRP
+       update_group (&grent, &sgent);
+#else
+       update_group (&grent);
+#endif
+
+       close_files ();
+
+       nscd_flush_cache ("group");
+
+       exit (E_SUCCESS);
+}
+
diff --git a/src/groupadd.c b/src/groupadd.c
new file mode 100644 (file)
index 0000000..bb172f2
--- /dev/null
@@ -0,0 +1,612 @@
+/*
+ * Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: groupadd.c 3015 2009-06-05 22:16:56Z nekral-guest $"
+
+#include <ctype.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#include <pwd.h>
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+#include "chkname.h"
+#include "defines.h"
+#include "getdef.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "prototypes.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+
+/*
+ * exit status values
+ */
+/*@-exitarg@*/
+#define E_SUCCESS      0       /* success */
+#define E_USAGE                2       /* invalid command syntax */
+#define E_BAD_ARG      3       /* invalid argument to option */
+#define E_GID_IN_USE   4       /* gid not unique (when -o not used) */
+#define E_NAME_IN_USE  9       /* group name not unique */
+#define E_GRP_UPDATE   10      /* can't update group file */
+
+/*
+ * Global variables
+ */
+char *Prog;
+
+static /*@null@*/char *group_name;
+static gid_t group_id;
+static /*@null@*/char *group_passwd;
+static /*@null@*/char *empty_list = NULL;
+
+static bool oflg = false;      /* permit non-unique group ID to be specified with -g */
+static bool gflg = false;      /* ID value for the new group */
+static bool fflg = false;      /* if group already exists, do nothing and exit(0) */
+static bool rflg = false;      /* create a system account */
+static bool pflg = false;      /* new encrypted password */
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+#endif
+
+/* local function prototypes */
+static void usage (void);
+static void new_grent (struct group *grent);
+
+#ifdef SHADOWGRP
+static void new_sgent (struct sgrp *sgent);
+#endif
+static void grp_update (void);
+static void check_new_name (void);
+static void close_files (void);
+static void open_files (void);
+static void process_flags (int argc, char **argv);
+static void check_flags (void);
+static void check_perms (void);
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (void)
+{
+       (void) fprintf (stderr,
+                       _("Usage: %s [options] GROUP\n"
+                         "\n"
+                         "Options:\n"),
+                       Prog);
+       (void) fputs (_("  -f, --force                   exit successfully if the group already exists,\n"
+                       "                                and cancel -g if the GID is already used\n"), stderr);
+       (void) fputs (_("  -g, --gid GID                 use GID for the new group\n"), stderr);
+       (void) fputs (_("  -h, --help                    display this help message and exit\n"), stderr);
+       (void) fputs (_("  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"), stderr);
+       (void) fputs (_("  -o, --non-unique              allow to create groups with duplicate\n"
+                       "                                (non-unique) GID\n"), stderr);
+       (void) fputs (_("  -p, --password PASSWORD       use this encrypted password for the new group\n"), stderr);
+       (void) fputs (_("  -r, --system                  create a system account\n"), stderr);
+       (void) fputs ("\n", stderr);
+       exit (E_USAGE);
+}
+
+/*
+ * new_grent - initialize the values in a group file entry
+ *
+ *     new_grent() takes all of the values that have been entered and fills
+ *     in a (struct group) with them.
+ */
+static void new_grent (struct group *grent)
+{
+       memzero (grent, sizeof *grent);
+       grent->gr_name = group_name;
+       if (pflg) {
+               grent->gr_passwd = group_passwd;
+       } else {
+               grent->gr_passwd = SHADOW_PASSWD_STRING;        /* XXX warning: const */
+       }
+       grent->gr_gid = group_id;
+       grent->gr_mem = &empty_list;
+}
+
+#ifdef SHADOWGRP
+/*
+ * new_sgent - initialize the values in a shadow group file entry
+ *
+ *     new_sgent() takes all of the values that have been entered and fills
+ *     in a (struct sgrp) with them.
+ */
+static void new_sgent (struct sgrp *sgent)
+{
+       memzero (sgent, sizeof *sgent);
+       sgent->sg_name = group_name;
+       if (pflg) {
+               sgent->sg_passwd = group_passwd;
+       } else {
+               sgent->sg_passwd = "!"; /* XXX warning: const */
+       }
+       sgent->sg_adm = &empty_list;
+       sgent->sg_mem = &empty_list;
+}
+#endif                         /* SHADOWGRP */
+
+/*
+ * grp_update - add new group file entries
+ *
+ *     grp_update() writes the new records to the group files.
+ */
+static void grp_update (void)
+{
+       struct group grp;
+
+#ifdef SHADOWGRP
+       struct sgrp sgrp;
+#endif                         /* SHADOWGRP */
+
+       /*
+        * To add the group, we need to update /etc/group.
+        * Make sure failures will be reported.
+        */
+       add_cleanup (cleanup_report_add_group_group, group_name);
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               /* We also need to update /etc/gshadow */
+               add_cleanup (cleanup_report_add_group_gshadow, group_name);
+       }
+#endif
+
+       /*
+        * Create the initial entries for this new group.
+        */
+       new_grent (&grp);
+#ifdef SHADOWGRP
+       new_sgent (&sgrp);
+       if (is_shadow_grp && pflg) {
+               grp.gr_passwd = SHADOW_PASSWD_STRING;   /* XXX warning: const */
+       }
+#endif                         /* SHADOWGRP */
+
+       /*
+        * Write out the new group file entry.
+        */
+       if (gr_update (&grp) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, gr_dbname (), grp.gr_name);
+               exit (E_GRP_UPDATE);
+       }
+#ifdef SHADOWGRP
+       /*
+        * Write out the new shadow group entries as well.
+        */
+       if (is_shadow_grp && (sgr_update (&sgrp) == 0)) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, sgr_dbname (), sgrp.sg_name);
+               exit (E_GRP_UPDATE);
+       }
+#endif                         /* SHADOWGRP */
+}
+
+/*
+ * check_new_name - check the new name for validity
+ *
+ *     check_new_name() insures that the new name doesn't contain any
+ *     illegal characters.
+ */
+static void check_new_name (void)
+{
+       if (is_valid_group_name (group_name)) {
+               return;
+       }
+
+       /*
+        * All invalid group names land here.
+        */
+
+       fprintf (stderr, _("%s: '%s' is not a valid group name\n"),
+                Prog, group_name);
+
+       exit (E_BAD_ARG);
+}
+
+/*
+ * close_files - close all of the files that were opened
+ *
+ *     close_files() closes all of the files that were opened for this new
+ *     group. This causes any modified entries to be written out.
+ */
+static void close_files (void)
+{
+       /* First, write the changes in the regular group database */
+       if (gr_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, gr_dbname ());
+               exit (E_GRP_UPDATE);
+       }
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_GROUP, Prog,
+                     "adding group to /etc/group",
+                     group_name, (unsigned int) group_id,
+                     SHADOW_AUDIT_SUCCESS);
+#endif
+       SYSLOG ((LOG_INFO, "group added to %s: name=%s, GID=%u",
+                gr_dbname (), group_name, (unsigned int) group_id));
+       del_cleanup (cleanup_report_add_group_group);
+
+       cleanup_unlock_group (NULL);
+       del_cleanup (cleanup_unlock_group);
+
+       /* Now, write the changes in the shadow database */
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"),
+                                Prog, sgr_dbname ());
+                       exit (E_GRP_UPDATE);
+               }
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_ADD_GROUP, Prog,
+                             "adding group to /etc/gshadow",
+                             group_name, (unsigned int) group_id,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+               SYSLOG ((LOG_INFO, "group added to %s: name=%s",
+                        sgr_dbname (), group_name));
+               del_cleanup (cleanup_report_add_group_gshadow);
+
+               cleanup_unlock_gshadow (NULL);
+               del_cleanup (cleanup_unlock_gshadow);
+       }
+#endif                         /* SHADOWGRP */
+
+       /* Report success at the system level */
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_GROUP, Prog,
+                     "",
+                     group_name, (unsigned int) group_id,
+                     SHADOW_AUDIT_SUCCESS);
+#endif
+       SYSLOG ((LOG_INFO, "new group: name=%s, GID=%u",
+                group_name, (unsigned int) group_id));
+       del_cleanup (cleanup_report_add_group);
+}
+
+/*
+ * open_files - lock and open the group files
+ *
+ *     open_files() opens the two group files.
+ */
+static void open_files (void)
+{
+       /* First, lock the databases */
+       if (gr_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, gr_dbname ());
+               exit (E_GRP_UPDATE);
+       }
+       add_cleanup (cleanup_unlock_group, NULL);
+
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, sgr_dbname ());
+                       exit (E_GRP_UPDATE);
+               }
+               add_cleanup (cleanup_unlock_gshadow, NULL);
+       }
+#endif                         /* SHADOWGRP */
+
+       /*
+        * Now if the group is not added, it's our fault.
+        * Make sure failures will be reported.
+        */
+       add_cleanup (cleanup_report_add_group, group_name);
+
+       /* An now open the databases */
+       if (gr_open (O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+               SYSLOG ((LOG_WARN, "cannot open %s", gr_dbname ()));
+               exit (E_GRP_UPDATE);
+       }
+
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_open (O_RDWR) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot open %s\n"),
+                                Prog, sgr_dbname ());
+                       SYSLOG ((LOG_WARN, "cannot open %s", sgr_dbname ()));
+                       exit (E_GRP_UPDATE);
+               }
+       }
+#endif                         /* SHADOWGRP */
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ *     It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+       /*
+        * Parse the command line options.
+        */
+       char *cp;
+       int option_index = 0;
+       int c;
+       static struct option long_options[] = {
+               {"force", no_argument, NULL, 'f'},
+               {"gid", required_argument, NULL, 'g'},
+               {"help", no_argument, NULL, 'h'},
+               {"key", required_argument, NULL, 'K'},
+               {"non-unique", no_argument, NULL, 'o'},
+               {"password", required_argument, NULL, 'p'},
+               {"system", no_argument, NULL, 'r'},
+               {NULL, 0, NULL, '\0'}
+       };
+
+       while ((c =
+               getopt_long (argc, argv, "fg:hK:op:r", long_options,
+                            &option_index)) != -1) {
+               switch (c) {
+               case 'f':
+                       /*
+                        * "force" - do nothing, just exit(0), if the
+                        * specified group already exists. With -g, if
+                        * specified gid already exists, choose another
+                        * (unique) gid (turn off -g). Based on the RedHat's
+                        * patch from shadow-utils-970616-9.
+                        */
+                       fflg = true;
+                       break;
+               case 'g':
+                       gflg = true;
+                       if (   (get_gid (optarg, &group_id) == 0)
+                           || (group_id == (gid_t)-1)) {
+                               fprintf (stderr,
+                                        _("%s: invalid group ID '%s'\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
+                       }
+                       break;
+               case 'h':
+                       usage ();
+                       break;
+               case 'K':
+                       /*
+                        * override login.defs defaults (-K name=value)
+                        * example: -K GID_MIN=100 -K GID_MAX=499
+                        * note: -K GID_MIN=10,GID_MAX=499 doesn't work yet
+                        */
+                       cp = strchr (optarg, '=');
+                       if (NULL == cp) {
+                               fprintf (stderr,
+                                        _("%s: -K requires KEY=VALUE\n"),
+                                        Prog);
+                               exit (E_BAD_ARG);
+                       }
+                       /* terminate name, point to value */
+                       *cp++ = '\0';
+                       if (putdef_str (optarg, cp) < 0) {
+                               exit (E_BAD_ARG);
+                       }
+                       break;
+               case 'o':
+                       oflg = true;
+                       break;
+               case 'p':
+                       pflg = true;
+                       group_passwd = optarg;
+                       break;
+               case 'r':
+                       rflg = true;
+                       break;
+               default:
+                       usage ();
+               }
+       }
+
+       /*
+        * Check the flags consistency
+        */
+       if (optind != argc - 1) {
+               usage ();
+       }
+       group_name = argv[optind];
+
+       check_flags ();
+}
+
+/*
+ * check_flags - check flags and parameters consistency
+ *
+ *     It will not return if an error is encountered.
+ */
+static void check_flags (void)
+{
+       /* -o does not make sense without -g */
+       if (oflg && !gflg) {
+               usage ();
+       }
+
+       check_new_name ();
+
+       /*
+        * Check if the group already exist.
+        */
+       /* local, no need for xgetgrnam */
+       if (getgrnam (group_name) != NULL) {
+               /* The group already exist */
+               if (fflg) {
+                       /* OK, no need to do anything */
+                       exit (E_SUCCESS);
+               }
+               fprintf (stderr,
+                        _("%s: group '%s' already exists\n"),
+                        Prog, group_name);
+               exit (E_NAME_IN_USE);
+       }
+
+       if (gflg && (getgrgid (group_id) != NULL)) {
+               /* A GID was specified, and a group already exist with that GID
+                *  - either we will use this GID anyway (-o)
+                *  - either we ignore the specified GID and
+                *    we will use another one (-f)
+                *  - either it is a failure
+                */
+               if (oflg) {
+                       /* Continue with this GID */
+               } else if (fflg) {
+                       /* Turn off -g, we can use any GID */
+                       gflg = false;
+               } else {
+                       fprintf (stderr,
+                                _("%s: GID '%lu' already exists\n"),
+                                Prog, (unsigned long int) group_id);
+                       exit (E_GID_IN_USE);
+               }
+       }
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ *     With PAM support, the setuid bit can be set on groupadd to allow
+ *     non-root users to groups.
+ *     Without PAM support, only users who can write in the group databases
+ *     can add groups.
+ *
+ *     It will not return if the user is not allowed.
+ */
+static void check_perms (void)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       pam_handle_t *pamh = NULL;
+       int retval;
+       struct passwd *pampw;
+
+       pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+       if (NULL == pampw) {
+               fprintf (stderr,
+                        _("%s: Cannot determine your user name.\n"),
+                        Prog);
+               exit (1);
+       }
+
+       retval = pam_start ("groupadd", pampw->pw_name, &conv, &pamh);
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_authenticate (pamh, 0);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_acct_mgmt (pamh, 0);
+       }
+
+       if (NULL != pamh) {
+               (void) pam_end (pamh, retval);
+       }
+       if (PAM_SUCCESS != retval) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               exit (1);
+       }
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+}
+
+/*
+ * main - groupadd command
+ */
+int main (int argc, char **argv)
+{
+#ifdef WITH_AUDIT
+       audit_help_open ();
+#endif
+       atexit (do_cleanups);
+
+       /*
+        * Get my name so that I can use it to report errors.
+        */
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       OPENLOG ("groupadd");
+
+       /*
+        * Parse the command line options.
+        */
+       process_flags (argc, argv);
+
+       check_perms ();
+
+#ifdef SHADOWGRP
+       is_shadow_grp = sgr_file_present ();
+#endif
+
+       /*
+        * Do the hard stuff - open the files, create the group entries,
+        * then close and update the files.
+        */
+       open_files ();
+
+       if (!gflg) {
+               if (find_new_gid (rflg, &group_id, NULL) < 0) {
+                       exit (E_GID_IN_USE);
+               }
+       }
+
+       grp_update ();
+       close_files ();
+
+       nscd_flush_cache ("group");
+
+       exit (E_SUCCESS);
+       /*@notreached@*/
+}
+
diff --git a/src/groupdel.c b/src/groupdel.c
new file mode 100644 (file)
index 0000000..13bd1bb
--- /dev/null
@@ -0,0 +1,433 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: groupdel.c 2851 2009-04-30 21:39:38Z nekral-guest $"
+
+#include <ctype.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+#include <stdio.h>
+#include <sys/types.h>
+#include "defines.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "prototypes.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+/*
+ * Global variables
+ */
+char *Prog;
+
+static char *group_name;
+static gid_t group_id = -1;
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+#endif
+
+/*
+ * exit status values
+ */
+/*@-exitarg@*/
+#define E_SUCCESS      0       /* success */
+#define E_USAGE                2       /* invalid command syntax */
+#define E_NOTFOUND     6       /* specified group doesn't exist */
+#define E_GROUP_BUSY   8       /* can't remove user's primary group */
+#define E_GRP_UPDATE   10      /* can't update group file */
+
+/* local function prototypes */
+static void usage (void);
+static void grp_update (void);
+static void close_files (void);
+static void open_files (void);
+static void group_busy (gid_t);
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (void)
+{
+       fputs (_("Usage: groupdel group\n"), stderr);
+       exit (E_USAGE);
+}
+
+/*
+ * grp_update - update group file entries
+ *
+ *     grp_update() writes the new records to the group files.
+ */
+static void grp_update (void)
+{
+       /*
+        * To add the group, we need to update /etc/group.
+        * Make sure failures will be reported.
+        */
+       add_cleanup (cleanup_report_del_group_group, group_name);
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               /* We also need to update /etc/gshadow */
+               add_cleanup (cleanup_report_del_group_gshadow, group_name);
+       }
+#endif
+
+       /*
+        * Delete the group entry.
+        */
+       if (gr_remove (group_name) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot remove entry '%s' from %s\n"),
+                        Prog, group_name, gr_dbname ());
+               exit (E_GRP_UPDATE);
+       }
+
+#ifdef SHADOWGRP
+       /*
+        * Delete the shadow group entries as well.
+        */
+       if (is_shadow_grp && (sgr_locate (group_name) != NULL)) {
+               if (sgr_remove (group_name) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot remove entry '%s' from %s\n"),
+                                Prog, group_name, sgr_dbname ());
+                       exit (E_GRP_UPDATE);
+               }
+       }
+#endif                         /* SHADOWGRP */
+}
+
+/*
+ * close_files - close all of the files that were opened
+ *
+ *     close_files() closes all of the files that were opened for this
+ *     new group.  This causes any modified entries to be written out.
+ */
+static void close_files (void)
+{
+       /* First, write the changes in the regular group database */
+       if (gr_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, gr_dbname ());
+               exit (E_GRP_UPDATE);
+       }
+
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_DEL_GROUP, Prog,
+                     "removing group from /etc/group",
+                     group_name, (unsigned int) group_id,
+                     SHADOW_AUDIT_SUCCESS);
+#endif
+       SYSLOG ((LOG_INFO,
+                "group '%s' removed from %s",
+                group_name, gr_dbname ()));
+       del_cleanup (cleanup_report_del_group_group);
+
+       cleanup_unlock_group (NULL);
+       del_cleanup (cleanup_unlock_group);
+
+
+       /* Then, write the changes in the shadow database */
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"),
+                                Prog, sgr_dbname ());
+                       exit (E_GRP_UPDATE);
+               }
+
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_DEL_GROUP, Prog,
+                             "removing group from /etc/gshadow",
+                             group_name, (unsigned int) group_id,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+               SYSLOG ((LOG_INFO,
+                        "group '%s' removed from %s",
+                        group_name, sgr_dbname ()));
+               del_cleanup (cleanup_report_del_group_gshadow);
+
+               cleanup_unlock_gshadow (NULL);
+               del_cleanup (cleanup_unlock_gshadow);
+       }
+#endif                         /* SHADOWGRP */
+
+       /* Report success at the system level */
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_DEL_GROUP, Prog,
+                     "",
+                     group_name, (unsigned int) group_id,
+                     SHADOW_AUDIT_SUCCESS);
+#endif
+       SYSLOG ((LOG_INFO, "group '%s' removed\n", group_name));
+       del_cleanup (cleanup_report_del_group);
+}
+
+/*
+ * open_files - lock and open the group files
+ *
+ *     open_files() opens the two group files.
+ */
+static void open_files (void)
+{
+       /* First, lock the databases */
+       if (gr_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, gr_dbname ());
+               exit (E_GRP_UPDATE);
+       }
+       add_cleanup (cleanup_unlock_group, NULL);
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, sgr_dbname ());
+                       exit (E_GRP_UPDATE);
+               }
+               add_cleanup (cleanup_unlock_gshadow, NULL);
+       }
+#endif
+
+       /*
+        * Now, if the group is not removed, it's our fault.
+        * Make sure failures will be reported.
+        */
+       add_cleanup (cleanup_report_del_group, group_name);
+
+       /* An now open the databases */
+       if (gr_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"),
+                        Prog, gr_dbname ());
+               SYSLOG ((LOG_WARN, "cannot open %s", gr_dbname ()));
+               exit (E_GRP_UPDATE);
+       }
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_open (O_RDWR) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot open %s\n"),
+                                Prog, sgr_dbname ());
+                       SYSLOG ((LOG_WARN, "cannot open %s", sgr_dbname ()));
+                       exit (E_GRP_UPDATE);
+               }
+       }
+#endif                         /* SHADOWGRP */
+}
+
+/*
+ * group_busy - check if this is any user's primary group
+ *
+ *     group_busy verifies that this group is not the primary group
+ *     for any user.  You must remove all users before you remove
+ *     the group.
+ */
+static void group_busy (gid_t gid)
+{
+       struct passwd *pwd;
+
+       /*
+        * Nice slow linear search.
+        */
+
+       setpwent ();
+
+       while ( ((pwd = getpwent ()) != NULL) && (pwd->pw_gid != gid) );
+
+       endpwent ();
+
+       /*
+        * If pwd isn't NULL, it stopped because the gid's matched.
+        */
+
+       if (pwd == (struct passwd *) 0) {
+               return;
+       }
+
+       /*
+        * Can't remove the group.
+        */
+       fprintf (stderr,
+                _("%s: cannot remove the primary group of user '%s'\n"),
+                Prog, pwd->pw_name);
+       exit (E_GROUP_BUSY);
+}
+
+/*
+ * main - groupdel command
+ *
+ *     The syntax of the groupdel command is
+ *     
+ *     groupdel group
+ *
+ *     The named group will be deleted.
+ */
+
+int main (int argc, char **argv)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       pam_handle_t *pamh = NULL;
+       int retval;
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+
+#ifdef WITH_AUDIT
+       audit_help_open ();
+#endif
+       atexit (do_cleanups);
+
+       /*
+        * Get my name so that I can use it to report errors.
+        */
+
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       if (argc != 2) {
+               usage ();
+       }
+
+       group_name = argv[1];
+
+       OPENLOG ("groupdel");
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       {
+               struct passwd *pampw;
+               pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+               if (pampw == NULL) {
+                       fprintf (stderr,
+                                _("%s: Cannot determine your user name.\n"),
+                                Prog);
+                       exit (1);
+               }
+
+               retval = pam_start ("groupdel", pampw->pw_name, &conv, &pamh);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_authenticate (pamh, 0);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_acct_mgmt (pamh, 0);
+       }
+
+       if (NULL != pamh) {
+               (void) pam_end (pamh, retval);
+       }
+       if (PAM_SUCCESS != retval) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               exit (1);
+       }
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+
+#ifdef SHADOWGRP
+       is_shadow_grp = sgr_file_present ();
+#endif
+
+       {
+               struct group *grp;
+               /*
+                * Start with a quick check to see if the group exists.
+                */
+               grp = getgrnam (group_name); /* local, no need for xgetgrnam */
+               if (NULL == grp) {
+                       fprintf (stderr,
+                                _("%s: group '%s' does not exist\n"),
+                                Prog, group_name);
+                       exit (E_NOTFOUND);
+               }
+
+               group_id = grp->gr_gid;
+       }
+
+#ifdef USE_NIS
+       /*
+        * Make sure this isn't a NIS group
+        */
+       if (__isgrNIS ()) {
+               char *nis_domain;
+               char *nis_master;
+
+               fprintf (stderr,
+                        _("%s: group '%s' is a NIS group\n"),
+                        Prog, group_name);
+
+               if (!yp_get_default_domain (&nis_domain) &&
+                   !yp_master (nis_domain, "group.byname", &nis_master)) {
+                       fprintf (stderr,
+                                _("%s: %s is the NIS master\n"),
+                                Prog, nis_master);
+               }
+               exit (E_NOTFOUND);
+       }
+#endif
+
+       /*
+        * Make sure this isn't the primary group of anyone.
+        */
+       group_busy (group_id);
+
+       /*
+        * Do the hard stuff - open the files, delete the group entries,
+        * then close and update the files.
+        */
+       open_files ();
+
+       grp_update ();
+
+       close_files ();
+
+       nscd_flush_cache ("group");
+
+       return E_SUCCESS;
+}
+
diff --git a/src/groupmems.c b/src/groupmems.c
new file mode 100644 (file)
index 0000000..b16fea3
--- /dev/null
@@ -0,0 +1,637 @@
+/*
+ * Copyright (c) 2000       , International Business Machines
+ *                            George Kraft IV, gk4@us.ibm.com, 03/23/2000
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif                         /* USE_PAM */
+#include <pwd.h>
+#include "defines.h"
+#include "prototypes.h"
+#include "groupio.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+
+/* Exit Status Values */
+/*@-exitarg@*/
+#define EXIT_SUCCESS           0       /* success */
+#define EXIT_USAGE             1       /* invalid command syntax */
+#define EXIT_GROUP_FILE                2       /* group file access problems */
+#define EXIT_NOT_ROOT          3       /* not superuser  */
+#define EXIT_NOT_EROOT         4       /* not effective superuser  */
+#define EXIT_NOT_PRIMARY       5       /* not primary owner of group  */
+#define EXIT_NOT_MEMBER                6       /* member of group does not exist */
+#define EXIT_MEMBER_EXISTS     7       /* member of group already exists */
+#define EXIT_INVALID_USER      8       /* specified user does not exist */
+#define EXIT_INVALID_GROUP     9       /* specified group does not exist */
+
+/*
+ * Global variables
+ */
+char *Prog;
+
+static char *adduser = NULL;
+static char *deluser = NULL;
+static char *thisgroup = NULL;
+static bool purge = false;
+static bool list = false;
+static int exclusive = 0;
+static bool gr_locked = false;
+#ifdef SHADOWGRP
+/* Indicate if shadow groups are enabled on the system
+ * (/etc/gshadow present) */
+static bool is_shadowgrp;
+static bool sgr_locked = false;
+#endif
+
+/* local function prototypes */
+static char *whoami (void);
+static void add_user (const char *user,
+                      const struct group *grp);
+static void remove_user (const char *user, 
+                         const struct group *grp);
+static void purge_members (const struct group *grp);
+static void display_members (const char *const *members);
+static void usage (void);
+static void process_flags (int argc, char **argv);
+static void check_perms (void);
+static void fail_exit (int code);
+#define isroot()               (getuid () == 0)
+
+static char *whoami (void)
+{
+       /* local, no need for xgetgrgid */
+       struct group *grp = getgrgid (getgid ());
+       /* local, no need for xgetpwuid */
+       struct passwd *usr = getpwuid (getuid ());
+
+       if (   (NULL != usr)
+           && (NULL != grp)
+           && (0 == strcmp (usr->pw_name, grp->gr_name))) {
+               return xstrdup (usr->pw_name);
+       } else {
+               return NULL;
+       }
+}
+
+/*
+ * add_user - Add an user to the specified group
+ */
+static void add_user (const char *user,
+                      const struct group *grp)
+{
+       struct group *newgrp;
+
+       /* Make sure the user is not already part of the group */
+       if (is_on_list (grp->gr_mem, user)) {
+               fprintf (stderr,
+                        _("%s: user '%s' is already a member of '%s'\n"),
+                        Prog, user, grp->gr_name);
+               fail_exit (EXIT_MEMBER_EXISTS);
+       }
+
+       newgrp = __gr_dup(grp);
+       if (NULL == newgrp) {
+               fprintf (stderr,
+                        _("%s: Out of memory. Cannot update %s.\n"),
+                        Prog, gr_dbname ());
+               fail_exit (13);
+       }
+
+       /* Add the user to the /etc/group group */
+       newgrp->gr_mem = add_list (newgrp->gr_mem, user);
+
+#ifdef SHADOWGRP
+       if (is_shadowgrp) {
+               const struct sgrp *sg = sgr_locate (newgrp->gr_name);
+               struct sgrp *newsg;
+
+               if (NULL == sg) {
+                       /* Create a shadow group based on this group */
+                       static struct sgrp sgrent;
+                       sgrent.sg_name = xstrdup (newgrp->gr_name);
+                       sgrent.sg_mem = dup_list (newgrp->gr_mem);
+                       sgrent.sg_adm = (char **) xmalloc (sizeof (char *));
+#ifdef FIRST_MEMBER_IS_ADMIN
+                       if (sgrent.sg_mem[0]) {
+                               sgrent.sg_adm[0] = xstrdup (sgrent.sg_mem[0]);
+                               sgrent.sg_adm[1] = NULL;
+                       } else
+#endif
+                       {
+                               sgrent.sg_adm[0] = NULL;
+                       }
+
+                       /* Move any password to gshadow */
+                       sgrent.sg_passwd = newgrp->gr_passwd;
+                       newgrp->gr_passwd = SHADOW_PASSWD_STRING;
+
+                       newsg = &sgrent;
+               } else {
+                       newsg = __sgr_dup (sg);
+                       if (NULL == newsg) {
+                               fprintf (stderr,
+                                        _("%s: Out of memory. Cannot update %s.\n"),
+                                        Prog, sgr_dbname ());
+                               fail_exit (13);
+                       }
+                       /* Add the user to the members */
+                       newsg->sg_mem = add_list (newsg->sg_mem, user);
+                       /* Do not touch the administrators */
+               }
+
+               if (sgr_update (newsg) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, sgr_dbname (), newsg->sg_name);
+                       fail_exit (13);
+               }
+       }
+#endif
+
+       if (gr_update (newgrp) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, gr_dbname (), newgrp->gr_name);
+               fail_exit (13);
+       }
+}
+
+/*
+ * remove_user - Remove an user from a given group
+ */
+static void remove_user (const char *user, 
+                         const struct group *grp)
+{
+       struct group *newgrp;
+
+       /* Check if the user is a member of the specified group */
+       if (!is_on_list (grp->gr_mem, user)) {
+               fprintf (stderr,
+                        _("%s: user '%s' is not a member of '%s'\n"),
+                        Prog, user, grp->gr_name);
+               fail_exit (EXIT_NOT_MEMBER);
+       }
+
+       newgrp = __gr_dup (grp);
+       if (NULL == newgrp) {
+               fprintf (stderr,
+                        _("%s: Out of memory. Cannot update %s.\n"),
+                        Prog, gr_dbname ());
+               fail_exit (13);
+       }
+
+       /* Remove the user from the /etc/group group */
+       newgrp->gr_mem = del_list (newgrp->gr_mem, user);
+
+#ifdef SHADOWGRP
+       if (is_shadowgrp) {
+               const struct sgrp *sg = sgr_locate (newgrp->gr_name);
+               struct sgrp *newsg;
+
+               if (NULL == sg) {
+                       /* Create a shadow group based on this group */
+                       static struct sgrp sgrent;
+                       sgrent.sg_name = xstrdup (newgrp->gr_name);
+                       sgrent.sg_mem = dup_list (newgrp->gr_mem);
+                       sgrent.sg_adm = (char **) xmalloc (sizeof (char *));
+#ifdef FIRST_MEMBER_IS_ADMIN
+                       if (sgrent.sg_mem[0]) {
+                               sgrent.sg_adm[0] = xstrdup (sgrent.sg_mem[0]);
+                               sgrent.sg_adm[1] = NULL;
+                       } else
+#endif
+                       {
+                               sgrent.sg_adm[0] = NULL;
+                       }
+
+                       /* Move any password to gshadow */
+                       sgrent.sg_passwd = newgrp->gr_passwd;
+                       newgrp->gr_passwd = SHADOW_PASSWD_STRING;
+
+                       newsg = &sgrent;
+               } else {
+                       newsg = __sgr_dup (sg);
+                       if (NULL == newsg) {
+                               fprintf (stderr,
+                                        _("%s: Out of memory. Cannot update %s.\n"),
+                                        Prog, sgr_dbname ());
+                               fail_exit (13);
+                       }
+                       /* Remove the user from the members */
+                       newsg->sg_mem = del_list (newsg->sg_mem, user);
+                       /* Remove the user from the administrators */
+                       newsg->sg_adm = del_list (newsg->sg_adm, user);
+               }
+
+               if (sgr_update (newsg) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, sgr_dbname (), newsg->sg_name);
+                       fail_exit (13);
+               }
+       }
+#endif
+
+       if (gr_update (newgrp) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, gr_dbname (), newgrp->gr_name);
+               fail_exit (13);
+       }
+}
+
+/*
+ * purge_members - Rmeove every members of the specified group
+ */
+static void purge_members (const struct group *grp)
+{
+       struct group *newgrp = __gr_dup (grp);
+
+       if (NULL == newgrp) {
+               fprintf (stderr,
+                        _("%s: Out of memory. Cannot update %s.\n"),
+                        Prog, gr_dbname ());
+               fail_exit (13);
+       }
+
+       /* Remove all the members of the /etc/group group */
+       newgrp->gr_mem[0] = NULL;
+
+#ifdef SHADOWGRP
+       if (is_shadowgrp) {
+               const struct sgrp *sg = sgr_locate (newgrp->gr_name);
+               struct sgrp *newsg;
+
+               if (NULL == sg) {
+                       /* Create a shadow group based on this group */
+                       static struct sgrp sgrent;
+                       sgrent.sg_name = xstrdup (newgrp->gr_name);
+                       sgrent.sg_mem = (char **) xmalloc (sizeof (char *));
+                       sgrent.sg_mem[0] = NULL;
+                       sgrent.sg_adm = (char **) xmalloc (sizeof (char *));
+                       sgrent.sg_adm[0] = NULL;
+
+                       /* Move any password to gshadow */
+                       sgrent.sg_passwd = newgrp->gr_passwd;
+                       newgrp->gr_passwd = xstrdup(SHADOW_PASSWD_STRING);
+
+                       newsg = &sgrent;
+               } else {
+                       newsg = __sgr_dup (sg);
+                       if (NULL == newsg) {
+                               fprintf (stderr,
+                                        _("%s: Out of memory. Cannot update %s.\n"),
+                                        Prog, sgr_dbname ());
+                               fail_exit (13);
+                       }
+                       /* Remove all the members of the /etc/gshadow
+                        * group */
+                       newsg->sg_mem[0] = NULL;
+                       /* Remove all the administrators of the
+                        * /etc/gshadow group */
+                       newsg->sg_adm[0] = NULL;
+               }
+
+               if (sgr_update (newsg) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, sgr_dbname (), newsg->sg_name);
+                       fail_exit (13);
+               }
+       }
+#endif
+
+       if (gr_update (newgrp) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, gr_dbname (), newgrp->gr_name);
+               fail_exit (13);
+       }
+}
+
+static void display_members (const char *const *members)
+{
+       int i;
+
+       for (i = 0; NULL != members[i]; i++) {
+               printf ("%s ", members[i]);
+
+               if (NULL == members[i + 1]) {
+                       printf ("\n");
+               } else {
+                       printf (" ");
+               }
+       }
+}
+
+static void usage (void)
+{
+       (void) fputs (_("Usage: groupmems [options] [action]\n"
+                       "\n"
+                       "Options:\n"
+                       "  -g, --group groupname         change groupname instead of the user's group\n"
+                       "                                (root only)\n"
+                       "\n"
+                       "Actions:\n"
+                       "  -a, --add username            add username to the members of the group\n"
+                       "  -d, --delete username         remove username from the members of the group\n"
+                       "  -p, --purge                   purge all members from the group\n"
+                       "  -l, --list                    list the members of the group\n"
+                       "\n"), stderr);
+       fail_exit (EXIT_USAGE);
+}
+
+/*
+ * process_flags - perform command line argument setting
+ */
+static void process_flags (int argc, char **argv)
+{
+       int arg;
+       int option_index = 0;
+       static struct option long_options[] = {
+               {"add", required_argument, NULL, 'a'},
+               {"delete", required_argument, NULL, 'd'},
+               {"group", required_argument, NULL, 'g'},
+               {"list", no_argument, NULL, 'l'},
+               {"purge", no_argument, NULL, 'p'},
+               {NULL, 0, NULL, '\0'}
+       };
+
+       while ((arg = getopt_long (argc, argv, "a:d:g:lp", long_options,
+                                  &option_index)) != EOF) {
+               switch (arg) {
+               case 'a':
+                       adduser = xstrdup (optarg);
+                       ++exclusive;
+                       break;
+               case 'd':
+                       deluser = xstrdup (optarg);
+                       ++exclusive;
+                       break;
+               case 'g':
+                       thisgroup = xstrdup (optarg);
+                       break;
+               case 'l':
+                       list = true;
+                       ++exclusive;
+                       break;
+               case 'p':
+                       purge = true;
+                       ++exclusive;
+                       break;
+               default:
+                       usage ();
+               }
+       }
+
+       if ((exclusive > 1) || (optind < argc)) {
+               usage ();
+       }
+
+       /* local, no need for xgetpwnam */
+       if (   (NULL != adduser)
+           && (getpwnam (adduser) == NULL)) {
+               fprintf (stderr, _("%s: user '%s' does not exist\n"),
+                        Prog, adduser);
+               fail_exit (EXIT_INVALID_USER);
+       }
+
+}
+
+static void check_perms (void)
+{
+       if (!list) {
+#ifdef USE_PAM
+               pam_handle_t *pamh = NULL;
+               int retval;
+               struct passwd *pampw;
+
+               pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+               if (NULL == pampw) {
+                       fprintf (stderr,
+                                _("%s: Cannot determine your user name.\n"),
+                                Prog);
+                       fail_exit (1);
+               }
+
+               retval = pam_start ("groupmems", pampw->pw_name, &conv, &pamh);
+
+               if (PAM_SUCCESS == retval) {
+                       retval = pam_authenticate (pamh, 0);
+               }
+
+               if (PAM_SUCCESS == retval) {
+                       retval = pam_acct_mgmt (pamh, 0);
+               }
+
+               if (NULL != pamh) {
+                       (void) pam_end (pamh, retval);
+               }
+               if (PAM_SUCCESS != retval) {
+                       fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+                       fail_exit (1);
+               }
+#endif
+       }
+}
+
+static void fail_exit (int code)
+{
+       if (gr_locked) {
+               if (gr_unlock () == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to unlock %s\n"),
+                                Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+                       /* continue */
+               }
+       }
+
+#ifdef SHADOWGRP
+       if (sgr_locked) {
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to unlock %s\n"),
+                                Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                       /* continue */
+               }
+       }
+#endif
+
+       exit (code);
+}
+
+static void open_files (void)
+{
+       if (!list) {
+               if (gr_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, gr_dbname ());
+                       fail_exit (EXIT_GROUP_FILE);
+               }
+               gr_locked = true;
+
+#ifdef SHADOWGRP
+               if (is_shadowgrp) {
+                       if (sgr_lock () == 0) {
+                               fprintf (stderr,
+                                        _("%s: cannot lock %s; try again later.\n"),
+                                        Prog, sgr_dbname ());
+                               fail_exit (EXIT_GROUP_FILE);
+                       }
+                       sgr_locked = true;
+               }
+#endif
+       }
+
+       if (gr_open (list ? O_RDONLY : O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+               fail_exit (EXIT_GROUP_FILE);
+       }
+
+#ifdef SHADOWGRP
+       if (is_shadowgrp) {
+               if (sgr_open (list ? O_RDONLY : O_RDWR) == 0) {
+                       fprintf (stderr, _("%s: cannot open %s\n"), Prog, sgr_dbname ());
+                       fail_exit (EXIT_GROUP_FILE);
+               }
+       }
+#endif
+}
+
+static void close_files (void)
+{
+       if ((gr_close () == 0) && !list) {
+               fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+               fail_exit (EXIT_GROUP_FILE);
+       }
+       if (gr_locked) {
+               if (gr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+                       /* continue */
+               }
+               gr_locked = false;
+       }
+
+#ifdef SHADOWGRP
+       if (is_shadowgrp) {
+               if ((sgr_close () == 0) && !list) {
+                       fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+                       fail_exit (EXIT_GROUP_FILE);
+               }
+               if (sgr_locked) {
+                       if (sgr_unlock () == 0) {
+                               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                               SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                               /* continue */
+                       }
+                       sgr_locked = false;
+               }
+       }
+#endif
+}
+
+int main (int argc, char **argv) 
+{
+       char *name;
+       const struct group *grp;
+
+       /*
+        * Get my name so that I can use it to report errors.
+        */
+       Prog = Basename (argv[0]);
+
+       OPENLOG ("groupmems");
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+#ifdef SHADOWGRP
+       is_shadowgrp = sgr_file_present ();
+#endif
+
+       process_flags (argc, argv);
+
+       if (NULL == thisgroup) {
+               name = whoami ();
+               if (!list && (NULL == name)) {
+                       fprintf (stderr, _("%s: your groupname does not match your username\n"), Prog);
+                       fail_exit (EXIT_NOT_PRIMARY);
+               }
+       } else {
+               name = thisgroup;
+               if (!list && !isroot ()) {
+                       fprintf (stderr, _("%s: only root can use the -g/--group option\n"), Prog);
+                       fail_exit (EXIT_NOT_ROOT);
+               }
+       }
+
+       check_perms ();
+
+       open_files ();
+
+       grp = gr_locate (name);
+       if (NULL == grp) {
+               fprintf (stderr, _("%s: group '%s' does not exist in %s\n"),
+                        Prog, name, gr_dbname ());
+               fail_exit (EXIT_INVALID_GROUP);
+       }
+
+       if (list) {
+               display_members ((const char *const *)grp->gr_mem);
+       } else if (NULL != adduser) {
+               add_user (adduser, grp);
+       } else if (NULL != deluser) {
+               remove_user (deluser, grp);
+       } else if (purge) {
+               purge_members (grp);
+       }
+
+       close_files ();
+
+       exit (EXIT_SUCCESS);
+}
+
diff --git a/src/groupmod.c b/src/groupmod.c
new file mode 100644 (file)
index 0000000..20e7e5c
--- /dev/null
@@ -0,0 +1,822 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: groupmod.c 3015 2009-06-05 22:16:56Z nekral-guest $"
+
+#include <ctype.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#include <pwd.h>
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+#include "chkname.h"
+#include "defines.h"
+#include "groupio.h"
+#include "pwio.h"
+#include "nscd.h"
+#include "prototypes.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+/*
+ * exit status values
+ */
+/*@-exitarg@*/
+#define E_SUCCESS      0       /* success */
+#define E_USAGE                2       /* invalid command syntax */
+#define E_BAD_ARG      3       /* invalid argument to option */
+#define E_GID_IN_USE   4       /* gid already in use (and no -o) */
+#define E_NOTFOUND     6       /* specified group doesn't exist */
+#define E_NAME_IN_USE  9       /* group name already in use */
+#define E_GRP_UPDATE   10      /* can't update group file */
+/*
+ * Global variables
+ */
+char *Prog;
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+#endif                         /* SHADOWGRP */
+static char *group_name;
+static char *group_newname;
+static char *group_passwd;
+static gid_t group_id;
+static gid_t group_newid;
+
+struct cleanup_info_mod info_passwd;
+struct cleanup_info_mod info_group;
+#ifdef SHADOWGRP
+struct cleanup_info_mod info_gshadow;
+#endif
+
+static bool
+    oflg = false,              /* permit non-unique group ID to be specified with -g */
+    gflg = false,              /* new ID value for the group */
+    nflg = false,              /* a new name has been specified for the group */
+    pflg = false;              /* new encrypted password */
+
+/* local function prototypes */
+static void usage (void);
+static void new_grent (struct group *);
+
+#ifdef SHADOWGRP
+static void new_sgent (struct sgrp *);
+#endif
+static void grp_update (void);
+static void check_new_gid (void);
+static void check_new_name (void);
+static void process_flags (int, char **);
+static void lock_files (void);
+static void prepare_failure_reports (void);
+static void open_files (void);
+static void close_files (void);
+static void update_primary_groups (gid_t ogid, gid_t ngid);
+
+/*
+ * usage - display usage message and exit
+ */
+
+static void usage (void)
+{
+       (void) fprintf (stderr,
+                       _("Usage: %s [options] GROUP\n"
+                         "\n"
+                         "Options:\n"),
+                       Prog);
+       (void) fputs (_("  -g, --gid GID                 change the group ID to GID\n"), stderr);
+       (void) fputs (_("  -h, --help                    display this help message and exit\n"), stderr);
+       (void) fputs (_("  -n, --new-name NEW_GROUP      change the name to NEW_GROUP\n"), stderr);
+       (void) fputs (_("  -o, --non-unique              allow to use a duplicate (non-unique) GID\n"), stderr);
+       (void) fputs (_("  -p, --password PASSWORD       change the password to this (encrypted)\n"
+                       "                                PASSWORD\n"), stderr);
+       (void) fputs ("\n", stderr);
+       exit (E_USAGE);
+}
+
+/*
+ * new_grent - updates the values in a group file entry
+ *
+ *     new_grent() takes all of the values that have been entered and fills
+ *     in a (struct group) with them.
+ */
+static void new_grent (struct group *grent)
+{
+       if (nflg) {
+               grent->gr_name = xstrdup (group_newname);
+       }
+
+       if (gflg) {
+               grent->gr_gid = group_newid;
+       }
+
+       if (pflg) {
+               grent->gr_passwd = group_passwd;
+       }
+}
+
+#ifdef SHADOWGRP
+/*
+ * new_sgent - updates the values in a shadow group file entry
+ *
+ *     new_sgent() takes all of the values that have been entered and fills
+ *     in a (struct sgrp) with them.
+ */
+static void new_sgent (struct sgrp *sgent)
+{
+       if (nflg) {
+               sgent->sg_name = xstrdup (group_newname);
+       }
+
+       if (pflg) {
+               sgent->sg_passwd = group_passwd;
+       }
+}
+#endif                         /* SHADOWGRP */
+
+/*
+ * grp_update - update group file entries
+ *
+ *     grp_update() updates the new records in the memory databases.
+ */
+static void grp_update (void)
+{
+       struct group grp;
+       const struct group *ogrp;
+
+#ifdef SHADOWGRP
+       struct sgrp sgrp;
+       const struct sgrp *osgrp = NULL;
+#endif                         /* SHADOWGRP */
+
+       /*
+        * Get the current settings for this group.
+        */
+       ogrp = gr_locate (group_name);
+       if (!ogrp) {
+               fprintf (stderr,
+                        _("%s: group '%s' does not exist in %s\n"),
+                        Prog, group_name, gr_dbname ());
+               exit (E_GRP_UPDATE);
+       }
+       grp = *ogrp;
+       new_grent (&grp);
+#ifdef SHADOWGRP
+       if (   is_shadow_grp
+           && (pflg || nflg)) {
+               osgrp = sgr_locate (group_name);
+               if (NULL != osgrp) {
+                       sgrp = *osgrp;
+                       new_sgent (&sgrp);
+                       if (pflg) {
+                               grp.gr_passwd = SHADOW_PASSWD_STRING;
+                       }
+               }
+       }
+#endif                         /* SHADOWGRP */
+
+       if (gflg) {
+               update_primary_groups (ogrp->gr_gid, group_newid);
+       }
+
+       /*
+        * Write out the new group file entry.
+        */
+       if (gr_update (&grp) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, gr_dbname (), grp.gr_name);
+               exit (E_GRP_UPDATE);
+       }
+       if (nflg && (gr_remove (group_name) == 0)) {
+               fprintf (stderr,
+                        _("%s: cannot remove entry '%s' from %s\n"),
+                        Prog, grp.gr_name, gr_dbname ());
+               exit (E_GRP_UPDATE);
+       }
+#ifdef SHADOWGRP
+
+       /*
+        * Make sure there was a shadow entry to begin with.
+        */
+       if (   (NULL != osgrp)
+           && (pflg || nflg)) {
+               /*
+                * Write out the new shadow group entries as well.
+                */
+               if (sgr_update (&sgrp) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, sgr_dbname (), sgrp.sg_name);
+                       exit (E_GRP_UPDATE);
+               }
+               if (nflg && (sgr_remove (group_name) == 0)) {
+                       fprintf (stderr,
+                                _("%s: cannot remove entry '%s' from %s\n"),
+                                Prog, group_name, sgr_dbname ());
+                       exit (E_GRP_UPDATE);
+               }
+       }
+#endif                         /* SHADOWGRP */
+}
+
+/*
+ * check_new_gid - check the new GID value for uniqueness
+ *
+ *     check_new_gid() insures that the new GID value is unique.
+ */
+static void check_new_gid (void)
+{
+       /*
+        * First, the easy stuff. If the ID can be duplicated, or if the ID
+        * didn't really change, just return. If the ID didn't change, turn
+        * off those flags. No sense doing needless work.
+        */
+       if (group_id == group_newid) {
+               gflg = 0;
+               return;
+       }
+
+       if (oflg ||
+           (getgrgid (group_newid) == NULL) /* local, no need for xgetgrgid */
+          ) {
+               return;
+       }
+
+       /*
+        * Tell the user what they did wrong.
+        */
+       fprintf (stderr,
+                _("%s: GID '%lu' already exists\n"),
+                Prog, (unsigned long int) group_newid);
+       exit (E_GID_IN_USE);
+}
+
+/*
+ * check_new_name - check the new name for uniqueness
+ *
+ *     check_new_name() insures that the new name does not exist already.
+ *     You can't have the same name twice, period.
+ */
+static void check_new_name (void)
+{
+       /*
+        * Make sure they are actually changing the name.
+        */
+       if (strcmp (group_name, group_newname) == 0) {
+               nflg = 0;
+               return;
+       }
+
+       if (is_valid_group_name (group_newname)) {
+
+               /*
+                * If the entry is found, too bad.
+                */
+               /* local, no need for xgetgrnam */
+               if (getgrnam (group_newname) != NULL) {
+                       fprintf (stderr,
+                                _("%s: group '%s' already exists\n"),
+                                Prog, group_newname);
+                       exit (E_NAME_IN_USE);
+               }
+               return;
+       }
+
+       /*
+        * All invalid group names land here.
+        */
+
+       fprintf (stderr,
+                _("%s: invalid group name '%s'\n"),
+                Prog, group_newname);
+       exit (E_BAD_ARG);
+}
+
+/*
+ * process_flags - perform command line argument setting
+ *
+ *     process_flags() interprets the command line arguments and sets the
+ *     values that the user will be created with accordingly. The values
+ *     are checked for sanity.
+ */
+static void process_flags (int argc, char **argv)
+{
+       int option_index = 0;
+       int c;
+       static struct option long_options[] = {
+               {"gid", required_argument, NULL, 'g'},
+               {"help", no_argument, NULL, 'h'},
+               {"new-name", required_argument, NULL, 'n'},
+               {"non-unique", no_argument, NULL, 'o'},
+               {"password", required_argument, NULL, 'p'},
+               {NULL, 0, NULL, '\0'}
+       };
+       while ((c =
+               getopt_long (argc, argv, "g:hn:op:",
+                            long_options, &option_index)) != -1) {
+               switch (c) {
+               case 'g':
+                       gflg = true;
+                       if (   (get_gid (optarg, &group_newid) == 0)
+                           || (group_newid == (gid_t)-1)) {
+                               fprintf (stderr,
+                                        _("%s: invalid group ID '%s'\n"),
+                                        Prog, optarg);
+                               exit (E_BAD_ARG);
+                       }
+                       break;
+               case 'n':
+                       nflg = true;
+                       group_newname = optarg;
+                       break;
+               case 'o':
+                       oflg = true;
+                       break;
+               case 'p':
+                       group_passwd = optarg;
+                       pflg = true;
+                       break;
+               default:
+                       usage ();
+               }
+       }
+
+       if (oflg && !gflg) {
+               usage ();
+       }
+
+       if (optind != (argc - 1)) {
+               usage ();
+       }
+
+       group_name = argv[argc - 1];
+}
+
+/*
+ * close_files - close all of the files that were opened
+ *
+ *     close_files() closes all of the files that were opened for this new
+ *     group. This causes any modified entries to be written out.
+ */
+static void close_files (void)
+{
+       if (gr_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, gr_dbname ());
+               exit (E_GRP_UPDATE);
+       }
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_USER_ACCT, Prog,
+                     info_group.audit_msg,
+                     group_name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_SUCCESS);
+#endif
+       SYSLOG ((LOG_INFO,
+                "group changed in %s (%s)",
+                gr_dbname (), info_group.action));
+       del_cleanup (cleanup_report_mod_group);
+
+       cleanup_unlock_group (NULL);
+       del_cleanup (cleanup_unlock_group);
+
+#ifdef SHADOWGRP
+       if (   is_shadow_grp
+           && (pflg || nflg)) {
+               if (sgr_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"),
+                                Prog, sgr_dbname ());
+                       exit (E_GRP_UPDATE);
+               }
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_ACCT, Prog,
+                             info_gshadow.audit_msg,
+                             group_name, AUDIT_NO_ID,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+               SYSLOG ((LOG_INFO,
+                        "group changed in %s (%s)",
+                        sgr_dbname (), info_gshadow.action));
+               del_cleanup (cleanup_report_mod_gshadow);
+
+               cleanup_unlock_gshadow (NULL);
+               del_cleanup (cleanup_unlock_gshadow);
+       }
+#endif                         /* SHADOWGRP */
+
+       if (gflg) {
+               if (pw_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"),
+                                Prog, pw_dbname ());
+                       exit (E_GRP_UPDATE);
+               }
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_ACCT, Prog,
+                             info_passwd.audit_msg,
+                             group_name, AUDIT_NO_ID,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+               SYSLOG ((LOG_INFO,
+                        "group changed in %s (%s)",
+                        pw_dbname (), info_passwd.action));
+               del_cleanup (cleanup_report_mod_passwd);
+
+               cleanup_unlock_passwd (NULL);
+               del_cleanup (cleanup_unlock_passwd);
+       }
+
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_USER_ACCT, Prog,
+                     "modifying group",
+                     group_name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_SUCCESS);
+#endif
+}
+
+/*
+ * prepare_failure_reports - Prepare the cleanup_info structure for logging
+ * of success and failure to syslog or audit.
+ */
+static void prepare_failure_reports (void)
+{
+       info_group.name   = group_name;
+#ifdef SHADOWGRP
+       info_gshadow.name = group_name;
+#endif
+       info_passwd.name  = group_name;
+
+       info_group.audit_msg   = xmalloc (512);
+#ifdef SHADOWGRP
+       info_gshadow.audit_msg = xmalloc (512);
+#endif
+       info_passwd.audit_msg  = xmalloc (512);
+
+       snprintf (info_group.audit_msg, 511,
+                 "changing %s; ", gr_dbname ());
+#ifdef SHADOWGRP
+       snprintf (info_gshadow.audit_msg, 511,
+                 "changing %s; ", sgr_dbname ());
+#endif
+       snprintf (info_passwd.audit_msg, 511,
+                 "changing %s; ", pw_dbname ());
+
+       info_group.action   =   info_group.audit_msg
+                             + strlen (info_group.audit_msg);
+#ifdef SHADOWGRP
+       info_gshadow.action =   info_gshadow.audit_msg
+                             + strlen (info_gshadow.audit_msg);
+#endif
+       info_passwd.action  =   info_passwd.audit_msg
+                             + strlen (info_passwd.audit_msg);
+
+       snprintf (info_group.action,   511 - strlen (info_group.audit_msg),
+                 "group %s/%lu", group_name, (unsigned long int) group_id);
+#ifdef SHADOWGRP
+       snprintf (info_gshadow.action, 511 - strlen (info_group.audit_msg),
+                 "group %s", group_name);
+#endif
+       snprintf (info_passwd.action,  511 - strlen (info_group.audit_msg),
+                 "group %s/%lu", group_name, (unsigned long int) group_id);
+
+       if (nflg) {
+               strncat (info_group.action, ", new name: ",
+                        511 - strlen (info_group.audit_msg));
+               strncat (info_group.action, group_newname,
+                        511 - strlen (info_group.audit_msg));
+
+#ifdef SHADOWGRP
+               strncat (info_gshadow.action, ", new name: ",
+                        511 - strlen (info_gshadow.audit_msg));
+               strncat (info_gshadow.action, group_newname,
+                        511 - strlen (info_gshadow.audit_msg));
+#endif
+
+               strncat (info_passwd.action, ", new name: ",
+                        511 - strlen (info_passwd.audit_msg));
+               strncat (info_passwd.action, group_newname,
+                        511 - strlen (info_passwd.audit_msg));
+       }
+       if (pflg) {
+               strncat (info_group.action, ", new password",
+                        511 - strlen (info_group.audit_msg));
+
+#ifdef SHADOWGRP
+               strncat (info_gshadow.action, ", new password",
+                        511 - strlen (info_gshadow.audit_msg));
+#endif
+       }
+       if (gflg) {
+               strncat (info_group.action, ", new gid: ",
+                        511 - strlen (info_group.audit_msg));
+               snprintf (info_group.action+strlen (info_group.action),
+                         511 - strlen (info_group.audit_msg),
+                         "%lu", (unsigned long int) group_newid);
+
+               strncat (info_passwd.action, ", new gid: ",
+                        511 - strlen (info_passwd.audit_msg));
+               snprintf (info_passwd.action+strlen (info_passwd.action),
+                         511 - strlen (info_passwd.audit_msg),
+                         "%lu", (unsigned long int) group_newid);
+       }
+       info_group.audit_msg[511]   = '\0';
+#ifdef SHADOWGRP
+       info_gshadow.audit_msg[511] = '\0';
+#endif
+       info_passwd.audit_msg[511]  = '\0';
+
+// FIXME: add a system cleanup
+       add_cleanup (cleanup_report_mod_group, &info_group);
+#ifdef SHADOWGRP
+       if (   is_shadow_grp
+           && (pflg || nflg)) {
+               add_cleanup (cleanup_report_mod_gshadow, &info_gshadow);
+       }
+#endif
+       if (gflg) {
+               add_cleanup (cleanup_report_mod_passwd, &info_passwd);
+       }
+
+}
+
+/*
+ * lock_files - lock the accounts databases
+ *
+ *     lock_files() locks the group, gshadow, and passwd databases.
+ */
+static void lock_files (void)
+{
+       if (gr_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, gr_dbname ());
+               exit (E_GRP_UPDATE);
+       }
+       add_cleanup (cleanup_unlock_group, NULL);
+
+#ifdef SHADOWGRP
+       if (   is_shadow_grp
+           && (pflg || nflg)) {
+               if (sgr_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, sgr_dbname ());
+                       exit (E_GRP_UPDATE);
+               }
+               add_cleanup (cleanup_unlock_gshadow, NULL);
+       }
+#endif
+
+       if (gflg) {
+               if (pw_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, pw_dbname ());
+                       exit (E_GRP_UPDATE);
+               }
+               add_cleanup (cleanup_unlock_passwd, NULL);
+       }
+}
+
+
+/*
+ * open_files - open the accounts databases
+ *
+ *     open_files() opens the group, gshadow, and passwd databases.
+ */
+static void open_files (void)
+{
+       if (gr_open (O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+               SYSLOG ((LOG_WARN, "cannot open %s", gr_dbname ()));
+               exit (E_GRP_UPDATE);
+       }
+
+#ifdef SHADOWGRP
+       if (   is_shadow_grp
+           && (pflg || nflg)) {
+               if (sgr_open (O_RDWR) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot open %s\n"),
+                                Prog, sgr_dbname ());
+                       SYSLOG ((LOG_WARN, "cannot open %s", sgr_dbname ()));
+                       exit (E_GRP_UPDATE);
+               }
+       }
+#endif                         /* SHADOWGRP */
+
+       if (gflg) {
+               if (pw_open (O_RDWR) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot open %s\n"),
+                                Prog, pw_dbname ());
+                       SYSLOG ((LOG_WARN, "cannot open %s", gr_dbname ()));
+                       exit (E_GRP_UPDATE);
+               }
+       }
+}
+
+void update_primary_groups (gid_t ogid, gid_t ngid)
+{
+       struct passwd *pwd;
+
+       setpwent ();
+       while ((pwd = getpwent ()) != NULL) {
+               if (pwd->pw_gid == ogid) {
+                       const struct passwd *lpwd;
+                       struct passwd npwd;
+                       lpwd = pw_locate (pwd->pw_name);
+                       if (NULL == lpwd) {
+                               fprintf (stderr,
+                                        _("%s: user '%s' does not exist in %s\n"),
+                                        Prog, pwd->pw_name, pw_dbname ());
+                               exit (E_GRP_UPDATE);
+                       } else {
+                               npwd = *lpwd;
+                               npwd.pw_gid = ngid;
+                               if (pw_update (&npwd) == 0) {
+                                       fprintf (stderr,
+                                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                                Prog, pw_dbname (), npwd.pw_name);
+                                       exit (E_GRP_UPDATE);
+                               }
+                       }
+               }
+       }
+       endpwent ();
+}
+
+/*
+ * main - groupmod command
+ *
+ */
+int main (int argc, char **argv)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       pam_handle_t *pamh = NULL;
+       int retval;
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+
+#ifdef WITH_AUDIT
+       audit_help_open ();
+#endif
+       atexit (do_cleanups);
+
+       /*
+        * Get my name so that I can use it to report errors.
+        */
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       process_flags (argc, argv);
+
+       OPENLOG ("groupmod");
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       {
+               struct passwd *pampw;
+               pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+               if (NULL == pamh) {
+                       fprintf (stderr,
+                                _("%s: Cannot determine your user name.\n"),
+                                Prog);
+                       exit (1);
+               }
+
+               retval = pam_start ("groupmod", pampw->pw_name, &conv, &pamh);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_authenticate (pamh, 0);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_acct_mgmt (pamh, 0);
+       }
+
+       if (NULL != pamh) {
+               (void) pam_end (pamh, retval);
+       }
+       if (PAM_SUCCESS != retval) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               exit (1);
+       }
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+
+#ifdef SHADOWGRP
+       is_shadow_grp = sgr_file_present ();
+#endif
+       {
+               struct group *grp;
+               /*
+                * Start with a quick check to see if the group exists.
+                */
+               grp = getgrnam (group_name); /* local, no need for xgetgrnam */
+               if (NULL == grp) {
+                       fprintf (stderr,
+                                _("%s: group '%s' does not exist\n"),
+                                Prog, group_name);
+                       exit (E_NOTFOUND);
+               } else {
+                       group_id = grp->gr_gid;
+               }
+       }
+
+#ifdef USE_NIS
+       /*
+        * Now make sure it isn't an NIS group.
+        */
+       if (__isgrNIS ()) {
+               char *nis_domain;
+               char *nis_master;
+
+               fprintf (stderr,
+                        _("%s: group %s is a NIS group\n"),
+                        Prog, group_name);
+
+               if (!yp_get_default_domain (&nis_domain) &&
+                   !yp_master (nis_domain, "group.byname", &nis_master)) {
+                       fprintf (stderr,
+                                _("%s: %s is the NIS master\n"),
+                                Prog, nis_master);
+               }
+               exit (E_NOTFOUND);
+       }
+#endif
+
+       if (gflg) {
+               check_new_gid ();
+       }
+
+       if (nflg) {
+               check_new_name ();
+       }
+
+       lock_files ();
+
+       /*
+        * Now if the group is not changed, it's our fault.
+        * Make sure failures will be reported.
+        */
+       prepare_failure_reports ();
+
+       /*
+        * Do the hard stuff - open the files, create the group entries,
+        * then close and update the files.
+        */
+       open_files ();
+
+       grp_update ();
+
+       close_files ();
+
+       nscd_flush_cache ("group");
+
+       return E_SUCCESS;
+}
+
diff --git a/src/groups.c b/src/groups.c
new file mode 100644 (file)
index 0000000..2a45738
--- /dev/null
@@ -0,0 +1,219 @@
+/*
+ * Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: groups.c 2849 2009-04-30 21:08:49Z nekral-guest $"
+
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include "defines.h"
+#include "prototypes.h"
+/*
+ * Global variables
+ */
+char *Prog;
+
+/* local function prototypes */
+static void print_groups (const char *member);
+
+/*
+ * print_groups - print the groups which the named user is a member of
+ *
+ *     print_groups() scans the groups file for the list of groups which
+ *     the user is listed as being a member of.
+ */
+static void print_groups (const char *member)
+{
+       int groups = 0;
+       struct group *grp;
+       struct passwd *pwd;
+       bool flag = false;
+
+       pwd = getpwnam (member); /* local, no need for xgetpwnam */
+       if (NULL == pwd) {
+               (void) fprintf (stderr, _("%s: unknown user %s\n"),
+                               Prog, member);
+               exit (EXIT_FAILURE);
+       }
+
+       setgrent ();
+       while ((grp = getgrent ()) != NULL) {
+               if (is_on_list (grp->gr_mem, member)) {
+                       if (0 != groups) {
+                               (void) putchar (' ');
+                       }
+                       groups++;
+
+                       (void) printf ("%s", grp->gr_name);
+                       if (grp->gr_gid == pwd->pw_gid) {
+                               flag = true;
+                       }
+               }
+       }
+       endgrent ();
+
+       /* The user may not be in the list of members of its primary group */
+       if (!flag) {
+               grp = getgrgid (pwd->pw_gid); /* local, no need for xgetgrgid */
+               if (NULL != grp) {
+                       if (0 != groups) {
+                               (void) putchar (' ');
+                       }
+                       groups++;
+
+                       (void) printf ("%s", grp->gr_name);
+               }
+       }
+
+       if (0 != groups) {
+               (void) putchar ('\n');
+       }
+}
+
+/*
+ * groups - print out the groups a process is a member of
+ */
+int main (int argc, char **argv)
+{
+#ifdef HAVE_GETGROUPS
+       long sys_ngroups;
+       int ngroups;
+       GETGROUPS_T *groups;
+       int pri_grp; /* TODO: should be GETGROUPS_T */
+       int i;
+#else
+       char *logname;
+       char *getlogin ();
+#endif
+
+#ifdef HAVE_GETGROUPS
+       sys_ngroups = sysconf (_SC_NGROUPS_MAX);
+       groups = (GETGROUPS_T *) malloc (sizeof (GETGROUPS_T) * sys_ngroups);
+#endif
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       /*
+        * Get the program name so that error messages can use it.
+        */
+       Prog = Basename (argv[0]);
+
+       if (argc == 1) {
+
+               /*
+                * Called with no arguments - give the group set for the
+                * current user.
+                */
+
+#ifdef HAVE_GETGROUPS
+               /*
+                * This system supports concurrent group sets, so I can ask
+                * the system to tell me which groups are currently set for
+                * this process.
+                */
+               ngroups = getgroups (sys_ngroups, groups);
+               if (ngroups < 0) {
+                       perror ("getgroups");
+                       exit (EXIT_FAILURE);
+               }
+
+               /*
+                * The groupset includes the primary group as well.
+                */
+               pri_grp = getegid ();
+               for (i = 0; i < ngroups; i++) {
+                       if (pri_grp == (int) groups[i]) {
+                               break;
+                       }
+               }
+
+               if (i != ngroups) {
+                       pri_grp = -1;
+               }
+
+               /*
+                * Print out the name of every group in the current group
+                * set. Unknown groups are printed as their decimal group ID
+                * values.
+                */
+               if (-1 != pri_grp) {
+                       struct group *gr;
+                       /* local, no need for xgetgrgid */
+                       gr = getgrgid (pri_grp);
+                       if (NULL != gr) {
+                               (void) printf ("%s", gr->gr_name);
+                       } else {
+                               (void) printf ("%d", pri_grp);
+                       }
+               }
+
+               for (i = 0; i < ngroups; i++) {
+                       struct group *gr;
+                       if ((0 != i) || (-1 != pri_grp)) {
+                               (void) putchar (' ');
+                       }
+
+                       /* local, no need for xgetgrgid */
+                       gr = getgrgid (groups[i]);
+                       if (NULL != gr) {
+                               (void) printf ("%s", gr->gr_name);
+                       } else {
+                               (void) printf ("%ld", (long) groups[i]);
+                       }
+               }
+               (void) putchar ('\n');
+#else
+               /*
+                * This system does not have the getgroups() system call, so
+                * I must check the groups file directly.
+                */
+               logname = getlogin ();
+               if (NULL != logname) {
+                       print_groups (logname);
+               } else {
+                       exit (EXIT_FAILURE);
+               }
+#endif
+       } else {
+
+               /*
+                * The invoker wanted to know about some other user. Use
+                * that name to look up the groups instead.
+                */
+               print_groups (argv[1]);
+       }
+       return EXIT_SUCCESS;
+}
+
diff --git a/src/grpck.c b/src/grpck.c
new file mode 100644 (file)
index 0000000..50ed975
--- /dev/null
@@ -0,0 +1,854 @@
+/*
+ * Copyright (c) 1992 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001       , Michał Moskal
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: grpck.c 2883 2009-05-09 21:20:54Z nekral-guest $"
+
+#include <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include "chkname.h"
+#include "commonio.h"
+#include "defines.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "prototypes.h"
+
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+
+/*
+ * Exit codes
+ */
+/*@-exitarg@*/
+#define        E_OKAY          0
+#define        E_USAGE         1
+#define        E_BAD_ENTRY     2
+#define        E_CANT_OPEN     3
+#define        E_CANT_LOCK     4
+#define        E_CANT_UPDATE   5
+
+/*
+ * Global variables
+ */
+char *Prog;
+
+static const char *grp_file = GROUP_FILE;
+static bool use_system_grp_file = true;
+
+#ifdef SHADOWGRP
+static const char *sgr_file = SGROUP_FILE;
+static bool use_system_sgr_file = true;
+static bool is_shadow = false;
+static bool sgr_locked = false;
+#endif
+static bool gr_locked = false;
+/* Options */
+static bool read_only = false;
+static bool sort_mode = false;
+
+/* local function prototypes */
+static void fail_exit (int status);
+static void usage (void);
+static void delete_member (char **, const char *);
+static void process_flags (int argc, char **argv);
+static void open_files (void);
+static void close_files (bool changed);
+static int check_members (const char *groupname,
+                          char **members,
+                          const char *fmt_info,
+                          const char *fmt_prompt,
+                          const char *fmt_syslog,
+                          int *errors);
+static void check_grp_file (int *errors, bool *changed);
+#ifdef SHADOWGRP
+static void compare_members_lists (const char *groupname,
+                                   char **members,
+                                   char **other_members,
+                                   const char *file,
+                                   const char *other_file);
+static void check_sgr_file (int *errors, bool *changed);
+#endif
+
+/*
+ * fail_exit - exit with an error code after unlocking files
+ */
+static void fail_exit (int status)
+{
+       if (gr_locked) {
+               if (gr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+                       /* continue */
+               }
+       }
+
+#ifdef SHADOWGRP
+       if (sgr_locked) {
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                       /* continue */
+               }
+       }
+#endif
+
+       closelog ();
+
+       exit (status);
+}
+
+/*
+ * usage - print syntax message and exit
+ */
+static void usage (void)
+{
+#ifdef SHADOWGRP
+       fprintf (stderr, _("Usage: %s [-r] [-s] [group [gshadow]]\n"), Prog);
+#else
+       fprintf (stderr, _("Usage: %s [-r] [-s] [group]\n"), Prog);
+#endif
+       exit (E_USAGE);
+}
+
+/*
+ * delete_member - delete an entry in a list of members
+ *
+ * It only deletes the first entry with the given name.
+ */
+static void delete_member (char **list, const char *member)
+{
+       int i;
+
+       for (i = 0; list[i]; i++) {
+               if (list[i] == member) {
+                       break;
+               }
+       }
+
+       if (list[i]) {
+               for (; list[i]; i++) {
+                       list[i] = list[i + 1];
+               }
+       }
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ *     It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+       int arg;
+
+       /*
+        * Parse the command line arguments
+        */
+       while ((arg = getopt (argc, argv, "qrs")) != EOF) {
+               switch (arg) {
+               case 'q':
+                       /* quiet - ignored for now */
+                       break;
+               case 'r':
+                       read_only = true;
+                       break;
+               case 's':
+                       sort_mode = true;
+                       break;
+               default:
+                       usage ();
+               }
+       }
+
+       if (sort_mode && read_only) {
+               fprintf (stderr, _("%s: -s and -r are incompatibile\n"), Prog);
+               exit (E_USAGE);
+       }
+
+       /*
+        * Make certain we have the right number of arguments
+        */
+#ifdef SHADOWGRP
+       if ((argc < optind) || (argc > (optind + 2)))
+#else
+       if ((argc < optind) || (argc > (optind + 1)))
+#endif
+       {
+               usage ();
+       }
+
+       /*
+        * If there are two left over filenames, use those as the group and
+        * group password filenames.
+        */
+       if (optind != argc) {
+               grp_file = argv[optind];
+               gr_setdbname (grp_file);
+               use_system_grp_file = false;
+       }
+#ifdef SHADOWGRP
+       if ((optind + 2) == argc) {
+               sgr_file = argv[optind + 1];
+               sgr_setdbname (sgr_file);
+               is_shadow = true;
+               use_system_sgr_file = false;
+       } else if (optind == argc) {
+               is_shadow = sgr_file_present ();
+       }
+#endif
+}
+
+/*
+ * open_files - open the shadow database
+ *
+ *     In read-only mode, the databases are not locked and are opened
+ *     only for reading.
+ */
+static void open_files (void)
+{
+       /*
+        * Lock the files if we aren't in "read-only" mode
+        */
+       if (!read_only) {
+               if (gr_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, grp_file);
+                       fail_exit (E_CANT_LOCK);
+               }
+               gr_locked = true;
+#ifdef SHADOWGRP
+               if (is_shadow) {
+                       if (sgr_lock () == 0) {
+                               fprintf (stderr,
+                                        _("%s: cannot lock %s; try again later.\n"),
+                                        Prog, sgr_file);
+                               fail_exit (E_CANT_LOCK);
+                       }
+                       sgr_locked = true;
+               }
+#endif
+       }
+
+       /*
+        * Open the files. Use O_RDONLY if we are in read_only mode,
+        * O_RDWR otherwise.
+        */
+       if (gr_open (read_only ? O_RDONLY : O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog,
+                        grp_file);
+               if (use_system_grp_file) {
+                       SYSLOG ((LOG_WARN, "cannot open %s", grp_file));
+               }
+               fail_exit (E_CANT_OPEN);
+       }
+#ifdef SHADOWGRP
+       if (is_shadow && (sgr_open (read_only ? O_RDONLY : O_RDWR) == 0)) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog,
+                        sgr_file);
+               if (use_system_sgr_file) {
+                       SYSLOG ((LOG_WARN, "cannot open %s", sgr_file));
+               }
+               fail_exit (E_CANT_OPEN);
+       }
+#endif
+}
+
+/*
+ * close_files - close and unlock the group/gshadow databases
+ *
+ *     If changed is not set, the databases are not closed, and no
+ *     changes are committed in the databases. The databases are
+ *     unlocked anyway.
+ */
+static void close_files (bool changed)
+{
+       /*
+        * All done. If there were no change we can just abandon any
+        * changes to the files.
+        */
+       if (changed) {
+               if (gr_close () == 0) {
+                       fprintf (stderr, _("%s: failure while writing changes to %s\n"),
+                                Prog, grp_file);
+                       fail_exit (E_CANT_UPDATE);
+               }
+#ifdef SHADOWGRP
+               if (is_shadow && (sgr_close () == 0)) {
+                       fprintf (stderr, _("%s: failure while writing changes to %s\n"),
+                                Prog, sgr_file);
+                       fail_exit (E_CANT_UPDATE);
+               }
+#endif
+       }
+
+       /*
+        * Don't be anti-social - unlock the files when you're done.
+        */
+#ifdef SHADOWGRP
+       if (sgr_locked) {
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                       /* continue */
+               }
+               sgr_locked = false;
+       }
+#endif
+       if (gr_locked) {
+               if (gr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+                       /* continue */
+               }
+               gr_locked = false;
+       }
+}
+
+/*
+ * check_members - check that every members of a group exist
+ *
+ *     If an error is detected, *errors is incremented.
+ *
+ *     The user will be prompted for the removal of the non-existent
+ *     user.
+ *
+ *     If any changes are performed, the return value will be 1,
+ *     otherwise check_members() returns 0.
+ *
+ *     fmt_info, fmt_prompt, and fmt_syslog are used for logging.
+ *       * fmt_info must contain two string flags (%s): for the group's
+ *         name and the missing member.
+ *       * fmt_prompt must contain one string flags (%s): the missing
+ *         member.
+ *       * fmt_syslog must contain two string flags (%s): for the
+ *         group's name and the missing member.
+ */
+static int check_members (const char *groupname,
+                          char **members,
+                          const char *fmt_info,
+                          const char *fmt_prompt,
+                          const char *fmt_syslog,
+                          int *errors)
+{
+       int i;
+       int members_changed = 0;
+
+       /*
+        * Make sure each member exists
+        */
+       for (i = 0; NULL != members[i]; i++) {
+               /* local, no need for xgetpwnam */
+               if (getpwnam (members[i]) != NULL) {
+                       continue;
+               }
+               /*
+                * Can't find this user. Remove them
+                * from the list.
+                */
+               *errors += 1;
+               printf (fmt_info, groupname, members[i]);
+               printf (fmt_prompt, members[i]);
+
+               if (!yes_or_no (read_only)) {
+                       continue;
+               }
+
+               SYSLOG ((LOG_INFO, fmt_syslog, members[i], groupname));
+               members_changed = 1;
+               delete_member (members, members[i]);
+
+               /* Rewind in case of removal */
+               i--;
+       }
+
+       return members_changed;
+}
+
+#ifdef SHADOWGRP
+/*
+ * compare_members_lists - make sure the list of members is contained in
+ *                         another list.
+ *
+ *     compare_members_lists() checks that all the members of members are
+ *     also in other_members.
+ *     file and other_file are used for logging.
+ *
+ *     TODO: No changes are performed on the lists.
+ */
+static void compare_members_lists (const char *groupname,
+                                   char **members,
+                                   char **other_members,
+                                   const char *file,
+                                   const char *other_file)
+{
+       char **pmem, **other_pmem;
+
+       for (pmem = members; NULL != *pmem; pmem++) {
+               for (other_pmem = other_members; NULL != *other_pmem; other_pmem++) {
+                       if (strcmp (*pmem, *other_pmem) == 0) {
+                               break;
+                       }
+               }
+               if (*other_pmem == NULL) {
+                       printf
+                           ("'%s' is a member of the '%s' group in %s but not in %s\n",
+                            *pmem, groupname, file, other_file);
+               }
+       }
+}
+#endif                         /* SHADOWGRP */
+
+/*
+ * check_grp_file - check the content of the group file
+ */
+static void check_grp_file (int *errors, bool *changed)
+{
+       struct commonio_entry *gre, *tgre;
+       struct group *grp;
+#ifdef SHADOWGRP
+       struct sgrp *sgr;
+#endif
+
+       /*
+        * Loop through the entire group file.
+        */
+       for (gre = __gr_get_head (); NULL != gre; gre = gre->next) {
+               /*
+                * Skip all NIS entries.
+                */
+
+               if ((gre->line[0] == '+') || (gre->line[0] == '-')) {
+                       continue;
+               }
+
+               /*
+                * Start with the entries that are completely corrupt. They
+                * have no (struct group) entry because they couldn't be
+                * parsed properly.
+                */
+               if (NULL == gre->eptr) {
+
+                       /*
+                        * Tell the user this entire line is bogus and ask
+                        * them to delete it.
+                        */
+                       (void) puts (_("invalid group file entry"));
+                       printf (_("delete line '%s'? "), gre->line);
+                       *errors += 1;
+
+                       /*
+                        * prompt the user to delete the entry or not
+                        */
+                       if (!yes_or_no (read_only)) {
+                               continue;
+                       }
+
+                       /*
+                        * All group file deletions wind up here. This code
+                        * removes the current entry from the linked list.
+                        * When done, it skips back to the top of the loop
+                        * to try out the next list element.
+                        */
+                     delete_gr:
+                       SYSLOG ((LOG_INFO, "delete group line '%s'",
+                                gre->line));
+                       *changed = true;
+
+                       __gr_del_entry (gre);
+                       continue;
+               }
+
+               /*
+                * Group structure is good, start using it.
+                */
+               grp = gre->eptr;
+
+               /*
+                * Make sure this entry has a unique name.
+                */
+               for (tgre = __gr_get_head (); NULL != tgre; tgre = tgre->next) {
+
+                       const struct group *ent = tgre->eptr;
+
+                       /*
+                        * Don't check this entry
+                        */
+                       if (tgre == gre) {
+                               continue;
+                       }
+
+                       /*
+                        * Don't check invalid entries.
+                        */
+                       if (NULL == ent) {
+                               continue;
+                       }
+
+                       if (strcmp (grp->gr_name, ent->gr_name) != 0) {
+                               continue;
+                       }
+
+                       /*
+                        * Tell the user this entry is a duplicate of
+                        * another and ask them to delete it.
+                        */
+                       (void) puts (_("duplicate group entry"));
+                       printf (_("delete line '%s'? "), gre->line);
+                       *errors += 1;
+
+                       /*
+                        * prompt the user to delete the entry or not
+                        */
+                       if (yes_or_no (read_only)) {
+                               goto delete_gr;
+                       }
+               }
+
+               /*
+                * Check for invalid group names.  --marekm
+                */
+               if (!is_valid_group_name (grp->gr_name)) {
+                       *errors += 1;
+                       printf (_("invalid group name '%s'\n"), grp->gr_name);
+               }
+
+               /*
+                * Check for invalid group ID.
+                */
+               if (grp->gr_gid == (gid_t)-1) {
+                       printf (_("invalid group ID '%lu'\n"), (long unsigned int)grp->gr_gid);
+                       *errors += 1;
+               }
+
+               /*
+                * Workaround for a NYS libc 5.3.12 bug on RedHat 4.2 -
+                * groups with no members are returned as groups with one
+                * member "", causing grpck to fail.  --marekm
+                */
+               if (   (NULL != grp->gr_mem[0])
+                   && (NULL == grp->gr_mem[1])
+                   && ('\0' == grp->gr_mem[0][0])) {
+                       grp->gr_mem[0] = NULL;
+               }
+
+               if (check_members (grp->gr_name, grp->gr_mem,
+                                  _("group %s: no user %s\n"),
+                                  _("delete member '%s'? "),
+                                  "delete member '%s' from group '%s'",
+                                  errors) == 1) {
+                       *changed = true;
+                       gre->changed = true;
+                       __gr_set_changed ();
+               }
+
+#ifdef SHADOWGRP
+               /*
+                * Make sure this entry exists in the /etc/gshadow file.
+                */
+
+               if (is_shadow) {
+                       sgr = (struct sgrp *) sgr_locate (grp->gr_name);
+                       if (sgr == NULL) {
+                               printf (_("no matching group file entry in %s\n"),
+                                       sgr_file);
+                               printf (_("add group '%s' in %s? "),
+                                       grp->gr_name, sgr_file);
+                               *errors += 1;
+                               if (yes_or_no (read_only)) {
+                                       struct sgrp sg;
+                                       struct group gr;
+                                       static char *empty = NULL;
+
+                                       sg.sg_name = grp->gr_name;
+                                       sg.sg_passwd = grp->gr_passwd;
+                                       sg.sg_adm = &empty;
+                                       sg.sg_mem = grp->gr_mem;
+                                       SYSLOG ((LOG_INFO,
+                                                "add group '%s' to '%s'",
+                                                grp->gr_name, sgr_file));
+                                       *changed = true;
+
+                                       if (sgr_update (&sg) == 0) {
+                                               fprintf (stderr,
+                                                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                                                        Prog, sgr_dbname (), sg.sg_name);
+                                               fail_exit (E_CANT_UPDATE);
+                                       }
+                                       /* remove password from /etc/group */
+                                       gr = *grp;
+                                       gr.gr_passwd = SHADOW_PASSWD_STRING;    /* XXX warning: const */
+                                       if (gr_update (&gr) == 0) {
+                                               fprintf (stderr,
+                                                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                                                        Prog, gr_dbname (), gr.gr_name);
+                                               fail_exit (E_CANT_UPDATE);
+                                       }
+                               }
+                       } else {
+                               /**
+                                * Verify that all the members defined in /etc/group are also
+                                * present in /etc/gshadow.
+                                */
+                               compare_members_lists (grp->gr_name,
+                                                      grp->gr_mem, sgr->sg_mem,
+                                                      grp_file, sgr_file);
+
+                               /* The group entry has a gshadow counterpart.
+                                * Make sure no passwords are in group.
+                                */
+                               if (strcmp (grp->gr_passwd, SHADOW_PASSWD_STRING) != 0) {
+                                       printf (_("group %s has an entry in %s, but its password field in %s is not set to 'x'\n"),
+                                               grp->gr_name, sgr_file, grp_file);
+                                       *errors += 1;
+                               }
+                       }
+               }
+#endif
+
+       }
+}
+
+#ifdef SHADOWGRP
+/*
+ * check_sgr_file - check the content of the shadowed group file (gshadow)
+ */
+static void check_sgr_file (int *errors, bool *changed)
+{
+       struct group *grp;
+       struct commonio_entry *sge, *tsge;
+       struct sgrp *sgr;
+
+       /*
+        * Loop through the entire shadow group file.
+        */
+       for (sge = __sgr_get_head (); NULL != sge; sge = sge->next) {
+
+               /*
+                * Start with the entries that are completely corrupt. They
+                * have no (struct sgrp) entry because they couldn't be
+                * parsed properly.
+                */
+               if (NULL == sge->eptr) {
+
+                       /*
+                        * Tell the user this entire line is bogus and ask
+                        * them to delete it.
+                        */
+                       (void) puts (_("invalid shadow group file entry"));
+                       printf (_("delete line '%s'? "), sge->line);
+                       *errors += 1;
+
+                       /*
+                        * prompt the user to delete the entry or not
+                        */
+                       if (!yes_or_no (read_only)) {
+                               continue;
+                       }
+
+                       /*
+                        * All shadow group file deletions wind up here. 
+                        * This code removes the current entry from the
+                        * linked list. When done, it skips back to the top
+                        * of the loop to try out the next list element.
+                        */
+                     delete_sg:
+                       SYSLOG ((LOG_INFO, "delete shadow line '%s'",
+                                sge->line));
+                       *changed = true;
+
+                       __sgr_del_entry (sge);
+                       continue;
+               }
+
+               /*
+                * Shadow group structure is good, start using it.
+                */
+               sgr = sge->eptr;
+
+               /*
+                * Make sure this entry has a unique name.
+                */
+               for (tsge = __sgr_get_head (); NULL != tsge; tsge = tsge->next) {
+
+                       const struct sgrp *ent = tsge->eptr;
+
+                       /*
+                        * Don't check this entry
+                        */
+                       if (tsge == sge) {
+                               continue;
+                       }
+
+                       /*
+                        * Don't check invalid entries.
+                        */
+                       if (NULL == ent) {
+                               continue;
+                       }
+
+                       if (strcmp (sgr->sg_name, ent->sg_name) != 0) {
+                               continue;
+                       }
+
+                       /*
+                        * Tell the user this entry is a duplicate of
+                        * another and ask them to delete it.
+                        */
+                       (void) puts (_("duplicate shadow group entry"));
+                       printf (_("delete line '%s'? "), sge->line);
+                       *errors += 1;
+
+                       /*
+                        * prompt the user to delete the entry or not
+                        */
+                       if (yes_or_no (read_only)) {
+                               goto delete_sg;
+                       }
+               }
+
+               /*
+                * Make sure this entry exists in the /etc/group file.
+                */
+               grp = (struct group *) gr_locate (sgr->sg_name);
+               if (grp == NULL) {
+                       printf (_("no matching group file entry in %s\n"),
+                               grp_file);
+                       printf (_("delete line '%s'? "), sge->line);
+                       *errors += 1;
+                       if (yes_or_no (read_only)) {
+                               goto delete_sg;
+                       }
+               } else {
+                       /**
+                        * Verify that the all members defined in /etc/gshadow are also
+                        * present in /etc/group.
+                        */
+                       compare_members_lists (sgr->sg_name,
+                                              sgr->sg_mem, grp->gr_mem,
+                                              sgr_file, grp_file);
+               }
+
+               /*
+                * Make sure each administrator exists
+                */
+               if (check_members (sgr->sg_name, sgr->sg_adm,
+                                  _("shadow group %s: no administrative user %s\n"),
+                                  _("delete administrative member '%s'? "),
+                                  "delete admin '%s' from shadow group '%s'",
+                                  errors) == 1) {
+                       *changed = true;
+                       sge->changed = true;
+                       __sgr_set_changed ();
+               }
+
+               /*
+                * Make sure each member exists
+                */
+               if (check_members (sgr->sg_name, sgr->sg_mem,
+                                  _("shadow group %s: no user %s\n"),
+                                  _("delete member '%s'? "),
+                                  "delete member '%s' from shadow group '%s'",
+                                  errors) == 1) {
+                       *changed = true;
+                       sge->changed = true;
+                       __sgr_set_changed ();
+               }
+       }
+}
+#endif                         /* SHADOWGRP */
+
+/*
+ * grpck - verify group file integrity
+ */
+int main (int argc, char **argv)
+{
+       int errors = 0;
+       bool changed = false;
+
+       /*
+        * Get my name so that I can use it to report errors.
+        */
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       OPENLOG ("grpck");
+
+       /* Parse the command line arguments */
+       process_flags (argc, argv);
+
+       open_files ();
+
+       if (sort_mode) {
+               gr_sort ();
+#ifdef SHADOWGRP
+               if (is_shadow) {
+                       sgr_sort ();
+               }
+               changed = true;
+#endif
+       } else {
+               check_grp_file (&errors, &changed);
+#ifdef SHADOWGRP
+               if (is_shadow) {
+                       check_sgr_file (&errors, &changed);
+               }
+#endif
+       }
+
+       /* Commit the change in the database if needed */
+       close_files (changed);
+
+       nscd_flush_cache ("group");
+
+       /*
+        * Tell the user what we did and exit.
+        */
+       if (0 != errors) {
+               if (changed) {
+                       printf (_("%s: the files have been updated\n"), Prog);
+               } else {
+                       printf (_("%s: no changes\n"), Prog);
+               }
+       }
+
+       return ((0 != errors) ? E_BAD_ENTRY : E_OKAY);
+}
+
diff --git a/src/grpconv.c b/src/grpconv.c
new file mode 100644 (file)
index 0000000..92ecdc1
--- /dev/null
@@ -0,0 +1,232 @@
+/*
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * grpconv - create or update /etc/gshadow with information from
+ * /etc/group.
+ *
+ */
+
+#include <config.h>
+#ident "$Id: grpconv.c 2348 2008-09-06 12:51:53Z nekral-guest $"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include "nscd.h"
+#include "prototypes.h"
+#ifdef SHADOWGRP
+#include "groupio.h"
+#include "sgroupio.h"
+/*
+ * Global variables
+ */
+char *Prog;
+
+static bool gr_locked  = false;
+static bool sgr_locked = false;
+
+/* local function prototypes */
+static void fail_exit (int status);
+
+static void fail_exit (int status)
+{
+       if (gr_locked) {
+               if (gr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+                       /* continue */
+               }
+       }
+
+       if (sgr_locked) {
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                       /* continue */
+               }
+       }
+
+       exit (status);
+}
+
+int main (int argc, char **argv)
+{
+       const struct group *gr;
+       struct group grent;
+       const struct sgrp *sg;
+       struct sgrp sgent;
+
+       if (1 != argc) {
+               (void) fputs (_("Usage: grpconv\n"), stderr);
+       }
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       OPENLOG ("grpconv");
+
+       if (gr_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, gr_dbname ());
+               fail_exit (5);
+       }
+       gr_locked = true;
+       if (gr_open (O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+               fail_exit (1);
+       }
+
+       if (sgr_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, sgr_dbname ());
+               fail_exit (5);
+       }
+       sgr_locked = true;
+       if (sgr_open (O_CREAT | O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, sgr_dbname ());
+               fail_exit (1);
+       }
+
+       /*
+        * Remove /etc/gshadow entries for groups not in /etc/group.
+        */
+       sgr_rewind ();
+       while ((sg = sgr_next ()) != NULL) {
+               if (gr_locate (sg->sg_name) != NULL) {
+                       continue;
+               }
+
+               if (sgr_remove (sg->sg_name) == 0) {
+                       /*
+                        * This shouldn't happen (the entry exists) but...
+                        */
+                       fprintf (stderr,
+                                _("%s: cannot remove entry '%s' from %s\n"),
+                                Prog, sg->sg_name, sgr_dbname ());
+                       fail_exit (3);
+               }
+       }
+
+       /*
+        * Update shadow group passwords if non-shadow password is not "x".
+        * Add any missing shadow group entries.
+        */
+       gr_rewind ();
+       while ((gr = gr_next ()) != NULL) {
+               sg = sgr_locate (gr->gr_name);
+               if (NULL != sg) {
+                       /* update existing shadow group entry */
+                       sgent = *sg;
+                       if (strcmp (gr->gr_passwd, SHADOW_PASSWD_STRING) != 0)
+                               sgent.sg_passwd = gr->gr_passwd;
+               } else {
+                       static char *empty = 0;
+
+                       /* add new shadow group entry */
+                       memset (&sgent, 0, sizeof sgent);
+                       sgent.sg_name = gr->gr_name;
+                       sgent.sg_passwd = gr->gr_passwd;
+                       sgent.sg_adm = &empty;
+               }
+               /*
+                * XXX - sg_mem is redundant, it is currently always a copy
+                * of gr_mem. Very few programs actually use sg_mem, and all
+                * of them are in the shadow suite. Maybe this field could
+                * be used for something else? Any suggestions?
+                */
+               sgent.sg_mem = gr->gr_mem;
+
+               if (sgr_update (&sgent) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, sgr_dbname (), sgent.sg_name);
+                       fail_exit (3);
+               }
+               /* remove password from /etc/group */
+               grent = *gr;
+               grent.gr_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+               if (gr_update (&grent) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, gr_dbname (), grent.gr_name);
+                       fail_exit (3);
+               }
+       }
+
+       if (sgr_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, sgr_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+               fail_exit (3);
+       }
+       if (gr_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+               fail_exit (3);
+       }
+       if (sgr_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+               /* continue */
+       }
+       sgr_locked = false;
+       if (gr_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+               /* continue */
+       }
+       gr_locked = false;
+
+       nscd_flush_cache ("group");
+
+       return 0;
+}
+#else                          /* !SHADOWGRP */
+int main (int unused(argc), char **argv)
+{
+       fprintf (stderr,
+                "%s: not configured for shadow group support.\n", argv[0]);
+       exit (1);
+}
+#endif                         /* !SHADOWGRP */
+
diff --git a/src/grpunconv.c b/src/grpunconv.c
new file mode 100644 (file)
index 0000000..20e1657
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 1996       , Michael Meskes
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * grpunconv - update /etc/group with information from /etc/gshadow.
+ *
+ */
+
+#include <config.h>
+
+#ident "$Id: grpunconv.c 2348 2008-09-06 12:51:53Z nekral-guest $"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <time.h>
+#include <unistd.h>
+#include <grp.h>
+#include "nscd.h"
+#include "prototypes.h"
+#ifdef SHADOWGRP
+#include "groupio.h"
+#include "sgroupio.h"
+/*
+ * Global variables
+ */
+char *Prog;
+
+static bool gr_locked  = false;
+static bool sgr_locked = false;
+
+/* local function prototypes */
+static void fail_exit (int status);
+
+static void fail_exit (int status)
+{
+       if (gr_locked) {
+               if (gr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+                       /* continue */
+               }
+       }
+
+       if (sgr_locked) {
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                       /* continue */
+               }
+       }
+
+       exit (status);
+}
+
+int main (int argc, char **argv)
+{
+       const struct group *gr;
+       struct group grent;
+       const struct sgrp *sg;
+
+       if (1 != argc) {
+               (void) fputs (_("Usage: grpunconv\n"), stderr);
+       }
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       OPENLOG ("grpunconv");
+
+       if (sgr_file_present () == 0) {
+               exit (0);       /* no /etc/gshadow, nothing to do */
+       }
+
+       if (gr_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, gr_dbname ());
+               fail_exit (5);
+       }
+       gr_locked = true;
+       if (gr_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"), Prog, gr_dbname ());
+               fail_exit (1);
+       }
+
+       if (sgr_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, sgr_dbname ());
+               fail_exit (5);
+       }
+       sgr_locked = true;
+       if (sgr_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"), Prog, sgr_dbname ());
+               fail_exit (1);
+       }
+
+       /*
+        * Update group passwords if non-shadow password is "x".
+        */
+       gr_rewind ();
+       while ((gr = gr_next ()) != NULL) {
+               sg = sgr_locate (gr->gr_name);
+               if (   (NULL != sg)
+                   && (strcmp (gr->gr_passwd, SHADOW_PASSWD_STRING) == 0)) {
+                       /* add password to /etc/group */
+                       grent = *gr;
+                       grent.gr_passwd = sg->sg_passwd;
+                       if (gr_update (&grent) == 0) {
+                               fprintf (stderr,
+                                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                                        Prog, gr_dbname (), grent.gr_name);
+                               fail_exit (3);
+                       }
+               }
+       }
+
+       if (sgr_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, sgr_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+               fail_exit (3);
+       }
+
+       if (gr_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+               fail_exit (3);
+       }
+
+       if (unlink (SGROUP_FILE) != 0) {
+               fprintf (stderr,
+                        _("%s: cannot delete %s\n"),
+                        Prog, SGROUP_FILE);
+               SYSLOG ((LOG_ERR, "cannot delete %s", SGROUP_FILE));
+               fail_exit (3);
+       }
+
+       if (gr_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+               /* continue */
+       }
+
+       if (sgr_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+               /* continue */
+       }
+
+       nscd_flush_cache ("group");
+
+       return 0;
+}
+#else                          /* !SHADOWGRP */
+int main (int unused(argc), char **argv)
+{
+       fprintf (stderr,
+                "%s: not configured for shadow group support.\n", argv[0]);
+       exit (1);
+}
+#endif                         /* !SHADOWGRP */
+
diff --git a/src/id.c b/src/id.c
new file mode 100644 (file)
index 0000000..cd72606
--- /dev/null
+++ b/src/id.c
@@ -0,0 +1,207 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * id - print current process user identification information
+ *
+ *     Print the current process identifiers. This includes the
+ *     UID, GID, effective-UID and effective-GID. Optionally print
+ *     the concurrent group set if the current system supports it.
+ */
+
+#include <config.h>
+
+#ident "$Id: id.c 2849 2009-04-30 21:08:49Z nekral-guest $"
+
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "defines.h"
+/* local function prototypes */
+static void usage (void);
+
+static void usage (void)
+{
+#ifdef HAVE_GETGROUPS
+       (void) fputs (_("Usage: id [-a]\n"), stderr);
+#else
+       (void) fputs (_("Usage: id\n"), stderr);
+#endif
+       exit (EXIT_FAILURE);
+}
+
+ /*ARGSUSED*/ int main (int argc, char **argv)
+{
+       uid_t ruid, euid;
+       gid_t rgid, egid;
+       int i;
+       long sys_ngroups;
+
+/*
+ * This block of declarations is particularly strained because of several
+ * different ways of doing concurrent groups. Old BSD systems used int for
+ * gid's, but short for the type passed to getgroups(). Newer systems use
+ * gid_t for everything. Some systems have a small and fixed NGROUPS,
+ * usually about 16 or 32. Others use bigger values.
+ */
+#ifdef HAVE_GETGROUPS
+       GETGROUPS_T *groups;
+       int ngroups;
+       bool aflg = 0;
+#endif
+       struct passwd *pw;
+       struct group *gr;
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       /*
+        * Dynamically get the maximum number of groups from system, instead
+        * of using the symbolic constant NGROUPS_MAX. This ensures that the
+        * group limit is not hard coded into the binary, so it will still
+        * work if the system library is recompiled.
+        */
+       sys_ngroups = sysconf (_SC_NGROUPS_MAX);
+#ifdef HAVE_GETGROUPS
+       groups = (GETGROUPS_T *) malloc (sizeof (GETGROUPS_T) * sys_ngroups);
+       /*
+        * See if the -a flag has been given to print out the concurrent
+        * group set.
+        */
+
+       if (argc > 1) {
+               if ((argc > 2) || (strcmp (argv[1], "-a") != 0)) {
+                       usage ();
+               } else {
+                       aflg = true;
+               }
+       }
+#else
+       if (argc > 1) {
+               usage ();
+       }
+#endif
+
+       ruid = getuid ();
+       euid = geteuid ();
+       rgid = getgid ();
+       egid = getegid ();
+
+       /*
+        * Print out the real user ID and group ID. If the user or group
+        * does not exist, just give the numerical value.
+        */
+
+       pw = getpwuid (ruid); /* local, no need for xgetpwuid */
+       if (NULL != pw) {
+               (void) printf ("UID=%lu(%s)",
+                              (unsigned long) ruid, pw->pw_name);
+       } else {
+               (void) printf ("UID=%lu", (unsigned long) ruid);
+       }
+
+       gr = getgrgid (rgid);; /* local, no need for xgetgrgid */
+       if (NULL != gr) {
+               (void) printf (" GID=%lu(%s)",
+                              (unsigned long) rgid, gr->gr_name);
+       } else {
+               (void) printf (" GID=%lu", (unsigned long) rgid);
+       }
+
+       /*
+        * Print out the effective user ID and group ID if they are
+        * different from the real values.
+        */
+
+       if (ruid != euid) {
+               pw = getpwuid (euid); /* local, no need for xgetpwuid */
+               if (NULL != pw) {
+                       (void) printf (" EUID=%lu(%s)",
+                                      (unsigned long) euid, pw->pw_name);
+               } else {
+                       (void) printf (" EUID=%lu", (unsigned long) euid);
+               }
+       }
+       if (rgid != egid) {
+               gr = getgrgid (egid); /* local, no need for xgetgrgid */
+               if (NULL != gr) {
+                       (void) printf (" EGID=%lu(%s)",
+                                      (unsigned long) egid, gr->gr_name);
+               } else {
+                       (void) printf (" EGID=%lu", (unsigned long) egid);
+               }
+       }
+#ifdef HAVE_GETGROUPS
+       /*
+        * Print out the concurrent group set if the user has requested it.
+        * The group numbers will be printed followed by their names.
+        */
+       if (aflg && (ngroups = getgroups (sys_ngroups, groups)) != -1) {
+
+               /*
+                * Start off the group message. It will be of the format
+                *
+                *      groups=###(aaa),###(aaa),###(aaa)
+                *
+                * where "###" is a numerical value and "aaa" is the
+                * corresponding name for each respective numerical value.
+                */
+               (void) puts (_(" groups="));
+               for (i = 0; i < ngroups; i++) {
+                       if (0 != i)
+                               (void) putchar (',');
+
+                       /* local, no need for xgetgrgid */
+                       gr = getgrgid (groups[i]);
+                       if (NULL != gr) {
+                               (void) printf ("%lu(%s)",
+                                              (unsigned long) groups[i],
+                                              gr->gr_name);
+                       } else {
+                               (void) printf ("%lu",
+                                              (unsigned long) groups[i]);
+                       }
+               }
+       }
+       free (groups);
+#endif
+
+       /*
+        * Finish off the line.
+        */
+       (void) putchar ('\n');
+
+       return EXIT_SUCCESS;
+}
+
diff --git a/src/lastlog.c b/src/lastlog.c
new file mode 100644 (file)
index 0000000..021f1af
--- /dev/null
@@ -0,0 +1,302 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: lastlog.c 2851 2009-04-30 21:39:38Z nekral-guest $"
+
+#include <getopt.h>
+#include <lastlog.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <time.h>
+#include <assert.h>
+#include "defines.h"
+#include "prototypes.h"
+
+/*
+ * Needed for MkLinux DR1/2/2.1 - J.
+ */
+#ifndef LASTLOG_FILE
+#define LASTLOG_FILE "/var/log/lastlog"
+#endif
+
+/*
+ * Global variables
+ */
+static FILE *lastlogfile;      /* lastlog file stream */
+static unsigned long umin;     /* if uflg and has_umin, only display users with uid >= umin */
+static bool has_umin = false;
+static unsigned long umax;     /* if uflg and has_umax, only display users with uid <= umax */
+static bool has_umax = false;
+static time_t seconds;         /* that number of days in seconds */
+static time_t inverse_seconds; /* that number of days in seconds */
+static struct stat statbuf;    /* fstat buffer for file size */
+
+
+static bool uflg = false;      /* print only an user of range of users */
+static bool tflg = false;      /* print is restricted to most recent days */
+static bool bflg = false;      /* print excludes most recent days */
+
+#define        NOW     (time ((time_t *) 0))
+
+static void usage (void)
+{
+       fputs (_("Usage: lastlog [options]\n"
+                "\n"
+                "Options:\n"
+                "  -b, --before DAYS             print only lastlog records older than DAYS\n"
+                "  -h, --help                    display this help message and exit\n"
+                "  -t, --time DAYS               print only lastlog records more recent than DAYS\n"
+                "  -u, --user LOGIN              print lastlog record of the specified LOGIN\n"
+                "\n"), stderr);
+       exit (EXIT_FAILURE);
+}
+
+static void print_one (/*@null@*/const struct passwd *pw)
+{
+       static bool once = false;
+       char *cp;
+       struct tm *tm;
+       time_t ll_time;
+       off_t offset;
+       struct lastlog ll;
+
+#ifdef HAVE_STRFTIME
+       char ptime[80];
+#endif
+
+       if (NULL == pw) {
+               return;
+       }
+
+
+       offset = pw->pw_uid * sizeof (ll);
+
+       if (offset <= (statbuf.st_size - sizeof (ll))) {
+               /* fseeko errors are not really relevant for us. */
+               int err = fseeko (lastlogfile, offset, SEEK_SET);
+               assert (0 == err);
+               /* lastlog is a sparse file. Even if no entries were
+                * entered for this user, which should be able to get the
+                * empty entry in this case.
+                */
+               if (fread ((char *) &ll, sizeof (ll), 1, lastlogfile) != 1) {
+                       fprintf (stderr,
+                                _("lastlog: Failed to get the entry for UID %lu\n"),
+                                (unsigned long int)pw->pw_uid);
+                       exit (EXIT_FAILURE);
+               }
+       } else {
+               /* Outsize of the lastlog file.
+                * Behave as if there were a missing entry (same behavior
+                * as if we were reading an non existing entry in the
+                * sparse lastlog file).
+                */
+               memzero (&ll, sizeof (ll));
+       }
+
+       /* Filter out entries that do not match with the -t or -b options */
+       if (tflg && ((NOW - ll.ll_time) > seconds)) {
+               return;
+       }
+
+       if (bflg && ((NOW - ll.ll_time) < inverse_seconds)) {
+               return;
+       }
+
+       /* Print the header only once */
+       if (!once) {
+#ifdef HAVE_LL_HOST
+               puts (_("Username         Port     From             Latest"));
+#else
+               puts (_("Username                Port     Latest"));
+#endif
+               once = true;
+       }
+
+       ll_time = ll.ll_time;
+       tm = localtime (&ll_time);
+#ifdef HAVE_STRFTIME
+       strftime (ptime, sizeof (ptime), "%a %b %e %H:%M:%S %z %Y", tm);
+       cp = ptime;
+#else
+       cp = asctime (tm);
+       cp[24] = '\0';
+#endif
+
+       if (ll.ll_time == (time_t) 0) {
+               cp = _("**Never logged in**\0");
+       }
+
+#ifdef HAVE_LL_HOST
+       printf ("%-16s %-8.8s %-16.16s %s\n",
+               pw->pw_name, ll.ll_line, ll.ll_host, cp);
+#else
+       printf ("%-16s\t%-8.8s %s\n",
+               pw->pw_name, ll.ll_line, cp);
+#endif
+}
+
+static void print (void)
+{
+       const struct passwd *pwent;
+       if (uflg && has_umin && has_umax && (umin == umax)) {
+               print_one (getpwuid ((uid_t)umin));
+       } else {
+               setpwent ();
+               while ( (pwent = getpwent ()) != NULL ) {
+                       if (   uflg
+                           && (   (has_umin && (pwent->pw_uid < (uid_t)umin))
+                               || (has_umax && (pwent->pw_uid > (uid_t)umax)))) {
+                               continue;
+                       }
+                       print_one (pwent);
+               }
+               endpwent ();
+       }
+}
+
+int main (int argc, char **argv)
+{
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       {
+               int c;
+               static struct option const longopts[] = {
+                       {"help", no_argument, NULL, 'h'},
+                       {"time", required_argument, NULL, 't'},
+                       {"before", required_argument, NULL, 'b'},
+                       {"user", required_argument, NULL, 'u'},
+                       {NULL, 0, NULL, '\0'}
+               };
+
+               while ((c = getopt_long (argc, argv, "ht:b:u:", longopts,
+                                        NULL)) != -1) {
+                       switch (c) {
+                       case 'h':
+                               usage ();
+                               break;
+                       case 't':
+                       {
+                               unsigned long days;
+                               if (getulong (optarg, &days) == 0) {
+                                       fprintf (stderr,
+                                                _("%s: invalid numeric argument '%s'\n"),
+                                                "lastlog", optarg);
+                                       exit (EXIT_FAILURE);
+                               }
+                               seconds = (time_t) days * DAY;
+                               tflg = true;
+                               break;
+                       }
+                       case 'b':
+                       {
+                               unsigned long inverse_days;
+                               if (getulong (optarg, &inverse_days) == 0) {
+                                       fprintf (stderr,
+                                                _("%s: invalid numeric argument '%s'\n"),
+                                                "lastlog", optarg);
+                                       exit (EXIT_FAILURE);
+                               }
+                               inverse_seconds = (time_t) inverse_days * DAY;
+                               bflg = true;
+                               break;
+                       }
+                       case 'u':
+                       {
+                               const struct passwd *pwent;
+                               /*
+                                * The user can be:
+                                *  - a login name
+                                *  - numerical
+                                *  - a numerical login ID
+                                *  - a range (-x, x-, x-y)
+                                */
+                               uflg = true;
+                               /* local, no need for xgetpwnam */
+                               pwent = getpwnam (optarg);
+                               if (NULL != pwent) {
+                                       umin = (unsigned long) pwent->pw_uid;
+                                       has_umin = true;
+                                       umax = umin;
+                                       has_umax = true;
+                               } else {
+                                       if (getrange (optarg,
+                                                     &umin, &has_umin,
+                                                     &umax, &has_umax) == 0) {
+                                               fprintf (stderr,
+                                                        _("lastlog: Unknown user or range: %s\n"),
+                                                        optarg);
+                                               exit (EXIT_FAILURE);
+                                       }
+                               }
+                               break;
+                       }
+                       default:
+                               usage ();
+                               break;
+                       }
+               }
+               if (argc > optind) {
+                       fprintf (stderr,
+                                _("lastlog: unexpected argument: %s\n"),
+                                argv[optind]);
+                       usage();
+               }
+       }
+
+       lastlogfile = fopen (LASTLOG_FILE, "r");
+       if (NULL == lastlogfile) {
+               perror (LASTLOG_FILE);
+               exit (EXIT_FAILURE);
+       }
+
+       /* Get the lastlog size */
+       if (fstat (fileno (lastlogfile), &statbuf) != 0) {
+               fprintf (stderr,
+                        _("lastlog: Cannot get the size of %s: %s\n"),
+                        LASTLOG_FILE, strerror (errno));
+               exit (EXIT_FAILURE);
+       }
+
+       print ();
+
+       (void) fclose (lastlogfile);
+
+       return EXIT_SUCCESS;
+}
+
diff --git a/src/login.c b/src/login.c
new file mode 100644 (file)
index 0000000..b67e3f1
--- /dev/null
@@ -0,0 +1,1333 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2001, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: login.c 2927 2009-05-16 15:43:13Z nekral-guest $"
+
+#include <errno.h>
+#include <grp.h>
+#ifndef USE_PAM
+#include <lastlog.h>
+#endif                         /* !USE_PAM */
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <assert.h>
+#include "defines.h"
+#include "faillog.h"
+#include "failure.h"
+#include "getdef.h"
+#include "prototypes.h"
+#include "pwauth.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+#ifdef USE_PAM
+#include "pam_defs.h"
+
+static pam_handle_t *pamh = NULL;
+
+#define PAM_FAIL_CHECK if (retcode != PAM_SUCCESS) { \
+       fprintf(stderr,"\n%s\n",pam_strerror(pamh, retcode)); \
+       SYSLOG((LOG_ERR,"%s",pam_strerror(pamh, retcode))); \
+       (void) pam_end(pamh, retcode); \
+       exit(1); \
+   }
+#define PAM_END { retcode = pam_close_session(pamh,0); \
+               (void) pam_end(pamh,retcode); }
+
+#endif                         /* USE_PAM */
+
+#ifndef USE_PAM
+/*
+ * Needed for MkLinux DR1/2/2.1 - J.
+ */
+#ifndef LASTLOG_FILE
+#define LASTLOG_FILE "/var/log/lastlog"
+#endif
+#endif                         /* !USE_PAM */
+
+/*
+ * Global variables
+ */
+char *Prog;
+
+static const char *hostname = "";
+static /*@null@*/ /*@only@*/char *username = NULL;
+static int reason = PW_LOGIN;
+
+#ifndef USE_PAM
+static struct lastlog ll;
+#endif                         /* !USE_PAM */
+static bool pflg = false;
+static bool fflg = false;
+
+#ifdef RLOGIN
+static bool rflg = false;
+#else                          /* RLOGIN */
+#define rflg false
+#endif                         /* !RLOGIN */
+static bool hflg = false;
+static bool preauth_flag = false;
+
+static bool amroot;
+static unsigned int timeout;
+
+/*
+ * External identifiers.
+ */
+
+extern char **newenvp;
+extern size_t newenvc;
+extern char **environ;
+
+#ifndef        ALARM
+#define        ALARM   60
+#endif
+
+#ifndef        RETRIES
+#define        RETRIES 3
+#endif
+
+/* local function prototypes */
+static void usage (void);
+static void setup_tty (void);
+static void process_flags (int argc, char *const *argv);
+static /*@observer@*/const char *get_failent_user (/*@returned@*/const char *user);
+static void update_utmp (const char *user,
+                         const char *tty,
+                         const char *host,
+                         /*@null@*/const struct utmp *utent);
+
+#ifndef USE_PAM
+static struct faillog faillog;
+
+static void bad_time_notify (void);
+static void check_nologin (bool login_to_root);
+#else
+static void get_pam_user (char **ptr_pam_user);
+#endif
+
+static void init_env (void);
+static RETSIGTYPE alarm_handler (int);
+
+/*
+ * usage - print login command usage and exit
+ *
+ * login [ name ]
+ * login -r hostname   (for rlogind)
+ * login -h hostname   (for telnetd, etc.)
+ * login -f name       (for pre-authenticated login: datakit, xterm, etc.)
+ */
+static void usage (void)
+{
+       fprintf (stderr, _("Usage: %s [-p] [name]\n"), Prog);
+       if (!amroot) {
+               exit (1);
+       }
+       fprintf (stderr, _("       %s [-p] [-h host] [-f name]\n"), Prog);
+#ifdef RLOGIN
+       fprintf (stderr, _("       %s [-p] -r host\n"), Prog);
+#endif                         /* RLOGIN */
+       exit (1);
+}
+
+static void setup_tty (void)
+{
+       TERMIO termio;
+       int erasechar;
+       int killchar;
+
+       if (GTTY (0, &termio) == 0) {   /* get terminal characteristics */
+
+               /*
+                * Add your favorite terminal modes here ...
+                */
+               termio.c_lflag |= ISIG | ICANON | ECHO | ECHOE;
+               termio.c_iflag |= ICRNL;
+
+#if defined(ECHOKE) && defined(ECHOCTL)
+               termio.c_lflag |= ECHOKE | ECHOCTL;
+#endif
+#if defined(ECHOPRT) && defined(NOFLSH) && defined(TOSTOP)
+               termio.c_lflag &= ~(ECHOPRT | NOFLSH | TOSTOP);
+#endif
+#ifdef ONLCR
+               termio.c_oflag |= ONLCR;
+#endif
+
+               /* leave these values unchanged if not specified in login.defs */
+               erasechar = getdef_num ("ERASECHAR", (int) termio.c_cc[VERASE]);
+               killchar = getdef_num ("KILLCHAR", (int) termio.c_cc[VKILL]);
+               termio.c_cc[VERASE] = (cc_t) erasechar;
+               termio.c_cc[VKILL] = (cc_t) killchar;
+               /* Make sure the values were valid.
+                * getdef_num cannot validate this.
+                */
+               if (erasechar != (int) termio.c_cc[VERASE]) {
+                       fprintf (stderr,
+                                _("configuration error - cannot parse %s value: '%d'"),
+                                "ERASECHAR", erasechar);
+                       exit (1);
+               }
+               if (killchar != (int) termio.c_cc[VKILL]) {
+                       fprintf (stderr,
+                                _("configuration error - cannot parse %s value: '%d'"),
+                                "KILLCHAR", killchar);
+                       exit (1);
+               }
+
+               /*
+                * ttymon invocation prefers this, but these settings
+                * won't come into effect after the first username login 
+                */
+               (void) STTY (0, &termio);
+       }
+}
+
+
+#ifndef USE_PAM
+/*
+ * Tell the user that this is not the right time to login at this tty
+ */
+static void bad_time_notify (void)
+{
+       (void) puts (_("Invalid login time"));
+       (void) fflush (stdout);
+}
+
+static void check_nologin (bool login_to_root)
+{
+       char *fname;
+
+       /*
+        * Check to see if system is turned off for non-root users.
+        * This would be useful to prevent users from logging in
+        * during system maintenance. We make sure the message comes
+        * out for root so she knows to remove the file if she's
+        * forgotten about it ...
+        */
+       fname = getdef_str ("NOLOGINS_FILE");
+       if ((NULL != fname) && (access (fname, F_OK) == 0)) {
+               FILE *nlfp;
+               int c;
+
+               /*
+                * Cat the file if it can be opened, otherwise just
+                * print a default message
+                */
+               nlfp = fopen (fname, "r");
+               if (NULL != nlfp) {
+                       while ((c = getc (nlfp)) != EOF) {
+                               if (c == '\n') {
+                                       (void) putchar ('\r');
+                               }
+
+                               (void) putchar (c);
+                       }
+                       (void) fflush (stdout);
+                       (void) fclose (nlfp);
+               } else {
+                       (void) puts (_("\nSystem closed for routine maintenance"));
+               }
+               /*
+                * Non-root users must exit. Root gets the message, but
+                * gets to login.
+                */
+
+               if (!login_to_root) {
+                       closelog ();
+                       exit (0);
+               }
+               (void) puts (_("\n[Disconnect bypassed -- root login allowed.]"));
+       }
+}
+#endif                         /* !USE_PAM */
+
+static void process_flags (int argc, char *const *argv)
+{
+       int arg;
+       int flag;
+
+       /*
+        * Check the flags for proper form. Every argument starting with
+        * "-" must be exactly two characters long. This closes all the
+        * clever rlogin, telnet, and getty holes.
+        */
+       for (arg = 1; arg < argc; arg++) {
+               if (argv[arg][0] == '-' && strlen (argv[arg]) > 2) {
+                       usage ();
+               }
+               if (strcmp(argv[arg], "--") == 0) {
+                       break; /* stop checking on a "--" */
+               }
+       }
+
+       /*
+        * Process options.
+        */
+       while ((flag = getopt (argc, argv, "d:fh:pr:")) != EOF) {
+               switch (flag) {
+               case 'd':
+                       /* "-d device" ignored for compatibility */
+                       break;
+               case 'f':
+                       fflg = true;
+                       break;
+               case 'h':
+                       hflg = true;
+                       hostname = optarg;
+                       reason = PW_TELNET;
+                       break;
+#ifdef RLOGIN
+               case 'r':
+                       rflg = true;
+                       hostname = optarg;
+                       reason = PW_RLOGIN;
+                       break;
+#endif                         /* RLOGIN */
+               case 'p':
+                       pflg = true;
+                       break;
+               default:
+                       usage ();
+               }
+       }
+
+#ifdef RLOGIN
+       /*
+        * Neither -h nor -f should be combined with -r.
+        */
+
+       if (rflg && (hflg || fflg)) {
+               usage ();
+       }
+#endif                         /* RLOGIN */
+
+       /*
+        * Allow authentication bypass only if real UID is zero.
+        */
+
+       if ((rflg || fflg || hflg) && !amroot) {
+               fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+               exit (1);
+       }
+
+       /*
+        *  Get the user name.
+        */
+       if (optind < argc) {
+               assert (NULL == username);
+               username = xstrdup (argv[optind]);
+               strzero (argv[optind]);
+               ++optind;
+       }
+
+#ifdef RLOGIN
+       if (rflg && (NULL != username)) {
+               usage ();
+       }
+#endif                         /* RLOGIN */
+       if (fflg && (NULL == username)) {
+               usage ();
+       }
+
+}
+
+
+static void init_env (void)
+{
+#ifndef USE_PAM
+       char *cp;
+#endif
+       char *tmp;
+
+       tmp = getenv ("LANG");
+       if (NULL != tmp) {
+               addenv ("LANG", tmp);
+       }
+
+       /*
+        * Add the timezone environmental variable so that time functions
+        * work correctly.
+        */
+       tmp = getenv ("TZ");
+       if (NULL != tmp) {
+               addenv ("TZ", tmp);
+       }
+#ifndef USE_PAM
+       else {
+               cp = getdef_str ("ENV_TZ");
+               if (NULL != cp) {
+                       addenv (('/' == *cp) ? tz (cp) : cp, NULL);
+               }
+       }
+#endif                         /* !USE_PAM */
+       /* 
+        * Add the clock frequency so that profiling commands work
+        * correctly.
+        */
+       tmp = getenv ("HZ");
+       if (NULL != tmp) {
+               addenv ("HZ", tmp);
+       }
+#ifndef USE_PAM
+       else {
+               cp = getdef_str ("ENV_HZ");
+               if (NULL != cp) {
+                       addenv (cp, NULL);
+               }
+       }
+#endif                         /* !USE_PAM */
+}
+
+
+static RETSIGTYPE alarm_handler (unused int sig)
+{
+       fprintf (stderr, _("\nLogin timed out after %u seconds.\n"), timeout);
+       exit (0);
+}
+
+#ifdef USE_PAM
+/*
+ * get_pam_user - Get the username according to PAM
+ *
+ * ptr_pam_user shall point to a malloc'ed string (or NULL).
+ */
+static void get_pam_user (char **ptr_pam_user)
+{
+       int retcode;
+       void *ptr_user;
+
+       assert (NULL != ptr_pam_user);
+
+       retcode = pam_get_item (pamh, PAM_USER, (const void **)&ptr_user);
+       PAM_FAIL_CHECK;
+
+       if (NULL != *ptr_pam_user) {
+               free (*ptr_pam_user);
+       }
+       if (NULL != ptr_user) {
+               *ptr_pam_user = xstrdup ((const char *)ptr_user);
+       } else {
+               *ptr_pam_user = NULL;
+       }
+}
+#endif
+
+/*
+ * get_failent_user - Return a string that can be used to log failure
+ *                    from an user.
+ *
+ * This will be either the user argument, or "UNKNOWN".
+ *
+ * It is quite common to mistyped the password for username, and passwords
+ * should not be logged.
+ */
+static /*@observer@*/const char *get_failent_user (/*@returned@*/const char *user)
+{
+       const char *failent_user = "UNKNOWN";
+       bool log_unkfail_enab = getdef_bool("LOG_UNKFAIL_ENAB");
+
+       if ((NULL != user) && ('\0' != user[0])) {
+               if (   log_unkfail_enab
+                   || (getpwnam (user) != NULL)) {
+                       failent_user = user;
+               }
+       }
+
+       return failent_user;
+}
+
+/*
+ * update_utmp - Update or create an utmp entry in utmp, wtmp, utmpw, and
+ *               wtmpx
+ *
+ *     utent should be the utmp entry returned by get_current_utmp (or
+ *     NULL).
+ */
+static void update_utmp (const char *user,
+                         const char *tty,
+                         const char *host,
+                         /*@null@*/const struct utmp *utent)
+{
+       struct utmp  *ut  = prepare_utmp  (user, tty, host, utent);
+#ifdef USE_UTMPX
+       struct utmpx *utx = prepare_utmpx (user, tty, host, utent);
+#endif                         /* USE_UTMPX */
+
+       (void) setutmp  (ut);   /* make entry in the utmp & wtmp files */
+       free (ut);
+
+#ifdef USE_UTMPX
+       (void) setutmpx (utx);  /* make entry in the utmpx & wtmpx files */
+       free (utx);
+#endif                         /* USE_UTMPX */
+}
+
+/*
+ * login - create a new login session for a user
+ *
+ *     login is typically called by getty as the second step of a
+ *     new user session. getty is responsible for setting the line
+ *     characteristics to a reasonable set of values and getting
+ *     the name of the user to be logged in. login may also be
+ *     called to create a new user session on a pty for a variety
+ *     of reasons, such as X servers or network logins.
+ *
+ *     the flags which login supports are
+ *     
+ *     -p - preserve the environment
+ *     -r - perform autologin protocol for rlogin
+ *     -f - do not perform authentication, user is preauthenticated
+ *     -h - the name of the remote host
+ */
+int main (int argc, char **argv)
+{
+       const char *tmptty;
+       char tty[BUFSIZ];
+
+#ifdef RLOGIN
+       char term[128] = "";
+#endif                         /* RLOGIN */
+#if defined(HAVE_STRFTIME) && !defined(USE_PAM)
+       char ptime[80];
+#endif
+       unsigned int delay;
+       unsigned int retries;
+       bool failed;
+       bool subroot = false;
+#ifndef USE_PAM
+       bool is_console;
+#endif
+       int err;
+       const char *cp;
+       char *tmp;
+       char fromhost[512];
+       struct passwd *pwd = NULL;
+       char **envp = environ;
+       const char *failent_user;
+       /*@null@*/struct utmp *utent;
+
+#ifdef USE_PAM
+       int retcode;
+       pid_t child;
+       char *pam_user = NULL;
+#else
+       struct spwd *spwd = NULL;
+#endif
+       /*
+        * Some quick initialization.
+        */
+
+       sanitize_env ();
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       initenv ();
+
+       amroot = (getuid () == 0);
+       Prog = Basename (argv[0]);
+
+       if (geteuid() != 0) {
+               fprintf (stderr, _("%s: Cannot possibly work without effective root\n"), Prog);
+               exit (1);
+       }
+
+       process_flags (argc, argv);
+
+       if ((isatty (0) == 0) || (isatty (1) == 0) || (isatty (2) == 0)) {
+               exit (1);       /* must be a terminal */
+       }
+
+       utent = get_current_utmp ();
+       /*
+        * Be picky if run by normal users (possible if installed setuid
+        * root), but not if run by root. This way it still allows logins
+        * even if your getty is broken, or if something corrupts utmp,
+        * but users must "exec login" which will use the existing utmp
+        * entry (will not overwrite remote hostname).  --marekm
+        */
+       if (!amroot && (NULL == utent)) {
+               (void) puts (_("No utmp entry.  You must exec \"login\" from the lowest level \"sh\""));
+               exit (1);
+       }
+       /* NOTE: utent might be NULL afterwards */
+
+       tmptty = ttyname (0);
+       if (NULL == tmptty) {
+               tmptty = "UNKNOWN";
+       }
+       STRFCPY (tty, tmptty);
+
+#ifndef USE_PAM
+       is_console = console (tty);
+#endif
+
+       if (rflg || hflg) {
+               /*
+                * Add remote hostname to the environment. I think
+                * (not sure) I saw it once on Irix.  --marekm
+                */
+               addenv ("REMOTEHOST", hostname);
+       }
+       if (fflg) {
+               preauth_flag = true;
+       }
+       if (hflg) {
+               reason = PW_RLOGIN;
+       }
+#ifdef RLOGIN
+       if (rflg) {
+               assert (NULL == username);
+               username = xmalloc (USER_NAME_MAX_LENGTH + 1);
+               username[USER_NAME_MAX_LENGTH] = '\0';
+               if (do_rlogin (hostname, username, USER_NAME_MAX_LENGTH, term, sizeof term)) {
+                       preauth_flag = true;
+               } else {
+                       free (username);
+                       username = NULL;
+               }
+       }
+#endif                         /* RLOGIN */
+
+       OPENLOG ("login");
+
+       setup_tty ();
+
+#ifndef USE_PAM
+       (void) umask (getdef_num ("UMASK", GETDEF_DEFAULT_UMASK));
+
+       {
+               /* 
+                * Use the ULIMIT in the login.defs file, and if
+                * there isn't one, use the default value. The
+                * user may have one for themselves, but otherwise,
+                * just take what you get.
+                */
+               long limit = getdef_long ("ULIMIT", -1L);
+
+               if (limit != -1) {
+                       set_filesize_limit (limit);
+               }
+       }
+
+#endif
+       /*
+        * The entire environment will be preserved if the -p flag
+        * is used.
+        */
+       if (pflg) {
+               while (NULL != *envp) { /* add inherited environment, */
+                       addenv (*envp, NULL); /* some variables change later */
+                       envp++;
+               }
+       }
+
+#ifdef RLOGIN
+       if (term[0] != '\0') {
+               addenv ("TERM", term);
+       } else
+#endif                         /* RLOGIN */
+       {
+               /* preserve TERM from getty */
+               if (!pflg) {
+                       tmp = getenv ("TERM");
+                       if (NULL != tmp) {
+                               addenv ("TERM", tmp);
+                       }
+               }
+       }
+
+       init_env ();
+
+       if (optind < argc) {    /* now set command line variables */
+               set_env (argc - optind, &argv[optind]);
+       }
+
+       if (rflg || hflg) {
+               cp = hostname;
+#ifdef HAVE_STRUCT_UTMP_UT_HOST
+       } else if ((NULL != utent) && ('\0' != utent->ut_host[0])) {
+               cp = utent->ut_host;
+#endif                         /* HAVE_STRUCT_UTMP_UT_HOST */
+       } else {
+               cp = "";
+       }
+
+       if ('\0' != *cp) {
+               snprintf (fromhost, sizeof fromhost,
+                         " on '%.100s' from '%.200s'", tty, cp);
+       } else {
+               snprintf (fromhost, sizeof fromhost,
+                         " on '%.100s'", tty);
+       }
+
+      top:
+       /* only allow ALARM sec. for login */
+       (void) signal (SIGALRM, alarm_handler);
+       timeout = getdef_unum ("LOGIN_TIMEOUT", ALARM);
+       if (timeout > 0) {
+               (void) alarm (timeout);
+       }
+
+       environ = newenvp;      /* make new environment active */
+       delay   = getdef_unum ("FAIL_DELAY", 1);
+       retries = getdef_unum ("LOGIN_RETRIES", RETRIES);
+
+#ifdef USE_PAM
+       retcode = pam_start ("login", username, &conv, &pamh);
+       if (retcode != PAM_SUCCESS) {
+               fprintf (stderr,
+                        _("login: PAM Failure, aborting: %s\n"),
+                        pam_strerror (pamh, retcode));
+               SYSLOG ((LOG_ERR, "Couldn't initialize PAM: %s",
+                        pam_strerror (pamh, retcode)));
+               exit (99);
+       }
+
+       /*
+        * hostname & tty are either set to NULL or their correct values,
+        * depending on how much we know. We also set PAM's fail delay to
+        * ours.
+        *
+        * PAM_RHOST and PAM_TTY are used for authentication, only use
+        * information coming from login or from the caller (e.g. no utmp)
+        */
+       retcode = pam_set_item (pamh, PAM_RHOST, hostname);
+       PAM_FAIL_CHECK;
+       retcode = pam_set_item (pamh, PAM_TTY, tty);
+       PAM_FAIL_CHECK;
+#ifdef HAS_PAM_FAIL_DELAY
+       retcode = pam_fail_delay (pamh, 1000000 * delay);
+       PAM_FAIL_CHECK;
+#endif
+       /* if fflg, then the user has already been authenticated */
+       if (!fflg) {
+               unsigned int failcount = 0;
+               char hostn[256];
+               char loginprompt[256];  /* That's one hell of a prompt :) */
+
+               /* Make the login prompt look like we want it */
+               if (gethostname (hostn, sizeof (hostn)) == 0) {
+                       snprintf (loginprompt,
+                                 sizeof (loginprompt),
+                                 _("%s login: "), hostn);
+               } else {
+                       strncpy (loginprompt, _("login: "),
+                                sizeof (loginprompt));
+               }
+
+               retcode = pam_set_item (pamh, PAM_USER_PROMPT, loginprompt);
+               PAM_FAIL_CHECK;
+
+               /* if we didn't get a user on the command line,
+                  set it to NULL */
+               get_pam_user (&pam_user);
+               if ((NULL != pam_user) && ('\0' == pam_user[0])) {
+                       retcode = pam_set_item (pamh, PAM_USER, NULL);
+                       PAM_FAIL_CHECK;
+               }
+
+               /*
+                * There may be better ways to deal with some of
+                * these conditions, but at least this way I don't
+                * think we'll be giving away information. Perhaps
+                * someday we can trust that all PAM modules will
+                * pay attention to failure count and get rid of
+                * MAX_LOGIN_TRIES?
+                */
+               failcount = 0;
+               while (true) {
+                       failed = false;
+
+                       failcount++;
+#ifdef HAS_PAM_FAIL_DELAY
+                       if (delay > 0) {
+                               retcode = pam_fail_delay(pamh, 1000000*delay);
+                               PAM_FAIL_CHECK;
+                       }
+#endif
+
+                       retcode = pam_authenticate (pamh, 0);
+
+                       get_pam_user (&pam_user);
+                       failent_user = get_failent_user (pam_user);
+
+                       if (retcode == PAM_MAXTRIES) {
+                               SYSLOG ((LOG_NOTICE,
+                                        "TOO MANY LOGIN TRIES (%u)%s FOR '%s'",
+                                        failcount, fromhost, failent_user));
+                               fprintf(stderr,
+                                       _("Maximum number of tries exceeded (%u)\n"),
+                                       failcount);
+                               PAM_END;
+                               exit(0);
+                       } else if (retcode == PAM_ABORT) {
+                               /* Serious problems, quit now */
+                               (void) fputs (_("login: abort requested by PAM\n"), stderr);
+                               SYSLOG ((LOG_ERR,"PAM_ABORT returned from pam_authenticate()"));
+                               PAM_END;
+                               exit(99);
+                       } else if (retcode != PAM_SUCCESS) {
+                               SYSLOG ((LOG_NOTICE,"FAILED LOGIN (%u)%s FOR '%s', %s",
+                                        failcount, fromhost, failent_user,
+                                        pam_strerror (pamh, retcode)));
+                               failed = true;
+                       }
+
+                       if (!failed) {
+                               break;
+                       }
+
+#ifdef WITH_AUDIT
+                       audit_fd = audit_open ();
+                       audit_log_acct_message (audit_fd,
+                                               AUDIT_USER_LOGIN,
+                                               NULL,    /* Prog. name */
+                                               "login",
+                                               failent_user,
+                                               AUDIT_NO_ID,
+                                               hostname,
+                                               NULL,    /* addr */
+                                               tty,
+                                               0);      /* result */
+                       close (audit_fd);
+#endif                         /* WITH_AUDIT */
+
+                       (void) puts ("");
+                       (void) puts (_("Login incorrect"));
+
+                       if (failcount >= retries) {
+                               SYSLOG ((LOG_NOTICE,
+                                        "TOO MANY LOGIN TRIES (%u)%s FOR '%s'",
+                                        failcount, fromhost, failent_user));
+                               fprintf(stderr,
+                                       _("Maximum number of tries exceeded (%u)\n"),
+                                       failcount);
+                               PAM_END;
+                               exit(0);
+                       }
+
+                       /*
+                        * Let's give it another go around.
+                        * Even if a username was given on the command
+                        * line, prompt again for the username.
+                        */
+                       retcode = pam_set_item (pamh, PAM_USER, NULL);
+                       PAM_FAIL_CHECK;
+               }
+
+               /* We don't get here unless they were authenticated above */
+               (void) alarm (0);
+       }
+
+       /* Check the account validity */
+       retcode = pam_acct_mgmt (pamh, 0);
+       if (retcode == PAM_NEW_AUTHTOK_REQD) {
+               retcode = pam_chauthtok (pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
+       }
+       PAM_FAIL_CHECK;
+
+       /* Open the PAM session */
+       get_pam_user (&pam_user);
+       retcode = pam_open_session (pamh, hushed (pam_user) ? PAM_SILENT : 0);
+       PAM_FAIL_CHECK;
+
+       /* Grab the user information out of the password file for future usage
+        * First get the username that we are actually using, though.
+        *
+        * From now on, we will discard changes of the user (PAM_USER) by
+        * PAM APIs.
+        */
+       get_pam_user (&pam_user);
+       if (NULL != username) {
+               free (username);
+       }
+       username = pam_user;
+       failent_user = get_failent_user (username);
+
+       pwd = xgetpwnam (username);
+       if (NULL == pwd) {
+               SYSLOG ((LOG_ERR, "cannot find user %s", failent_user));
+               exit (1);
+       }
+
+       /* This set up the process credential (group) and initialize the
+        * supplementary group access list.
+        * This has to be done before pam_setcred
+        */
+       if (setup_groups (pwd) != 0) {
+               exit (1);
+       }
+
+       retcode = pam_setcred (pamh, PAM_ESTABLISH_CRED);
+       PAM_FAIL_CHECK;
+       /* NOTE: If pam_setcred changes PAM_USER, this will not be taken
+        * into account.
+        */
+
+#else                          /* ! USE_PAM */
+       while (true) {  /* repeatedly get login/password pairs */
+               /* user_passwd is always a pointer to this constant string
+                * or a passwd or shadow password that will be memzero by
+                * pw_free / spw_free.
+                * Do not free() user_passwd. */
+               const char *user_passwd = "!";
+
+               /* Do some cleanup to avoid keeping entries we do not need
+                * anymore. */
+               if (NULL != pwd) {
+                       pw_free (pwd);
+                       pwd = NULL;
+               }
+               if (NULL != spwd) {
+                       spw_free (spwd);
+                       spwd = NULL;
+               }
+
+               failed = false; /* haven't failed authentication yet */
+               if (NULL == username) { /* need to get a login id */
+                       if (subroot) {
+                               closelog ();
+                               exit (1);
+                       }
+                       preauth_flag = false;
+                       username = xmalloc (USER_NAME_MAX_LENGTH + 1);
+                       username[USER_NAME_MAX_LENGTH] = '\0';
+                       login_prompt (_("\n%s login: "), username, USER_NAME_MAX_LENGTH);
+
+                       if ('\0' == username[0]) {
+                               /* Prompt for a new login */
+                               free (username);
+                               username = NULL;
+                               continue;
+                       }
+               }
+               /* Get the username to be used to log failures */
+               failent_user = get_failent_user (username);
+
+               pwd = xgetpwnam (username);
+               if (NULL == pwd) {
+                       preauth_flag = false;
+                       failed = true;
+               } else {
+                       user_passwd = pwd->pw_passwd;
+                       /*
+                        * If the encrypted password begins with a "!",
+                        * the account is locked and the user cannot
+                        * login, even if they have been
+                        * "pre-authenticated."
+                        */
+                       if (   ('!' == user_passwd[0])
+                           || ('*' == user_passwd[0])) {
+                               failed = true;
+                       }
+               }
+
+               if (strcmp (user_passwd, SHADOW_PASSWD_STRING) == 0) {
+                       spwd = xgetspnam (username);
+                       if (NULL != spwd) {
+                               user_passwd = spwd->sp_pwdp;
+                       } else {
+                               /* The user exists in passwd, but not in
+                                * shadow. SHADOW_PASSWD_STRING indicates
+                                * that the password shall be in shadow.
+                                */
+                               SYSLOG ((LOG_WARN,
+                                        "no shadow password for '%s'%s",
+                                        username, fromhost));
+                       }
+               }
+
+               /*
+                * The -r and -f flags provide a name which has already
+                * been authenticated by some server.
+                */
+               if (preauth_flag) {
+                       goto auth_ok;
+               }
+
+               if (pw_auth (user_passwd, username, reason, (char *) 0) == 0) {
+                       goto auth_ok;
+               }
+
+               SYSLOG ((LOG_WARN, "invalid password for '%s' %s",
+                        failent_user, fromhost));
+               failed = true;
+
+             auth_ok:
+               /*
+                * This is the point where all authenticated users wind up.
+                * If you reach this far, your password has been
+                * authenticated and so on.
+                */
+               if (   !failed
+                   && (NULL != pwd)
+                   && (0 == pwd->pw_uid)
+                   && !is_console) {
+                       SYSLOG ((LOG_CRIT, "ILLEGAL ROOT LOGIN %s", fromhost));
+                       failed = true;
+               }
+               if (   !failed
+                   && !login_access (username, ('\0' != *hostname) ? hostname : tty)) {
+                       SYSLOG ((LOG_WARN, "LOGIN '%s' REFUSED %s",
+                                username, fromhost));
+                       failed = true;
+               }
+               if (   (NULL != pwd)
+                   && getdef_bool ("FAILLOG_ENAB")
+                   && !failcheck (pwd->pw_uid, &faillog, failed)) {
+                       SYSLOG ((LOG_CRIT,
+                                "exceeded failure limit for '%s' %s",
+                                username, fromhost));
+                       failed = true;
+               }
+               if (!failed) {
+                       break;
+               }
+
+               /* don't log non-existent users */
+               if ((NULL != pwd) && getdef_bool ("FAILLOG_ENAB")) {
+                       failure (pwd->pw_uid, tty, &faillog);
+               }
+               if (getdef_str ("FTMP_FILE") != NULL) {
+#ifdef USE_UTMPX
+                       struct utmpx *failent =
+                               prepare_utmpx (failent_user,
+                                              tty,
+                       /* FIXME: or fromhost? */hostname,
+                                              utent);
+#else                          /* !USE_UTMPX */
+                       struct utmp *failent =
+                               prepare_utmp (failent_user,
+                                             tty,
+                                             hostname,
+                                             utent);
+#endif                         /* !USE_UTMPX */
+                       failtmp (failent_user, failent);
+                       free (failent);
+               }
+
+               retries--;
+               if (retries <= 0) {
+                       SYSLOG ((LOG_CRIT, "REPEATED login failures%s",
+                                fromhost));
+               }
+
+               /*
+                * If this was a passwordless account and we get here, login
+                * was denied (securetty, faillog, etc.). There was no
+                * password prompt, so do it now (will always fail - the bad
+                * guys won't see that the passwordless account exists at
+                * all).  --marekm
+                */
+               if (user_passwd[0] == '\0') {
+                       pw_auth ("!", username, reason, (char *) 0);
+               }
+
+               /*
+                * Authentication of this user failed.
+                * The username must be confirmed in the next try.
+                */
+               free (username);
+               username = NULL;
+
+               /*
+                * Wait a while (a la SVR4 /usr/bin/login) before attempting
+                * to login the user again. If the earlier alarm occurs
+                * before the sleep() below completes, login will exit.
+                */
+               if (delay > 0) {
+                       (void) sleep (delay);
+               }
+
+               (void) puts (_("Login incorrect"));
+
+               /* allow only one attempt with -r or -f */
+               if (rflg || fflg || (retries <= 0)) {
+                       closelog ();
+                       exit (1);
+               }
+       }                       /* while (true) */
+#endif                         /* ! USE_PAM */
+       assert (NULL != username);
+       assert (NULL != pwd);
+
+       (void) alarm (0);               /* turn off alarm clock */
+
+#ifndef USE_PAM                        /* PAM does this */
+       /*
+        * porttime checks moved here, after the user has been
+        * authenticated. now prints a message, as suggested
+        * by Ivan Nejgebauer <ian@unsux.ns.ac.yu>.  --marekm
+        */
+       if (   getdef_bool ("PORTTIME_CHECKS_ENAB")
+           && !isttytime (username, tty, time ((time_t *) 0))) {
+               SYSLOG ((LOG_WARN, "invalid login time for '%s'%s",
+                        username, fromhost));
+               closelog ();
+               bad_time_notify ();
+               exit (1);
+       }
+
+       check_nologin (pwd->pw_uid == 0);
+#endif
+
+       if (getenv ("IFS")) {   /* don't export user IFS ... */
+               addenv ("IFS= \t\n", NULL);     /* ... instead, set a safe IFS */
+       }
+
+       if (pwd->pw_shell[0] == '*') {  /* subsystem root */
+               pwd->pw_shell++;        /* skip the '*' */
+               subsystem (pwd);        /* figure out what to execute */
+               subroot = true; /* say I was here again */
+               endpwent ();    /* close all of the file which were */
+               endgrent ();    /* open in the original rooted file */
+               endspent ();    /* system. they will be re-opened */
+#ifdef SHADOWGRP
+               endsgent ();    /* in the new rooted file system */
+#endif
+               goto top;       /* go do all this all over again */
+       }
+
+#ifdef WITH_AUDIT
+       audit_fd = audit_open ();
+       audit_log_acct_message (audit_fd,
+                               AUDIT_USER_LOGIN,
+                               NULL,    /* Prog. name */
+                               "login",
+                               username,
+                               AUDIT_NO_ID,
+                               hostname,
+                               NULL,    /* addr */
+                               tty,
+                               1);      /* result */
+       close (audit_fd);
+#endif                         /* WITH_AUDIT */
+
+#ifndef USE_PAM                        /* pam_lastlog handles this */
+       if (getdef_bool ("LASTLOG_ENAB")) {     /* give last login and log this one */
+               dolastlog (&ll, pwd, tty, hostname);
+       }
+#endif
+
+#ifndef USE_PAM                        /* PAM handles this as well */
+       /*
+        * Have to do this while we still have root privileges, otherwise we
+        * don't have access to /etc/shadow.
+        */
+       if (NULL != spwd) {             /* check for age of password */
+               if (expire (pwd, spwd)) {
+                       /* The user updated her password, get the new
+                        * entries.
+                        * Use the x variants because we need to keep the
+                        * entry for a long time, and there might be other
+                        * getxxyy in between.
+                        */
+                       pw_free (pwd);
+                       pwd = xgetpwnam (username);
+                       if (NULL == pwd) {
+                               SYSLOG ((LOG_ERR,
+                                        "cannot find user %s after update of expired password",
+                                        username));
+                               exit (1);
+                       }
+                       spw_free (spwd);
+                       spwd = xgetspnam (username);
+               }
+       }
+       setup_limits (pwd);     /* nice, ulimit etc. */
+#endif                         /* ! USE_PAM */
+       chown_tty (pwd);
+
+#ifdef USE_PAM
+       /*
+        * We must fork before setuid() because we need to call
+        * pam_close_session() as root.
+        */
+       (void) signal (SIGINT, SIG_IGN);
+       child = fork ();
+       if (child < 0) {
+               /* error in fork() */
+               fprintf (stderr, _("%s: failure forking: %s"),
+                        Prog, strerror (errno));
+               PAM_END;
+               exit (0);
+       } else if (child != 0) {
+               /*
+                * parent - wait for child to finish, then cleanup
+                * session
+                */
+               wait (NULL);
+               PAM_END;
+               exit (0);
+       }
+       /* child */
+#endif
+
+       /* If we were init, we need to start a new session */
+       if (getppid() == 1) {
+               setsid();
+               if (ioctl(0, TIOCSCTTY, 1) != 0) {
+                       fprintf (stderr, _("TIOCSCTTY failed on %s"), tty);
+               }
+       }
+
+       /*
+        * The utmp entry needs to be updated to indicate the new status
+        * of the session, the new PID and SID.
+        */
+       update_utmp (username, tty, hostname, utent);
+
+       /* The pwd and spwd entries for the user have been copied.
+        *
+        * Close all the files so that unauthorized access won't occur.
+        */
+       endpwent ();            /* stop access to password file */
+       endgrent ();            /* stop access to group file */
+       endspent ();            /* stop access to shadow passwd file */
+#ifdef SHADOWGRP
+       endsgent ();            /* stop access to shadow group file */
+#endif
+
+       /* Drop root privileges */
+#ifndef USE_PAM
+       if (setup_uid_gid (pwd, is_console))
+#else
+       /* The group privileges were already dropped.
+        * See setup_groups() above.
+        */
+       if (change_uid (pwd))
+#endif
+       {
+               exit (1);
+       }
+
+       setup_env (pwd);        /* set env vars, cd to the home dir */
+
+#ifdef USE_PAM
+       {
+               const char *const *env;
+
+               env = (const char *const *) pam_getenvlist (pamh);
+               while ((NULL != env) && (NULL != *env)) {
+                       addenv (*env, NULL);
+                       env++;
+               }
+       }
+#endif
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       if (!hushed (username)) {
+               addenv ("HUSHLOGIN=FALSE", NULL);
+               /*
+                * pam_unix, pam_mail and pam_lastlog should take care of
+                * this
+                */
+#ifndef USE_PAM
+               motd ();        /* print the message of the day */
+               if (   getdef_bool ("FAILLOG_ENAB")
+                   && (0 != faillog.fail_cnt)) {
+                       failprint (&faillog);
+                       /* Reset the lockout times if logged in */
+                       if (   (0 != faillog.fail_max)
+                           && (faillog.fail_cnt >= faillog.fail_max)) {
+                               (void) puts (_("Warning: login re-enabled after temporary lockout."));
+                               SYSLOG ((LOG_WARN,
+                                        "login '%s' re-enabled after temporary lockout (%d failures)",
+                                        username, (int) faillog.fail_cnt));
+                       }
+               }
+               if (   getdef_bool ("LASTLOG_ENAB")
+                   && (ll.ll_time != 0)) {
+                       time_t ll_time = ll.ll_time;
+
+#ifdef HAVE_STRFTIME
+                       (void) strftime (ptime, sizeof (ptime),
+                                        "%a %b %e %H:%M:%S %z %Y",
+                                        localtime (&ll_time));
+                       printf (_("Last login: %s on %s"),
+                               ptime, ll.ll_line);
+#else
+                       printf (_("Last login: %.19s on %s"),
+                               ctime (&ll_time), ll.ll_line);
+#endif
+#ifdef HAVE_LL_HOST            /* __linux__ || SUN4 */
+                       if ('\0' != ll.ll_host[0]) {
+                               printf (_(" from %.*s"),
+                                       (int) sizeof ll.ll_host, ll.ll_host);
+                       }
+#endif
+                       printf (".\n");
+               }
+               agecheck (spwd);
+
+               mailcheck ();   /* report on the status of mail */
+#endif                         /* !USE_PAM */
+       } else {
+               addenv ("HUSHLOGIN=TRUE", NULL);
+       }
+
+       ttytype (tty);
+
+       (void) signal (SIGQUIT, SIG_DFL);       /* default quit signal */
+       (void) signal (SIGTERM, SIG_DFL);       /* default terminate signal */
+       (void) signal (SIGALRM, SIG_DFL);       /* default alarm signal */
+       (void) signal (SIGHUP, SIG_DFL);        /* added this.  --marekm */
+       (void) signal (SIGINT, SIG_DFL);        /* default interrupt signal */
+
+       if (0 == pwd->pw_uid) {
+               SYSLOG ((LOG_NOTICE, "ROOT LOGIN %s", fromhost));
+       } else if (getdef_bool ("LOG_OK_LOGINS")) {
+               SYSLOG ((LOG_INFO, "'%s' logged in %s", username, fromhost));
+       }
+       closelog ();
+       tmp = getdef_str ("FAKE_SHELL");
+       if (NULL != tmp) {
+               err = shell (tmp, pwd->pw_shell, newenvp); /* fake shell */
+       } else {
+               /* exec the shell finally */
+               err = shell (pwd->pw_shell, (char *) 0, newenvp);
+       }
+
+       return ((err == ENOENT) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+}
+
diff --git a/src/login_nopam.c b/src/login_nopam.c
new file mode 100644 (file)
index 0000000..b823f22
--- /dev/null
@@ -0,0 +1,336 @@
+/* Taken from logdaemon-5.0, only minimal changes.  --marekm */
+
+/************************************************************************
+* Copyright 1995 by Wietse Venema.  All rights reserved. Individual files
+* may be covered by other copyrights (as noted in the file itself.)
+*
+* This material was originally written and compiled by Wietse Venema at
+* Eindhoven University of Technology, The Netherlands, in 1990, 1991,
+* 1992, 1993, 1994 and 1995.
+*
+* Redistribution and use in source and binary forms are permitted
+* provided that this entire copyright notice is duplicated in all such
+* copies.  
+*
+* This software is provided "as is" and without any expressed or implied
+* warranties, including, without limitation, the implied warranties of
+* merchantibility and fitness for any particular purpose.
+************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifndef USE_PAM
+#ident "$Id: login_nopam.c 2404 2008-09-13 18:03:50Z nekral-guest $"
+
+#include "prototypes.h"
+    /*
+     * This module implements a simple but effective form of login access
+     * control based on login names and on host (or domain) names, internet
+     * addresses (or network numbers), or on terminal line names in case of
+     * non-networked logins. Diagnostics are reported through syslog(3).
+     * 
+     * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
+     */
+#include <sys/types.h>
+#include <stdio.h>
+#include <syslog.h>
+#include <ctype.h>
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#include <grp.h>
+#ifdef PRIMARY_GROUP_MATCH
+#include <pwd.h>
+#endif
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>         /* for inet_ntoa() */
+
+#if !defined(MAXHOSTNAMELEN) || (MAXHOSTNAMELEN < 64)
+#undef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN 256
+#endif
+
+ /* Path name of the access control file. */
+#ifndef        TABLE
+#define TABLE  "/etc/login.access"
+#endif
+
+/* Delimiters for fields and for lists of users, ttys or hosts. */
+static char fs[] = ":";                /* field separator */
+static char sep[] = ", \t";    /* list-element separator */
+
+static bool list_match (char *list, const char *item, bool (*match_fn) (const char *, const char *));
+static bool user_match (const char *tok, const char *string);
+static bool from_match (const char *tok, const char *string);
+static bool string_match (const char *tok, const char *string);
+static const char *resolve_hostname (const char *string);
+
+/* login_access - match username/group and host/tty with access control file */
+int login_access (const char *user, const char *from)
+{
+       FILE *fp;
+       char line[BUFSIZ];
+       char *perm;             /* becomes permission field */
+       char *users;            /* becomes list of login names */
+       char *froms;            /* becomes list of terminals or hosts */
+       bool match = false;
+       int end;
+       int lineno = 0;         /* for diagnostics */
+
+       /*
+        * Process the table one line at a time and stop at the first match.
+        * Blank lines and lines that begin with a '#' character are ignored.
+        * Non-comment lines are broken at the ':' character. All fields are
+        * mandatory. The first field should be a "+" or "-" character. A
+        * non-existing table means no access control.
+        */
+       fp = fopen (TABLE, "r");
+       if (NULL != fp) {
+               while (   !match
+                      && (fgets (line, (int) sizeof (line), fp) == line)) {
+                       lineno++;
+                       end = (int) strlen (line) - 1;
+                       if (line[end] != '\n') {
+                               SYSLOG ((LOG_ERR,
+                                        "%s: line %d: missing newline or line too long",
+                                        TABLE, lineno));
+                               continue;
+                       }
+                       if (line[0] == '#') {
+                               continue;       /* comment line */
+                       }
+                       while (end > 0 && isspace (line[end - 1])) {
+                               end--;
+                       }
+                       line[end] = '\0';       /* strip trailing whitespace */
+                       if (line[0] == '\0') {  /* skip blank lines */
+                               continue;
+                       }
+                       if (   ((perm = strtok (line, fs)) == NULL)
+                           || ((users = strtok ((char *) 0, fs)) == NULL)
+                           || ((froms = strtok ((char *) 0, fs)) == NULL)
+                           || (strtok ((char *) 0, fs) != NULL)) {
+                               SYSLOG ((LOG_ERR,
+                                        "%s: line %d: bad field count",
+                                        TABLE, lineno));
+                               continue;
+                       }
+                       if (perm[0] != '+' && perm[0] != '-') {
+                               SYSLOG ((LOG_ERR,
+                                        "%s: line %d: bad first field",
+                                        TABLE, lineno));
+                               continue;
+                       }
+                       match = (   list_match (froms, from, from_match)
+                                && list_match (users, user, user_match));
+               }
+               (void) fclose (fp);
+       } else if (errno != ENOENT) {
+               int err = errno;
+               SYSLOG ((LOG_ERR, "cannot open %s: %s", TABLE, strerror (err)));
+       }
+       return (!match || (line[0] == '+'))?1:0;
+}
+
+/* list_match - match an item against a list of tokens with exceptions */
+static bool list_match (char *list, const char *item, bool (*match_fn) (const char *, const char*))
+{
+       char *tok;
+       bool match = false;
+
+       /*
+        * Process tokens one at a time. We have exhausted all possible matches
+        * when we reach an "EXCEPT" token or the end of the list. If we do find
+        * a match, look for an "EXCEPT" list and recurse to determine whether
+        * the match is affected by any exceptions.
+        */
+       for (tok = strtok (list, sep); tok != NULL; tok = strtok ((char *) 0, sep)) {
+               if (strcasecmp (tok, "EXCEPT") == 0) {  /* EXCEPT: give up */
+                       break;
+               }
+               match = (*match_fn) (tok, item);
+               if (match) {
+                       break;
+               }
+       }
+
+       /* Process exceptions to matches. */
+       if (match) {
+               while (   ((tok = strtok ((char *) 0, sep)) != NULL)
+                      && (strcasecmp (tok, "EXCEPT") != 0))
+                       /* VOID */ ;
+               if (tok == 0 || !list_match ((char *) 0, item, match_fn)) {
+                       return (match);
+               }
+       }
+       return false;
+}
+
+/* myhostname - figure out local machine name */
+static char *myhostname (void)
+{
+       static char name[MAXHOSTNAMELEN + 1] = "";
+
+       if (name[0] == '\0') {
+               gethostname (name, sizeof (name));
+               name[MAXHOSTNAMELEN] = '\0';
+       }
+       return (name);
+}
+
+#if HAVE_INNETGR
+/* netgroup_match - match group against machine or user */
+static bool
+netgroup_match (const char *group, const char *machine, const char *user)
+{
+       static char *mydomain = (char *)0;
+
+       if (mydomain == (char *)0) {
+               static char domain[MAXHOSTNAMELEN + 1];
+
+               getdomainname (domain, MAXHOSTNAMELEN);
+               mydomain = domain;
+       }
+
+       return (innetgr (group, machine, user, mydomain) != 0);
+}
+#endif
+
+/* user_match - match a username against one token */
+static bool user_match (const char *tok, const char *string)
+{
+       struct group *group;
+
+#ifdef PRIMARY_GROUP_MATCH
+       struct passwd *userinf;
+#endif
+       int i;
+       char *at;
+
+       /*
+        * If a token has the magic value "ALL" the match always succeeds.
+        * Otherwise, return true if the token fully matches the username, or if
+        * the token is a group that contains the username.
+        */
+       at = strchr (tok + 1, '@');
+       if (NULL != at) {       /* split user@host pattern */
+               *at = '\0';
+               return (   user_match (tok, string)
+                       && from_match (at + 1, myhostname ()));
+#if HAVE_INNETGR
+       } else if (tok[0] == '@') {     /* netgroup */
+               return (netgroup_match (tok + 1, (char *) 0, string));
+#endif
+       } else if (string_match (tok, string)) {        /* ALL or exact match */
+               return true;
+       /* local, no need for xgetgrnam */
+       } else if ((group = getgrnam (tok)) != NULL) {  /* try group membership */
+               for (i = 0; NULL != group->gr_mem[i]; i++) {
+                       if (strcasecmp (string, group->gr_mem[i]) == 0) {
+                               return true;
+                       }
+               }
+#ifdef PRIMARY_GROUP_MATCH
+               /*
+                * If the string is an user whose initial GID matches the token,
+                * accept it. May avoid excessively long lines in /etc/group.
+                * Radu-Adrian Feurdean <raf@licj.soroscj.ro>
+                *
+                * XXX - disabled by default for now.  Need to verify that
+                * getpwnam() doesn't have some nasty side effects.  --marekm
+                */
+               /* local, no need for xgetpwnam */
+               userinf = getpwnam (string);
+               if (NULL != userinf) {
+                       if (userinf->pw_gid == group->gr_gid) {
+                               return true;
+                       }
+               }
+#endif
+       }
+       return false;
+}
+
+static const char *resolve_hostname (const char *string)
+{
+       /*
+        * Resolve hostname to numeric IP address, as suggested
+        * by Dave Hagewood <admin@arrowweb.com>.  --marekm
+        */
+       struct hostent *hp;
+
+       hp = gethostbyname (string);
+       if (NULL != hp) {
+               return inet_ntoa (*((struct in_addr *) *(hp->h_addr_list)));
+       }
+
+       SYSLOG ((LOG_ERR, "%s - unknown host", string));
+       return string;
+}
+
+/* from_match - match a host or tty against a list of tokens */
+
+static bool from_match (const char *tok, const char *string)
+{
+       size_t tok_len;
+       size_t str_len;
+
+       /*
+        * If a token has the magic value "ALL" the match always succeeds. Return
+        * true if the token fully matches the string. If the token is a domain
+        * name, return true if it matches the last fields of the string. If the
+        * token has the magic value "LOCAL", return true if the string does not
+        * contain a "." character. If the token is a network number, return true
+        * if it matches the head of the string.
+        */
+#if HAVE_INNETGR
+       if (tok[0] == '@') {    /* netgroup */
+               return (netgroup_match (tok + 1, string, (char *) 0));
+       } else
+#endif
+       if (string_match (tok, string)) {       /* ALL or exact match */
+               return true;
+       } else if (tok[0] == '.') {     /* domain: match last fields */
+               str_len = strlen (string);
+               tok_len = strlen (tok);
+               if (   (str_len > tok_len)
+                   && (strcasecmp (tok, string + str_len - tok_len) == 0)) {
+                       return true;
+               }
+       } else if (strcasecmp (tok, "LOCAL") == 0) {    /* local: no dots */
+               if (strchr (string, '.') == NULL) {
+                       return true;
+               }
+       } else if (   (tok[(tok_len = strlen (tok)) - 1] == '.') /* network */
+                  && (strncmp (tok, resolve_hostname (string), tok_len) == 0)) {
+               return true;
+       }
+       return false;
+}
+
+/* string_match - match a string against one token */
+static bool string_match (const char *tok, const char *string)
+{
+
+       /*
+        * If the token has the magic value "ALL" the match always succeeds.
+        * Otherwise, return true if the token fully matches the string.
+        */
+       if (strcasecmp (tok, "ALL") == 0) {     /* all: always matches */
+               return true;
+       } else if (strcasecmp (tok, string) == 0) {     /* try exact match */
+               return true;
+       }
+       return false;
+}
+
+#else                          /* !USE_PAM */
+extern int errno;              /* warning: ANSI C forbids an empty source file */
+#endif                         /* !USE_PAM */
diff --git a/src/logoutd.c b/src/logoutd.c
new file mode 100644 (file)
index 0000000..c21d3a8
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+ * Copyright (c) 1991 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: logoutd.c 2849 2009-04-30 21:08:49Z nekral-guest $"
+
+#include <fcntl.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include "defines.h"
+#include "prototypes.h"
+/*
+ * Global variables
+ */
+char *Prog;
+
+#ifndef DEFAULT_HUP_MESG
+#define DEFAULT_HUP_MESG _("login time exceeded\n\n")
+#endif
+
+#ifndef HUP_MESG_FILE
+#define HUP_MESG_FILE "/etc/logoutd.mesg"
+#endif
+
+/* local function prototypes */
+#ifdef USE_UTMPX
+static int check_login (const struct utmpx *ut);
+#else                          /* !USE_UTMPX */
+static int check_login (const struct utmp *ut);
+#endif                         /* !USE_UTMPX */
+static void send_mesg_to_tty (int tty_fd);
+
+/*
+ * check_login - check if user (struct utmpx/utmp) allowed to stay logged in
+ */
+#ifdef USE_UTMPX
+static int check_login (const struct utmpx *ut)
+#else                          /* !USE_UTMPX */
+static int check_login (const struct utmp *ut)
+#endif                         /* !USE_UTMPX */
+{
+       char user[sizeof (ut->ut_user) + 1];
+       time_t now;
+
+       /*
+        * ut_user may not have the terminating NUL.
+        */
+       strncpy (user, ut->ut_user, sizeof (ut->ut_user));
+       user[sizeof (ut->ut_user)] = '\0';
+
+       (void) time (&now);
+
+       /*
+        * Check if they are allowed to be logged in right now.
+        */
+       if (!isttytime (user, ut->ut_line, now)) {
+               return 0;
+       }
+       return 1;
+}
+
+
+static void send_mesg_to_tty (int tty_fd)
+{
+       TERMIO oldt, newt;
+       FILE *mesg_file, *tty_file;
+       int c;
+       bool is_tty;
+
+       tty_file = fdopen (tty_fd, "w");
+       if (NULL == tty_file) {
+               return;
+       }
+
+       is_tty = (GTTY (tty_fd, &oldt) == 0);
+       if (is_tty) {
+               /* Suggested by Ivan Nejgebauar <ian@unsux.ns.ac.yu>:
+                  set OPOST before writing the message. */
+               newt = oldt;
+               newt.c_oflag |= OPOST;
+               STTY (tty_fd, &newt);
+       }
+
+       mesg_file = fopen (HUP_MESG_FILE, "r");
+       if (NULL != mesg_file) {
+               while ((c = getc (mesg_file)) != EOF) {
+                       if (c == '\n') {
+                               putc ('\r', tty_file);
+                       }
+                       putc (c, tty_file);
+               }
+               fclose (mesg_file);
+       } else {
+               fputs (DEFAULT_HUP_MESG, tty_file);
+       }
+       fflush (tty_file);
+       fclose (tty_file);
+
+       if (is_tty) {
+               STTY (tty_fd, &oldt);
+       }
+}
+
+
+/*
+ * logoutd - logout daemon to enforce /etc/porttime file policy
+ *
+ *     logoutd is started at system boot time and enforces the login
+ *     time and port restrictions specified in /etc/porttime. The
+ *     utmpx/utmp file is periodically scanned and offending users are logged
+ *     off from the system.
+ */
+int main (int argc, char **argv)
+{
+       int i;
+       int status;
+       pid_t pid;
+
+#ifdef USE_UTMPX
+       struct utmpx *ut;
+#else                          /* !USE_UTMPX */
+       struct utmp *ut;
+#endif                         /* !USE_UTMPX */
+       char user[sizeof (ut->ut_user) + 1];    /* terminating NUL */
+       char tty_name[sizeof (ut->ut_line) + 6];        /* /dev/ + NUL */
+       int tty_fd;
+
+       if (1 != argc) {
+               (void) fputs (_("Usage: logoutd\n"), stderr);
+       }
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+#ifndef DEBUG
+       for (i = 0; close (i) == 0; i++);
+
+       setpgrp ();
+
+       /*
+        * Put this process in the background.
+        */
+       pid = fork ();
+       if (pid > 0) {
+               /* parent */
+               exit (EXIT_SUCCESS);
+       } else if (pid < 0) {
+               /* error */
+               perror ("fork");
+               exit (EXIT_FAILURE);
+       }
+#endif                         /* !DEBUG */
+
+       /*
+        * Start syslogging everything
+        */
+       Prog = Basename (argv[0]);
+
+       OPENLOG ("logoutd");
+
+       /*
+        * Scan the utmpx/utmp file once per minute looking for users that
+        * are not supposed to still be logged in.
+        */
+       while (true) {
+
+               /* 
+                * Attempt to re-open the utmpx/utmp file. The file is only
+                * open while it is being used.
+                */
+#ifdef USE_UTMPX
+               setutxent ();
+#else                          /* !USE_UTMPX */
+               setutent ();
+#endif                         /* !USE_UTMPX */
+
+               /*
+                * Read all of the entries in the utmpx/utmp file. The entries
+                * for login sessions will be checked to see if the user
+                * is permitted to be signed on at this time.
+                */
+#ifdef USE_UTMPX
+               while ((ut = getutxent ()) != NULL)
+#else                          /* !USE_UTMPX */
+               while ((ut = getutent ()) != NULL)
+#endif                         /* !USE_UTMPX */
+               {
+                       if (ut->ut_type != USER_PROCESS) {
+                               continue;
+                       }
+                       if (ut->ut_user[0] == '\0') {
+                               continue;
+                       }
+                       if (check_login (ut)) {
+                               continue;
+                       }
+
+                       /*
+                        * Put the rest of this in a child process. This
+                        * keeps the scan from waiting on other ports to die.
+                        */
+
+                       pid = fork ();
+                       if (pid > 0) {
+                               /* parent */
+                               continue;
+                       } else if (pid < 0) {
+                               /* failed - give up until the next scan */
+                               break;
+                       }
+                       /* child */
+
+                       if (strncmp (ut->ut_line, "/dev/", 5) != 0) {
+                               strcpy (tty_name, "/dev/");
+                       } else {
+                               tty_name[0] = '\0';
+                       }
+
+                       strcat (tty_name, ut->ut_line);
+#ifndef O_NOCTTY
+#define O_NOCTTY 0
+#endif
+                       tty_fd =
+                           open (tty_name, O_WRONLY | O_NDELAY | O_NOCTTY);
+                       if (tty_fd != -1) {
+                               send_mesg_to_tty (tty_fd);
+                               close (tty_fd);
+                               sleep (10);
+                       }
+
+                       if (ut->ut_pid > 1) {
+                               kill (-ut->ut_pid, SIGHUP);
+                               sleep (10);
+                               kill (-ut->ut_pid, SIGKILL);
+                       }
+
+                       strncpy (user, ut->ut_user, sizeof (user) - 1);
+                       user[sizeof (user) - 1] = '\0';
+
+                       SYSLOG ((LOG_NOTICE,
+                                "logged off user '%s' on '%s'", user,
+                                tty_name));
+
+                       /*
+                        * This child has done all it can, drop dead.
+                        */
+                       exit (EXIT_SUCCESS);
+               }
+
+#ifdef USE_UTMPX
+               endutxent ();
+#else                          /* !USE_UTMPX */
+               endutent ();
+#endif                         /* !USE_UTMPX */
+
+#ifndef DEBUG
+               sleep (60);
+#endif
+               /*
+                * Reap any dead babies ...
+                */
+               while (wait (&status) != -1);
+       }
+
+       return EXIT_FAILURE;
+}
+
diff --git a/src/newgrp.c b/src/newgrp.c
new file mode 100644 (file)
index 0000000..0ef49a0
--- /dev/null
@@ -0,0 +1,836 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: newgrp.c 3034 2009-07-22 13:30:06Z nekral-guest $"
+
+#include <errno.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <assert.h>
+#include "defines.h"
+#include "getdef.h"
+#include "prototypes.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+char *Prog;
+
+extern char **newenvp;
+extern char **environ;
+
+#ifdef HAVE_SETGROUPS
+static int ngroups;
+static /*@null@*/ /*@only@*/GETGROUPS_T *grouplist;
+#endif
+
+static bool is_newgrp;
+
+#ifdef WITH_AUDIT
+static char audit_buf[80];
+#endif
+
+/* local function prototypes */
+static void usage (void);
+static void check_perms (const struct group *grp,
+                         struct passwd *pwd,
+                         const char *groupname);
+static void syslog_sg (const char *name, const char *group);
+
+/*
+ * usage - print command usage message
+ */
+static void usage (void)
+{
+       if (is_newgrp) {
+               (void) fputs (_("Usage: newgrp [-] [group]\n"), stderr);
+       } else {
+               (void) fputs (_("Usage: sg group [[-c] command]\n"), stderr);
+       }
+}
+
+/*
+ * find_matching_group - search all groups of a given group id for
+ *                       membership of a given username
+ */
+static /*@null@*/struct group *find_matching_group (const char *name, gid_t gid)
+{
+       struct group *gr;
+       char **look;
+       bool notfound = true;
+
+       setgrent ();
+       while ((gr = getgrent ()) != NULL) {
+               if (gr->gr_gid != gid) {
+                       continue;
+               }
+
+               /*
+                * A group with matching GID was found.
+                * Test for membership of 'name'.
+                */
+               look = gr->gr_mem;
+               while ((NULL != *look) && notfound) {
+                       notfound = (strcmp (*look, name) != 0);
+                       look++;
+               }
+               if (!notfound) {
+                       break;
+               }
+       }
+       endgrent ();
+       return gr;
+}
+
+/*
+ * check_perms - check if the user is allowed to switch to this group
+ *
+ *     If needed, the user will be authenticated.
+ *
+ *     It will not return if the user could not be authenticated.
+ */
+static void check_perms (const struct group *grp,
+                         struct passwd *pwd,
+                         const char *groupname)
+{
+       bool needspasswd = false;
+       struct spwd *spwd;
+       char *cp;
+       const char *cpasswd;
+
+       /*
+        * see if she is a member of this group (i.e. in the list of
+        * members of the group, or if the group is her primary group).
+        *
+        * If she isn't a member, she needs to provide the group password.
+        * If there is no group password, she will be denied access
+        * anyway.
+        *
+        */
+       if (   (grp->gr_gid != pwd->pw_gid)
+           && !is_on_list (grp->gr_mem, pwd->pw_name)) {
+               needspasswd = true;
+       }
+
+       /*
+        * If she does not have either a shadowed password, or a regular
+        * password, and the group has a password, she needs to give the
+        * group password.
+        */
+       spwd = xgetspnam (pwd->pw_name);
+       if (NULL != spwd) {
+               pwd->pw_passwd = spwd->sp_pwdp;
+       }
+
+       if ((pwd->pw_passwd[0] == '\0') && (grp->gr_passwd[0] != '\0')) {
+               needspasswd = true;
+       }
+
+       /*
+        * Now I see about letting her into the group she requested. If she
+        * is the root user, I'll let her in without having to prompt for
+        * the password. Otherwise I ask for a password if she flunked one
+        * of the tests above.
+        */
+       if ((getuid () != 0) && needspasswd) {
+               /*
+                * get the password from her, and set the salt for
+                * the decryption from the group file.
+                */
+               cp = getpass (_("Password: "));
+               if (NULL == cp) {
+                       goto failure;
+               }
+
+               /*
+                * encrypt the key she gave us using the salt from the
+                * password in the group file. The result of this encryption
+                * must match the previously encrypted value in the file.
+                */
+               cpasswd = pw_encrypt (cp, grp->gr_passwd);
+               strzero (cp);
+
+               if (grp->gr_passwd[0] == '\0' ||
+                   strcmp (cpasswd, grp->gr_passwd) != 0) {
+#ifdef WITH_AUDIT
+                       snprintf (audit_buf, sizeof(audit_buf),
+                                 "authentication new-gid=%lu",
+                                 (unsigned long) grp->gr_gid);
+                       audit_logger (AUDIT_GRP_AUTH, Prog,
+                                     audit_buf, NULL,
+                                     (unsigned int) getuid (), 0);
+#endif
+                       SYSLOG ((LOG_INFO,
+                                "Invalid password for group '%s' from '%s'",
+                                groupname, pwd->pw_name));
+                       (void) sleep (1);
+                       (void) fputs (_("Invalid password.\n"), stderr);
+                       goto failure;
+               }
+#ifdef WITH_AUDIT
+               snprintf (audit_buf, sizeof(audit_buf),
+                         "authentication new-gid=%lu",
+                         (unsigned long) grp->gr_gid);
+               audit_logger (AUDIT_GRP_AUTH, Prog,
+                             audit_buf, NULL,
+                             (unsigned int) getuid (), 1);
+#endif
+       }
+
+       return;
+
+failure:
+       /* The closelog is probably unnecessary, but it does no
+        * harm.  -- JWP
+        */
+       closelog ();
+#ifdef WITH_AUDIT
+       if (groupname) {
+               snprintf (audit_buf, sizeof(audit_buf),
+                         "changing new-group=%s", groupname);
+               audit_logger (AUDIT_CHGRP_ID, Prog,
+                             audit_buf, NULL,
+                             (unsigned int) getuid (), 0);
+       } else {
+               audit_logger (AUDIT_CHGRP_ID, Prog,
+                             "changing", NULL,
+                             (unsigned int) getuid (), 0);
+       }
+#endif
+       exit (EXIT_FAILURE);
+}
+
+#ifdef USE_SYSLOG
+/*
+ * syslog_sg - log the change of group to syslog
+ *
+ *     The loggout will also be logged when the user will quit the
+ *     sg/newgrp session.
+ */
+static void syslog_sg (const char *name, const char *group)
+{
+       const char *loginname = getlogin ();
+       const char *tty = ttyname (0);
+
+       if (loginname != NULL) {
+               loginname = xstrdup (loginname);
+       }
+       if (tty != NULL) {
+               tty = xstrdup (tty);
+       }
+
+       if (loginname == NULL) {
+               loginname = "???";
+       }
+       if (tty == NULL) {
+               tty = "???";
+       } else if (strncmp (tty, "/dev/", 5) == 0) {
+               tty += 5;
+       }
+       SYSLOG ((LOG_INFO,
+                "user '%s' (login '%s' on %s) switched to group '%s'",
+                name, loginname, tty, group));
+#ifdef USE_PAM
+       /*
+        * We want to fork and exec the new shell in the child, leaving the
+        * parent waiting to log the session close.
+        *
+        * The parent must ignore signals generated from the console
+        * (SIGINT, SIGQUIT, SIGHUP) which might make the parent terminate
+        * before its child. When bash is exec'ed as the subshell, it
+        * generates a new process group id for itself, and consequently
+        * only SIGHUP, which is sent to all process groups in the session,
+        * can reach the parent. However, since arbitrary programs can be
+        * specified as login shells, there is no such guarantee in general.
+        * For the same reason, we must also ignore stop signals generated
+        * from the console (SIGTSTP, SIGTTIN, and SIGTTOU) in order to
+        * avoid any possibility of the parent being stopped when it
+        * receives SIGCHLD from the terminating subshell.  -- JWP
+        */
+       {
+               pid_t child, pid;
+
+               /* Ignore these signals. The signal handlers will later be
+                * restored to the default handlers. */
+               (void) signal (SIGINT, SIG_IGN);
+               (void) signal (SIGQUIT, SIG_IGN);
+               (void) signal (SIGHUP, SIG_IGN);
+               (void) signal (SIGTSTP, SIG_IGN);
+               (void) signal (SIGTTIN, SIG_IGN);
+               (void) signal (SIGTTOU, SIG_IGN);
+               child = fork ();
+               if ((pid_t)-1 == child) {
+                       /* error in fork() */
+                       fprintf (stderr, _("%s: failure forking: %s\n"),
+                                is_newgrp ? "newgrp" : "sg", strerror (errno));
+#ifdef WITH_AUDIT
+                       if (group) {
+                               snprintf (audit_buf, sizeof(audit_buf),
+                                         "changing new-group=%s", group);
+                               audit_logger (AUDIT_CHGRP_ID, Prog,
+                                             audit_buf, NULL,
+                                             (unsigned int) getuid (), 0);
+                       } else {
+                               audit_logger (AUDIT_CHGRP_ID, Prog,
+                                             "changing", NULL,
+                                             (unsigned int) getuid (), 0);
+                       }
+#endif
+                       exit (EXIT_FAILURE);
+               } else if (child != 0) {
+                       /* parent - wait for child to finish, then log session close */
+                       int cst = 0;
+                       gid_t gid = getgid();
+                       struct group *grp = getgrgid (gid);
+
+                       do {
+                               errno = 0;
+                               pid = waitpid (child, &cst, WUNTRACED);
+                               if ((pid == child) && (WIFSTOPPED (cst) != 0)) {
+                                       /* stop when child stops */
+                                       kill (getpid (), WSTOPSIG(cst));
+                                       /* wake child when resumed */
+                                       kill (child, SIGCONT);
+                               }
+                       } while (   ((pid == child) && (WIFSTOPPED (cst) != 0))
+                                || ((pid != child) && (errno == EINTR)));
+                       /* local, no need for xgetgrgid */
+                       if (NULL != grp) {
+                               SYSLOG ((LOG_INFO,
+                                        "user '%s' (login '%s' on %s) returned to group '%s'",
+                                        name, loginname, tty, grp->gr_name));
+                       } else {
+                               SYSLOG ((LOG_INFO,
+                                        "user '%s' (login '%s' on %s) returned to group '%lu'",
+                                        name, loginname, tty,
+                                        (unsigned long) gid));
+                               /* Either the user's passwd entry has a
+                                * GID that does not match with any group,
+                                * or the group was deleted while the user
+                                * was in a newgrp session.*/
+                               SYSLOG ((LOG_WARN,
+                                        "unknown GID '%lu' used by user '%s'",
+                                        (unsigned long) gid, name));
+                       }
+                       closelog ();
+                       exit ((0 != WIFEXITED (cst)) ? WEXITSTATUS (cst)
+                                                    : WTERMSIG (cst) + 128);
+               }
+
+               /* child - restore signals to their default state */
+               (void) signal (SIGINT, SIG_DFL);
+               (void) signal (SIGQUIT, SIG_DFL);
+               (void) signal (SIGHUP, SIG_DFL);
+               (void) signal (SIGTSTP, SIG_DFL);
+               (void) signal (SIGTTIN, SIG_DFL);
+               (void) signal (SIGTTOU, SIG_DFL);
+       }
+#endif                         /* USE_PAM */
+}
+#endif                         /* USE_SYSLOG */
+
+/*
+ * newgrp - change the invokers current real and effective group id
+ */
+int main (int argc, char **argv)
+{
+       bool initflag = false;
+       int i;
+       bool cflag = false;
+       int err = 0;
+       gid_t gid;
+       char *cp;
+       const char *name, *prog;
+       char *group = NULL;
+       char *command = NULL;
+       char **envp = environ;
+       struct passwd *pwd;
+       /*@null@*/struct group *grp;
+
+#ifdef SHADOWGRP
+       struct sgrp *sgrp;
+#endif
+
+#ifdef WITH_AUDIT
+       audit_help_open ();
+#endif
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       /*
+        * Save my name for error messages and save my real gid incase of
+        * errors. If there is an error i have to exec a new login shell for
+        * the user since her old shell won't have fork'd to create the
+        * process. Skip over the program name to the next command line
+        * argument.
+        *
+        * This historical comment, and the code itself, suggest that the
+        * behavior of the system/shell on which it was written differed
+        * significantly from the one I am using. If this process was
+        * started from a shell (including the login shell), it was fork'ed
+        * and exec'ed as a child by that shell. In order to get the user
+        * back to that shell, it is only necessary to exit from this
+        * process which terminates the child of the fork. The parent shell,
+        * which is blocked waiting for a signal, will then receive a
+        * SIGCHLD and will continue; any changes made to the process
+        * persona or the environment after the fork never occurred in the
+        * parent process.
+        *
+        * Bottom line: we want to save the name and real gid for messages,
+        * but we do not need to restore the previous process persona and we
+        * don't need to re-exec anything.  -- JWP
+        */
+       Prog = Basename (argv[0]);
+       is_newgrp = (strcmp (Prog, "newgrp") == 0);
+       OPENLOG (is_newgrp ? "newgrp" : "sg");
+       gid = getgid ();
+       argc--;
+       argv++;
+
+       initenv ();
+
+       pwd = get_my_pwent ();
+       if (NULL == pwd) {
+               fprintf (stderr, _("%s: Cannot determine your user name.\n"),
+                        Prog);
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_CHGRP_ID, Prog,
+                             "changing", NULL,
+                             (unsigned int) getuid (), 0);
+#endif
+               SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+                        (unsigned long) getuid ()));
+               closelog ();
+               exit (EXIT_FAILURE);
+       }
+       name = pwd->pw_name;
+
+       /*
+        * Parse the command line. There are two accepted flags. The first
+        * is "-", which for newgrp means to re-create the entire
+        * environment as though a login had been performed, and "-c", which
+        * for sg causes a command string to be executed.
+        *
+        * The next argument, if present, must be the new group name. Any
+        * remaining remaining arguments will be used to execute a command
+        * as the named group. If the group name isn't present, I just use
+        * the login group ID of the current user.
+        *
+        * The valid syntax are
+        *      newgrp [-] [groupid]
+        *      newgrp [-l] [groupid]
+        *      sg [-]
+        *      sg [-] groupid [[-c command]
+        */
+       if (   (argc > 0)
+           && (   (strcmp (argv[0], "-")  == 0)
+               || (strcmp (argv[0], "-l") == 0))) {
+               argc--;
+               argv++;
+               initflag = true;
+       }
+       if (!is_newgrp) {
+               /* 
+                * Do the command line for everything that is
+                * not "newgrp".
+                */
+               if ((argc > 0) && (argv[0][0] != '-')) {
+                       group = argv[0];
+                       argc--;
+                       argv++;
+               } else {
+                       usage ();
+                       closelog ();
+                       exit (EXIT_FAILURE);
+               }
+               if (argc > 0) {
+
+                       /*
+                        * skip -c if specified so both forms work:
+                        * "sg group -c command" (as in the man page) or
+                        * "sg group command" (as in the usage message).
+                        */
+                       if ((argc > 1) && (strcmp (argv[0], "-c") == 0)) {
+                               command = argv[1];
+                       } else {
+                               command = argv[0];
+                       }
+                       cflag = true;
+               }
+       } else {
+               /*
+                * Do the command line for "newgrp". It's just making sure
+                * there aren't any flags and getting the new group name.
+                */
+               if ((argc > 0) && (argv[0][0] == '-')) {
+                       usage ();
+                       goto failure;
+               } else if (argv[0] != (char *) 0) {
+                       group = argv[0];
+               } else {
+                       /*
+                        * get the group file entry for her login group id. 
+                        * the entry must exist, simply to be annoying.
+                        *
+                        * Perhaps in the past, but the default behavior now depends on the
+                        * group entry, so it had better exist.  -- JWP
+                        */
+                       grp = xgetgrgid (pwd->pw_gid);
+                       if (NULL == grp) {
+                               fprintf (stderr,
+                                        _("%s: GID '%lu' does not exist\n"),
+                                        Prog, (unsigned long) pwd->pw_gid);
+                               SYSLOG ((LOG_CRIT, "GID '%lu' does not exist",
+                                       (unsigned long) pwd->pw_gid));
+                               goto failure;
+                       } else {
+                               group = grp->gr_name;
+                       }
+               }
+       }
+
+#ifdef HAVE_SETGROUPS
+       /*
+        * get the current users groupset. The new group will be added to
+        * the concurrent groupset if there is room, otherwise you get a
+        * nasty message but at least your real and effective group id's are
+        * set.
+        */
+       /* don't use getgroups(0, 0) - it doesn't work on some systems */
+       i = 16;
+       for (;;) {
+               grouplist = (GETGROUPS_T *) xmalloc (i * sizeof (GETGROUPS_T));
+               ngroups = getgroups (i, grouplist);
+               if (i > ngroups && !(ngroups == -1 && errno == EINVAL)) {
+                       break;
+               }
+               /* not enough room, so try allocating a larger buffer */
+               free (grouplist);
+               i *= 2;
+       }
+       if (ngroups < 0) {
+               perror ("getgroups");
+#ifdef WITH_AUDIT
+               if (group) {
+                       snprintf (audit_buf, sizeof(audit_buf),
+                                 "changing new-group=%s", group);
+                       audit_logger (AUDIT_CHGRP_ID, Prog,
+                                     audit_buf, NULL,
+                                     (unsigned int) getuid (), 0);
+               } else {
+                       audit_logger (AUDIT_CHGRP_ID, Prog,
+                                     "changing", NULL,
+                                     (unsigned int) getuid (), 0);
+               }
+#endif
+               exit (EXIT_FAILURE);
+       }
+#endif                         /* HAVE_SETGROUPS */
+
+       /*
+        * now we put her in the new group. The password file entry for her
+        * current user id has been gotten. If there was no optional group
+        * argument she will have her real and effective group id set to the
+        * set to the value from her password file entry.  
+        *
+        * If run as newgrp, or as sg with no command, this process exec's
+        * an interactive subshell with the effective GID of the new group. 
+        * If run as sg with a command, that command is exec'ed in this
+        * subshell. When this process terminates, either because the user
+        * exits, or the command completes, the parent of this process
+        * resumes with the current GID.
+        *
+        * If a group is explicitly specified on the command line, the
+        * interactive shell or command is run with that effective GID. 
+        * Access will be denied if no entry for that group can be found in
+        * /etc/group. If the current user name appears in the members list
+        * for that group, access will be granted immediately; if not, the
+        * user will be challenged for that group's password. If the
+        * password response is incorrect, if the specified group does not
+        * have a password, or if that group has been locked by gpasswd -R,
+        * access will be denied. This is true even if the group specified
+        * has the user's login GID (as shown in /etc/passwd). If no group
+        * is explicitly specified on the command line, the effect is
+        * exactly the same as if a group name matching the user's login GID
+        * had been explicitly specified. Root, however, is never
+        * challenged for passwords, and is always allowed access.
+        *
+        * The previous behavior was to allow access to the login group if
+        * no explicit group was specified, irrespective of the group
+        * control file(s). This behavior is usually not desirable. A user
+        * wishing to return to the login group has only to exit back to the
+        * login shell. Generating yet more shell levels in order to
+        * provide a convenient "return" to the default group has the
+        * undesirable side effects of confusing the user, scrambling the
+        * history file, and consuming system resources. The default now is
+        * to lock out such behavior. A sys admin can allow it by explicitly
+        * including the user's name in the member list of the user's login
+        * group.  -- JWP
+        */
+       grp = getgrnam (group); /* local, no need for xgetgrnam */
+       if (NULL == grp) {
+               fprintf (stderr, _("%s: group '%s' does not exist\n"), Prog, group);
+               goto failure;
+       }
+
+       /*
+        * For splitted groups (due to limitations of NIS), check all 
+        * groups of the same GID like the requested group for
+        * membership of the current user.
+        */
+       grp = find_matching_group (name, grp->gr_gid);
+       if (NULL == grp) {
+               /*
+                * No matching group found. As we already know that
+                * the group exists, this happens only in the case
+                * of a requested group where the user is not member.
+                *
+                * Re-read the group entry for further processing.
+                */
+               grp = xgetgrnam (group);
+               assert (NULL != grp);
+       }
+#ifdef SHADOWGRP
+       sgrp = getsgnam (group);
+       if (NULL != sgrp) {
+               grp->gr_passwd = sgrp->sg_passwd;
+               grp->gr_mem = sgrp->sg_mem;
+       }
+#endif
+
+       /*
+        * Check if the user is allowed to access this group.
+        */
+       check_perms (grp, pwd, group);
+
+       /*
+        * all successful validations pass through this point. The group id
+        * will be set, and the group added to the concurrent groupset.
+        */
+#ifdef USE_SYSLOG
+       if (getdef_bool ("SYSLOG_SG_ENAB")) {
+               syslog_sg (name, group);
+       }
+#endif                         /* USE_SYSLOG */
+
+       gid = grp->gr_gid;
+
+#ifdef HAVE_SETGROUPS
+       /*
+        * I am going to try to add her new group id to her concurrent group
+        * set. If the group id is already present i'll just skip this part. 
+        * If the group doesn't fit, i'll complain loudly and skip this
+        * part.
+        */
+       for (i = 0; i < ngroups; i++) {
+               if (gid == grouplist[i]) {
+                       break;
+               }
+       }
+       if (i == ngroups) {
+               if (ngroups >= sysconf (_SC_NGROUPS_MAX)) {
+                       (void) fputs (_("too many groups\n"), stderr);
+               } else {
+                       grouplist[ngroups++] = gid;
+                       if (setgroups (ngroups, grouplist) != 0) {
+                               perror ("setgroups");
+                       }
+               }
+       }
+#endif
+
+       /*
+        * Close all files before changing the user/group IDs.
+        *
+        * The needed structure should have been copied before, or
+        * permission to read the database will be required.
+        */
+       endspent ();
+#ifdef SHADOWGRP
+       endsgent ();
+#endif
+       endpwent ();
+       endgrent ();
+
+       /*
+        * Set the effective GID to the new group id and the effective UID
+        * to the real UID. For root, this also sets the real GID to the
+        * new group id.
+        */
+       if (setgid (gid) != 0) {
+               perror ("setgid");
+#ifdef WITH_AUDIT
+               snprintf (audit_buf, sizeof(audit_buf),
+                         "changing new-gid=%lu", (unsigned long) gid);
+               audit_logger (AUDIT_CHGRP_ID, Prog,
+                             audit_buf, NULL,
+                             (unsigned int) getuid (), 0);
+#endif
+               exit (EXIT_FAILURE);
+       }
+
+       if (setuid (getuid ()) != 0) {
+               perror ("setuid");
+#ifdef WITH_AUDIT
+               snprintf (audit_buf, sizeof(audit_buf),
+                         "changing new-gid=%lu", (unsigned long) gid);
+               audit_logger (AUDIT_CHGRP_ID, Prog,
+                             audit_buf, NULL,
+                             (unsigned int) getuid (), 0);
+#endif
+               exit (EXIT_FAILURE);
+       }
+
+       /*
+        * See if the "-c" flag was used. If it was, i just create a shell
+        * command for her using the argument that followed the "-c" flag.
+        */
+       if (cflag) {
+               closelog ();
+               execl (SHELL, "sh", "-c", command, (char *) 0);
+#ifdef WITH_AUDIT
+               snprintf (audit_buf, sizeof(audit_buf),
+                         "changing new-gid=%lu", (unsigned long) gid);
+               audit_logger (AUDIT_CHGRP_ID, Prog,
+                             audit_buf, NULL,
+                             (unsigned int) getuid (), 0);
+#endif
+               perror (SHELL);
+               exit ((errno == ENOENT) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+       }
+
+       /*
+        * I have to get the pathname of her login shell. As a favor, i'll
+        * try her environment for a $SHELL value first, and then try the
+        * password file entry. Obviously this shouldn't be in the
+        * restricted command directory since it could be used to leave the
+        * restricted environment.
+        *
+        * Note that the following assumes this user's entry in /etc/passwd
+        * does not have a chroot * prefix. If it does, the * will be copied
+        * verbatim into the exec path. This is probably not an issue
+        * because if this user is operating in a chroot jail, her entry in
+        * the version of /etc/passwd that is accessible here should
+        * probably never have a chroot shell entry (but entries for other
+        * users might). If I have missed something, and this causes you a
+        * problem, try using $SHELL as a workaround; also please notify me
+        * at jparmele@wildbear.com -- JWP
+        */
+       cp = getenv ("SHELL");
+       if (!initflag && (NULL != cp)) {
+               prog = cp;
+       } else if ((NULL != pwd->pw_shell) && ('\0' != pwd->pw_shell[0])) {
+               prog = pwd->pw_shell;
+       } else {
+               prog = SHELL;
+       }
+
+       /*
+        * Now I try to find the basename of the login shell. This will
+        * become argv[0] of the spawned command.
+        */
+       cp = Basename ((char *) prog);
+
+       /*
+        * Switch back to her home directory if i am doing login
+        * initialization.
+        */
+       if (initflag) {
+               if (chdir (pwd->pw_dir) != 0) {
+                       perror ("chdir");
+               }
+
+               while (NULL != *envp) {
+                       if (strncmp (*envp, "PATH=", 5) == 0 ||
+                           strncmp (*envp, "HOME=", 5) == 0 ||
+                           strncmp (*envp, "SHELL=", 6) == 0 ||
+                           strncmp (*envp, "TERM=", 5) == 0)
+                               addenv (*envp, NULL);
+
+                       envp++;
+               }
+       } else {
+               while (NULL != *envp) {
+                       addenv (*envp, NULL);
+                       envp++;
+               }
+       }
+
+#ifdef WITH_AUDIT
+       snprintf (audit_buf, sizeof(audit_buf), "changing new-gid=%lu",
+                 (unsigned long) gid);
+       audit_logger (AUDIT_CHGRP_ID, Prog,
+                     audit_buf, NULL,
+                     (unsigned int) getuid (), 1);
+#endif
+       /*
+        * Exec the login shell and go away. We are trying to get back to
+        * the previous environment which should be the user's login shell.
+        */
+       err = shell (prog, initflag ? (char *) 0 : cp, newenvp);
+       exit ((err == ENOENT) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+       /* @notreached@ */
+      failure:
+
+       /*
+        * The previous code, when run as newgrp, re-exec'ed the shell in
+        * the current process with the original gid on error conditions. 
+        * See the comment above. This historical behavior now has the
+        * effect of creating unlogged extraneous shell layers when the
+        * command line has an error or there is an authentication failure.
+        * We now just want to exit with error status back to the parent
+        * process. The closelog is probably unnecessary, but it does no
+        * harm.  -- JWP
+        */
+       closelog ();
+#ifdef WITH_AUDIT
+       if (NULL != group) {
+               snprintf (audit_buf, sizeof(audit_buf),
+                         "changing new-group=%s", group);
+               audit_logger (AUDIT_CHGRP_ID, Prog, 
+                             audit_buf, NULL,
+                             (unsigned int) getuid (), 0);
+       } else {
+               audit_logger (AUDIT_CHGRP_ID, Prog,
+                             "changing", NULL,
+                             (unsigned int) getuid (), 0);
+       }
+#endif
+       exit (EXIT_FAILURE);
+}
+
diff --git a/src/newusers.c b/src/newusers.c
new file mode 100644 (file)
index 0000000..0944515
--- /dev/null
@@ -0,0 +1,1062 @@
+/*
+ * Copyright (c) 1990 - 1993, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ *     newusers - create users from a batch file
+ *
+ *     newusers creates a collection of entries in /etc/passwd
+ *     and related files by reading a passwd-format file and
+ *     adding entries in the related directories.
+ */
+
+#include <config.h>
+
+#ident "$Id: newusers.c 2892 2009-05-10 13:49:03Z nekral-guest $"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <pwd.h>
+#include <grp.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <ctype.h>
+#include <errno.h>
+#include <string.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+#include "prototypes.h"
+#include "defines.h"
+#include "getdef.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "pwio.h"
+#include "sgroupio.h"
+#include "shadowio.h"
+#include "chkname.h"
+
+/*
+ * Global variables
+ */
+char *Prog;
+
+static bool rflg = false;      /* create a system account */
+#ifndef USE_PAM
+static bool cflg = false;
+static char *crypt_method = NULL;
+#ifdef USE_SHA_CRYPT
+static bool sflg = false;
+static long sha_rounds = 5000;
+#endif                         /* USE_SHA_CRYPT */
+#endif                         /* !USE_PAM */
+
+static bool is_shadow;
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+static bool sgr_locked = false;
+#endif
+static bool pw_locked = false;
+static bool gr_locked = false;
+static bool spw_locked = false;
+
+/* local function prototypes */
+static void usage (void);
+static void fail_exit (int);
+static int add_group (const char *, const char *, gid_t *, gid_t);
+static int get_user_id (const char *, uid_t *);
+static int add_user (const char *, uid_t, gid_t);
+#ifndef USE_PAM
+static void update_passwd (struct passwd *, const char *);
+#endif                         /* !USE_PAM */
+static int add_passwd (struct passwd *, const char *);
+static void process_flags (int argc, char **argv);
+static void check_flags (void);
+static void check_perms (void);
+static void open_files (void);
+static void close_files (void);
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (void)
+{
+       (void) fprintf (stderr,
+                       _("Usage: %s [options]\n"
+                         "\n"
+                         "Options:\n"),
+                       Prog);
+#ifndef USE_PAM
+       (void) fprintf (stderr,
+                       _("  -c, --crypt-method            the crypt method (one of %s)\n"),
+#ifndef USE_SHA_CRYPT
+                       "NONE DES MD5"
+#else                          /* USE_SHA_CRYPT */
+                       "NONE DES MD5 SHA256 SHA512"
+#endif                         /* USE_SHA_CRYPT */
+                      );
+#endif                         /* !USE_PAM */
+       (void) fputs (_("  -h, --help                    display this help message and exit\n"), stderr);
+       (void) fputs (_("  -r, --system                  create system accounts\n"), stderr);
+#ifndef USE_PAM
+#ifdef USE_SHA_CRYPT
+       (void) fputs (_("  -s, --sha-rounds              number of SHA rounds for the SHA*\n"
+                       "                                crypt algorithms\n"),
+                     stderr);
+#endif                         /* USE_SHA_CRYPT */
+#endif                         /* !USE_PAM */
+       (void) fputs ("\n", stderr);
+
+       exit (EXIT_FAILURE);
+}
+
+/*
+ * fail_exit - undo as much as possible
+ */
+static void fail_exit (int code)
+{
+       if (spw_locked) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+       }
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+       if (gr_locked) {
+               if (gr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+                       /* continue */
+               }
+       }
+#ifdef SHADOWGRP
+       if (sgr_locked) {
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                       /* continue */
+               }
+       }
+#endif
+
+       exit (code);
+}
+
+/*
+ * add_group - create a new group or add a user to an existing group
+ */
+static int add_group (const char *name, const char *gid, gid_t *ngid, uid_t uid)
+{
+       const struct group *grp;
+       struct group grent;
+       char *members[1];
+#ifdef SHADOWGRP
+       const struct sgrp *sg;
+#endif
+
+       /*
+        * Start by seeing if the named group already exists. This will be
+        * very easy to deal with if it does.
+        */
+       grp = getgrnam (gid);
+       if (NULL == grp) {
+               grp = gr_locate (gid);
+       }
+       if (NULL != grp) {
+               /* The user will use this ID for her primary group */
+               *ngid = grp->gr_gid;
+               /* Don't check gshadow */
+               return 0;
+       }
+
+       if (isdigit (gid[0])) {
+               /*
+                * The GID is a number, which means either this is a brand
+                * new group, or an existing group.
+                */
+
+               if (get_gid (gid, &grent.gr_gid) == 0) {
+                       fprintf (stderr,
+                                _("%s: invalid group ID '%s'\n"),
+                                Prog, gid);
+                       return -1;
+               }
+
+               /* Look in both the system database (getgrgid) and in the
+                * internal database (gr_locate_gid), which may contain
+                * uncommitted changes */
+               if (   (getgrgid ((gid_t) grent.gr_gid) != NULL)
+                   || (gr_locate_gid ((gid_t) grent.gr_gid) != NULL)) {
+                       /* The user will use this ID for her
+                        * primary group */
+                       *ngid = (gid_t) grent.gr_gid;
+                       return 0;
+               }
+
+               /* Do not create groups with GID == (gid_t)-1 */
+               if (grent.gr_gid == (gid_t)-1) {
+                       fprintf (stderr,
+                                _("%s: invalid group ID '%s'\n"),
+                                Prog, gid);
+                       return -1;
+               }
+       } else {
+               /* The gid parameter can be "" or a name which is not
+                * already the name of an existing group.
+                * In both cases, figure out what group ID can be used.
+                */
+               if (find_new_gid(rflg, &grent.gr_gid, &uid) < 0) {
+                       return -1;
+               }
+       }
+
+       /*
+        * Now I have all of the fields required to create the new group.
+        */
+       if (('\0' != gid[0]) && (!isdigit (gid[0]))) {
+               grent.gr_name = xstrdup (gid);
+       } else {
+               grent.gr_name = xstrdup (name);
+/* FIXME: check if the group exists */
+       }
+
+       /* Check if this is a valid group name */
+       if (!is_valid_group_name (grent.gr_name)) {
+               fprintf (stderr,
+                        _("%s: invalid group name '%s'\n"),
+                        Prog, grent.gr_name);
+               free (grent.gr_name);
+               return -1;
+       }
+
+       grent.gr_passwd = "x";  /* XXX warning: const */
+       members[0] = NULL;
+       grent.gr_mem = members;
+
+       *ngid = grent.gr_gid;
+
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               sg = sgr_locate (grent.gr_name);
+
+               if (NULL != sg) {
+                       fprintf (stderr,
+                                _("%s: group '%s' is a shadow group, but does not exist in /etc/group\n"),
+                                Prog, grent.gr_name);
+                       return -1;
+               }
+       }
+#endif
+
+       if (gr_update (&grent) == 0) {
+               return -1;
+       }
+
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               struct sgrp sgrent;
+               char *admins[1];
+               sgrent.sg_name = grent.gr_name;
+               sgrent.sg_passwd = "*"; /* XXX warning: const */
+               admins[0] = NULL;
+               sgrent.sg_adm = admins;
+               sgrent.sg_mem = members;
+
+               if (sgr_update (&sgrent) == 0) {
+                       return -1;
+               }
+       }
+#endif
+
+       return 0;
+}
+
+static int get_user_id (const char *uid, uid_t *nuid) {
+
+       /*
+        * The first guess for the UID is either the numerical UID that the
+        * caller provided, or the next available UID.
+        */
+       if (isdigit (uid[0])) {
+               if ((get_uid (uid, nuid) == 0) || (*nuid == (uid_t)-1)) {
+                       fprintf (stderr,
+                                _("%s: invalid user ID '%s'\n"),
+                                Prog, uid);
+                       return -1;
+               }
+       } else {
+               if ('\0' != uid[0]) {
+                       const struct passwd *pwd;
+                       /* local, no need for xgetpwnam */
+                       pwd = getpwnam (uid);
+                       if (NULL == pwd) {
+                               pwd = pw_locate (uid);
+                       }
+
+                       if (NULL != pwd) {
+                               *nuid = pwd->pw_uid;
+                       } else {
+                               fprintf (stderr,
+                                        _("%s: user '%s' does not exist\n"),
+                                        Prog, uid);
+                               return -1;
+                       }
+               } else {
+                       if (find_new_uid (rflg, nuid, NULL) < 0) {
+                               return -1;
+                       }
+               }
+       }
+
+       return 0;
+}
+
+/*
+ * add_user - create a new user ID
+ */
+static int add_user (const char *name, uid_t uid, gid_t gid)
+{
+       struct passwd pwent;
+
+       /* Check if this is a valid user name */
+       if (!is_valid_user_name (name)) {
+               fprintf (stderr,
+                        _("%s: invalid user name '%s'\n"),
+                        Prog, name);
+               return -1;
+       }
+
+       /*
+        * I don't want to fill in the entire password structure members
+        * JUST YET, since there is still more data to be added. So, I fill
+        * in the parts that I have.
+        */
+       pwent.pw_name = xstrdup (name);
+       pwent.pw_uid = uid;
+       pwent.pw_passwd = "x";  /* XXX warning: const */
+       pwent.pw_gid = gid;
+       pwent.pw_gecos = "";    /* XXX warning: const */
+       pwent.pw_dir = "";      /* XXX warning: const */
+       pwent.pw_shell = "";    /* XXX warning: const */
+
+       return (pw_update (&pwent) == 0);
+}
+
+#ifndef USE_PAM
+static void update_passwd (struct passwd *pwd, const char *password)
+{
+       void *crypt_arg = NULL;
+       if (crypt_method != NULL) {
+#ifdef USE_SHA_CRYPT
+               if (sflg) {
+                       crypt_arg = &sha_rounds;
+               }
+#endif
+       }
+
+       if ((crypt_method != NULL) && (0 == strcmp(crypt_method, "NONE"))) {
+               pwd->pw_passwd = (char *)password;
+       } else {
+               pwd->pw_passwd = pw_encrypt (password,
+                                            crypt_make_salt (crypt_method,
+                                                             crypt_arg));
+       }
+}
+#endif                         /* !USE_PAM */
+
+/*
+ * add_passwd - add or update the encrypted password
+ */
+static int add_passwd (struct passwd *pwd, const char *password)
+{
+       const struct spwd *sp;
+       struct spwd spent;
+
+#ifndef USE_PAM
+       void *crypt_arg = NULL;
+       if (crypt_method != NULL) {
+#ifdef USE_SHA_CRYPT
+               if (sflg) {
+                       crypt_arg = &sha_rounds;
+               }
+#endif                         /* USE_SHA_CRYPT */
+       }
+
+       /*
+        * In the case of regular password files, this is real easy - pwd
+        * points to the entry in the password file. Shadow files are
+        * harder since there are zillions of things to do ...
+        */
+       if (!is_shadow) {
+               update_passwd (pwd, password);
+               return 0;
+       }
+#endif                         /* USE_PAM */
+
+       /*
+        * Do the first and easiest shadow file case. The user already
+        * exists in the shadow password file.
+        */
+       sp = spw_locate (pwd->pw_name);
+#ifndef USE_PAM
+       if (NULL != sp) {
+               spent = *sp;
+               if (   (NULL != crypt_method)
+                   && (0 == strcmp(crypt_method, "NONE"))) {
+                       spent.sp_pwdp = (char *)password;
+               } else {
+                       const char *salt = crypt_make_salt (crypt_method,
+                                                           crypt_arg);
+                       spent.sp_pwdp = pw_encrypt (password, salt);
+               }
+               spent.sp_lstchg = (long) time ((time_t *) 0) / SCALE;
+               if (0 == spent.sp_lstchg) {
+                       /* Better disable aging than requiring a password
+                        * change */
+                       spent.sp_lstchg = -1;
+               }
+               return (spw_update (&spent) == 0);
+       }
+
+       /*
+        * Pick the next easiest case - the user has an encrypted password
+        * which isn't equal to "x". The password was set to "x" earlier
+        * when the entry was created, so this user would have to have had
+        * the password set someplace else.
+        */
+       if (strcmp (pwd->pw_passwd, "x") != 0) {
+               update_passwd (pwd, password);
+               return 0;
+       }
+#else                          /* USE_PAM */
+       /*
+        * If there is already a shadow entry, do not touch it.
+        * If there is already a passwd entry with a password, do not
+        * touch it.
+        * The password will be updated later for all users using PAM.
+        */
+       if (   (NULL != sp)
+           || (strcmp (pwd->pw_passwd, "x") != 0)) {
+               return 0;
+       }
+#endif                         /* USE_PAM */
+
+       /*
+        * Now the really hard case - I need to create an entirely new
+        * shadow password file entry.
+        */
+       spent.sp_namp = pwd->pw_name;
+#ifndef USE_PAM
+       if ((crypt_method != NULL) && (0 == strcmp(crypt_method, "NONE"))) {
+               spent.sp_pwdp = (char *)password;
+       } else {
+               const char *salt = crypt_make_salt (crypt_method, crypt_arg);
+               spent.sp_pwdp = pw_encrypt (password, salt);
+       }
+#else
+       /*
+        * Lock the password.
+        * The password will be updated later for all users using PAM.
+        */
+       spent.sp_pwdp = "!";
+#endif
+       spent.sp_lstchg = (long) time ((time_t *) 0) / SCALE;
+       if (0 == spent.sp_lstchg) {
+               /* Better disable aging than requiring a password change */
+               spent.sp_lstchg = -1;
+       }
+       spent.sp_min    = getdef_num ("PASS_MIN_DAYS", 0);
+       /* 10000 is infinity this week */
+       spent.sp_max    = getdef_num ("PASS_MAX_DAYS", 10000);
+       spent.sp_warn   = getdef_num ("PASS_WARN_AGE", -1);
+       spent.sp_inact  = -1;
+       spent.sp_expire = -1;
+       spent.sp_flag   = SHADOW_SP_FLAG_UNSET;
+
+       return (spw_update (&spent) == 0);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ *     It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+       int option_index = 0;
+       int c;
+       static struct option long_options[] = {
+#ifndef USE_PAM
+               {"crypt-method", required_argument, NULL, 'c'},
+#ifdef USE_SHA_CRYPT
+               {"sha-rounds", required_argument, NULL, 's'},
+#endif                         /* USE_SHA_CRYPT */
+#endif                         /* !USE_PAM */
+               {"help", no_argument, NULL, 'h'},
+               {"system", no_argument, NULL, 'r'},
+               {NULL, 0, NULL, '\0'}
+       };
+
+       while ((c = getopt_long (argc, argv,
+#ifndef USE_PAM
+#ifdef USE_SHA_CRYPT
+                                "c:hrs:",
+#else                          /* !USE_SHA_CRYPT */
+                                "c:hr",
+#endif                         /* !USE_SHA_CRYPT */
+#else                          /* USE_PAM */
+                                "hr",
+#endif
+                            long_options, &option_index)) != -1) {
+               switch (c) {
+               case 'h':
+                       usage ();
+                       break;
+               case 'r':
+                       rflg = true;
+                       break;
+#ifndef USE_PAM
+               case 'c':
+                       cflg = true;
+                       crypt_method = optarg;
+                       break;
+#ifdef USE_SHA_CRYPT
+               case 's':
+                       sflg = true;
+                       if (getlong(optarg, &sha_rounds) == 0) {
+                               fprintf (stderr,
+                                        _("%s: invalid numeric argument '%s'\n"),
+                                        Prog, optarg);
+                               usage ();
+                       }
+                       break;
+#endif                         /* USE_SHA_CRYPT */
+#endif                         /* !USE_PAM */
+               default:
+                       usage ();
+                       break;
+               }
+       }
+
+       if (argv[optind] != NULL) {
+               if (freopen (argv[optind], "r", stdin) == NULL) {
+                       char buf[BUFSIZ];
+                       snprintf (buf, sizeof buf, "%s: %s", Prog, argv[1]);
+                       perror (buf);
+                       fail_exit (EXIT_FAILURE);
+               }
+       }
+
+       /* validate options */
+       check_flags ();
+}
+
+/*
+ * check_flags - check flags and parameters consistency
+ *
+ *     It will not return if an error is encountered.
+ */
+static void check_flags (void)
+{
+#ifndef USE_PAM
+#ifdef USE_SHA_CRYPT
+       if (sflg && !cflg) {
+               fprintf (stderr,
+                        _("%s: %s flag is only allowed with the %s flag\n"),
+                        Prog, "-s", "-c");
+               usage ();
+       }
+#endif                         /* USE_SHA_CRYPT */
+
+       if (cflg) {
+               if (   (0 != strcmp (crypt_method, "DES"))
+                   && (0 != strcmp (crypt_method, "MD5"))
+                   && (0 != strcmp (crypt_method, "NONE"))
+#ifdef USE_SHA_CRYPT
+                   && (0 != strcmp (crypt_method, "SHA256"))
+                   && (0 != strcmp (crypt_method, "SHA512"))
+#endif                         /* USE_SHA_CRYPT */
+                   ) {
+                       fprintf (stderr,
+                                _("%s: unsupported crypt method: %s\n"),
+                                Prog, crypt_method);
+                       usage ();
+               }
+       }
+#endif                         /* !USE_PAM */
+}
+
+/*
+ * check_perms - check if the caller is allowed to add a group
+ *
+ *     With PAM support, the setuid bit can be set on groupadd to allow
+ *     non-root users to groups.
+ *     Without PAM support, only users who can write in the group databases
+ *     can add groups.
+ *
+ *     It will not return if the user is not allowed.
+ */
+static void check_perms (void)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       pam_handle_t *pamh = NULL;
+       int retval;
+       struct passwd *pampw;
+
+       pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+       if (NULL == pampw) {
+               fprintf (stderr,
+                        _("%s: Cannot determine your user name.\n"),
+                        Prog);
+               fail_exit (EXIT_FAILURE);
+       }
+
+       retval = pam_start ("newusers", pampw->pw_name, &conv, &pamh);
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_authenticate (pamh, 0);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_acct_mgmt (pamh, 0);
+       }
+
+       if (NULL != pamh) {
+               (void) pam_end (pamh, retval);
+       }
+       if (PAM_SUCCESS != retval) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               fail_exit (EXIT_FAILURE);
+       }
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+}
+
+/*
+ * open_files - lock and open the password, group and shadow databases
+ */
+static void open_files (void)
+{
+       /*
+        * Lock the password files and open them for update. This will bring
+        * all of the entries into memory where they may be searched for an
+        * modified, or new entries added. The password file is the key - if
+        * it gets locked, assume the others can be locked right away.
+        */
+       if (pw_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, pw_dbname ());
+               fail_exit (EXIT_FAILURE);
+       }
+       pw_locked = true;
+       if (is_shadow) {
+               if (spw_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, spw_dbname ());
+                       fail_exit (EXIT_FAILURE);
+               }
+               spw_locked = true;
+       }
+       if (gr_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, gr_dbname ());
+               fail_exit (EXIT_FAILURE);
+       }
+       gr_locked = true;
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, sgr_dbname ());
+                       fail_exit (EXIT_FAILURE);
+               }
+               sgr_locked = true;
+       }
+#endif
+
+       if (pw_open (O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, pw_dbname ());
+               fail_exit (EXIT_FAILURE);
+       }
+       if (is_shadow && (spw_open (O_RDWR) == 0)) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, spw_dbname ());
+               fail_exit (EXIT_FAILURE);
+       }
+       if (gr_open (O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+               fail_exit (EXIT_FAILURE);
+       }
+#ifdef SHADOWGRP
+       if (is_shadow_grp && (sgr_open (O_RDWR) == 0)) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, sgr_dbname ());
+               fail_exit (EXIT_FAILURE);
+       }
+#endif
+}
+
+/*
+ * close_files - close and unlock the password, group and shadow databases
+ */
+static void close_files (void)
+{
+       if (pw_close () == 0) {
+               fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+               fail_exit (EXIT_FAILURE);
+       }
+       if (pw_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+               /* continue */
+       }
+       pw_locked = false;
+
+       if (is_shadow) {
+               if (spw_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"),
+                                Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+                       fail_exit (EXIT_FAILURE);
+               }
+               if (spw_unlock () == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to unlock %s\n"),
+                                Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+               spw_locked = false;
+       }
+
+       if (gr_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+               fail_exit (EXIT_FAILURE);
+       }
+       if (gr_unlock () == 0) {
+               fprintf (stderr,
+                        _("%s: failed to unlock %s\n"),
+                        Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+               /* continue */
+       }
+       gr_locked = false;
+
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"),
+                                Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+                       fail_exit (EXIT_FAILURE);
+               }
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to unlock %s\n"),
+                                Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                       /* continue */
+               }
+               sgr_locked = false;
+       }
+#endif
+}
+
+int main (int argc, char **argv)
+{
+       char buf[BUFSIZ];
+       char *fields[8];
+       int nfields;
+       char *cp;
+       const struct passwd *pw;
+       struct passwd newpw;
+       int errors = 0;
+       int line = 0;
+       uid_t uid;
+       gid_t gid;
+#ifdef USE_PAM
+       int *lines = NULL;
+       char **usernames = NULL;
+       char **passwords = NULL;
+       unsigned int nusers = 0;
+#endif                         /* USE_PAM */
+
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       OPENLOG ("newusers");
+
+       process_flags (argc, argv);
+
+       check_perms ();
+
+       is_shadow = spw_file_present ();
+
+#ifdef SHADOWGRP
+       is_shadow_grp = sgr_file_present ();
+#endif
+
+       open_files ();
+
+       /*
+        * Read each line. The line has the same format as a password file
+        * entry, except that certain fields are not constrained to be
+        * numerical values. If a group ID is entered which does not already
+        * exist, an attempt is made to allocate the same group ID as the
+        * numerical user ID. Should that fail, the next available group ID
+        * over 100 is allocated. The pw_gid field will be updated with that
+        * value.
+        */
+       while (fgets (buf, (int) sizeof buf, stdin) != (char *) 0) {
+               line++;
+               cp = strrchr (buf, '\n');
+               if (NULL != cp) {
+                       *cp = '\0';
+               } else {
+                       if (feof (stdin) == 0) {
+                               fprintf (stderr,
+                                        _("%s: line %d: line too long\n"),
+                                        Prog, line);
+                               errors++;
+                               continue;
+                       }
+               }
+
+               /*
+                * Break the string into fields and screw around with them.
+                * There MUST be 7 colon separated fields, although the
+                * values aren't that particular.
+                */
+               for (cp = buf, nfields = 0; nfields < 7; nfields++) {
+                       fields[nfields] = cp;
+                       cp = strchr (cp, ':');
+                       if (NULL != cp) {
+                               *cp = '\0';
+                               cp++;
+                       } else {
+                               break;
+                       }
+               }
+               if (nfields != 6) {
+                       fprintf (stderr, _("%s: line %d: invalid line\n"),
+                                Prog, line);
+                       continue;
+               }
+
+               /*
+                * First check if we have to create or update an user
+                */
+               pw = pw_locate (fields[0]);
+               /* local, no need for xgetpwnam */
+               if (   (NULL == pw)
+                   && (getpwnam (fields[0]) != NULL)) {
+                       fprintf (stderr, _("%s: cannot update the entry of user %s (not in the passwd database)\n"), Prog, fields[0]);
+                       errors++;
+                       continue;
+               }
+
+               if (   (NULL == pw)
+                   && (get_user_id (fields[2], &uid) != 0)) {
+                       fprintf (stderr,
+                                _("%s: line %d: can't create user\n"),
+                                Prog, line);
+                       errors++;
+                       continue;
+               }
+
+               /*
+                * Processed is the group name. A new group will be
+                * created if the group name is non-numeric and does not
+                * already exist. If the group name is a number (which is not
+                * an existing GID), a group with the same name as the user
+                * will be created, with the given GID. The given or created
+                * group will be the primary group of the user. If
+                * there is no named group to be a member of, the UID will
+                * be figured out and that value will be a candidate for a
+                * new group, if that group ID exists, a whole new group ID
+                * will be made up.
+                */
+               if (   (NULL == pw)
+                   && (add_group (fields[0], fields[3], &gid, uid) != 0)) {
+                       fprintf (stderr,
+                                _("%s: line %d: can't create group\n"),
+                                Prog, line);
+                       errors++;
+                       continue;
+               }
+
+               /*
+                * Now we work on the user ID. It has to be specified either
+                * as a numerical value, or left blank. If it is a numerical
+                * value, that value will be used, otherwise the next
+                * available user ID is computed and used. After this there
+                * will at least be a (struct passwd) for the user.
+                */
+               if (   (NULL == pw)
+                   && (add_user (fields[0], uid, gid) != 0)) {
+                       fprintf (stderr,
+                                _("%s: line %d: can't create user\n"),
+                                Prog, line);
+                       errors++;
+                       continue;
+               }
+
+               /*
+                * The password, gecos field, directory, and shell fields
+                * all come next.
+                */
+               pw = pw_locate (fields[0]);
+               if (NULL == pw) {
+                       fprintf (stderr,
+                                _("%s: line %d: user '%s' does not exist in %s\n"),
+                                Prog, line, fields[0], pw_dbname ());
+                       errors++;
+                       continue;
+               }
+               newpw = *pw;
+
+#if USE_PAM
+               /* keep the list of user/password for later update by PAM */
+               nusers++;
+               lines     = realloc (lines,     sizeof (lines[0])     * nusers);
+               usernames = realloc (usernames, sizeof (usernames[0]) * nusers);
+               passwords = realloc (passwords, sizeof (passwords[0]) * nusers);
+               lines[nusers-1]     = line;
+               usernames[nusers-1] = strdup (fields[0]);
+               passwords[nusers-1] = strdup (fields[1]);
+#endif
+               if (add_passwd (&newpw, fields[1])) {
+                       fprintf (stderr,
+                                _("%s: line %d: can't update password\n"),
+                                Prog, line);
+                       errors++;
+                       continue;
+               }
+               if ('\0' != fields[4][0]) {
+                       newpw.pw_gecos = fields[4];
+               }
+
+               if ('\0' != fields[5][0]) {
+                       newpw.pw_dir = fields[5];
+               }
+
+               if ('\0' != fields[6][0]) {
+                       newpw.pw_shell = fields[6];
+               }
+
+               if (   ('\0' != newpw.pw_dir[0])
+                   && (access (newpw.pw_dir, F_OK) != 0)) {
+/* FIXME: should check for directory */
+                       mode_t msk = 0777 & ~getdef_num ("UMASK",
+                                                        GETDEF_DEFAULT_UMASK);
+                       if (mkdir (newpw.pw_dir, msk) != 0) {
+                               fprintf (stderr,
+                                        _("%s: line %d: mkdir %s failed: %s\n"),
+                                        Prog, line, newpw.pw_dir,
+                                        strerror (errno));
+                       } else if (chown (newpw.pw_dir,
+                                         newpw.pw_uid,
+                                         newpw.pw_gid) != 0) {
+                               fprintf (stderr,
+                                        _("%s: line %d: chown %s failed: %s\n"),
+                                        Prog, line, newpw.pw_dir,
+                                        strerror (errno));
+                       }
+               }
+
+               /*
+                * Update the password entry with the new changes made.
+                */
+               if (pw_update (&newpw) == 0) {
+                       fprintf (stderr,
+                                _("%s: line %d: can't update entry\n"),
+                                Prog, line);
+                       errors++;
+                       continue;
+               }
+       }
+
+       /*
+        * Any detected errors will cause the entire set of changes to be
+        * aborted. Unlocking the password file will cause all of the
+        * changes to be ignored. Otherwise the file is closed, causing the
+        * changes to be written out all at once, and then unlocked
+        * afterwards.
+        */
+       if (0 != errors) {
+               fprintf (stderr,
+                        _("%s: error detected, changes ignored\n"), Prog);
+               fail_exit (EXIT_FAILURE);
+       }
+
+       close_files ();
+
+       nscd_flush_cache ("passwd");
+       nscd_flush_cache ("group");
+
+#ifdef USE_PAM
+       unsigned int i;
+       /* Now update the passwords using PAM */
+       for (i = 0; i < nusers; i++) {
+               if (do_pam_passwd_non_interractive ("newusers", usernames[i], passwords[i]) != 0) {
+                       fprintf (stderr,
+                                _("%s: (line %d, user %s) password not changed\n"),
+                                Prog, lines[i], usernames[i]);
+                       errors++;
+               }
+       }
+#endif                         /* USE_PAM */
+
+       return ((0 == errors) ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
diff --git a/src/nologin.c b/src/nologin.c
new file mode 100644 (file)
index 0000000..fba2865
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2004 The FreeBSD Project.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: nologin.c 2862 2009-05-09 13:14:23Z nekral-guest $"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <syslog.h>
+#include <unistd.h>
+
+int main (void)
+{
+       const char *user, *tty;
+
+       tty = ttyname (0);
+       if (NULL == tty) {
+               tty = "UNKNOWN";
+       }
+       user = getlogin ();
+       if (NULL == user) {
+               user = "UNKNOWN";
+       }
+       openlog ("nologin", LOG_CONS, LOG_AUTH);
+       syslog (LOG_CRIT, "Attempted login by %s on %s", user, tty);
+       closelog ();
+
+       printf ("%s", "This account is currently not available.\n");
+
+       return EXIT_FAILURE;
+}
diff --git a/src/passwd.c b/src/passwd.c
new file mode 100644 (file)
index 0000000..7fe0e59
--- /dev/null
@@ -0,0 +1,1120 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: passwd.c 2996 2009-05-22 13:32:26Z nekral-guest $"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef WITH_SELINUX
+#include <selinux/selinux.h>
+#include <selinux/flask.h>
+#include <selinux/av_permissions.h>
+#include <selinux/context.h>
+#endif                         /* WITH_SELINUX */
+#include <time.h>
+#include "defines.h"
+#include "getdef.h"
+#include "nscd.h"
+#include "prototypes.h"
+#include "pwauth.h"
+#include "pwio.h"
+#include "shadowio.h"
+
+/*
+ * exit status values
+ */
+/*@-exitarg@*/
+#define E_SUCCESS      0       /* success */
+#define E_NOPERM       1       /* permission denied */
+#define E_USAGE                2       /* invalid combination of options */
+#define E_FAILURE      3       /* unexpected failure, nothing done */
+#define E_MISSING      4       /* unexpected failure, passwd file missing */
+#define E_PWDBUSY      5       /* passwd file busy, try again later */
+#define E_BAD_ARG      6       /* invalid argument to option */
+/*
+ * Global variables
+ */
+char *Prog;                    /* Program name */
+
+static char *name;             /* The name of user whose password is being changed */
+static char *myname;           /* The current user's name */
+static bool amroot;            /* The caller's real UID was 0 */
+
+static bool
+    aflg = false,                      /* -a - show status for all users */
+    dflg = false,                      /* -d - delete password */
+    eflg = false,                      /* -e - force password change */
+    iflg = false,                      /* -i - set inactive days */
+    kflg = false,                      /* -k - change only if expired */
+    lflg = false,                      /* -l - lock the user's password */
+    nflg = false,                      /* -n - set minimum days */
+    qflg = false,                      /* -q - quiet mode */
+    Sflg = false,                      /* -S - show password status */
+    uflg = false,                      /* -u - unlock the user's password */
+    wflg = false,                      /* -w - set warning days */
+    xflg = false;                      /* -x - set maximum days */
+
+/*
+ * set to 1 if there are any flags which require root privileges,
+ * and require username to be specified
+ */
+static bool anyflag = false;
+
+static long age_min = 0;       /* Minimum days before change   */
+static long age_max = 0;       /* Maximum days until change     */
+static long warn = 0;          /* Warning days before change   */
+static long inact = 0;         /* Days without change before locked */
+
+#ifndef USE_PAM
+static bool do_update_age = false;
+#endif                         /* ! USE_PAM */
+
+static bool pw_locked = false;
+static bool spw_locked = false;
+
+#ifndef USE_PAM
+/*
+ * Size of the biggest passwd:
+ *   $6$       3
+ *   rounds=   7
+ *   999999999 9
+ *   $         1
+ *   salt      16
+ *   $         1
+ *   SHA512    123
+ *   nul       1
+ *
+ *   total     161
+ */
+static char crypt_passwd[256];
+static bool do_update_pwd = false;
+#endif                         /* !USE_PAM */
+
+/*
+ * External identifiers
+ */
+
+/* local function prototypes */
+static void usage (int);
+
+#ifndef USE_PAM
+static int reuse (const char *, const struct passwd *);
+static int new_password (const struct passwd *);
+
+static void check_password (const struct passwd *, const struct spwd *);
+static char *insert_crypt_passwd (const char *, const char *);
+#endif                         /* !USE_PAM */
+static char *date_to_str (time_t);
+static const char *pw_status (const char *);
+static void print_status (const struct passwd *);
+static void fail_exit (int);
+static void oom (void);
+static char *update_crypt_pw (char *);
+static void update_noshadow (void);
+
+static void update_shadow (void);
+#ifdef WITH_SELINUX
+static int check_selinux_access (const char *changed_user,
+                                 uid_t changed_uid,
+                                 access_vector_t requested_access);
+#endif                         /* WITH_SELINUX */
+
+/*
+ * usage - print command usage and exit
+ */
+static void usage (int status)
+{
+       fputs (_("Usage: passwd [options] [LOGIN]\n"
+                "\n"
+                "Options:\n"
+                "  -a, --all                     report password status on all accounts\n"
+                "  -d, --delete                  delete the password for the named account\n"
+                "  -e, --expire                  force expire the password for the named account\n"
+                "  -h, --help                    display this help message and exit\n"
+                "  -k, --keep-tokens             change password only if expired\n"
+                "  -i, --inactive INACTIVE       set password inactive after expiration\n"
+                "                                to INACTIVE\n"
+                "  -l, --lock                    lock the password of the named account\n"
+                "  -n, --mindays MIN_DAYS        set minimum number of days before password\n"
+                "                                change to MIN_DAYS\n"
+                "  -q, --quiet                   quiet mode\n"
+                "  -r, --repository REPOSITORY   change password in REPOSITORY repository\n"
+                "  -S, --status                  report password status on the named account\n"
+                "  -u, --unlock                  unlock the password of the named account\n"
+                "  -w, --warndays WARN_DAYS      set expiration warning days to WARN_DAYS\n"
+                "  -x, --maxdays MAX_DAYS        set maximum number of days before password\n"
+                "                                change to MAX_DAYS\n"
+                "\n"), stderr);
+       exit (status);
+}
+
+#ifndef USE_PAM
+static int reuse (const char *pass, const struct passwd *pw)
+{
+#ifdef HAVE_LIBCRACK_HIST
+       const char *reason;
+
+#ifdef HAVE_LIBCRACK_PW
+       const char *FascistHistoryPw (const char *, const struct passwd *);
+
+       reason = FascistHistory (pass, pw);
+#else                          /* !HAVE_LIBCRACK_PW */
+       const char *FascistHistory (const char *, int);
+
+       reason = FascistHistory (pass, pw->pw_uid);
+#endif                         /* !HAVE_LIBCRACK_PW */
+       if (NULL != reason) {
+               printf (_("Bad password: %s.  "), reason);
+               return 1;
+       }
+#endif                         /* HAVE_LIBCRACK_HIST */
+       return 0;
+}
+
+/*
+ * new_password - validate old password and replace with new (both old and
+ * new in global "char crypt_passwd[128]")
+ */
+static int new_password (const struct passwd *pw)
+{
+       char *clear;            /* Pointer to clear text */
+       char *cipher;           /* Pointer to cipher text */
+       char *cp;               /* Pointer to getpass() response */
+       char orig[200];         /* Original password */
+       char pass[200];         /* New password */
+       int i;                  /* Counter for retries */
+       int warned;
+       int pass_max_len = -1;
+       char *method;
+
+#ifdef HAVE_LIBCRACK_HIST
+       int HistUpdate (const char *, const char *);
+#endif                         /* HAVE_LIBCRACK_HIST */
+
+       /*
+        * Authenticate the user. The user will be prompted for their own
+        * password.
+        */
+
+       if (!amroot && crypt_passwd[0]) {
+               clear = getpass (_("Old password: "));
+               if (NULL == clear) {
+                       return -1;
+               }
+
+               cipher = pw_encrypt (clear, crypt_passwd);
+               if (strcmp (cipher, crypt_passwd) != 0) {
+                       SYSLOG ((LOG_WARN, "incorrect password for %s",
+                                pw->pw_name));
+                       sleep (1);
+                       fprintf (stderr,
+                                _("Incorrect password for %s.\n"),
+                                pw->pw_name);
+                       return -1;
+               }
+               STRFCPY (orig, clear);
+               strzero (clear);
+               strzero (cipher);
+       } else {
+               orig[0] = '\0';
+       }
+
+       /*
+        * Get the new password. The user is prompted for the new password
+        * and has five tries to get it right. The password will be tested
+        * for strength, unless it is the root user. This provides an escape
+        * for initial login passwords.
+        */
+       if ((method = getdef_str ("ENCRYPT_METHOD")) == NULL) {
+               if (!getdef_bool ("MD5_CRYPT_ENAB")) {
+                       pass_max_len = getdef_num ("PASS_MAX_LEN", 8);
+               }
+       } else {
+               if (   (strcmp (method, "MD5")    == 0)
+#ifdef USE_SHA_CRYPT
+                   || (strcmp (method, "SHA256") == 0)
+                   || (strcmp (method, "SHA512") == 0)
+#endif                         /* USE_SHA_CRYPT */
+                   ) {
+                       pass_max_len = -1;
+               } else {
+                       pass_max_len = getdef_num ("PASS_MAX_LEN", 8);
+               }
+       }
+       if (!qflg) {
+               if (pass_max_len == -1) {
+                       printf (_(
+"Enter the new password (minimum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"),
+                               getdef_num ("PASS_MIN_LEN", 5));
+               } else {
+                       printf (_(
+"Enter the new password (minimum of %d, maximum of %d characters)\n"
+"Please use a combination of upper and lower case letters and numbers.\n"),
+                               getdef_num ("PASS_MIN_LEN", 5), pass_max_len);
+               }
+       }
+
+       warned = 0;
+       for (i = getdef_num ("PASS_CHANGE_TRIES", 5); i > 0; i--) {
+               cp = getpass (_("New password: "));
+               if (NULL == cp) {
+                       memzero (orig, sizeof orig);
+                       return -1;
+               }
+               if (warned && (strcmp (pass, cp) != 0)) {
+                       warned = 0;
+               }
+               STRFCPY (pass, cp);
+               strzero (cp);
+
+               if (!amroot && (!obscure (orig, pass, pw) || reuse (pass, pw))) {
+                       puts (_("Try again."));
+                       continue;
+               }
+
+               /*
+                * If enabled, warn about weak passwords even if you are
+                * root (enter this password again to use it anyway). 
+                * --marekm
+                */
+               if (amroot && !warned && getdef_bool ("PASS_ALWAYS_WARN")
+                   && (!obscure (orig, pass, pw) || reuse (pass, pw))) {
+                       puts (_("\nWarning: weak password (enter it again to use it anyway)."));
+                       warned++;
+                       continue;
+               }
+               cp = getpass (_("Re-enter new password: "));
+               if (NULL == cp) {
+                       memzero (orig, sizeof orig);
+                       return -1;
+               }
+               if (strcmp (cp, pass) != 0) {
+                       fputs (_("They don't match; try again.\n"), stderr);
+               } else {
+                       strzero (cp);
+                       break;
+               }
+       }
+       memzero (orig, sizeof orig);
+
+       if (i == 0) {
+               memzero (pass, sizeof pass);
+               return -1;
+       }
+
+       /*
+        * Encrypt the password, then wipe the cleartext password.
+        */
+       cp = pw_encrypt (pass, crypt_make_salt (NULL, NULL));
+       memzero (pass, sizeof pass);
+
+#ifdef HAVE_LIBCRACK_HIST
+       HistUpdate (pw->pw_name, crypt_passwd);
+#endif                         /* HAVE_LIBCRACK_HIST */
+       STRFCPY (crypt_passwd, cp);
+       return 0;
+}
+
+/*
+ * check_password - test a password to see if it can be changed
+ *
+ *     check_password() sees if the invoker has permission to change the
+ *     password for the given user.
+ */
+static void check_password (const struct passwd *pw, const struct spwd *sp)
+{
+       time_t now, last, ok;
+       int exp_status;
+
+       exp_status = isexpired (pw, sp);
+
+       /*
+        * If not expired and the "change only if expired" option (idea from
+        * PAM) was specified, do nothing. --marekm
+        */
+       if (kflg && (0 == exp_status)) {
+               exit (E_SUCCESS);
+       }
+
+       /*
+        * Root can change any password any time.
+        */
+       if (amroot) {
+               return;
+       }
+
+       (void) time (&now);
+
+       /*
+        * Expired accounts cannot be changed ever. Passwords which are
+        * locked may not be changed. Passwords where min > max may not be
+        * changed. Passwords which have been inactive too long cannot be
+        * changed.
+        */
+       if (   (sp->sp_pwdp[0] == '!')
+           || (exp_status > 1)
+           || (   (sp->sp_max >= 0)
+               && (sp->sp_min > sp->sp_max))) {
+               fprintf (stderr,
+                        _("The password for %s cannot be changed.\n"),
+                        sp->sp_namp);
+               SYSLOG ((LOG_WARN, "password locked for '%s'", sp->sp_namp));
+               closelog ();
+               exit (E_NOPERM);
+       }
+
+       /*
+        * Passwords may only be changed after sp_min time is up.
+        */
+       if (sp->sp_lstchg > 0) {
+               last = sp->sp_lstchg * SCALE;
+               ok = last + (sp->sp_min > 0 ? sp->sp_min * SCALE : 0);
+
+               if (now < ok) {
+                       fprintf (stderr,
+                                _("The password for %s cannot be changed yet.\n"),
+                                pw->pw_name);
+                       SYSLOG ((LOG_WARN, "now < minimum age for '%s'", pw->pw_name));
+                       closelog ();
+                       exit (E_NOPERM);
+               }
+       }
+}
+
+/*
+ * insert_crypt_passwd - add an "old-style" password to authentication
+ * string result now malloced to avoid overflow, just in case.  --marekm
+ */
+static char *insert_crypt_passwd (const char *string, const char *passwd)
+{
+       return xstrdup (passwd);
+}
+#endif                         /* !USE_PAM */
+
+static char *date_to_str (time_t t)
+{
+       static char buf[80];
+       struct tm *tm;
+
+       tm = gmtime (&t);
+#ifdef HAVE_STRFTIME
+       strftime (buf, sizeof buf, "%m/%d/%Y", tm);
+#else                          /* !HAVE_STRFTIME */
+       snprintf (buf, sizeof buf, "%02d/%02d/%04d",
+                 tm->tm_mon + 1, tm->tm_mday, tm->tm_year + 1900);
+#endif                         /* !HAVE_STRFTIME */
+       return buf;
+}
+
+static const char *pw_status (const char *pass)
+{
+       if (*pass == '*' || *pass == '!') {
+               return "L";
+       }
+       if (*pass == '\0') {
+               return "NP";
+       }
+       return "P";
+}
+
+/*
+ * print_status - print current password status
+ */
+static void print_status (const struct passwd *pw)
+{
+       struct spwd *sp;
+
+       sp = getspnam (pw->pw_name); /* local, no need for xgetspnam */
+       if (NULL != sp) {
+               printf ("%s %s %s %ld %ld %ld %ld\n",
+                       pw->pw_name,
+                       pw_status (sp->sp_pwdp),
+                       date_to_str (sp->sp_lstchg * SCALE),
+                       (sp->sp_min * SCALE) / DAY,
+                       (sp->sp_max * SCALE) / DAY,
+                       (sp->sp_warn * SCALE) / DAY,
+                       (sp->sp_inact * SCALE) / DAY);
+       } else {
+               printf ("%s %s\n", pw->pw_name, pw_status (pw->pw_passwd));
+       }
+}
+
+
+static void fail_exit (int status)
+{
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+
+       if (spw_locked) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+       }
+
+       exit (status);
+}
+
+static void oom (void)
+{
+       fprintf (stderr, _("%s: out of memory\n"), Prog);
+       fail_exit (E_FAILURE);
+}
+
+static char *update_crypt_pw (char *cp)
+{
+#ifndef USE_PAM
+       if (do_update_pwd) {
+               cp = insert_crypt_passwd (cp, crypt_passwd);
+       }
+#endif                         /* !USE_PAM */
+
+       if (dflg) {
+               *cp = '\0';
+       }
+
+       if (uflg && *cp == '!') {
+               if (cp[1] == '\0') {
+                       fprintf (stderr,
+                                _("%s: unlocking the password would result in a passwordless account.\n"
+                                  "You should set a password with usermod -p to unlock the password of this account.\n"),
+                                Prog);
+                       fail_exit (E_FAILURE);
+               } else {
+                       cp++;
+               }
+       }
+
+       if (lflg && *cp != '!') {
+               char *newpw = xmalloc (strlen (cp) + 2);
+
+               strcpy (newpw, "!");
+               strcat (newpw, cp);
+               cp = newpw;
+       }
+       return cp;
+}
+
+
+static void update_noshadow (void)
+{
+       const struct passwd *pw;
+       struct passwd *npw;
+
+       if (pw_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, pw_dbname ());
+               exit (E_PWDBUSY);
+       }
+       pw_locked = true;
+       if (pw_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"),
+                        Prog, pw_dbname ());
+               SYSLOG ((LOG_WARN, "cannot open %s", pw_dbname ()));
+               fail_exit (E_MISSING);
+       }
+       pw = pw_locate (name);
+       if (NULL == pw) {
+               fprintf (stderr,
+                        _("%s: user '%s' does not exist in %s\n"),
+                        Prog, name, pw_dbname ());
+               fail_exit (E_NOPERM);
+       }
+       npw = __pw_dup (pw);
+       if (NULL == npw) {
+               oom ();
+       }
+       npw->pw_passwd = update_crypt_pw (npw->pw_passwd);
+       if (pw_update (npw) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, pw_dbname (), npw->pw_name);
+               fail_exit (E_FAILURE);
+       }
+       if (pw_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+               fail_exit (E_FAILURE);
+       }
+       if (pw_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+               /* continue */
+       }
+       pw_locked = false;
+}
+
+static void update_shadow (void)
+{
+       const struct spwd *sp;
+       struct spwd *nsp;
+
+       if (spw_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, spw_dbname ());
+               exit (E_PWDBUSY);
+       }
+       spw_locked = true;
+       if (spw_open (O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, spw_dbname ());
+               SYSLOG ((LOG_WARN, "cannot open %s", spw_dbname ()));
+               fail_exit (E_FAILURE);
+       }
+       sp = spw_locate (name);
+       if (NULL == sp) {
+               /* Try to update the password in /etc/passwd instead. */
+               (void) spw_close ();
+               update_noshadow ();
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+               spw_locked = false;
+               return;
+       }
+       nsp = __spw_dup (sp);
+       if (NULL == nsp) {
+               oom ();
+       }
+       nsp->sp_pwdp = update_crypt_pw (nsp->sp_pwdp);
+       if (xflg) {
+               nsp->sp_max = (age_max * DAY) / SCALE;
+       }
+       if (nflg) {
+               nsp->sp_min = (age_min * DAY) / SCALE;
+       }
+       if (wflg) {
+               nsp->sp_warn = (warn * DAY) / SCALE;
+       }
+       if (iflg) {
+               nsp->sp_inact = (inact * DAY) / SCALE;
+       }
+#ifndef USE_PAM
+       if (do_update_age) {
+               nsp->sp_lstchg = (long) time ((time_t *) 0) / SCALE;
+               if (0 == nsp->sp_lstchg) {
+                       /* Better disable aging than requiring a password
+                        * change */
+                       nsp->sp_lstchg = -1;
+               }
+       }
+#endif                         /* !USE_PAM */
+
+       /*
+        * Force change on next login, like SunOS 4.x passwd -e or Solaris
+        * 2.x passwd -f. Solaris 2.x seems to do the same thing (set
+        * sp_lstchg to 0).
+        */
+       if (eflg) {
+               nsp->sp_lstchg = 0;
+       }
+
+       if (spw_update (nsp) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, spw_dbname (), nsp->sp_namp);
+               fail_exit (E_FAILURE);
+       }
+       if (spw_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, spw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+               fail_exit (E_FAILURE);
+       }
+       if (spw_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+               /* continue */
+       }
+       spw_locked = false;
+}
+
+#ifdef WITH_SELINUX
+static int check_selinux_access (const char *changed_user,
+                                 uid_t changed_uid,
+                                 access_vector_t requested_access)
+{
+       int status = -1;
+       security_context_t user_context;
+       context_t c;
+       const char *user;
+
+       /* if in permissive mode then allow the operation */
+       if (security_getenforce() == 0) {
+               return 0;
+       }
+
+       /* get the context of the process which executed passwd */
+       if (getprevcon(&user_context) != 0) {
+               return -1;
+       }
+
+       /* get the "user" portion of the context (the part before the first
+          colon) */
+       c = context_new(user_context);
+       user = context_user_get(c);
+
+       /* if changing a password for an account with UID==0 or for an account
+          where the identity matches then return success */
+       if (changed_uid != 0 && strcmp(changed_user, user) == 0) {
+               status = 0;
+       } else {
+               struct av_decision avd;
+               int retval;
+               retval = security_compute_av(user_context,
+                                            user_context,
+                                            SECCLASS_PASSWD,
+                                            requested_access,
+                                            &avd);
+               if ((retval == 0) &&
+                   ((requested_access & avd.allowed) == requested_access)) {
+                       status = 0;
+               }
+       }
+       context_free(c);
+       freecon(user_context);
+       return status;
+}
+
+#endif                         /* WITH_SELINUX */
+
+/*
+ * passwd - change a user's password file information
+ *
+ *     This command controls the password file and commands which are used
+ *     to modify it.
+ *
+ *     The valid options are
+ *
+ *     -d      delete the password for the named account (*)
+ *     -e      expire the password for the named account (*)
+ *     -f      execute chfn command to interpret flags
+ *     -g      execute gpasswd command to interpret flags
+ *     -i #    set sp_inact to # days (*)
+ *     -k      change password only if expired
+ *     -l      lock the password of the named account (*)
+ *     -n #    set sp_min to # days (*)
+ *     -r #    change password in # repository
+ *     -s      execute chsh command to interpret flags
+ *     -S      show password status of named account
+ *     -u      unlock the password of the named account (*)
+ *     -w #    set sp_warn to # days (*)
+ *     -x #    set sp_max to # days (*)
+ *
+ *     (*) requires root permission to execute.
+ *
+ *     All of the time fields are entered in days and converted to the
+ *     appropriate internal format. For finer resolute the chage
+ *     command must be used.
+ */
+int main (int argc, char **argv)
+{
+       const struct passwd *pw;        /* Password file entry for user      */
+
+#ifndef USE_PAM
+       char *cp;               /* Miscellaneous character pointing  */
+
+       const struct spwd *sp;  /* Shadow file entry for user   */
+#endif                         /* !USE_PAM */
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       /*
+        * The program behaves differently when executed by root than when
+        * executed by a normal user.
+        */
+       amroot = (getuid () == 0);
+
+       /*
+        * Get the program name. The program name is used as a prefix to
+        * most error messages.
+        */
+       Prog = Basename (argv[0]);
+
+       sanitize_env ();
+
+       OPENLOG ("passwd");
+
+       {
+               /*
+                * Parse the command line options.
+                */
+               int option_index = 0;
+               int c;
+               static struct option long_options[] = {
+                       {"all", no_argument, NULL, 'a'},
+                       {"delete", no_argument, NULL, 'd'},
+                       {"expire", no_argument, NULL, 'e'},
+                       {"help", no_argument, NULL, 'h'},
+                       {"inactive", required_argument, NULL, 'i'},
+                       {"keep-tokens", no_argument, NULL, 'k'},
+                       {"lock", no_argument, NULL, 'l'},
+                       {"mindays", required_argument, NULL, 'n'},
+                       {"quiet", no_argument, NULL, 'q'},
+                       {"repository", required_argument, NULL, 'r'},
+                       {"status", no_argument, NULL, 'S'},
+                       {"unlock", no_argument, NULL, 'u'},
+                       {"warndays", required_argument, NULL, 'w'},
+                       {"maxdays", required_argument, NULL, 'x'},
+                       {NULL, 0, NULL, '\0'}
+               };
+
+               while ((c = getopt_long (argc, argv, "adei:kln:qr:Suw:x:",
+                                        long_options, &option_index)) != -1) {
+                       switch (c) {
+                       case 'a':
+                               aflg = true;
+                               break;
+                       case 'd':
+                               dflg = true;
+                               anyflag = true;
+                               break;
+                       case 'e':
+                               eflg = true;
+                               anyflag = true;
+                               break;
+                       case 'i':
+                               if (   (getlong (optarg, &inact) == 0)
+                                   || (inact < -1)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid numeric argument '%s'\n"),
+                                                Prog, optarg);
+                                       usage (E_BAD_ARG);
+                               }
+                               iflg = true;
+                               anyflag = true;
+                               break;
+                       case 'k':
+                               /* change only if expired, like Linux-PAM passwd -k. */
+                               kflg = true;    /* ok for users */
+                               break;
+                       case 'l':
+                               lflg = true;
+                               anyflag = true;
+                               break;
+                       case 'n':
+                               if (   (getlong (optarg, &age_min) == 0)
+                                   || (age_min < -1)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid numeric argument '%s'\n"),
+                                                Prog, optarg);
+                                       usage (E_BAD_ARG);
+                               }
+                               nflg = true;
+                               anyflag = true;
+                               break;
+                       case 'q':
+                               qflg = true;    /* ok for users */
+                               break;
+                       case 'r':
+                               /* -r repository (files|nis|nisplus) */
+                               /* only "files" supported for now */
+                               if (strcmp (optarg, "files") != 0) {
+                                       fprintf (stderr,
+                                                _("%s: repository %s not supported\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               break;
+                       case 'S':
+                               Sflg = true;    /* ok for users */
+                               break;
+                       case 'u':
+                               uflg = true;
+                               anyflag = true;
+                               break;
+                       case 'w':
+                               if (   (getlong (optarg, &warn) == 0)
+                                   || (warn < -1)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid numeric argument '%s'\n"),
+                                                Prog, optarg);
+                                       usage (E_BAD_ARG);
+                               }
+                               wflg = true;
+                               anyflag = true;
+                               break;
+                       case 'x':
+                               if (   (getlong (optarg, &age_max) == 0)
+                                   || (age_max < -1)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid numeric argument '%s'\n"),
+                                                Prog, optarg);
+                                       usage (E_BAD_ARG);
+                               }
+                               xflg = true;
+                               anyflag = true;
+                               break;
+                       default:
+                               usage (E_BAD_ARG);
+                       }
+               }
+       }
+
+       /*
+        * Now I have to get the user name. The name will be gotten from the
+        * command line if possible. Otherwise it is figured out from the
+        * environment.
+        */
+       pw = get_my_pwent ();
+       if (NULL == pw) {
+               fprintf (stderr,
+                        _("%s: Cannot determine your user name.\n"), Prog);
+               SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+                        (unsigned long) getuid ()));
+               exit (E_NOPERM);
+       }
+       myname = xstrdup (pw->pw_name);
+       if (optind < argc) {
+               name = argv[optind];
+       } else {
+               name = myname;
+       }
+
+       /*
+        * Make sure that at most one username was specified.
+        */
+       if (argc > (optind+1)) {
+               usage (E_USAGE);
+       }
+
+       /*
+        * The -a flag requires -S, no other flags, no username, and
+        * you must be root.  --marekm
+        */
+       if (aflg) {
+               if (anyflag || !Sflg || (optind < argc)) {
+                       usage (E_USAGE);
+               }
+               if (!amroot) {
+                       fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+                       exit (E_NOPERM);
+               }
+               setpwent ();
+               while ( (pw = getpwent ()) != NULL ) {
+                       print_status (pw);
+               }
+               endpwent ();
+               exit (E_SUCCESS);
+       }
+#if 0
+       /*
+        * Allow certain users (administrators) to change passwords of
+        * certain users. Not implemented yet. --marekm
+        */
+       if (may_change_passwd (myname, name))
+               amroot = 1;
+#endif
+
+       /*
+        * If any of the flags were given, a user name must be supplied on
+        * the command line. Only an unadorned command line doesn't require
+        * the user's name be given. Also, -x, -n, -w, -i, -e, -d,
+        * -l, -u may appear with each other. -S, -k must appear alone.
+        */
+
+       /*
+        * -S now ok for normal users (check status of my own account), and
+        * doesn't require username.  --marekm
+        */
+       if (anyflag && optind >= argc) {
+               usage (E_USAGE);
+       }
+
+       if (   (Sflg && kflg)
+           || (anyflag && (Sflg || kflg))) {
+               usage (E_USAGE);
+       }
+
+       if (anyflag && !amroot) {
+               fprintf (stderr, _("%s: Permission denied.\n"), Prog);
+               exit (E_NOPERM);
+       }
+
+       pw = xgetpwnam (name);
+       if (NULL == pw) {
+               fprintf (stderr, _("%s: user '%s' does not exist\n"), Prog, name);
+               exit (E_NOPERM);
+       }
+#ifdef WITH_SELINUX
+       /* only do this check when getuid()==0 because it's a pre-condition for
+          changing a password without entering the old one */
+       if ((is_selinux_enabled() > 0) && (getuid() == 0) &&
+           (check_selinux_access (name, pw->pw_uid, PASSWD__PASSWD) != 0)) {
+               security_context_t user_context = NULL;
+               const char *user = "Unknown user context";
+               if (getprevcon (&user_context) == 0) {
+                       user = user_context;
+               }
+               SYSLOG ((LOG_ALERT,
+                        "%s is not authorized to change the password of %s",
+                        user, name));
+               fprintf(stderr,
+                       _("%s: %s is not authorized to change the password of %s\n"),
+                       Prog, user, name);
+               if (NULL != user_context) {
+                       freecon (user_context);
+               }
+               exit (E_NOPERM);
+       }
+#endif                         /* WITH_SELINUX */
+
+       /*
+        * If the UID of the user does not match the current real UID,
+        * check if I'm root.
+        */
+       if (!amroot && (pw->pw_uid != getuid ())) {
+               fprintf (stderr,
+                        _("%s: You may not view or modify password information for %s.\n"),
+                        Prog, name);
+               SYSLOG ((LOG_WARN,
+                        "%s: can't view or modify password information for %s",
+                        Prog, name));
+               closelog ();
+               exit (E_NOPERM);
+       }
+
+       if (Sflg) {
+               print_status (pw);
+               exit (E_SUCCESS);
+       }
+#ifndef USE_PAM
+       /*
+        * The user name is valid, so let's get the shadow file entry.
+        */
+       sp = getspnam (name); /* !USE_PAM, no need for xgetspnam */
+       if (NULL == sp) {
+               sp = pwd_to_spwd (pw);
+       }
+
+       cp = sp->sp_pwdp;
+
+       /*
+        * If there are no other flags, just change the password.
+        */
+       if (!anyflag) {
+               STRFCPY (crypt_passwd, cp);
+
+               /*
+                * See if the user is permitted to change the password. 
+                * Otherwise, go ahead and set a new password.
+                */
+               check_password (pw, sp);
+
+               /*
+                * Let the user know whose password is being changed.
+                */
+               if (!qflg) {
+                       printf (_("Changing password for %s\n"), name);
+               }
+
+               if (new_password (pw)) {
+                       fprintf (stderr,
+                                _("The password for %s is unchanged.\n"),
+                                name);
+                       closelog ();
+                       exit (E_NOPERM);
+               }
+               do_update_pwd = true;
+               do_update_age = true;
+       }
+#endif                         /* !USE_PAM */
+       /*
+        * Before going any further, raise the ulimit to prevent colliding
+        * into a lowered ulimit, and set the real UID to root to protect
+        * against unexpected signals. Any keyboard signals are set to be
+        * ignored.
+        */
+       pwd_init ();
+
+#ifdef USE_PAM
+       /*
+        * Don't set the real UID for PAM...
+        */
+       if (!anyflag) {
+               do_pam_passwd (name, qflg, kflg);
+               exit (E_SUCCESS);
+       }
+#endif                         /* USE_PAM */
+       if (setuid (0) != 0) {
+               fputs (_("Cannot change ID to root.\n"), stderr);
+               SYSLOG ((LOG_ERR, "can't setuid(0)"));
+               closelog ();
+               exit (E_NOPERM);
+       }
+       if (spw_file_present ()) {
+               update_shadow ();
+       } else {
+               update_noshadow ();
+       }
+
+       nscd_flush_cache ("passwd");
+       nscd_flush_cache ("group");
+
+       SYSLOG ((LOG_INFO, "password for '%s' changed by '%s'", name, myname));
+       closelog ();
+       if (!qflg) {
+               if (!anyflag) {
+#ifndef USE_PAM
+                       printf (_("%s: password changed.\n"), Prog);
+#endif                         /* USE_PAM */
+               } else {
+                       printf (_("%s: password expiry information changed.\n"), Prog);
+               }
+       }
+
+       return E_SUCCESS;
+}
+
diff --git a/src/pwck.c b/src/pwck.c
new file mode 100644 (file)
index 0000000..586fc1c
--- /dev/null
@@ -0,0 +1,721 @@
+/*
+ * Copyright (c) 1992 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001       , Michał Moskal
+ * Copyright (c) 2001 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: pwck.c 3015 2009-06-05 22:16:56Z nekral-guest $"
+
+#include <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include "chkname.h"
+#include "commonio.h"
+#include "defines.h"
+#include "prototypes.h"
+#include "pwio.h"
+#include "shadowio.h"
+#include "getdef.h"
+#include "nscd.h"
+
+/*
+ * Exit codes
+ */
+/*@-exitarg@*/
+#define        E_OKAY          0
+#define        E_USAGE         1
+#define        E_BADENTRY      2
+#define        E_CANTOPEN      3
+#define        E_CANTLOCK      4
+#define        E_CANTUPDATE    5
+#define        E_CANTSORT      6
+
+/*
+ * Global variables
+ */
+char *Prog;
+
+static const char *pwd_file = PASSWD_FILE;
+static bool use_system_pw_file = true;
+static const char *spw_file = SHADOW_FILE;
+static bool use_system_spw_file = true;
+
+static bool is_shadow = false;
+
+static bool pw_locked  = false;
+static bool spw_locked = false;
+
+/* Options */
+static bool read_only = false;
+static bool sort_mode = false;
+static bool quiet = false;             /* don't report warnings, only errors */
+
+/* local function prototypes */
+static void fail_exit (int code);
+static void usage (void);
+static void process_flags (int argc, char **argv);
+static void open_files (void);
+static void close_files (bool changed);
+static void check_pw_file (int *errors, bool *changed);
+static void check_spw_file (int *errors, bool *changed);
+
+/*
+ * fail_exit - do some cleanup and exit with the given error code
+ */
+static void fail_exit (int code)
+{
+       if (spw_locked) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+       }
+
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+
+       closelog ();
+
+       exit (code);
+}
+/*
+ * usage - print syntax message and exit
+ */
+static void usage (void)
+{
+       fprintf (stderr, _("Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"),
+                Prog);
+       exit (E_USAGE);
+}
+
+/*
+ * process_flags - parse the command line options
+ *
+ *     It will not return if an error is encountered.
+ */
+static void process_flags (int argc, char **argv)
+{
+       int arg;
+
+       /*
+        * Parse the command line arguments
+        */
+       while ((arg = getopt (argc, argv, "eqrs")) != EOF) {
+               switch (arg) {
+               case 'e':       /* added for Debian shadow-961025-2 compatibility */
+               case 'q':
+                       quiet = true;
+                       break;
+               case 'r':
+                       read_only = true;
+                       break;
+               case 's':
+                       sort_mode = true;
+                       break;
+               default:
+                       usage ();
+               }
+       }
+
+       if (sort_mode && read_only) {
+               fprintf (stderr, _("%s: -s and -r are incompatible\n"), Prog);
+               exit (E_USAGE);
+       }
+
+       /*
+        * Make certain we have the right number of arguments
+        */
+       if ((argc < optind) || (argc > (optind + 2))) {
+               usage ();
+       }
+
+       /*
+        * If there are two left over filenames, use those as the password
+        * and shadow password filenames.
+        */
+       if (optind != argc) {
+               pwd_file = argv[optind];
+               pw_setdbname (pwd_file);
+               use_system_pw_file = false;
+       }
+       if ((optind + 2) == argc) {
+               spw_file = argv[optind + 1];
+               spw_setdbname (spw_file);
+               is_shadow = true;
+               use_system_spw_file = false;
+       } else if (optind == argc) {
+               is_shadow = spw_file_present ();
+       }
+}
+
+/*
+ * open_files - open the shadow database
+ *
+ *     In read-only mode, the databases are not locked and are opened
+ *     only for reading.
+ */
+static void open_files (void)
+{
+       /*
+        * Lock the files if we aren't in "read-only" mode
+        */
+       if (!read_only) {
+               if (pw_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, pwd_file);
+                       fail_exit (E_CANTLOCK);
+               }
+               pw_locked = true;
+               if (is_shadow) {
+                       if (spw_lock () == 0) {
+                               fprintf (stderr,
+                                        _("%s: cannot lock %s; try again later.\n"),
+                                        Prog, spw_file);
+                               fail_exit (E_CANTLOCK);
+                       }
+                       spw_locked = true;
+               }
+       }
+
+       /*
+        * Open the files. Use O_RDONLY if we are in read_only mode, O_RDWR
+        * otherwise.
+        */
+       if (pw_open (read_only ? O_RDONLY : O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"),
+                        Prog, pwd_file);
+               if (use_system_pw_file) {
+                       SYSLOG ((LOG_WARN, "cannot open %s", pwd_file));
+               }
+               fail_exit (E_CANTOPEN);
+       }
+       if (is_shadow && (spw_open (read_only ? O_RDONLY : O_RDWR) == 0)) {
+               fprintf (stderr, _("%s: cannot open %s\n"),
+                        Prog, spw_file);
+               if (use_system_spw_file) {
+                       SYSLOG ((LOG_WARN, "cannot open %s", spw_file));
+               }
+               fail_exit (E_CANTOPEN);
+       }
+}
+
+/*
+ * close_files - close and unlock the password/shadow databases
+ *
+ *     If changed is not set, the databases are not closed, and no
+ *     changes are committed in the databases. The databases are
+ *     unlocked anyway.
+ */
+static void close_files (bool changed)
+{
+       /*
+        * All done. If there were no change we can just abandon any
+        * changes to the files.
+        */
+       if (changed) {
+               if (pw_close () == 0) {
+                       fprintf (stderr, _("%s: failure while writing changes to %s\n"),
+                                Prog, pwd_file);
+                       SYSLOG ((LOG_ERR, "failure while writing changes to %s", pwd_file));
+                       fail_exit (E_CANTUPDATE);
+               }
+               if (is_shadow && (spw_close () == 0)) {
+                       fprintf (stderr, _("%s: failure while writing changes to %s\n"),
+                                Prog, spw_file);
+                       SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_file));
+                       fail_exit (E_CANTUPDATE);
+               }
+       }
+
+       /*
+        * Don't be anti-social - unlock the files when you're done.
+        */
+       if (spw_locked) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+       }
+       spw_locked = false;
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+       pw_locked = false;
+}
+
+/*
+ * check_pw_file - check the content of the passwd file
+ */
+static void check_pw_file (int *errors, bool *changed)
+{
+       struct commonio_entry *pfe, *tpfe;
+       struct passwd *pwd;
+       struct spwd *spw;
+
+       /*
+        * Loop through the entire password file.
+        */
+       for (pfe = __pw_get_head (); NULL != pfe; pfe = pfe->next) {
+               /*
+                * If this is a NIS line, skip it. You can't "know" what NIS
+                * is going to do without directly asking NIS ...
+                */
+               if (('+' == pfe->line[0]) || ('-' == pfe->line[0])) {
+                       continue;
+               }
+
+               /*
+                * Start with the entries that are completely corrupt.  They
+                * have no (struct passwd) entry because they couldn't be
+                * parsed properly.
+                */
+               if (NULL == pfe->eptr) {
+                       /*
+                        * Tell the user this entire line is bogus and ask
+                        * them to delete it.
+                        */
+                       puts (_("invalid password file entry"));
+                       printf (_("delete line '%s'? "), pfe->line);
+                       *errors += 1;
+
+                       /*
+                        * prompt the user to delete the entry or not
+                        */
+                       if (!yes_or_no (read_only)) {
+                               continue;
+                       }
+
+                       /*
+                        * All password file deletions wind up here. This
+                        * code removes the current entry from the linked
+                        * list. When done, it skips back to the top of the
+                        * loop to try out the next list element.
+                        */
+                     delete_pw:
+                       SYSLOG ((LOG_INFO, "delete passwd line '%s'",
+                                pfe->line));
+                       *changed = true;
+
+                       __pw_del_entry (pfe);
+                       continue;
+               }
+
+               /*
+                * Password structure is good, start using it.
+                */
+               pwd = pfe->eptr;
+
+               /*
+                * Make sure this entry has a unique name.
+                */
+               for (tpfe = __pw_get_head (); NULL != tpfe; tpfe = tpfe->next) {
+                       const struct passwd *ent = tpfe->eptr;
+
+                       /*
+                        * Don't check this entry
+                        */
+                       if (tpfe == pfe) {
+                               continue;
+                       }
+
+                       /*
+                        * Don't check invalid entries.
+                        */
+                       if (NULL == ent) {
+                               continue;
+                       }
+
+                       if (strcmp (pwd->pw_name, ent->pw_name) != 0) {
+                               continue;
+                       }
+
+                       /*
+                        * Tell the user this entry is a duplicate of
+                        * another and ask them to delete it.
+                        */
+                       puts (_("duplicate password entry"));
+                       printf (_("delete line '%s'? "), pfe->line);
+                       *errors += 1;
+
+                       /*
+                        * prompt the user to delete the entry or not
+                        */
+                       if (yes_or_no (read_only)) {
+                               goto delete_pw;
+                       }
+               }
+
+               /*
+                * Check for invalid usernames.  --marekm
+                */
+               if (!is_valid_user_name (pwd->pw_name)) {
+                       printf (_("invalid user name '%s'\n"), pwd->pw_name);
+                       *errors += 1;
+               }
+
+               /*
+                * Check for invalid user ID.
+                */
+               if (pwd->pw_uid == (uid_t)-1) {
+                       printf (_("invalid user ID '%lu'\n"), (long unsigned int)pwd->pw_uid);
+                       *errors += 1;
+               }
+
+               /*
+                * Make sure the primary group exists
+                */
+               /* local, no need for xgetgrgid */
+               if (!quiet && (NULL == getgrgid (pwd->pw_gid))) {
+
+                       /*
+                        * No primary group, just give a warning
+                        */
+
+                       printf (_("user '%s': no group %lu\n"),
+                               pwd->pw_name, (unsigned long) pwd->pw_gid);
+                       *errors += 1;
+               }
+
+               /*
+                * Make sure the home directory exists
+                */
+               if (!quiet && (access (pwd->pw_dir, F_OK) != 0)) {
+                       /*
+                        * Home directory doesn't exist, give a warning
+                        */
+                       printf (_("user '%s': directory '%s' does not exist\n"),
+                               pwd->pw_name, pwd->pw_dir);
+                       *errors += 1;
+               }
+
+               /*
+                * Make sure the login shell is executable
+                */
+               if (   !quiet
+                   && ('\0' != pwd->pw_shell[0])
+                   && (access (pwd->pw_shell, F_OK) != 0)) {
+
+                       /*
+                        * Login shell doesn't exist, give a warning
+                        */
+                       printf (_("user '%s': program '%s' does not exist\n"),
+                               pwd->pw_name, pwd->pw_shell);
+                       *errors += 1;
+               }
+
+               /*
+                * Make sure this entry exists in the /etc/shadow file.
+                */
+
+               if (is_shadow) {
+                       spw = (struct spwd *) spw_locate (pwd->pw_name);
+                       if (NULL == spw) {
+                               printf (_("no matching password file entry in %s\n"),
+                                       spw_file);
+                               printf (_("add user '%s' in %s? "),
+                                       pwd->pw_name, spw_file);
+                               *errors += 1;
+                               if (yes_or_no (read_only)) {
+                                       struct spwd sp;
+                                       struct passwd pw;
+
+                                       sp.sp_namp   = pwd->pw_name;
+                                       sp.sp_pwdp   = pwd->pw_passwd;
+                                       sp.sp_min    =
+                                           getdef_num ("PASS_MIN_DAYS", -1);
+                                       sp.sp_max    =
+                                           getdef_num ("PASS_MAX_DAYS", -1);
+                                       sp.sp_warn   =
+                                           getdef_num ("PASS_WARN_AGE", -1);
+                                       sp.sp_inact  = -1;
+                                       sp.sp_expire = -1;
+                                       sp.sp_flag   = SHADOW_SP_FLAG_UNSET;
+                                       sp.sp_lstchg = (long) time ((time_t *) 0) / SCALE;
+                                       if (0 == sp.sp_lstchg) {
+                                               /* Better disable aging than
+                                                * requiring a password change
+                                                */
+                                               sp.sp_lstchg = -1;
+                                       }
+                                       *changed = true;
+
+                                       if (spw_update (&sp) == 0) {
+                                               fprintf (stderr,
+                                                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                                                        Prog, spw_dbname (), sp.sp_namp);
+                                               exit (E_CANTUPDATE);
+                                       }
+                                       /* remove password from /etc/passwd */
+                                       pw = *pwd;
+                                       pw.pw_passwd = SHADOW_PASSWD_STRING;    /* XXX warning: const */
+                                       if (pw_update (&pw) == 0) {
+                                               fprintf (stderr,
+                                                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                                                        Prog, pw_dbname (), pw.pw_name);
+                                               exit (E_CANTUPDATE);
+                                       }
+                               }
+                       } else {
+                               /* The passwd entry has a shadow counterpart.
+                                * Make sure no passwords are in passwd.
+                                */
+                               if (strcmp (pwd->pw_passwd, SHADOW_PASSWD_STRING) != 0) {
+                                       printf (_("user %s has an entry in %s, but its password field in %s is not set to 'x'\n"),
+                                               pwd->pw_name, spw_file, pwd_file);
+                                       *errors += 1;
+                               }
+                       }
+               }
+       }
+}
+
+/*
+ * check_spw_file - check the content of the shadowed password file (shadow)
+ */
+static void check_spw_file (int *errors, bool *changed)
+{
+       struct commonio_entry *spe, *tspe;
+       struct spwd *spw;
+
+       /*
+        * Loop through the entire shadow password file.
+        */
+       for (spe = __spw_get_head (); NULL != spe; spe = spe->next) {
+               /*
+                * Do not treat lines which were missing in shadow
+                * and were added earlier.
+                */
+               if (NULL == spe->line) {
+                       continue;
+               }
+
+               /*
+                * If this is a NIS line, skip it. You can't "know" what NIS
+                * is going to do without directly asking NIS ...
+                */
+               if (('+' == spe->line[0]) || ('-' == spe->line[0])) {
+                       continue;
+               }
+
+               /*
+                * Start with the entries that are completely corrupt. They
+                * have no (struct spwd) entry because they couldn't be
+                * parsed properly.
+                */
+               if (NULL == spe->eptr) {
+                       /*
+                        * Tell the user this entire line is bogus and ask
+                        * them to delete it.
+                        */
+                       puts (_("invalid shadow password file entry"));
+                       printf (_("delete line '%s'? "), spe->line);
+                       *errors += 1;
+
+                       /*
+                        * prompt the user to delete the entry or not
+                        */
+                       if (!yes_or_no (read_only)) {
+                               continue;
+                       }
+
+                       /*
+                        * All shadow file deletions wind up here. This code
+                        * removes the current entry from the linked list.
+                        * When done, it skips back to the top of the loop
+                        * to try out the next list element.
+                        */
+                     delete_spw:
+                       SYSLOG ((LOG_INFO, "delete shadow line '%s'",
+                                spe->line));
+                       *changed = true;
+
+                       __spw_del_entry (spe);
+                       continue;
+               }
+
+               /*
+                * Shadow password structure is good, start using it.
+                */
+               spw = spe->eptr;
+
+               /*
+                * Make sure this entry has a unique name.
+                */
+               for (tspe = __spw_get_head (); NULL != tspe; tspe = tspe->next) {
+                       const struct spwd *ent = tspe->eptr;
+
+                       /*
+                        * Don't check this entry
+                        */
+                       if (tspe == spe) {
+                               continue;
+                       }
+
+                       /*
+                        * Don't check invalid entries.
+                        */
+                       if (NULL == ent) {
+                               continue;
+                       }
+
+                       if (strcmp (spw->sp_namp, ent->sp_namp) != 0) {
+                               continue;
+                       }
+
+                       /*
+                        * Tell the user this entry is a duplicate of
+                        * another and ask them to delete it.
+                        */
+                       puts (_("duplicate shadow password entry"));
+                       printf (_("delete line '%s'? "), spe->line);
+                       *errors += 1;
+
+                       /*
+                        * prompt the user to delete the entry or not
+                        */
+                       if (yes_or_no (read_only)) {
+                               goto delete_spw;
+                       }
+               }
+
+               /*
+                * Make sure this entry exists in the /etc/passwd
+                * file.
+                */
+               if (pw_locate (spw->sp_namp) == NULL) {
+                       /*
+                        * Tell the user this entry has no matching
+                        * /etc/passwd entry and ask them to delete it.
+                        */
+                       printf (_("no matching password file entry in %s\n"),
+                               pwd_file);
+                       printf (_("delete line '%s'? "), spe->line);
+                       *errors += 1;
+
+                       /*
+                        * prompt the user to delete the entry or not
+                        */
+                       if (yes_or_no (read_only)) {
+                               goto delete_spw;
+                       }
+               }
+
+               /*
+                * Warn if last password change in the future.  --marekm
+                */
+               if (   !quiet
+                   && (spw->sp_lstchg > (long) time ((time_t *) 0) / SCALE)) {
+                       printf (_("user %s: last password change in the future\n"),
+                               spw->sp_namp);
+                       *errors += 1;
+               }
+       }
+}
+
+/*
+ * pwck - verify password file integrity
+ */
+int main (int argc, char **argv)
+{
+       int errors = 0;
+       bool changed = false;
+
+       /*
+        * Get my name so that I can use it to report errors.
+        */
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       OPENLOG ("pwck");
+
+       /* Parse the command line arguments */
+       process_flags (argc, argv);
+
+       open_files ();
+
+       if (sort_mode) {
+               if (pw_sort () != 0) {
+                       fprintf (stderr,
+                                _("%s: cannot sort entries in %s\n"),
+                                Prog, pw_dbname ());
+                       fail_exit (E_CANTSORT);
+               }
+               if (is_shadow) {
+                       if (spw_sort () != 0) {
+                               fprintf (stderr,
+                                        _("%s: cannot sort entries in %s\n"),
+                                        Prog, spw_dbname ());
+                               fail_exit (E_CANTSORT);
+                       }
+               }
+               changed = true;
+       } else {
+               check_pw_file (&errors, &changed);
+
+               if (is_shadow) {
+                       check_spw_file (&errors, &changed);
+               }
+       }
+
+       close_files (changed);
+
+       nscd_flush_cache ("passwd");
+
+       /*
+        * Tell the user what we did and exit.
+        */
+       if (0 != errors) {
+               printf (changed ?
+                       _("%s: the files have been updated\n") :
+                       _("%s: no changes\n"), Prog);
+       }
+
+       closelog ();
+       return ((0 != errors) ? E_BADENTRY : E_OKAY);
+}
+
diff --git a/src/pwconv.c b/src/pwconv.c
new file mode 100644 (file)
index 0000000..f578e80
--- /dev/null
@@ -0,0 +1,276 @@
+/*
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2009       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * pwconv - create or update /etc/shadow with information from
+ * /etc/passwd.
+ *
+ * It is more like SysV pwconv, slightly different from the original Shadow
+ * pwconv. Depends on "x" as password in /etc/passwd which means that the
+ * password has already been moved to /etc/shadow. There is no need to move
+ * /etc/npasswd to /etc/passwd, password files are updated using library
+ * routines with proper locking.
+ *
+ * Can be used to update /etc/shadow after adding/deleting users by editing
+ * /etc/passwd. There is no man page yet, but this program should be close
+ * to pwconv(1M) on Solaris 2.x.
+ *
+ * Warning: make sure that all users have "x" as the password in /etc/passwd
+ * before running this program for the first time on a system which already
+ * has shadow passwords. Anything else (like "*" from old versions of the
+ * shadow suite) will replace the user's encrypted password in /etc/shadow.
+ *
+ * Doesn't currently support pw_age information in /etc/passwd, and doesn't
+ * support DBM files. Add it if you need it...
+ *
+ */
+
+#include <config.h>
+
+#ident "$Id: pwconv.c 2851 2009-04-30 21:39:38Z nekral-guest $"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include "defines.h"
+#include "getdef.h"
+#include "prototypes.h"
+#include "pwio.h"
+#include "shadowio.h"
+#include "nscd.h"
+
+/*
+ * exit status values
+ */
+/*@-exitarg@*/
+#define E_SUCCESS      0       /* success */
+#define E_NOPERM       1       /* permission denied */
+#define E_USAGE                2       /* invalid command syntax */
+#define E_FAILURE      3       /* unexpected failure, nothing done */
+#define E_MISSING      4       /* unexpected failure, passwd file missing */
+#define E_PWDBUSY      5       /* passwd file(s) busy */
+#define E_BADENTRY     6       /* bad shadow entry */
+/*
+ * Global variables
+ */
+char *Prog;
+
+static bool spw_locked = false;
+static bool pw_locked = false;
+
+/* local function prototypes */
+static void fail_exit (int status);
+
+static void fail_exit (int status)
+{
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+
+       if (spw_locked) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+       }
+
+       exit (status);
+}
+
+int main (int argc, char **argv)
+{
+       const struct passwd *pw;
+       struct passwd pwent;
+       const struct spwd *sp;
+       struct spwd spent;
+
+       if (1 != argc) {
+               (void) fputs (_("Usage: pwconv\n"), stderr);
+       }
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       OPENLOG ("pwconv");
+
+       if (pw_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, pw_dbname ());
+               fail_exit (E_PWDBUSY);
+       }
+       pw_locked = true;
+       if (pw_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"), Prog, pw_dbname ());
+               fail_exit (E_MISSING);
+       }
+
+       if (spw_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, spw_dbname ());
+               fail_exit (E_PWDBUSY);
+       }
+       spw_locked = true;
+       if (spw_open (O_CREAT | O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"), Prog, spw_dbname ());
+               fail_exit (E_FAILURE);
+       }
+
+       /*
+        * Remove /etc/shadow entries for users not in /etc/passwd.
+        */
+       spw_rewind ();
+       while ((sp = spw_next ()) != NULL) {
+               if (pw_locate (sp->sp_namp) != NULL) {
+                       continue;
+               }
+
+               if (spw_remove (sp->sp_namp) == 0) {
+                       /*
+                        * This shouldn't happen (the entry exists) but...
+                        */
+                       fprintf (stderr,
+                                _("%s: cannot remove entry '%s' from %s\n"),
+                                Prog, sp->sp_namp, spw_dbname ());
+                       fail_exit (E_FAILURE);
+               }
+       }
+
+       /*
+        * Update shadow entries which don't have "x" as pw_passwd. Add any
+        * missing shadow entries.
+        */
+       pw_rewind ();
+       while ((pw = pw_next ()) != NULL) {
+               sp = spw_locate (pw->pw_name);
+               if (NULL != sp) {
+                       /* do we need to update this entry? */
+                       if (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) == 0) {
+                               continue;
+                       }
+                       /* update existing shadow entry */
+                       spent = *sp;
+               } else {
+                       /* add new shadow entry */
+                       memset (&spent, 0, sizeof spent);
+                       spent.sp_namp   = pw->pw_name;
+                       spent.sp_min    = getdef_num ("PASS_MIN_DAYS", -1);
+                       spent.sp_max    = getdef_num ("PASS_MAX_DAYS", -1);
+                       spent.sp_warn   = getdef_num ("PASS_WARN_AGE", -1);
+                       spent.sp_inact  = -1;
+                       spent.sp_expire = -1;
+                       spent.sp_flag   = SHADOW_SP_FLAG_UNSET;
+               }
+               spent.sp_pwdp = pw->pw_passwd;
+               spent.sp_lstchg = (long) time ((time_t *) 0) / SCALE;
+               if (0 == spent.sp_lstchg) {
+                       /* Better disable aging than requiring a password
+                        * change */
+                       spent.sp_lstchg = -1;
+               }
+               if (spw_update (&spent) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, spw_dbname (), spent.sp_namp);
+                       fail_exit (E_FAILURE);
+               }
+
+               /* remove password from /etc/passwd */
+               pwent = *pw;
+               pwent.pw_passwd = SHADOW_PASSWD_STRING; /* XXX warning: const */
+               if (pw_update (&pwent) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, pw_dbname (), pwent.pw_name);
+                       fail_exit (E_FAILURE);
+               }
+       }
+
+       if (spw_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, spw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+               fail_exit (E_FAILURE);
+       }
+       if (pw_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+               fail_exit (E_FAILURE);
+       }
+
+       /* /etc/passwd- (backup file) */
+       if (chmod (PASSWD_FILE "-", 0600) != 0) {
+               fprintf (stderr,
+                        _("%s: failed to change the mode of %s to 0600\n"),
+                        Prog, PASSWD_FILE "-");
+               SYSLOG ((LOG_ERR, "failed to change the mode of %s to 0600", PASSWD_FILE "-"));
+               /* continue */
+       }
+
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+
+       if (spw_locked) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+       }
+
+       nscd_flush_cache ("passwd");
+
+       return E_SUCCESS;
+}
+
diff --git a/src/pwunconv.c b/src/pwunconv.c
new file mode 100644 (file)
index 0000000..e14eeac
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2001 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2008       , Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: pwunconv.c 2852 2009-04-30 21:44:35Z nekral-guest $"
+
+#include <fcntl.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include "defines.h"
+#include "nscd.h"
+#include "prototypes.h"
+#include "pwio.h"
+#include "shadowio.h"
+
+/*
+ * Global variables
+ */
+char *Prog;
+
+static bool spw_locked = false;
+static bool pw_locked = false;
+
+/* local function prototypes */
+static void fail_exit (int status);
+
+static void fail_exit (int status)
+{
+       if (spw_locked) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+       }
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+       exit (status);
+}
+
+
+int main (int argc, char **argv)
+{
+       const struct passwd *pw;
+       struct passwd pwent;
+       const struct spwd *spwd;
+
+       if (1 != argc) {
+               (void) fputs (_("Usage: pwunconv\n"), stderr);
+       }
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       OPENLOG ("pwunconv");
+
+       if (!spw_file_present ()) {
+               /* shadow not installed, do nothing */
+               exit (0);
+       }
+
+       if (pw_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, pw_dbname ());
+               fail_exit (5);
+       }
+       pw_locked = true;
+       if (pw_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"),
+                        Prog, pw_dbname ());
+               fail_exit (1);
+       }
+
+       if (spw_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, spw_dbname ());
+               fail_exit (5);
+       }
+       spw_locked = true;
+       if (spw_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"),
+                        Prog, spw_dbname ());
+               fail_exit (1);
+       }
+
+       pw_rewind ();
+       while ((pw = pw_next ()) != NULL) {
+               spwd = spw_locate (pw->pw_name);
+               if (NULL == spwd) {
+                       continue;
+               }
+
+               pwent = *pw;
+
+               /*
+                * Update password if non-shadow is "x".
+                */
+               if (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) == 0) {
+                       pwent.pw_passwd = spwd->sp_pwdp;
+               }
+
+               /*
+                * Password aging works differently in the two different
+                * systems. With shadow password files you apparently must
+                * have some aging information. The maxweeks or minweeks
+                * may not map exactly. In pwconv we set max == 10000,
+                * which is about 30 years. Here we have to undo that
+                * kludge. So, if maxdays == 10000, no aging information is
+                * put into the new file. Otherwise, the days are converted
+                * to weeks and so on.
+                */
+               if (pw_update (&pwent) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, pw_dbname (), pwent.pw_name);
+                       fail_exit (3);
+               }
+       }
+
+       if (spw_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, spw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+               fail_exit (3);
+       }
+
+       if (pw_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+               fail_exit (3);
+       }
+
+       if (unlink (SHADOW) != 0) {
+               fprintf (stderr,
+                        _("%s: cannot delete %s\n"), Prog, SHADOW);
+               SYSLOG ((LOG_ERR, "cannot delete %s", SHADOW));
+               fail_exit (3);
+       }
+
+       if (spw_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+               /* continue */
+       }
+       if (pw_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+               /* continue */
+       }
+
+       nscd_flush_cache ("passwd");
+
+       return 0;
+}
+
diff --git a/src/su.c b/src/su.c
new file mode 100644 (file)
index 0000000..fc675e2
--- /dev/null
+++ b/src/su.c
@@ -0,0 +1,1007 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Some parts substantially derived from an ancestor of:
+   su for GNU.  Run a shell with substitute user and group IDs.
+
+   Copyright (C) 1992-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+
+#include <config.h>
+
+#ident "$Id: su.c 3035 2009-07-22 13:35:57Z nekral-guest $"
+
+#include <getopt.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "prototypes.h"
+#include "defines.h"
+#include "pwauth.h"
+#include "getdef.h"
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif                         /* USE_PAM */
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Assorted #defines to control su's behavior
+ */
+/*
+ * Global variables
+ */
+char *Prog;
+
+/* not needed by sulog.c anymore */
+static char name[BUFSIZ];
+static char oldname[BUFSIZ];
+
+/* If nonzero, change some environment vars to indicate the user su'd to. */
+static bool change_environment;
+
+#ifdef USE_PAM
+static pam_handle_t *pamh = NULL;
+static bool caught = false;
+#endif
+
+extern struct passwd pwent;
+
+/*
+ * External identifiers
+ */
+
+extern char **newenvp;
+extern char **environ;
+extern size_t newenvc;
+
+/* local function prototypes */
+
+#ifndef USE_PAM
+
+static RETSIGTYPE die (int);
+static int iswheel (const char *);
+
+/*
+ * die - set or reset termio modes.
+ *
+ *     die() is called before processing begins. signal() is then called
+ *     with die() as the signal handler. If signal later calls die() with a
+ *     signal number, the terminal modes are then reset.
+ */
+static RETSIGTYPE die (int killed)
+{
+       static TERMIO sgtty;
+
+       if (killed)
+               STTY (0, &sgtty);
+       else
+               GTTY (0, &sgtty);
+
+       if (killed) {
+               closelog ();
+               exit (killed);
+       }
+}
+
+static int iswheel (const char *username)
+{
+       struct group *grp;
+
+       grp = getgrnam ("wheel"); /* !USE_PAM, no need for xgetgrnam */
+       if (   (NULL ==grp)
+           || (NULL == grp->gr_mem)) {
+               return 0;
+       }
+       return is_on_list (grp->gr_mem, username);
+}
+#endif                         /* !USE_PAM */
+
+/* borrowed from GNU sh-utils' "su.c" */
+static bool restricted_shell (const char *shellstr)
+{
+       char *line;
+
+       setusershell ();
+       while ((line = getusershell ()) != NULL) {
+               if (('#' != *line) && (strcmp (line, shellstr) == 0)) {
+                       endusershell ();
+                       return false;
+               }
+       }
+       endusershell ();
+       return true;
+}
+
+static void su_failure (const char *tty)
+{
+       sulog (tty, false, oldname, name);      /* log failed attempt */
+#ifdef USE_SYSLOG
+       if (getdef_bool ("SYSLOG_SU_ENAB")) {
+               SYSLOG (((0 != pwent.pw_uid) ? LOG_INFO : LOG_NOTICE,
+                        "- %s %s:%s", tty,
+                        ('\0' != oldname[0]) ? oldname : "???",
+                        ('\0' != name[0]) ? name : "???"));
+       }
+       closelog ();
+#endif
+       exit (1);
+}
+
+/*
+ * execve_shell - Execute a shell with execve, or interpret it with
+ * /bin/sh
+ */
+void execve_shell (const char *shellstr, char *args[], char *const envp[])
+{
+       int err;
+       (void) execve (shellstr, (char **) args, envp);
+       err = errno;
+
+       if (access (shellstr, R_OK|X_OK) == 0) {
+               /*
+                * Assume this is a shell script (with no shebang).
+                * Interpret it with /bin/sh
+                */
+               size_t n_args = 0;
+               char **targs;
+               while (NULL != args[n_args]) {
+                       n_args++;
+               }
+               targs = (char **) xmalloc ((n_args + 3) * sizeof (args[0]));
+               targs[0] = "sh";
+               targs[1] = "-";
+               targs[2] = xstrdup (shellstr);
+               targs[n_args+2] = NULL;
+               while (1 != n_args) {
+                       targs[n_args+1] = args[n_args - 1];
+                       n_args--;
+               }
+
+               (void) execve (SHELL, targs, envp);
+       } else {
+               errno = err;
+       }
+}
+
+#ifdef USE_PAM
+/* Signal handler for parent process later */
+static void catch_signals (unused int sig)
+{
+       caught = true;
+}
+
+/* This I ripped out of su.c from sh-utils after the Mandrake pam patch
+ * have been applied.  Some work was needed to get it integrated into
+ * su.c from shadow.
+ */
+static void run_shell (const char *shellstr, char *args[], bool doshell,
+                      char *const envp[])
+{
+       pid_t child;
+       sigset_t ourset;
+       int status;
+       int ret;
+
+       child = fork ();
+       if (child == 0) {       /* child shell */
+               /*
+                * PAM_DATA_SILENT is not supported by some modules, and
+                * there is no strong need to clean up the process space's
+                * memory since we will either call exec or exit.
+               pam_end (pamh, PAM_SUCCESS | PAM_DATA_SILENT);
+                */
+
+               if (doshell) {
+                       (void) shell (shellstr, (char *) args[0], envp);
+               } else {
+                       execve_shell (shellstr, (char **) args, envp);
+               }
+
+               exit (errno == ENOENT ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+       } else if ((pid_t)-1 == child) {
+               (void) fprintf (stderr, "%s: Cannot fork user shell\n", Prog);
+               SYSLOG ((LOG_WARN, "Cannot execute %s", shellstr));
+               closelog ();
+               exit (1);
+       }
+       /* parent only */
+       sigfillset (&ourset);
+       if (sigprocmask (SIG_BLOCK, &ourset, NULL) != 0) {
+               (void) fprintf (stderr, "%s: signal malfunction\n", Prog);
+               caught = true;
+       }
+       if (!caught) {
+               struct sigaction action;
+
+               action.sa_handler = catch_signals;
+               sigemptyset (&action.sa_mask);
+               action.sa_flags = 0;
+               sigemptyset (&ourset);
+
+               if (   (sigaddset (&ourset, SIGTERM) != 0)
+                   || (sigaddset (&ourset, SIGALRM) != 0)
+                   || (sigaction (SIGTERM, &action, NULL) != 0)
+                   || (sigprocmask (SIG_UNBLOCK, &ourset, NULL) != 0)
+                   ) {
+                       fprintf (stderr,
+                                "%s: signal masking malfunction\n", Prog);
+                       caught = true;
+               }
+       }
+
+       if (!caught) {
+               do {
+                       pid_t pid;
+
+                       pid = waitpid (-1, &status, WUNTRACED);
+
+                       if (((pid_t)-1 != pid) && (0 != WIFSTOPPED (status))) {
+                               /* The child (shell) was suspended.
+                                * Suspend su. */
+                               kill (getpid (), WSTOPSIG(status));
+                               /* wake child when resumed */
+                               kill (pid, SIGCONT);
+                       }
+               } while (0 != WIFSTOPPED (status));
+       }
+
+       if (caught) {
+               fprintf (stderr, "\nSession terminated, killing shell...");
+               kill (child, SIGTERM);
+       }
+
+       ret = pam_close_session (pamh, 0);
+       if (PAM_SUCCESS != ret) {
+               SYSLOG ((LOG_ERR, "pam_close_session: %s",
+                        pam_strerror (pamh, ret)));
+               fprintf (stderr, _("%s: %s\n"), Prog, pam_strerror (pamh, ret));
+               (void) pam_end (pamh, ret);
+               exit (1);
+       }
+
+       ret = pam_end (pamh, PAM_SUCCESS);
+
+       if (caught) {
+               sleep (2);
+               kill (child, SIGKILL);
+               fprintf (stderr, " ...killed.\n");
+               exit (-1);
+       }
+
+       exit ((0 != WIFEXITED (status)) ? WEXITSTATUS (status)
+                                       : WTERMSIG (status) + 128);
+}
+#endif
+
+/*
+ * usage - print command line syntax and exit
+  */
+static void usage (void)
+{
+       fputs (_("Usage: su [options] [LOGIN]\n"
+                "\n"
+                "Options:\n"
+                "  -c, --command COMMAND         pass COMMAND to the invoked shell\n"
+                "  -h, --help                    display this help message and exit\n"
+                "  -, -l, --login                make the shell a login shell\n"
+                "  -m, -p,\n"
+                "  --preserve-environment        do not reset environment variables, and\n"
+                "                                keep the same shell\n"
+                "  -s, --shell SHELL             use SHELL instead of the default in passwd\n"
+                "\n"), stderr);
+       exit (E_USAGE);
+}
+
+/*
+ * su - switch user id
+ *
+ *     su changes the user's ids to the values for the specified user.  if
+ *     no new user name is specified, "root" or UID 0 is used by default.
+ *
+ *     Any additional arguments are passed to the user's shell. In
+ *     particular, the argument "-c" will cause the next argument to be
+ *     interpreted as a command by the common shell programs.
+ */
+int main (int argc, char **argv)
+{
+       const char *cp;
+       const char *tty = NULL; /* Name of tty SU is run from        */
+       bool doshell = false;
+       bool fakelogin = false;
+       bool amroot = false;
+       uid_t my_uid;
+       struct passwd *pw = NULL;
+       char **envp = environ;
+       char *shellstr = NULL;
+       char *command = NULL;
+
+#ifdef USE_PAM
+       char **envcp;
+       int ret;
+#else                          /* !USE_PAM */
+       int err = 0;
+
+       RETSIGTYPE (*oldsig) (int);
+       int is_console = 0;
+
+       struct spwd *spwd = 0;
+
+#ifdef SU_ACCESS
+       char *oldpass;
+#endif
+#endif                         /* !USE_PAM */
+
+       sanitize_env ();
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       change_environment = true;
+
+       /*
+        * Get the program name. The program name is used as a prefix to
+        * most error messages.
+        */
+       Prog = Basename (argv[0]);
+
+       OPENLOG ("su");
+
+       /*
+        * Process the command line arguments. 
+        */
+
+       {
+               /*
+                * Parse the command line options.
+                */
+               int option_index = 0;
+               int c;
+               static struct option long_options[] = {
+                       {"command", required_argument, NULL, 'c'},
+                       {"help", no_argument, NULL, 'h'},
+                       {"login", no_argument, NULL, 'l'},
+                       {"preserve-environment", no_argument, NULL, 'p'},
+                       {"shell", required_argument, NULL, 's'},
+                       {NULL, 0, NULL, '\0'}
+               };
+
+               while ((c =
+                       getopt_long (argc, argv, "c:hlmps:", long_options,
+                                    &option_index)) != -1) {
+                       switch (c) {
+                       case 'c':
+                               command = optarg;
+                               break;
+                       case 'h':
+                               usage ();
+                               break;
+                       case 'l':
+                               fakelogin = true;
+                               break;
+                       case 'm':
+                       case 'p':
+                               /* This will only have an effect if the target
+                                * user do not have a restricted shell, or if
+                                * su is called by root.
+                                */
+                               change_environment = false;
+                               break;
+                       case 's':
+                               shellstr = optarg;
+                               break;
+                       default:
+                               usage ();       /* NOT REACHED */
+                       }
+               }
+
+               if ((optind < argc) && (strcmp (argv[optind], "-") == 0)) {
+                       fakelogin = true;
+                       optind++;
+                       if (   (optind < argc)
+                           && (strcmp (argv[optind], "--") == 0)) {
+                               optind++;
+                       }
+               }
+       }
+
+       initenv ();
+
+       my_uid = getuid ();
+       amroot = (my_uid == 0);
+
+       /*
+        * Get the tty name. Entries will be logged indicating that the user
+        * tried to change to the named new user from the current terminal.
+        */
+       tty = ttyname (0);
+       if ((isatty (0) != 0) && (NULL != tty)) {
+#ifndef USE_PAM
+               is_console = console (tty);
+#endif
+       } else {
+               /*
+                * Be more paranoid, like su from SimplePAMApps.  --marekm
+                */
+               if (!amroot) {
+                       fprintf (stderr,
+                                _("%s: must be run from a terminal\n"), Prog);
+                       exit (1);
+               }
+               tty = "???";
+       }
+
+       /*
+        * The next argument must be either a user ID, or some flag to a
+        * subshell. Pretty sticky since you can't have an argument which
+        * doesn't start with a "-" unless you specify the new user name.
+        * Any remaining arguments will be passed to the user's login shell.
+        */
+       if ((optind < argc) && ('-' != argv[optind][0])) {
+               STRFCPY (name, argv[optind++]); /* use this login id */
+               if ((optind < argc) && (strcmp (argv[optind], "--") == 0)) {
+                       optind++;
+               }
+       }
+       if ('\0' == name[0]) {          /* use default user */
+               struct passwd *root_pw = getpwnam ("root");
+               if ((NULL != root_pw) && (0 == root_pw->pw_uid)) {
+                       (void) strcpy (name, "root");
+               } else {
+                       root_pw = getpwuid (0);
+                       if (NULL == root_pw) {
+                               SYSLOG ((LOG_CRIT, "There is no UID 0 user."));
+                               su_failure (tty);
+                       }
+                       (void) strcpy (name, root_pw->pw_name);
+               }
+       }
+
+       doshell = (argc == optind);     /* any arguments remaining? */
+       if (NULL != command) {
+               doshell = false;
+       }
+
+       /*
+        * Get the user's real name. The current UID is used to determine
+        * who has executed su. That user ID must exist.
+        */
+       pw = get_my_pwent ();
+       if (NULL == pw) {
+               fprintf (stderr, _("%s: Cannot determine your user name.\n"),
+                        Prog);
+               SYSLOG ((LOG_WARN, "Cannot determine the user name of the caller (UID %lu)",
+                        (unsigned long) my_uid));
+               su_failure (tty);
+       }
+       STRFCPY (oldname, pw->pw_name);
+
+#ifndef USE_PAM
+#ifdef SU_ACCESS
+       /*
+        * Sort out the password of user calling su, in case needed later
+        * -- chris
+        */
+       spwd = getspnam (oldname); /* !USE_PAM, no need for xgetspnam */
+       if (NULL != spwd) {
+               pw->pw_passwd = spwd->sp_pwdp;
+       }
+       oldpass = xstrdup (pw->pw_passwd);
+#endif                         /* SU_ACCESS */
+
+#else                          /* USE_PAM */
+       ret = pam_start ("su", name, &conv, &pamh);
+       if (PAM_SUCCESS != ret) {
+               SYSLOG ((LOG_ERR, "pam_start: error %d", ret);
+                       fprintf (stderr, _("%s: pam_start: error %d\n"),
+                                Prog, ret));
+               exit (1);
+       }
+
+       ret = pam_set_item (pamh, PAM_TTY, (const void *) tty);
+       if (PAM_SUCCESS == ret) {
+               ret = pam_set_item (pamh, PAM_RUSER, (const void *) oldname);
+       }
+       if (PAM_SUCCESS != ret) {
+               SYSLOG ((LOG_ERR, "pam_set_item: %s",
+                        pam_strerror (pamh, ret)));
+               fprintf (stderr, _("%s: %s\n"), Prog, pam_strerror (pamh, ret));
+               pam_end (pamh, ret);
+               exit (1);
+       }
+#endif                         /* USE_PAM */
+
+      top:
+       /*
+        * This is the common point for validating a user whose name is
+        * known. It will be reached either by normal processing, or if the
+        * user is to be logged into a subsystem root.
+        *
+        * The password file entries for the user is gotten and the account
+        * validated.
+        */
+       pw = xgetpwnam (name);
+       if (NULL == pw) {
+               (void) fprintf (stderr, _("Unknown id: %s\n"), name);
+               closelog ();
+               exit (1);
+       }
+#ifndef USE_PAM
+       spwd = NULL;
+       if (strcmp (pw->pw_passwd, SHADOW_PASSWD_STRING) == 0) {
+               spwd = getspnam (name); /* !USE_PAM, no need for xgetspnam */
+               if (NULL != spwd) {
+                       pw->pw_passwd = spwd->sp_pwdp;
+               }
+       }
+#endif                         /* !USE_PAM */
+       pwent = *pw;
+
+       /* If su is not called by root, and the target user has a restricted
+        * shell, the environment must be changed.
+        */
+       change_environment |= (restricted_shell (pwent.pw_shell) && !amroot);
+
+       /*
+        * If a new login is being set up, the old environment will be
+        * ignored and a new one created later on.
+        * (note: in the case of a subsystem, the shell will be restricted,
+        *        and this won't be executed on the first pass)
+        */
+       if (change_environment && fakelogin) {
+               /*
+                * The terminal type will be left alone if it is present in
+                * the environment already.
+                */
+               cp = getenv ("TERM");
+               if (NULL != cp) {
+                       addenv ("TERM", cp);
+               }
+
+               /*
+                * For some terminals COLORTERM seems to be the only way
+                * for checking for that specific terminal. For instance,
+                * gnome-terminal sets its TERM as "xterm" but its
+                * COLORTERM as "gnome-terminal". The COLORTERM variable
+                * is also of use when running GNU screen since it sets
+                * TERM to "screen" but doesn't touch COLORTERM.
+                */
+               cp = getenv ("COLORTERM");
+               if (NULL != cp) {
+                       addenv ("COLORTERM", cp);
+               }
+
+#ifndef USE_PAM
+               cp = getdef_str ("ENV_TZ");
+               if (NULL != cp) {
+                       addenv (('/' == *cp) ? tz (cp) : cp, NULL);
+               }
+
+               /*
+                * The clock frequency will be reset to the login value if required
+                */
+               cp = getdef_str ("ENV_HZ");
+               if (NULL != cp) {
+                       addenv (cp, NULL);      /* set the default $HZ, if one */
+               }
+#endif                         /* !USE_PAM */
+
+               /*
+                * Also leave DISPLAY and XAUTHORITY if present, else
+                * pam_xauth will not work.
+                */
+               cp = getenv ("DISPLAY");
+               if (NULL != cp) {
+                       addenv ("DISPLAY", cp);
+               }
+               cp = getenv ("XAUTHORITY");
+               if (NULL != cp) {
+                       addenv ("XAUTHORITY", cp);
+               }
+       } else {
+               while (NULL != *envp) {
+                       addenv (*envp, NULL);
+                       envp++;
+               }
+       }
+
+#ifndef USE_PAM
+       /*
+        * BSD systems only allow "wheel" to SU to root. USG systems don't,
+        * so we make this a configurable option.
+        */
+
+       /* The original Shadow 3.3.2 did this differently. Do it like BSD:
+        *
+        * - check for UID 0 instead of name "root" - there are systems with
+        *   several root accounts under different names,
+        *
+        * - check the contents of /etc/group instead of the current group
+        *   set (you must be listed as a member, GID 0 is not sufficient).
+        *
+        * In addition to this traditional feature, we now have complete su
+        * access control (allow, deny, no password, own password).  Thanks
+        * to Chris Evans <lady0110@sable.ox.ac.uk>.
+        */
+
+       if (!amroot) {
+               if (   (0 == pwent.pw_uid)
+                   && getdef_bool ("SU_WHEEL_ONLY")
+                   && !iswheel (oldname)) {
+                       fprintf (stderr,
+                                _("You are not authorized to su %s\n"), name);
+                       exit (1);
+               }
+#ifdef SU_ACCESS
+               switch (check_su_auth (oldname, name)) {
+               case 0: /* normal su, require target user's password */
+                       break;
+               case 1: /* require no password */
+                       pwent.pw_passwd = "";   /* XXX warning: const */
+                       break;
+               case 2: /* require own password */
+                       puts (_("(Enter your own password)"));
+                       pwent.pw_passwd = oldpass;
+                       break;
+               default:        /* access denied (-1) or unexpected value */
+                       fprintf (stderr,
+                                _("You are not authorized to su %s\n"), name);
+                       exit (1);
+               }
+#endif                         /* SU_ACCESS */
+       }
+#endif                         /* !USE_PAM */
+
+       /* If the user do not want to change the environment,
+        * use the current SHELL.
+        * (unless another shell is required by the command line)
+        */
+       if ((NULL == shellstr) && !change_environment) {
+               shellstr = getenv ("SHELL");
+       }
+       /* For users with non null UID, if this user has a restricted
+        * shell, the shell must be the one specified in /etc/passwd
+        */
+       if (   (NULL != shellstr)
+           && !amroot
+           && restricted_shell (pwent.pw_shell)) {
+               shellstr = NULL;
+       }
+       /* If the shell is not set at this time, use the shell specified
+        * in /etc/passwd.
+        */
+       if (NULL == shellstr) {
+               shellstr = (char *) strdup (pwent.pw_shell);
+       }
+
+       /*
+        * Set the default shell.
+        */
+       if ((NULL == shellstr) || ('\0' == shellstr[0])) {
+               shellstr = SHELL;
+       }
+
+       (void) signal (SIGINT, SIG_IGN);
+       (void) signal (SIGQUIT, SIG_IGN);
+#ifdef USE_PAM
+       ret = pam_authenticate (pamh, 0);
+       if (PAM_SUCCESS != ret) {
+               SYSLOG ((LOG_ERR, "pam_authenticate: %s",
+                        pam_strerror (pamh, ret)));
+               fprintf (stderr, _("%s: %s\n"), Prog, pam_strerror (pamh, ret));
+               (void) pam_end (pamh, ret);
+               su_failure (tty);
+       }
+
+       ret = pam_acct_mgmt (pamh, 0);
+       if (PAM_SUCCESS != ret) {
+               if (amroot) {
+                       fprintf (stderr, _("%s: %s\n(Ignored)\n"), Prog,
+                                pam_strerror (pamh, ret));
+               } else if (PAM_NEW_AUTHTOK_REQD == ret) {
+                       ret = pam_chauthtok (pamh, PAM_CHANGE_EXPIRED_AUTHTOK);
+                       if (PAM_SUCCESS != ret) {
+                               SYSLOG ((LOG_ERR, "pam_chauthtok: %s",
+                                        pam_strerror (pamh, ret)));
+                               fprintf (stderr, _("%s: %s\n"), Prog,
+                                        pam_strerror (pamh, ret));
+                               (void) pam_end (pamh, ret);
+                               su_failure (tty);
+                       }
+               } else {
+                       SYSLOG ((LOG_ERR, "pam_acct_mgmt: %s",
+                                pam_strerror (pamh, ret)));
+                       fprintf (stderr, _("%s: %s\n"), Prog,
+                                pam_strerror (pamh, ret));
+                       (void) pam_end (pamh, ret);
+                       su_failure (tty);
+               }
+       }
+#else                          /* !USE_PAM */
+       /*
+        * Set up a signal handler in case the user types QUIT.
+        */
+       die (0);
+       oldsig = signal (SIGQUIT, die);
+
+       /*
+        * See if the system defined authentication method is being used. 
+        * The first character of an administrator defined method is an '@'
+        * character.
+        */
+       if (!amroot && pw_auth (pwent.pw_passwd, name, PW_SU, (char *) 0)) {
+               SYSLOG ((pwent.pw_uid ? LOG_NOTICE : LOG_WARN,
+                        "Authentication failed for %s", name));
+               fprintf(stderr, _("%s: Authentication failure\n"), Prog);
+               su_failure (tty);
+       }
+       (void) signal (SIGQUIT, oldsig);
+
+       /*
+        * Check to see if the account is expired. root gets to ignore any
+        * expired accounts, but normal users can't become a user with an
+        * expired password.
+        */
+       if (!amroot) {
+               if (NULL == spwd) {
+                       spwd = pwd_to_spwd (&pwent);
+               }
+
+               if (expire (&pwent, spwd)) {
+                       /* !USE_PAM, no need for xgetpwnam */
+                       struct passwd *pwd = getpwnam (name);
+
+                       /* !USE_PAM, no need for xgetspnam */
+                       spwd = getspnam (name);
+                       if (NULL != pwd) {
+                               pwent = *pwd;
+                       }
+               }
+       }
+
+       /*
+        * Check to see if the account permits "su". root gets to ignore any
+        * restricted accounts, but normal users can't become a user if
+        * there is a "SU" entry in the /etc/porttime file denying access to
+        * the account.
+        */
+       if (!amroot) {
+               if (!isttytime (pwent.pw_name, "SU", time ((time_t *) 0))) {
+                       SYSLOG (((0 != pwent.pw_uid) ? LOG_WARN : LOG_CRIT,
+                                "SU by %s to restricted account %s",
+                                oldname, name));
+                       fprintf(stderr,
+                               _("%s: You are not authorized to su at that time\n"), Prog);
+                       su_failure (tty);
+               }
+       }
+#endif                         /* !USE_PAM */
+
+       (void) signal (SIGINT, SIG_DFL);
+       (void) signal (SIGQUIT, SIG_DFL);
+
+       cp = getdef_str ((pwent.pw_uid == 0) ? "ENV_SUPATH" : "ENV_PATH");
+       if (NULL == cp) {
+               addenv ("PATH=/bin:/usr/bin", NULL);
+       } else if (strchr (cp, '=') != NULL) {
+               addenv (cp, NULL);
+       } else {
+               addenv ("PATH", cp);
+       }
+
+       if (getenv ("IFS") != NULL) {   /* don't export user IFS ... */
+               addenv ("IFS= \t\n", NULL);     /* ... instead, set a safe IFS */
+       }
+
+       /*
+        * Even if --shell is specified, the subsystem login test is based on
+        * the shell specified in /etc/passwd (not the one specified with
+        * --shell, which will be the one executed in the chroot later).
+        */
+       if ('*' == pwent.pw_shell[0]) { /* subsystem root required */
+               pwent.pw_shell++;       /* skip the '*' */
+               subsystem (&pwent);     /* figure out what to execute */
+               endpwent ();
+               endspent ();
+               goto top;
+       }
+
+       sulog (tty, true, oldname, name);       /* save SU information */
+       endpwent ();
+       endspent ();
+#ifdef USE_SYSLOG
+       if (getdef_bool ("SYSLOG_SU_ENAB")) {
+               SYSLOG ((LOG_INFO, "+ %s %s:%s", tty,
+                        ('\0' != oldname[0]) ? oldname : "???",
+                        ('\0' != name[0]) ? name : "???"));
+       }
+#endif
+
+#ifdef USE_PAM
+       /* set primary group id and supplementary groups */
+       if (setup_groups (&pwent) != 0) {
+               pam_end (pamh, PAM_ABORT);
+               exit (1);
+       }
+
+       /*
+        * pam_setcred() may do things like resource limits, console groups,
+        * and much more, depending on the configured modules
+        */
+       ret = pam_setcred (pamh, PAM_ESTABLISH_CRED);
+       if (PAM_SUCCESS != ret) {
+               SYSLOG ((LOG_ERR, "pam_setcred: %s", pam_strerror (pamh, ret)));
+               fprintf (stderr, _("%s: %s\n"), Prog, pam_strerror (pamh, ret));
+               (void) pam_end (pamh, ret);
+               exit (1);
+       }
+
+       ret = pam_open_session (pamh, 0);
+       if (PAM_SUCCESS != ret) {
+               SYSLOG ((LOG_ERR, "pam_open_session: %s",
+                        pam_strerror (pamh, ret)));
+               fprintf (stderr, _("%s: %s\n"), Prog, pam_strerror (pamh, ret));
+               pam_setcred (pamh, PAM_DELETE_CRED);
+               (void) pam_end (pamh, ret);
+               exit (1);
+       }
+
+       if (change_environment) {
+               /* we need to setup the environment *after* pam_open_session(),
+                * else the UID is changed before stuff like pam_xauth could
+                * run, and we cannot access /etc/shadow and co
+                */
+               environ = newenvp;      /* make new environment active */
+
+               /* update environment with all pam set variables */
+               envcp = pam_getenvlist (pamh);
+               if (NULL != envcp) {
+                       while (NULL != *envcp) {
+                               addenv (*envcp, NULL);
+                               envcp++;
+                       }
+               }
+       }
+
+       /* become the new user */
+       if (change_uid (&pwent) != 0) {
+               pam_close_session (pamh, 0);
+               pam_setcred (pamh, PAM_DELETE_CRED);
+               (void) pam_end (pamh, PAM_ABORT);
+               exit (1);
+       }
+#else                          /* !USE_PAM */
+       environ = newenvp;      /* make new environment active */
+
+       /* no limits if su from root (unless su must fake login's behavior) */
+       if (!amroot || fakelogin) {
+               setup_limits (&pwent);
+       }
+
+       if (setup_uid_gid (&pwent, is_console) != 0) {
+               exit (1);
+       }
+#endif                         /* !USE_PAM */
+
+       if (change_environment) {
+               if (fakelogin) {
+                       pwent.pw_shell = shellstr;
+                       setup_env (&pwent);
+               } else {
+                       addenv ("HOME", pwent.pw_dir);
+                       addenv ("USER", pwent.pw_name);
+                       addenv ("LOGNAME", pwent.pw_name);
+                       addenv ("SHELL", shellstr);
+               }
+       }
+
+       /*
+        * This is a workaround for Linux libc bug/feature (?) - the
+        * /dev/log file descriptor is open without the close-on-exec flag
+        * and used to be passed to the new shell. There is "fcntl(LogFile,
+        * F_SETFD, 1)" in libc/misc/syslog.c, but it is commented out (at
+        * least in 5.4.33). Why?  --marekm
+        */
+       closelog ();
+
+       /*
+        * See if the user has extra arguments on the command line. In that
+        * case they will be provided to the new user's shell as arguments.
+        */
+       if (fakelogin) {
+               char *arg0;
+
+               cp = getdef_str ("SU_NAME");
+               if (NULL == cp) {
+                       cp = Basename (shellstr);
+               }
+
+               arg0 = xmalloc (strlen (cp) + 2);
+               arg0[0] = '-';
+               strcpy (arg0 + 1, cp);
+               cp = arg0;
+       } else {
+               cp = Basename (shellstr);
+       }
+
+       if (!doshell) {
+               /* Position argv to the remaining arguments */
+               argv += optind;
+               if (NULL != command) {
+                       argv -= 2;
+                       argv[0] = "-c";
+                       argv[1] = command;
+               }
+               /*
+                * Use the shell and create an argv
+                * with the rest of the command line included.
+                */
+               argv[-1] = shellstr;
+#ifndef USE_PAM
+               execve_shell (shellstr, &argv[-1], environ);
+               err = errno;
+               (void) fputs (_("No shell\n"), stderr);
+               SYSLOG ((LOG_WARN, "Cannot execute %s", shellstr));
+               closelog ();
+               exit ((ENOENT == err) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+#else
+               run_shell (shellstr, &argv[-1], false, environ); /* no return */
+#endif
+       }
+#ifndef USE_PAM
+       err = shell (shellstr, cp, environ);
+       exit ((ENOENT == err) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+#else
+       run_shell (shellstr, &cp, true, environ);
+#endif
+       /* NOT REACHED */
+       exit (1);
+}
+
diff --git a/src/suauth.c b/src/suauth.c
new file mode 100644 (file)
index 0000000..a2c6735
--- /dev/null
@@ -0,0 +1,242 @@
+/*
+ * Copyright (c) 1990 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2005, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+#include <errno.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include "defines.h"
+#include "prototypes.h"
+
+#ifndef SUAUTHFILE
+#define SUAUTHFILE "/etc/suauth"
+#endif
+
+#define        NOACTION        0
+#define        NOPWORD         1
+#define        DENY            -1
+#define        OWNPWORD        2
+
+/*
+ * Global variables
+ */
+struct passwd pwent;
+
+#ifdef SU_ACCESS
+
+/* Really, I could do with a few const char's here defining all the 
+ * strings output to the user or the syslog. -- chris
+ */
+static int applies (const char *, char *);
+
+static int isgrp (const char *, const char *);
+
+static int lines = 0;
+
+
+int check_su_auth (const char *actual_id, const char *wanted_id)
+{
+       int posn, endline;
+       const char field[] = ":";
+       FILE *authfile_fd;
+       char temp[1024];
+       char *to_users;
+       char *from_users;
+       char *action;
+
+       if (!(authfile_fd = fopen (SUAUTHFILE, "r"))) {
+               int err = errno;
+               /*
+                * If the file doesn't exist - default to the standard su
+                * behaviour (no access control).  If open fails for some
+                * other reason - maybe someone is trying to fool us with
+                * file descriptors limit etc., so deny access.  --marekm
+                */
+               if (ENOENT == err) {
+                       return NOACTION;
+               }
+               SYSLOG ((LOG_ERR,
+                        "could not open/read config file '%s': %s\n",
+                        SUAUTHFILE, strerror (err)));
+               return DENY;
+       }
+
+       while (fgets (temp, sizeof (temp), authfile_fd) != NULL) {
+               lines++;
+
+               if (temp[endline = strlen (temp) - 1] != '\n') {
+                       SYSLOG ((LOG_ERR,
+                                "%s, line %d: line too long or missing newline",
+                                SUAUTHFILE, lines));
+                       continue;
+               }
+
+               while (endline > 0 && (temp[endline - 1] == ' '
+                                      || temp[endline - 1] == '\t'
+                                      || temp[endline - 1] == '\n'))
+                       endline--;
+               temp[endline] = '\0';
+
+               posn = 0;
+               while (temp[posn] == ' ' || temp[posn] == '\t')
+                       posn++;
+
+               if (temp[posn] == '\n' || temp[posn] == '#'
+                   || temp[posn] == '\0') {
+                       continue;
+               }
+               if (!(to_users = strtok (temp + posn, field))
+                   || !(from_users = strtok ((char *) NULL, field))
+                   || !(action = strtok ((char *) NULL, field))
+                   || strtok ((char *) NULL, field)) {
+                       SYSLOG ((LOG_ERR,
+                                "%s, line %d. Bad number of fields.\n",
+                                SUAUTHFILE, lines));
+                       continue;
+               }
+
+               if (!applies (wanted_id, to_users))
+                       continue;
+               if (!applies (actual_id, from_users))
+                       continue;
+               if (!strcmp (action, "DENY")) {
+                       SYSLOG ((pwent.pw_uid ? LOG_NOTICE : LOG_WARN,
+                                "DENIED su from '%s' to '%s' (%s)\n",
+                                actual_id, wanted_id, SUAUTHFILE));
+                       fputs (_("Access to su to that account DENIED.\n"),
+                              stderr);
+                       fclose (authfile_fd);
+                       return DENY;
+               } else if (!strcmp (action, "NOPASS")) {
+                       SYSLOG ((pwent.pw_uid ? LOG_INFO : LOG_NOTICE,
+                                "NO password asked for su from '%s' to '%s' (%s)\n",
+                                actual_id, wanted_id, SUAUTHFILE));
+                       fputs (_("Password authentication bypassed.\n"),stderr);
+                       fclose (authfile_fd);
+                       return NOPWORD;
+               } else if (!strcmp (action, "OWNPASS")) {
+                       SYSLOG ((pwent.pw_uid ? LOG_INFO : LOG_NOTICE,
+                                "su from '%s' to '%s': asking for user's own password (%s)\n",
+                                actual_id, wanted_id, SUAUTHFILE));
+                       fputs (_("Please enter your OWN password as authentication.\n"),
+                              stderr);
+                       fclose (authfile_fd);
+                       return OWNPWORD;
+               } else {
+                       SYSLOG ((LOG_ERR,
+                                "%s, line %d: unrecognised action!\n",
+                                SUAUTHFILE, lines));
+               }
+       }
+       fclose (authfile_fd);
+       return NOACTION;
+}
+
+static int applies (const char *single, char *list)
+{
+       const char split[] = ", ";
+       char *tok;
+
+       int state = 0;
+
+       for (tok = strtok (list, split); tok != NULL;
+            tok = strtok (NULL, split)) {
+
+               if (!strcmp (tok, "ALL")) {
+                       if (state != 0) {
+                               SYSLOG ((LOG_ERR,
+                                        "%s, line %d: ALL in bad place\n",
+                                        SUAUTHFILE, lines));
+                               return 0;
+                       }
+                       state = 1;
+               } else if (!strcmp (tok, "EXCEPT")) {
+                       if (state != 1) {
+                               SYSLOG ((LOG_ERR,
+                                        "%s, line %d: EXCEPT in bas place\n",
+                                        SUAUTHFILE, lines));
+                               return 0;
+                       }
+                       state = 2;
+               } else if (!strcmp (tok, "GROUP")) {
+                       if ((state != 0) && (state != 2)) {
+                               SYSLOG ((LOG_ERR,
+                                        "%s, line %d: GROUP in bad place\n",
+                                        SUAUTHFILE, lines));
+                               return 0;
+                       }
+                       state = (state == 0) ? 3 : 4;
+               } else {
+                       switch (state) {
+                       case 0: /* No control words yet */
+                               if (!strcmp (tok, single))
+                                       return 1;
+                               break;
+                       case 1: /* An all */
+                               SYSLOG ((LOG_ERR,
+                                        "%s, line %d: expect another token after ALL\n",
+                                        SUAUTHFILE, lines));
+                               return 0;
+                       case 2: /* All except */
+                               if (!strcmp (tok, single))
+                                       return 0;
+                               break;
+                       case 3: /* Group */
+                               if (isgrp (single, tok))
+                                       return 1;
+                               break;
+                       case 4: /* All except group */
+                               if (isgrp (single, tok))
+                                       return 0;
+                               /* FALL THRU */
+                       }
+               }
+       }
+       if ((state != 0) && (state != 3))
+               return 1;
+       return 0;
+}
+
+static int isgrp (const char *name, const char *group)
+{
+       struct group *grp;
+
+       grp = getgrnam (group); /* local, no need for xgetgrnam */
+
+       if (!grp || !grp->gr_mem)
+               return 0;
+
+       return is_on_list (grp->gr_mem, name);
+}
+#endif                         /* SU_ACCESS */
diff --git a/src/sulogin.c b/src/sulogin.c
new file mode 100644 (file)
index 0000000..216d83a
--- /dev/null
@@ -0,0 +1,252 @@
+/*
+ * Copyright (c) 1989 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2002 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: sulogin.c 2851 2009-04-30 21:39:38Z nekral-guest $"
+
+#include <fcntl.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdio.h>
+#include <sys/ioctl.h>
+#include "defines.h"
+#include "getdef.h"
+#include "prototypes.h"
+#include "pwauth.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * Global variables
+ */
+static char name[BUFSIZ];
+static char pass[BUFSIZ];
+
+static struct passwd pwent;
+
+extern char **newenvp;
+extern size_t newenvc;
+
+extern char **environ;
+
+#ifndef        ALARM
+#define        ALARM   60
+#endif
+
+/* local function prototypes */
+static RETSIGTYPE catch_signals (int);
+
+static RETSIGTYPE catch_signals (unused int sig)
+{
+       exit (1);
+}
+
+/*
+ * syslogd is usually not running at the time when sulogin is typically
+ * called, cluttering the screen with unnecessary messages. Suggested by
+ * Ivan Nejgebauer <ian@unsux.ns.ac.yu>.  --marekm
+ */
+#undef USE_SYSLOG
+
+ /*ARGSUSED*/ int main (int argc, char **argv)
+{
+       char *cp;
+       char **envp = environ;
+       TERMIO termio;
+       int err = 0;
+
+#ifdef USE_TERMIO
+       ioctl (0, TCGETA, &termio);
+       termio.c_iflag |= (ICRNL | IXON);
+       termio.c_oflag |= (OPOST | ONLCR);
+       termio.c_cflag |= (CREAD);
+       termio.c_lflag |= (ISIG | ICANON | ECHO | ECHOE | ECHOK);
+       ioctl (0, TCSETAF, &termio);
+#endif
+#ifdef USE_TERMIOS
+       tcgetattr (0, &termio);
+       termio.c_iflag |= (ICRNL | IXON);
+       termio.c_oflag |= (CREAD);
+       termio.c_lflag |= (ECHO | ECHOE | ECHOK | ICANON | ISIG);
+       tcsetattr (0, TCSANOW, &termio);
+#endif
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+#ifdef USE_SYSLOG
+       OPENLOG ("sulogin");
+#endif
+       initenv ();
+       if (argc > 1) {
+               close (0);
+               close (1);
+               close (2);
+
+               if (open (argv[1], O_RDWR) >= 0) {
+                       dup (0);
+                       dup (0);
+               } else {
+#ifdef USE_SYSLOG
+                       SYSLOG (LOG_WARN, "cannot open %s\n", argv[1]);
+                       closelog ();
+#endif
+                       exit (1);
+               }
+       }
+       if (access (PASSWD_FILE, F_OK) == -1) { /* must be a password file! */
+               puts (_("No password file"));
+#ifdef USE_SYSLOG
+               SYSLOG (LOG_WARN, "No password file\n");
+               closelog ();
+#endif
+               exit (1);
+       }
+#if !defined(DEBUG) && defined(SULOGIN_ONLY_INIT)
+       if (getppid () != 1) {  /* parent must be INIT */
+#ifdef USE_SYSLOG
+               SYSLOG (LOG_WARN, "Pid == %d, not 1\n", getppid ());
+               closelog ();
+#endif
+               exit (1);
+       }
+#endif
+       if ((isatty (0) == 0) || (isatty (1) == 0) || (isatty (2) == 0)) {
+#ifdef USE_SYSLOG
+               closelog ();
+#endif
+               exit (1);       /* must be a terminal */
+       }
+       /* If we were init, we need to start a new session */
+       if (getppid() == 1) {
+               setsid();
+               if (ioctl(0, TIOCSCTTY, 1) != 0) {
+                       fputs (_("TIOCSCTTY failed"), stderr);
+               }
+       }
+       while (NULL != *envp) {         /* add inherited environment, */
+               addenv (*envp, NULL);   /* some variables change later */
+               envp++;
+       }
+
+#ifndef USE_PAM
+
+       cp = getdef_str ("ENV_TZ");
+       if (NULL != cp) {
+               addenv (('/' == *cp) ? tz (cp) : cp, NULL);
+       }
+       cp = getdef_str ("ENV_HZ");
+       if (NULL != cp) {
+               addenv (cp, NULL);      /* set the default $HZ, if one */
+       }
+#endif                         /* !USE_PAM */
+
+       (void) strcpy (name, "root");   /* KLUDGE!!! */
+
+       (void) signal (SIGALRM, catch_signals); /* exit if the timer expires */
+       (void) alarm (ALARM);           /* only wait so long ... */
+
+       while (true) {          /* repeatedly get login/password pairs */
+               pw_entry (name, &pwent);        /* get entry from password file */
+               if (pwent.pw_name == (char *) 0) {
+                       /*
+                        * Fail secure
+                        */
+                       puts (_("No password entry for 'root'"));
+#ifdef USE_SYSLOG
+                       SYSLOG (LOG_WARN, "No password entry for 'root'\n");
+                       closelog ();
+#endif
+                       exit (1);
+               }
+
+               /*
+                * Here we prompt for the root password, or if no password
+                * is given we just exit.
+                */
+
+               /* get a password for root */
+               cp = getpass (_
+                             ("\n"
+                              "Type control-d to proceed with normal startup,\n"
+                              "(or give root password for system maintenance):"));
+               /*
+                * XXX - can't enter single user mode if root password is
+                * empty.  I think this doesn't happen very often :-). But
+                * it will work with standard getpass() (no NULL on EOF). 
+                * --marekm
+                */
+               if ((NULL == cp) || ('\0' == *cp)) {
+#ifdef USE_SYSLOG
+                       SYSLOG (LOG_INFO, "Normal startup\n");
+                       closelog ();
+#endif
+                       puts ("");
+#ifdef TELINIT
+                       execl (PATH_TELINIT, "telinit", RUNLEVEL, (char *) 0);
+#endif
+                       exit (0);
+               } else {
+                       STRFCPY (pass, cp);
+                       strzero (cp);
+               }
+               if (valid (pass, &pwent)) {     /* check encrypted passwords ... */
+                       break;  /* ... encrypted passwords matched */
+               }
+
+#ifdef USE_SYSLOG
+               SYSLOG (LOG_WARN, "Incorrect root password\n");
+#endif
+               sleep (2);
+               puts (_("Login incorrect"));
+       }
+       strzero (pass);
+       (void) alarm (0);
+       (void) signal (SIGALRM, SIG_DFL);
+       environ = newenvp;      /* make new environment active */
+
+       puts (_("Entering System Maintenance Mode"));
+#ifdef USE_SYSLOG
+       SYSLOG (LOG_INFO, "System Maintenance Mode\n");
+#endif
+
+#ifdef USE_SYSLOG
+       closelog ();
+#endif
+       /* exec the shell finally. */
+       err = shell (pwent.pw_shell, (char *) 0, environ);
+
+       return ((err == ENOENT) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+}
+
diff --git a/src/useradd.c b/src/useradd.c
new file mode 100644 (file)
index 0000000..193e45c
--- /dev/null
@@ -0,0 +1,2035 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: useradd.c 3015 2009-06-05 22:16:56Z nekral-guest $"
+
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <lastlog.h>
+#include <pwd.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <time.h>
+#include "chkname.h"
+#include "defines.h"
+#include "faillog.h"
+#include "getdef.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "prototypes.h"
+#include "pwauth.h"
+#include "pwio.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+#include "shadowio.h"
+
+#ifndef SKEL_DIR
+#define SKEL_DIR "/etc/skel"
+#endif
+#ifndef USER_DEFAULTS_FILE
+#define USER_DEFAULTS_FILE "/etc/default/useradd"
+#define NEW_USER_FILE "/etc/default/nuaddXXXXXX"
+#endif
+/*
+ * Needed for MkLinux DR1/2/2.1 - J.
+ */
+#ifndef LASTLOG_FILE
+#define LASTLOG_FILE "/var/log/lastlog"
+#endif
+/*
+ * Global variables
+ */
+char *Prog;
+
+/*
+ * These defaults are used if there is no defaults file.
+ */
+static gid_t def_group = 100;
+static const char *def_gname = "other";
+static const char *def_home = "/home";
+static const char *def_shell = "";
+static const char *def_template = SKEL_DIR;
+static const char *def_create_mail_spool = "no";
+
+static long def_inactive = -1;
+static const char *def_expire = "";
+
+static char def_file[] = USER_DEFAULTS_FILE;
+
+#define        VALID(s)        (strcspn (s, ":\n") == strlen (s))
+
+static const char *user_name = "";
+static const char *user_pass = "!";
+static uid_t user_id;
+static gid_t user_gid;
+static const char *user_comment = "";
+static const char *user_home = "";
+static const char *user_shell = "";
+static const char *create_mail_spool = "";
+#ifdef WITH_SELINUX
+static const char *user_selinux = "";
+#endif
+
+static long user_expire = -1;
+static bool is_shadow_pwd;
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+static bool sgr_locked = false;
+#endif
+static bool pw_locked = false;
+static bool gr_locked = false;
+static bool spw_locked = false;
+static char **user_groups;     /* NULL-terminated list */
+static long sys_ngroups;
+static bool do_grp_update = false;     /* group files need to be updated */
+
+static bool
+    bflg = false,              /* new default root of home directory */
+    cflg = false,              /* comment (GECOS) field for new account */
+    dflg = false,              /* home directory for new account */
+    Dflg = false,              /* set/show new user default values */
+    eflg = false,              /* days since 1970-01-01 when account is locked */
+    fflg = false,              /* days until account with expired password is locked */
+    gflg = false,              /* primary group ID for new account */
+    Gflg = false,              /* secondary group set for new account */
+    kflg = false,              /* specify a directory to fill new user directory */
+    lflg = false,              /* do not add user to lastlog/faillog databases */
+    mflg = false,              /* create user's home directory if it doesn't exist */
+    Mflg = false,              /* do not create user's home directory even if CREATE_HOME is set */
+    Nflg = false,              /* do not create a group having the same name as the user, but add the user to def_group (or the group specified with -g) */
+    oflg = false,              /* permit non-unique user ID to be specified with -u */
+    rflg = false,              /* create a system account */
+    sflg = false,              /* shell program for new account */
+    uflg = false,              /* specify user ID for new account */
+    Uflg = false,              /* create a group having the same name as the user */
+    Zflg = false;              /* new selinux user */
+
+static bool home_added = false;
+
+/*
+ * exit status values
+ */
+/*@-exitarg@*/
+#define E_SUCCESS      0       /* success */
+#define E_PW_UPDATE    1       /* can't update password file */
+#define E_USAGE                2       /* invalid command syntax */
+#define E_BAD_ARG      3       /* invalid argument to option */
+#define E_UID_IN_USE   4       /* UID already in use (and no -o) */
+#define E_NOTFOUND     6       /* specified group doesn't exist */
+#define E_NAME_IN_USE  9       /* username already in use */
+#define E_GRP_UPDATE   10      /* can't update group file */
+#define E_HOMEDIR      12      /* can't create home directory */
+#define        E_MAIL_SPOOL    13      /* can't create mail spool */
+
+#define DGROUP                 "GROUP="
+#define HOME                   "HOME="
+#define SHELL                  "SHELL="
+#define INACT                  "INACTIVE="
+#define EXPIRE                 "EXPIRE="
+#define SKEL                   "SKEL="
+#define CREATE_MAIL_SPOOL      "CREATE_MAIL_SPOOL="
+
+/* local function prototypes */
+static void fail_exit (int);
+static void get_defaults (void);
+static void show_defaults (void);
+static int set_defaults (void);
+static int get_groups (char *);
+static void usage (void);
+static void new_pwent (struct passwd *);
+#ifdef WITH_SELINUX
+static void selinux_update_mapping (void);
+#endif
+
+static long scale_age (long);
+static void new_spent (struct spwd *);
+static void grp_update (void);
+
+static void process_flags (int argc, char **argv);
+static void close_files (void);
+static void open_files (void);
+static void faillog_reset (uid_t);
+static void lastlog_reset (uid_t);
+static void usr_update (void);
+static void create_home (void);
+static void create_mail (void);
+
+/*
+ * fail_exit - undo as much as possible
+ */
+static void fail_exit (int code)
+{
+       if (home_added) {
+               rmdir (user_home);
+       }
+
+       if (spw_locked) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "unlocking shadow file",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       /* continue */
+               }
+       }
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "unlocking passwd file",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       /* continue */
+               }
+       }
+       if (gr_locked) {
+               if (gr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "unlocking group file",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       /* continue */
+               }
+       }
+#ifdef SHADOWGRP
+       if (sgr_locked) {
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "unlocking gshadow file",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       /* continue */
+               }
+       }
+#endif
+
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_USER, Prog,
+                     "adding user",
+                     user_name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+       SYSLOG ((LOG_INFO, "failed adding user '%s', data deleted", user_name));
+       exit (code);
+}
+
+#define MATCH(x,y) (strncmp((x),(y),strlen(y)) == 0)
+
+/*
+ * get_defaults - read the defaults file
+ *
+ *     get_defaults() reads the defaults file for this command. It sets the
+ *     various values from the file, or uses built-in default values if the
+ *     file does not exist.
+ */
+static void get_defaults (void)
+{
+       FILE *fp;
+       char buf[1024];
+       char *cp;
+
+       /*
+        * Open the defaults file for reading.
+        */
+
+       fp = fopen (def_file, "r");
+       if (NULL == fp) {
+               return;
+       }
+
+       /*
+        * Read the file a line at a time. Only the lines that have relevant
+        * values are used, everything else can be ignored.
+        */
+       while (fgets (buf, (int) sizeof buf, fp) == buf) {
+               cp = strrchr (buf, '\n');
+               if (NULL != cp) {
+                       *cp = '\0';
+               }
+
+               cp = strchr (buf, '=');
+               if (NULL == cp) {
+                       continue;
+               }
+
+               cp++;
+
+               /*
+                * Primary GROUP identifier
+                */
+               if (MATCH (buf, DGROUP)) {
+                       const struct group *grp = getgr_nam_gid (cp);
+                       if (NULL == grp) {
+                               fprintf (stderr,
+                                        _("%s: group '%s' does not exist\n"),
+                                        Prog, cp);
+                               fprintf (stderr,
+                                        _("%s: the %s configuration in %s will be ignored\n"),
+                                        Prog, DGROUP, def_file);
+                       } else {
+                               def_group = grp->gr_gid;
+                               def_gname = xstrdup (grp->gr_name);
+                       }
+               }
+
+               /*
+                * Default HOME filesystem
+                */
+               else if (MATCH (buf, HOME)) {
+                       def_home = xstrdup (cp);
+               }
+
+               /*
+                * Default Login Shell command
+                */
+               else if (MATCH (buf, SHELL)) {
+                       def_shell = xstrdup (cp);
+               }
+
+               /*
+                * Default Password Inactive value
+                */
+               else if (MATCH (buf, INACT)) {
+                       if (   (getlong (cp, &def_inactive) == 0)
+                           || (def_inactive < -1)) {
+                               fprintf (stderr,
+                                        _("%s: invalid numeric argument '%s'\n"),
+                                        Prog, optarg);
+                               fprintf (stderr,
+                                        _("%s: the %s configuration in %s will be ignored\n"),
+                                        Prog, INACT, def_file);
+                               def_inactive = -1;
+                       }
+               }
+
+               /*
+                * Default account expiration date
+                */
+               else if (MATCH (buf, EXPIRE)) {
+                       def_expire = xstrdup (cp);
+               }
+
+               /*
+                * Default Skeleton information
+                */
+               else if (MATCH (buf, SKEL)) {
+                       if ('\0' == *cp) {
+                               cp = SKEL_DIR;  /* XXX warning: const */
+                       }
+
+                       def_template = xstrdup (cp);
+               }
+
+               /*
+                * Create by default user mail spool or not ?
+                */
+               else if (MATCH (buf, CREATE_MAIL_SPOOL)) {
+                       if (*cp == '\0') {
+                               cp = CREATE_MAIL_SPOOL; /* XXX warning: const */
+                       }
+
+                       def_create_mail_spool = xstrdup (cp);
+               }
+       }
+       (void) fclose (fp);
+}
+
+/*
+ * show_defaults - show the contents of the defaults file
+ *
+ *     show_defaults() displays the values that are used from the default
+ *     file and the built-in values.
+ */
+static void show_defaults (void)
+{
+       printf ("GROUP=%u\n", (unsigned int) def_group);
+       printf ("HOME=%s\n", def_home);
+       printf ("INACTIVE=%ld\n", def_inactive);
+       printf ("EXPIRE=%s\n", def_expire);
+       printf ("SHELL=%s\n", def_shell);
+       printf ("SKEL=%s\n", def_template);
+       printf ("CREATE_MAIL_SPOOL=%s\n", def_create_mail_spool);
+}
+
+/*
+ * set_defaults - write new defaults file
+ *
+ *     set_defaults() re-writes the defaults file using the values that
+ *     are currently set. Duplicated lines are pruned, missing lines are
+ *     added, and unrecognized lines are copied as is.
+ */
+static int set_defaults (void)
+{
+       FILE *ifp;
+       FILE *ofp;
+       char buf[1024];
+       static char new_file[] = NEW_USER_FILE;
+       char *cp;
+       int ofd;
+       int wlen;
+       bool out_group = false;
+       bool out_home = false;
+       bool out_inactive = false;
+       bool out_expire = false;
+       bool out_shell = false;
+       bool out_skel = false;
+       bool out_create_mail_spool = false;
+
+       /*
+        * Create a temporary file to copy the new output to.
+        */
+       ofd = mkstemp (new_file);
+       if (-1 == ofd) {
+               fprintf (stderr,
+                        _("%s: cannot create new defaults file\n"),
+                        Prog);
+               return -1;
+       }
+
+       ofp = fdopen (ofd, "w");
+       if (NULL == ofp) {
+               fprintf (stderr,
+                        _("%s: cannot open new defaults file\n"),
+                        Prog);
+               return -1;
+       }
+
+       /*
+        * Open the existing defaults file and copy the lines to the
+        * temporary file, using any new values. Each line is checked
+        * to insure that it is not output more than once.
+        */
+       ifp = fopen (def_file, "r");
+       if (NULL == ifp) {
+               fprintf (ofp, "# useradd defaults file\n");
+               goto skip;
+       }
+
+       while (fgets (buf, (int) sizeof buf, ifp) == buf) {
+               cp = strrchr (buf, '\n');
+               if (NULL != cp) {
+                       *cp = '\0';
+               } else {
+                       /* A line which does not end with \n is only valid
+                        * at the end of the file.
+                        */
+                       if (feof (ifp) == 0) {
+                               fprintf (stderr,
+                                        _("%s: line too long in %s: %s..."),
+                                        Prog, def_file, buf);
+                               return -1;
+                       }
+               }
+
+               if (!out_group && MATCH (buf, DGROUP)) {
+                       fprintf (ofp, DGROUP "%u\n", (unsigned int) def_group);
+                       out_group = true;
+               } else if (!out_home && MATCH (buf, HOME)) {
+                       fprintf (ofp, HOME "%s\n", def_home);
+                       out_home = true;
+               } else if (!out_inactive && MATCH (buf, INACT)) {
+                       fprintf (ofp, INACT "%ld\n", def_inactive);
+                       out_inactive = true;
+               } else if (!out_expire && MATCH (buf, EXPIRE)) {
+                       fprintf (ofp, EXPIRE "%s\n", def_expire);
+                       out_expire = true;
+               } else if (!out_shell && MATCH (buf, SHELL)) {
+                       fprintf (ofp, SHELL "%s\n", def_shell);
+                       out_shell = true;
+               } else if (!out_skel && MATCH (buf, SKEL)) {
+                       fprintf (ofp, SKEL "%s\n", def_template);
+                       out_skel = true;
+               } else if (!out_create_mail_spool
+                          && MATCH (buf, CREATE_MAIL_SPOOL)) {
+                       fprintf (ofp,
+                                CREATE_MAIL_SPOOL "%s\n",
+                                def_create_mail_spool);
+                       out_create_mail_spool = true;
+               } else
+                       fprintf (ofp, "%s\n", buf);
+       }
+       (void) fclose (ifp);
+
+      skip:
+       /*
+        * Check each line to insure that every line was output. This
+        * causes new values to be added to a file which did not previously
+        * have an entry for that value.
+        */
+       if (!out_group)
+               fprintf (ofp, DGROUP "%u\n", (unsigned int) def_group);
+       if (!out_home)
+               fprintf (ofp, HOME "%s\n", def_home);
+       if (!out_inactive)
+               fprintf (ofp, INACT "%ld\n", def_inactive);
+       if (!out_expire)
+               fprintf (ofp, EXPIRE "%s\n", def_expire);
+       if (!out_shell)
+               fprintf (ofp, SHELL "%s\n", def_shell);
+       if (!out_skel)
+               fprintf (ofp, SKEL "%s\n", def_template);
+
+       if (!out_create_mail_spool)
+               fprintf (ofp, CREATE_MAIL_SPOOL "%s\n", def_create_mail_spool);
+
+       /*
+        * Flush and close the file. Check for errors to make certain
+        * the new file is intact.
+        */
+       (void) fflush (ofp);
+       if (   (ferror (ofp) != 0)
+           || (fsync (fileno (ofp)) != 0)
+           || (fclose (ofp) != 0)) {
+               unlink (new_file);
+               return -1;
+       }
+
+       /*
+        * Rename the current default file to its backup name.
+        */
+       wlen = snprintf (buf, sizeof buf, "%s-", def_file);
+       assert (wlen < (int) sizeof buf);
+       if ((rename (def_file, buf) != 0) && (ENOENT != errno)) {
+               int err = errno;
+               fprintf (stderr,
+                        _("%s: rename: %s: %s"),
+                        Prog, def_file, strerror (err));
+               unlink (new_file);
+               return -1;
+       }
+
+       /*
+        * Rename the new default file to its correct name.
+        */
+       if (rename (new_file, def_file) != 0) {
+               int err = errno;
+               fprintf (stderr,
+                        _("%s: rename: %s: %s"),
+                        Prog, new_file, strerror (err));
+               return -1;
+       }
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_USYS_CONFIG, Prog,
+                     "changing useradd defaults",
+                     NULL, AUDIT_NO_ID,
+                     SHADOW_AUDIT_SUCCESS);
+#endif
+       SYSLOG ((LOG_INFO,
+                "useradd defaults: GROUP=%u, HOME=%s, SHELL=%s, INACTIVE=%ld, "
+                "EXPIRE=%s, SKEL=%s, CREATE_MAIL_SPOOL=%s",
+                (unsigned int) def_group, def_home, def_shell,
+                def_inactive, def_expire, def_template,
+                def_create_mail_spool));
+       return 0;
+}
+
+/*
+ * get_groups - convert a list of group names to an array of group IDs
+ *
+ *     get_groups() takes a comma-separated list of group names and
+ *     converts it to a NULL-terminated array. Any unknown group
+ *     names are reported as errors.
+ */
+static int get_groups (char *list)
+{
+       char *cp;
+       const struct group *grp;
+       int errors = 0;
+       int ngroups = 0;
+
+       if ('\0' == *list) {
+               return 0;
+       }
+
+       /*
+        * So long as there is some data to be converted, strip off
+        * each name and look it up. A mix of numerical and string
+        * values for group identifiers is permitted.
+        */
+       do {
+               /*
+                * Strip off a single name from the list
+                */
+               cp = strchr (list, ',');
+               if (NULL != cp) {
+                       *cp++ = '\0';
+               }
+
+               /*
+                * Names starting with digits are treated as numerical
+                * GID values, otherwise the string is looked up as is.
+                */
+               grp = getgr_nam_gid (list);
+
+               /*
+                * There must be a match, either by GID value or by
+                * string name.
+                */
+               if (NULL == grp) {
+                       fprintf (stderr,
+                                _("%s: group '%s' does not exist\n"),
+                                Prog, list);
+                       errors++;
+               }
+               list = cp;
+
+               /*
+                * If the group doesn't exist, don't dump core...
+                * Instead, try the next one.  --marekm
+                */
+               if (NULL == grp) {
+                       continue;
+               }
+
+#ifdef USE_NIS
+               /*
+                * Don't add this group if they are an NIS group. Tell
+                * the user to go to the server for this group.
+                */
+               if (__isgrNIS ()) {
+                       fprintf (stderr,
+                                _("%s: group '%s' is a NIS group.\n"),
+                                Prog, grp->gr_name);
+                       continue;
+               }
+#endif
+
+               if (ngroups == sys_ngroups) {
+                       fprintf (stderr,
+                                _("%s: too many groups specified (max %d).\n"),
+                                Prog, ngroups);
+                       break;
+               }
+
+               /*
+                * Add the group name to the user's list of groups.
+                */
+               user_groups[ngroups++] = xstrdup (grp->gr_name);
+       } while (NULL != list);
+
+       user_groups[ngroups] = (char *) 0;
+
+       /*
+        * Any errors in finding group names are fatal
+        */
+       if (0 != errors) {
+               return -1;
+       }
+
+       return 0;
+}
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (void)
+{
+       (void) fprintf (stderr,
+                       _("Usage: useradd [options] LOGIN\n"
+                         "\n"
+                         "Options:\n"),
+                       Prog);
+       (void) fputs (_("  -b, --base-dir BASE_DIR       base directory for the home directory of the\n"
+                       "                                new account\n"), stderr);
+       (void) fputs (_("  -c, --comment COMMENT         GECOS field of the new account\n"), stderr);
+       (void) fputs (_("  -d, --home-dir HOME_DIR       home directory of the new account\n"), stderr);
+       (void) fputs (_("  -D, --defaults                print or change default useradd configuration\n"), stderr);
+       (void) fputs (_("  -e, --expiredate EXPIRE_DATE  expiration date of the new account\n"), stderr);
+       (void) fputs (_("  -f, --inactive INACTIVE       password inactivity period of the new account\n"), stderr);
+       (void) fputs (_("  -g, --gid GROUP               name or ID of the primary group of the new\n"
+                       "                                account\n"), stderr);
+       (void) fputs (_("  -G, --groups GROUPS           list of supplementary groups of the new\n"
+                       "                                account\n"), stderr);
+       (void) fputs (_("  -h, --help                    display this help message and exit\n"), stderr);
+       (void) fputs (_("  -k, --skel SKEL_DIR           use this alternative skeleton directory\n"), stderr);
+       (void) fputs (_("  -K, --key KEY=VALUE           override /etc/login.defs defaults\n"), stderr);
+       (void) fputs (_("  -l, --no-log-init             do not add the user to the lastlog and\n"
+                       "                                faillog databases\n"), stderr);
+       (void) fputs (_("  -m, --create-home             create the user's home directory\n"), stderr);
+       (void) fputs (_("  -M, --no-create-home          do not create the user's home directory\n"), stderr);
+       (void) fputs (_("  -N, --no-user-group           do not create a group with the same name as\n"
+                       "                                the user\n"), stderr);
+       (void) fputs (_("  -o, --non-unique              allow to create users with duplicate\n"
+                       "                                (non-unique) UID\n"), stderr);
+       (void) fputs (_("  -p, --password PASSWORD       encrypted password of the new account\n"), stderr);
+       (void) fputs (_("  -r, --system                  create a system account\n"), stderr);
+       (void) fputs (_("  -s, --shell SHELL             login shell of the new account\n"), stderr);
+       (void) fputs (_("  -u, --uid UID                 user ID of the new account\n"), stderr);
+       (void) fputs (_("  -U, --user-group              create a group with the same name as the user\n"), stderr);
+#ifdef WITH_SELINUX
+       (void) fputs (_("  -Z, --selinux-user SEUSER     use a specific SEUSER for the SELinux user mapping\n"), stderr);
+#endif
+       (void) fputs ("\n", stderr);
+       exit (E_USAGE);
+}
+
+/*
+ * new_pwent - initialize the values in a password file entry
+ *
+ *     new_pwent() takes all of the values that have been entered and
+ *     fills in a (struct passwd) with them.
+ */
+static void new_pwent (struct passwd *pwent)
+{
+       memzero (pwent, sizeof *pwent);
+       pwent->pw_name = (char *) user_name;
+       if (is_shadow_pwd) {
+               pwent->pw_passwd = (char *) SHADOW_PASSWD_STRING;
+       } else {
+               pwent->pw_passwd = (char *) user_pass;
+       }
+
+       pwent->pw_uid = user_id;
+       pwent->pw_gid = user_gid;
+       pwent->pw_gecos = (char *) user_comment;
+       pwent->pw_dir = (char *) user_home;
+       pwent->pw_shell = (char *) user_shell;
+}
+
+static long scale_age (long x)
+{
+       if (x <= 0) {
+               return x;
+       }
+
+       return x * (DAY / SCALE);
+}
+
+/*
+ * new_spent - initialize the values in a shadow password file entry
+ *
+ *     new_spent() takes all of the values that have been entered and
+ *     fills in a (struct spwd) with them.
+ */
+static void new_spent (struct spwd *spent)
+{
+       memzero (spent, sizeof *spent);
+       spent->sp_namp = (char *) user_name;
+       spent->sp_pwdp = (char *) user_pass;
+       spent->sp_lstchg = (long) time ((time_t *) 0) / SCALE;
+       if (0 == spent->sp_lstchg) {
+               /* Better disable aging than requiring a password change */
+               spent->sp_lstchg = -1;
+       }
+       if (!rflg) {
+               spent->sp_min = scale_age (getdef_num ("PASS_MIN_DAYS", -1));
+               spent->sp_max = scale_age (getdef_num ("PASS_MAX_DAYS", -1));
+               spent->sp_warn = scale_age (getdef_num ("PASS_WARN_AGE", -1));
+               spent->sp_inact = scale_age (def_inactive);
+               spent->sp_expire = scale_age (user_expire);
+       } else {
+               spent->sp_min = scale_age (-1);
+               spent->sp_max = scale_age (-1);
+               spent->sp_warn = scale_age (-1);
+               spent->sp_inact = scale_age (-1);
+               spent->sp_expire = scale_age (-1);
+       }
+       spent->sp_flag = SHADOW_SP_FLAG_UNSET;
+}
+
+/*
+ * grp_update - add user to secondary group set
+ *
+ *     grp_update() takes the secondary group set given in user_groups
+ *     and adds the user to each group given by that set.
+ *
+ *     The group files are opened and locked in open_files().
+ *
+ *     close_files() should be called afterwards to commit the changes
+ *     and unlocking the group files.
+ */
+static void grp_update (void)
+{
+       const struct group *grp;
+       struct group *ngrp;
+
+#ifdef SHADOWGRP
+       const struct sgrp *sgrp;
+       struct sgrp *nsgrp;
+#endif
+
+       /*
+        * Scan through the entire group file looking for the groups that
+        * the user is a member of.
+        */
+       for (gr_rewind (), grp = gr_next (); NULL != grp; grp = gr_next ()) {
+
+               /*
+                * See if the user specified this group as one of their
+                * concurrent groups.
+                */
+               if (!is_on_list (user_groups, grp->gr_name)) {
+                       continue;
+               }
+
+               /*
+                * Make a copy - gr_update() will free() everything
+                * from the old entry, and we need it later.
+                */
+               ngrp = __gr_dup (grp);
+               if (NULL == ngrp) {
+                       fprintf (stderr,
+                                _("%s: Out of memory. Cannot update %s.\n"),
+                                Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to prepare the new %s entry '%s'", gr_dbname (), user_name));
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "adding user to group",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       fail_exit (E_GRP_UPDATE);       /* XXX */
+               }
+
+               /* 
+                * Add the username to the list of group members and
+                * update the group entry to reflect the change.
+                */
+               ngrp->gr_mem = add_list (ngrp->gr_mem, user_name);
+               if (gr_update (ngrp) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, gr_dbname (), ngrp->gr_name);
+                       SYSLOG ((LOG_ERR, "failed to prepare the new %s entry '%s'", gr_dbname (), user_name));
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "adding user to group",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       fail_exit (E_GRP_UPDATE);
+               }
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_ADD_USER, Prog,
+                             "adding user to group",
+                             user_name, AUDIT_NO_ID,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+               SYSLOG ((LOG_INFO,
+                        "add '%s' to group '%s'",
+                        user_name, ngrp->gr_name));
+       }
+
+#ifdef SHADOWGRP
+       if (!is_shadow_grp)
+               return;
+
+       /*
+        * Scan through the entire shadow group file looking for the groups
+        * that the user is a member of. The administrative list isn't
+        * modified.
+        */
+       for (sgr_rewind (), sgrp = sgr_next (); NULL != sgrp; sgrp = sgr_next ()) {
+
+               /*
+                * See if the user specified this group as one of their
+                * concurrent groups.
+                */
+               if (gr_locate (sgrp->sg_name) == NULL) {
+                       continue;
+               }
+
+               if (!is_on_list (user_groups, sgrp->sg_name)) {
+                       continue;
+               }
+
+               /*
+                * Make a copy - sgr_update() will free() everything
+                * from the old entry, and we need it later.
+                */
+               nsgrp = __sgr_dup (sgrp);
+               if (NULL == nsgrp) {
+                       fprintf (stderr,
+                                _("%s: Out of memory. Cannot update %s.\n"),
+                                Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to prepare the new %s entry '%s'", sgr_dbname (), user_name));
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "adding user to shadow group",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       fail_exit (E_GRP_UPDATE);       /* XXX */
+               }
+
+               /* 
+                * Add the username to the list of group members and
+                * update the group entry to reflect the change.
+                */
+               nsgrp->sg_mem = add_list (nsgrp->sg_mem, user_name);
+               if (sgr_update (nsgrp) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, sgr_dbname (), nsgrp->sg_name);
+                       SYSLOG ((LOG_ERR, "failed to prepare the new %s entry '%s'", sgr_dbname (), user_name));
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "adding user to shadow group",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       fail_exit (E_GRP_UPDATE);
+               }
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_ADD_USER, Prog,
+                             "adding user to shadow group",
+                             user_name, AUDIT_NO_ID,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+               SYSLOG ((LOG_INFO,
+                        "add '%s' to shadow group '%s'",
+                        user_name, nsgrp->sg_name));
+       }
+#endif                         /* SHADOWGRP */
+}
+
+/*
+ * process_flags - perform command line argument setting
+ *
+ *     process_flags() interprets the command line arguments and sets
+ *     the values that the user will be created with accordingly. The
+ *     values are checked for sanity.
+ */
+static void process_flags (int argc, char **argv)
+{
+       const struct group *grp;
+       bool anyflag = false;
+       char *cp;
+
+       {
+               /*
+                * Parse the command line options.
+                */
+               int c;
+               static struct option long_options[] = {
+                       {"base-dir", required_argument, NULL, 'b'},
+                       {"comment", required_argument, NULL, 'c'},
+                       {"home-dir", required_argument, NULL, 'd'},
+                       {"defaults", no_argument, NULL, 'D'},
+                       {"expiredate", required_argument, NULL, 'e'},
+                       {"inactive", required_argument, NULL, 'f'},
+                       {"gid", required_argument, NULL, 'g'},
+                       {"groups", required_argument, NULL, 'G'},
+                       {"help", no_argument, NULL, 'h'},
+                       {"skel", required_argument, NULL, 'k'},
+                       {"key", required_argument, NULL, 'K'},
+                       {"create-home", no_argument, NULL, 'm'},
+                       {"no-create-home", no_argument, NULL, 'M'},
+                       {"no-log-init", no_argument, NULL, 'l'},
+                       {"no-user-group", no_argument, NULL, 'N'},
+                       {"non-unique", no_argument, NULL, 'o'},
+                       {"password", required_argument, NULL, 'p'},
+                       {"system", no_argument, NULL, 'r'},
+                       {"shell", required_argument, NULL, 's'},
+#ifdef WITH_SELINUX
+                       {"selinux-user", required_argument, NULL, 'Z'},
+#endif
+                       {"uid", required_argument, NULL, 'u'},
+                       {"user-group", no_argument, NULL, 'U'},
+                       {NULL, 0, NULL, '\0'}
+               };
+               while ((c = getopt_long (argc, argv,
+#ifdef WITH_SELINUX
+                                        "b:c:d:De:f:g:G:k:K:lmMNop:rs:u:UZ:",
+#else
+                                        "b:c:d:De:f:g:G:k:K:lmMNop:rs:u:U",
+#endif
+                                        long_options, NULL)) != -1) {
+                       switch (c) {
+                       case 'b':
+                               if (   ( !VALID (optarg) )
+                                   || ( optarg[0] != '/' )) {
+                                       fprintf (stderr,
+                                                _("%s: invalid base directory '%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               def_home = optarg;
+                               bflg = true;
+                               break;
+                       case 'c':
+                               if (!VALID (optarg)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid comment '%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               user_comment = optarg;
+                               cflg = true;
+                               break;
+                       case 'd':
+                               if (   ( !VALID (optarg) )
+                                   || ( optarg[0] != '/' )) {
+                                       fprintf (stderr,
+                                                _("%s: invalid home directory '%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               user_home = optarg;
+                               dflg = true;
+                               break;
+                       case 'D':
+                               if (anyflag) {
+                                       usage ();
+                               }
+                               Dflg = true;
+                               break;
+                       case 'e':
+                               if ('\0' != *optarg) {
+                                       user_expire = strtoday (optarg);
+                                       if (user_expire == -1) {
+                                               fprintf (stderr,
+                                                        _("%s: invalid date '%s'\n"),
+                                                        Prog, optarg);
+                                               exit (E_BAD_ARG);
+                                       }
+                               } else {
+                                       user_expire = -1;
+                               }
+
+                               /*
+                                * -e "" is allowed - it's a no-op without /etc/shadow
+                                */
+                               if (('\0' != *optarg) && !is_shadow_pwd) {
+                                       fprintf (stderr,
+                                                _("%s: shadow passwords required for -e\n"),
+                                                Prog);
+                                       exit (E_USAGE);
+                               }
+                               if (Dflg) {
+                                       def_expire = optarg;
+                               }
+                               eflg = true;
+                               break;
+                       case 'f':
+                               if (   (getlong (optarg, &def_inactive) == 0)
+                                   || (def_inactive < -1)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid numeric argument '%s'\n"),
+                                                Prog, optarg);
+                                       usage ();
+                               }
+                               /*
+                                * -f -1 is allowed
+                                * it's a no-op without /etc/shadow
+                                */
+                               if ((-1 != def_inactive) && !is_shadow_pwd) {
+                                       fprintf (stderr,
+                                                _("%s: shadow passwords required for -f\n"),
+                                                Prog);
+                                       exit (E_USAGE);
+                               }
+                               fflg = true;
+                               break;
+                       case 'g':
+                               grp = getgr_nam_gid (optarg);
+                               if (NULL == grp) {
+                                       fprintf (stderr,
+                                                _("%s: group '%s' does not exist\n"),
+                                                Prog, optarg);
+                                       exit (E_NOTFOUND);
+                               }
+                               if (Dflg) {
+                                       def_group = grp->gr_gid;
+                                       def_gname = optarg;
+                               } else {
+                                       user_gid = grp->gr_gid;
+                               }
+                               gflg = true;
+                               break;
+                       case 'G':
+                               if (get_groups (optarg) != 0) {
+                                       exit (E_NOTFOUND);
+                               }
+                               if (NULL != user_groups[0]) {
+                                       do_grp_update = true;
+                               }
+                               Gflg = true;
+                               break;
+                       case 'h':
+                               usage ();
+                               break;
+                       case 'k':
+                               def_template = optarg;
+                               kflg = true;
+                               break;
+                       case 'K':
+                               /*
+                                * override login.defs defaults (-K name=value)
+                                * example: -K UID_MIN=100 -K UID_MAX=499
+                                * note: -K UID_MIN=10,UID_MAX=499 doesn't work yet
+                                */
+                               cp = strchr (optarg, '=');
+                               if (NULL == cp) {
+                                       fprintf (stderr,
+                                                _("%s: -K requires KEY=VALUE\n"),
+                                                Prog);
+                                       exit (E_BAD_ARG);
+                               }
+                               /* terminate name, point to value */
+                               *cp = '\0';
+                               cp++;
+                               if (putdef_str (optarg, cp) < 0) {
+                                       exit (E_BAD_ARG);
+                               }
+                               break;
+                       case 'l':
+                               lflg = true;
+                               break;
+                       case 'm':
+                               mflg = true;
+                               break;
+                       case 'M':
+                               Mflg = true;
+                               break;
+                       case 'N':
+                               Nflg = true;
+                               break;
+                       case 'o':
+                               oflg = true;
+                               break;
+                       case 'p':       /* set encrypted password */
+                               if (!VALID (optarg)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid field '%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               user_pass = optarg;
+                               break;
+                       case 'r':
+                               rflg = true;
+                               break;
+                       case 's':
+                               if (   ( !VALID (optarg) )
+                                   || (   ('\0' != optarg[0])
+                                       && ('/'  != optarg[0])
+                                       && ('*'  != optarg[0]) )) {
+                                       fprintf (stderr,
+                                                _("%s: invalid shell '%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               user_shell = optarg;
+                               def_shell = optarg;
+                               sflg = true;
+                               break;
+                       case 'u':
+                               if (   (get_uid (optarg, &user_id) == 0)
+                                   || (user_id == (gid_t)-1)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid user ID '%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               uflg = true;
+                               break;
+                       case 'U':
+                               Uflg = true;
+                               break;
+#ifdef WITH_SELINUX
+                       case 'Z':
+                               if (is_selinux_enabled () > 0) {
+                                       user_selinux = optarg;
+                                       Zflg = true;
+                               } else {
+                                       fprintf (stderr,
+                                                _("%s: -Z requires SELinux enabled kernel\n"),
+                                                Prog);
+
+                                       exit (E_BAD_ARG);
+                               }
+                               break;
+#endif
+                       default:
+                               usage ();
+                       }
+                       anyflag = true;
+               }
+       }
+
+       if (!gflg && !Nflg && !Uflg) {
+               /* Get the settings from login.defs */
+               Uflg = getdef_bool ("USERGROUPS_ENAB");
+       }
+
+       /*
+        * Certain options are only valid in combination with others.
+        * Check it here so that they can be specified in any order.
+        */
+       if (oflg && !uflg) {
+               fprintf (stderr,
+                        _("%s: %s flag is only allowed with the %s flag\n"),
+                        Prog, "-o", "-u");
+               usage ();
+       }
+       if (kflg && !mflg) {
+               fprintf (stderr,
+                        _("%s: %s flag is only allowed with the %s flag\n"),
+                        Prog, "-k", "-m");
+               usage ();
+       }
+       if (Uflg && gflg) {
+               fprintf (stderr,
+                        _("%s: options %s and %s conflict\n"),
+                        Prog, "-U", "-g");
+               usage ();
+       }
+       if (Uflg && Nflg) {
+               fprintf (stderr,
+                        _("%s: options %s and %s conflict\n"),
+                        Prog, "-U", "-N");
+               usage ();
+       }
+       if (mflg && Mflg) {
+               fprintf (stderr,
+                        _("%s: options %s and %s conflict\n"),
+                        Prog, "-m", "-M");
+               usage ();
+       }
+
+       /*
+        * Either -D or username is required. Defaults can be set with -D
+        * for the -b, -e, -f, -g, -s options only.
+        */
+       if (Dflg) {
+               if (optind != argc) {
+                       usage ();
+               }
+
+               if (uflg || oflg || Gflg || dflg || cflg || mflg) {
+                       usage ();
+               }
+       } else {
+               if (optind != argc - 1) {
+                       usage ();
+               }
+
+               user_name = argv[optind];
+               if (!is_valid_user_name (user_name)) {
+                       fprintf (stderr,
+                                _("%s: invalid user name '%s'\n"),
+                                Prog, user_name);
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "adding user",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       exit (E_BAD_ARG);
+               }
+               if (!dflg) {
+                       char *uh;
+                       size_t len = strlen (def_home) + strlen (user_name) + 2;
+                       int wlen;
+
+                       uh = xmalloc (len);
+                       wlen = snprintf (uh, len, "%s/%s", def_home, user_name);
+                       assert (wlen == (int) len -1);
+
+                       user_home = uh;
+               }
+       }
+
+       if (!eflg) {
+               user_expire = strtoday (def_expire);
+       }
+
+       if (!gflg) {
+               user_gid = def_group;
+       }
+
+       if (!sflg) {
+               user_shell = def_shell;
+       }
+
+       create_mail_spool = def_create_mail_spool;
+
+       if (!rflg) {
+               /* for system accounts defaults are ignored and we
+                * do not create a home dir */
+               if (getdef_bool("CREATE_HOME")) {
+                       mflg = true;
+               }
+       }
+
+       if (Mflg) {
+               /* absolutely sure that we do not create home dirs */
+               mflg = false;
+       }
+}
+
+/*
+ * close_files - close all of the files that were opened
+ *
+ *     close_files() closes all of the files that were opened for this
+ *     new user. This causes any modified entries to be written out.
+ */
+static void close_files (void)
+{
+       if (pw_close () == 0) {
+               fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+               fail_exit (E_PW_UPDATE);
+       }
+       if (is_shadow_pwd && (spw_close () == 0)) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"), Prog, spw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+               fail_exit (E_PW_UPDATE);
+       }
+       if (do_grp_update) {
+               if (gr_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"), Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+                       fail_exit (E_GRP_UPDATE);
+               }
+#ifdef SHADOWGRP
+               if (is_shadow_grp && (sgr_close () == 0)) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"),
+                                Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+                       fail_exit (E_GRP_UPDATE);
+               }
+#endif
+       }
+       if (is_shadow_pwd) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "unlocking shadow file",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       /* continue */
+               }
+               spw_locked = false;
+       }
+       if (pw_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_ADD_USER, Prog,
+                             "unlocking passwd file",
+                             user_name, AUDIT_NO_ID,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+               /* continue */
+       }
+       pw_locked = false;
+       if (gr_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_ADD_USER, Prog,
+                             "unlocking group file",
+                             user_name, AUDIT_NO_ID,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+               /* continue */
+       }
+       gr_locked = false;
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "unlocking gshadow file",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       /* continue */
+               }
+               sgr_locked = false;
+       }
+#endif
+}
+
+/*
+ * open_files - lock and open the password files
+ *
+ *     open_files() opens the two password files.
+ */
+static void open_files (void)
+{
+       if (pw_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, pw_dbname ());
+               exit (E_PW_UPDATE);
+       }
+       pw_locked = true;
+       if (pw_open (O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, pw_dbname ());
+               fail_exit (E_PW_UPDATE);
+       }
+       if (is_shadow_pwd) {
+               if (spw_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, spw_dbname ());
+                       fail_exit (E_PW_UPDATE);
+               }
+               spw_locked = true;
+               if (spw_open (O_RDWR) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot open %s\n"),
+                                Prog, spw_dbname ());
+                       fail_exit (E_PW_UPDATE);
+               }
+       }
+
+       /*
+        * Lock and open the group file.
+        */
+       if (gr_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, gr_dbname ());
+               fail_exit (E_GRP_UPDATE);
+       }
+       gr_locked = true;
+       if (gr_open (O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+               fail_exit (E_GRP_UPDATE);
+       }
+#ifdef  SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, sgr_dbname ());
+                       fail_exit (E_GRP_UPDATE);
+               }
+               sgr_locked = true;
+               if (sgr_open (O_RDWR) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot open %s\n"),
+                                Prog, sgr_dbname ());
+                       fail_exit (E_GRP_UPDATE);
+               }
+       }
+#endif
+}
+
+static char *empty_list = NULL;
+
+/*
+ * new_grent - initialize the values in a group file entry
+ *
+ *      new_grent() takes all of the values that have been entered and fills
+ *      in a (struct group) with them.
+ */
+
+static void new_grent (struct group *grent)
+{
+       memzero (grent, sizeof *grent);
+       grent->gr_name = (char *) user_name;
+       grent->gr_passwd = SHADOW_PASSWD_STRING;        /* XXX warning: const */
+       grent->gr_gid = user_gid;
+       grent->gr_mem = &empty_list;
+}
+
+#ifdef  SHADOWGRP
+/*
+ * new_sgent - initialize the values in a shadow group file entry
+ *
+ *      new_sgent() takes all of the values that have been entered and fills
+ *      in a (struct sgrp) with them.
+ */
+
+static void new_sgent (struct sgrp *sgent)
+{
+       memzero (sgent, sizeof *sgent);
+       sgent->sg_name = (char *) user_name;
+       sgent->sg_passwd = "!"; /* XXX warning: const */
+       sgent->sg_adm = &empty_list;
+       sgent->sg_mem = &empty_list;
+}
+#endif                         /* SHADOWGRP */
+
+
+/*
+ * grp_add - add new group file entries
+ *
+ *      grp_add() writes the new records to the group files.
+ */
+
+static void grp_add (void)
+{
+       struct group grp;
+
+#ifdef  SHADOWGRP
+       struct sgrp sgrp;
+#endif                         /* SHADOWGRP */
+
+       /*
+        * Create the initial entries for this new group.
+        */
+       new_grent (&grp);
+#ifdef  SHADOWGRP
+       new_sgent (&sgrp);
+#endif                         /* SHADOWGRP */
+
+       /*
+        * Write out the new group file entry.
+        */
+       if (gr_update (&grp) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, gr_dbname (), grp.gr_name);
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_ADD_GROUP, Prog,
+                             "adding group",
+                             grp.gr_name, AUDIT_NO_ID,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+               fail_exit (E_GRP_UPDATE);
+       }
+#ifdef  SHADOWGRP
+       /*
+        * Write out the new shadow group entries as well.
+        */
+       if (is_shadow_grp && (sgr_update (&sgrp) == 0)) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, sgr_dbname (), sgrp.sg_name);
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_ADD_GROUP, Prog,
+                             "adding group",
+                             grp.gr_name, AUDIT_NO_ID,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+               fail_exit (E_GRP_UPDATE);
+       }
+#endif                         /* SHADOWGRP */
+       SYSLOG ((LOG_INFO, "new group: name=%s, GID=%u", user_name, user_gid));
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_GROUP, Prog,
+                     "adding group",
+                     grp.gr_name, AUDIT_NO_ID,
+                     SHADOW_AUDIT_SUCCESS);
+#endif
+       do_grp_update = true;
+}
+
+static void faillog_reset (uid_t uid)
+{
+       struct faillog fl;
+       int fd;
+       off_t offset_uid = (off_t) (sizeof fl) * uid;
+
+       if (access (FAILLOG_FILE, F_OK) != 0) {
+               return;
+       }
+
+       memzero (&fl, sizeof (fl));
+
+       fd = open (FAILLOG_FILE, O_RDWR);
+       if (   (-1 == fd)
+           || (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
+           || (write (fd, &fl, sizeof (fl)) != (ssize_t) sizeof (fl))
+           || (fsync (fd) != 0)
+           || (close (fd) != 0)) {
+               fprintf (stderr,
+                        _("%s: failed to reset the faillog entry of UID %lu: %s\n"),
+                        Prog, (unsigned long) uid, strerror (errno));
+               SYSLOG ((LOG_WARN, "failed to reset the faillog entry of UID %lu", (unsigned long) uid));
+               /* continue */
+       }
+}
+
+static void lastlog_reset (uid_t uid)
+{
+       struct lastlog ll;
+       int fd;
+       off_t offset_uid = (off_t) (sizeof ll) * uid;
+
+       if (access (LASTLOG_FILE, F_OK) != 0) {
+               return;
+       }
+
+       memzero (&ll, sizeof (ll));
+
+       fd = open (LASTLOG_FILE, O_RDWR);
+       if (   (-1 == fd)
+           || (lseek (fd, offset_uid, SEEK_SET) != offset_uid)
+           || (write (fd, &ll, sizeof (ll)) != (ssize_t) sizeof (ll))
+           || (fsync (fd) != 0)
+           || (close (fd) != 0)) {
+               fprintf (stderr,
+                        _("%s: failed to reset the lastlog entry of UID %lu: %s\n"),
+                        Prog, (unsigned long) uid, strerror (errno));
+               SYSLOG ((LOG_WARN, "failed to reset the lastlog entry of UID %lu", (unsigned long) uid));
+               /* continue */
+       }
+}
+
+/*
+ * usr_update - create the user entries
+ *
+ *     usr_update() creates the password file entries for this user
+ *     and will update the group entries if required.
+ */
+static void usr_update (void)
+{
+       struct passwd pwent;
+       struct spwd spent;
+
+       /*
+        * Fill in the password structure with any new fields, making
+        * copies of strings.
+        */
+       new_pwent (&pwent);
+       new_spent (&spent);
+
+       /*
+        * Create a syslog entry. We need to do this now in case anything
+        * happens so we know what we were trying to accomplish.
+        */
+       SYSLOG ((LOG_INFO,
+                "new user: name=%s, UID=%u, GID=%u, home=%s, shell=%s",
+                user_name, (unsigned int) user_id,
+                (unsigned int) user_gid, user_home, user_shell));
+
+       /*
+        * Initialize faillog and lastlog entries for this UID in case
+        * it belongs to a previously deleted user. We do it only if
+        * no user with this UID exists yet (entries for shared UIDs
+        * are left unchanged).  --marekm
+        */
+       /* local, no need for xgetpwuid */
+       if ((!lflg) && (getpwuid (user_id) == NULL)) {
+               faillog_reset (user_id);
+               lastlog_reset (user_id);
+       }
+
+       /*
+        * Put the new (struct passwd) in the table.
+        */
+       if (pw_update (&pwent) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, pw_dbname (), pwent.pw_name);
+               fail_exit (E_PW_UPDATE);
+       }
+
+       /*
+        * Put the new (struct spwd) in the table.
+        */
+       if (is_shadow_pwd && (spw_update (&spent) == 0)) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, spw_dbname (), spent.sp_namp);
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_ADD_USER, Prog,
+                             "adding shadow password",
+                             user_name, (unsigned int) user_id,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+               fail_exit (E_PW_UPDATE);
+       }
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_ADD_USER, Prog,
+                     "adding user",
+                     user_name, (unsigned int) user_id,
+                     SHADOW_AUDIT_SUCCESS);
+#endif
+
+       /*
+        * Do any group file updates for this user.
+        */
+       if (do_grp_update) {
+               grp_update ();
+       }
+}
+
+#ifdef WITH_SELINUX
+static void selinux_update_mapping (void) {
+       if (is_selinux_enabled () <= 0) return;
+
+       if (*user_selinux) { /* must be done after passwd write() */
+               const char *argv[7];
+               argv[0] = "/usr/sbin/semanage";
+               argv[1] = "login";
+               argv[2] = "-a";
+               argv[3] = "-s";
+               argv[4] = user_selinux;
+               argv[5] = user_name;
+               argv[6] = NULL;
+               if (safe_system (argv[0], argv, NULL, 0)) {
+                       fprintf (stderr,
+                                _("%s: warning: the user name %s to %s SELinux user mapping failed.\n"),
+                                Prog, user_name, user_selinux);
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "adding SELinux user mapping",
+                                     user_name, (unsigned int) user_id, 0);
+#endif
+               }
+       }
+}
+#endif
+/*
+ * create_home - create the user's home directory
+ *
+ *     create_home() creates the user's home directory if it does not
+ *     already exist. It will be created mode 755 owned by the user
+ *     with the user's default group.
+ */
+static void create_home (void)
+{
+       if (access (user_home, F_OK) != 0) {
+#ifdef WITH_SELINUX
+               selinux_file_context (user_home);
+#endif
+               /* XXX - create missing parent directories.  --marekm */
+               if (mkdir (user_home, 0) != 0) {
+                       fprintf (stderr,
+                                _("%s: cannot create directory %s\n"),
+                                Prog, user_home);
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "adding home directory",
+                                     user_name, (unsigned int) user_id,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       fail_exit (E_HOMEDIR);
+               }
+               chown (user_home, user_id, user_gid);
+               chmod (user_home,
+                      0777 & ~getdef_num ("UMASK", GETDEF_DEFAULT_UMASK));
+               home_added = true;
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_ADD_USER, Prog,
+                             "adding home directory",
+                             user_name, (unsigned int) user_id,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+#ifdef WITH_SELINUX
+               /* Reset SELinux to create files with default contexts */
+               setfscreatecon (NULL);
+#endif
+       }
+}
+
+/*
+ * create_mail - create the user's mail spool
+ *
+ *     create_mail() creates the user's mail spool if it does not already
+ *     exist. It will be created mode 660 owned by the user and group
+ *     'mail'
+ */
+static void create_mail (void)
+{
+       char *spool, *file;
+       int fd;
+       struct group *gr;
+       gid_t gid;
+       mode_t mode;
+
+       if (strcasecmp (create_mail_spool, "yes") == 0) {
+               spool = getdef_str ("MAIL_DIR");
+               if (NULL == spool) {
+                       spool = "/var/mail";
+               }
+               file = alloca (strlen (spool) + strlen (user_name) + 2);
+               sprintf (file, "%s/%s", spool, user_name);
+               fd = open (file, O_CREAT | O_WRONLY | O_TRUNC | O_EXCL, 0);
+               if (fd < 0) {
+                       perror (_("Creating mailbox file"));
+                       return;
+               }
+
+               gr = getgrnam ("mail"); /* local, no need for xgetgrnam */
+               if (NULL == gr) {
+                       fputs (_("Group 'mail' not found. Creating the user mailbox file with 0600 mode.\n"),
+                              stderr);
+                       gid = user_gid;
+                       mode = 0600;
+               } else {
+                       gid = gr->gr_gid;
+                       mode = 0660;
+               }
+
+               if (   (fchown (fd, user_id, gid) != 0)
+                   || (fchmod (fd, mode) != 0)) {
+                       perror (_("Setting mailbox file permissions"));
+               }
+
+               fsync (fd);
+               close (fd);
+       }
+}
+
+/*
+ * main - useradd command
+ */
+int main (int argc, char **argv)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       pam_handle_t *pamh = NULL;
+       int retval;
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+
+#ifdef WITH_AUDIT
+       audit_help_open ();
+#endif
+
+       /*
+        * Get my name so that I can use it to report errors.
+        */
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       OPENLOG ("useradd");
+
+       sys_ngroups = sysconf (_SC_NGROUPS_MAX);
+       user_groups = (char **) xmalloc ((1 + sys_ngroups) * sizeof (char *));
+       /*
+        * Initialize the list to be empty
+        */
+       user_groups[0] = (char *) 0;
+
+
+       is_shadow_pwd = spw_file_present ();
+#ifdef SHADOWGRP
+       is_shadow_grp = sgr_file_present ();
+#endif
+
+       get_defaults ();
+
+       process_flags (argc, argv);
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       {
+               struct passwd *pampw;
+               pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+               if (pampw == NULL) {
+                       fprintf (stderr,
+                                _("%s: Cannot determine your user name.\n"),
+                                Prog);
+                       fail_exit (1);
+               }
+
+               retval = pam_start ("useradd", pampw->pw_name, &conv, &pamh);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_authenticate (pamh, 0);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_acct_mgmt (pamh, 0);
+       }
+
+       if (NULL != pamh) {
+               (void) pam_end (pamh, retval);
+       }
+       if (PAM_SUCCESS != retval) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               fail_exit (1);
+       }
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+
+       /*
+        * See if we are messing with the defaults file, or creating
+        * a new user.
+        */
+       if (Dflg) {
+               if (gflg || bflg || fflg || eflg || sflg) {
+                       exit ((set_defaults () != 0) ? 1 : 0);
+               }
+
+               show_defaults ();
+               exit (E_SUCCESS);
+       }
+
+       /*
+        * Start with a quick check to see if the user exists.
+        */
+       if (getpwnam (user_name) != NULL) { /* local, no need for xgetpwnam */
+               fprintf (stderr, _("%s: user '%s' already exists\n"), Prog, user_name);
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_ADD_USER, Prog,
+                             "adding user",
+                             user_name, AUDIT_NO_ID,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+               fail_exit (E_NAME_IN_USE);
+       }
+
+       /*
+        * Don't blindly overwrite a group when a user is added...
+        * If you already have a group username, and want to add the user
+        * to that group, use useradd -g username username.
+        * --bero
+        */
+       if (Uflg) {
+               /* local, no need for xgetgrnam */
+               if (getgrnam (user_name) != NULL) {
+                       fprintf (stderr,
+                                _("%s: group %s exists - if you want to add this user to that group, use -g.\n"),
+                                Prog, user_name);
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_ADD_USER, Prog,
+                                     "adding group",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       fail_exit (E_NAME_IN_USE);
+               }
+       }
+
+       /*
+        * Do the hard stuff:
+        * - open the files,
+        * - create the user entries,
+        * - create the home directory,
+        * - create user mail spool,
+        * - flush nscd caches for passwd and group services,
+        * - then close and update the files.
+        */
+       open_files ();
+
+       if (!oflg) {
+               /* first, seek for a valid uid to use for this user.
+                * We do this because later we can use the uid we found as
+                * gid too ... --gafton */
+               if (!uflg) {
+                       if (find_new_uid (rflg, &user_id, NULL) < 0) {
+                               fprintf (stderr, _("%s: can't create user\n"), Prog);
+                               fail_exit (E_UID_IN_USE);
+                       }
+               } else {
+                       if (getpwuid (user_id) != NULL) {
+                               fprintf (stderr,
+                                        _("%s: UID %lu is not unique\n"),
+                                        Prog, (unsigned long) user_id);
+#ifdef WITH_AUDIT
+                               audit_logger (AUDIT_ADD_USER, Prog,
+                                             "adding user",
+                                             user_name, (unsigned int) user_id,
+                                             SHADOW_AUDIT_FAILURE);
+#endif
+                               fail_exit (E_UID_IN_USE);
+                       }
+               }
+       }
+
+       /* do we have to add a group for that user? This is why we need to
+        * open the group files in the open_files() function  --gafton */
+       if (Uflg) {
+               if (find_new_gid (rflg, &user_gid, &user_id) < 0) {
+                       fprintf (stderr,
+                                _("%s: can't create group\n"),
+                                Prog);
+                       fail_exit (4);
+               }
+               grp_add ();
+       }
+
+       usr_update ();
+
+       if (mflg) {
+               create_home ();
+               if (home_added) {
+                       copy_tree (def_template, user_home, user_id, user_gid);
+               } else {
+                       fprintf (stderr,
+                                _("%s: warning: the home directory already exists.\n"
+                                  "Not copying any file from skel directory into it.\n"),
+                                Prog);
+               }
+
+       }
+
+       /* Do not create mail directory for system accounts */
+       if( !rflg ) {
+               create_mail ();
+       }
+
+       close_files ();
+
+#ifdef WITH_SELINUX
+       selinux_update_mapping ();
+#endif
+
+       nscd_flush_cache ("passwd");
+       nscd_flush_cache ("group");
+
+       return E_SUCCESS;
+}
+
diff --git a/src/userdel.c b/src/userdel.c
new file mode 100644 (file)
index 0000000..836880c
--- /dev/null
@@ -0,0 +1,1001 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2008, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: userdel.c 2979 2009-05-22 10:41:10Z nekral-guest $"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/stat.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+#include "defines.h"
+#include "getdef.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "prototypes.h"
+#include "pwauth.h"
+#include "pwio.h"
+#include "shadowio.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+/*
+ * exit status values
+ */
+#define E_PW_UPDATE    1       /* can't update password file */
+#define E_NOTFOUND     6       /* specified user doesn't exist */
+#define E_USER_BUSY    8       /* user currently logged in */
+#define E_GRP_UPDATE   10      /* can't update group file */
+#define E_HOMEDIR      12      /* can't remove home directory */
+
+/*
+ * Global variables
+ */
+char *Prog;
+
+static char *user_name;
+static uid_t user_id;
+static char *user_home;
+
+static bool fflg = false;
+static bool rflg = false;
+
+static bool is_shadow_pwd;
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+static bool sgr_locked = false;
+#endif
+static bool pw_locked  = false;
+static bool gr_locked   = false;
+static bool spw_locked  = false;
+
+/* local function prototypes */
+static void usage (void);
+static void update_groups (void);
+static void close_files (void);
+static void fail_exit (int);
+static void open_files (void);
+static void update_user (void);
+static void user_cancel (const char *);
+
+#ifdef EXTRA_CHECK_HOME_DIR
+static bool path_prefix (const char *, const char *);
+#endif
+static int is_owner (uid_t, const char *);
+static int remove_mailbox (void);
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (void)
+{
+       fputs (_("Usage: userdel [options] LOGIN\n"
+                "\n"
+                "Options:\n"
+                "  -f, --force                   force removal of files,\n"
+                "                                even if not owned by user\n"
+                "  -h, --help                    display this help message and exit\n"
+                "  -r, --remove                  remove home directory and mail spool\n"
+                "\n"), stderr);
+       exit (E_USAGE);
+}
+
+/*
+ * update_groups - delete user from secondary group set
+ *
+ *     update_groups() takes the user name that was given and searches
+ *     the group files for membership in any group.
+ *
+ *     we also check to see if they have any groups they own (the same
+ *     name is their user name) and delete them too (only if USERGROUPS_ENAB
+ *     is enabled).
+ */
+static void update_groups (void)
+{
+       const struct group *grp;
+       struct group *ngrp;
+       struct passwd *pwd;
+
+#ifdef SHADOWGRP
+       bool deleted_user_group = false;
+       const struct sgrp *sgrp;
+       struct sgrp *nsgrp;
+#endif                         /* SHADOWGRP */
+
+       /*
+        * Scan through the entire group file looking for the groups that
+        * the user is a member of.
+        */
+       for (gr_rewind (), grp = gr_next (); NULL != grp; grp = gr_next ()) {
+
+               /*
+                * See if the user specified this group as one of their
+                * concurrent groups.
+                */
+               if (!is_on_list (grp->gr_mem, user_name)) {
+                       continue;
+               }
+
+               /* 
+                * Delete the username from the list of group members and
+                * update the group entry to reflect the change.
+                */
+               ngrp = __gr_dup (grp);
+               if (NULL == ngrp) {
+                       fprintf (stderr,
+                                _("%s: Out of memory. Cannot update %s.\n"),
+                                Prog, gr_dbname ());
+                       exit (13);      /* XXX */
+               }
+               ngrp->gr_mem = del_list (ngrp->gr_mem, user_name);
+               if (gr_update (ngrp) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, gr_dbname (), ngrp->gr_name);
+                       exit (E_GRP_UPDATE);
+               }
+
+               /*
+                * Update the DBM group file with the new entry as well.
+                */
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_DEL_USER, Prog,
+                             "deleting user from group",
+                             user_name, (unsigned int) user_id,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+               SYSLOG ((LOG_INFO, "delete '%s' from group '%s'\n",
+                        user_name, ngrp->gr_name));
+       }
+
+       /*
+        * we've removed their name from all the groups above, so
+        * now if they have a group with the same name as their
+        * user name, with no members, we delete it.
+        * FIXME: below, the check for grp->gr_mem[0] is not sufficient.
+        *        We should retrieve the group with gr_locate and check
+        *        that gr_mem is empty.
+        */
+       grp = xgetgrnam (user_name);
+       if (   (NULL != grp)
+           && getdef_bool ("USERGROUPS_ENAB")
+           && (   (NULL == grp->gr_mem[0])
+               || (   (NULL == grp->gr_mem[1])
+                   && (strcmp (grp->gr_mem[0], user_name) == 0)))) {
+
+               pwd = NULL;
+               if (!fflg) {
+                       /*
+                        * Scan the passwd file to check if this group is still
+                        * used as a primary group.
+                        */
+                       setpwent ();
+                       while ((pwd = getpwent ()) != NULL) {
+                               if (strcmp (pwd->pw_name, user_name) == 0) {
+                                       continue;
+                               }
+                               if (pwd->pw_gid == grp->gr_gid) {
+                                       fprintf (stderr,
+                                                _("%s: group %s is the primary group of another user and is not removed.\n"),
+                                                Prog, grp->gr_name);
+                                       break;
+                               }
+                       }
+                       endpwent ();
+               }
+
+               if (NULL == pwd) {
+                       /*
+                        * We can remove this group, it is not the primary
+                        * group of any remaining user.
+                        */
+                       if (gr_remove (grp->gr_name) == 0) {
+                               fprintf (stderr,
+                                        _("%s: cannot remove entry '%s' from %s\n"),
+                                        Prog, grp->gr_name, gr_dbname ());
+                               fail_exit (E_GRP_UPDATE);
+                       }
+
+#ifdef SHADOWGRP
+                       deleted_user_group = true;
+#endif
+
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_DEL_GROUP, Prog,
+                                     "deleting group",
+                                     grp->gr_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_SUCCESS);
+#endif
+                       SYSLOG ((LOG_INFO,
+                                "removed group '%s' owned by '%s'\n",
+                                grp->gr_name, user_name));
+               }
+       }
+#ifdef SHADOWGRP
+       if (!is_shadow_grp) {
+               return;
+       }
+
+       /*
+        * Scan through the entire shadow group file looking for the groups
+        * that the user is a member of. Both the administrative list and
+        * the ordinary membership list is checked.
+        */
+       for (sgr_rewind (), sgrp = sgr_next ();
+            NULL != sgrp;
+            sgrp = sgr_next ()) {
+               bool was_member, was_admin;
+
+               /*
+                * See if the user specified this group as one of their
+                * concurrent groups.
+                */
+               was_member = is_on_list (sgrp->sg_mem, user_name);
+               was_admin = is_on_list (sgrp->sg_adm, user_name);
+
+               if (!was_member && !was_admin) {
+                       continue;
+               }
+
+               nsgrp = __sgr_dup (sgrp);
+               if (NULL == nsgrp) {
+                       fprintf (stderr,
+                                _("%s: Out of memory. Cannot update %s.\n"),
+                                Prog, sgr_dbname ());
+                       exit (13);      /* XXX */
+               }
+
+               if (was_member) {
+                       nsgrp->sg_mem = del_list (nsgrp->sg_mem, user_name);
+               }
+
+               if (was_admin) {
+                       nsgrp->sg_adm = del_list (nsgrp->sg_adm, user_name);
+               }
+
+               if (sgr_update (nsgrp) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, sgr_dbname (), nsgrp->sg_name);
+                       exit (E_GRP_UPDATE);
+               }
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_DEL_USER, Prog,
+                             "deleting user from shadow group",
+                             user_name, (unsigned int) user_id,
+                             SHADOW_AUDIT_SUCCESS);
+#endif
+               SYSLOG ((LOG_INFO, "delete '%s' from shadow group '%s'\n",
+                        user_name, nsgrp->sg_name));
+       }
+
+       if (   deleted_user_group
+           && (sgr_locate (user_name) != NULL)) {
+               if (sgr_remove (user_name) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot remove entry '%s' from %s\n"),
+                                Prog, user_name, sgr_dbname ());
+                       fail_exit (E_GRP_UPDATE);
+               }
+       }
+#endif                         /* SHADOWGRP */
+}
+
+/*
+ * close_files - close all of the files that were opened
+ *
+ *     close_files() closes all of the files that were opened for this
+ *     new user. This causes any modified entries to be written out.
+ */
+static void close_files (void)
+{
+       if (pw_close () == 0) {
+               fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+               fail_exit (E_PW_UPDATE);
+       }
+       if (pw_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+               /* continue */
+       }
+       pw_locked = false;
+
+       if (is_shadow_pwd) {
+               if (spw_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failure while writing changes to %s", spw_dbname ()));
+                       fail_exit (E_PW_UPDATE);
+               }
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+               spw_locked = false;
+       }
+
+       if (gr_close () == 0) {
+               fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+               fail_exit (E_GRP_UPDATE);
+       }
+       if (gr_unlock () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+               /* continue */
+       }
+       gr_locked = false;
+
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failure while writing changes to %s", sgr_dbname ()));
+                       fail_exit (E_GRP_UPDATE);
+               }
+
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                       /* continue */
+               }
+               sgr_locked = false;
+       }
+#endif
+}
+
+/*
+ * fail_exit - exit with a failure code after unlocking the files
+ */
+static void fail_exit (int code)
+{
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+       if (gr_locked) {
+               if (gr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+                       /* continue */
+               }
+       }
+       if (spw_locked) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+       }
+#ifdef SHADOWGRP
+       if (sgr_locked) {
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                       /* continue */
+               }
+       }
+#endif
+
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_DEL_USER, Prog,
+                     "deleting user",
+                     user_name, (unsigned int) user_id,
+                     SHADOW_AUDIT_FAILURE);
+#endif
+
+       exit (code);
+}
+
+/*
+ * open_files - lock and open the password files
+ *
+ *     open_files() opens the two password files.
+ */
+
+static void open_files (void)
+{
+       if (pw_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, pw_dbname ());
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_DEL_USER, Prog,
+                             "locking password file",
+                             user_name, (unsigned int) user_id,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+               fail_exit (E_PW_UPDATE);
+       }
+       pw_locked = true;
+       if (pw_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"), Prog, pw_dbname ());
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_DEL_USER, Prog,
+                             "opening password file",
+                             user_name, (unsigned int) user_id,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+               fail_exit (E_PW_UPDATE);
+       }
+       if (is_shadow_pwd) {
+               if (spw_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, spw_dbname ());
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_DEL_USER, Prog,
+                                     "locking shadow password file",
+                                     user_name, (unsigned int) user_id,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       fail_exit (E_PW_UPDATE);
+               }
+               spw_locked = true;
+               if (spw_open (O_RDWR) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot open %s\n"),
+                                Prog, spw_dbname ());
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_DEL_USER, Prog,
+                                     "opening shadow password file",
+                                     user_name, (unsigned int) user_id,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       fail_exit (E_PW_UPDATE);
+               }
+       }
+       if (gr_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, gr_dbname ());
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_DEL_USER, Prog,
+                             "locking group file",
+                             user_name, (unsigned int) user_id,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+               fail_exit (E_GRP_UPDATE);
+       }
+       gr_locked = true;
+       if (gr_open (O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_DEL_USER, Prog,
+                             "opening group file",
+                             user_name, (unsigned int) user_id,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+               fail_exit (E_GRP_UPDATE);
+       }
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               if (sgr_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, sgr_dbname ());
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_DEL_USER, Prog,
+                                     "locking shadow group file",
+                                     user_name, (unsigned int) user_id,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       fail_exit (E_GRP_UPDATE);
+               }
+               sgr_locked= true;
+               if (sgr_open (O_RDWR) == 0) {
+                       fprintf (stderr, _("%s: cannot open %s\n"),
+                                Prog, sgr_dbname ());
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_DEL_USER, Prog,
+                                     "opening shadow group file",
+                                     user_name, (unsigned int) user_id,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       fail_exit (E_GRP_UPDATE);
+               }
+       }
+#endif
+}
+
+/*
+ * update_user - delete the user entries
+ *
+ *     update_user() deletes the password file entries for this user
+ *     and will update the group entries as required.
+ */
+static void update_user (void)
+{
+       if (pw_remove (user_name) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot remove entry '%s' from %s\n"),
+                        Prog, user_name, pw_dbname ());
+               fail_exit (E_PW_UPDATE);
+       }
+       if (   is_shadow_pwd
+           && (spw_locate (user_name) != NULL)
+           && (spw_remove (user_name) == 0)) {
+               fprintf (stderr,
+                        _("%s: cannot remove entry '%s' from %s\n"),
+                        Prog, user_name, spw_dbname ());
+               fail_exit (E_PW_UPDATE);
+       }
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_DEL_USER, Prog,
+                     "deleting user entries",
+                     user_name, (unsigned int) user_id,
+                     SHADOW_AUDIT_SUCCESS);
+#endif
+       SYSLOG ((LOG_INFO, "delete user '%s'\n", user_name));
+}
+
+/* 
+ * user_cancel - cancel cron and at jobs
+ *
+ *     user_cancel calls a script for additional cleanups like removal of
+ *     cron, at, or print jobs.
+ */
+
+static void user_cancel (const char *user)
+{
+       char *cmd;
+       pid_t pid, wpid;
+       int status;
+
+       cmd = getdef_str ("USERDEL_CMD");
+       if (NULL == cmd) {
+               return;
+       }
+       pid = fork ();
+       if (pid == 0) {
+               execl (cmd, cmd, user, (char *) 0);
+               perror (cmd);
+               exit (errno == ENOENT ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
+       } else if ((pid_t)-1 == pid) {
+               perror ("fork");
+               return;
+       }
+       do {
+               wpid = wait (&status);
+       } while ((wpid != pid) && ((pid_t)-1 != wpid));
+}
+
+#ifdef EXTRA_CHECK_HOME_DIR
+static bool path_prefix (const char *s1, const char *s2)
+{
+       return (   (strncmp (s2, s1, strlen (s1)) == 0)
+               && (   ('\0' == s2[strlen (s1)])
+                   || ('/'  == s2[strlen (s1)])));
+}
+#endif
+
+/*
+ * is_owner - Check if path is owned by uid
+ *
+ * Return
+ *  1: path exists and is owned by uid
+ *  0: path is not owned by uid, or a failure occured
+ * -1: path does not exist
+ */
+static int is_owner (uid_t uid, const char *path)
+{
+       struct stat st;
+
+       errno = 0;
+       if (stat (path, &st) != 0) {
+               if ((ENOENT == errno) || (ENOTDIR == errno)) {
+                       /* The file or directory does not exist */
+                       return -1;
+               } else {
+                       return 0;
+               }
+       }
+       return (st.st_uid == uid);
+}
+
+static int remove_mailbox (void)
+{
+       const char *maildir;
+       char mailfile[1024];
+       int i;
+       int errors = 0;
+
+       maildir = getdef_str ("MAIL_DIR");
+#ifdef MAIL_SPOOL_DIR
+       if ((NULL == maildir) && (getdef_str ("MAIL_FILE") == NULL)) {
+               maildir = MAIL_SPOOL_DIR;
+       }
+#endif
+       if (NULL == maildir) {
+               return 0;
+       }
+       snprintf (mailfile, sizeof mailfile, "%s/%s", maildir, user_name);
+       if (fflg) {
+               if (unlink (mailfile) != 0) {
+                       fprintf (stderr,
+                                _("%s: warning: can't remove %s: %s\n"),
+                                Prog, mailfile, strerror (errno));
+                       SYSLOG ((LOG_ERR, "Cannot remove %s: %s", mailfile, strerror (errno)));
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_DEL_USER, Prog,
+                                     "deleting mail file",
+                                     user_name, (unsigned int) user_id,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       errors = 1;
+                       /* continue */
+               }
+#ifdef WITH_AUDIT
+               else
+               {
+                       audit_logger (AUDIT_DEL_USER, Prog,
+                                     "deleting mail file",
+                                     user_name, (unsigned int) user_id,
+                                     SHADOW_AUDIT_SUCCESS);
+               }
+#endif
+               return errors;
+       }
+       i = is_owner (user_id, mailfile);
+       if (i == 0) {
+               fprintf (stderr,
+                        _("%s: %s not owned by %s, not removing\n"),
+                        Prog, mailfile, user_name);
+               SYSLOG ((LOG_ERR,
+                        "%s not owned by %s, not removed",
+                        mailfile, strerror (errno)));
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_DEL_USER, Prog,
+                             "deleting mail file",
+                             user_name, (unsigned int) user_id,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+               return 1;
+       } else if (i == -1) {
+               return 0;               /* mailbox doesn't exist */
+       }
+       if (unlink (mailfile) != 0) {
+               fprintf (stderr,
+                        _("%s: warning: can't remove %s: %s\n"),
+                        Prog, mailfile, strerror (errno));
+               SYSLOG ((LOG_ERR, "Cannot remove %s: %s", mailfile, strerror (errno)));
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_DEL_USER, Prog,
+                             "deleting mail file",
+                             user_name, (unsigned int) user_id,
+                             SHADOW_AUDIT_FAILURE);
+#endif
+               errors = 1;
+               /* continue */
+       }
+#ifdef WITH_AUDIT
+       else
+       {
+               audit_logger (AUDIT_DEL_USER, Prog,
+                             "deleting mail file",
+                             user_name, (unsigned int) user_id,
+                             SHADOW_AUDIT_SUCCESS);
+       }
+#endif
+       return errors;
+}
+
+/*
+ * main - userdel command
+ */
+int main (int argc, char **argv)
+{
+       int errors = 0; /* Error in the removal of the home directory */
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       pam_handle_t *pamh = NULL;
+       int retval;
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+
+#ifdef WITH_AUDIT
+       audit_help_open ();
+#endif
+
+       /*
+        * Get my name so that I can use it to report errors.
+        */
+       Prog = Basename (argv[0]);
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       {
+               /*
+                * Parse the command line options.
+                */
+               int c;
+               static struct option long_options[] = {
+                       {"force", no_argument, NULL, 'f'},
+                       {"help", no_argument, NULL, 'h'},
+                       {"remove", no_argument, NULL, 'r'},
+                       {NULL, 0, NULL, '\0'}
+               };
+               while ((c = getopt_long (argc, argv, "fhr",
+                                        long_options, NULL)) != -1) {
+                       switch (c) {
+                       case 'f':       /* force remove even if not owned by user */
+                               fflg = true;
+                               break;
+                       case 'r':       /* remove home dir and mailbox */
+                               rflg = true;
+                               break;
+                       default:
+                               usage ();
+                       }
+               }
+       }
+
+       if ((optind + 1) != argc) {
+               usage ();
+       }
+
+       OPENLOG ("userdel");
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       {
+               struct passwd *pampw;
+               pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+               if (pampw == NULL) {
+                       fprintf (stderr,
+                                _("%s: Cannot determine your user name.\n"),
+                                Prog);
+                       exit (E_PW_UPDATE);
+               }
+
+               retval = pam_start ("userdel", pampw->pw_name, &conv, &pamh);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_authenticate (pamh, 0);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_acct_mgmt (pamh, 0);
+       }
+
+       if (NULL != pamh) {
+               (void) pam_end (pamh, retval);
+       }
+       if (PAM_SUCCESS != retval) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               exit (E_PW_UPDATE);
+       }
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+
+       is_shadow_pwd = spw_file_present ();
+#ifdef SHADOWGRP
+       is_shadow_grp = sgr_file_present ();
+#endif
+
+       /*
+        * Start with a quick check to see if the user exists.
+        */
+       user_name = argv[argc - 1];
+       {
+               struct passwd *pwd;
+               pwd = getpwnam (user_name); /* local, no need for xgetpwnam */
+               if (NULL == pwd) {
+                       fprintf (stderr, _("%s: user '%s' does not exist\n"),
+                                Prog, user_name);
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_DEL_USER, Prog,
+                                     "deleting user not found",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       exit (E_NOTFOUND);
+               }
+               user_id = pwd->pw_uid;
+               user_home = xstrdup (pwd->pw_dir);
+       }
+#ifdef USE_NIS
+
+       /*
+        * Now make sure it isn't an NIS user.
+        */
+       if (__ispwNIS ()) {
+               char *nis_domain;
+               char *nis_master;
+
+               fprintf (stderr,
+                        _("%s: user %s is a NIS user\n"), Prog, user_name);
+               if (   !yp_get_default_domain (&nis_domain)
+                   && !yp_master (nis_domain, "passwd.byname", &nis_master)) {
+                       fprintf (stderr,
+                                _("%s: %s is the NIS master\n"),
+                                Prog, nis_master);
+               }
+               exit (E_NOTFOUND);
+       }
+#endif
+       /*
+        * Check to make certain the user isn't logged in.
+        * Note: This is a best effort basis. The user may log in between,
+        * a cron job may be started on her behalf, etc.
+        */
+       if (user_busy (user_name, user_id) != 0) {
+               fprintf (stderr,
+                        _("%s: user %s is currently logged in\n"),
+                        Prog, user_name);
+               if (!fflg) {
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_DEL_USER, Prog,
+                                     "deleting user logged in",
+                                     user_name, AUDIT_NO_ID,
+                                     SHADOW_AUDIT_FAILURE);
+#endif
+                       exit (E_USER_BUSY);
+               }
+       }
+
+       /*
+        * Do the hard stuff - open the files, create the user entries,
+        * create the home directory, then close and update the files.
+        */
+       open_files ();
+       update_user ();
+       update_groups ();
+
+       if (rflg) {
+               errors += remove_mailbox ();
+       }
+       if (rflg) {
+               int home_owned = is_owner (user_id, user_home);
+               if (-1 == home_owned) {
+                       fprintf (stderr,
+                                _("%s: %s home directory (%s) not found\n"),
+                                Prog, user_name, user_home);
+                       rflg = 0;
+               } else if ((0 == home_owned) && !fflg) {
+                       fprintf (stderr,
+                                _("%s: %s not owned by %s, not removing\n"),
+                                Prog, user_home, user_name);
+                       rflg = 0;
+                       errors++;
+                       /* continue */
+               }
+       }
+
+#ifdef EXTRA_CHECK_HOME_DIR
+       /* This may be slow, the above should be good enough. */
+       if (rflg && !fflg) {
+               struct passwd *pwd;
+               /*
+                * For safety, refuse to remove the home directory if it
+                * would result in removing some other user's home
+                * directory. Still not perfect so be careful, but should
+                * prevent accidents if someone has /home or / as home
+                * directory...  --marekm
+                */
+               setpwent ();
+               while ((pwd = getpwent ())) {
+                       if (strcmp (pwd->pw_name, user_name) == 0) {
+                               continue;
+                       }
+                       if (path_prefix (user_home, pwd->pw_dir)) {
+                               fprintf (stderr,
+                                        _
+                                        ("%s: not removing directory %s (would remove home of user %s)\n"),
+                                        Prog, user_home, pwd->pw_name);
+                               rflg = false;
+                               errors++;
+                               /* continue */
+                               break;
+                       }
+               }
+               endpwent ();
+       }
+#endif
+
+       if (rflg) {
+               if (remove_tree (user_home) != 0) {
+                       fprintf (stderr,
+                                _("%s: error removing directory %s\n"),
+                                Prog, user_home);
+                       errors++;
+                       /* continue */
+               }
+#ifdef WITH_AUDIT
+               else
+               {
+                       audit_logger (AUDIT_DEL_USER, Prog,
+                                     "deleting home directory",
+                                     user_name, (unsigned int) user_id,
+                                     SHADOW_AUDIT_SUCCESS);
+               }
+#endif
+       }
+#ifdef WITH_AUDIT
+       if (0 != errors) {
+               audit_logger (AUDIT_DEL_USER, Prog,
+                             "deleting home directory",
+                             user_name, AUDIT_NO_ID,
+                             SHADOW_AUDIT_FAILURE);
+       }
+#endif
+
+#ifdef WITH_SELINUX
+       if (is_selinux_enabled () > 0) {
+               const char *args[5];
+               args[0] = "/usr/sbin/semanage";
+               args[1] = "login";
+               args[2] = "-d";
+               args[3] = user_name;
+               args[4] = NULL;
+               safe_system (args[0], args, NULL, 1);
+       }
+#endif
+
+       /*
+        * Cancel any crontabs or at jobs. Have to do this before we remove
+        * the entry from /etc/passwd.
+        */
+       user_cancel (user_name);
+       close_files ();
+
+       nscd_flush_cache ("passwd");
+       nscd_flush_cache ("group");
+
+       return ((0 != errors) ? E_HOMEDIR : E_SUCCESS);
+}
+
diff --git a/src/usermod.c b/src/usermod.c
new file mode 100644 (file)
index 0000000..3cd5cbb
--- /dev/null
@@ -0,0 +1,1849 @@
+/*
+ * Copyright (c) 1991 - 1994, Julianne Frances Haugh
+ * Copyright (c) 1996 - 2000, Marek Michałkiewicz
+ * Copyright (c) 2000 - 2006, Tomasz Kłoczko
+ * Copyright (c) 2007 - 2009, Nicolas François
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the copyright holders or contributors may not be used to
+ *    endorse or promote products derived from this software without
+ *    specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#ident "$Id: usermod.c 2980 2009-05-22 10:42:51Z nekral-guest $"
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <grp.h>
+#include <lastlog.h>
+#include <pwd.h>
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+#include "pam_defs.h"
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <time.h>
+#include "chkname.h"
+#include "defines.h"
+#include "faillog.h"
+#include "getdef.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "prototypes.h"
+#include "pwauth.h"
+#include "pwio.h"
+#ifdef SHADOWGRP
+#include "sgroupio.h"
+#endif
+#include "shadowio.h"
+
+/*
+ * exit status values
+ * for E_GRP_UPDATE and E_NOSPACE (not used yet), other update requests
+ * will be implemented (as documented in the Solaris 2.x man page).
+ */
+/*@-exitarg@*/
+#define E_SUCCESS      0       /* success */
+#define E_PW_UPDATE    1       /* can't update password file */
+#define E_USAGE                2       /* invalid command syntax */
+#define E_BAD_ARG      3       /* invalid argument to option */
+#define E_UID_IN_USE   4       /* UID already in use (and no -o) */
+/* #define E_BAD_PWFILE        5          passwd file contains errors */
+#define E_NOTFOUND     6       /* specified user/group doesn't exist */
+#define E_USER_BUSY    8       /* user to modify is logged in */
+#define E_NAME_IN_USE  9       /* username already in use */
+#define E_GRP_UPDATE   10      /* can't update group file */
+/* #define E_NOSPACE   11         insufficient space to move home dir */
+#define E_HOMEDIR      12      /* unable to complete home dir move */
+#define        VALID(s)        (strcspn (s, ":\n") == strlen (s))
+/*
+ * Global variables
+ */
+char *Prog;
+
+static char *user_name;
+static char *user_newname;
+static char *user_pass;
+static uid_t user_id;
+static uid_t user_newid;
+static gid_t user_gid;
+static gid_t user_newgid;
+static char *user_comment;
+static char *user_newcomment;
+static char *user_home;
+static char *user_newhome;
+static char *user_shell;
+#ifdef WITH_SELINUX
+static const char *user_selinux = "";
+#endif
+static char *user_newshell;
+static long user_expire;
+static long user_newexpire;
+static long user_inactive;
+static long user_newinactive;
+static long sys_ngroups;
+static char **user_groups;     /* NULL-terminated list */
+
+static bool
+    aflg = false,              /* append to existing secondary group set */
+    cflg = false,              /* new comment (GECOS) field */
+    dflg = false,              /* new home directory */
+    eflg = false,              /* days since 1970-01-01 when account becomes expired */
+    fflg = false,              /* days until account with expired password is locked */
+    gflg = false,              /* new primary group ID */
+    Gflg = false,              /* new secondary group set */
+    Lflg = false,              /* lock the password */
+    lflg = false,              /* new user name */
+    mflg = false,              /* create user's home directory if it doesn't exist */
+    oflg = false,              /* permit non-unique user ID to be specified with -u */
+    pflg = false,              /* new encrypted password */
+    sflg = false,              /* new shell program */
+#ifdef WITH_SELINUX
+    Zflg = false,              /* new selinux user */
+#endif
+    uflg = false,              /* specify new user ID */
+    Uflg = false;              /* unlock the password */
+
+static bool is_shadow_pwd;
+
+#ifdef SHADOWGRP
+static bool is_shadow_grp;
+#endif
+
+static bool pw_locked  = false;
+static bool spw_locked = false;
+static bool gr_locked  = false;
+#ifdef SHADOWGRP
+static bool sgr_locked = false;
+#endif
+
+
+/* local function prototypes */
+static void date_to_str (char *buf, size_t maxsize,
+                         long int date, const char *negativ);
+static int get_groups (char *);
+static void usage (void);
+static void new_pwent (struct passwd *);
+#ifdef WITH_SELINUX
+static void selinux_update_mapping (void);
+#endif
+
+static void new_spent (struct spwd *);
+static void fail_exit (int);
+static void update_group (void);
+
+#ifdef SHADOWGRP
+static void update_gshadow (void);
+#endif
+static void grp_update (void);
+
+static void process_flags (int, char **);
+static void close_files (void);
+static void open_files (void);
+static void usr_update (void);
+static void move_home (void);
+static void update_lastlog (void);
+static void update_faillog (void);
+
+#ifndef NO_MOVE_MAILBOX
+static void move_mailbox (void);
+#endif
+
+static void date_to_str (char *buf, size_t maxsize,
+                         long int date, const char *negativ)
+{
+       struct tm *tp;
+
+       if ((negativ != NULL) && (date < 0)) {
+               strncpy (buf, negativ, maxsize);
+       } else {
+               time_t t = (time_t) date;
+               tp = gmtime (&t);
+#ifdef HAVE_STRFTIME
+               strftime (buf, maxsize, "%Y-%m-%d", tp);
+#else
+               snprintf (buf, maxsize, "%04d-%02d-%02d",
+                         tp->tm_year + 1900, tp->tm_mon + 1, tp->tm_mday);
+#endif                         /* HAVE_STRFTIME */
+       }
+       buf[maxsize - 1] = '\0';
+}
+
+/*
+ * get_groups - convert a list of group names to an array of group IDs
+ *
+ *     get_groups() takes a comma-separated list of group names and
+ *     converts it to a NULL-terminated array. Any unknown group names are
+ *     reported as errors.
+ */
+static int get_groups (char *list)
+{
+       char *cp;
+       const struct group *grp;
+       int errors = 0;
+       int ngroups = 0;
+
+       /*
+        * Initialize the list to be empty
+        */
+       user_groups[0] = (char *) 0;
+
+       if ('\0' == *list) {
+               return 0;
+       }
+
+       /*
+        * So long as there is some data to be converted, strip off each
+        * name and look it up. A mix of numerical and string values for
+        * group identifiers is permitted.
+        */
+       do {
+               /*
+                * Strip off a single name from the list
+                */
+               cp = strchr (list, ',');
+               if (NULL != cp) {
+                       *cp = '\0';
+                       cp++;
+               }
+
+               /*
+                * Names starting with digits are treated as numerical GID
+                * values, otherwise the string is looked up as is.
+                */
+               grp = getgr_nam_gid (list);
+
+               /*
+                * There must be a match, either by GID value or by
+                * string name.
+                */
+               if (NULL == grp) {
+                       fprintf (stderr, _("%s: group '%s' does not exist\n"),
+                                Prog, list);
+                       errors++;
+               }
+               list = cp;
+
+               /*
+                * If the group doesn't exist, don't dump core. Instead,
+                * try the next one.  --marekm
+                */
+               if (NULL == grp) {
+                       continue;
+               }
+
+#ifdef USE_NIS
+               /*
+                * Don't add this group if they are an NIS group. Tell the
+                * user to go to the server for this group.
+                */
+               if (__isgrNIS ()) {
+                       fprintf (stderr,
+                                _("%s: group '%s' is a NIS group.\n"),
+                                Prog, grp->gr_name);
+                       continue;
+               }
+#endif
+
+               if (ngroups == sys_ngroups) {
+                       fprintf (stderr,
+                                _("%s: too many groups specified (max %d).\n"),
+                                Prog, ngroups);
+                       break;
+               }
+
+               /*
+                * Add the group name to the user's list of groups.
+                */
+               user_groups[ngroups++] = xstrdup (grp->gr_name);
+       } while (NULL != list);
+
+       user_groups[ngroups] = (char *) 0;
+
+       /*
+        * Any errors in finding group names are fatal
+        */
+       if (0 != errors) {
+               return -1;
+       }
+
+       return 0;
+}
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (void)
+{
+       fprintf (stderr,
+                _("Usage: usermod [options] LOGIN\n"
+                "\n"
+                "Options:\n"
+                "  -c, --comment COMMENT         new value of the GECOS field\n"
+                "  -d, --home HOME_DIR           new home directory for the user account\n"
+                "  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE\n"
+                "  -f, --inactive INACTIVE       set password inactive after expiration\n"
+                "                                to INACTIVE\n"
+                "  -g, --gid GROUP               force use GROUP as new primary group\n"
+                "  -G, --groups GROUPS           new list of supplementary GROUPS\n"
+                "  -a, --append                  append the user to the supplemental GROUPS\n"
+                "                                mentioned by the -G option without removing\n"
+                "                                him/her from other groups\n"
+                "  -h, --help                    display this help message and exit\n"
+                "  -l, --login NEW_LOGIN         new value of the login name\n"
+                "  -L, --lock                    lock the user account\n"
+                "  -m, --move-home               move contents of the home directory to the\n"
+                "                                new location (use only with -d)\n"
+                "  -o, --non-unique              allow using duplicate (non-unique) UID\n"
+                "  -p, --password PASSWORD       use encrypted password for the new password\n"
+                "  -s, --shell SHELL             new login shell for the user account\n"
+                "  -u, --uid UID                 new UID for the user account\n"
+                "  -U, --unlock                  unlock the user account\n"
+                "%s"
+                "\n"),
+#ifdef WITH_SELINUX
+                _("  -Z, --selinux-user            new SELinux user mapping for the user account\n")
+#else
+                ""
+#endif
+                );
+       exit (E_USAGE);
+}
+
+/*
+ * update encrypted password string (for both shadow and non-shadow
+ * passwords)
+ */
+static char *new_pw_passwd (char *pw_pass)
+{
+       if (Lflg && ('!' != pw_pass[0])) {
+               char *buf = xmalloc (strlen (pw_pass) + 2);
+
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "updating passwd",
+                             user_newname, (unsigned int) user_newid, 0);
+#endif
+               SYSLOG ((LOG_INFO, "lock user '%s' password", user_newname));
+               strcpy (buf, "!");
+               strcat (buf, pw_pass);
+               pw_pass = buf;
+       } else if (Uflg && pw_pass[0] == '!') {
+               char *s;
+
+               if (pw_pass[1] == '\0') {
+                       fprintf (stderr,
+                                _("%s: unlocking the user's password would result in a passwordless account.\n"
+                                  "You should set a password with usermod -p to unlock this user's password.\n"),
+                                Prog);
+                       return pw_pass;
+               }
+
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "updating password",
+                             user_newname, (unsigned int) user_newid, 0);
+#endif
+               SYSLOG ((LOG_INFO, "unlock user '%s' password", user_newname));
+               s = pw_pass;
+               while ('\0' != *s) {
+                       *s = *(s + 1);
+                       s++;
+               }
+       } else if (pflg) {
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "changing password",
+                             user_newname, (unsigned int) user_newid, 1);
+#endif
+               SYSLOG ((LOG_INFO, "change user '%s' password", user_newname));
+               pw_pass = xstrdup (user_pass);
+       }
+       return pw_pass;
+}
+
+/*
+ * new_pwent - initialize the values in a password file entry
+ *
+ *     new_pwent() takes all of the values that have been entered and fills
+ *     in a (struct passwd) with them.
+ */
+static void new_pwent (struct passwd *pwent)
+{
+       if (lflg) {
+               if (pw_locate (user_newname) != NULL) {
+                       fprintf (stderr,
+                                _("%s: user '%s' already exists in %s\n"),
+                                Prog, user_newname, pw_dbname ());
+                       fail_exit (E_NAME_IN_USE);
+               }
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "changing name",
+                             user_newname, (unsigned int) user_newid, 1);
+#endif
+               SYSLOG ((LOG_INFO,
+                        "change user name '%s' to '%s'",
+                        pwent->pw_name, user_newname));
+               pwent->pw_name = xstrdup (user_newname);
+       }
+       if (!is_shadow_pwd) {
+               pwent->pw_passwd = new_pw_passwd (pwent->pw_passwd);
+       }
+
+       if (uflg) {
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "changing uid",
+                             user_newname, (unsigned int) user_newid, 1);
+#endif
+               SYSLOG ((LOG_INFO,
+                        "change user '%s' UID from '%d' to '%d'",
+                        pwent->pw_name, pwent->pw_uid, user_newid));
+               pwent->pw_uid = user_newid;
+       }
+       if (gflg) {
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "changing primary group",
+                             user_newname, (unsigned int) user_newid, 1);
+#endif
+               SYSLOG ((LOG_INFO,
+                        "change user '%s' GID from '%d' to '%d'",
+                        pwent->pw_name, pwent->pw_gid, user_newgid));
+               pwent->pw_gid = user_newgid;
+       }
+       if (cflg) {
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "changing comment",
+                             user_newname, (unsigned int) user_newid, 1);
+#endif
+               pwent->pw_gecos = user_newcomment;
+       }
+
+       if (dflg) {
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "changing home directory",
+                             user_newname, (unsigned int) user_newid, 1);
+#endif
+               SYSLOG ((LOG_INFO,
+                        "change user '%s' home from '%s' to '%s'",
+                        pwent->pw_name, pwent->pw_dir, user_newhome));
+               pwent->pw_dir = user_newhome;
+       }
+       if (sflg) {
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "changing user shell",
+                             user_newname, (unsigned int) user_newid, 1);
+#endif
+               SYSLOG ((LOG_INFO,
+                        "change user '%s' shell from '%s' to '%s'",
+                        pwent->pw_name, pwent->pw_shell, user_newshell));
+               pwent->pw_shell = user_newshell;
+       }
+}
+
+/*
+ * new_spent - initialize the values in a shadow password file entry
+ *
+ *     new_spent() takes all of the values that have been entered and fills
+ *     in a (struct spwd) with them.
+ */
+static void new_spent (struct spwd *spent)
+{
+       if (lflg) {
+               if (spw_locate (user_newname) != NULL) {
+                       fprintf (stderr,
+                                _("%s: user '%s' already exists in %s\n"),
+                                Prog, user_newname, spw_dbname ());
+                       fail_exit (E_NAME_IN_USE);
+               }
+               spent->sp_namp = xstrdup (user_newname);
+       }
+
+       if (fflg) {
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "changing inactive days",
+                             user_newname, (unsigned int) user_newid, 1);
+#endif
+               SYSLOG ((LOG_INFO,
+                        "change user '%s' inactive from '%ld' to '%ld'",
+                        spent->sp_namp, spent->sp_inact, user_newinactive));
+               spent->sp_inact = user_newinactive;
+       }
+       if (eflg) {
+               /* log dates rather than numbers of days. */
+               char new_exp[16], old_exp[16];
+               date_to_str (new_exp, sizeof(new_exp),
+                            user_newexpire * DAY, "never");
+               date_to_str (old_exp, sizeof(old_exp),
+                            user_expire * DAY, "never");
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "changing expiration date",
+                             user_newname, (unsigned int) user_newid, 1);
+#endif
+               SYSLOG ((LOG_INFO,
+                        "change user '%s' expiration from '%s' to '%s'",
+                        spent->sp_namp, old_exp, new_exp));
+               spent->sp_expire = user_newexpire;
+       }
+       spent->sp_pwdp = new_pw_passwd (spent->sp_pwdp);
+       if (pflg) {
+               spent->sp_lstchg = (long) time ((time_t *) 0) / SCALE;
+               if (0 == spent->sp_lstchg) {
+                       /* Better disable aging than requiring a password
+                        * change */
+                       spent->sp_lstchg = -1;
+               }
+       }
+}
+
+/*
+ * fail_exit - exit with an error code after unlocking files
+ */
+static void fail_exit (int code)
+{
+       if (gr_locked) {
+               if (gr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+                       /* continue */
+               }
+       }
+#ifdef SHADOWGRP
+       if (sgr_locked) {
+               if (sgr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, sgr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
+                       /* continue */
+               }
+       }
+#endif
+       if (spw_locked) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+                       /* continue */
+               }
+       }
+       if (pw_locked) {
+               if (pw_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+                       /* continue */
+               }
+       }
+
+#ifdef WITH_AUDIT
+       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                     "modifying account",
+                     user_name, AUDIT_NO_ID, 0);
+#endif
+       exit (code);
+}
+
+
+static void update_group (void)
+{
+       bool is_member;
+       bool was_member;
+       bool changed;
+       const struct group *grp;
+       struct group *ngrp;
+
+       changed = false;
+
+       /*
+        * Scan through the entire group file looking for the groups that
+        * the user is a member of.
+        */
+       while ((grp = gr_next ()) != NULL) {
+               /*
+                * See if the user specified this group as one of their
+                * concurrent groups.
+                */
+               was_member = is_on_list (grp->gr_mem, user_name);
+               is_member = Gflg && (   (was_member && aflg)
+                                    || is_on_list (user_groups, grp->gr_name));
+
+               if (!was_member && !is_member) {
+                       continue;
+               }
+
+               ngrp = __gr_dup (grp);
+               if (NULL == ngrp) {
+                       fprintf (stderr,
+                                _("%s: Out of memory. Cannot update %s.\n"),
+                                Prog, gr_dbname ());
+                       fail_exit (E_GRP_UPDATE);
+               }
+
+               if (was_member && (!Gflg || is_member)) {
+                       if (lflg) {
+                               ngrp->gr_mem = del_list (ngrp->gr_mem,
+                                                        user_name);
+                               ngrp->gr_mem = add_list (ngrp->gr_mem,
+                                                        user_newname);
+                               changed = true;
+#ifdef WITH_AUDIT
+                               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                             "changing group member",
+                                             user_newname, AUDIT_NO_ID, 1);
+#endif
+                               SYSLOG ((LOG_INFO,
+                                        "change '%s' to '%s' in group '%s'",
+                                        user_name, user_newname,
+                                        ngrp->gr_name));
+                       }
+               } else if (was_member && !aflg && Gflg && !is_member) {
+                       ngrp->gr_mem = del_list (ngrp->gr_mem, user_name);
+                       changed = true;
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "removing group member",
+                                     user_name, AUDIT_NO_ID, 1);
+#endif
+                       SYSLOG ((LOG_INFO,
+                                "delete '%s' from group '%s'",
+                                user_name, ngrp->gr_name));
+               } else if (!was_member && Gflg && is_member) {
+                       ngrp->gr_mem = add_list (ngrp->gr_mem, user_newname);
+                       changed = true;
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "adding user to group",
+                                     user_name, AUDIT_NO_ID, 1);
+#endif
+                       SYSLOG ((LOG_INFO, "add '%s' to group '%s'",
+                                user_newname, ngrp->gr_name));
+               }
+               if (!changed) {
+                       continue;
+               }
+
+               changed = false;
+               if (gr_update (ngrp) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, gr_dbname (), ngrp->gr_name);
+                       SYSLOG ((LOG_WARN, "failed to prepare the new %s entry '%s'", gr_dbname (), ngrp->gr_name));
+                       fail_exit (E_GRP_UPDATE);
+               }
+       }
+}
+
+#ifdef SHADOWGRP
+static void update_gshadow (void)
+{
+       bool is_member;
+       bool was_member;
+       bool was_admin;
+       bool changed;
+       const struct sgrp *sgrp;
+       struct sgrp *nsgrp;
+
+       changed = false;
+
+       /*
+        * Scan through the entire shadow group file looking for the groups
+        * that the user is a member of.
+        */
+       while ((sgrp = sgr_next ()) != NULL) {
+
+               /*
+                * See if the user was a member of this group
+                */
+               was_member = is_on_list (sgrp->sg_mem, user_name);
+
+               /*
+                * See if the user was an administrator of this group
+                */
+               was_admin = is_on_list (sgrp->sg_adm, user_name);
+
+               /*
+                * See if the user specified this group as one of their
+                * concurrent groups.
+                */
+               is_member = Gflg && is_on_list (user_groups, sgrp->sg_name);
+               is_member = Gflg && (   (was_member && aflg)
+                                    || is_on_list (user_groups, sgrp->sg_name));
+
+               if (!was_member && !was_admin && !is_member) {
+                       continue;
+               }
+
+               nsgrp = __sgr_dup (sgrp);
+               if (NULL == nsgrp) {
+                       fprintf (stderr,
+                                _("%s: Out of memory. Cannot update %s.\n"),
+                                Prog, sgr_dbname ());
+                       fail_exit (E_GRP_UPDATE);
+               }
+
+               if (was_admin && lflg) {
+                       nsgrp->sg_adm = del_list (nsgrp->sg_adm, user_name);
+                       nsgrp->sg_adm = add_list (nsgrp->sg_adm, user_newname);
+                       changed = true;
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "changing admin name in shadow group",
+                                     user_name, AUDIT_NO_ID, 1);
+#endif
+                       SYSLOG ((LOG_INFO,
+                                "change admin '%s' to '%s' in shadow group '%s'",
+                                user_name, user_newname, nsgrp->sg_name));
+               }
+               if (was_member && (!Gflg || is_member)) {
+                       if (lflg) {
+                               nsgrp->sg_mem = del_list (nsgrp->sg_mem,
+                                                         user_name);
+                               nsgrp->sg_mem = add_list (nsgrp->sg_mem,
+                                                         user_newname);
+                               changed = true;
+#ifdef WITH_AUDIT
+                               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                             "changing member in shadow group",
+                                             user_name, AUDIT_NO_ID, 1);
+#endif
+                               SYSLOG ((LOG_INFO,
+                                        "change '%s' to '%s' in shadow group '%s'",
+                                        user_name, user_newname,
+                                        nsgrp->sg_name));
+                       }
+               } else if (was_member && !aflg && Gflg && !is_member) {
+                       nsgrp->sg_mem = del_list (nsgrp->sg_mem, user_name);
+                       changed = true;
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "removing user from shadow group",
+                                     user_name, AUDIT_NO_ID, 1);
+#endif
+                       SYSLOG ((LOG_INFO,
+                                "delete '%s' from shadow group '%s'",
+                                user_name, nsgrp->sg_name));
+               } else if (!was_member && Gflg && is_member) {
+                       nsgrp->sg_mem = add_list (nsgrp->sg_mem, user_newname);
+                       changed = true;
+#ifdef WITH_AUDIT
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "adding user to shadow group",
+                                     user_newname, AUDIT_NO_ID, 1);
+#endif
+                       SYSLOG ((LOG_INFO, "add '%s' to shadow group '%s'",
+                                user_newname, nsgrp->sg_name));
+               }
+               if (!changed) {
+                       continue;
+               }
+
+               changed = false;
+
+               /* 
+                * Update the group entry to reflect the changes.
+                */
+               if (sgr_update (nsgrp) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, sgr_dbname (), nsgrp->sg_name);
+                       SYSLOG ((LOG_WARN, "failed to prepare the new %s entry '%s'",
+                                sgr_dbname (), nsgrp->sg_name));
+                       fail_exit (E_GRP_UPDATE);
+               }
+       }
+}
+#endif                         /* SHADOWGRP */
+
+/*
+ * grp_update - add user to secondary group set
+ *
+ *     grp_update() takes the secondary group set given in user_groups and
+ *     adds the user to each group given by that set.
+ */
+static void grp_update (void)
+{
+       update_group ();
+#ifdef SHADOWGRP
+       if (is_shadow_grp) {
+               update_gshadow ();
+       }
+#endif
+}
+
+/*
+ * process_flags - perform command line argument setting
+ *
+ *     process_flags() interprets the command line arguments and sets the
+ *     values that the user will be created with accordingly. The values
+ *     are checked for sanity.
+ */
+static void process_flags (int argc, char **argv)
+{
+       const struct group *grp;
+
+       bool anyflag = false;
+
+       if ((1 == argc) || ('-' == argv[argc - 1][0])) {
+               usage ();
+       }
+
+       {
+               const struct passwd *pwd;
+               /* local, no need for xgetpwnam */
+               pwd = getpwnam (argv[argc - 1]);
+               if (NULL == pwd) {
+                       fprintf (stderr,
+                                _("%s: user '%s' does not exist\n"),
+                                Prog, argv[argc - 1]);
+                       exit (E_NOTFOUND);
+               }
+
+               user_name = argv[argc - 1];
+               user_id = pwd->pw_uid;
+               user_gid = pwd->pw_gid;
+               user_comment = xstrdup (pwd->pw_gecos);
+               user_home = xstrdup (pwd->pw_dir);
+               user_shell = xstrdup (pwd->pw_shell);
+       }
+       user_newname = user_name;
+       user_newid = user_id;
+       user_newgid = user_gid;
+       user_newcomment = user_comment;
+       user_newhome = user_home;
+       user_newshell = user_shell;
+
+#ifdef USE_NIS
+       /*
+        * Now make sure it isn't an NIS user.
+        */
+       if (__ispwNIS ()) {
+               char *nis_domain;
+               char *nis_master;
+
+               fprintf (stderr,
+                        _("%s: user %s is a NIS user\n"),
+                        Prog, user_name);
+
+               if (   !yp_get_default_domain (&nis_domain)
+                   && !yp_master (nis_domain, "passwd.byname", &nis_master)) {
+                       fprintf (stderr,
+                                _("%s: %s is the NIS master\n"),
+                                Prog, nis_master);
+               }
+               exit (E_NOTFOUND);
+       }
+#endif
+
+       {
+               const struct spwd *spwd = NULL;
+               /* local, no need for xgetspnam */
+               if (is_shadow_pwd && ((spwd = getspnam (user_name)) != NULL)) {
+                       user_expire = spwd->sp_expire;
+                       user_inactive = spwd->sp_inact;
+                       user_newexpire = user_expire;
+                       user_newinactive = user_inactive;
+               }
+       }
+
+       {
+               /*
+                * Parse the command line options.
+                */
+               int c;
+               static struct option long_options[] = {
+                       {"append", no_argument, NULL, 'a'},
+                       {"comment", required_argument, NULL, 'c'},
+                       {"home", required_argument, NULL, 'd'},
+                       {"expiredate", required_argument, NULL, 'e'},
+                       {"inactive", required_argument, NULL, 'f'},
+                       {"gid", required_argument, NULL, 'g'},
+                       {"groups", required_argument, NULL, 'G'},
+                       {"help", no_argument, NULL, 'h'},
+                       {"login", required_argument, NULL, 'l'},
+                       {"lock", no_argument, NULL, 'L'},
+                       {"move-home", no_argument, NULL, 'm'},
+                       {"non-unique", no_argument, NULL, 'o'},
+                       {"password", required_argument, NULL, 'p'},
+#ifdef WITH_SELINUX
+                       {"selinux-user", required_argument, NULL, 'Z'},
+#endif
+                       {"shell", required_argument, NULL, 's'},
+                       {"uid", required_argument, NULL, 'u'},
+                       {"unlock", no_argument, NULL, 'U'},
+                       {NULL, 0, NULL, '\0'}
+               };
+               while ((c = getopt_long (argc, argv,
+#ifdef WITH_SELINUX
+                                        "ac:d:e:f:g:G:hl:Lmop:s:u:UZ:",
+#else
+                                        "ac:d:e:f:g:G:hl:Lmop:s:u:U",
+#endif
+                                        long_options, NULL)) != -1) {
+                       switch (c) {
+                       case 'a':
+                               aflg = true;
+                               break;
+                       case 'c':
+                               if (!VALID (optarg)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid field '%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               user_newcomment = optarg;
+                               cflg = true;
+                               break;
+                       case 'd':
+                               if (!VALID (optarg)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid field '%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               dflg = true;
+                               user_newhome = optarg;
+                               break;
+                       case 'e':
+                               if ('\0' != *optarg) {
+                                       user_newexpire = strtoday (optarg);
+                                       if (user_newexpire == -1) {
+                                               fprintf (stderr,
+                                                        _("%s: invalid date '%s'\n"),
+                                                        Prog, optarg);
+                                               exit (E_BAD_ARG);
+                                       }
+                                       user_newexpire *= DAY / SCALE;
+                               } else {
+                                       user_newexpire = -1;
+                               }
+                               eflg = true;
+                               break;
+                       case 'f':
+                               if (   (getlong (optarg, &user_newinactive) == 0)
+                                   || (user_newinactive < -1)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid numeric argument '%s'\n"),
+                                                Prog, optarg);
+                                       usage ();
+                               }
+                               fflg = true;
+                               break;
+                       case 'g':
+                               grp = getgr_nam_gid (optarg);
+                               if (NULL == grp) {
+                                       fprintf (stderr,
+                                                _("%s: group '%s' does not exist\n"),
+                                                Prog, optarg);
+                                       exit (E_NOTFOUND);
+                               }
+                               user_newgid = grp->gr_gid;
+                               gflg = true;
+                               break;
+                       case 'G':
+                               if (get_groups (optarg) != 0) {
+                                       exit (E_NOTFOUND);
+                               }
+                               Gflg = true;
+                               break;
+                       case 'l':
+                               if (!is_valid_user_name (optarg)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid field '%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               lflg = true;
+                               user_newname = optarg;
+                               break;
+                       case 'L':
+                               Lflg = true;
+                               break;
+                       case 'm':
+                               mflg = true;
+                               break;
+                       case 'o':
+                               oflg = true;
+                               break;
+                       case 'p':
+                               user_pass = optarg;
+                               pflg = true;
+                               break;
+                       case 's':
+                               if (!VALID (optarg)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid field '%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               user_newshell = optarg;
+                               sflg = true;
+                               break;
+                       case 'u':
+                               if (   (get_uid (optarg, &user_newid) ==0)
+                                   || (user_newid == (uid_t)-1)) {
+                                       fprintf (stderr,
+                                                _("%s: invalid user ID '%s'\n"),
+                                                Prog, optarg);
+                                       exit (E_BAD_ARG);
+                               }
+                               uflg = true;
+                               break;
+                       case 'U':
+                               Uflg = true;
+                               break;
+#ifdef WITH_SELINUX
+                       case 'Z':
+                               if (is_selinux_enabled () > 0) {
+                                       user_selinux = optarg;
+                                       Zflg = true;
+                               } else {
+                                       fprintf (stderr,
+                                                _("%s: -Z requires SELinux enabled kernel\n"),
+                                                Prog);
+                                       exit (E_BAD_ARG);
+                               }
+                               break;
+#endif
+                       default:
+                               usage ();
+                       }
+                       anyflag = true;
+               }
+       }
+
+       if (!anyflag) {
+               fprintf (stderr, _("%s: no flags given\n"), Prog);
+               exit (E_USAGE);
+       }
+
+       if (user_newid == user_id) {
+               uflg = false;
+               oflg = false;
+       }
+       if (user_newgid == user_gid) {
+               gflg = false;
+       }
+       if (strcmp (user_newshell, user_shell) == 0) {
+               sflg = false;
+       }
+       if (strcmp (user_newname, user_name) == 0) {
+               lflg = false;
+       }
+       if (user_newinactive == user_inactive) {
+               fflg = false;
+       }
+       if (user_newexpire == user_expire) {
+               eflg = false;
+       }
+       if (strcmp (user_newhome, user_home) == 0) {
+               dflg = false;
+               mflg = false;
+       }
+       if (strcmp (user_newcomment, user_comment) == 0) {
+               cflg = false;
+       }
+
+       if (!(Uflg || uflg || sflg || pflg || oflg || mflg || Lflg ||
+             lflg || Gflg || gflg || fflg || eflg || dflg || cflg
+#ifdef WITH_SELINUX
+             || Zflg
+#endif
+       )) {
+               fprintf (stderr, _("%s: no changes\n"), Prog);
+               exit (E_SUCCESS);
+       }
+
+       if (!is_shadow_pwd && (eflg || fflg)) {
+               fprintf (stderr,
+                        _("%s: shadow passwords required for -e and -f\n"),
+                        Prog);
+               exit (E_USAGE);
+       }
+
+       if (optind != argc - 1) {
+               usage ();
+       }
+
+       if (aflg && (!Gflg)) {
+               fprintf (stderr,
+                        _("%s: %s flag is only allowed with the %s flag\n"),
+                        Prog, "-a", "-G");
+               usage ();
+               exit (E_USAGE);
+       }
+
+       if ((Lflg && (pflg || Uflg)) || (pflg && Uflg)) {
+               fprintf (stderr,
+                        _("%s: the -L, -p, and -U flags are exclusive\n"),
+                        Prog);
+               usage ();
+               exit (E_USAGE);
+       }
+
+       if (oflg && !uflg) {
+               fprintf (stderr,
+                        _("%s: %s flag is only allowed with the %s flag\n"),
+                        Prog, "-o", "-u");
+               usage ();
+               exit (E_USAGE);
+       }
+
+       if (mflg && !dflg) {
+               fprintf (stderr,
+                        _("%s: %s flag is only allowed with the %s flag\n"),
+                        Prog, "-m", "-d");
+               usage ();
+               exit (E_USAGE);
+       }
+
+       /* local, no need for xgetpwnam */
+       if (lflg && (getpwnam (user_newname) != NULL)) {
+               fprintf (stderr,
+                        _("%s: user '%s' already exists\n"),
+                        Prog, user_newname);
+               exit (E_NAME_IN_USE);
+       }
+
+       /* local, no need for xgetpwuid */
+       if (uflg && !oflg && (getpwuid (user_newid) != NULL)) {
+               fprintf (stderr,
+                        _("%s: UID '%lu' already exists\n"),
+                        Prog, (unsigned long) user_newid);
+               exit (E_UID_IN_USE);
+       }
+}
+
+/*
+ * close_files - close all of the files that were opened
+ *
+ *     close_files() closes all of the files that were opened for this new
+ *     user. This causes any modified entries to be written out.
+ */
+static void close_files (void)
+{
+       if (pw_close () == 0) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", pw_dbname ()));
+               fail_exit (E_PW_UPDATE);
+       }
+       if (is_shadow_pwd && (spw_close () == 0)) {
+               fprintf (stderr,
+                        _("%s: failure while writing changes to %s\n"),
+                        Prog, spw_dbname ());
+               SYSLOG ((LOG_ERR,
+                        "failure while writing changes to %s",
+                        spw_dbname ()));
+               fail_exit (E_PW_UPDATE);
+       }
+
+       if (Gflg || lflg) {
+               if (gr_close () == 0) {
+                       fprintf (stderr,
+                                _("%s: failure while writing changes to %s\n"),
+                                Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR,
+                                "failure while writing changes to %s",
+                                gr_dbname ()));
+                       fail_exit (E_GRP_UPDATE);
+               }
+#ifdef SHADOWGRP
+               if (is_shadow_grp) {
+                       if (sgr_close () == 0) {
+                               fprintf (stderr,
+                                        _("%s: failure while writing changes to %s\n"),
+                                        Prog, sgr_dbname ());
+                               SYSLOG ((LOG_ERR,
+                                        "failure while writing changes to %s",
+                                        sgr_dbname ()));
+                               fail_exit (E_GRP_UPDATE);
+                       }
+                       if (sgr_unlock () == 0) {
+                               fprintf (stderr,
+                                        _("%s: failed to unlock %s\n"),
+                                        Prog, sgr_dbname ());
+                               SYSLOG ((LOG_ERR,
+                                        "failed to unlock %s",
+                                        sgr_dbname ()));
+                               /* continue */
+                       }
+               }
+#endif
+               if (gr_unlock () == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to unlock %s\n"),
+                                Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR,
+                                "failed to unlock %s",
+                                gr_dbname ()));
+                       /* continue */
+               }
+       }
+
+       if (is_shadow_pwd) {
+               if (spw_unlock () == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to unlock %s\n"),
+                                Prog, spw_dbname ());
+                       SYSLOG ((LOG_ERR,
+                                "failed to unlock %s",
+                                spw_dbname ()));
+                       /* continue */
+               }
+       }
+       if (pw_unlock () == 0) {
+               fprintf (stderr,
+                        _("%s: failed to unlock %s\n"),
+                        Prog, pw_dbname ());
+               SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+               /* continue */
+       }
+
+       pw_locked = false;
+       spw_locked = false;
+       gr_locked = false;
+#ifdef SHADOWGRP
+       sgr_locked = false;
+#endif
+
+       /*
+        * Close the DBM and/or flat files
+        */
+       endpwent ();
+       endspent ();
+       endgrent ();
+#ifdef SHADOWGRP
+       endsgent ();
+#endif
+}
+
+/*
+ * open_files - lock and open the password files
+ *
+ *     open_files() opens the two password files.
+ */
+static void open_files (void)
+{
+       if (pw_lock () == 0) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, pw_dbname ());
+               fail_exit (E_PW_UPDATE);
+       }
+       pw_locked = true;
+       if (pw_open (O_RDWR) == 0) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"),
+                        Prog, pw_dbname ());
+               fail_exit (E_PW_UPDATE);
+       }
+       if (is_shadow_pwd && (spw_lock () == 0)) {
+               fprintf (stderr,
+                        _("%s: cannot lock %s; try again later.\n"),
+                        Prog, spw_dbname ());
+               fail_exit (E_PW_UPDATE);
+       }
+       spw_locked = true;
+       if (is_shadow_pwd && (spw_open (O_RDWR) == 0)) {
+               fprintf (stderr,
+                        _("%s: cannot open %s\n"),
+                        Prog, spw_dbname ());
+               fail_exit (E_PW_UPDATE);
+       }
+
+       if (Gflg || lflg) {
+               /*
+                * Lock and open the group file. This will load all of the
+                * group entries.
+                */
+               if (gr_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, gr_dbname ());
+                       fail_exit (E_GRP_UPDATE);
+               }
+               gr_locked = true;
+               if (gr_open (O_RDWR) == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot open %s\n"),
+                                Prog, gr_dbname ());
+                       fail_exit (E_GRP_UPDATE);
+               }
+#ifdef SHADOWGRP
+               if (is_shadow_grp && (sgr_lock () == 0)) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, sgr_dbname ());
+                       fail_exit (E_GRP_UPDATE);
+               }
+               sgr_locked = true;
+               if (is_shadow_grp && (sgr_open (O_RDWR) == 0)) {
+                       fprintf (stderr,
+                                _("%s: cannot open %s\n"),
+                                Prog, sgr_dbname ());
+                       fail_exit (E_GRP_UPDATE);
+               }
+#endif
+       }
+}
+
+/*
+ * usr_update - create the user entries
+ *
+ *     usr_update() creates the password file entries for this user and
+ *     will update the group entries if required.
+ */
+static void usr_update (void)
+{
+       struct passwd pwent;
+       const struct passwd *pwd;
+
+       struct spwd spent;
+       const struct spwd *spwd = NULL;
+
+       /*
+        * Locate the entry in /etc/passwd, which MUST exist.
+        */
+       pwd = pw_locate (user_name);
+       if (NULL == pwd) {
+               fprintf (stderr,
+                        _("%s: user '%s' does not exist in %s\n"),
+                        Prog, user_name, pw_dbname ());
+               fail_exit (E_NOTFOUND);
+       }
+       pwent = *pwd;
+       new_pwent (&pwent);
+
+
+       /* 
+        * Locate the entry in /etc/shadow. It doesn't have to exist, and
+        * won't be created if it doesn't.
+        */
+       if (is_shadow_pwd && ((spwd = spw_locate (user_name)) != NULL)) {
+               spent = *spwd;
+               new_spent (&spent);
+       }
+
+       if (lflg || uflg || gflg || cflg || dflg || sflg || pflg
+           || Lflg || Uflg) {
+               if (pw_update (&pwent) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, pw_dbname (), pwent.pw_name);
+                       fail_exit (E_PW_UPDATE);
+               }
+               if (lflg && (pw_remove (user_name) == 0)) {
+                       fprintf (stderr,
+                                _("%s: cannot remove entry '%s' from %s\n"),
+                                Prog, user_name, pw_dbname ());
+                       fail_exit (E_PW_UPDATE);
+               }
+       }
+       if ((NULL != spwd) && (lflg || eflg || fflg || pflg || Lflg || Uflg)) {
+               if (spw_update (&spent) == 0) {
+                       fprintf (stderr,
+                                _("%s: failed to prepare the new %s entry '%s'\n"),
+                                Prog, spw_dbname (), spent.sp_namp);
+                       fail_exit (E_PW_UPDATE);
+               }
+               if (lflg && (spw_remove (user_name) == 0)) {
+                       fprintf (stderr,
+                                _("%s: cannot remove entry '%s' from %s\n"),
+                                Prog, user_name, spw_dbname ());
+                       fail_exit (E_PW_UPDATE);
+               }
+       }
+}
+
+/*
+ * move_home - move the user's home directory
+ *
+ *     move_home() moves the user's home directory to a new location. The
+ *     files will be copied if the directory cannot simply be renamed.
+ */
+static void move_home (void)
+{
+       struct stat sb;
+
+       if (mflg && (stat (user_home, &sb) == 0)) {
+               /*
+                * Don't try to move it if it is not a directory
+                * (but /dev/null for example).  --marekm
+                */
+               if (!S_ISDIR (sb.st_mode)) {
+                       return;
+               }
+
+               if (access (user_newhome, F_OK) == 0) {
+                       fprintf (stderr,
+                                _("%s: directory %s exists\n"),
+                                Prog, user_newhome);
+                       fail_exit (E_HOMEDIR);
+               } else if (rename (user_home, user_newhome) != 0) {
+                       // FIXME: rename above may have broken symlinks
+                       //        pointing to the user's home directory
+                       //        with an absolute path.
+                       if (errno == EXDEV) {
+                               if (mkdir (user_newhome, sb.st_mode & 0777) != 0) {
+                                       fprintf (stderr,
+                                                _("%s: can't create %s\n"),
+                                                Prog, user_newhome);
+                               }
+                               if (chown (user_newhome, sb.st_uid, sb.st_gid) != 0) {
+                                       fprintf (stderr,
+                                                _("%s: can't chown %s\n"),
+                                                Prog, user_newhome);
+                                       rmdir (user_newhome);
+                                       fail_exit (E_HOMEDIR);
+                               }
+                               // FIXME: the current uid & gid should
+                               // also be provided so that only the files
+                               // owned by the user/group have their
+                               // ownership changed.
+                               if (copy_tree (user_home, user_newhome,
+                                              uflg ? (long int)user_newid : -1,
+                                              gflg ? (long int)user_newgid : -1) == 0) {
+                                       if (remove_tree (user_home) != 0) {
+                                               fprintf (stderr,
+                                                        _("%s: warning: failed to completely remove old home directory %s"),
+                                                        Prog, user_home);
+                                       }
+#ifdef WITH_AUDIT
+                                       audit_logger (AUDIT_USER_CHAUTHTOK,
+                                                     Prog,
+                                                     "moving home directory",
+                                                     user_newname,
+                                                     (unsigned int) user_newid,
+                                                     1);
+#endif
+                                       return;
+                               }
+
+                               /* TODO: do some cleanup if the copy
+                                *       was started */
+                               (void) remove_tree (user_newhome);
+                       }
+                       fprintf (stderr,
+                                _("%s: cannot rename directory %s to %s\n"),
+                                Prog, user_home, user_newhome);
+                       fail_exit (E_HOMEDIR);
+               }
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "moving home directory",
+                             user_newname, (unsigned int) user_newid, 1);
+#endif
+       }
+       if (uflg || gflg) {
+#ifdef WITH_AUDIT
+               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                             "changing home directory owner",
+                             user_newname, (unsigned int) user_newid, 1);
+#endif
+               chown (dflg ? user_newhome : user_home,
+                      uflg ? user_newid : user_id,
+                      gflg ? user_newgid : user_gid);
+       }
+}
+
+/*
+ * update_lastlog - update the lastlog file
+ *
+ * Relocate the "lastlog" entries for the user. The old entry is
+ * left alone in case the UID was shared. It doesn't hurt anything
+ * to just leave it be.
+ */
+static void update_lastlog (void)
+{
+       struct lastlog ll;
+       int fd;
+       off_t off_uid = (off_t) user_id * sizeof ll;
+       off_t off_newuid = (off_t) user_newid * sizeof ll;
+
+       if (access (LASTLOG_FILE, F_OK) != 0) {
+               return;
+       }
+
+       fd = open (LASTLOG_FILE, O_RDWR);
+
+       if (-1 == fd) {
+               fprintf (stderr,
+                        _("%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"),
+                        Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
+               return;
+       }
+
+       if (   (lseek (fd, off_uid, SEEK_SET) == off_uid)
+           && (read (fd, &ll, sizeof ll) == (ssize_t) sizeof ll)) {
+               /* Copy the old entry to its new location */
+               if (   (lseek (fd, off_newuid, SEEK_SET) != off_newuid)
+                   || (write (fd, &ll, sizeof ll) != (ssize_t) sizeof ll)
+                   || (fsync (fd) != 0)
+                   || (close (fd) != 0)) {
+                       fprintf (stderr,
+                                _("%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"),
+                                Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
+               }
+       } else {
+               /* Assume lseek or read failed because there is
+                * no entry for the old UID */
+
+               /* Check if the new UID already has an entry */
+               if (   (lseek (fd, off_newuid, SEEK_SET) == off_newuid)
+                   && (read (fd, &ll, sizeof ll) == (ssize_t) sizeof ll)) {
+                       /* Reset the new uid's lastlog entry */
+                       memzero (&ll, sizeof (ll));
+                       if (   (lseek (fd, off_newuid, SEEK_SET) != off_newuid)
+                           || (write (fd, &ll, sizeof ll) != (ssize_t) sizeof ll)
+                           || (fsync (fd) != 0)
+                           || (close (fd) != 0)) {
+                               fprintf (stderr,
+                                        _("%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"),
+                                        Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
+                       }
+               } else {
+                       (void) close (fd);
+               }
+       }
+}
+
+/*
+ * update_faillog - update the faillog file
+ *
+ * Relocate the "faillog" entries for the user. The old entry is
+ * left alone in case the UID was shared. It doesn't hurt anything
+ * to just leave it be.
+ */
+static void update_faillog (void)
+{
+       struct faillog fl;
+       int fd;
+       off_t off_uid = (off_t) user_id * sizeof fl;
+       off_t off_newuid = (off_t) user_newid * sizeof fl;
+
+       if (access (FAILLOG_FILE, F_OK) != 0) {
+               return;
+       }
+
+       fd = open (FAILLOG_FILE, O_RDWR);
+
+       if (-1 == fd) {
+               fprintf (stderr,
+                        _("%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"),
+                        Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
+               return;
+       }
+
+       if (   (lseek (fd, off_uid, SEEK_SET) == off_uid)
+           && (read (fd, (char *) &fl, sizeof fl) == (ssize_t) sizeof fl)) {
+               /* Copy the old entry to its new location */
+               if (   (lseek (fd, off_newuid, SEEK_SET) != off_newuid)
+                   || (write (fd, &fl, sizeof fl) != (ssize_t) sizeof fl)
+                   || (fsync (fd) != 0)
+                   || (close (fd) != 0)) {
+                       fprintf (stderr,
+                                _("%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"),
+                                Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
+               }
+       } else {
+               /* Assume lseek or read failed because there is
+                * no entry for the old UID */
+
+               /* Check if the new UID already has an entry */
+               if (   (lseek (fd, off_newuid, SEEK_SET) == off_newuid)
+                   && (read (fd, &fl, sizeof fl) == (ssize_t) sizeof fl)) {
+                       /* Reset the new uid's lastlog entry */
+                       memzero (&fl, sizeof (fl));
+                       if (   (lseek (fd, off_newuid, SEEK_SET) != off_newuid)
+                           || (write (fd, &fl, sizeof fl) != (ssize_t) sizeof fl)
+                           || (close (fd) != 0)) {
+                               fprintf (stderr,
+                                        _("%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"),
+                                        Prog, (unsigned long) user_id, (unsigned long) user_newid, strerror (errno));
+                       }
+               } else {
+                       (void) close (fd);
+               }
+       }
+}
+
+#ifndef NO_MOVE_MAILBOX
+/*
+ * This is the new and improved code to carefully chown/rename the user's
+ * mailbox. Maybe I am too paranoid but the mail spool dir sometimes
+ * happens to be mode 1777 (this makes mail user agents work without
+ * being setgid mail, but is NOT recommended; they all should be fixed
+ * to use movemail).  --marekm
+ */
+static void move_mailbox (void)
+{
+       const char *maildir;
+       char mailfile[1024], newmailfile[1024];
+       int fd;
+       struct stat st;
+
+       maildir = getdef_str ("MAIL_DIR");
+#ifdef MAIL_SPOOL_DIR
+       if ((NULL == maildir) && (getdef_str ("MAIL_FILE") == NULL)) {
+               maildir = MAIL_SPOOL_DIR;
+       }
+#endif
+       if (NULL == maildir) {
+               return;
+       }
+
+       /*
+        * O_NONBLOCK is to make sure open won't hang on mandatory locks.
+        * We do fstat/fchown to make sure there are no races (someone
+        * replacing /var/spool/mail/luser with a hard link to /etc/passwd
+        * between stat and chown).  --marekm
+        */
+       snprintf (mailfile, sizeof mailfile, "%s/%s", maildir, user_name);
+       fd = open (mailfile, O_RDONLY | O_NONBLOCK, 0);
+       if (fd < 0) {
+               /* no need for warnings if the mailbox doesn't exist */
+               if (errno != ENOENT) {
+                       perror (mailfile);
+               }
+               return;
+       }
+       if (fstat (fd, &st) < 0) {
+               perror ("fstat");
+               close (fd);
+               return;
+       }
+       if (st.st_uid != user_id) {
+               /* better leave it alone */
+               fprintf (stderr, _("%s: warning: %s not owned by %s\n"),
+                        Prog, mailfile, user_name);
+               close (fd);
+               return;
+       }
+       if (uflg) {
+               if (fchown (fd, user_newid, (gid_t) - 1) < 0) {
+                       perror (_("failed to change mailbox owner"));
+               }
+#ifdef WITH_AUDIT
+               else {
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "changing mail file owner",
+                                     user_newname, (unsigned int) user_newid, 1);
+               }
+#endif
+       }
+
+       close (fd);
+
+       if (lflg) {
+               snprintf (newmailfile, sizeof newmailfile, "%s/%s",
+                         maildir, user_newname);
+               if (   (link (mailfile, newmailfile) != 0)
+                   || (unlink (mailfile) != 0)) {
+                       perror (_("failed to rename mailbox"));
+               }
+#ifdef WITH_AUDIT
+               else {
+                       audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                     "changing mail file name",
+                                     user_newname, (unsigned int) user_newid, 1);
+               }
+#endif
+       }
+}
+#endif
+
+/*
+ * main - usermod command
+ */
+int main (int argc, char **argv)
+{
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       pam_handle_t *pamh = NULL;
+       int retval;
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+
+#ifdef WITH_AUDIT
+       audit_help_open ();
+#endif
+
+       /*
+        * Get my name so that I can use it to report errors.
+        */
+       Prog = Basename (argv[0]);
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       sys_ngroups = sysconf (_SC_NGROUPS_MAX);
+       user_groups = (char **) malloc (sizeof (char *) * (1 + sys_ngroups));
+       user_groups[0] = (char *) 0;
+
+       OPENLOG ("usermod");
+
+       is_shadow_pwd = spw_file_present ();
+#ifdef SHADOWGRP
+       is_shadow_grp = sgr_file_present ();
+#endif
+
+       process_flags (argc, argv);
+
+       /*
+        * The home directory, the username and the user's UID should not
+        * be changed while the user is logged in.
+        */
+       if (   (uflg || lflg || dflg)
+           && (user_busy (user_name, user_id) != 0)) {
+               fprintf (stderr,
+                        _("%s: user %s is currently logged in\n"),
+                        Prog, user_name);
+               exit (E_USER_BUSY);
+       }
+
+#ifdef ACCT_TOOLS_SETUID
+#ifdef USE_PAM
+       {
+               struct passwd *pampw;
+               pampw = getpwuid (getuid ()); /* local, no need for xgetpwuid */
+               if (pampw == NULL) {
+                       fprintf (stderr,
+                                _("%s: Cannot determine your user name.\n"),
+                                Prog);
+                       exit (1);
+               }
+
+               retval = pam_start ("usermod", pampw->pw_name, &conv, &pamh);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_authenticate (pamh, 0);
+       }
+
+       if (PAM_SUCCESS == retval) {
+               retval = pam_acct_mgmt (pamh, 0);
+       }
+
+       if (NULL != pamh) {
+               (void) pam_end (pamh, retval);
+       }
+       if (PAM_SUCCESS != retval) {
+               fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
+               exit (1);
+       }
+#endif                         /* USE_PAM */
+#endif                         /* ACCT_TOOLS_SETUID */
+
+       /*
+        * Do the hard stuff - open the files, change the user entries,
+        * change the home directory, then close and update the files.
+        */
+       open_files ();
+       if (   cflg || dflg || eflg || fflg || gflg || Lflg || lflg || pflg
+           || sflg || uflg || Uflg) {
+               usr_update ();
+       }
+       if (Gflg || lflg) {
+               grp_update ();
+       }
+       close_files ();
+
+       nscd_flush_cache ("passwd");
+       nscd_flush_cache ("group");
+
+#ifdef WITH_SELINUX
+       if (Zflg) {
+               selinux_update_mapping ();
+       }
+#endif
+
+       if (mflg) {
+               move_home ();
+       }
+
+#ifndef NO_MOVE_MAILBOX
+       if (lflg || uflg) {
+               move_mailbox ();
+       }
+#endif
+
+       if (uflg) { // FIXME: gflg also, except for faillog/lastlog
+               update_lastlog ();
+               update_faillog ();
+
+               /*
+                * Change the UID on all of the files owned by `user_id' to
+                * `user_newid' in the user's home directory.
+                */
+               chown_tree (dflg ? user_newhome : user_home,
+                           user_id, user_newid,
+                           user_gid, gflg ? user_newgid : user_gid);
+       }
+
+       return E_SUCCESS;
+}
+
+#ifdef WITH_SELINUX
+static void selinux_update_mapping (void) {
+       const char *argv[7];
+
+       if (is_selinux_enabled () <= 0) return;
+
+       if (*user_selinux) {
+               argv[0] = "/usr/sbin/semanage";
+               argv[1] = "login";
+               argv[2] = "-m";
+               argv[3] = "-s";
+               argv[4] = user_selinux;
+               argv[5] = user_name;
+               argv[6] = NULL;
+               if (safe_system (argv[0], argv, NULL, 1)) {
+                       argv[2] = "-a";
+                       if (safe_system (argv[0], argv, NULL, 0)) {
+                               fprintf (stderr,
+                                        _("%s: warning: the user name %s to %s SELinux user mapping failed.\n"),
+                                        Prog, user_name, user_selinux);
+#ifdef WITH_AUDIT
+                               audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+                                             "modifying User mapping ",
+                                             user_name, (unsigned int) user_id, 0);
+#endif
+                       }
+               }
+       }
+}
+#endif
+
diff --git a/src/vipw.c b/src/vipw.c
new file mode 100644 (file)
index 0000000..87a0406
--- /dev/null
@@ -0,0 +1,416 @@
+/*
+  vipw, vigr  edit the password or group file
+  with -s will edit shadow or gshadow file
+  Copyright (c) 1997       , Guy Maor <maor@ece.utexas.edu>
+  Copyright (c) 1999 - 2000, Marek Michałkiewicz
+  Copyright (c) 2002 - 2006, Tomasz Kłoczko
+  Copyright (c) 2007 - 2008, Nicolas François
+  All rights reserved.
+
+  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 Street, Fifth Floor,
+  Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+#ident "$Id: vipw.c 3006 2009-05-25 19:51:23Z nekral-guest $"
+
+#include <errno.h>
+#include <getopt.h>
+#ifdef WITH_SELINUX                                                            
+#include <selinux/selinux.h>                                                   
+#endif
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <utime.h>
+#include "defines.h"
+#include "groupio.h"
+#include "nscd.h"
+#include "prototypes.h"
+#include "pwio.h"
+#include "sgroupio.h"
+#include "shadowio.h"
+/*@-exitarg@*/
+#include "exitcodes.h"
+
+#define MSG_WARN_EDIT_OTHER_FILE _( \
+       "You have modified %s.\n"\
+       "You may need to modify %s for consistency.\n"\
+       "Please use the command '%s' to do so.\n")
+
+/*
+ * Global variables
+ */
+static const char *progname, *filename, *fileeditname;
+static bool filelocked = false;
+static bool createedit = false;
+static int (*unlock) (void);
+static bool quiet = false;
+
+/* local function prototypes */
+static void usage (void);
+static int create_backup_file (FILE *, const char *, struct stat *);
+static void vipwexit (const char *msg, int syserr, int ret);
+static void vipwedit (const char *, int (*)(void), int (*)(void));
+
+/*
+ * usage - display usage message and exit
+ */
+static void usage (void)
+{
+       (void) 
+       fputs (_("Usage: vipw [options]\n"
+                "\n"
+                "Options:\n"
+                "  -g, --group                   edit group database\n"
+                "  -h, --help                    display this help message and exit\n"
+                "  -p, --passwd                  edit passwd database\n"
+                "  -q, --quiet                   quiet mode\n"
+                "  -s, --shadow                  edit shadow or gshadow database\n"
+                "\n"), stderr);
+       exit (E_USAGE);
+}
+
+/*
+ *
+ */
+static int create_backup_file (FILE * fp, const char *backup, struct stat *sb)
+{
+       struct utimbuf ub;
+       FILE *bkfp;
+       int c;
+       mode_t mask;
+
+       mask = umask (077);
+       bkfp = fopen (backup, "w");
+       (void) umask (mask);
+       if (NULL == bkfp) {
+               return -1;
+       }
+
+       c = 0;
+       if (fseeko (fp, 0, SEEK_SET) == 0)
+               while ((c = getc (fp)) != EOF) {
+                       if (putc (c, bkfp) == EOF) {
+                               break;
+                       }
+               }
+       if ((EOF != c) || (ferror (fp) != 0) || (fflush (bkfp) != 0)) {
+               fclose (bkfp);
+               unlink (backup);
+               return -1;
+       }
+       if (fsync (fileno (bkfp)) != 0) {
+               (void) fclose (bkfp);
+               unlink (backup);
+               return -1;
+       }
+       if (fclose (bkfp) != 0) {
+               unlink (backup);
+               return -1;
+       }
+
+       ub.actime = sb->st_atime;
+       ub.modtime = sb->st_mtime;
+       if (   (utime (backup, &ub) != 0)
+           || (chmod (backup, sb->st_mode) != 0)
+           || (chown (backup, sb->st_uid, sb->st_gid) != 0)) {
+               unlink (backup);
+               return -1;
+       }
+       return 0;
+}
+
+/*
+ *
+ */
+static void vipwexit (const char *msg, int syserr, int ret)
+{
+       int err = errno;
+
+       if (createedit) {
+               if (unlink (fileeditname) != 0) {
+                       fprintf (stderr, _("%s: failed to remove %s\n"), progname, fileeditname);
+                       /* continue */
+               }
+       }
+       if (filelocked) {
+               if ((*unlock) () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), progname, fileeditname);
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", fileeditname));
+                       /* continue */
+               }
+       }
+       if (NULL != msg) {
+               fprintf (stderr, "%s: %s", progname, msg);
+       }
+       if (0 != syserr) {
+               fprintf (stderr, ": %s", strerror (err));
+       }
+       (void) fputs ("\n", stderr);
+       if (!quiet) {
+               fprintf (stdout, _("%s: %s is unchanged\n"), progname,
+                        filename);
+       }
+       exit (ret);
+}
+
+#ifndef DEFAULT_EDITOR
+#define DEFAULT_EDITOR "vi"
+#endif
+
+/*
+ *
+ */
+static void
+vipwedit (const char *file, int (*file_lock) (void), int (*file_unlock) (void))
+{
+       const char *editor;
+       pid_t pid;
+       struct stat st1, st2;
+       int status;
+       FILE *f;
+       char filebackup[1024], fileedit[1024];
+
+       snprintf (filebackup, sizeof filebackup, "%s-", file);
+       snprintf (fileedit, sizeof fileedit, "%s.edit", file);
+       unlock = file_unlock;
+       filename = file;
+       fileeditname = fileedit;
+
+       if (access (file, F_OK) != 0) {
+               vipwexit (file, 1, 1);
+       }
+#ifdef WITH_SELINUX
+       /* if SE Linux is enabled then set the context of all new files
+          to be the context of the file we are editing */
+       if (is_selinux_enabled ()) {
+               security_context_t passwd_context=NULL;
+               int ret = 0;
+               if (getfilecon (file, &passwd_context) < 0) {
+                       vipwexit (_("Couldn't get file context"), errno, 1);
+               }
+               ret = setfscreatecon (passwd_context);
+               freecon (passwd_context);
+               if (0 != ret) {
+                       vipwexit (_("setfscreatecon () failed"), errno, 1);
+               }
+       }
+#endif
+       if (file_lock () == 0) {
+               vipwexit (_("Couldn't lock file"), errno, 5);
+       }
+       filelocked = true;
+
+       /* edited copy has same owners, perm */
+       if (stat (file, &st1) != 0) {
+               vipwexit (file, 1, 1);
+       }
+       f = fopen (file, "r");
+       if (NULL == f) {
+               vipwexit (file, 1, 1);
+       }
+       if (create_backup_file (f, fileedit, &st1) != 0) {
+               vipwexit (_("Couldn't make backup"), errno, 1);
+       }
+       (void) fclose (f);
+       createedit = true;
+
+       editor = getenv ("VISUAL");
+       if (NULL == editor) {
+               editor = getenv ("EDITOR");
+       }
+       if (NULL == editor) {
+               editor = DEFAULT_EDITOR;
+       }
+
+       pid = fork ();
+       if (-1 == pid) {
+               vipwexit ("fork", 1, 1);
+       } else if (0 == pid) {
+               /* use the system() call to invoke the editor so that it accepts
+                  command line args in the EDITOR and VISUAL environment vars */
+               char *buf;
+
+               buf = (char *) malloc (strlen (editor) + strlen (fileedit) + 2);
+               snprintf (buf, strlen (editor) + strlen (fileedit) + 2,
+                         "%s %s", editor, fileedit);
+               if (system (buf) != 0) {
+                       fprintf (stderr, "%s: %s: %s\n", progname, editor,
+                                strerror (errno));
+                       exit (1);
+               } else {
+                       exit (0);
+               }
+       }
+
+       for (;;) {
+               pid = waitpid (pid, &status, WUNTRACED);
+               if ((pid != -1) && (WIFSTOPPED (status) != 0)) {
+                       /* The child (editor) was suspended.
+                        * Suspend vipw. */
+                       kill (getpid (), WSTOPSIG(status));
+                       /* wake child when resumed */
+                       kill (pid, SIGCONT);
+               } else {
+                       break;
+               }
+       }
+
+       if (   (-1 == pid)
+           || (WIFEXITED (status) == 0)
+           || (WEXITSTATUS (status) != 0)) {
+               vipwexit (editor, 1, 1);
+       }
+
+       if (stat (fileedit, &st2) != 0) {
+               vipwexit (fileedit, 1, 1);
+       }
+       if (st1.st_mtime == st2.st_mtime) {
+               vipwexit (0, 0, 0);
+       }
+#ifdef WITH_SELINUX                                                            
+       /* unset the fscreatecon */                                             
+       if (is_selinux_enabled ()) {
+               if (setfscreatecon (NULL)) {
+                       vipwexit (_("setfscreatecon () failed"), errno, 1);
+               }
+       }
+#endif
+
+       /*
+        * XXX - here we should check fileedit for errors; if there are any,
+        * ask the user what to do (edit again, save changes anyway, or quit
+        * without saving). Use pwck or grpck to do the check.  --marekm
+        */
+       createedit = false;
+       unlink (filebackup);
+       link (file, filebackup);
+       if (rename (fileedit, file) == -1) {
+               fprintf (stderr,
+                        _("%s: can't restore %s: %s (your changes are in %s)\n"),
+                        progname, file, strerror (errno), fileedit);
+               vipwexit (0, 0, 1);
+       }
+
+       if ((*file_unlock) () == 0) {
+               fprintf (stderr, _("%s: failed to unlock %s\n"), progname, fileeditname);
+               SYSLOG ((LOG_ERR, "failed to unlock %s", fileeditname));
+               /* continue */
+       }
+       SYSLOG ((LOG_INFO, "file %s edited", fileeditname));
+}
+
+int main (int argc, char **argv)
+{
+       bool editshadow = false;
+       char *a;
+       bool do_vipw;
+
+       (void) setlocale (LC_ALL, "");
+       (void) bindtextdomain (PACKAGE, LOCALEDIR);
+       (void) textdomain (PACKAGE);
+
+       progname = ((a = strrchr (*argv, '/')) ? a + 1 : *argv);
+       do_vipw = (strcmp (progname, "vigr") != 0);
+
+       OPENLOG (do_vipw ? "vipw" : "vigr");
+
+       {
+               /*
+                * Parse the command line options.
+                */
+               int c;
+               static struct option long_options[] = {
+                       {"group", no_argument, NULL, 'g'},
+                       {"help", no_argument, NULL, 'h'},
+                       {"passwd", no_argument, NULL, 'p'},
+                       {"quiet", no_argument, NULL, 'q'},
+                       {"shadow", no_argument, NULL, 's'},
+                       {NULL, 0, NULL, '\0'}
+               };
+               while ((c =
+                       getopt_long (argc, argv, "ghpqs",
+                                    long_options, NULL)) != -1) {
+                       switch (c) {
+                       case 'g':
+                               do_vipw = false;
+                               break;
+                       case 'h':
+                               usage ();
+                               break;
+                       case 'p':
+                               do_vipw = true;
+                               break;
+                       case 'q':
+                               quiet = true;
+                               break;
+                       case 's':
+                               editshadow = true;
+                               break;
+                       default:
+                               usage ();
+                       }
+               }
+       }
+
+       if (do_vipw) {
+               if (editshadow) {
+                       vipwedit (SHADOW_FILE, spw_lock, spw_unlock);
+                       printf (MSG_WARN_EDIT_OTHER_FILE,
+                               SHADOW_FILE,
+                               PASSWD_FILE,
+                               "vipw");
+               } else {
+                       vipwedit (PASSWD_FILE, pw_lock, pw_unlock);
+                       if (spw_file_present ()) {
+                               printf (MSG_WARN_EDIT_OTHER_FILE,
+                                       PASSWD_FILE,
+                                       SHADOW_FILE,
+                                       "vipw -s");
+                       }
+               }
+       } else {
+#ifdef SHADOWGRP
+               if (editshadow) {
+                       vipwedit (SGROUP_FILE, sgr_lock, sgr_unlock);
+                       printf (MSG_WARN_EDIT_OTHER_FILE,
+                               SGROUP_FILE,
+                               GROUP_FILE,
+                               "vigr");
+               } else {
+#endif
+                       vipwedit (GROUP_FILE, gr_lock, gr_unlock);
+#ifdef SHADOWGRP
+                       if (sgr_file_present ()) {
+                               printf (MSG_WARN_EDIT_OTHER_FILE,
+                                       GROUP_FILE,
+                                       SGROUP_FILE,
+                                       "vigr -s");
+                       }
+               }
+#endif
+       }
+
+       nscd_flush_cache ("passwd");
+       nscd_flush_cache ("group");
+
+       return E_SUCCESS;
+}
+
diff --git a/ylwrap b/ylwrap
new file mode 100755 (executable)
index 0000000..7278b6a
--- /dev/null
+++ b/ylwrap
@@ -0,0 +1,223 @@
+#! /bin/sh
+# ylwrap - wrapper for lex/yacc invocations.
+
+scriptversion=2007-11-22.22
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
+# 2007  Free Software Foundation, Inc.
+#
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case "$1" in
+  '')
+    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2
+    exit 1
+    ;;
+  --basedir)
+    basedir=$2
+    shift 2
+    ;;
+  -h|--h*)
+    cat <<\EOF
+Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
+
+Wrapper for lex/yacc invocations, renaming files as desired.
+
+  INPUT is the input file
+  OUTPUT is one file PROG generates
+  DESIRED is the file we actually want instead of OUTPUT
+  PROGRAM is program to run
+  ARGS are passed to PROG
+
+Any number of OUTPUT,DESIRED pairs may be used.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v|--v*)
+    echo "ylwrap $scriptversion"
+    exit $?
+    ;;
+esac
+
+
+# The input.
+input="$1"
+shift
+case "$input" in
+  [\\/]* | ?:[\\/]*)
+    # Absolute path; do nothing.
+    ;;
+  *)
+    # Relative path.  Make it absolute.
+    input="`pwd`/$input"
+    ;;
+esac
+
+pairlist=
+while test "$#" -ne 0; do
+  if test "$1" = "--"; then
+    shift
+    break
+  fi
+  pairlist="$pairlist $1"
+  shift
+done
+
+# The program to run.
+prog="$1"
+shift
+# Make any relative path in $prog absolute.
+case "$prog" in
+  [\\/]* | ?:[\\/]*) ;;
+  *[\\/]*) prog="`pwd`/$prog" ;;
+esac
+
+# FIXME: add hostname here for parallel makes that run commands on
+# other machines.  But that might take us over the 14-char limit.
+dirname=ylwrap$$
+trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
+mkdir $dirname || exit 1
+
+cd $dirname
+
+case $# in
+  0) "$prog" "$input" ;;
+  *) "$prog" "$@" "$input" ;;
+esac
+ret=$?
+
+if test $ret -eq 0; then
+  set X $pairlist
+  shift
+  first=yes
+  # Since DOS filename conventions don't allow two dots,
+  # the DOS version of Bison writes out y_tab.c instead of y.tab.c
+  # and y_tab.h instead of y.tab.h. Test to see if this is the case.
+  y_tab_nodot="no"
+  if test -f y_tab.c || test -f y_tab.h; then
+    y_tab_nodot="yes"
+  fi
+
+  # The directory holding the input.
+  input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
+  # Quote $INPUT_DIR so we can use it in a regexp.
+  # FIXME: really we should care about more than `.' and `\'.
+  input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
+
+  while test "$#" -ne 0; do
+    from="$1"
+    # Handle y_tab.c and y_tab.h output by DOS
+    if test $y_tab_nodot = "yes"; then
+      if test $from = "y.tab.c"; then
+       from="y_tab.c"
+      else
+       if test $from = "y.tab.h"; then
+         from="y_tab.h"
+       fi
+      fi
+    fi
+    if test -f "$from"; then
+      # If $2 is an absolute path name, then just use that,
+      # otherwise prepend `../'.
+      case "$2" in
+       [\\/]* | ?:[\\/]*) target="$2";;
+       *) target="../$2";;
+      esac
+
+      # We do not want to overwrite a header file if it hasn't
+      # changed.  This avoid useless recompilations.  However the
+      # parser itself (the first file) should always be updated,
+      # because it is the destination of the .y.c rule in the
+      # Makefile.  Divert the output of all other files to a temporary
+      # file so we can compare them to existing versions.
+      if test $first = no; then
+       realtarget="$target"
+       target="tmp-`echo $target | sed s/.*[\\/]//g`"
+      fi
+      # Edit out `#line' or `#' directives.
+      #
+      # We don't want the resulting debug information to point at
+      # an absolute srcdir; it is better for it to just mention the
+      # .y file with no path.
+      #
+      # We want to use the real output file name, not yy.lex.c for
+      # instance.
+      #
+      # We want the include guards to be adjusted too.
+      FROM=`echo "$from" | sed \
+            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
+            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
+      TARGET=`echo "$2" | sed \
+            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
+            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
+
+      sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
+          -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
+
+      # Check whether header files must be updated.
+      if test $first = no; then
+       if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
+         echo "$2" is unchanged
+         rm -f "$target"
+       else
+          echo updating "$2"
+          mv -f "$target" "$realtarget"
+        fi
+      fi
+    else
+      # A missing file is only an error for the first file.  This
+      # is a blatant hack to let us support using "yacc -d".  If -d
+      # is not specified, we don't want an error when the header
+      # file is "missing".
+      if test $first = yes; then
+        ret=1
+      fi
+    fi
+    shift
+    shift
+    first=no
+  done
+else
+  ret=$?
+fi
+
+# Remove the directory.
+cd ..
+rm -rf $dirname
+
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End: